Merge tempest.py and conf_utils.py 00/67200/1
authorJuha Kosonen <juha.kosonen@nokia.com>
Wed, 6 Mar 2019 08:55:03 +0000 (10:55 +0200)
committerCédric Ollivier <cedric.ollivier@orange.com>
Fri, 8 Mar 2019 08:35:24 +0000 (09:35 +0100)
Change-Id: I597abdbb5bd3de023aa7b66fa27764ca2ec27f0d
Signed-off-by: Juha Kosonen <juha.kosonen@nokia.com>
(cherry picked from commit 226e0f36ee86202c262444cd0712250f4691ab49)

api/apidoc/functest.opnfv_tests.openstack.tempest.conf_utils.rst [deleted file]
api/apidoc/functest.opnfv_tests.openstack.tempest.rst
functest/opnfv_tests/openstack/tempest/conf_utils.py [deleted file]
functest/opnfv_tests/openstack/tempest/tempest.py
functest/tests/unit/openstack/tempest/test_conf_utils.py [deleted file]
functest/tests/unit/openstack/tempest/test_tempest.py

diff --git a/api/apidoc/functest.opnfv_tests.openstack.tempest.conf_utils.rst b/api/apidoc/functest.opnfv_tests.openstack.tempest.conf_utils.rst
deleted file mode 100644 (file)
index 891c7e1..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-functest.opnfv\_tests.openstack.tempest.conf\_utils module
-==========================================================
-
-.. automodule:: functest.opnfv_tests.openstack.tempest.conf_utils
-    :members:
-    :undoc-members:
-    :show-inheritance:
index 40aef5b..e1a7a77 100644 (file)
@@ -6,7 +6,6 @@ Submodules
 
 .. toctree::
 
-   functest.opnfv_tests.openstack.tempest.conf_utils
    functest.opnfv_tests.openstack.tempest.tempest
 
 Module contents
diff --git a/functest/opnfv_tests/openstack/tempest/conf_utils.py b/functest/opnfv_tests/openstack/tempest/conf_utils.py
deleted file mode 100644 (file)
index 7e42ad3..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-#!/usr/bin/env 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
-#
-
-"""Tempest configuration utilities."""
-
-import json
-import logging
-import os
-import subprocess
-
-import pkg_resources
-from six.moves import configparser
-import yaml
-
-from functest.utils import config
-from functest.utils import env
-from functest.utils import functest_utils
-
-
-GLANCE_IMAGE_PATH = os.path.join(
-    getattr(config.CONF, 'dir_functest_images'),
-    getattr(config.CONF, 'openstack_image_file_name'))
-TEMPEST_CUSTOM = pkg_resources.resource_filename(
-    'functest', 'opnfv_tests/openstack/tempest/custom_tests/test_list.txt')
-TEMPEST_BLACKLIST = pkg_resources.resource_filename(
-    'functest', 'opnfv_tests/openstack/tempest/custom_tests/blacklist.yaml')
-TEMPEST_CONF_YAML = pkg_resources.resource_filename(
-    'functest', 'opnfv_tests/openstack/tempest/custom_tests/tempest_conf.yaml')
-
-CI_INSTALLER_TYPE = env.get('INSTALLER_TYPE')
-
-""" logging configuration """
-LOGGER = logging.getLogger(__name__)
-
-
-def create_verifier():
-    """Create new verifier"""
-    LOGGER.info("Create verifier from existing repo...")
-    cmd = ['rally', 'verify', 'delete-verifier',
-           '--id', str(getattr(config.CONF, 'tempest_verifier_name')),
-           '--force']
-    try:
-        output = subprocess.check_output(cmd)
-        LOGGER.info("%s\n%s", " ".join(cmd), output)
-    except subprocess.CalledProcessError:
-        pass
-
-    cmd = ['rally', 'verify', 'create-verifier',
-           '--source', str(getattr(config.CONF, 'dir_repo_tempest')),
-           '--name', str(getattr(config.CONF, 'tempest_verifier_name')),
-           '--type', 'tempest', '--system-wide']
-    output = subprocess.check_output(cmd)
-    LOGGER.info("%s\n%s", " ".join(cmd), output)
-    return get_verifier_id()
-
-
-def get_verifier_id():
-    """
-    Returns verifier id for current Tempest
-    """
-    cmd = ("rally verify list-verifiers | awk '/" +
-           getattr(config.CONF, 'tempest_verifier_name') +
-           "/ {print $2}'")
-    proc = subprocess.Popen(cmd, shell=True,
-                            stdout=subprocess.PIPE,
-                            stderr=subprocess.STDOUT)
-    verifier_uuid = proc.stdout.readline().rstrip()
-    return verifier_uuid
-
-
-def get_verifier_repo_dir(verifier_id):
-    """
-    Returns installed verifier repo directory for Tempest
-    """
-    return os.path.join(getattr(config.CONF, 'dir_rally_inst'),
-                        'verification',
-                        'verifier-{}'.format(verifier_id),
-                        'repo')
-
-
-def get_verifier_deployment_dir(verifier_id, deployment_id):
-    """
-    Returns Rally deployment directory for current verifier
-    """
-    return os.path.join(getattr(config.CONF, 'dir_rally_inst'),
-                        'verification',
-                        'verifier-{}'.format(verifier_id),
-                        'for-deployment-{}'.format(deployment_id))
-
-
-def update_tempest_conf_file(conf_file, rconfig):
-    """Update defined paramters into tempest config file"""
-    with open(TEMPEST_CONF_YAML) as yfile:
-        conf_yaml = yaml.safe_load(yfile)
-    if conf_yaml:
-        sections = rconfig.sections()
-        for section in conf_yaml:
-            if section not in sections:
-                rconfig.add_section(section)
-            sub_conf = conf_yaml.get(section)
-            for key, value in sub_conf.items():
-                rconfig.set(section, key, value)
-
-    with open(conf_file, 'wb') as config_file:
-        rconfig.write(config_file)
-
-
-def configure_tempest_update_params(
-        tempest_conf_file, image_id=None, flavor_id=None,
-        compute_cnt=1, image_alt_id=None, flavor_alt_id=None,
-        admin_role_name='admin', cidr='192.168.120.0/24',
-        domain_id='default'):
-    # pylint: disable=too-many-branches,too-many-arguments,too-many-statements
-    """
-    Add/update needed parameters into tempest.conf file
-    """
-    LOGGER.debug("Updating selected tempest.conf parameters...")
-    rconfig = configparser.RawConfigParser()
-    rconfig.read(tempest_conf_file)
-    rconfig.set('compute', 'volume_device_name', env.get('VOLUME_DEVICE_NAME'))
-    if image_id is not None:
-        rconfig.set('compute', 'image_ref', image_id)
-    if image_alt_id is not None:
-        rconfig.set('compute', 'image_ref_alt', image_alt_id)
-    if flavor_id is not None:
-        rconfig.set('compute', 'flavor_ref', flavor_id)
-    if flavor_alt_id is not None:
-        rconfig.set('compute', 'flavor_ref_alt', flavor_alt_id)
-    if compute_cnt > 1:
-        # enable multinode tests
-        rconfig.set('compute', 'min_compute_nodes', compute_cnt)
-        rconfig.set('compute-feature-enabled', 'live_migration', True)
-    filters = ['RetryFilter', 'AvailabilityZoneFilter', 'ComputeFilter',
-               'ComputeCapabilitiesFilter', 'ImagePropertiesFilter',
-               'ServerGroupAntiAffinityFilter', 'ServerGroupAffinityFilter']
-    rconfig.set(
-        'compute-feature-enabled', 'scheduler_available_filters',
-        functest_utils.convert_list_to_ini(filters))
-    if os.environ.get('OS_REGION_NAME'):
-        rconfig.set('identity', 'region', os.environ.get('OS_REGION_NAME'))
-    if env.get("NEW_USER_ROLE").lower() != "member":
-        rconfig.set(
-            'auth', 'tempest_roles',
-            functest_utils.convert_list_to_ini([env.get("NEW_USER_ROLE")]))
-    if not json.loads(env.get("USE_DYNAMIC_CREDENTIALS").lower()):
-        rconfig.set('auth', 'use_dynamic_credentials', False)
-        account_file = os.path.join(
-            getattr(config.CONF, 'dir_functest_data'), 'accounts.yaml')
-        assert os.path.exists(
-            account_file), "{} doesn't exist".format(account_file)
-        rconfig.set('auth', 'test_accounts_file', account_file)
-    rconfig.set('identity', 'auth_version', 'v3')
-    rconfig.set('identity', 'admin_role', admin_role_name)
-    rconfig.set('identity', 'admin_domain_scope', True)
-    rconfig.set('identity', 'default_domain_id', domain_id)
-    if not rconfig.has_section('network'):
-        rconfig.add_section('network')
-    rconfig.set('network', 'default_network', cidr)
-    rconfig.set('network', 'project_network_cidr', cidr)
-    rconfig.set('network', 'project_networks_reachable', False)
-    rconfig.set(
-        'identity', 'v3_endpoint_type',
-        os.environ.get('OS_INTERFACE', 'public'))
-
-    sections = rconfig.sections()
-    services_list = [
-        'compute', 'volume', 'image', 'network', 'data-processing',
-        'object-storage', 'orchestration']
-    for service in services_list:
-        if service not in sections:
-            rconfig.add_section(service)
-        rconfig.set(
-            service, 'endpoint_type', os.environ.get('OS_INTERFACE', 'public'))
-
-    LOGGER.debug('Add/Update required params defined in tempest_conf.yaml '
-                 'into tempest.conf file')
-    update_tempest_conf_file(tempest_conf_file, rconfig)
-
-
-def configure_verifier(deployment_dir):
-    """
-    Execute rally verify configure-verifier, which generates tempest.conf
-    """
-    cmd = ['rally', 'verify', 'configure-verifier', '--reconfigure',
-           '--id', str(getattr(config.CONF, 'tempest_verifier_name'))]
-    output = subprocess.check_output(cmd)
-    LOGGER.info("%s\n%s", " ".join(cmd), output)
-
-    LOGGER.debug("Looking for tempest.conf file...")
-    tempest_conf_file = os.path.join(deployment_dir, "tempest.conf")
-    if not os.path.isfile(tempest_conf_file):
-        LOGGER.error("Tempest configuration file %s NOT found.",
-                     tempest_conf_file)
-        return None
-    return tempest_conf_file
index 597c711..9749e36 100644 (file)
@@ -12,6 +12,7 @@
 
 from __future__ import division
 
+import json
 import logging
 import os
 import re
@@ -19,13 +20,13 @@ import shutil
 import subprocess
 import time
 
+import pkg_resources
 from six.moves import configparser
 from xtesting.core import testcase
 import yaml
 
 from functest.core import singlevm
 from functest.opnfv_tests.openstack.rally import rally
-from functest.opnfv_tests.openstack.tempest import conf_utils
 from functest.utils import config
 from functest.utils import env
 from functest.utils import functest_utils
@@ -40,6 +41,15 @@ class TempestCommon(singlevm.VmReady2):
     visibility = 'public'
     filename_alt = '/home/opnfv/functest/images/cirros-0.4.0-x86_64-disk.img'
     shared_network = True
+    TEMPEST_CONF_YAML = pkg_resources.resource_filename(
+        'functest',
+        'opnfv_tests/openstack/tempest/custom_tests/tempest_conf.yaml')
+    TEMPEST_CUSTOM = pkg_resources.resource_filename(
+        'functest',
+        'opnfv_tests/openstack/tempest/custom_tests/test_list.txt')
+    TEMPEST_BLACKLIST = pkg_resources.resource_filename(
+        'functest',
+        'opnfv_tests/openstack/tempest/custom_tests/blacklist.yaml')
 
     def __init__(self, **kwargs):
         if "case_name" not in kwargs:
@@ -155,17 +165,182 @@ class TempestCommon(singlevm.VmReady2):
         shutil.copyfile(conf_file,
                         os.path.join(res_dir, 'tempest.conf'))
 
+    @staticmethod
+    def create_verifier():
+        """Create new verifier"""
+        LOGGER.info("Create verifier from existing repo...")
+        cmd = ['rally', 'verify', 'delete-verifier',
+               '--id', str(getattr(config.CONF, 'tempest_verifier_name')),
+               '--force']
+        try:
+            output = subprocess.check_output(cmd)
+            LOGGER.info("%s\n%s", " ".join(cmd), output)
+        except subprocess.CalledProcessError:
+            pass
+
+        cmd = ['rally', 'verify', 'create-verifier',
+               '--source', str(getattr(config.CONF, 'dir_repo_tempest')),
+               '--name', str(getattr(config.CONF, 'tempest_verifier_name')),
+               '--type', 'tempest', '--system-wide']
+        output = subprocess.check_output(cmd)
+        LOGGER.info("%s\n%s", " ".join(cmd), output)
+        return TempestCommon.get_verifier_id()
+
+    @staticmethod
+    def get_verifier_id():
+        """
+        Returns verifier id for current Tempest
+        """
+        cmd = ("rally verify list-verifiers | awk '/" +
+               getattr(config.CONF, 'tempest_verifier_name') +
+               "/ {print $2}'")
+        proc = subprocess.Popen(cmd, shell=True,
+                                stdout=subprocess.PIPE,
+                                stderr=subprocess.STDOUT)
+        verifier_uuid = proc.stdout.readline().rstrip()
+        return verifier_uuid
+
+    @staticmethod
+    def get_verifier_repo_dir(verifier_id):
+        """
+        Returns installed verifier repo directory for Tempest
+        """
+        return os.path.join(getattr(config.CONF, 'dir_rally_inst'),
+                            'verification',
+                            'verifier-{}'.format(verifier_id),
+                            'repo')
+
+    @staticmethod
+    def get_verifier_deployment_dir(verifier_id, deployment_id):
+        """
+        Returns Rally deployment directory for current verifier
+        """
+        return os.path.join(getattr(config.CONF, 'dir_rally_inst'),
+                            'verification',
+                            'verifier-{}'.format(verifier_id),
+                            'for-deployment-{}'.format(deployment_id))
+
+    @staticmethod
+    def update_tempest_conf_file(conf_file, rconfig):
+        """Update defined paramters into tempest config file"""
+        with open(TempestCommon.TEMPEST_CONF_YAML) as yfile:
+            conf_yaml = yaml.safe_load(yfile)
+        if conf_yaml:
+            sections = rconfig.sections()
+            for section in conf_yaml:
+                if section not in sections:
+                    rconfig.add_section(section)
+                sub_conf = conf_yaml.get(section)
+                for key, value in sub_conf.items():
+                    rconfig.set(section, key, value)
+
+        with open(conf_file, 'wb') as config_file:
+            rconfig.write(config_file)
+
+    @staticmethod
+    def configure_tempest_update_params(
+            tempest_conf_file, image_id=None, flavor_id=None,
+            compute_cnt=1, image_alt_id=None, flavor_alt_id=None,
+            admin_role_name='admin', cidr='192.168.120.0/24',
+            domain_id='default'):
+        # pylint: disable=too-many-branches,too-many-arguments,
+        # too-many-statements
+        """
+        Add/update needed parameters into tempest.conf file
+        """
+        LOGGER.debug("Updating selected tempest.conf parameters...")
+        rconfig = configparser.RawConfigParser()
+        rconfig.read(tempest_conf_file)
+        rconfig.set(
+            'compute', 'volume_device_name', env.get('VOLUME_DEVICE_NAME'))
+        if image_id is not None:
+            rconfig.set('compute', 'image_ref', image_id)
+        if image_alt_id is not None:
+            rconfig.set('compute', 'image_ref_alt', image_alt_id)
+        if flavor_id is not None:
+            rconfig.set('compute', 'flavor_ref', flavor_id)
+        if flavor_alt_id is not None:
+            rconfig.set('compute', 'flavor_ref_alt', flavor_alt_id)
+        if compute_cnt > 1:
+            # enable multinode tests
+            rconfig.set('compute', 'min_compute_nodes', compute_cnt)
+            rconfig.set('compute-feature-enabled', 'live_migration', True)
+        filters = ['RetryFilter', 'AvailabilityZoneFilter', 'ComputeFilter',
+                   'ComputeCapabilitiesFilter', 'ImagePropertiesFilter',
+                   'ServerGroupAntiAffinityFilter',
+                   'ServerGroupAffinityFilter']
+        rconfig.set(
+            'compute-feature-enabled', 'scheduler_available_filters',
+            functest_utils.convert_list_to_ini(filters))
+        if os.environ.get('OS_REGION_NAME'):
+            rconfig.set('identity', 'region', os.environ.get('OS_REGION_NAME'))
+        if env.get("NEW_USER_ROLE").lower() != "member":
+            rconfig.set(
+                'auth', 'tempest_roles',
+                functest_utils.convert_list_to_ini([env.get("NEW_USER_ROLE")]))
+        if not json.loads(env.get("USE_DYNAMIC_CREDENTIALS").lower()):
+            rconfig.set('auth', 'use_dynamic_credentials', False)
+            account_file = os.path.join(
+                getattr(config.CONF, 'dir_functest_data'), 'accounts.yaml')
+            assert os.path.exists(
+                account_file), "{} doesn't exist".format(account_file)
+            rconfig.set('auth', 'test_accounts_file', account_file)
+        rconfig.set('identity', 'auth_version', 'v3')
+        rconfig.set('identity', 'admin_role', admin_role_name)
+        rconfig.set('identity', 'admin_domain_scope', True)
+        rconfig.set('identity', 'default_domain_id', domain_id)
+        if not rconfig.has_section('network'):
+            rconfig.add_section('network')
+        rconfig.set('network', 'default_network', cidr)
+        rconfig.set('network', 'project_network_cidr', cidr)
+        rconfig.set('network', 'project_networks_reachable', False)
+        rconfig.set(
+            'identity', 'v3_endpoint_type',
+            os.environ.get('OS_INTERFACE', 'public'))
+
+        sections = rconfig.sections()
+        services_list = [
+            'compute', 'volume', 'image', 'network', 'data-processing',
+            'object-storage', 'orchestration']
+        for service in services_list:
+            if service not in sections:
+                rconfig.add_section(service)
+            rconfig.set(service, 'endpoint_type',
+                        os.environ.get('OS_INTERFACE', 'public'))
+
+        LOGGER.debug('Add/Update required params defined in tempest_conf.yaml '
+                     'into tempest.conf file')
+        TempestCommon.update_tempest_conf_file(tempest_conf_file, rconfig)
+
+    @staticmethod
+    def configure_verifier(deployment_dir):
+        """
+        Execute rally verify configure-verifier, which generates tempest.conf
+        """
+        cmd = ['rally', 'verify', 'configure-verifier', '--reconfigure',
+               '--id', str(getattr(config.CONF, 'tempest_verifier_name'))]
+        output = subprocess.check_output(cmd)
+        LOGGER.info("%s\n%s", " ".join(cmd), output)
+
+        LOGGER.debug("Looking for tempest.conf file...")
+        tempest_conf_file = os.path.join(deployment_dir, "tempest.conf")
+        if not os.path.isfile(tempest_conf_file):
+            LOGGER.error("Tempest configuration file %s NOT found.",
+                         tempest_conf_file)
+            return None
+        return tempest_conf_file
+
     def generate_test_list(self, **kwargs):
         """Generate test list based on the test mode."""
         LOGGER.debug("Generating test case list...")
         self.backup_tempest_config(self.conf_file, '/etc')
         if kwargs.get('mode') == 'custom':
-            if os.path.isfile(conf_utils.TEMPEST_CUSTOM):
+            if os.path.isfile(self.TEMPEST_CUSTOM):
                 shutil.copyfile(
-                    conf_utils.TEMPEST_CUSTOM, self.list)
+                    self.TEMPEST_CUSTOM, self.list)
             else:
                 raise Exception("Tempest test list file %s NOT found."
-                                % conf_utils.TEMPEST_CUSTOM)
+                                % self.TEMPEST_CUSTOM)
         else:
             testr_mode = kwargs.get(
                 'mode', r'^tempest\.(api|scenario).*\[.*\bsmoke\b.*\]$')
@@ -188,7 +363,7 @@ class TempestCommon(singlevm.VmReady2):
             deploy_scenario = env.get('DEPLOY_SCENARIO')
             if bool(deploy_scenario):
                 # if DEPLOY_SCENARIO is set we read the file
-                black_list_file = open(conf_utils.TEMPEST_BLACKLIST)
+                black_list_file = open(self.TEMPEST_BLACKLIST)
                 black_list_yaml = yaml.safe_load(black_list_file)
                 black_list_file.close()
                 for item in black_list_yaml:
@@ -417,12 +592,12 @@ class TempestCommon(singlevm.VmReady2):
             environ=environ)
         if not self.deployment_id:
             raise Exception("Deployment create failed")
-        self.verifier_id = conf_utils.create_verifier()
+        self.verifier_id = self.create_verifier()
         if not self.verifier_id:
             raise Exception("Verifier create failed")
-        self.verifier_repo_dir = conf_utils.get_verifier_repo_dir(
+        self.verifier_repo_dir = self.get_verifier_repo_dir(
             self.verifier_id)
-        self.deployment_dir = conf_utils.get_verifier_deployment_dir(
+        self.deployment_dir = self.get_verifier_deployment_dir(
             self.verifier_id, self.deployment_id)
 
         compute_cnt = len(self.orig_cloud.list_hypervisors())
@@ -431,10 +606,10 @@ class TempestCommon(singlevm.VmReady2):
         self.flavor_alt = self.create_flavor_alt()
         LOGGER.debug("flavor: %s", self.flavor_alt)
 
-        self.conf_file = conf_utils.configure_verifier(self.deployment_dir)
+        self.conf_file = self.configure_verifier(self.deployment_dir)
         if not self.conf_file:
             raise Exception("Tempest verifier configuring failed")
-        conf_utils.configure_tempest_update_params(
+        self.configure_tempest_update_params(
             self.conf_file,
             image_id=self.image.id,
             flavor_id=self.flavor.id,
diff --git a/functest/tests/unit/openstack/tempest/test_conf_utils.py b/functest/tests/unit/openstack/tempest/test_conf_utils.py
deleted file mode 100644 (file)
index f99b02b..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-#!/usr/bin/env python
-
-# 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
-
-# pylint: disable=missing-docstring
-
-import logging
-import os
-import unittest
-
-import mock
-
-from functest.opnfv_tests.openstack.rally import rally
-from functest.opnfv_tests.openstack.tempest import conf_utils
-from functest.utils import config
-
-
-class OSTempestConfUtilsTesting(unittest.TestCase):
-    # pylint: disable=too-many-public-methods
-
-    @mock.patch('functest.opnfv_tests.openstack.tempest.conf_utils'
-                '.LOGGER.debug')
-    def test_create_verifier(self, mock_logger_debug):
-        mock_popen = mock.Mock()
-        attrs = {'poll.return_value': None,
-                 'stdout.readline.return_value': '0'}
-        mock_popen.configure_mock(**attrs)
-
-        setattr(config.CONF, 'tempest_verifier_name', 'test_verifier_name')
-        with mock.patch('subprocess.Popen', side_effect=Exception), \
-                self.assertRaises(Exception):
-            conf_utils.create_verifier()
-            mock_logger_debug.assert_any_call("Tempest test_verifier_name"
-                                              " does not exist")
-
-    @mock.patch('functest.opnfv_tests.openstack.tempest.conf_utils.'
-                'create_verifier', return_value=mock.Mock())
-    @mock.patch('functest.opnfv_tests.openstack.rally.rally.'
-                'RallyBase.create_rally_deployment', return_value=mock.Mock())
-    def test_get_verifier_id_default(self, mock_rally, mock_tempest):
-        # pylint: disable=unused-argument
-        setattr(config.CONF, 'tempest_verifier_name', 'test_verifier_name')
-        with mock.patch('functest.opnfv_tests.openstack.tempest.'
-                        'conf_utils.subprocess.Popen') as mock_popen:
-            mock_stdout = mock.Mock()
-            attrs = {'stdout.readline.return_value': 'test_deploy_id'}
-            mock_stdout.configure_mock(**attrs)
-            mock_popen.return_value = mock_stdout
-
-            self.assertEqual(conf_utils.get_verifier_id(),
-                             'test_deploy_id')
-
-    def test_get_depl_id_default(self):
-        setattr(config.CONF, 'tempest_verifier_name', 'test_deploy_name')
-        with mock.patch('functest.opnfv_tests.openstack.tempest.'
-                        'conf_utils.subprocess.Popen') as mock_popen:
-            mock_stdout = mock.Mock()
-            attrs = {'stdout.readline.return_value': 'test_deploy_id'}
-            mock_stdout.configure_mock(**attrs)
-            mock_popen.return_value = mock_stdout
-
-            self.assertEqual(rally.RallyBase.get_verifier_deployment_id(),
-                             'test_deploy_id')
-
-    def test_get_verif_repo_dir_default(self):
-        with mock.patch('functest.opnfv_tests.openstack.tempest.'
-                        'conf_utils.os.path.join',
-                        return_value='test_verifier_repo_dir'):
-            self.assertEqual(conf_utils.get_verifier_repo_dir(''),
-                             'test_verifier_repo_dir')
-
-    def test_get_depl_dir_default(self):
-        with mock.patch('functest.opnfv_tests.openstack.tempest.'
-                        'conf_utils.os.path.join',
-                        return_value='test_verifier_repo_dir'):
-            self.assertEqual(conf_utils.get_verifier_deployment_dir('', ''),
-                             'test_verifier_repo_dir')
-
-    def _test_missing_param(self, params, image_id, flavor_id, alt=False):
-        with mock.patch('six.moves.configparser.RawConfigParser.'
-                        'set') as mset, \
-            mock.patch('six.moves.configparser.RawConfigParser.'
-                       'read') as mread, \
-            mock.patch('six.moves.configparser.RawConfigParser.'
-                       'write') as mwrite, \
-            mock.patch('six.moves.builtins.open', mock.mock_open()), \
-            mock.patch('functest.utils.functest_utils.yaml.safe_load',
-                       return_value={'validation': {'ssh_timeout': 300}}):
-            os.environ['OS_INTERFACE'] = ''
-            if not alt:
-                conf_utils.configure_tempest_update_params(
-                    'test_conf_file', image_id=image_id,
-                    flavor_id=flavor_id)
-                mset.assert_any_call(params[0], params[1], params[2])
-            else:
-                conf_utils.configure_tempest_update_params(
-                    'test_conf_file', image_alt_id=image_id,
-                    flavor_alt_id=flavor_id)
-                mset.assert_any_call(params[0], params[1], params[2])
-            self.assertTrue(mread.called)
-            self.assertTrue(mwrite.called)
-
-    def test_upd_missing_image_id(self):
-        self._test_missing_param(('compute', 'image_ref', 'test_image_id'),
-                                 'test_image_id', None)
-
-    def test_upd_missing_image_id_alt(self):
-        self._test_missing_param(
-            ('compute', 'image_ref_alt', 'test_image_id_alt'),
-            'test_image_id_alt', None, alt=True)
-
-    def test_upd_missing_flavor_id(self):
-        self._test_missing_param(('compute', 'flavor_ref', 'test_flavor_id'),
-                                 None, 'test_flavor_id')
-
-    def test_upd_missing_flavor_id_alt(self):
-        self._test_missing_param(
-            ('compute', 'flavor_ref_alt', 'test_flavor_id_alt'),
-            None, 'test_flavor_id_alt', alt=True)
-
-    def test_verif_missing_conf_file(self):
-        with mock.patch('functest.opnfv_tests.openstack.tempest.'
-                        'conf_utils.os.path.isfile',
-                        return_value=False), \
-                mock.patch('subprocess.check_output') as mexe, \
-                self.assertRaises(Exception) as context:
-            conf_utils.configure_verifier('test_dep_dir')
-            mexe.assert_called_once_with("rally verify configure-verifier")
-            msg = ("Tempest configuration file 'test_dep_dir/tempest.conf'"
-                   " NOT found.")
-            self.assertTrue(msg in context.exception)
-
-    def test_configure_verifier_default(self):
-        with mock.patch('functest.opnfv_tests.openstack.tempest.'
-                        'conf_utils.os.path.isfile',
-                        return_value=True), \
-                mock.patch('subprocess.check_output') as mexe:
-            self.assertEqual(conf_utils.configure_verifier('test_dep_dir'),
-                             'test_dep_dir/tempest.conf')
-            mexe.assert_called_once_with(
-                ['rally', 'verify', 'configure-verifier', '--reconfigure',
-                 '--id', str(getattr(config.CONF, 'tempest_verifier_name'))])
-
-
-if __name__ == "__main__":
-    logging.disable(logging.CRITICAL)
-    unittest.main(verbosity=2)
index 646f882..de543b5 100644 (file)
@@ -14,8 +14,9 @@ import unittest
 import mock
 from xtesting.core import testcase
 
+from functest.opnfv_tests.openstack.rally import rally
 from functest.opnfv_tests.openstack.tempest import tempest
-from functest.opnfv_tests.openstack.tempest import conf_utils
+from functest.utils import config
 
 
 class OSTempestTesting(unittest.TestCase):
@@ -28,18 +29,18 @@ class OSTempestTesting(unittest.TestCase):
                 mock.patch('functest.opnfv_tests.openstack.rally.rally.'
                            'RallyBase.create_rally_deployment'), \
                 mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
-                           'conf_utils.create_verifier'), \
+                           'TempestCommon.create_verifier'), \
                 mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
-                           'conf_utils.get_verifier_id',
+                           'TempestCommon.get_verifier_id',
                            return_value='test_deploy_id'), \
                 mock.patch('functest.opnfv_tests.openstack.rally.rally.'
                            'RallyBase.get_verifier_deployment_id',
                            return_value='test_deploy_id'), \
                 mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
-                           'conf_utils.get_verifier_repo_dir',
+                           'TempestCommon.get_verifier_repo_dir',
                            return_value='test_verifier_repo_dir'), \
                 mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
-                           'conf_utils.get_verifier_deployment_dir',
+                           'TempestCommon.get_verifier_deployment_dir',
                            return_value='test_verifier_deploy_dir'), \
                 mock.patch('os_client_config.make_shade'):
             self.tempestcommon = tempest.TempestCommon()
@@ -56,7 +57,7 @@ class OSTempestTesting(unittest.TestCase):
             msg = "Tempest test list file %s NOT found."
             self.tempestcommon.generate_test_list()
             self.assertTrue(
-                (msg % conf_utils.TEMPEST_CUSTOM) in context.exception)
+                (msg % self.tempestcommon.TEMPEST_CUSTOM) in context.exception)
 
     @mock.patch('subprocess.check_output')
     @mock.patch('os.remove')
@@ -122,7 +123,7 @@ class OSTempestTesting(unittest.TestCase):
                         mock.mock_open()) as mock_open, \
             mock.patch.object(self.tempestcommon, 'read_file',
                               return_value=['test1', 'test2']):
-            conf_utils.TEMPEST_BLACKLIST = Exception
+            self.tempestcommon.TEMPEST_BLACKLIST = Exception
             os.environ['DEPLOY_SCENARIO'] = 'deploy_scenario'
             self.tempestcommon.apply_tempest_blacklist()
             obj = mock_open()
@@ -162,9 +163,9 @@ class OSTempestTesting(unittest.TestCase):
                        return_value=[r'\} tempest\.']), \
             mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
                        'subprocess.Popen'):
-            conf_utils.TEMPEST_LIST = 'test_tempest_list'
+            self.tempestcommon.TEMPEST_LIST = 'test_tempest_list'
             cmd = ["rally", "verify", "start", "--load-list",
-                   conf_utils.TEMPEST_LIST]
+                   self.tempestcommon.TEMPEST_LIST]
             with self.assertRaises(Exception):
                 self.tempestcommon.run_verifier_tests()
                 mock_logger_info. \
@@ -213,9 +214,9 @@ class OSTempestTesting(unittest.TestCase):
 
     def test_run_apply_blacklist_ko(self):
         with mock.patch.object(self.tempestcommon, 'generate_test_list'), \
-                mock.patch.object(
-                    self.tempestcommon, 'apply_tempest_blacklist',
-                    side_effect=Exception()):
+                mock.patch.object(self.tempestcommon,
+                                  'apply_tempest_blacklist',
+                                  side_effect=Exception()):
             self._test_run(testcase.TestCase.EX_RUN_ERROR)
 
     def test_run_verifier_tests_ko(self):
@@ -250,6 +251,126 @@ class OSTempestTesting(unittest.TestCase):
             self._test_run(testcase.TestCase.EX_OK)
             args[0].assert_called_once_with()
 
+    @mock.patch('functest.opnfv_tests.openstack.tempest.tempest.LOGGER.debug')
+    def test_create_verifier(self, mock_logger_debug):
+        mock_popen = mock.Mock()
+        attrs = {'poll.return_value': None,
+                 'stdout.readline.return_value': '0'}
+        mock_popen.configure_mock(**attrs)
+
+        setattr(config.CONF, 'tempest_verifier_name', 'test_verifier_name')
+        with mock.patch('subprocess.Popen', side_effect=Exception), \
+                self.assertRaises(Exception):
+            self.tempestcommon.create_verifier()
+            mock_logger_debug.assert_any_call("Tempest test_verifier_name"
+                                              " does not exist")
+
+    def test_get_verifier_id_default(self):
+        setattr(config.CONF, 'tempest_verifier_name', 'test_verifier_name')
+
+        with mock.patch('functest.opnfv_tests.openstack.tempest.'
+                        'tempest.subprocess.Popen') as mock_popen:
+            mock_stdout = mock.Mock()
+            attrs = {'stdout.readline.return_value': 'test_deploy_id'}
+            mock_stdout.configure_mock(**attrs)
+            mock_popen.return_value = mock_stdout
+
+            self.assertEqual(self.tempestcommon.get_verifier_id(),
+                             'test_deploy_id')
+
+    def test_get_depl_id_default(self):
+        setattr(config.CONF, 'tempest_verifier_name', 'test_deploy_name')
+        with mock.patch('functest.opnfv_tests.openstack.tempest.'
+                        'tempest.subprocess.Popen') as mock_popen:
+            mock_stdout = mock.Mock()
+            attrs = {'stdout.readline.return_value': 'test_deploy_id'}
+            mock_stdout.configure_mock(**attrs)
+            mock_popen.return_value = mock_stdout
+
+            self.assertEqual(rally.RallyBase.get_verifier_deployment_id(),
+                             'test_deploy_id')
+
+    def test_get_verif_repo_dir_default(self):
+        with mock.patch('functest.opnfv_tests.openstack.tempest.'
+                        'tempest.os.path.join',
+                        return_value='test_verifier_repo_dir'):
+            self.assertEqual(self.tempestcommon.get_verifier_repo_dir(''),
+                             'test_verifier_repo_dir')
+
+    def test_get_depl_dir_default(self):
+        with mock.patch('functest.opnfv_tests.openstack.tempest.'
+                        'tempest.os.path.join',
+                        return_value='test_verifier_repo_dir'):
+            self.assertEqual(
+                self.tempestcommon.get_verifier_deployment_dir('', ''),
+                'test_verifier_repo_dir')
+
+    def _test_missing_param(self, params, image_id, flavor_id, alt=False):
+        with mock.patch('six.moves.configparser.RawConfigParser.'
+                        'set') as mset, \
+            mock.patch('six.moves.configparser.RawConfigParser.'
+                       'read') as mread, \
+            mock.patch('six.moves.configparser.RawConfigParser.'
+                       'write') as mwrite, \
+            mock.patch('six.moves.builtins.open', mock.mock_open()), \
+            mock.patch('functest.utils.functest_utils.yaml.safe_load',
+                       return_value={'validation': {'ssh_timeout': 300}}):
+            os.environ['OS_INTERFACE'] = ''
+            if not alt:
+                self.tempestcommon.configure_tempest_update_params(
+                    'test_conf_file', image_id=image_id,
+                    flavor_id=flavor_id)
+                mset.assert_any_call(params[0], params[1], params[2])
+            else:
+                self.tempestcommon.configure_tempest_update_params(
+                    'test_conf_file', image_alt_id=image_id,
+                    flavor_alt_id=flavor_id)
+                mset.assert_any_call(params[0], params[1], params[2])
+            self.assertTrue(mread.called)
+            self.assertTrue(mwrite.called)
+
+    def test_upd_missing_image_id(self):
+        self._test_missing_param(('compute', 'image_ref', 'test_image_id'),
+                                 'test_image_id', None)
+
+    def test_upd_missing_image_id_alt(self):
+        self._test_missing_param(
+            ('compute', 'image_ref_alt', 'test_image_id_alt'),
+            'test_image_id_alt', None, alt=True)
+
+    def test_upd_missing_flavor_id(self):
+        self._test_missing_param(('compute', 'flavor_ref', 'test_flavor_id'),
+                                 None, 'test_flavor_id')
+
+    def test_upd_missing_flavor_id_alt(self):
+        self._test_missing_param(
+            ('compute', 'flavor_ref_alt', 'test_flavor_id_alt'),
+            None, 'test_flavor_id_alt', alt=True)
+
+    def test_verif_missing_conf_file(self):
+        with mock.patch('functest.opnfv_tests.openstack.tempest.'
+                        'tempest.os.path.isfile',
+                        return_value=False), \
+                mock.patch('subprocess.check_output') as mexe, \
+                self.assertRaises(Exception) as context:
+            self.tempestcommon.configure_verifier('test_dep_dir')
+            mexe.assert_called_once_with("rally verify configure-verifier")
+            msg = ("Tempest configuration file 'test_dep_dir/tempest.conf'"
+                   " NOT found.")
+            self.assertTrue(msg in context.exception)
+
+    def test_configure_verifier_default(self):
+        with mock.patch('functest.opnfv_tests.openstack.tempest.'
+                        'tempest.os.path.isfile',
+                        return_value=True), \
+                mock.patch('subprocess.check_output') as mexe:
+            self.assertEqual(
+                self.tempestcommon.configure_verifier('test_dep_dir'),
+                'test_dep_dir/tempest.conf')
+            mexe.assert_called_once_with(
+                ['rally', 'verify', 'configure-verifier', '--reconfigure',
+                 '--id', str(getattr(config.CONF, 'tempest_verifier_name'))])
+
 
 if __name__ == "__main__":
     logging.disable(logging.CRITICAL)