Fix an invalid class name (vGPU)
[functest.git] / functest / opnfv_tests / openstack / snaps / snaps_test_runner.py
index a2dadb7..c937ed7 100644 (file)
@@ -8,15 +8,19 @@
 #
 # http://www.apache.org/licenses/LICENSE-2.0
 
-# pylint: disable=missing-docstring
+"""configuration params to run snaps tests"""
 
 import logging
+import uuid
 
-from functest.core import unit
-from functest.opnfv_tests.openstack.snaps import snaps_utils
-from functest.utils.constants import CONST
+import os_client_config
+import shade
+from xtesting.core import unit
 
-from snaps.openstack import create_flavor
+from functest.core import tenantnetwork
+from functest.opnfv_tests.openstack.snaps import snaps_utils
+from functest.utils import config
+from functest.utils import functest_utils
 
 
 class SnapsTestRunner(unit.Suite):
@@ -28,30 +32,82 @@ class SnapsTestRunner(unit.Suite):
     def __init__(self, **kwargs):
         super(SnapsTestRunner, self).__init__(**kwargs)
         self.logger = logging.getLogger(__name__)
-        self.os_creds = kwargs.get('os_creds') or snaps_utils.get_credentials()
 
+        try:
+            cloud_config = os_client_config.get_config()
+            self.orig_cloud = shade.OpenStackCloud(cloud_config=cloud_config)
+            guid = str(uuid.uuid4())
+            self.project = tenantnetwork.NewProject(
+                self.orig_cloud, self.case_name, guid)
+            self.project.create()
+        except Exception:  # pylint: disable=broad-except
+            raise Exception("Cannot create user or project")
+
+        if self.orig_cloud.get_role("admin"):
+            role_name = "admin"
+        elif self.orig_cloud.get_role("Admin"):
+            role_name = "Admin"
+        else:
+            raise Exception("Cannot detect neither admin nor Admin")
+        self.orig_cloud.grant_role(
+            role_name, user=self.project.user.id,
+            project=self.project.project.id,
+            domain=self.project.domain.id)
+        self.role = None
+        if not self.orig_cloud.get_role("heat_stack_owner"):
+            self.role = self.orig_cloud.create_role("heat_stack_owner")
+        self.orig_cloud.grant_role(
+            "heat_stack_owner", user=self.project.user.id,
+            project=self.project.project.id,
+            domain=self.project.domain.id)
+        creds_overrides = dict(
+            username=self.project.user.name,
+            project_name=self.project.project.name,
+            project_id=self.project.project.id,
+            password=self.project.password)
+        self.os_creds = kwargs.get('os_creds') or snaps_utils.get_credentials(
+            overrides=creds_overrides)
         if 'ext_net_name' in kwargs:
             self.ext_net_name = kwargs['ext_net_name']
         else:
             self.ext_net_name = snaps_utils.get_ext_net_name(self.os_creds)
 
         self.netconf_override = None
-        if hasattr(CONST, 'snaps_network_config'):
-            self.netconf_override = CONST.__getattribute__(
-                'snaps_network_config')
+        if hasattr(config.CONF, 'snaps_network_config'):
+            self.netconf_override = getattr(
+                config.CONF, 'snaps_network_config')
 
         self.use_fip = (
-            CONST.__getattribute__('snaps_use_floating_ips') == 'True')
+            getattr(config.CONF, 'snaps_use_floating_ips') == 'True')
         self.use_keystone = (
-            CONST.__getattribute__('snaps_use_keystone') == 'True')
-        scenario = CONST.__getattribute__('DEPLOY_SCENARIO')
-
-        self.flavor_metadata = None
-        if 'ovs' in scenario or 'fdio' in scenario:
-            self.flavor_metadata = create_flavor.MEM_PAGE_SIZE_LARGE
+            getattr(config.CONF, 'snaps_use_keystone') == 'True')
 
+        self.flavor_metadata = getattr(config.CONF, 'snaps_flavor_extra_specs',
+                                       None)
         self.logger.info("Using flavor metadata '%s'", self.flavor_metadata)
 
         self.image_metadata = None
-        if hasattr(CONST, 'snaps_images'):
-            self.image_metadata = CONST.__getattribute__('snaps_images')
+        if hasattr(config.CONF, 'snaps_images'):
+            self.image_metadata = getattr(config.CONF, 'snaps_images')
+
+    def clean(self):
+        """Cleanup of OpenStack resources. Should be called on completion."""
+        try:
+            super(SnapsTestRunner, self).clean()
+            assert self.orig_cloud
+            assert self.project
+            if self.role:
+                self.orig_cloud.delete_role(self.role.id)
+            self.project.clean()
+        except Exception:  # pylint: disable=broad-except
+            self.__logger.exception("Cannot clean all resources")
+
+    def check_requirements(self):
+        """Skip if OpenStack Rocky or newer."""
+        try:
+            cloud_config = os_client_config.get_config()
+            cloud = shade.OpenStackCloud(cloud_config=cloud_config)
+            if functest_utils.get_nova_version(cloud) > (2, 60):
+                self.is_skipped = True
+        except Exception:  # pylint: disable=broad-except
+            pass