X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=snaps%2Fopenstack%2Ftests%2Fos_source_file_test.py;h=f1f90ecb44a3149bfad6fb0f8c9934228006e1d4;hb=1b60980ee6b101261fb2115e417c4cf97cf29736;hp=20a8d80ff753bd791cab94f02ef84f0559217d39;hpb=06e3b9ca9abd8bc3d96707bbb2de0c460a196f2f;p=snaps.git diff --git a/snaps/openstack/tests/os_source_file_test.py b/snaps/openstack/tests/os_source_file_test.py index 20a8d80..f1f90ec 100644 --- a/snaps/openstack/tests/os_source_file_test.py +++ b/snaps/openstack/tests/os_source_file_test.py @@ -12,46 +12,62 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -import unittest +import logging +import pkg_resources import uuid +import unittest from snaps import file_utils -import openstack_tests -import logging - -from snaps.openstack.create_project import ProjectSettings -from snaps.openstack.create_user import UserSettings +from snaps.config.project import ProjectConfig +from snaps.config.user import UserConfig +from snaps.openstack.tests import openstack_tests from snaps.openstack.utils import deploy_utils, keystone_utils -dev_os_env_file = 'openstack/tests/conf/os_env.yaml' -# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -# To run these tests from an IDE, the CWD must be set to the snaps directory of this project -# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +dev_os_env_file = pkg_resources.resource_filename( + 'snaps.openstack.tests.conf', 'os_env.yaml') class OSComponentTestCase(unittest.TestCase): - """ - Super for test classes requiring a connection to OpenStack - """ - def __init__(self, method_name='runTest', os_env_file=None, ext_net_name=None, http_proxy_str=None, - ssh_proxy_cmd=None, log_level=logging.DEBUG): + def __init__(self, method_name='runTest', os_creds=None, ext_net_name=None, + image_metadata=None, log_level=logging.DEBUG): + """ + Super for test classes requiring a connection to OpenStack + :param method_name: default 'runTest' + :param os_creds: the OSCreds object, when null it searches for the file + 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 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) + """ super(OSComponentTestCase, self).__init__(method_name) logging.basicConfig(level=log_level) - self.os_creds = openstack_tests.get_credentials(os_env_file=os_env_file, proxy_settings_str=http_proxy_str, - ssh_proxy_cmd=ssh_proxy_cmd, dev_os_env_file=dev_os_env_file) + if os_creds: + self.os_creds = os_creds + else: + self.os_creds = openstack_tests.get_credentials( + dev_os_env_file=dev_os_env_file) + 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') + self.image_metadata = image_metadata + + keystone = keystone_utils.keystone_client(self.os_creds) + self.project_id = keystone_utils.get_project( + keystone=keystone, project_name=self.os_creds.project_name) + @staticmethod - def parameterize(testcase_klass, os_env_file, ext_net_name, http_proxy_str=None, ssh_proxy_cmd=None, - log_level=logging.DEBUG): + def parameterize(testcase_klass, os_creds, ext_net_name, + image_metadata=None, log_level=logging.DEBUG): """ Create a suite containing all tests taken from the given subclass, passing them the parameter 'param'. """ @@ -59,45 +75,74 @@ 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_env_file, ext_net_name, http_proxy_str, ssh_proxy_cmd, log_level)) + suite.addTest(testcase_klass(name, os_creds, ext_net_name, + image_metadata, log_level)) return suite class OSIntegrationTestCase(OSComponentTestCase): - """ - Super for test classes requiring a connection to OpenStack - """ - def __init__(self, method_name='runTest', os_env_file=None, ext_net_name=None, http_proxy_str=None, - ssh_proxy_cmd=None, use_keystone=False, flavor_metadata=None, log_level=logging.DEBUG): - super(OSIntegrationTestCase, self).__init__(method_name=method_name, os_env_file=os_env_file, - ext_net_name=ext_net_name, http_proxy_str=http_proxy_str, - ssh_proxy_cmd=ssh_proxy_cmd, log_level=log_level) + def __init__(self, method_name='runTest', os_creds=None, ext_net_name=None, + use_keystone=True, flavor_metadata=None, image_metadata=None, + netconf_override=None, log_level=logging.DEBUG): + """ + Super for integration tests requiring a connection to OpenStack + :param method_name: default 'runTest' + :param os_creds: the OSCreds object, when null it searches for the file + 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 use_keystone: when true, these tests will create a new + user/project under which to run the test + :param image_metadata: dict() containing the URLs for the disk, kernel, + and ramdisk images when multi-part images are + required. See below for a simple example + image_metadata={'disk_url': '{URI}/cirros-0.3.4-x86_64-disk.img', + 'kernel_url': '{URI}/cirros-0.3.4-x86_64-kernel', + 'ramdisk_url': '{URI}/cirros-0.3.4-x86_64-initramfs'}) + :param flavor_metadata: dict() to be sent directly into the Nova client + generally used for page sizes + :param netconf_override: dict() containing the configured network_type, + physical_network and segmentation_id + :param log_level: the logging level of your test run (default DEBUG) + """ + 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) + self.netconf_override = netconf_override self.use_keystone = use_keystone self.keystone = None self.flavor_metadata = flavor_metadata @staticmethod - def parameterize(testcase_klass, os_env_file, ext_net_name, http_proxy_str=None, ssh_proxy_cmd=None, - use_keystone=False, flavor_metadata=None, log_level=logging.DEBUG): - """ Create a suite containing all tests taken from the given - subclass, passing them the parameter 'param'. + def parameterize(testcase_klass, os_creds, ext_net_name, + use_keystone=False, flavor_metadata=None, + image_metadata=None, netconf_override=None, + log_level=logging.DEBUG): + """ + Create a suite containing all tests taken from the given + subclass, passing them the parameter 'param'. """ test_loader = unittest.TestLoader() test_names = test_loader.getTestCaseNames(testcase_klass) suite = unittest.TestSuite() for name in test_names: - suite.addTest(testcase_klass(name, os_env_file, ext_net_name, http_proxy_str, ssh_proxy_cmd, use_keystone, - flavor_metadata, log_level)) + suite.addTest(testcase_klass(name, os_creds, ext_net_name, + use_keystone, flavor_metadata, + image_metadata, netconf_override, + log_level)) return suite """ - Super for test classes that should be run within their own project/tenant as they can run for quite some time + Super for test classes that should be run within their own project/tenant + as they can run for quite some time """ def __start__(self): """ - Creates a project and user to be leveraged by subclass test methods. If implementing class uses this method, - it must call __clean__() else you will be left with unwanted users and tenants + Creates a project and user to be leveraged by subclass test methods. If + implementing class uses this method, it must call __clean__() else you + will be left with unwanted users and tenants """ self.project_creator = None self.user_creator = None @@ -105,14 +150,23 @@ class OSIntegrationTestCase(OSComponentTestCase): self.role = None if self.use_keystone: - self.keystone = keystone_utils.keystone_client(self.os_creds) + 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(self.admin_os_creds, ProjectSettings(name=project_name)) + self.project_creator = deploy_utils.create_project( + self.admin_os_creds, ProjectConfig( + name=project_name, + domain=self.admin_os_creds.project_domain_name)) self.user_creator = deploy_utils.create_user( - self.admin_os_creds, UserSettings(name=guid + '-user', password=guid, project_name=project_name)) - self.os_creds = self.user_creator.get_os_creds(self.project_creator.project_settings.name) + self.admin_os_creds, UserConfig( + name=guid + '-user', password=guid, + project_name=project_name, roles={ + 'admin': self.project_creator.project_settings.name}, + domain_name=self.admin_os_creds.user_domain_name)) + + self.os_creds = self.user_creator.get_os_creds( + self.project_creator.project_settings.name) # add user to project self.project_creator.assoc_user(self.user_creator.get_user()) @@ -120,8 +174,9 @@ class OSIntegrationTestCase(OSComponentTestCase): def __clean__(self): """ Cleans up test user and project. - Must be called at the end of child classes tearDown() if __start__() is called during setUp() else these - objects will persist after the test is run + Must be called at the end of child classes tearDown() if __start__() is + called during setUp() else these objects will persist after the test is + run """ if self.role: keystone_utils.delete_role(self.keystone, self.role)