Added members to VmInst that will contain the availability_zone
[snaps.git] / snaps / openstack / tests / create_network_tests.py
index af5160b..a863a05 100644 (file)
@@ -15,6 +15,8 @@
 import unittest
 import uuid
 
+from neutronclient.common.exceptions import BadRequest
+
 from snaps.config.network import (
     NetworkConfig, SubnetConfig, SubnetConfigError, NetworkConfigError,
     PortConfigError, IPv6Mode)
@@ -24,7 +26,7 @@ from snaps.openstack.create_network import (
 from snaps.openstack.tests import openstack_tests
 from snaps.openstack.tests.os_source_file_test import (
     OSIntegrationTestCase, OSComponentTestCase)
-from snaps.openstack.utils import neutron_utils
+from snaps.openstack.utils import neutron_utils, keystone_utils
 from snaps.openstack.utils.tests import neutron_utils_tests
 from snaps.openstack.create_network import IPv6Mode as IPv6Mode_old
 
@@ -390,14 +392,15 @@ class CreateNetworkSuccessTests(OSIntegrationTestCase):
         Tests the creation of an OpenStack network without a router.
         """
         # Create Network
-        self.net_creator = OpenStackNetwork(self.os_creds,
-                                            self.net_config.network_settings)
+        self.net_creator = OpenStackNetwork(
+            self.os_creds, self.net_config.network_settings)
         self.net_creator.create()
 
         # Validate network was created
         self.assertTrue(neutron_utils_tests.validate_network(
-            self.neutron, self.net_creator.network_settings.name, True,
-            project_id=self.project_id))
+            self.neutron, self.keystone,
+            self.net_creator.network_settings.name, True,
+            self.os_creds.project_name))
 
         # Validate subnets
         self.assertTrue(neutron_utils_tests.validate_subnet(
@@ -410,20 +413,22 @@ class CreateNetworkSuccessTests(OSIntegrationTestCase):
         Tests the creation of an OpenStack network, it's deletion, then cleanup
         """
         # Create Network
-        self.net_creator = OpenStackNetwork(self.os_creds,
-                                            self.net_config.network_settings)
+        self.net_creator = OpenStackNetwork(
+            self.os_creds, self.net_config.network_settings)
         self.net_creator.create()
 
         # Validate network was created
         self.assertTrue(neutron_utils_tests.validate_network(
-            self.neutron, self.net_creator.network_settings.name, True,
-            self.project_id))
+            self.neutron, self.keystone,
+            self.net_creator.network_settings.name, True,
+            self.os_creds.project_name))
 
-        neutron_utils.delete_network(self.neutron,
-                                     self.net_creator.get_network())
+        neutron_utils.delete_network(
+            self.neutron, self.net_creator.get_network())
         self.assertIsNone(neutron_utils.get_network(
-            self.neutron, network_settings=self.net_creator.network_settings,
-            os_creds=self.os_creds, project_id=self.project_id))
+            self.neutron, self.keystone,
+            network_settings=self.net_creator.network_settings,
+            project_name=self.os_creds.project_name))
 
         # This shall not throw an exception here
         self.net_creator.clean()
@@ -433,8 +438,8 @@ class CreateNetworkSuccessTests(OSIntegrationTestCase):
         Tests the creation of an OpenStack network with a router.
         """
         # Create Network
-        self.net_creator = OpenStackNetwork(self.os_creds,
-                                            self.net_config.network_settings)
+        self.net_creator = OpenStackNetwork(
+            self.os_creds, self.net_config.network_settings)
         self.net_creator.create()
 
         # Create Router
@@ -444,8 +449,9 @@ class CreateNetworkSuccessTests(OSIntegrationTestCase):
 
         # Validate network was created
         self.assertTrue(neutron_utils_tests.validate_network(
-            self.neutron, self.net_creator.network_settings.name, True,
-            self.project_id))
+            self.neutron, self.keystone,
+            self.net_creator.network_settings.name, True,
+            self.os_creds.project_name))
 
         # Validate subnets
         self.assertTrue(neutron_utils_tests.validate_subnet(
@@ -455,7 +461,9 @@ class CreateNetworkSuccessTests(OSIntegrationTestCase):
 
         # Validate routers
         neutron_utils_tests.validate_router(
-            self.neutron, self.router_creator.router_settings.name, True)
+            self.neutron, self.keystone,
+            self.router_creator.router_settings.name,
+            self.os_creds.project_name, True)
 
         neutron_utils_tests.validate_interface_router(
             self.router_creator.get_internal_router_interface(),
@@ -468,12 +476,12 @@ class CreateNetworkSuccessTests(OSIntegrationTestCase):
         OpenStackNetwork object will not create a second.
         """
         # Create Network
-        self.net_creator = OpenStackNetwork(self.os_creds,
-                                            self.net_config.network_settings)
+        self.net_creator = OpenStackNetwork(
+            self.os_creds, self.net_config.network_settings)
         self.net_creator.create()
 
-        self.net_creator2 = OpenStackNetwork(self.os_creds,
-                                             self.net_config.network_settings)
+        self.net_creator2 = OpenStackNetwork(
+            self.os_creds, self.net_config.network_settings)
         self.net_creator2.create()
 
         self.assertEqual(self.net_creator.get_network().id,
@@ -481,32 +489,42 @@ class CreateNetworkSuccessTests(OSIntegrationTestCase):
 
     def test_create_network_router_admin_user_to_new_project(self):
         """
-        Tests the creation of an OpenStack network and router with the current
-        user to the admin project.
+        Tests the creation of an OpenStack network to the the current using
+        the credentials to the admin project.
         """
         # Create Network/Subnet where the project names have been changed
-        admin_project_name = self.admin_os_creds.project_name
-        self.net_config.network_settings.project_name = admin_project_name
-        self.net_config.network_settings.subnet_settings[0].project_name = \
-            admin_project_name
-        self.net_creator = OpenStackNetwork(self.os_creds,
-                                            self.net_config.network_settings)
+        project_name = self.os_creds.project_name
+        config = self.net_config.network_settings
+        config.project_name = project_name
+        config.subnet_settings[0].project_name = project_name
+
+        self.net_creator = OpenStackNetwork(self.admin_os_creds, config)
         self.net_creator.create()
 
         retrieved_net = neutron_utils.get_network(
-            self.neutron, network_settings=self.net_config.network_settings,
-            os_creds=self.os_creds, project_id=self.project_id)
+            self.neutron, self.keystone,
+            network_name=self.net_config.network_settings.name,
+            project_name=self.os_creds.project_name)
 
         self.assertEqual(self.net_creator.get_network().id, retrieved_net.id)
 
+        # Initialize with actual credentials
+        config.project_name = None
+        config.subnet_settings[0].project_name = None
+        proj_net_creator = OpenStackNetwork(self.os_creds, config)
+        proj_net = proj_net_creator.create()
+        self.assertEqual(retrieved_net, proj_net)
+
         # Create Router
-        self.net_config.router_settings.project_name = admin_project_name
+        self.net_config.router_settings.project_name = project_name
         self.router_creator = create_router.OpenStackRouter(
-            self.os_creds, self.net_config.router_settings)
+            self.admin_os_creds, self.net_config.router_settings)
         self.router_creator.create()
 
         retrieved_router = neutron_utils.get_router(
-            self.neutron, router_settings=self.router_creator.router_settings)
+            self.neutron, self.keystone,
+            router_settings=self.router_creator.router_settings,
+            project_name=self.os_creds.project_name)
         self.assertEqual(
             self.router_creator.get_router().id, retrieved_router.id)
 
@@ -520,13 +538,14 @@ class CreateNetworkSuccessTests(OSIntegrationTestCase):
         self.net_config.network_settings.project_name = new_project_name
         self.net_config.network_settings.subnet_settings[0].project_name = \
             new_project_name
-        self.net_creator = OpenStackNetwork(self.admin_os_creds,
-                                            self.net_config.network_settings)
+        self.net_creator = OpenStackNetwork(
+            self.admin_os_creds, self.net_config.network_settings)
         self.net_creator.create()
 
         retrieved_net = neutron_utils.get_network(
-            self.neutron, network_settings=self.net_config.network_settings,
-            os_creds=self.os_creds, project_id=self.project_id)
+            self.neutron, self.keystone,
+            network_settings=self.net_config.network_settings,
+            project_name=self.os_creds.project_name)
 
         self.assertEqual(self.net_creator.get_network().id, retrieved_net.id)
 
@@ -537,11 +556,146 @@ class CreateNetworkSuccessTests(OSIntegrationTestCase):
         self.router_creator.create()
 
         retrieved_router = neutron_utils.get_router(
-            self.neutron, router_settings=self.router_creator.router_settings)
+            self.neutron, self.keystone,
+            router_settings=self.router_creator.router_settings,
+            project_name=self.os_creds.project_name)
         self.assertEqual(
             self.router_creator.get_router().id, retrieved_router.id)
 
 
+class CreateNetworkGatewayTests(OSIntegrationTestCase):
+    """
+    Test for the CreateNetwork class defined in create_nework.py
+    """
+
+    def setUp(self):
+        """
+        Sets up object for test
+        """
+        super(self.__class__, self).__start__()
+
+        self.guid = self.__class__.__name__ + '-' + str(uuid.uuid4())
+
+        self.neutron = neutron_utils.neutron_client(self.os_creds)
+
+        self.ip_prfx = '10.1.0.'
+
+        # Initialize for cleanup
+        self.net_creator = None
+
+    def tearDown(self):
+        """
+        Cleans the network
+        """
+        if self.net_creator:
+            self.net_creator.clean()
+
+        super(self.__class__, self).__clean__()
+
+    def test_create_subnet_default_gateway_ip(self):
+        """
+        Tests the creation of an OpenStack network with a subnet that has a
+        default value assigned to the gateway IP.
+        """
+        # Create Network
+        subnet_config = SubnetConfig(
+            name=self.guid + '-subnet', cidr=self.ip_prfx + '0/24')
+        net_config = NetworkConfig(
+            name=self.guid + '-net', subnets=[subnet_config])
+        self.net_creator = OpenStackNetwork(
+            self.os_creds, net_config)
+        out_net = self.net_creator.create()
+
+        # Validate network was created
+        self.assertTrue(neutron_utils_tests.validate_network(
+            self.neutron, self.keystone,
+            self.net_creator.network_settings.name, True,
+            self.os_creds.project_name))
+
+        # Validate subnets
+        self.assertTrue(neutron_utils_tests.validate_subnet(
+            self.neutron,
+            self.net_creator.network_settings.subnet_settings[0].name,
+            self.net_creator.network_settings.subnet_settings[0].cidr, True))
+
+        self.assertEqual(self.ip_prfx + '1', out_net.subnets[0].gateway_ip)
+
+    def test_create_subnet_valid_gateway_ip(self):
+        """
+        Tests the creation of an OpenStack network with a subnet that has a
+        valid value assigned to the gateway IP.
+        """
+        # Create Network
+        subnet_config = SubnetConfig(
+            name=self.guid + '-subnet', cidr=self.ip_prfx + '0/24',
+            gateway_ip=self.ip_prfx + '2')
+        net_config = NetworkConfig(
+            name=self.guid + '-net', subnets=[subnet_config])
+        self.net_creator = OpenStackNetwork(
+            self.os_creds, net_config)
+        out_net = self.net_creator.create()
+
+        # Validate network was created
+        self.assertTrue(neutron_utils_tests.validate_network(
+            self.neutron, self.keystone,
+            self.net_creator.network_settings.name, True,
+            self.os_creds.project_name))
+
+        # Validate subnets
+        self.assertTrue(neutron_utils_tests.validate_subnet(
+            self.neutron,
+            self.net_creator.network_settings.subnet_settings[0].name,
+            self.net_creator.network_settings.subnet_settings[0].cidr, True))
+
+        self.assertEqual(self.ip_prfx + '2', out_net.subnets[0].gateway_ip)
+
+    def test_create_subnet_no_gateway(self):
+        """
+        Tests the creation of an OpenStack network with a subnet that has a
+        valid value assigned to the gateway IP.
+        """
+        # Create Network
+        subnet_config = SubnetConfig(
+            name=self.guid + '-subnet', cidr=self.ip_prfx + '0/24',
+            gateway_ip='none')
+        net_config = NetworkConfig(
+            name=self.guid + '-net', subnets=[subnet_config])
+        self.net_creator = OpenStackNetwork(
+            self.os_creds, net_config)
+        out_net = self.net_creator.create()
+
+        # Validate network was created
+        self.assertTrue(neutron_utils_tests.validate_network(
+            self.neutron, self.keystone,
+            self.net_creator.network_settings.name, True,
+            self.os_creds.project_name))
+
+        # Validate subnets
+        self.assertTrue(neutron_utils_tests.validate_subnet(
+            self.neutron,
+            self.net_creator.network_settings.subnet_settings[0].name,
+            self.net_creator.network_settings.subnet_settings[0].cidr, True))
+
+        self.assertIsNone(out_net.subnets[0].gateway_ip)
+
+    def test_create_subnet_invalid_gateway_ip(self):
+        """
+        Tests the creation of an OpenStack network with a subnet that has an
+        invalid value assigned to the gateway IP.
+        """
+        # Create Network
+        subnet_config = SubnetConfig(
+            name=self.guid + '-subnet', cidr=self.ip_prfx + '0/24',
+            gateway_ip='foo')
+        net_config = NetworkConfig(
+            name=self.guid + '-net', subnets=[subnet_config])
+        self.net_creator = OpenStackNetwork(
+            self.os_creds, net_config)
+
+        with self.assertRaises(BadRequest):
+            self.net_creator.create()
+
+
 class CreateNetworkIPv6Tests(OSIntegrationTestCase):
     """
     Test for the CreateNetwork class defined in create_nework.py when
@@ -584,8 +738,9 @@ class CreateNetworkIPv6Tests(OSIntegrationTestCase):
 
         # Validate network was created
         self.assertTrue(neutron_utils_tests.validate_network(
-            self.neutron, self.net_creator.network_settings.name, True,
-            self.project_id))
+            self.neutron, self.keystone,
+            self.net_creator.network_settings.name, True,
+            self.os_creds.project_name))
 
         network = self.net_creator.get_network()
         self.assertEqual(1, len(network.subnets))
@@ -657,6 +812,7 @@ class CreateNetworkTypeTests(OSComponentTestCase):
             net_name=guid + '-pub-net', subnet_name=guid + '-pub-subnet')
 
         self.neutron = neutron_utils.neutron_client(self.os_creds)
+        self.keystone = keystone_utils.keystone_client(self.os_creds)
 
         # Initialize for cleanup
         self.net_creator = None
@@ -685,8 +841,8 @@ class CreateNetworkTypeTests(OSComponentTestCase):
 
         # Validate network was created
         self.assertTrue(neutron_utils_tests.validate_network(
-            self.neutron, net_settings.name, True,
-            self.net_creator.project_id))
+            self.neutron, self.keystone, net_settings.name, True,
+            self.os_creds.project_name))
 
         self.assertEquals(network_type, network.type)
 
@@ -715,8 +871,8 @@ class CreateNetworkTypeTests(OSComponentTestCase):
 
         # Validate network was created
         self.assertTrue(neutron_utils_tests.validate_network(
-            self.neutron, net_settings.name, True,
-            self.net_creator.project_id))
+            self.neutron, self.keystone, net_settings.name, True,
+            self.os_creds.project_name))
 
         self.assertEquals(network_type, network.type)
 
@@ -737,7 +893,8 @@ class CreateNetworkTypeTests(OSComponentTestCase):
 
         # Validate network was created
         self.assertTrue(neutron_utils_tests.validate_network(
-            self.neutron, net_settings.name, True, project_id=self.project_id))
+            self.neutron, self.keystone, net_settings.name, True,
+            self.os_creds.project_name))
 
         self.assertEqual(network_type, network.type)
 
@@ -760,7 +917,8 @@ class CreateNetworkTypeTests(OSComponentTestCase):
 
         # Validate network was created
         self.assertTrue(neutron_utils_tests.validate_network(
-            self.neutron, net_settings.name, True))
+            self.neutron, self.keystone, net_settings.name, True,
+            self.os_creds.project_name))
 
         self.assertEquals(network_type, network.type)