Create new project/user for rally test
[functest.git] / functest / opnfv_tests / openstack / rally / rally.py
index 4a63629..bb67fc2 100644 (file)
@@ -33,7 +33,7 @@ from functest.utils import env
 LOGGER = logging.getLogger(__name__)
 
 
-class RallyBase(singlevm.VmReady1):
+class RallyBase(singlevm.VmReady2):
     """Base class form Rally testcases implementation."""
 
     # pylint: disable=too-many-instance-attributes
@@ -62,6 +62,18 @@ class RallyBase(singlevm.VmReady1):
     def __init__(self, **kwargs):
         """Initialize RallyBase object."""
         super(RallyBase, self).__init__(**kwargs)
+        assert self.orig_cloud
+        assert self.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.creators = []
         self.mode = ''
         self.summary = []
@@ -476,7 +488,13 @@ class RallyBase(singlevm.VmReady1):
         try:
             assert super(RallyBase, self).run(
                 **kwargs) == testcase.TestCase.EX_OK
-            conf_utils.create_rally_deployment()
+            environ = dict(
+                os.environ,
+                OS_USERNAME=self.project.user.name,
+                OS_PROJECT_NAME=self.project.project.name,
+                OS_PROJECT_ID=self.project.project.id,
+                OS_PASSWORD=self.project.password)
+            conf_utils.create_rally_deployment(environ=environ)
             self._prepare_env()
             self._run_tests()
             self._generate_report()