Added MTU network config and updated flavor_metadata test support
[snaps.git] / snaps / openstack / tests / os_source_file_test.py
index b361ea8..bd98ad3 100644 (file)
@@ -31,7 +31,8 @@ dev_os_env_file = pkg_resources.resource_filename(
 class OSComponentTestCase(unittest.TestCase):
 
     def __init__(self, method_name='runTest', os_creds=None, ext_net_name=None,
-                 image_metadata=None, log_level=logging.DEBUG):
+                 flavor_metadata=None, image_metadata=None,
+                 log_level=logging.DEBUG):
         """
         Super for test classes requiring a connection to OpenStack
         :param method_name: default 'runTest'
@@ -39,6 +40,8 @@ class OSComponentTestCase(unittest.TestCase):
                          in the package snaps.openstack.tests.conf.os_env.yaml
         :param ext_net_name: the name of the external network that is used for
                              creating routers for floating IPs
+        :param flavor_metadata: dict() to be sent directly into the Nova client
+                                generally used for page sizes
         :param image_metadata: ability to override images being used in the
                                tests (see examples/image-metadata)
         :param log_level: the logging level of your test run (default DEBUG)
@@ -53,17 +56,26 @@ class OSComponentTestCase(unittest.TestCase):
             self.os_creds = openstack_tests.get_credentials(
                 dev_os_env_file=dev_os_env_file)
 
+        self.os_session = keystone_utils.keystone_session(self.os_creds)
         self.ext_net_name = ext_net_name
 
         if not self.ext_net_name and file_utils.file_exists(dev_os_env_file):
             test_conf = file_utils.read_yaml(dev_os_env_file)
             self.ext_net_name = test_conf.get('ext_net')
 
+        if flavor_metadata:
+            self.flavor_metadata = flavor_metadata
+        else:
+            os_env_dict = file_utils.read_yaml(dev_os_env_file)
+            flavor_metadata = os_env_dict.get('flavor_metadata')
+            if flavor_metadata:
+                self.flavor_metadata = {'metadata': flavor_metadata}
         self.image_metadata = image_metadata
 
     @staticmethod
     def parameterize(testcase_klass, os_creds, ext_net_name,
-                     image_metadata=None, log_level=logging.DEBUG):
+                     flavor_metadata=None, image_metadata=None,
+                     log_level=logging.DEBUG):
         """ Create a suite containing all tests taken from the given
             subclass, passing them the parameter 'param'.
         """
@@ -71,10 +83,18 @@ class OSComponentTestCase(unittest.TestCase):
         test_names = test_loader.getTestCaseNames(testcase_klass)
         suite = unittest.TestSuite()
         for name in test_names:
-            suite.addTest(testcase_klass(name, os_creds, ext_net_name,
-                                         image_metadata, log_level))
+            suite.addTest(testcase_klass(
+                name, os_creds, ext_net_name, flavor_metadata, image_metadata,
+                log_level))
         return suite
 
+    def __clean__(self):
+        """
+        Cleans up keystone session.
+        """
+        if self.os_session:
+            keystone_utils.close_session(self.os_session)
+
 
 class OSIntegrationTestCase(OSComponentTestCase):
 
@@ -104,17 +124,17 @@ class OSIntegrationTestCase(OSComponentTestCase):
         """
         super(OSIntegrationTestCase, self).__init__(
             method_name=method_name, os_creds=os_creds,
-            ext_net_name=ext_net_name, image_metadata=image_metadata,
-            log_level=log_level)
+            ext_net_name=ext_net_name, flavor_metadata=flavor_metadata,
+            image_metadata=image_metadata, log_level=log_level)
         self.netconf_override = netconf_override
         self.use_keystone = use_keystone
         self.keystone = None
-        self.flavor_metadata = flavor_metadata
         self.user_roles = None
+        self.proj_users = None
 
     @staticmethod
     def parameterize(testcase_klass, os_creds, ext_net_name,
-                     use_keystone=False, flavor_metadata=None,
+                     use_keystone=True, flavor_metadata=None,
                      image_metadata=None, netconf_override=None,
                      log_level=logging.DEBUG):
         """
@@ -144,9 +164,11 @@ class OSIntegrationTestCase(OSComponentTestCase):
         self.project_creator = None
         self.user_creator = None
         self.admin_os_creds = self.os_creds
+        self.admin_os_session = self.os_session
+        self.keystone = keystone_utils.keystone_client(
+            self.admin_os_creds, self.admin_os_session)
 
         if self.use_keystone:
-            self.keystone = keystone_utils.keystone_client(self.admin_os_creds)
             guid = self.__class__.__name__ + '-' + str(uuid.uuid4())[:-19]
             project_name = guid + '-proj'
             self.project_creator = deploy_utils.create_project(
@@ -156,7 +178,7 @@ class OSIntegrationTestCase(OSComponentTestCase):
 
             # Set by implementing class for setting the user's roles
             roles = dict()
-            if self.user_roles:
+            if self.user_roles and isinstance(self.user_roles, list):
                 for user_role in self.user_roles:
                     roles[user_role] = project_name
 
@@ -168,10 +190,17 @@ class OSIntegrationTestCase(OSComponentTestCase):
 
             self.os_creds = self.user_creator.get_os_creds(
                 self.project_creator.project_settings.name)
+            self.os_session = keystone_utils.keystone_session(self.os_creds)
 
             # add user to project
             self.project_creator.assoc_user(self.user_creator.get_user())
 
+            if self.proj_users and isinstance(self.proj_users, list):
+                for user_name in self.proj_users:
+                    user = keystone_utils.get_user(self.keystone, user_name)
+                    if user:
+                        self.project_creator.assoc_user(user)
+
     def __clean__(self):
         """
         Cleans up test user and project.
@@ -184,3 +213,8 @@ class OSIntegrationTestCase(OSComponentTestCase):
 
         if self.user_creator:
             self.user_creator.clean()
+
+        if self.admin_os_session:
+            keystone_utils.close_session(self.admin_os_session)
+
+        super(OSIntegrationTestCase, self).__clean__()