Rally and Tempest pre-installed in the Docker image.
[functest.git] / testcases / VIM / OpenStack / CI / libraries / run_tempest.py
index 50dd252..04d8e86 100644 (file)
@@ -19,6 +19,7 @@ import logging
 import os
 import re
 import requests
+import shutil
 import subprocess
 import sys
 import time
@@ -32,12 +33,21 @@ modes = ['full', 'smoke', 'baremetal', 'compute', 'data_processing',
 
 """ tests configuration """
 parser = argparse.ArgumentParser()
-parser.add_argument("-d", "--debug", help="Debug mode",  action="store_true")
-parser.add_argument("-m", "--mode", help="Tempest test mode [smoke, all]",
+parser.add_argument("-d", "--debug",
+                    help="Debug mode",
+                    action="store_true")
+parser.add_argument("-s", "--serial",
+                    help="Run tests in one thread",
+                    action="store_true")
+parser.add_argument("-m", "--mode",
+                    help="Tempest test mode [smoke, all]",
                     default="smoke")
 parser.add_argument("-r", "--report",
                     help="Create json result file",
                     action="store_true")
+parser.add_argument("-n", "--noclean",
+                    help="Don't clean the created resources for this test.",
+                    action="store_true")
 
 args = parser.parse_args()
 
@@ -72,6 +82,7 @@ TENANT_NAME = functest_yaml.get("tempest").get("identity").get("tenant_name")
 TENANT_DESCRIPTION = functest_yaml.get("tempest").get("identity").get("tenant_description")
 USER_NAME = functest_yaml.get("tempest").get("identity").get("user_name")
 USER_PASSWORD = functest_yaml.get("tempest").get("identity").get("user_password")
+SSH_USER_REGEX = functest_yaml.get("tempest").get("input-scenario").get("ssh_user_regex")
 DEPLOYMENT_MAME = functest_yaml.get("rally").get("deployment_name")
 RALLY_INSTALLATION_DIR = functest_yaml.get("general").get("directories").get("dir_rally_inst")
 RESULTS_DIR = functest_yaml.get("general").get("directories").get("dir_results")
@@ -174,8 +185,8 @@ def configure_tempest():
     logger.debug("Finding tempest.conf file...")
     tempest_conf_file = RALLY_INSTALLATION_DIR+"/tempest/for-deployment-" \
                         +deployment_uuid+"/tempest.conf"
-    if tempest_conf_file == "":
-        logger.debug("   Tempest configuration file NOT found")
+    if not os.path.isfile(tempest_conf_file):
+        logger.error("   Tempest configuration file %s NOT found." % tempest_conf_file)
         return False
 
     logger.debug("  Updating fixed_network_name...")
@@ -201,7 +212,12 @@ def configure_tempest():
     cmd = "crudini --set "+tempest_conf_file+" identity password " \
           +USER_PASSWORD
     functest_utils.execute_command(cmd,logger)
+    cmd = "sed -i 's/.*ssh_user_regex.*/ssh_user_regex = "+SSH_USER_REGEX+"/' "+tempest_conf_file
+    functest_utils.execute_command(cmd,logger)
+
 
+    # Copy tempest.conf to /home/opnfv/functest/results/tempest/
+    shutil.copyfile(tempest_conf_file,TEMPEST_RESULTS_DIR+'/tempest.conf')
     return True
 
 
@@ -212,15 +228,13 @@ def run_tempest(OPTION):
     # :return: void
     #
     logger.info("Starting Tempest test suite: '%s'." % OPTION)
-    cmd_line = "rally verify start "+OPTION
+    cmd_line = "rally verify start " + OPTION + " --system-wide"
     logger.debug('Executing command : {}'.format(cmd_line))
 
     CI_DEBUG = os.environ.get("CI_DEBUG")
     if CI_DEBUG == "true" or CI_DEBUG == "True":
         subprocess.call(cmd_line, shell=True, stderr=subprocess.STDOUT)
     else:
-        if not os.path.exists(TEMPEST_RESULTS_DIR):
-            os.makedirs(TEMPEST_RESULTS_DIR)
         header = "Tempest environment:\n"\
             "  Installer: %s\n  Scenario: %s\n  Node: %s\n  Date: %s\n" % \
             (os.getenv('INSTALLER_TYPE','Unknown'), \
@@ -284,9 +298,19 @@ def main():
     else:
         MODE = "--set "+args.mode
 
+    if args.serial:
+        MODE = "--concur 1 "+MODE
+
+    if not os.path.exists(TEMPEST_RESULTS_DIR):
+        os.makedirs(TEMPEST_RESULTS_DIR)
+
     create_tempest_resources()
     configure_tempest()
     run_tempest(MODE)
+
+    if args.noclean:
+        exit(0)
+
     free_tempest_resources()