Added method to OpenStackHeatStack to return OpenStackRouter objects.
[snaps.git] / snaps / domain / test / network_tests.py
index a2f1374..3e449b4 100644 (file)
 # limitations under the License.
 
 import unittest
-from snaps.domain.network import SecurityGroup, SecurityGroupRule
+from snaps.domain.network import (
+    Port, SecurityGroup, SecurityGroupRule, Router, InterfaceRouter, Network,
+    Subnet)
+
+
+class NetworkObjectTests(unittest.TestCase):
+    """
+    Tests the construction of the snaps.domain.network.Network class
+    """
+
+    def test_construction_kwargs_1(self):
+        network = Network(
+            **{'name': 'foo', 'id': 'bar', 'provider:network_type': 'flat',
+               'admin_state_up': False, 'shared': True,
+               'router:external': False})
+        self.assertEqual('foo', network.name)
+        self.assertEqual('bar', network.id)
+        self.assertEqual('flat', network.type)
+        self.assertFalse(network.admin_state_up)
+        self.assertFalse(network.external)
+        self.assertTrue(network.shared)
+
+    def test_construction_kwargs_2(self):
+        network = Network(
+            **{'name': 'foo', 'id': 'bar', 'type': 'flat',
+               'admin_state_up': False, 'shared': True,
+               'external': False})
+        self.assertEqual('foo', network.name)
+        self.assertEqual('bar', network.id)
+        self.assertEqual('flat', network.type)
+        self.assertFalse(network.admin_state_up)
+        self.assertFalse(network.external)
+        self.assertTrue(network.shared)
+
+    def test_construction_named(self):
+        network = Network(
+            name='foo', id='bar', type='flat', admin_state_up=False,
+            shared=True, external=False)
+        self.assertEqual('foo', network.name)
+        self.assertEqual('bar', network.id)
+        self.assertEqual('flat', network.type)
+        self.assertFalse(network.admin_state_up)
+        self.assertFalse(network.external)
+        self.assertTrue(network.shared)
+
+
+class SubnetObjectTests(unittest.TestCase):
+    """
+    Tests the construction of the snaps.domain.network.Subnet class
+    """
+
+    def test_construction_kwargs(self):
+        subnet = Subnet(
+            **{'name': 'foo', 'id': 'bar', 'cidr': '10.0.0.0/24',
+               'ip_version': 4, 'gateway_ip': '10.0.0.1', 'enable_dhcp': True,
+               'dns_nameservers': ['8.8.8.8'], 'host_routes': list(),
+               'ipv6_ra_mode': 'hello', 'ipv6_address_mode': 'world'})
+        self.assertEqual('foo', subnet.name)
+        self.assertEqual('bar', subnet.id)
+        self.assertEqual('10.0.0.0/24', subnet.cidr)
+        self.assertEqual(4, subnet.ip_version)
+        self.assertEqual('10.0.0.1', subnet.gateway_ip)
+        self.assertTrue(subnet.enable_dhcp)
+        self.assertEqual(1, len(subnet.dns_nameservers))
+        self.assertEqual('8.8.8.8', subnet.dns_nameservers[0])
+        self.assertEqual(list(), subnet.host_routes)
+        self.assertEqual('hello', subnet.ipv6_ra_mode)
+        self.assertEqual('world', subnet.ipv6_address_mode)
+
+    def test_construction_named(self):
+        subnet = Subnet(
+            name='foo', id='bar', cidr='10.0.0.0/24',
+            ip_version=4, gateway_ip='10.0.0.1', enable_dhcp=True,
+            dns_nameservers=['8.8.8.8'], host_routes=list(),
+            ipv6_ra_mode='hello', ipv6_address_mode='world')
+        self.assertEqual('foo', subnet.name)
+        self.assertEqual('bar', subnet.id)
+        self.assertEqual('10.0.0.0/24', subnet.cidr)
+        self.assertEqual(4, subnet.ip_version)
+        self.assertEqual('10.0.0.1', subnet.gateway_ip)
+        self.assertTrue(subnet.enable_dhcp)
+        self.assertEqual(1, len(subnet.dns_nameservers))
+        self.assertEqual('8.8.8.8', subnet.dns_nameservers[0])
+        self.assertEqual(list(), subnet.host_routes)
+        self.assertEqual('hello', subnet.ipv6_ra_mode)
+        self.assertEqual('world', subnet.ipv6_address_mode)
+
+
+class PortDomainObjectTests(unittest.TestCase):
+    """
+    Tests the construction of the snaps.domain.network.Port class
+    """
+
+    def test_construction_ips_kwargs(self):
+        ips = ['10', '11']
+        port = Port(
+            **{'name': 'foo', 'id': 'bar', 'description': 'test desc',
+               'ips': ips, 'mac_address': 'abc123',
+               'allowed_address_pairs': list(), 'admin_state_up': False,
+               'device_id': 'def456', 'device_owner': 'joe',
+               'network_id': 'ghi789', 'port_security_enabled': False,
+               'security_groups': list(), 'tenant_id': 'jkl098'})
+        self.assertEqual('foo', port.name)
+        self.assertEqual('bar', port.id)
+        self.assertEqual('test desc', port.description)
+        self.assertEqual(ips, port.ips)
+        self.assertEqual('abc123', port.mac_address)
+        self.assertEqual(list(), port.allowed_address_pairs)
+        self.assertFalse(port.admin_state_up)
+        self.assertEqual('def456', port.device_id)
+        self.assertEqual('joe', port.device_owner)
+        self.assertEqual('ghi789', port.network_id)
+        self.assertFalse(port.port_security_enabled)
+        self.assertEqual(list(), port.security_groups)
+        self.assertEqual(list(), port.security_groups)
+
+    def test_construction_fixed_ips_kwargs(self):
+        ips = ['10', '11']
+        port = Port(
+            **{'name': 'foo', 'id': 'bar', 'description': 'test desc',
+               'fixed_ips': ips, 'mac_address': 'abc123',
+               'allowed_address_pairs': list(), 'admin_state_up': False,
+               'device_id': 'def456', 'device_owner': 'joe',
+               'network_id': 'ghi789', 'port_security_enabled': False,
+               'security_groups': list(), 'tenant_id': 'jkl098'})
+        self.assertEqual('foo', port.name)
+        self.assertEqual('bar', port.id)
+        self.assertEqual('test desc', port.description)
+        self.assertEqual(ips, port.ips)
+        self.assertEqual('abc123', port.mac_address)
+        self.assertEqual(list(), port.allowed_address_pairs)
+        self.assertFalse(port.admin_state_up)
+        self.assertEqual('def456', port.device_id)
+        self.assertEqual('joe', port.device_owner)
+        self.assertEqual('ghi789', port.network_id)
+        self.assertFalse(port.port_security_enabled)
+        self.assertEqual(list(), port.security_groups)
+        self.assertEqual(list(), port.security_groups)
+
+    def test_construction_named_ips(self):
+        ips = ['10', '11']
+        port = Port(
+            mac_address='abc123', description='test desc', ips=ips, id='bar',
+            name='foo', allowed_address_pairs=list(), admin_state_up=False,
+            device_id='def456', device_owner='joe', network_id='ghi789',
+            port_security_enabled=False, security_groups=list(),
+            tenant_id='jkl098')
+        self.assertEqual('foo', port.name)
+        self.assertEqual('bar', port.id)
+        self.assertEqual('test desc', port.description)
+        self.assertEqual(ips, port.ips)
+        self.assertEqual('abc123', port.mac_address)
+        self.assertEqual(list(), port.allowed_address_pairs)
+        self.assertFalse(port.admin_state_up)
+        self.assertEqual('def456', port.device_id)
+        self.assertEqual('joe', port.device_owner)
+        self.assertEqual('ghi789', port.network_id)
+        self.assertFalse(port.port_security_enabled)
+        self.assertEqual(list(), port.security_groups)
+        self.assertEqual(list(), port.security_groups)
+
+    def test_construction_named_fixed_ips(self):
+        ips = ['10', '11']
+        port = Port(
+            mac_address='abc123', description='test desc', fixed_ips=ips,
+            id='bar', name='foo', allowed_address_pairs=list(),
+            admin_state_up=False, device_id='def456', device_owner='joe',
+            network_id='ghi789', port_security_enabled=False,
+            security_groups=list(), tenant_id='jkl098')
+        self.assertEqual('foo', port.name)
+        self.assertEqual('bar', port.id)
+        self.assertEqual('test desc', port.description)
+        self.assertEqual(ips, port.ips)
+        self.assertEqual('abc123', port.mac_address)
+        self.assertEqual(list(), port.allowed_address_pairs)
+        self.assertFalse(port.admin_state_up)
+        self.assertEqual('def456', port.device_id)
+        self.assertEqual('joe', port.device_owner)
+        self.assertEqual('ghi789', port.network_id)
+        self.assertFalse(port.port_security_enabled)
+        self.assertEqual(list(), port.security_groups)
+        self.assertEqual(list(), port.security_groups)
+
+
+class RouterDomainObjectTests(unittest.TestCase):
+    """
+    Tests the construction of the snaps.domain.network.Router class
+    """
+
+    def test_construction_kwargs(self):
+        router = Router(
+            **{'name': 'name', 'id': 'id', 'status': 'hello',
+               'tenant_id': '1234', 'admin_state_up': 'yes',
+               'external_gateway_info': 'no'})
+        self.assertEqual('name', router.name)
+        self.assertEqual('id', router.id)
+        self.assertEqual('hello', router.status)
+        self.assertEqual('1234', router.tenant_id)
+        self.assertEqual('yes', router.admin_state_up)
+        self.assertIsNone(router.external_fixed_ips)
+        self.assertIsNone(router.external_network_id)
+
+    def test_construction_named(self):
+        router = Router(
+            external_gateway_info='no', admin_state_up='yes', tenant_id='1234',
+            status='hello', id='id', name='name')
+        self.assertEqual('name', router.name)
+        self.assertEqual('id', router.id)
+        self.assertEqual('hello', router.status)
+        self.assertEqual('1234', router.tenant_id)
+        self.assertEqual('yes', router.admin_state_up)
+        self.assertIsNone(router.external_fixed_ips)
+        self.assertIsNone(router.external_network_id)
+
+    def test_ext_gateway_named(self):
+        ext_gateway = {'network_id': '123',
+                       'external_fixed_ips': ['456', '789']}
+        router = Router(
+            external_fixed_ips=['456', '789'], external_network_id='123',
+            admin_state_up='yes', tenant_id='1234', status='hello', id='id',
+            name='name')
+        self.assertEqual('name', router.name)
+        self.assertEqual('id', router.id)
+        self.assertEqual('hello', router.status)
+        self.assertEqual('1234', router.tenant_id)
+        self.assertEqual('yes', router.admin_state_up)
+        self.assertEqual(['456', '789'], router.external_fixed_ips)
+        self.assertEqual('123', router.external_network_id)
+
+
+    def test_ext_net_ips_named(self):
+        ext_gateway = {'network_id': '123',
+                       'external_fixed_ips': ['456', '789']}
+        router = Router(
+            external_gateway_info=ext_gateway, admin_state_up='yes',
+            tenant_id='1234', status='hello', id='id', name='name')
+        self.assertEqual('name', router.name)
+        self.assertEqual('id', router.id)
+        self.assertEqual('hello', router.status)
+        self.assertEqual('1234', router.tenant_id)
+        self.assertEqual('yes', router.admin_state_up)
+        self.assertEqual(['456', '789'], router.external_fixed_ips)
+        self.assertEqual('123', router.external_network_id)
+
+
+class InterfaceRouterDomainObjectTests(unittest.TestCase):
+    """
+    Tests the construction of the snaps.domain.network.InterfaceRouter class
+    """
+
+    def test_construction_kwargs(self):
+        intf_router = InterfaceRouter(
+            **{'id': 'id', 'subnet_id': 'foo', 'port_id': 'bar'})
+        self.assertEqual('id', intf_router.id)
+        self.assertEqual('foo', intf_router.subnet_id)
+        self.assertEqual('bar', intf_router.port_id)
+
+    def test_construction_named(self):
+        intf_router = InterfaceRouter(port_id='bar', subnet_id='foo', id='id')
+        self.assertEqual('id', intf_router.id)
+        self.assertEqual('foo', intf_router.subnet_id)
+        self.assertEqual('bar', intf_router.port_id)
 
 
 class SecurityGroupDomainObjectTests(unittest.TestCase):
     """
-    Tests the construction of the snaps.domain.test.SecurityGroup class
+    Tests the construction of the snaps.domain.network.SecurityGroup class
     """
 
     def test_construction_proj_id_kwargs(self):
         sec_grp = SecurityGroup(
-            **{'name': 'name', 'id': 'id',
-               'project_id': 'foo'})
+            **{'name': 'name', 'id': 'id', 'project_id': 'foo',
+               'description': 'test desc'})
         self.assertEqual('name', sec_grp.name)
         self.assertEqual('id', sec_grp.id)
+        self.assertEqual('test desc', sec_grp.description)
         self.assertEqual('foo', sec_grp.project_id)
 
     def test_construction_tenant_id_kwargs(self):
@@ -37,23 +299,26 @@ class SecurityGroupDomainObjectTests(unittest.TestCase):
         self.assertEqual('name', sec_grp.name)
         self.assertEqual('id', sec_grp.id)
         self.assertEqual('foo', sec_grp.project_id)
+        self.assertIsNone(sec_grp.description)
 
     def test_construction_named(self):
-        sec_grp = SecurityGroup(tenant_id='foo', id='id', name='name')
+        sec_grp = SecurityGroup(description='test desc', tenant_id='foo',
+                                id='id', name='name')
         self.assertEqual('name', sec_grp.name)
         self.assertEqual('id', sec_grp.id)
+        self.assertEqual('test desc', sec_grp.description)
         self.assertEqual('foo', sec_grp.project_id)
 
 
 class SecurityGroupRuleDomainObjectTests(unittest.TestCase):
     """
-    Tests the construction of the snaps.domain.test.SecurityGroupRule class
+    Tests the construction of the snaps.domain.network.SecurityGroupRule class
     """
 
     def test_construction_kwargs(self):
         sec_grp_rule = SecurityGroupRule(
-            **{'id': 'id', 'security_group_id': 'grp_id', 'description': 'desc',
-               'direction': 'dir', 'ethertype': 'eType',
+            **{'id': 'id', 'security_group_id': 'grp_id',
+               'description': 'desc', 'direction': 'dir', 'ethertype': 'eType',
                'port_range_min': '10.0.0.100', 'port_range_max': '10.0.0.200',
                'protocol': 'proto', 'remote_group_id': 'group_id',
                'remote_ip_prefix': 'ip_prefix'})