[multisite] refactor the scripts of multiste 87/17687/8
authormeimei <meimei@huawei.com>
Thu, 28 Jul 2016 08:39:19 +0000 (16:39 +0800)
committermeimei <meimei@huawei.com>
Thu, 11 Aug 2016 07:24:40 +0000 (15:24 +0800)
Change-Id: I07f0f5e253b04c9ac70e6dc4ea210e7cecf22c6a
Signed-off-by: meimei <meimei@huawei.com>
ci/exec_test.sh
testcases/OpenStack/tempest/gen_tempest_conf.py [new file with mode: 0755]
testcases/OpenStack/tempest/run_tempest.py

index ddbe486..124cb04 100755 (executable)
@@ -150,9 +150,10 @@ function run_test(){
             ${repos_dir}/moon/tests/run_tests.sh
         ;;
         "multisite")
-            python ${FUNCTEST_REPO_DIR}/testcases/features/multisite.py
+            python ${FUNCTEST_REPO_DIR}/testcases/OpenStack/tempest/gen_tempest_conf.py
             python ${FUNCTEST_REPO_DIR}/testcases/OpenStack/tempest/run_tempest.py \
                 $clean_flag -s -m feature_multisite $report
+                -c ${FUNCTEST_REPO_DIR}/testcases/OpenStack/tempest/tempest_multisite.conf
         ;;
         "domino")
             python ${FUNCTEST_REPO_DIR}/testcases/features/domino.py
diff --git a/testcases/OpenStack/tempest/gen_tempest_conf.py b/testcases/OpenStack/tempest/gen_tempest_conf.py
new file mode 100755 (executable)
index 0000000..79236b9
--- /dev/null
@@ -0,0 +1,120 @@
+#!/usr/bin/python
+#
+# Copyright (c) 2015 All rights reserved
+# This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Execute Multisite Tempest test cases
+##
+
+import ConfigParser
+import os
+import re
+import shutil
+import functest.utils.functest_utils as ft_utils
+import functest.utils.functest_logger as ft_logger
+from run_tempest import configure_tempest
+
+logger = ft_logger.Logger("multisite").getLogger()
+
+
+def configure_tempest_multisite(deployment_dir):
+    """
+    Add/update needed parameters into tempest.conf file generated by Rally
+    """
+    logger.debug("configure the tempest")
+    configure_tempest(deployment_dir)
+
+    logger.debug("Finding tempest.conf file...")
+    tempest_conf_file = deployment_dir + "/tempest.conf"
+    if not os.path.isfile(tempest_conf_file):
+        logger.error("Tempest configuration file %s NOT found."
+                     % tempest_conf_file)
+        exit(-1)
+
+    # Copy tempest.conf to /home/opnfv/functest/results/tempest/
+    cur_path = os.path.split(os.path.realpath(__file__))[0]
+    shutil.copyfile(tempest_conf_file, cur_path + '/tempest_multisite.conf')
+    tempest_conf_file = cur_path + "/tempest_multisite.conf"
+
+    logger.debug("Updating selected tempest.conf parameters...")
+    config = ConfigParser.RawConfigParser()
+    config.read(tempest_conf_file)
+
+    config.set('service_available', 'kingbird', 'true')
+    cmd = "openstack endpoint show kingbird | grep publicurl |\
+           awk '{print $4}' | awk -F '/' '{print $4}'"
+    kingbird_api_version = os.popen(cmd).read()
+    if os.environ.get("INSTALLER_TYPE") == 'fuel':
+        # For MOS based setup, the service is accessible
+        # via bind host
+        kingbird_conf_path = "/etc/kingbird/kingbird.conf"
+        installer_type = os.getenv('INSTALLER_TYPE', 'Unknown')
+        installer_ip = os.getenv('INSTALLER_IP', 'Unknown')
+        installer_username = ft_utils.get_parameter_from_yaml(
+            "multisite." + installer_type +
+            "_environment.installer_username")
+        installer_password = ft_utils.get_parameter_from_yaml(
+            "multisite." + installer_type +
+            "_environment.installer_password")
+
+        ssh_options = "-o UserKnownHostsFile=/dev/null -o \
+            StrictHostKeyChecking=no"
+
+        # Get the controller IP from the fuel node
+        cmd = 'sshpass -p %s ssh 2>/dev/null %s %s@%s \
+                \'fuel node --env 1| grep controller | grep "True\|  1" \
+                | awk -F\| "{print \$5}"\'' % (installer_password,
+                                               ssh_options,
+                                               installer_username,
+                                               installer_ip)
+        multisite_controller_ip = \
+            "".join(os.popen(cmd).read().split())
+
+        # Login to controller and get bind host details
+        cmd = 'sshpass -p %s ssh 2>/dev/null  %s %s@%s "ssh %s \\" \
+            grep -e "^bind_" %s  \\""' % (installer_password,
+                                          ssh_options,
+                                          installer_username,
+                                          installer_ip,
+                                          multisite_controller_ip,
+                                          kingbird_conf_path)
+        bind_details = os.popen(cmd).read()
+        bind_details = "".join(bind_details.split())
+        # Extract port number from the bind details
+        bind_port = re.findall(r"\D(\d{4})", bind_details)[0]
+        # Extract ip address from the bind details
+        bind_host = re.findall(r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}",
+                               bind_details)[0]
+        kingbird_endpoint_url = "http://" + bind_host + ":" + bind_port + \
+                                "/"
+    else:
+        cmd = "openstack endpoint show kingbird | grep publicurl |\
+               awk '{print $4}' | awk -F '/' '{print $3}'"
+        kingbird_endpoint_url = os.popen(cmd).read()
+
+    try:
+        config.add_section("kingbird")
+    except Exception:
+        logger.info('kingbird section exist')
+    config.set('kingbird', 'endpoint_type', 'publicURL')
+    config.set('kingbird', 'TIME_TO_SYNC', '20')
+    config.set('kingbird', 'endpoint_url', kingbird_endpoint_url)
+    config.set('kingbird', 'api_version', kingbird_api_version)
+    with open(tempest_conf_file, 'wb') as config_file:
+        config.write(config_file)
+
+    return True
+
+
+def main():
+
+    deployment_dir = ft_utils.get_deployment_dir(logger)
+    configure_tempest_multisite(deployment_dir)
+
+
+if __name__ == '__main__':
+    main()
index 845c588..562249b 100755 (executable)
@@ -49,6 +49,9 @@ parser.add_argument("-r", "--report",
 parser.add_argument("-n", "--noclean",
                     help="Don't clean the created resources for this test.",
                     action="store_true")
+parser.add_argument("-c", "--conf",
+                    help="User-specified Tempest config file location",
+                    default="")
 
 args = parser.parse_args()
 
@@ -220,89 +223,6 @@ def configure_tempest(deployment_dir):
     return True
 
 
-def configure_tempest_feature(deployment_dir, mode):
-    """Add/update needed parameters into tempest.conf file generated by Rally
-
-    """
-
-    logger.debug("Finding tempest.conf file...")
-    tempest_conf_file = deployment_dir + "/tempest.conf"
-    if not os.path.isfile(tempest_conf_file):
-        logger.error("Tempest configuration file %s NOT found."
-                     % tempest_conf_file)
-        exit(-1)
-
-    logger.debug("Updating selected tempest.conf parameters...")
-    config = ConfigParser.RawConfigParser()
-    config.read(tempest_conf_file)
-    if mode == 'feature_multisite':
-        config.set('service_available', 'kingbird', 'true')
-        cmd = "openstack endpoint show kingbird | grep publicurl |\
-               awk '{print $4}' | awk -F '/' '{print $4}'"
-        kingbird_api_version = os.popen(cmd).read()
-        if os.environ.get("INSTALLER_TYPE") == 'fuel':
-            # For MOS based setup, the service is accessible
-            # via bind host
-            kingbird_conf_path = "/etc/kingbird/kingbird.conf"
-            installer_type = os.getenv('INSTALLER_TYPE', 'Unknown')
-            installer_ip = os.getenv('INSTALLER_IP', 'Unknown')
-            installer_username = ft_utils.get_parameter_from_yaml(
-                "multisite." + installer_type +
-                "_environment.installer_username")
-            installer_password = ft_utils.get_parameter_from_yaml(
-                "multisite." + installer_type +
-                "_environment.installer_password")
-
-            ssh_options = "-o UserKnownHostsFile=/dev/null -o \
-                StrictHostKeyChecking=no"
-
-            # Get the controller IP from the fuel node
-            cmd = 'sshpass -p %s ssh 2>/dev/null %s %s@%s \
-                    \'fuel node --env 1| grep controller | grep "True\|  1" \
-                    | awk -F\| "{print \$5}"\'' % (installer_password,
-                                                   ssh_options,
-                                                   installer_username,
-                                                   installer_ip)
-            multisite_controller_ip = \
-                "".join(os.popen(cmd).read().split())
-
-            # Login to controller and get bind host details
-            cmd = 'sshpass -p %s ssh 2>/dev/null  %s %s@%s "ssh %s \\" \
-                grep -e "^bind_" %s  \\""' % (installer_password,
-                                              ssh_options,
-                                              installer_username,
-                                              installer_ip,
-                                              multisite_controller_ip,
-                                              kingbird_conf_path)
-            bind_details = os.popen(cmd).read()
-            bind_details = "".join(bind_details.split())
-            # Extract port number from the bind details
-            bind_port = re.findall(r"\D(\d{4})", bind_details)[0]
-            # Extract ip address from the bind details
-            bind_host = re.findall(r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}",
-                                   bind_details)[0]
-            kingbird_endpoint_url = "http://" + bind_host + ":" + bind_port + \
-                                    "/"
-        else:
-            cmd = "openstack endpoint show kingbird | grep publicurl |\
-                   awk '{print $4}' | awk -F '/' '{print $3}'"
-            kingbird_endpoint_url = os.popen(cmd).read()
-        try:
-            config.add_section("kingbird")
-        except Exception:
-            logger.info('kingbird section exist')
-        config.set('kingbird', 'endpoint_type', 'publicURL')
-        config.set('kingbird', 'TIME_TO_SYNC', '20')
-        config.set('kingbird', 'endpoint_url', kingbird_endpoint_url)
-        config.set('kingbird', 'api_version', kingbird_api_version)
-    with open(tempest_conf_file, 'wb') as config_file:
-        config.write(config_file)
-
-    # Copy tempest.conf to /home/opnfv/functest/results/tempest/
-    shutil.copyfile(tempest_conf_file, TEMPEST_RESULTS_DIR + '/tempest.conf')
-    return True
-
-
 def read_file(filename):
     with open(filename) as src:
         return [line.strip() for line in src.readlines()]
@@ -500,13 +420,17 @@ def main():
         os.makedirs(TEMPEST_RESULTS_DIR)
 
     deployment_dir = ft_utils.get_deployment_dir(logger)
-    configure_tempest(deployment_dir)
-    configure_tempest_feature(deployment_dir, args.mode)
+
+    if "" != args.conf:
+        configure_tempest(deployment_dir)
+    else:
+        MODE = " --tempest-config " + args.conf
+
     create_tempest_resources()
     generate_test_list(deployment_dir, args.mode)
     apply_tempest_blacklist()
 
-    MODE = "--tests-file " + TEMPEST_LIST
+    MODE += " --tests-file " + TEMPEST_LIST
     if args.serial:
         MODE += " --concur 1"