aboutsummaryrefslogtreecommitdiffstats
path: root/os_net_config/tests
diff options
context:
space:
mode:
authorDan Prince <dprince@redhat.com>2014-07-01 13:59:18 -0400
committerDan Prince <dprince@redhat.com>2014-07-01 13:59:18 -0400
commita58503a27b67571b8a534b43fc7e614b5557b64e (patch)
tree7abe039c9b298a29056807e81d4fb3502326bf06 /os_net_config/tests
parent2c18d75b41199ae673d07df8c0ee3e53d6ba9863 (diff)
Implement object json parsing functions.
Adds a from_json static method to all objects. Also adds a top level object_from_json function that can be used for all the interface and bridge types. (everything except addresses and routes). This should be useful for wiring processing JSON from the CLI.
Diffstat (limited to 'os_net_config/tests')
-rw-r--r--os_net_config/tests/test_objects.py138
1 files changed, 138 insertions, 0 deletions
diff --git a/os_net_config/tests/test_objects.py b/os_net_config/tests/test_objects.py
index 7ffd5b3..51a2793 100644
--- a/os_net_config/tests/test_objects.py
+++ b/os_net_config/tests/test_objects.py
@@ -12,10 +12,37 @@
# License for the specific language governing permissions and limitations
# under the License.
+import json
+
from os_net_config import objects
from os_net_config.tests import base
+class TestRoute(base.TestCase):
+
+ def test_from_json(self):
+ data = '{"next_hop": "172.19.0.1", "ip_netmask": "172.19.0.0/24"}'
+ route = objects.Route.from_json(json.loads(data))
+ self.assertEqual("172.19.0.1", route.next_hop)
+ self.assertEqual("172.19.0.0/24", route.ip_netmask)
+ self.assertEqual(False, route.default)
+
+ def test_from_json_default_route(self):
+ data = '{"next_hop": "172.19.0.1", "ip_netmask": "172.19.0.0/24", ' \
+ '"default": true}'
+ route = objects.Route.from_json(json.loads(data))
+ self.assertEqual("172.19.0.1", route.next_hop)
+ self.assertEqual("172.19.0.0/24", route.ip_netmask)
+ self.assertEqual(True, route.default)
+
+ data = '{"next_hop": "172.19.0.1", "ip_netmask": "172.19.0.0/24", ' \
+ '"default": "true"}'
+ route = objects.Route.from_json(json.loads(data))
+ self.assertEqual("172.19.0.1", route.next_hop)
+ self.assertEqual("172.19.0.0/24", route.ip_netmask)
+ self.assertEqual(True, route.default)
+
+
class TestAddress(base.TestCase):
def test_ipv4_address(self):
@@ -30,6 +57,23 @@ class TestAddress(base.TestCase):
self.assertEqual("ffff:ffff:ffff:ffff::", address.netmask)
self.assertEqual(6, address.version)
+ def test_from_json(self):
+ data = '{"ip_netmask": "192.0.2.5/24"}'
+ address = objects.Address.from_json(json.loads(data))
+ self.assertEqual("192.0.2.5", address.ip)
+ self.assertEqual("255.255.255.0", address.netmask)
+ self.assertEqual(4, address.version)
+
+ def test_from_json_invalid(self):
+ self.assertRaises(objects.InvalidConfigException,
+ objects.Address.from_json,
+ {})
+ data = '{"ip_netmask": false}'
+ json_data = json.loads(data)
+ self.assertRaises(objects.InvalidConfigException,
+ objects.Address.from_json,
+ json_data)
+
class TestInterface(base.TestCase):
@@ -39,3 +83,97 @@ class TestInterface(base.TestCase):
interface = objects.Interface('foo', addresses=[v4_addr, v6_addr])
self.assertEquals("192.168.1.1", interface.v4_addresses()[0].ip)
self.assertEquals("2001:abc:a::", interface.v6_addresses()[0].ip)
+
+ def test_from_json_dhcp(self):
+ data = '{"type": "interface", "name": "em1", "use_dhcp": true}'
+ interface = objects.object_from_json(json.loads(data))
+ self.assertEqual("em1", interface.name)
+ self.assertEqual(True, interface.use_dhcp)
+
+ def test_from_json_with_addresses(self):
+ data = """{
+"type": "interface",
+"name": "em1",
+"use_dhcp": false,
+"mtu": 1501,
+"addresses": [{
+ "ip_netmask": "192.0.2.1/24"
+}],
+"routes": [{
+ "next_hop": "192.0.2.1",
+ "ip_netmask": "192.0.2.1/24"
+}]
+}
+"""
+ interface = objects.object_from_json(json.loads(data))
+ self.assertEqual("em1", interface.name)
+ self.assertEqual(False, interface.use_dhcp)
+ self.assertEqual(False, interface.use_dhcpv6)
+ self.assertEqual(1501, interface.mtu)
+ address1 = interface.v4_addresses()[0]
+ self.assertEqual("192.0.2.1", address1.ip)
+ self.assertEqual("255.255.255.0", address1.netmask)
+ route1 = interface.routes[0]
+ self.assertEqual("192.0.2.1", route1.next_hop)
+ self.assertEqual("192.0.2.1/24", route1.ip_netmask)
+
+
+class TestVlan(base.TestCase):
+
+ def test_from_json_dhcp(self):
+ data = '{"type": "vlan", "device": "em1", "vlan_id": 16,' \
+ '"use_dhcp": true}'
+ vlan = objects.object_from_json(json.loads(data))
+ self.assertEqual("em1", vlan.device)
+ self.assertEqual(16, vlan.vlan_id)
+ self.assertEqual(True, vlan.use_dhcp)
+
+
+class TestBridge(base.TestCase):
+
+ def test_from_json_dhcp(self):
+ data = """{
+"type": "ovs_bridge",
+"name": "br-foo",
+"use_dhcp": true,
+"members": [{
+ "type": "interface",
+ "name": "em1"
+}]
+}
+"""
+ bridge = objects.object_from_json(json.loads(data))
+ self.assertEqual("br-foo", bridge.name)
+ self.assertEqual(True, bridge.use_dhcp)
+ interface1 = bridge.members[0]
+ self.assertEqual("em1", interface1.name)
+ self.assertEqual(True, interface1.ovs_port)
+ self.assertEqual("br-foo", interface1.bridge_name)
+
+
+class TestBond(base.TestCase):
+
+ def test_from_json_dhcp(self):
+ data = """{
+"type": "ovs_bond",
+"name": "bond1",
+"use_dhcp": true,
+"members": [
+ {
+ "type": "interface",
+ "name": "em1"
+ },
+ {
+ "type": "interface",
+ "name": "em2"
+ }
+]
+}
+"""
+ bridge = objects.object_from_json(json.loads(data))
+ self.assertEqual("bond1", bridge.name)
+ self.assertEqual(True, bridge.use_dhcp)
+ interface1 = bridge.members[0]
+ self.assertEqual("em1", interface1.name)
+ interface2 = bridge.members[1]
+ self.assertEqual("em2", interface2.name)