Add criteria and version when pushing the results into test DB 05/11405/2
authorMorgan Richomme <morgan.richomme@orange.com>
Thu, 17 Mar 2016 17:09:12 +0000 (18:09 +0100)
committerMorgan Richomme <morgan.richomme@orange.com>
Fri, 18 Mar 2016 09:45:44 +0000 (10:45 +0100)
JIRA: FUNCTEST-151

Change-Id: Iac36f28db5f2203d7b2977a2bb973534fe167bac
Signed-off-by: Morgan Richomme <morgan.richomme@orange.com>
testcases/Controllers/ODL/CI/odlreport2db.py
testcases/Controllers/ONOS/Teston/CI/onosfunctest.py
testcases/VIM/OpenStack/CI/libraries/run_rally-cert.py
testcases/features/doctor.py
testcases/features/promise.py
testcases/functest_utils.py
testcases/vIMS/CI/vIMS.py
testcases/vPing/CI/libraries/vPing_ssh.py
testcases/vPing/CI/libraries/vPing_userdata.py

index 50731ff..3a696eb 100644 (file)
@@ -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:
index 563fa50..a47198b 100644 (file)
@@ -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("<h3>([^-]+) - ([^-]+) - (\S*)</h3>")
-    #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("<h3>([^-]+) - ([^-]+) - (\S*)</h3>")
-    #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")
 
index 2137e94..7e1f89a 100755 (executable)
@@ -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...")
 
index 52ffaa9..a225d5a 100644 (file)
@@ -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__':
index ec38ec2..de04182 100644 (file)
@@ -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...")
index ee6e0ed..9a5d718 100644 (file)
@@ -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
 
 
index 10246e5..9aff4d8 100644 (file)
@@ -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)
 
index 508ac0f..530286c 100644 (file)
@@ -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
index 8f21420..49689f6 100644 (file)
@@ -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)