diff options
author | Dan Prince <dprince@redhat.com> | 2014-07-01 13:59:18 -0400 |
---|---|---|
committer | Dan Prince <dprince@redhat.com> | 2014-07-01 13:59:18 -0400 |
commit | a58503a27b67571b8a534b43fc7e614b5557b64e (patch) | |
tree | 7abe039c9b298a29056807e81d4fb3502326bf06 /os_net_config/tests | |
parent | 2c18d75b41199ae673d07df8c0ee3e53d6ba9863 (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.py | 138 |
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) |