Reformat auth_url based on the ID API version.
[snaps.git] / snaps / openstack / tests / create_network_tests.py
index bf6c629..e941c67 100644 (file)
@@ -17,7 +17,10 @@ import uuid
 
 from snaps.openstack import create_router
 from snaps.openstack.create_network import (OpenStackNetwork, NetworkSettings,
-                                            SubnetSettings, PortSettings)
+                                            SubnetSettings, PortSettings,
+                                            NetworkSettingsError,
+                                            SubnetSettingsError,
+                                            PortSettingsError)
 from snaps.openstack.tests import openstack_tests
 from snaps.openstack.tests.os_source_file_test import (OSIntegrationTestCase,
                                                        OSComponentTestCase)
@@ -33,11 +36,11 @@ class NetworkSettingsUnitTests(unittest.TestCase):
     """
 
     def test_no_params(self):
-        with self.assertRaises(Exception):
+        with self.assertRaises(NetworkSettingsError):
             NetworkSettings()
 
     def test_empty_config(self):
-        with self.assertRaises(Exception):
+        with self.assertRaises(NetworkSettingsError):
             NetworkSettings(**dict())
 
     def test_name_only(self):
@@ -102,19 +105,19 @@ class SubnetSettingsUnitTests(unittest.TestCase):
     """
 
     def test_no_params(self):
-        with self.assertRaises(Exception):
+        with self.assertRaises(SubnetSettingsError):
             SubnetSettings()
 
     def test_empty_config(self):
-        with self.assertRaises(Exception):
+        with self.assertRaises(SubnetSettingsError):
             SubnetSettings(**dict())
 
     def test_name_only(self):
-        with self.assertRaises(Exception):
+        with self.assertRaises(SubnetSettingsError):
             SubnetSettings(name='foo')
 
     def test_config_with_name_only(self):
-        with self.assertRaises(Exception):
+        with self.assertRaises(SubnetSettingsError):
             SubnetSettings(**{'name': 'foo'})
 
     def test_name_cidr_only(self):
@@ -216,19 +219,19 @@ class PortSettingsUnitTests(unittest.TestCase):
     """
 
     def test_no_params(self):
-        with self.assertRaises(Exception):
+        with self.assertRaises(PortSettingsError):
             PortSettings()
 
     def test_empty_config(self):
-        with self.assertRaises(Exception):
+        with self.assertRaises(PortSettingsError):
             PortSettings(**dict())
 
     def test_name_only(self):
-        with self.assertRaises(Exception):
+        with self.assertRaises(PortSettingsError):
             PortSettings(name='foo')
 
     def test_config_name_only(self):
-        with self.assertRaises(Exception):
+        with self.assertRaises(PortSettingsError):
             PortSettings(**{'name': 'foo'})
 
     def test_name_netname_only(self):
@@ -458,8 +461,68 @@ class CreateNetworkSuccessTests(OSIntegrationTestCase):
                                              self.net_config.network_settings)
         self.net_creator2.create()
 
-        self.assertEqual(self.net_creator.get_network()['network']['id'],
-                         self.net_creator2.get_network()['network']['id'])
+        self.assertEqual(self.net_creator.get_network().id,
+                         self.net_creator2.get_network().id)
+
+    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.
+        """
+        # 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)
+        self.net_creator.create()
+
+        retrieved_net = neutron_utils.get_network(
+            self.neutron, self.net_config.network_settings.name)
+
+        self.assertEqual(self.net_creator.get_network().id, retrieved_net.id)
+
+        # Create Router
+        self.net_config.router_settings.project_name = admin_project_name
+        self.router_creator = create_router.OpenStackRouter(
+            self.os_creds, self.net_config.router_settings)
+        self.router_creator.create()
+
+        retrieved_router = neutron_utils.get_router_by_name(
+            self.neutron, self.router_creator.get_router().name)
+        self.assertEqual(
+            self.router_creator.get_router().id, retrieved_router.id)
+
+    def test_create_network_router_new_user_to_admin_project(self):
+        """
+        Tests the creation of an OpenStack network and router with the admin
+        user to the new project.
+        """
+        # Create Network/Subnet where the project names have been changed
+        new_project_name = self.os_creds.project_name
+        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.create()
+
+        retrieved_net = neutron_utils.get_network(
+            self.neutron, self.net_config.network_settings.name)
+
+        self.assertEqual(self.net_creator.get_network().id, retrieved_net.id)
+
+        # Create Router
+        self.net_config.router_settings.project_name = new_project_name
+        self.router_creator = create_router.OpenStackRouter(
+            self.admin_os_creds, self.net_config.router_settings)
+        self.router_creator.create()
+
+        retrieved_router = neutron_utils.get_router_by_name(
+            self.neutron, self.router_creator.get_router().name)
+        self.assertEqual(
+            self.router_creator.get_router().id, retrieved_router.id)
 
 
 class CreateNetworkTypeTests(OSComponentTestCase):
@@ -502,26 +565,26 @@ class CreateNetworkTypeTests(OSComponentTestCase):
                     False)
             self.net_creator.clean()
 
-    # TODO - determine why this is not working on Newton
-    #        - Unable to create the network. No tenant network is available for allocation.
-    # def test_create_network_type_vlan(self):
-        """
-    #     Tests the creation of an OpenStack network of type vlan.
-    #     """
-    #     # Create Network
-    #     network_type = 'vlan'
-    #     net_settings = NetworkSettings(name=self.net_config.network_settings.name,
-    #                                    subnet_settings=self.net_config.network_settings.subnet_settings,
-    #                                    network_type=network_type)
-    #
-    #     # When setting the network_type, creds must be admin
-    #     self.net_creator = OpenStackNetwork(self.os_creds, net_settings)
-    #     network = self.net_creator.create()
-    #
-    #     # Validate network was created
-    #     neutron_utils_tests.validate_network(self.neutron, net_settings.name, True)
-    #
-    #     self.assertEquals(network_type, network['network']['provider:network_type'])
+    def test_create_network_type_vlan(self):
+        """
+        Tests the creation of an OpenStack network of type vlan.
+        """
+        # Create Network
+        network_type = 'vlan'
+        net_settings = NetworkSettings(
+            name=self.net_config.network_settings.name,
+            subnet_settings=self.net_config.network_settings.subnet_settings,
+            network_type=network_type)
+
+        # When setting the network_type, creds must be admin
+        self.net_creator = OpenStackNetwork(self.os_creds, net_settings)
+        network = self.net_creator.create()
+
+        # Validate network was created
+        neutron_utils_tests.validate_network(
+            self.neutron, net_settings.name, True)
+
+        self.assertEquals(network_type, network.type)
 
     def test_create_network_type_vxlan(self):
         """
@@ -542,33 +605,30 @@ class CreateNetworkTypeTests(OSComponentTestCase):
         neutron_utils_tests.validate_network(self.neutron, net_settings.name,
                                              True)
 
-        self.assertEqual(network_type,
-                         network['network']['provider:network_type'])
-
-    # TODO - determine what value we need to place into physical_network
-    #        - Do not know what vaule to place into the 'physical_network' setting.
-    # def test_create_network_type_flat(self):
-    #     """
-    #     Tests the creation of an OpenStack network of type flat.
-    #     """
-    #     # Create Network
-    #     network_type = 'flat'
-    #
-    #     # Unable to find documentation on how to find a value that will work here.
-    #     # https://visibilityspots.org/vlan-flat-neutron-provider.html
-    #     # https://community.rackspace.com/products/f/45/t/4225
-    #     # It appears that this may be due to how OPNFV is configuring OpenStack.
-    #     physical_network = '???'
-    #     net_settings = NetworkSettings(name=self.net_config.network_settings.name,
-    #                                    subnet_settings=self.net_config.network_settings.subnet_settings,
-    #                                    network_type=network_type, physical_network=physical_network)
-    #     self.net_creator = OpenStackNetwork(self.os_creds, net_settings)
-    #     network = self.net_creator.create()
-    #
-    #     # Validate network was created
-    #     neutron_utils_tests.validate_network(self.neutron, net_settings.name, True)
-    #
-    #     self.assertEquals(network_type, network['network']['provider:network_type'])
+        self.assertEqual(network_type, network.type)
+
+    def test_create_network_type_flat(self):
+        """
+        Tests the creation of an OpenStack network of type flat.
+        """
+        # Create Network
+        network_type = 'flat'
+
+        # This value must be variable to work on all OpenStack pods
+        physical_network = 'datacentre'
+
+        net_settings = NetworkSettings(
+            name=self.net_config.network_settings.name,
+            subnet_settings=self.net_config.network_settings.subnet_settings,
+            network_type=network_type, physical_network=physical_network)
+        self.net_creator = OpenStackNetwork(self.os_creds, net_settings)
+        network = self.net_creator.create()
+
+        # Validate network was created
+        neutron_utils_tests.validate_network(
+            self.neutron, net_settings.name, True)
+
+        self.assertEquals(network_type, network.type)
 
     def test_create_network_type_foo(self):
         """