diff options
-rwxr-xr-x | ci/prepare_env.py | 3 | ||||
-rw-r--r-- | ci/testcases.yaml | 2 | ||||
-rw-r--r-- | cli/commands/cli_os.py | 6 | ||||
-rw-r--r-- | cli/commands/cli_testcase.py | 5 | ||||
-rw-r--r-- | cli/commands/cli_tier.py | 5 | ||||
-rwxr-xr-x | testcases/OpenStack/rally/run_rally-cert.py | 9 | ||||
-rwxr-xr-x | testcases/OpenStack/tempest/run_tempest.py | 4 | ||||
-rw-r--r-- | testcases/OpenStack/vPing/vping_util.py | 7 | ||||
-rwxr-xr-x | testcases/features/copper.py | 8 | ||||
-rwxr-xr-x | testcases/features/doctor.py | 7 | ||||
-rwxr-xr-x | testcases/features/domino.py | 7 | ||||
-rwxr-xr-x | testcases/features/promise.py | 9 | ||||
-rw-r--r-- | testcases/vnf/vIMS/orchestrator.py | 103 | ||||
-rwxr-xr-x | testcases/vnf/vIMS/vIMS.py | 19 | ||||
-rwxr-xr-x | testcases/vnf/vRNC/parser.py | 7 | ||||
-rw-r--r-- | utils/functest_utils.py | 15 | ||||
-rwxr-xr-x | utils/openstack_clean.py | 11 | ||||
-rwxr-xr-x | utils/openstack_utils.py | 7 |
18 files changed, 101 insertions, 133 deletions
diff --git a/ci/prepare_env.py b/ci/prepare_env.py index 116b1a6e2..b8c536f1a 100755 --- a/ci/prepare_env.py +++ b/ci/prepare_env.py @@ -50,8 +50,7 @@ CONFIG_FUNCTEST_PATH = os.environ["CONFIG_FUNCTEST_YAML"] CONFIG_PATCH_PATH = os.path.join(os.path.dirname( CONFIG_FUNCTEST_PATH), "config_patch.yaml") -with open(CONFIG_FUNCTEST_PATH) as f: - functest_yaml = yaml.safe_load(f) +functest_yaml = ft_utils.get_functest_yaml() with open(CONFIG_PATCH_PATH) as f: functest_patch_yaml = yaml.safe_load(f) diff --git a/ci/testcases.yaml b/ci/testcases.yaml index 1fa0a4c03..4fcdd1b02 100644 --- a/ci/testcases.yaml +++ b/ci/testcases.yaml @@ -161,7 +161,7 @@ tiers: Test suite for policy management based on OpenStack Congress dependencies: installer: '(apex)|(joid)' - scenario: '' + scenario: '^((?!lxd).)*$' - name: moon criteria: 'status == "PASS"' diff --git a/cli/commands/cli_os.py b/cli/commands/cli_os.py index 722c700cd..a3b7ad31e 100644 --- a/cli/commands/cli_os.py +++ b/cli/commands/cli_os.py @@ -9,15 +9,13 @@ import os + import click import functest.utils.functest_utils as ft_utils import functest.utils.openstack_clean as os_clean import functest.utils.openstack_snapshot as os_snapshot -import yaml - -with open(os.environ["CONFIG_FUNCTEST_YAML"]) as f: - functest_yaml = yaml.safe_load(f) +functest_yaml = ft_utils.get_functest_yaml() REPOS_DIR = os.getenv('repos_dir') FUNCTEST_REPO = ("%s/functest/" % REPOS_DIR) diff --git a/cli/commands/cli_testcase.py b/cli/commands/cli_testcase.py index d1b248297..498f08132 100644 --- a/cli/commands/cli_testcase.py +++ b/cli/commands/cli_testcase.py @@ -15,11 +15,8 @@ import click import functest.ci.tier_builder as tb import functest.utils.functest_utils as ft_utils import functest.utils.functest_vacation as vacation -import yaml - -with open(os.environ["CONFIG_FUNCTEST_YAML"]) as f: - functest_yaml = yaml.safe_load(f) +functest_yaml = ft_utils.get_functest_yaml() FUNCTEST_CONF_DIR = functest_yaml.get("general").get( "directories").get("dir_functest_conf") diff --git a/cli/commands/cli_tier.py b/cli/commands/cli_tier.py index 7797e9be6..ea86a79ff 100644 --- a/cli/commands/cli_tier.py +++ b/cli/commands/cli_tier.py @@ -14,11 +14,8 @@ import os import click import functest.ci.tier_builder as tb import functest.utils.functest_utils as ft_utils -import yaml - -with open(os.environ["CONFIG_FUNCTEST_YAML"]) as f: - functest_yaml = yaml.safe_load(f) +functest_yaml = ft_utils.get_functest_yaml() FUNCTEST_CONF_DIR = functest_yaml.get("general").get( "directories").get("dir_functest_conf") diff --git a/testcases/OpenStack/rally/run_rally-cert.py b/testcases/OpenStack/rally/run_rally-cert.py index f3eb79d26..43096c19e 100755 --- a/testcases/OpenStack/rally/run_rally-cert.py +++ b/testcases/OpenStack/rally/run_rally-cert.py @@ -15,18 +15,17 @@ # """ tests configuration """ -import argparse import json import os import re import subprocess import time + +import argparse import functest.utils.functest_logger as ft_logger import functest.utils.functest_utils as functest_utils import functest.utils.openstack_utils as os_utils import iniparse -import yaml - tests = ['authenticate', 'glance', 'cinder', 'heat', 'keystone', 'neutron', 'nova', 'quotas', 'requests', 'vm', 'all'] @@ -76,9 +75,7 @@ if not os.path.exists(REPO_PATH): exit(-1) -with open(os.environ["CONFIG_FUNCTEST_YAML"]) as f: - functest_yaml = yaml.safe_load(f) -f.close() +functest_yaml = functest_utils.get_functest_yaml() HOME = os.environ['HOME'] + "/" RALLY_DIR = REPO_PATH + functest_yaml.get("general").get( diff --git a/testcases/OpenStack/tempest/run_tempest.py b/testcases/OpenStack/tempest/run_tempest.py index 306664feb..fbb65dbb7 100755 --- a/testcases/OpenStack/tempest/run_tempest.py +++ b/testcases/OpenStack/tempest/run_tempest.py @@ -60,9 +60,7 @@ logger = ft_logger.Logger("run_tempest").getLogger() REPO_PATH = os.environ['repos_dir'] + '/functest/' -with open(os.environ["CONFIG_FUNCTEST_YAML"]) as f: - functest_yaml = yaml.safe_load(f) -f.close() +functest_yaml = ft_utils.get_functest_yaml() TEST_DB = functest_yaml.get("results").get("test_db_url") MODE = "smoke" diff --git a/testcases/OpenStack/vPing/vping_util.py b/testcases/OpenStack/vPing/vping_util.py index 3f4adae73..8e9ce23ec 100644 --- a/testcases/OpenStack/vPing/vping_util.py +++ b/testcases/OpenStack/vPing/vping_util.py @@ -1,6 +1,6 @@ import os -import re import pprint +import re import sys import time @@ -8,13 +8,10 @@ import functest.utils.functest_utils as ft_utils import functest.utils.openstack_utils as os_utils import paramiko from scp import SCPClient -import yaml REPO_PATH = os.environ['repos_dir'] + '/functest/' -with open(os.environ["CONFIG_FUNCTEST_YAML"]) as f: - functest_yaml = yaml.safe_load(f) -f.close() +functest_yaml = ft_utils.get_functest_yaml() NAME_VM_1 = functest_yaml.get("vping").get("vm_name_1") NAME_VM_2 = functest_yaml.get("vping").get("vm_name_2") diff --git a/testcases/features/copper.py b/testcases/features/copper.py index c79754a1b..73def7db2 100755 --- a/testcases/features/copper.py +++ b/testcases/features/copper.py @@ -14,13 +14,12 @@ # See the License for the specific language governing permissions and # limitations under the License. # -import argparse -import os import sys import time + +import argparse import functest.utils.functest_logger as ft_logger import functest.utils.functest_utils as functest_utils -import yaml parser = argparse.ArgumentParser() parser.add_argument("-r", "--report", @@ -28,8 +27,7 @@ parser.add_argument("-r", "--report", action="store_true") args = parser.parse_args() -with open(os.environ["CONFIG_FUNCTEST_YAML"]) as f: - functest_yaml = yaml.safe_load(f) +functest_yaml = functest_utils.get_functest_yaml() dirs = functest_yaml.get('general').get('directories') COPPER_REPO = dirs.get('dir_repo_copper') diff --git a/testcases/features/doctor.py b/testcases/features/doctor.py index 02edd25ca..6e6f26f37 100755 --- a/testcases/features/doctor.py +++ b/testcases/features/doctor.py @@ -13,11 +13,9 @@ # 0.2: measure test duration and publish results under json format # # -import argparse -import os import time -import yaml +import argparse import functest.utils.functest_logger as ft_logger import functest.utils.functest_utils as functest_utils @@ -27,8 +25,7 @@ parser.add_argument("-r", "--report", action="store_true") args = parser.parse_args() -with open(os.environ["CONFIG_FUNCTEST_YAML"]) as f: - functest_yaml = yaml.safe_load(f) +functest_yaml = functest_utils.get_functest_yaml() dirs = functest_yaml.get('general').get('directories') DOCTOR_REPO = dirs.get('dir_repo_doctor') diff --git a/testcases/features/domino.py b/testcases/features/domino.py index 291a3b49b..cc98f546d 100755 --- a/testcases/features/domino.py +++ b/testcases/features/domino.py @@ -14,11 +14,9 @@ # 0.3: add report flag to push results when needed # -import argparse -import os import time -import yaml +import argparse import functest.utils.functest_logger as ft_logger import functest.utils.functest_utils as functest_utils @@ -29,8 +27,7 @@ parser.add_argument("-r", "--report", action="store_true") args = parser.parse_args() -with open(os.environ["CONFIG_FUNCTEST_YAML"]) as f: - functest_yaml = yaml.safe_load(f) +functest_yaml = functest_utils.get_functest_yaml() dirs = functest_yaml.get('general').get('directories') DOMINO_REPO = dirs.get('dir_repo_domino') diff --git a/testcases/features/promise.py b/testcases/features/promise.py index 3728adfe5..3f58dcee8 100755 --- a/testcases/features/promise.py +++ b/testcases/features/promise.py @@ -9,20 +9,18 @@ # # Maintainer : jose.lausuch@ericsson.com # -import argparse import json import os import subprocess import time +import argparse import functest.utils.functest_logger as ft_logger import functest.utils.functest_utils as functest_utils import functest.utils.openstack_utils as openstack_utils import keystoneclient.v2_0.client as ksclient -from neutronclient.v2_0 import client as ntclient import novaclient.client as nvclient -import yaml - +from neutronclient.v2_0 import client as ntclient parser = argparse.ArgumentParser() @@ -32,8 +30,7 @@ parser.add_argument("-r", "--report", action="store_true") args = parser.parse_args() -with open(os.environ["CONFIG_FUNCTEST_YAML"]) as f: - functest_yaml = yaml.safe_load(f) +functest_yaml = functest_utils.get_functest_yaml() dirs = functest_yaml.get('general').get('directories') PROMISE_REPO = dirs.get('dir_repo_promise') diff --git a/testcases/vnf/vIMS/orchestrator.py b/testcases/vnf/vIMS/orchestrator.py index 3da3fb063..61157a4fb 100644 --- a/testcases/vnf/vIMS/orchestrator.py +++ b/testcases/vnf/vIMS/orchestrator.py @@ -10,22 +10,26 @@ # which accompanies this distribution, and is available at # http://www.apache.org/licenses/LICENSE-2.0 ######################################################################## -import subprocess32 as subprocess + import os import shutil +import subprocess32 as subprocess import yaml + from git import Repo +import functest.utils.functest_logger as ft_logger + class orchestrator: - def __init__(self, testcase_dir, inputs={}, logger=None): + def __init__(self, testcase_dir, inputs={}): self.testcase_dir = testcase_dir self.blueprint_dir = testcase_dir + 'cloudify-manager-blueprint/' self.input_file = 'inputs.yaml' self.manager_blueprint = False self.config = inputs - self.logger = logger + self.logger = ft_logger.Logger("Orchestrator").getLogger() self.manager_up = False def set_credentials(self, username, password, tenant_name, auth_url): @@ -56,28 +60,22 @@ class orchestrator: if 0 < len(nameservers): self.config['dns_subnet_1'] = nameservers[0] - def set_logger(self, logger): - self.logger = logger - def download_manager_blueprint(self, manager_blueprint_url, manager_blueprint_branch): if self.manager_blueprint: - if self.logger: - self.logger.info( - "cloudify manager server blueprint is " - "already downloaded !") + self.logger.info( + "cloudify manager server blueprint is " + "already downloaded !") else: - if self.logger: - self.logger.info( - "Downloading the cloudify manager server blueprint") - download_result = download_blueprints( + self.logger.info( + "Downloading the cloudify manager server blueprint") + download_result = self._download_blueprints( manager_blueprint_url, manager_blueprint_branch, self.blueprint_dir) if not download_result: - if self.logger: - self.logger.error("Failed to download manager blueprint") + self.logger.error("Failed to download manager blueprint") exit(-1) else: self.manager_blueprint = True @@ -87,8 +85,7 @@ class orchestrator: def deploy_manager(self): if self.manager_blueprint: - if self.logger: - self.logger.info("Writing the inputs file") + self.logger.info("Writing the inputs file") with open(self.blueprint_dir + "inputs.yaml", "w") as f: f.write(yaml.dump(self.config, default_style='"')) f.close() @@ -102,8 +99,7 @@ class orchestrator: if os.path.isfile(home + key_file): os.remove(home + key_file) - if self.logger: - self.logger.info("Launching the cloudify-manager deployment") + self.logger.info("Launching the cloudify-manager deployment") script = "set -e; " script += ("source " + self.testcase_dir + "venv_cloudify/bin/activate; ") @@ -120,14 +116,12 @@ class orchestrator: if error: return error - if self.logger: - self.logger.info("Cloudify-manager server is UP !") + self.logger.info("Cloudify-manager server is UP !") self.manager_up = True def undeploy_manager(self): - if self.logger: - self.logger.info("Launching the cloudify-manager undeployment") + self.logger.info("Launching the cloudify-manager undeployment") self.manager_up = False @@ -137,38 +131,33 @@ class orchestrator: cmd = "/bin/bash -c '" + script + "'" execute_command(cmd, self.logger) - if self.logger: - self.logger.info( - "Cloudify-manager server has been successfully removed!") + self.logger.info( + "Cloudify-manager server has been successfully removed!") def download_upload_and_deploy_blueprint(self, blueprint, config, bp_name, dep_name): - if self.logger: - self.logger.info("Downloading the {0} blueprint".format( - blueprint['file_name'])) - download_result = download_blueprints(blueprint['url'], - blueprint['branch'], - self.testcase_dir + - blueprint['destination_folder']) + self.logger.info("Downloading the {0} blueprint".format( + blueprint['file_name'])) + destination_folder = self.testcase_dir + \ + blueprint['destination_folder'] + download_result = self._download_blueprints(blueprint['url'], + blueprint['branch'], + destination_folder) if not download_result: - if self.logger: - self.logger.error( - "Failed to download blueprint {0}". - format(blueprint['file_name'])) + self.logger.error( + "Failed to download blueprint {0}". + format(blueprint['file_name'])) exit(-1) - if self.logger: - self.logger.info("Writing the inputs file") + self.logger.info("Writing the inputs file") with open(self.testcase_dir + blueprint['destination_folder'] + "/inputs.yaml", "w") as f: f.write(yaml.dump(config, default_style='"')) - f.close() - if self.logger: - self.logger.info("Launching the {0} deployment".format(bp_name)) + self.logger.info("Launching the {0} deployment".format(bp_name)) script = "source " + self.testcase_dir + "venv_cloudify/bin/activate; " script += ("cd " + self.testcase_dir + blueprint['destination_folder'] + "; ") @@ -183,12 +172,10 @@ class orchestrator: error = execute_command(cmd, self.logger, 2000) if error: return error - if self.logger: - self.logger.info("The deployment of {0} is ended".format(dep_name)) + self.logger.info("The deployment of {0} is ended".format(dep_name)) def undeploy_deployment(self, dep_name): - if self.logger: - self.logger.info("Launching the {0} undeployment".format(dep_name)) + self.logger.info("Launching the {0} undeployment".format(dep_name)) script = "source " + self.testcase_dir + "venv_cloudify/bin/activate; " script += "cd " + self.testcase_dir + "; " script += ("cfy executions start -w uninstall -d " + dep_name + @@ -199,8 +186,16 @@ class orchestrator: try: execute_command(cmd, self.logger) except: - if self.logger: - self.logger.error("Clearwater undeployment failed") + self.logger.error("Clearwater undeployment failed") + + def _download_blueprints(self, blueprint_url, branch, dest_path): + if os.path.exists(dest_path): + shutil.rmtree(dest_path) + try: + Repo.clone_from(blueprint_url, dest_path, branch=branch) + return True + except: + return False def execute_command(cmd, logger, timeout=1800): @@ -237,13 +232,3 @@ def execute_command(cmd, logger, timeout=1800): result += lines[len(lines) - 2] result += lines[len(lines) - 1] return result - - -def download_blueprints(blueprint_url, branch, dest_path): - if os.path.exists(dest_path): - shutil.rmtree(dest_path) - try: - Repo.clone_from(blueprint_url, dest_path, branch=branch) - return True - except: - return False diff --git a/testcases/vnf/vIMS/vIMS.py b/testcases/vnf/vIMS/vIMS.py index 373761794..7a96c94e1 100755 --- a/testcases/vnf/vIMS/vIMS.py +++ b/testcases/vnf/vIMS/vIMS.py @@ -11,28 +11,25 @@ # http://www.apache.org/licenses/LICENSE-2.0 ######################################################################## -import argparse import datetime import json import os import pprint -import requests import subprocess import time -import yaml +import argparse +import functest.utils.functest_logger as ft_logger +import functest.utils.functest_utils as functest_utils +import functest.utils.openstack_utils as os_utils import keystoneclient.v2_0.client as ksclient import novaclient.client as nvclient +import requests from neutronclient.v2_0 import client as ntclient from clearwater import clearwater from orchestrator import orchestrator -import functest.utils.functest_logger as ft_logger -import functest.utils.functest_utils as functest_utils -import functest.utils.openstack_utils as os_utils - - pp = pprint.PrettyPrinter(indent=4) @@ -54,9 +51,7 @@ if not os.path.exists(REPO_PATH): logger.error("Functest repository directory not found '%s'" % REPO_PATH) exit(-1) -with open(os.environ["CONFIG_FUNCTEST_YAML"]) as f: - functest_yaml = yaml.safe_load(f) -f.close() +functest_yaml = functest_utils.get_functest_yaml() # Cloudify parameters VIMS_DIR = (REPO_PATH + @@ -348,7 +343,7 @@ def main(): public_auth_url = keystone.service_catalog.url_for( service_type='identity', endpoint_type='publicURL') - cfy = orchestrator(VIMS_DATA_DIR, CFY_INPUTS, logger) + cfy = orchestrator(VIMS_DATA_DIR, CFY_INPUTS) cfy.set_credentials(username=ks_creds['username'], password=ks_creds[ 'password'], tenant_name=ks_creds['tenant_name'], diff --git a/testcases/vnf/vRNC/parser.py b/testcases/vnf/vRNC/parser.py index 00593b0b0..d22ca8ea4 100755 --- a/testcases/vnf/vRNC/parser.py +++ b/testcases/vnf/vRNC/parser.py @@ -14,11 +14,9 @@ # See the License for the specific language governing permissions and # limitations under the License. # -import os import time -import yaml -import argparse +import argparse import functest.utils.functest_logger as ft_logger import functest.utils.functest_utils as functest_utils @@ -28,8 +26,7 @@ parser.add_argument("-r", "--report", action="store_true") args = parser.parse_args() -with open(os.environ["CONFIG_FUNCTEST_YAML"]) as f: - functest_yaml = yaml.safe_load(f) +functest_yaml = functest_utils.get_functest_yaml() dirs = functest_yaml.get('general').get('directories') PARSER_REPO = dirs.get('dir_repo_parser') diff --git a/utils/functest_utils.py b/utils/functest_utils.py index b8bd403a1..ff8234104 100644 --- a/utils/functest_utils.py +++ b/utils/functest_utils.py @@ -152,9 +152,7 @@ def get_db_url(logger=None): """ Returns DB URL """ - with open(os.environ["CONFIG_FUNCTEST_YAML"]) as f: - functest_yaml = yaml.safe_load(f) - f.close() + functest_yaml = get_functest_yaml() db_url = functest_yaml.get("results").get("test_db_url") return db_url @@ -329,9 +327,7 @@ def get_deployment_dir(logger=None): """ Returns current Rally deployment directory """ - with open(os.environ["CONFIG_FUNCTEST_YAML"]) as f: - functest_yaml = yaml.safe_load(f) - f.close() + functest_yaml = get_functest_yaml() deployment_name = functest_yaml.get("rally").get("deployment_name") rally_dir = functest_yaml.get("general").get("directories").get( "dir_rally_inst") @@ -437,3 +433,10 @@ def check_test_result(test_name, ret, start_time, stop_time): def get_testcases_file(): return FUNCTEST_REPO + "/ci/testcases.yaml" + + +def get_functest_yaml(): + with open(os.environ["CONFIG_FUNCTEST_YAML"]) as f: + functest_yaml = yaml.safe_load(f) + f.close() + return functest_yaml diff --git a/utils/openstack_clean.py b/utils/openstack_clean.py index 8aba763ce..3b937c917 100755 --- a/utils/openstack_clean.py +++ b/utils/openstack_clean.py @@ -202,9 +202,20 @@ def remove_networks(neutron_client, default_networks, default_routers): else: remove_routers(neutron_client, routers, default_routers) + # trozet: wait for Neutron to auto-cleanup HA networks when HA router is + # deleted + time.sleep(5) + # remove networks if network_ids is not None: for net_id in network_ids: + networks = os_utils.get_network_list(neutron_client) + if networks is None: + logger.debug("No networks left to remove") + break + elif not any(network['id'] == net_id for network in networks): + logger.debug("Network %s has already been removed" % net_id) + continue logger.debug("Removing network %s ..." % net_id) if os_utils.delete_neutron_net(neutron_client, net_id): logger.debug(" > Done!") diff --git a/utils/openstack_utils.py b/utils/openstack_utils.py index bc718bb2b..ff9b54a58 100755 --- a/utils/openstack_utils.py +++ b/utils/openstack_utils.py @@ -705,6 +705,11 @@ def create_network_association(neutron_client, bgpvpn_id, neutron_network_id): return neutron_client.create_network_association(bgpvpn_id, json_body) +def create_router_association(neutron_client, bgpvpn_id, router_id): + json_body = {"router_association": {"router_id": router_id}} + return neutron_client.create_router_association(bgpvpn_id, json_body) + + def update_bgpvpn(neutron_client, bgpvpn_id, **kwargs): json_body = {"bgpvpn": kwargs} return neutron_client.update_bgpvpn(bgpvpn_id, json_body) @@ -1077,7 +1082,7 @@ def create_tenant(keystone_client, tenant_name, tenant_description): enabled=True) return tenant.id except Exception, e: - logger.error("Error [create_tenant(cinder_client, '%s', '%s')]: %s" + logger.error("Error [create_tenant(keystone_client, '%s', '%s')]: %s" % (tenant_name, tenant_description, e)) return None |