summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xci/prepare_env.py3
-rw-r--r--ci/testcases.yaml2
-rw-r--r--cli/commands/cli_os.py6
-rw-r--r--cli/commands/cli_testcase.py5
-rw-r--r--cli/commands/cli_tier.py5
-rwxr-xr-xtestcases/OpenStack/rally/run_rally-cert.py9
-rwxr-xr-xtestcases/OpenStack/tempest/run_tempest.py4
-rw-r--r--testcases/OpenStack/vPing/vping_util.py7
-rwxr-xr-xtestcases/features/copper.py8
-rwxr-xr-xtestcases/features/doctor.py7
-rwxr-xr-xtestcases/features/domino.py7
-rwxr-xr-xtestcases/features/promise.py9
-rw-r--r--testcases/vnf/vIMS/orchestrator.py103
-rwxr-xr-xtestcases/vnf/vIMS/vIMS.py19
-rwxr-xr-xtestcases/vnf/vRNC/parser.py7
-rw-r--r--utils/functest_utils.py15
-rwxr-xr-xutils/openstack_clean.py11
-rwxr-xr-xutils/openstack_utils.py7
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