diff options
-rw-r--r-- | ci/config_functest.yaml | 2 | ||||
-rw-r--r-- | docker/requirements.pip | 1 | ||||
-rw-r--r-- | docs/release-notes/functest-release.rst | 7 | ||||
-rwxr-xr-x | testcases/features/copper.py | 16 | ||||
-rwxr-xr-x | testcases/security_scan/security_scan.py | 13 | ||||
-rw-r--r-- | testcases/vnf/vIMS/orchestrator.py | 2 | ||||
-rwxr-xr-x | testcases/vnf/vRNC/parser.py | 15 | ||||
-rw-r--r-- | utils/functest_utils.py | 15 | ||||
-rwxr-xr-x | utils/openstack_clean.py | 11 | ||||
-rwxr-xr-x | utils/openstack_utils.py | 7 |
10 files changed, 64 insertions, 25 deletions
diff --git a/ci/config_functest.yaml b/ci/config_functest.yaml index e58fcea1..2b3317a1 100644 --- a/ci/config_functest.yaml +++ b/ci/config_functest.yaml @@ -170,7 +170,7 @@ promise: image_name: promise-img flavor_name: promise-flavor flavor_vcpus: 1 - flavor_ram: 512 + flavor_ram: 128 flavor_disk: 0 network_name: promise-net subnet_name: promise-subnet diff --git a/docker/requirements.pip b/docker/requirements.pip index 25ec795f..7ba1a350 100644 --- a/docker/requirements.pip +++ b/docker/requirements.pip @@ -11,6 +11,7 @@ pyyaml==3.10 gitpython==1.0.1 python-openstackclient==2.3.0 python-ceilometerclient==1.5.1 +python-keystoneclient==2.3.1 virtualenv==1.11.4 pexpect==4.0 requests==2.8.0 diff --git a/docs/release-notes/functest-release.rst b/docs/release-notes/functest-release.rst index 6ebab22a..9623b43d 100644 --- a/docs/release-notes/functest-release.rst +++ b/docs/release-notes/functest-release.rst @@ -242,6 +242,13 @@ Colorado known restrictions/issues | | | metadata service excluded from onos scenarios| | | | https://gerrit.opnfv.org/gerrit/#/c/18729/ | +-----------+-----------+----------------------------------------------+ +| any | odl_l3-* | Tempest cases related to using floating IP | +| | | addresses fail because of a known ODL bug. | +| | | vPing_ssh test case is excluded for the same | +| | | reason. | +| | | https://jira.opnfv.org/browse/APEX-112 | +| | | https://jira.opnfv.org/browse/FUNCTEST-445 | ++-----------+-----------+----------------------------------------------+ | apex/fuel | *-bgpvpn | vPing_ssh (floating ips not supported) and | | | | vIMS excluded. Some Tempest cases related to | | | | floating ips also excluded. | diff --git a/testcases/features/copper.py b/testcases/features/copper.py index b1df99a5..50319d96 100755 --- a/testcases/features/copper.py +++ b/testcases/features/copper.py @@ -14,23 +14,24 @@ # See the License for the specific language governing permissions and # limitations under the License. # +import argparse import sys import time -import argparse import functest.utils.functest_logger as ft_logger import functest.utils.functest_utils as functest_utils + parser = argparse.ArgumentParser() parser.add_argument("-r", "--report", help="Create json result file", action="store_true") args = parser.parse_args() -functest_yaml = functest_utils.get_functest_yaml() - -dirs = functest_yaml.get('general').get('directories') -COPPER_REPO = dirs.get('dir_repo_copper') +COPPER_REPO = functest_utils.get_parameter_from_yaml( + 'general.directories.dir_repo_copper') +RESULTS_DIR = functest_utils.get_parameter_from_yaml( + 'general.directories.dir_results') logger = ft_logger.Logger("copper").getLogger() @@ -40,7 +41,10 @@ def main(): start_time = time.time() - ret_val = functest_utils.execute_command(cmd, exit_on_error=False) + log_file = RESULTS_DIR + "/copper.log" + ret_val = functest_utils.execute_command(cmd, + exit_on_error=False, + output_file=log_file) stop_time = time.time() duration = round(stop_time - start_time, 1) diff --git a/testcases/security_scan/security_scan.py b/testcases/security_scan/security_scan.py index 7b925021..ac7b78ed 100755 --- a/testcases/security_scan/security_scan.py +++ b/testcases/security_scan/security_scan.py @@ -12,18 +12,19 @@ # nominated node. Post scan a report is downloaded and if '--clean' is passed # all trace of the scan is removed from the remote system. + +import argparse +import connect import datetime import os import sys -from ConfigParser import SafeConfigParser -import argparse +from ConfigParser import SafeConfigParser from functest.utils.functest_utils import FUNCTEST_REPO as FUNCTEST_REPO from keystoneclient import session from keystoneclient.auth.identity import v2 from novaclient import client -import connect __version__ = 0.1 __author__ = 'Luke Hinds (lhinds@redhat.com)' @@ -80,16 +81,16 @@ def run_tests(host, nodetype): connect.logger.info("Internet Connection OK.") connect.logger.info("Creating temp file structure..") createfiles(host, port, user, localkey) - connect.logger.info("Installing OpenSCAP...") + connect.logger.debug("Installing OpenSCAP...") install_pkg(host, port, user, localkey) - connect.logger.info("Running scan...") + connect.logger.debug("Running scan...") run_scanner(host, port, user, localkey, nodetype) clean = cfgparse.get(nodetype, 'clean') connect.logger.info("Post installation tasks....") post_tasks(host, port, user, localkey, nodetype) if clean: connect.logger.info("Cleaning down environment....") - connect.logger.info("Removing OpenSCAP....") + connect.logger.debug("Removing OpenSCAP....") removepkg(host, port, user, localkey, nodetype) connect.logger.info("Deleting tmp file and reports (remote)...") cleandir(host, port, user, localkey, nodetype) diff --git a/testcases/vnf/vIMS/orchestrator.py b/testcases/vnf/vIMS/orchestrator.py index 3e5117ff..61157a4f 100644 --- a/testcases/vnf/vIMS/orchestrator.py +++ b/testcases/vnf/vIMS/orchestrator.py @@ -188,7 +188,7 @@ class orchestrator: except: self.logger.error("Clearwater undeployment failed") - def _download_blueprints(blueprint_url, branch, dest_path): + def _download_blueprints(self, blueprint_url, branch, dest_path): if os.path.exists(dest_path): shutil.rmtree(dest_path) try: diff --git a/testcases/vnf/vRNC/parser.py b/testcases/vnf/vRNC/parser.py index 37e84d87..5ff207c1 100755 --- a/testcases/vnf/vRNC/parser.py +++ b/testcases/vnf/vRNC/parser.py @@ -14,22 +14,23 @@ # See the License for the specific language governing permissions and # limitations under the License. # +import argparse import time -import argparse import functest.utils.functest_logger as ft_logger import functest.utils.functest_utils as functest_utils + parser = argparse.ArgumentParser() parser.add_argument("-r", "--report", help="Create json result file", action="store_true") args = parser.parse_args() -functest_yaml = functest_utils.get_functest_yaml() - -dirs = functest_yaml.get('general').get('directories') -PARSER_REPO = dirs.get('dir_repo_parser') +PARSER_REPO = functest_utils.get_parameter_from_yaml( + 'general.directories.dir_repo_parser') +RESULTS_DIR = functest_utils.get_parameter_from_yaml( + 'general.directories.dir_results') logger = ft_logger.Logger("parser").getLogger() @@ -40,9 +41,11 @@ def main(): cmd = 'cd %s/tests && ./functest_run.sh' % PARSER_REPO start_time = time.time() + log_file = RESULTS_DIR + "/parser.log" ret = functest_utils.execute_command(cmd, info=True, - exit_on_error=False) + exit_on_error=False, + output_file=log_file) stop_time = time.time() status, details = functest_utils.check_test_result(project, diff --git a/utils/functest_utils.py b/utils/functest_utils.py index 8c5dd835..644ad1a1 100644 --- a/utils/functest_utils.py +++ b/utils/functest_utils.py @@ -294,7 +294,7 @@ def get_ci_envvars(): def execute_command(cmd, exit_on_error=True, info=False, error_msg="", - verbose=True): + verbose=True, output_file=None): if not error_msg: error_msg = ("The command '%s' failed." % cmd) msg_exec = ("Executing command: '%s'" % cmd) @@ -305,10 +305,17 @@ def execute_command(cmd, exit_on_error=True, info=False, error_msg="", logger.debug(msg_exec) p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + if output_file: + f = open(output_file, "w") for line in iter(p.stdout.readline, b''): - line = line.replace('\n', '') - print line - sys.stdout.flush() + if output_file: + f.write(line) + else: + line = line.replace('\n', '') + print line + sys.stdout.flush() + if output_file: + f.close() p.stdout.close() returncode = p.wait() if returncode != 0: diff --git a/utils/openstack_clean.py b/utils/openstack_clean.py index 8e7dee8f..ef26be1f 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 bc718bb2..ff9b54a5 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 |