From ee6cc1b4186441316df71d1e23846e1ac6c7cb08 Mon Sep 17 00:00:00 2001
From: meimei <meimei@huawei.com>
Date: Thu, 28 Jul 2016 16:39:19 +0800
Subject: [multisite] refactor the scripts of multiste

Change-Id: I07f0f5e253b04c9ac70e6dc4ea210e7cecf22c6a
Signed-off-by: meimei <meimei@huawei.com>
---
 testcases/OpenStack/tempest/gen_tempest_conf.py | 120 ++++++++++++++++++++++++
 testcases/OpenStack/tempest/run_tempest.py      |  96 ++-----------------
 2 files changed, 130 insertions(+), 86 deletions(-)
 create mode 100755 testcases/OpenStack/tempest/gen_tempest_conf.py

(limited to 'testcases')

diff --git a/testcases/OpenStack/tempest/gen_tempest_conf.py b/testcases/OpenStack/tempest/gen_tempest_conf.py
new file mode 100755
index 00000000..79236b95
--- /dev/null
+++ b/testcases/OpenStack/tempest/gen_tempest_conf.py
@@ -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()
diff --git a/testcases/OpenStack/tempest/run_tempest.py b/testcases/OpenStack/tempest/run_tempest.py
index 845c5883..562249b2 100755
--- a/testcases/OpenStack/tempest/run_tempest.py
+++ b/testcases/OpenStack/tempest/run_tempest.py
@@ -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"
 
-- 
cgit