From 7c9aef8db83e025034e3427c1330a00420fae50a Mon Sep 17 00:00:00 2001 From: Morgan Richomme Date: Thu, 17 Mar 2016 18:09:12 +0100 Subject: Add criteria and version when pushing the results into test DB JIRA: FUNCTEST-151 Change-Id: Iac36f28db5f2203d7b2977a2bb973534fe167bac Signed-off-by: Morgan Richomme --- testcases/Controllers/ODL/CI/odlreport2db.py | 19 +++++ .../Controllers/ONOS/Teston/CI/onosfunctest.py | 80 ++++++++++++++-------- .../VIM/OpenStack/CI/libraries/run_rally-cert.py | 37 ++++++---- testcases/features/doctor.py | 17 +++-- testcases/features/promise.py | 63 ++++++++--------- testcases/functest_utils.py | 52 ++++++++------ testcases/vIMS/CI/vIMS.py | 54 +++++++++------ testcases/vPing/CI/libraries/vPing_ssh.py | 59 ++++++++-------- testcases/vPing/CI/libraries/vPing_userdata.py | 42 +++++++----- 9 files changed, 258 insertions(+), 165 deletions(-) (limited to 'testcases') diff --git a/testcases/Controllers/ODL/CI/odlreport2db.py b/testcases/Controllers/ODL/CI/odlreport2db.py index 50731ffe1..3a696eb2d 100644 --- a/testcases/Controllers/ODL/CI/odlreport2db.py +++ b/testcases/Controllers/ODL/CI/odlreport2db.py @@ -130,12 +130,31 @@ def main(argv): # -i fuel # -p opnfv-jump-2 # -s os-odl_l2-ha + version = scenario + + # success criteria for ODL = 100% of tests OK + status = "failed" + try: + tests_passed = 0 + tests_failed = 0 + for v in data['details']: + if v['test_status']['@status'] == "PASS": + tests_passed += 1 + else: + tests_failed += 1 + + if (tests_failed < 1): + status = "passed" + except: + print("Unable to set criteria" % sys.exc_info()[0]) functest_utils.push_results_to_db(database, "functest", data['case_name'], None, data['pod_name'], + version, scenario, + status, build_tag, data) except: diff --git a/testcases/Controllers/ONOS/Teston/CI/onosfunctest.py b/testcases/Controllers/ONOS/Teston/CI/onosfunctest.py index 563fa5082..a47198b96 100644 --- a/testcases/Controllers/ONOS/Teston/CI/onosfunctest.py +++ b/testcases/Controllers/ONOS/Teston/CI/onosfunctest.py @@ -55,11 +55,12 @@ if not os.path.exists(REPO_PATH): sys.path.append(REPO_PATH + "testcases/") import functest_utils -ONOSCI_PATH= REPO_PATH+'testcases/Controllers/ONOS/Teston/CI/' +ONOSCI_PATH = REPO_PATH + 'testcases/Controllers/ONOS/Teston/CI/' starttime = datetime.datetime.now() HOME = os.environ['HOME'] + "/" + def RunScript(testname): """ Run ONOS Test Script @@ -67,9 +68,10 @@ def RunScript(testname): testname: ONOS Testcase Name """ runtest = ONOSCI_PATH + "OnosSystemTest/TestON/bin/cli.py run " + testname - logger.debug( "Run script " + testname ) + logger.debug("Run script " + testname) os.system(runtest) + def DownloadCodes(url="https://github.com/sunyulin/OnosSystemTest.git"): """ Download Onos Teston codes @@ -77,9 +79,10 @@ def DownloadCodes(url="https://github.com/sunyulin/OnosSystemTest.git"): url: github url """ downloadcode = "git clone " + url + " " + ONOSCI_PATH + "OnosSystemTest" - logger.debug( "Download Onos Teston codes " + url) + logger.debug("Download Onos Teston codes " + url) os.system(downloadcode) + def GetResult(): LOGPATH = ONOSCI_PATH + "OnosSystemTest/TestON/logs" cmd = "grep -rnh " + "Fail" + " " + LOGPATH @@ -93,7 +96,7 @@ def GetResult(): else: logger.debug("Testcases Success") Result = "Success" - #payload={'timestart': str(starttime), + # payload={'timestart': str(starttime), # 'duration': str(duration), # 'status': Result} cmd = "grep -rnh 'Execution Time' " + LOGPATH @@ -103,72 +106,78 @@ def GetResult(): cmd = "grep -rnh 'Success Percentage' " + LOGPATH + "/FUNCvirNetNB_*" Resultbuffer = os.popen(cmd).read() if Resultbuffer.find('100%') >= 0: - result1='Success' + result1 = 'Success' else: - result1='Failed' + result1 = 'Failed' cmd = "grep -rnh 'Success Percentage' " + LOGPATH + "/FUNCvirNetNBL3*" Resultbuffer = os.popen(cmd).read() if Resultbuffer.find('100%') >= 0: - result2='Success' + result2 = 'Success' else: - result2='Failed' + result2 = 'Failed' status1 = [] status2 = [] cmd = "grep -rnh 'h3' " + LOGPATH + "/FUNCvirNetNB_*" Resultbuffer = os.popen(cmd).read() pattern = re.compile("

([^-]+) - ([^-]+) - (\S*)

") - #res = pattern.search(Resultbuffer).groups() + # res = pattern.search(Resultbuffer).groups() res = pattern.findall(Resultbuffer) i = 0 for index in range(len(res)): - status1.append({'Case name:':res[i][0] + res[i][1],'Case result':res[i][2]}) - i=i+1 + status1.append({'Case name:': res[i][0] + res[i][1], + 'Case result': res[i][2]}) + i = i + 1 cmd = "grep -rnh 'h3' " + LOGPATH + "/FUNCvirNetNBL3*" Resultbuffer = os.popen(cmd).read() pattern = re.compile("

([^-]+) - ([^-]+) - (\S*)

") - #res = pattern.search(Resultbuffer).groups() + # res = pattern.search(Resultbuffer).groups() res = pattern.findall(Resultbuffer) i = 0 for index in range(len(res)): - status2.append({'Case name:':res[i][0] + res[i][1],'Case result':res[i][2]}) - i=i+1 - payload={'timestart': str(starttime), - 'FUNCvirNet':{'duration': time1, - 'result': result1, - 'status': status1}, - 'FUNCvirNetL3':{'duration': time2, - 'result': result2, - 'status': status2}} + status2.append({'Case name:': res[i][0] + res[i][1], + 'Case result': res[i][2]}) + i = i + 1 + payload = {'timestart': str(starttime), + 'FUNCvirNet': {'duration': time1, + 'result': result1, + 'status': status1}, + 'FUNCvirNetL3': {'duration': time2, + 'result': result2, + 'status': status2}} return payload + def SetOnosIp(): cmd = "openstack catalog show network | grep publicURL" cmd_output = os.popen(cmd).read() - OC1=re.search(r"\d+\.\d+\.\d+\.\d+",cmd_output).group() + OC1 = re.search(r"\d+\.\d+\.\d+\.\d+", cmd_output).group() os.environ['OC1'] = OC1 time.sleep(2) - logger.debug( "ONOS IP is " + OC1) + logger.debug("ONOS IP is " + OC1) + def SetOnosIpForJoid(): cmd = "env | grep SDN_CONTROLLER" cmd_output = os.popen(cmd).read() - OC1=re.search(r"\d+\.\d+\.\d+\.\d+",cmd_output).group() + OC1 = re.search(r"\d+\.\d+\.\d+\.\d+", cmd_output).group() os.environ['OC1'] = OC1 time.sleep(2) - logger.debug( "ONOS IP is " + OC1) + logger.debug("ONOS IP is " + OC1) + def CleanOnosTest(): TESTONPATH = ONOSCI_PATH + "OnosSystemTest/" cmd = "rm -rf " + TESTONPATH os.system(cmd) time.sleep(2) - logger.debug( "Clean ONOS Teston" ) + logger.debug("Clean ONOS Teston") + def main(): DownloadCodes() if args.installer == "joid": - logger.debug( "Installer is Joid") + logger.debug("Installer is Joid") SetOnosIpForJoid() else: SetOnosIp() @@ -179,14 +188,25 @@ def main(): logger.debug("Push result into DB") # TODO check path result for the file scenario = functest_utils.get_scenario(logger) + version = scenario + result = GetResult() + + # ONOS success criteria = all tests OK + # i.e. FUNCvirNet & FUNCvirNetL3 + status = "failed" + try: + if result['FUNCvirNet']['result'] == "Success" and result['FUNCvirNetL3']['result'] == "Success": + status = "passed" + except: + logger.error("Unable to set ONOS criteria") + pod_name = functest_utils.get_pod_name(logger) build_tag = functest_utils.get_build_tag(logger) - result = GetResult() functest_utils.push_results_to_db(TEST_DB, "functest", "ONOS", - logger, pod_name, scenario, - build_tag, payload=result) + logger, pod_name, version, scenario, + status, build_tag, payload=result) except: logger.error("Error pushing results into Database") diff --git a/testcases/VIM/OpenStack/CI/libraries/run_rally-cert.py b/testcases/VIM/OpenStack/CI/libraries/run_rally-cert.py index 2137e9493..7e1f89abf 100755 --- a/testcases/VIM/OpenStack/CI/libraries/run_rally-cert.py +++ b/testcases/VIM/OpenStack/CI/libraries/run_rally-cert.py @@ -133,16 +133,21 @@ CINDER_VOLUME_TYPE_NAME = "volume_test" SUMMARY = [] -def push_results_to_db(case, payload): +def push_results_to_db(case, payload, criteria): url = TEST_DB + "/results" installer = functest_utils.get_installer_type(logger) scenario = functest_utils.get_scenario(logger) + # Until we found a way to manage version, use scenario + version = scenario pod_name = functest_utils.get_pod_name(logger) - # TODO pod_name hardcoded, info shall come from Jenkins + + # evalutate success criteria + params = {"project_name": "functest", "case_name": case, "pod_name": pod_name, "installer": installer, - "version": scenario, "details": payload} + "version": version, "scenario": scenario, + "criteria": criteria, "details": payload} headers = {'Content-Type': 'application/json'} r = requests.post(url, data=json.dumps(params), headers=headers) @@ -187,7 +192,7 @@ def live_migration_supported(): if config.read(TEMPEST_CONF_FILE) and \ config.has_section('compute-feature-enabled') and \ config.has_option('compute-feature-enabled', 'live_migration'): - return config.getboolean('compute-feature-enabled', 'live_migration') + return config.getboolean('compute-feature-enabled', 'live_migration') return False @@ -347,17 +352,19 @@ def run_task(test_name): .format(RESULTS_DIR, test_name)) as json_file: json_data = json.load(json_file) - # Push results in payload of testcase - if args.report: - logger.debug("Push result into DB") - push_results_to_db("Rally_details", json_data) - """ parse JSON operation result """ + status = "failed" if task_succeed(json_results): logger.info('Test scenario: "{}" OK.'.format(test_name) + "\n") + status = "passed" else: logger.info('Test scenario: "{}" Failed.'.format(test_name) + "\n") + # Push results in payload of testcase + if args.report: + logger.debug("Push result into DB") + push_results_to_db("Rally_details", json_data, status) + def main(): global SUMMARY @@ -477,21 +484,27 @@ def main(): # "tests": int(total_nb_tests), "success": int(total_success)} #logger.info("Results: "+str(json_results)) + # Evaluation of the success criteria + status = "failed" + # for Rally we decided that the overall success rate must be above 90% + if total_success >= 90: + status = "passed" + if args.report: logger.debug("Pushing Rally summary into DB...") - push_results_to_db("Rally", payload) + push_results_to_db("Rally", payload, status) if args.noclean: exit(0) logger.debug("Deleting image '%s' with ID '%s'..." \ - % (GLANCE_IMAGE_NAME, image_id)) + % (GLANCE_IMAGE_NAME, image_id)) if not functest_utils.delete_glance_image(nova_client, image_id): logger.error("Error deleting the glance image") if not volume_types: logger.debug("Deleting volume type '%s'..." \ - % CINDER_VOLUME_TYPE_NAME) + % CINDER_VOLUME_TYPE_NAME) if not functest_utils.delete_volume_type(cinder_client, volume_type): logger.error("Error in deleting volume type...") diff --git a/testcases/features/doctor.py b/testcases/features/doctor.py index 52ffaa900..a225d5a50 100644 --- a/testcases/features/doctor.py +++ b/testcases/features/doctor.py @@ -15,7 +15,6 @@ # import logging -import os import sys import time import yaml @@ -63,19 +62,27 @@ def main(): } pod_name = functest_utils.get_pod_name(logger) scenario = functest_utils.get_scenario(logger) + version = scenario build_tag = functest_utils.get_build_tag(logger) + + status = "failed" + if details['status'] == "OK": + status = "passed" + logger.info("Pushing result: TEST_DB_URL=%(db)s pod_name=%(pod)s " - "scenario=%(s)s details=%(d)s" % { + "version=%(v)s scenario=%(s)s criteria=%(c)s details=%(d)s" % { 'db': TEST_DB_URL, 'pod': pod_name, + 'v': version, 's': scenario, + 'c': status, 'b': build_tag, 'd': details, }) functest_utils.push_results_to_db(TEST_DB_URL, - 'doctor','doctor-notification', - logger, pod_name, scenario, - build_tag, details) + 'doctor', 'doctor-notification', + logger, pod_name, version, scenario, + status, build_tag, details) if __name__ == '__main__': diff --git a/testcases/features/promise.py b/testcases/features/promise.py index ec38ec21b..de0418211 100644 --- a/testcases/features/promise.py +++ b/testcases/features/promise.py @@ -16,7 +16,6 @@ import os import requests import subprocess import sys -import time import yaml import keystoneclient.v2_0.client as ksclient @@ -80,7 +79,6 @@ ch.setFormatter(formatter) logger.addHandler(ch) - def create_image(glance_client, name): return image_id @@ -117,10 +115,10 @@ def main(): logger.error("Error : Failed to get id for %s role" % role_name) exit(-1) - logger.info("Adding role '%s' to tenant '%s'..." % (role_id,TENANT_NAME)) + logger.info("Adding role '%s' to tenant '%s'..." % (role_id, TENANT_NAME)) if not functest_utils.add_role_user(keystone, user_id, role_id, tenant_id): logger.error("Error : Failed to add %s on tenant %s" % - (ks_creds['username'],TENANT_NAME)) + (ks_creds['username'], TENANT_NAME)) exit(-1) logger.debug("Role added successfully.") @@ -153,9 +151,8 @@ def main(): glance = glclient.Client(1, glance_endpoint, token=keystone.auth_token) nova = nvclient.Client("2", **nv_creds) - logger.info("Creating image '%s' from '%s'..." % (IMAGE_NAME, - GLANCE_IMAGE_PATH)) + GLANCE_IMAGE_PATH)) image_id = functest_utils.create_glance_image(glance, IMAGE_NAME, GLANCE_IMAGE_PATH) @@ -176,15 +173,14 @@ def main(): logger.error("Failed to create the Flavor...") exit(-1) logger.debug("Flavor '%s' with ID '%s' created successfully." % - (FLAVOR_NAME, flavor_id)) + (FLAVOR_NAME, flavor_id)) else: logger.debug("Using existing flavor '%s' with ID '%s'..." % (FLAVOR_NAME, - flavor_id)) - + flavor_id)) neutron = ntclient.Client(**nt_creds) - private_net=functest_utils.get_private_net(neutron) - if private_net == None: + private_net = functest_utils.get_private_net(neutron) + if private_net is None: logger.error("There is no private network in the deployment. Aborting...") exit(-1) logger.debug("Using private network '%s' (%s)." % (private_net['name'], @@ -199,15 +195,14 @@ def main(): os.environ["OS_TEST_FLAVOR"] = flavor_id os.environ["OS_TEST_NETWORK"] = private_net['id'] - os.chdir(PROMISE_REPO) - results_file_name='promise-results.json' - results_file=open(results_file_name,'w+') + results_file_name = 'promise-results.json' + results_file = open(results_file_name, 'w+') cmd = 'npm run -s test -- --reporter json' logger.info("Running command: %s" % cmd) ret = subprocess.call(cmd, shell=True, stdout=results_file, \ - stderr=subprocess.STDOUT) + stderr=subprocess.STDOUT) results_file.close() if ret == 0: @@ -218,7 +213,7 @@ def main(): test_status = "Failed" # Print output of file - with open(results_file_name,'r') as results_file: + with open(results_file_name, 'r') as results_file: data = results_file.read() logger.debug("\n%s" % data) json_data = json.loads(data) @@ -233,20 +228,19 @@ def main(): duration = float(json_data["stats"]["duration"])/float(1000) logger.info("\n" \ - "****************************************\n"\ - " Promise test report\n\n"\ - "****************************************\n"\ - " Suites: \t%s\n"\ - " Tests: \t%s\n"\ - " Passes: \t%s\n"\ - " Pending: \t%s\n"\ - " Failures:\t%s\n"\ - " Start: \t%s\n"\ - " End: \t%s\n"\ - " Duration:\t%s\n"\ - "****************************************\n\n"\ - % (suites, tests, passes, pending, failures, start_time, end_time, duration)) - + "****************************************\n"\ + " Promise test report\n\n"\ + "****************************************\n"\ + " Suites: \t%s\n"\ + " Tests: \t%s\n"\ + " Passes: \t%s\n"\ + " Pending: \t%s\n"\ + " Failures:\t%s\n"\ + " Start: \t%s\n"\ + " End: \t%s\n"\ + " Duration:\t%s\n"\ + "****************************************\n\n"\ + % (suites, tests, passes, pending, failures, start_time, end_time, duration)) if args.report: pod_name = functest_utils.get_pod_name(logger) @@ -260,9 +254,16 @@ def main(): "tests": int(tests), "failures": int(failures)} logger.debug("Results json: "+str(json_results)) + # criteria for Promise in Release B was 100% of tests OK + status = "failed" + if int(tests) > 32 and int(failures) < 1: + status = "passed" + params = {"project_name": "promise", "case_name": "promise", "pod_name": str(pod_name), 'installer': installer, - "version": scenario, "build_tag": build_tag, 'details': json_results} + "version": scenario, "scenario": scenario, + "criteria": status, "build_tag": build_tag, + 'details': json_results} headers = {'Content-Type': 'application/json'} logger.info("Pushing results to DB...") diff --git a/testcases/functest_utils.py b/testcases/functest_utils.py index ee6e0ed32..9a5d718bb 100644 --- a/testcases/functest_utils.py +++ b/testcases/functest_utils.py @@ -28,9 +28,9 @@ from git import Repo # ----------------------------------------------------------- -#********************************************* +# ********************************************* # CREDENTIALS -#********************************************* +# ********************************************* def check_credentials(): """ Check if the OpenStack credentials (openrc) are sourced @@ -68,17 +68,17 @@ def get_credentials(service): tenant: os.environ.get("OS_TENANT_NAME", "admin"), }) ssl = os.environ.get("OS_CACERT") - if ssl != None: - creds.update({"ca_cert":ssl}) + if ssl is not None: + creds.update({"ca_cert": ssl}) if not os.path.isfile(ssl): print "WARNING: The 'OS_CACERT' environment variable is set to %s "\ "but the file does not exist." % ssl return creds -#********************************************* +# ********************************************* # NOVA -#********************************************* +# ********************************************* def get_instances(nova_client): try: instances = nova_client.servers.list(search_opts={'all_tenants': 1}) @@ -92,7 +92,7 @@ def get_instance_status(nova_client, instance): try: instance = nova_client.servers.get(instance.id) return instance.status - except Exception, e: + except: # print "Error [get_instance_status(nova_client, '%s')]:" % \ # str(instance), e return None @@ -188,9 +188,9 @@ def delete_floating_ip(nova_client, floatingip_id): return False -#********************************************* +# ********************************************* # NEUTRON -#********************************************* +# ********************************************* def get_network_list(neutron_client): network_list = neutron_client.list_networks()['networks'] if len(network_list) == 0: @@ -434,9 +434,9 @@ def remove_gateway_router(neutron_client, router_id): return False -#********************************************* +# ********************************************* # SEC GROUPS -#********************************************* +# ********************************************* def get_security_groups(neutron_client): try: security_groups = neutron_client.list_security_groups()[ @@ -533,9 +533,9 @@ def delete_security_group(neutron_client, secgroup_id): return False -#********************************************* +# ********************************************* # GLANCE -#********************************************* +# ********************************************* def get_images(nova_client): try: images = nova_client.images.list() @@ -582,9 +582,9 @@ def delete_glance_image(nova_client, image_id): return False -#********************************************* +# ********************************************* # CINDER -#********************************************* +# ********************************************* def get_volumes(cinder_client): try: volumes = cinder_client.volumes.list(search_opts={'all_tenants': 1}) @@ -659,9 +659,9 @@ def delete_volume_type(cinder_client, volume_type): return False -#********************************************* +# ********************************************* # KEYSTONE -#********************************************* +# ********************************************* def get_tenants(keystone_client): try: tenants = keystone_client.tenants.list() @@ -837,6 +837,15 @@ def get_scenario(logger=None): return scenario +def get_version(logger=None): + """ + Get version + """ + # TODO + + return "" + + def get_pod_name(logger=None): """ Get PoD Name from env variable NODE_NAME @@ -865,7 +874,7 @@ def get_build_tag(logger=None): def push_results_to_db(db_url, project, case_name, logger, pod_name, - version, build_tag, payload): + version, scenario, criteria, build_tag, payload): """ POST results to the Result target DB """ @@ -873,7 +882,8 @@ def push_results_to_db(db_url, project, case_name, logger, pod_name, installer = get_installer_type(logger) params = {"project_name": project, "case_name": case_name, "pod_name": pod_name, "installer": installer, - "version": version, "build_tag": build_tag, "details": payload} + "version": version, "scenario": scenario, "criteria": criteria, + "build_tag": build_tag, "details": payload} headers = {'Content-Type': 'application/json'} try: @@ -882,8 +892,8 @@ def push_results_to_db(db_url, project, case_name, logger, pod_name, logger.debug(r) return True except Exception, e: - print "Error [push_results_to_db('%s', '%s', '%s', '%s', '%s', '%s', '%s')]:" \ - % (db_url, project, case_name, pod_name, version, build_tag, payload), e + print "Error [push_results_to_db('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')]:" \ + % (db_url, project, case_name, pod_name, version, scenario, criteria, build_tag, payload), e return False diff --git a/testcases/vIMS/CI/vIMS.py b/testcases/vIMS/CI/vIMS.py index 10246e5f9..9aff4d8d6 100644 --- a/testcases/vIMS/CI/vIMS.py +++ b/testcases/vIMS/CI/vIMS.py @@ -19,11 +19,9 @@ import argparse import yaml import pprint import sys -import shutil import json import datetime import requests -from git import Repo import keystoneclient.v2_0.client as ksclient import glanceclient.client as glclient import novaclient.client as nvclient @@ -32,7 +30,6 @@ from neutronclient.v2_0 import client as ntclient from orchestrator import * from clearwater import * -import urllib pp = pprint.PrettyPrinter(indent=4) @@ -131,11 +128,12 @@ def step_failure(step_name, error_msg): exit(-1) -def push_results(): +def push_results(status): if args.report: logger.debug("Pushing results to DB....") scenario = functest_utils.get_scenario(logger) + version = scenario pod_name = functest_utils.get_pod_name(logger) build_tag = functest_utils.get_build_tag(logger) @@ -143,7 +141,9 @@ def push_results(): project="functest", case_name="vIMS", logger=logger, pod_name=pod_name, - version=scenario, + version=version, + scenario=scenario, + criteria=status, build_tag=build_tag, payload=RESULTS) @@ -175,13 +175,13 @@ def test_clearwater(): url = ellis_url + "accounts" params = {"password": "functest", - "full_name": "opnfv functest user", - "email": "functest@opnfv.fr", - "signup_code": "secret" - } + "full_name": "opnfv functest user", + "email": "functest@opnfv.fr", + "signup_code": "secret"} + rq = requests.post(url, data=params) i = 20 - while rq.status_code != 201 and i>0 : + while rq.status_code != 201 and i > 0: rq = requests.post(url, data=params) i = i-1 time.sleep(10) @@ -195,7 +195,7 @@ def test_clearwater(): if cookies != "": rq = requests.post(url, cookies=cookies) i = 24 - while rq.status_code != 200 and i>0: + while rq.status_code != 200 and i > 0: rq = requests.post(url, cookies=cookies) i = i-1 time.sleep(25) @@ -244,7 +244,19 @@ def test_clearwater(): logger.error("Unable to retrieve test results") set_result("sig_test", duration, vims_test_result) - push_results() + + # success criteria for vIMS (for Brahmaputra) + # - orchestrator deployed + # - VNF deployed + status = "failed" + try: + # TODO precise condition, for the moment if duration > 3m, + # => I consider it is good.. + if RESULTS['orchestrator']['duration'] > 180 and RESULT['vIMS']['duration'] > 180: + status = "passed" + except: + logger.error("Unable to set test status") + push_results(status) try: os.remove(VIMS_TEST_DIR + "temp.json") @@ -254,7 +266,7 @@ def test_clearwater(): def main(): - ################ GENERAL INITIALISATION ################ + # ############### GENERAL INITIALISATION ################ if not os.path.exists(VIMS_DATA_DIR): os.makedirs(VIMS_DATA_DIR) @@ -352,7 +364,7 @@ def main(): step_failure( "init", "Failed to update cinder quota for tenant " + TENANT_NAME) - ################ CLOUDIFY INITIALISATION ################ + # ############### CLOUDIFY INITIALISATION ################ cfy = orchestrator(VIMS_DATA_DIR, CFY_INPUTS, logger) @@ -413,7 +425,7 @@ def main(): cfy.download_manager_blueprint( CFY_MANAGER_BLUEPRINT['url'], CFY_MANAGER_BLUEPRINT['branch']) - ################ CLOUDIFY DEPLOYMENT ################ + # ############### CLOUDIFY DEPLOYMENT ################ start_time_ts = time.time() end_time_ts = start_time_ts logger.info("Cloudify deployment Start Time:'%s'" % ( @@ -429,7 +441,7 @@ def main(): logger.info("Cloudify deployment duration:'%s'" % duration) set_result("orchestrator", duration, "") - ################ CLEARWATER INITIALISATION ################ + # ############### CLEARWATER INITIALISATION ################ cw = clearwater(CW_INPUTS, cfy, logger) @@ -473,7 +485,7 @@ def main(): cw.set_external_network_name(ext_net) - ################ CLEARWATER DEPLOYMENT ################ + # ############### CLEARWATER DEPLOYMENT ################ start_time_ts = time.time() end_time_ts = start_time_ts @@ -490,19 +502,19 @@ def main(): logger.info("vIMS VNF deployment duration:'%s'" % duration) set_result("vIMS", duration, "") - ################ CLEARWATER TEST ################ + # ############### CLEARWATER TEST ################ test_clearwater() - ########### CLEARWATER UNDEPLOYMENT ############ + # ########## CLEARWATER UNDEPLOYMENT ############ cw.undeploy_vnf() - ############ CLOUDIFY UNDEPLOYMENT ############# + # ########### CLOUDIFY UNDEPLOYMENT ############# cfy.undeploy_manager() - ############### GENERAL CLEANUP ################ + # ############## GENERAL CLEANUP ################ if args.noclean: exit(0) diff --git a/testcases/vPing/CI/libraries/vPing_ssh.py b/testcases/vPing/CI/libraries/vPing_ssh.py index 508ac0ff5..530286c9c 100644 --- a/testcases/vPing/CI/libraries/vPing_ssh.py +++ b/testcases/vPing/CI/libraries/vPing_ssh.py @@ -20,7 +20,6 @@ import os import paramiko import pprint import re -import subprocess import sys import time import yaml @@ -160,11 +159,11 @@ def waitVmDeleted(nova, vm): def create_private_neutron_net(neutron): # Check if the network already exists - network_id = functest_utils.get_network_id(neutron,NEUTRON_PRIVATE_NET_NAME) - subnet_id = functest_utils.get_subnet_id(neutron,NEUTRON_PRIVATE_SUBNET_NAME) - router_id = functest_utils.get_router_id(neutron,NEUTRON_ROUTER_NAME) + network_id = functest_utils.get_network_id(neutron, NEUTRON_PRIVATE_NET_NAME) + subnet_id = functest_utils.get_subnet_id(neutron, NEUTRON_PRIVATE_SUBNET_NAME) + router_id = functest_utils.get_router_id(neutron, NEUTRON_ROUTER_NAME) - if network_id != '' and subnet_id != '' and router_id != '' : + if network_id != '' and subnet_id != '' and router_id != '': logger.info("Using existing network '%s'..." % NEUTRON_PRIVATE_NET_NAME) else: neutron.format = 'json' @@ -208,6 +207,7 @@ def create_private_neutron_net(neutron): 'router_id': router_id} return network_dic + def create_security_group(neutron_client): sg_id = functest_utils.get_security_group_id(neutron_client, SECGROUP_NAME) if sg_id != '': @@ -215,8 +215,8 @@ def create_security_group(neutron_client): else: logger.info("Creating security group '%s'..." % SECGROUP_NAME) SECGROUP = functest_utils.create_security_group(neutron_client, - SECGROUP_NAME, - SECGROUP_DESCR) + SECGROUP_NAME, + SECGROUP_DESCR) if not SECGROUP: logger.error("Failed to create the security group...") return False @@ -224,26 +224,27 @@ def create_security_group(neutron_client): sg_id = SECGROUP['id'] logger.debug("Security group '%s' with ID=%s created successfully." %\ - (SECGROUP['name'], sg_id)) + (SECGROUP['name'], sg_id)) logger.debug("Adding ICMP rules in security group '%s'..." % SECGROUP_NAME) if not functest_utils.create_secgroup_rule(neutron_client, sg_id, \ - 'ingress', 'icmp'): + 'ingress', 'icmp'): logger.error("Failed to create the security group rule...") return False logger.debug("Adding SSH rules in security group '%s'..." % SECGROUP_NAME) if not functest_utils.create_secgroup_rule(neutron_client, sg_id, \ - 'ingress', 'tcp', '22', '22'): + 'ingress', 'tcp', '22', '22'): logger.error("Failed to create the security group rule...") return False if not functest_utils.create_secgroup_rule(neutron_client, sg_id, \ - 'egress', 'tcp', '22', '22'): + 'egress', 'tcp', '22', '22'): logger.error("Failed to create the security group rule...") return False return sg_id + def cleanup(nova, neutron, image_id, network_dic, sg_id, floatingip): if args.noclean: logger.debug("The OpenStack resources are not deleted.") @@ -333,12 +334,17 @@ def push_results(start_time_ts, duration, test_status): try: logger.debug("Pushing result into DB...") scenario = functest_utils.get_scenario(logger) + version = scenario + criteria = "failed" + if test_status == "OK": + criteria = "passed" pod_name = functest_utils.get_pod_name(logger) build_tag = functest_utils.get_build_tag(logger) functest_utils.push_results_to_db(TEST_DB, "functest", "vPing", - logger, pod_name, scenario, build_tag, + logger, pod_name, version, scenario, + criteria, build_tag, payload={'timestart': start_time_ts, 'duration': duration, 'status': test_status}) @@ -369,7 +375,7 @@ def main(): logger.info("Using existing image '%s'..." % GLANCE_IMAGE_NAME) else: logger.info("Creating image '%s' from '%s'..." % (GLANCE_IMAGE_NAME, - GLANCE_IMAGE_PATH)) + GLANCE_IMAGE_PATH)) image_id = functest_utils.create_glance_image(glance_client, GLANCE_IMAGE_NAME, GLANCE_IMAGE_PATH) @@ -377,8 +383,7 @@ def main(): logger.error("Failed to create a Glance image...") return(EXIT_CODE) logger.debug("Image '%s' with ID=%s created successfully." %\ - (GLANCE_IMAGE_NAME, image_id)) - + (GLANCE_IMAGE_NAME, image_id)) network_dic = create_private_neutron_net(neutron_client) if not network_dic: @@ -407,7 +412,6 @@ def main(): logger.info("Instance %s found. Deleting..." % server.name) server.delete() - # boot VM 1 start_time_ts = time.time() end_time_ts = start_time_ts @@ -470,7 +474,7 @@ def main(): floatip = floatip_dic['fip_addr'] floatip_id = floatip_dic['fip_id'] - if floatip == None: + if floatip is None: logger.error("Cannot create floating IP.") cleanup(nova_client, neutron_client, image_id, network_dic, sg_id, floatip_dic) return (EXIT_CODE) @@ -483,8 +487,8 @@ def main(): return (EXIT_CODE) logger.info("Trying to establish SSH connection to %s..." % floatip) - username='cirros' - password='cubswin:)' + username = 'cirros' + password = 'cubswin:)' ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) @@ -498,7 +502,7 @@ def main(): ssh.connect(floatip, username=username, password=password, timeout=2) logger.debug("SSH connection established to %s." % floatip) break - except Exception, e: + except: logger.debug("Waiting for %s..." % floatip) time.sleep(6) timeout -= 1 @@ -506,7 +510,7 @@ def main(): console_log = vm2.get_console_output() # print each "Sending discover" captured on the console log - if len(re.findall("Sending discover",console_log)) > discover_count and not got_ip: + if len(re.findall("Sending discover", console_log)) > discover_count and not got_ip: discover_count += 1 logger.debug("Console-log '%s': Sending discover..." % NAME_VM_2) @@ -523,8 +527,7 @@ def main(): logger.info("The instance failed to get an IP from "\ "the DHCP agent. The test will probably timeout...") - - if timeout == 0: # 300 sec timeout (5 min) + if timeout == 0: # 300 sec timeout (5 min) logger.error("Cannot establish connection to IP '%s'. Aborting" % floatip) cleanup(nova_client, neutron_client, image_id, network_dic, sg_id, floatip_dic) return (EXIT_CODE) @@ -533,10 +536,9 @@ def main(): ping_script = REPO_PATH + "testcases/vPing/CI/libraries/ping.sh" try: - scp.put(ping_script,"~/") - except Exception, e: - logger.error("Cannot SCP the file '%s' to VM '%s'" % (ping_script,floatip)) - + scp.put(ping_script, "~/") + except: + logger.error("Cannot SCP the file '%s' to VM '%s'" % (ping_script, floatip)) cmd = 'chmod 755 ~/ping.sh' (stdin, stdout, stderr) = ssh.exec_command(cmd) @@ -554,7 +556,6 @@ def main(): (stdin, stdout, stderr) = ssh.exec_command(cmd) output = stdout.readlines() - for line in output: if "vPing OK" in line: logger.info("vPing detected!") @@ -570,7 +571,7 @@ def main(): logger.info("Timeout reached.") flag = True break - if flag : + if flag: break logger.debug("Pinging %s. Waiting for response..." % test_ip) sec += 1 diff --git a/testcases/vPing/CI/libraries/vPing_userdata.py b/testcases/vPing/CI/libraries/vPing_userdata.py index 8f214205b..49689f604 100644 --- a/testcases/vPing/CI/libraries/vPing_userdata.py +++ b/testcases/vPing/CI/libraries/vPing_userdata.py @@ -107,6 +107,7 @@ SECGROUP_NAME = functest_yaml.get("vping"). \ SECGROUP_DESCR = functest_yaml.get("vping"). \ get("vping_sg_descr") + def pMsg(value): """pretty printing""" @@ -155,15 +156,15 @@ def waitVmDeleted(nova, vm): def create_private_neutron_net(neutron): # Check if the network already exists - network_id = functest_utils.get_network_id(neutron,NEUTRON_PRIVATE_NET_NAME) - subnet_id = functest_utils.get_subnet_id(neutron,NEUTRON_PRIVATE_SUBNET_NAME) - router_id = functest_utils.get_router_id(neutron,NEUTRON_ROUTER_NAME) + network_id = functest_utils.get_network_id(neutron, NEUTRON_PRIVATE_NET_NAME) + subnet_id = functest_utils.get_subnet_id(neutron, NEUTRON_PRIVATE_SUBNET_NAME) + router_id = functest_utils.get_router_id(neutron, NEUTRON_ROUTER_NAME) - if network_id != '' and subnet_id != '' and router_id != '' : - logger.info("Using existing network '%s'..." % NEUTRON_PRIVATE_NET_NAME) + if network_id != '' and subnet_id != '' and router_id != '': + logger.info("Using existing network '%s'.." % NEUTRON_PRIVATE_NET_NAME) else: neutron.format = 'json' - logger.info('Creating neutron network %s...' % NEUTRON_PRIVATE_NET_NAME) + logger.info('Creating neutron network %s..' % NEUTRON_PRIVATE_NET_NAME) network_id = functest_utils. \ create_neutron_net(neutron, NEUTRON_PRIVATE_NET_NAME) @@ -203,6 +204,7 @@ def create_private_neutron_net(neutron): 'router_id': router_id} return network_dic + def create_security_group(neutron_client): sg_id = functest_utils.get_security_group_id(neutron_client, SECGROUP_NAME) if sg_id != '': @@ -210,8 +212,8 @@ def create_security_group(neutron_client): else: logger.info("Creating security group '%s'..." % SECGROUP_NAME) SECGROUP = functest_utils.create_security_group(neutron_client, - SECGROUP_NAME, - SECGROUP_DESCR) + SECGROUP_NAME, + SECGROUP_DESCR) if not SECGROUP: logger.error("Failed to create the security group...") return False @@ -219,17 +221,18 @@ def create_security_group(neutron_client): sg_id = SECGROUP['id'] logger.debug("Security group '%s' with ID=%s created successfully." %\ - (SECGROUP['name'], sg_id)) + (SECGROUP['name'], sg_id)) logger.debug("Adding ICMP rules in security group '%s'..." % SECGROUP_NAME) if not functest_utils.create_secgroup_rule(neutron_client, sg_id, \ - 'ingress', 'icmp'): + 'ingress', 'icmp'): logger.error("Failed to create the security group rule...") return False logger.debug("Adding SSH rules in security group '%s'..." % SECGROUP_NAME) if not functest_utils.create_secgroup_rule(neutron_client, sg_id, \ - 'ingress', 'tcp', '22', '22'): + 'ingress', 'tcp', + '22', '22'): logger.error("Failed to create the security group rule...") return False @@ -239,6 +242,7 @@ def create_security_group(neutron_client): return False return sg_id + def cleanup(nova, neutron, image_id, network_dic): if args.noclean: logger.debug("The OpenStack resources are not deleted.") @@ -311,16 +315,22 @@ def cleanup(nova, neutron, image_id, network_dic): return True + def push_results(start_time_ts, duration, test_status): try: logger.debug("Pushing result into DB...") scenario = functest_utils.get_scenario(logger) + version = scenario + criteria = "failed" + if test_status == "OK": + criteria = "passed" pod_name = functest_utils.get_pod_name(logger) build_tag = functest_utils.get_build_tag(logger) functest_utils.push_results_to_db(TEST_DB, "functest", "vPing_userdata", - logger, pod_name, scenario, build_tag, + logger, pod_name, version, scenario, + criteria, build_tag, payload={'timestart': start_time_ts, 'duration': duration, 'status': test_status}) @@ -351,7 +361,7 @@ def main(): logger.info("Using existing image '%s'..." % GLANCE_IMAGE_NAME) else: logger.info("Creating image '%s' from '%s'..." % (GLANCE_IMAGE_NAME, - GLANCE_IMAGE_PATH)) + GLANCE_IMAGE_PATH)) image_id = functest_utils.create_glance_image(glance_client, GLANCE_IMAGE_NAME, GLANCE_IMAGE_PATH) @@ -359,7 +369,7 @@ def main(): logger.error("Failed to create a Glance image...") return(EXIT_CODE) logger.debug("Image '%s' with ID=%s created successfully." %\ - (GLANCE_IMAGE_NAME, image_id)) + (GLANCE_IMAGE_NAME, image_id)) network_dic = create_private_neutron_net(neutron_client) if not network_dic: @@ -485,8 +495,8 @@ def main(): break elif sec % 10 == 0: if "request failed" in console_log: - logger.debug("It seems userdata is not supported in nova boot."+\ - " Waiting a bit...") + logger.debug("It seems userdata is not supported in nova boot." + \ + " Waiting a bit...") metadata_tries += 1 else: logger.debug("Pinging %s. Waiting for response..." % test_ip) -- cgit 1.2.3-korg