Added ability for integration tests to define additional 37/57837/1
authorspisarski <s.pisarski@cablelabs.com>
Thu, 24 May 2018 17:08:06 +0000 (11:08 -0600)
committerspisarski <s.pisarski@cablelabs.com>
Thu, 24 May 2018 17:08:06 +0000 (11:08 -0600)
existing users to a project.

Change-Id: I91be434dcd7b580f3bfd69e3a97b9a9a13ee4676
Signed-off-by: spisarski <s.pisarski@cablelabs.com>
snaps/openstack/tests/create_instance_tests.py
snaps/openstack/tests/os_source_file_test.py

index bdd6d50..a45654f 100644 (file)
@@ -44,6 +44,7 @@ from snaps.openstack.create_network import OpenStackNetwork
 from snaps.openstack.create_router import OpenStackRouter
 from snaps.openstack.create_security_group import OpenStackSecurityGroup
 from snaps.openstack.create_volume import OpenStackVolume
 from snaps.openstack.create_router import OpenStackRouter
 from snaps.openstack.create_security_group import OpenStackSecurityGroup
 from snaps.openstack.create_volume import OpenStackVolume
+from snaps.openstack.os_credentials import OSCreds
 from snaps.openstack.tests import openstack_tests, validation_utils
 from snaps.openstack.tests.os_source_file_test import (
     OSIntegrationTestCase, OSComponentTestCase)
 from snaps.openstack.tests import openstack_tests, validation_utils
 from snaps.openstack.tests.os_source_file_test import (
     OSIntegrationTestCase, OSComponentTestCase)
@@ -694,6 +695,7 @@ class CreateInstanceSingleNetworkTests(OSIntegrationTestCase):
         Instantiates the CreateImage object that is responsible for downloading
         and creating an OS image file within OpenStack
         """
         Instantiates the CreateImage object that is responsible for downloading
         and creating an OS image file within OpenStack
         """
+        self.proj_users = ['admin']
         super(self.__class__, self).__start__()
 
         self.nova = nova_utils.nova_client(self.os_creds, self.os_session)
         super(self.__class__, self).__start__()
 
         self.nova = nova_utils.nova_client(self.os_creds, self.os_session)
@@ -1055,10 +1057,36 @@ class CreateInstanceSingleNetworkTests(OSIntegrationTestCase):
 
         self.assertTrue(inst_creator.vm_active(block=True))
 
 
         self.assertTrue(inst_creator.vm_active(block=True))
 
+        vm_os_creds = OSCreds(
+            auth_url=self.admin_os_creds.auth_url,
+            username=self.admin_os_creds.username,
+            password=self.admin_os_creds.password,
+            project_name=self.os_creds.project_name,
+            identity_api_version=self.os_creds.identity_api_version)
         derived_inst_creator = create_instance.generate_creator(
         derived_inst_creator = create_instance.generate_creator(
-            self.os_creds, vm_inst, self.image_creator.image_settings,
+            vm_os_creds, vm_inst, self.image_creator.image_settings,
             self.os_creds.project_name, self.keypair_creator.keypair_settings)
 
             self.os_creds.project_name, self.keypair_creator.keypair_settings)
 
+        # Tests to ensure that a instance can be returned with an invalid
+        # image config object and admin credentials (when the 'admin' user has
+        # been added to the project) as this should not matter unless one
+        # needs to access the machine via ssh and its floating IP
+
+        # Invalid ImageConfig
+        derived_foo_image_creator = create_instance.generate_creator(
+            vm_os_creds, vm_inst, ImageConfig(
+                name='foo', image_user='bar', format='qcow2',
+                image_file='foo/bar'),
+            vm_os_creds.project_name)
+        self.assertIsNotNone(derived_foo_image_creator)
+        self.assertTrue(derived_foo_image_creator.vm_active())
+
+        # None ImageConfig
+        derived_none_image_creator = create_instance.generate_creator(
+            vm_os_creds, vm_inst, None, vm_os_creds.project_name)
+        self.assertIsNotNone(derived_none_image_creator)
+        self.assertTrue(derived_none_image_creator.vm_active())
+
         derived_inst_creator.add_floating_ip(FloatingIpConfig(
             name=self.floating_ip_name, port_name=self.port_1_name,
             router_name=self.pub_net_config.router_settings.name))
         derived_inst_creator.add_floating_ip(FloatingIpConfig(
             name=self.floating_ip_name, port_name=self.port_1_name,
             router_name=self.pub_net_config.router_settings.name))
index 7e70ed0..c632e02 100644 (file)
@@ -77,8 +77,9 @@ class OSComponentTestCase(unittest.TestCase):
         test_names = test_loader.getTestCaseNames(testcase_klass)
         suite = unittest.TestSuite()
         for name in test_names:
         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,
-                flavor_metadata, 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):
         return suite
 
     def __clean__(self):
@@ -123,6 +124,7 @@ class OSIntegrationTestCase(OSComponentTestCase):
         self.use_keystone = use_keystone
         self.keystone = None
         self.user_roles = None
         self.use_keystone = use_keystone
         self.keystone = None
         self.user_roles = None
+        self.proj_users = None
 
     @staticmethod
     def parameterize(testcase_klass, os_creds, ext_net_name,
 
     @staticmethod
     def parameterize(testcase_klass, os_creds, ext_net_name,
@@ -170,7 +172,7 @@ class OSIntegrationTestCase(OSComponentTestCase):
 
             # Set by implementing class for setting the user's roles
             roles = dict()
 
             # 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
 
                 for user_role in self.user_roles:
                     roles[user_role] = project_name
 
@@ -187,6 +189,12 @@ class OSIntegrationTestCase(OSComponentTestCase):
             # add user to project
             self.project_creator.assoc_user(self.user_creator.get_user())
 
             # 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.
     def __clean__(self):
         """
         Cleans up test user and project.