test suite reviews and discussions
 help / color / mirror / Atom feed
From: Marvin Liu <yong.liu@intel.com>
To: dts@dpdk.org
Cc: Marvin Liu <yong.liu@intel.com>
Subject: [dts] [PATCH 1/9] framework dts: optimize execution process
Date: Thu,  4 Aug 2016 13:38:14 +0800	[thread overview]
Message-ID: <1470289102-12677-2-git-send-email-yong.liu@intel.com> (raw)
In-Reply-To: <1470289102-12677-1-git-send-email-yong.liu@intel.com>

Optimize overall execution process, decouple depencies between framework
modules. Detail information as listed.

1. Remove most of global variables
2. Move suite/case exception handler to test_case module
3. Save global setting in enviornment which can share easily
4. Move result object to test_case module
5. Remove scenario for all VF functions covered by separated suite
6. Move some shared functions to utils and setting module

Signed-off-by: Marvin Liu <yong.liu@intel.com>

diff --git a/framework/dts.py b/framework/dts.py
index d7e7927..6077a04 100644
--- a/framework/dts.py
+++ b/framework/dts.py
@@ -1,6 +1,6 @@
 # BSD LICENSE
 #
-# Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
+# Copyright(c) 2010-2016 Intel Corporation. All rights reserved.
 # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
@@ -43,129 +43,79 @@ import copy         # copy module for duplicate variable
 
 import rst          # rst file support
 import sys          # system module
-from settings import FOLDERS, NICS, LOG_NAME_SEP
+import settings     # dts settings
 from tester import Tester
 from dut import Dut
 from serializer import Serializer
-from exception import VerifyFailure
 from test_case import TestCase
 from test_result import Result
 from stats_reporter import StatsReporter
 from excel_reporter import ExcelReporter
-from utils import *
+import utils
 from exception import TimeoutException, ConfigParseException, VerifyFailure
 from logger import getLogger
 import logger
 import debugger
-from virt_scene import VirtScene
 from config import CrbsConf
-from checkCase import *
+from checkCase import parse_file, check_case_skip, check_case_support
+from utils import get_subclasses, copy_instance_attr
 import sys
 reload(sys)
 sys.setdefaultencoding('UTF8')
 
-PROJECT_MODULE_PREFIX = 'project_'
 
-debug_mode = False
-debug_case = False
 config = None
-table = None
-results_table_rows = []
-results_table_header = []
-performance_only = False
-functional_only = False
-nic = None
-rx_mode = None
 requested_tests = None
-dut = None
-duts = []
-virtduts = []
-tester = None
 result = None
 excel_report = None
-stats = None
+stats_report = None
 log_handler = None
-module = None
-Package = ''
-Patches = []
-drivername = ""
-interrupttypr = ""
-dts_commands = []
-
-
-def report(text, frame=False, annex=False):
-    """
-    Save report text into rst file.
-    """
-    if frame:
-        rst.write_frame(text, annex)
-    else:
-        rst.write_text(text, annex)
-
-
-def close_all_sessions():
-    """
-    Close session to DUT and tester.
-    """
-    # close all nics
-    for dutobj in duts:
-        if getattr(dutobj, 'ports_info', None) and dutobj.ports_info:
-            for port_info in dutobj.ports_info:
-                netdev = port_info['port']
-                netdev.close()
-        # close all session
-        dutobj.close()
-    if tester is not None:
-        tester.close()
-    log_handler.info("DTS ended")
-
-
-def get_crb_os(crb):
-    if 'OS' in crb:
-        return crb['OS']
-
-    return 'linux'
 
 
 def dts_parse_param(section):
     """
     Parse execution file parameters.
     """
-    global performance_only
-    global functional_only
-    global paramDict
-    global drivername
-    performance_only = False
-    functional_only = False
+    # default value
+    performance = False
+    functional = False
     # Set parameters
     parameters = config.get(section, 'parameters').split(':')
     drivername = config.get(section, 'drivername').split('=')[-1]
+
+    settings.save_global_setting(settings.HOST_DRIVER_SETTING, drivername)
+
     paramDict = dict()
     for param in parameters:
         (key, _, value) = param.partition('=')
         paramDict[key] = value
 
     if 'perf' in paramDict and paramDict['perf'] == 'true':
-        performance_only = True
+        performance = True
     if 'func' in paramDict and paramDict['func'] == 'true':
-        functional_only = True
+        functional = True
 
-    if not functional_only and not performance_only:
-        functional_only = True
+    if 'nic_type' not in paramDict:
+        paramDict['nic_type'] = 'any'
+
+    settings.save_global_setting(settings.HOST_NIC_SETTING, paramDict['nic_type'])
+
+    # save perf/funtion setting in enviornment
+    if performance:
+        settings.save_global_setting(settings.PERF_SETTING, 'yes')
+    else:
+        settings.save_global_setting(settings.PERF_SETTING, 'no')
+
+    if functional:
+        settings.save_global_setting(settings.FUNC_SETTING, 'yes')
+    else:
+        settings.save_global_setting(settings.FUNC_SETTING, 'no')
 
 
 def dts_parse_config(section):
     """
     Parse execution file configuration.
     """
-    try:
-        scenario = config.get(section, 'scenario')
-    except:
-        scenario = ''
-
-    global nic
-    global rx_mode
-
     duts = [dut_.strip() for dut_ in config.get(section,
                                                 'crbs').split(',')]
     targets = [target.strip()
@@ -175,30 +125,31 @@ def dts_parse_config(section):
     try:
         rx_mode = config.get(section, 'rx_mode').strip()
     except:
-        rx_mode = None
+        rx_mode = 'default'
+
+    settings.save_global_setting(settings.DPDK_RXMODE_SETTING, rx_mode)
 
     for suite in test_suites:
         if suite == '':
             test_suites.remove(suite)
 
-    nic = [_.strip() for _ in paramDict['nic_type'].split(',')][0]
-
-    return duts, targets, test_suites, nic, scenario
+    return duts, targets, test_suites
 
 
 def dts_parse_commands(commands):
     """
     Parse command information from dts arguments
     """
+    dts_commands = []
+
     if commands is None:
-        return
+        return dts_commands
 
     args_format = {"shell": 0,
                    "crb": 1,
                    "stage": 2,
                    "check": 3,
                    "max_num": 4}
-    global dts_commands
     cmd_fmt = r"\[(.*)\]"
 
     for command in commands:
@@ -234,12 +185,13 @@ def dts_parse_commands(commands):
 
         dts_commands.append(dts_command)
 
+    return dts_commands
+
 
-def dts_run_commands(crb):
+def dts_run_commands(crb, dts_commands):
     """
     Run dts input commands
     """
-    global dts_commands
     for dts_command in dts_commands:
         command = dts_command['command']
         if crb.NAME == dts_command['host']:
@@ -255,8 +207,8 @@ def get_project_obj(project_name, super_class, crbInst, serializer):
     """
     Load project module and return crb instance.
     """
-    global PROJECT_MODULE_PREFIX
     project_obj = None
+    PROJECT_MODULE_PREFIX = 'project_'
     try:
         project_module = __import__(PROJECT_MODULE_PREFIX + project_name)
 
@@ -271,12 +223,10 @@ def get_project_obj(project_name, super_class, crbInst, serializer):
     return project_obj
 
 
-def dts_log_testsuite(test_suite, log_handler, test_classname):
+def dts_log_testsuite(duts, tester, suite_obj, log_handler, test_classname):
     """
     Change to SUITE self logger handler.
     """
-    test_suite.logger = getLogger(test_classname)
-    test_suite.logger.config_suite(test_classname)
     log_handler.config_suite(test_classname, 'dts')
     tester.logger.config_suite(test_classname, 'tester')
 
@@ -284,10 +234,6 @@ def dts_log_testsuite(test_suite, log_handler, test_classname):
         dutobj.logger.config_suite(test_classname, 'dut')
         dutobj.test_classname = test_classname
 
-    if len(virtduts):
-        for crb in virtduts:
-            crb.logger.config_suite(test_classname, 'virtdut')
-
     try:
         if tester.it_uses_external_generator():
             getattr(tester, 'ixia_packet_gen')
@@ -296,7 +242,7 @@ def dts_log_testsuite(test_suite, log_handler, test_classname):
         pass
 
 
-def dts_log_execution(log_handler):
+def dts_log_execution(duts, tester, log_handler):
     """
     Change to DTS default logger handler.
     """
@@ -304,11 +250,8 @@ def dts_log_execution(log_handler):
     tester.logger.config_execution('tester')
 
     for dutobj in duts:
-        dutobj.logger.config_execution('dut' + LOG_NAME_SEP + '%s' % dutobj.crb['My IP'])
+        dutobj.logger.config_execution('dut' + settings.LOG_NAME_SEP + '%s' % dutobj.crb['My IP'])
 
-    if len(virtduts):
-        for crb in virtduts:
-            crb.logger.config_execution('virtdut')
     try:
         if tester.it_uses_external_generator():
             getattr(tester, 'ixia_packet_gen')
@@ -317,14 +260,13 @@ def dts_log_execution(log_handler):
         pass
 
 
-def dts_crbs_init(crbInsts, skip_setup, read_cache, project, base_dir, nic, virttype):
+def dts_crbs_init(crbInsts, skip_setup, read_cache, project, base_dir, serializer, virttype):
     """
     Create dts dut/tester instance and initialize them.
     """
-    global dut
-    global duts
-    global tester
-    serializer.set_serialized_filename(FOLDERS['Output'] +
+    duts = []
+
+    serializer.set_serialized_filename(settings.FOLDERS['Output'] +
                                        '/.%s.cache' % crbInsts[0]['IP'])
     serializer.load_from_file()
 
@@ -338,44 +280,47 @@ def dts_crbs_init(crbInsts, skip_setup, read_cache, project, base_dir, nic, virt
         dutobj = get_project_obj(project, Dut, dutInst, serializer)
         duts.append(dutobj)
 
-    dut = duts[0]
-
-    dts_log_execution(log_handler)
+    dts_log_execution(duts, tester, log_handler)
 
     tester.duts = duts
     show_speedup_options_messages(read_cache, skip_setup)
     tester.set_speedup_options(read_cache, skip_setup)
-    tester.set_test_types(func_tests=functional_only, perf_tests=performance_only)
     tester.init_ext_gen()
 
+    nic = settings.load_global_setting(settings.HOST_NIC_SETTING)
     for dutobj in duts:
         dutobj.tester = tester
         dutobj.set_virttype(virttype)
         dutobj.set_speedup_options(read_cache, skip_setup)
         dutobj.set_directory(base_dir)
+        # save execution nic setting
         dutobj.set_nic_type(nic)
-        dutobj.set_test_types(func_tests=functional_only, perf_tests=performance_only)
+
+    return duts, tester
 
 
-def dts_crbs_exit():
+def dts_crbs_exit(duts, tester):
     """
     Call dut and tester exit function after execution finished
     """
-    dut.crb_exit()
+    for dutobj in duts:
+        dutobj.crb_exit()
+
     tester.crb_exit()
 
 
-def dts_run_prerequisties(pkgName, patch):
+def dts_run_prerequisties(duts, tester, pkgName, patch, dts_commands, serializer):
     """
     Run dts prerequisties function.
     """
     try:
-        dts_run_commands(tester)
-        tester.prerequisites(performance_only)
-        dts_run_commands(tester)
+        dts_run_commands(tester, dts_commands)
+        tester.prerequisites()
+        dts_run_commands(tester, dts_commands)
         for dutobj in duts:
-            dutobj.prerequisites(pkgName, patch)
-            dts_run_commands(dutobj)
+            dutobj.set_package(pkgName, patch)
+            dutobj.prerequisites()
+            dts_run_commands(dutobj, dts_commands)
 
         serializer.save_to_file()
     except Exception as ex:
@@ -386,37 +331,22 @@ def dts_run_prerequisties(pkgName, patch):
         return False
 
 
-def dts_run_target(crbInsts, targets, test_suites, nic, scenario):
+def dts_run_target(duts, tester, targets, test_suites):
     """
     Run each target in execution targets.
     """
-    global drivername
-    if scenario != '':
-        scene = VirtScene(dut, tester, scenario)
-    else:
-        scene = None
-
-    if scene:
-        scene.load_config()
-        scene.create_scene()
-
     for target in targets:
         log_handler.info("\nTARGET " + target)
         result.target = target
 
         try:
-            if scene:
-                scene.set_target(target)
-                # skip set_target when host has been setup by scenario
-                if not scene.host_bound:
-                    dut.set_target(target, bind_dev=False)
+            drivername = settings.load_global_setting(settings.HOST_DRIVER_SETTING)
+            if drivername == "":
+                for dutobj in duts:
+                    dutobj.set_target(target, bind_dev=False)
             else:
-                if drivername == "":
-                    for dutobj in duts:
-                        dutobj.set_target(target, bind_dev=False)
-                else:
-                    for dutobj in duts:
-                        dutobj.set_target(target)
+                for dutobj in duts:
+                    dutobj.set_target(target)
         except AssertionError as ex:
             log_handler.error(" TARGET ERROR: " + str(ex))
             result.add_failed_target(result.dut, target, str(ex))
@@ -426,15 +356,7 @@ def dts_run_target(crbInsts, targets, test_suites, nic, scenario):
             result.add_failed_target(result.dut, target, str(ex))
             continue
 
-        if 'nic_type' not in paramDict:
-            paramDict['nic_type'] = 'any'
-            nic = 'any'
-
-        dts_run_suite(crbInsts, test_suites, target, nic, scene)
-
-    if scene:
-        scene.destroy_scene()
-        scene = None
+        dts_run_suite(duts, tester, test_suites, target)
 
     tester.restore_interfaces()
 
@@ -443,44 +365,36 @@ def dts_run_target(crbInsts, targets, test_suites, nic, scenario):
         dutobj.restore_interfaces()
 
 
-def dts_run_suite(crbInsts, test_suites, target, nic, scene):
+def dts_run_suite(duts, tester, test_suites, target):
     """
     Run each suite in test suite list.
     """
     try:
-        for test_suite in test_suites:
-            # prepare rst report file
-            result.test_suite = test_suite
-            rst.generate_results_rst(crbInsts[0]['name'], target, nic, test_suite, performance_only)
-            test_module = __import__('TestSuite_' + test_suite)
-            global module
-            module = test_module
-            for test_classname, test_class in get_subclasses(test_module, TestCase):
-
-                if scene and scene.vm_dut_enable:
-                    global virtduts
-                    virtduts = scene.get_vm_duts()
-                    tester.dut = virtduts[0]
-                    tester.duts = virtduts
-                    test_suite = test_class(virtduts, tester, target, test_suite)
-                else:
-                    test_suite = test_class(duts, tester, target, test_suite)
-                result.nic = test_suite.nic
-
-                dts_log_testsuite(test_suite, log_handler, test_classname)
+        for suite_name in test_suites:
+            result.test_suite = suite_name
+            suite_module = __import__('TestSuite_' + suite_name)
+            for test_classname, test_class in get_subclasses(suite_module, TestCase):
+
+                suite_obj = test_class(duts, tester, target, suite_name)
+                suite_obj.set_requested_cases(requested_tests)
+                suite_obj.set_check_inst(check=check_case_inst, support=support_case_inst)
+                result.nic = suite_obj.nic
+
+                dts_log_testsuite(duts, tester, suite_obj, log_handler, test_classname)
 
                 log_handler.info("\nTEST SUITE : " + test_classname)
-                log_handler.info("NIC :        " + nic)
-                if execute_test_setup_all(test_suite):
-                    execute_all_test_cases(test_suite)
-                    execute_test_tear_down_all(test_suite)
-                else:
-                    test_cases_as_blocked(test_suite)
+                log_handler.info("NIC :        " + result.nic)
 
-                log_handler.info("\nTEST SUITE ENDED: " + test_classname)
-                dts_log_execution(log_handler)
+                if suite_obj.execute_setup_all():
+                    suite_obj.execute_test_cases()
+                    suite_obj.execute_tear_downall()
+
+                # save suite cases result
+                result.copy_suite(suite_obj.get_result())
+                save_all_results()
 
-            dut.kill_all()
+                log_handler.info("\nTEST SUITE ENDED: " + test_classname)
+                dts_log_execution(duts, tester, log_handler)
     except VerifyFailure:
         log_handler.error(" !!! DEBUG IT: " + traceback.format_exc())
     except KeyboardInterrupt:
@@ -488,7 +402,7 @@ def dts_run_suite(crbInsts, test_suites, target, nic, scene):
     except Exception as e:
         log_handler.error(str(e))
     finally:
-        execute_test_tear_down_all(test_suite)
+        suite_obj.execute_tear_downall()
 
 
 def run_all(config_file, pkgName, git, patch, skip_setup,
@@ -500,29 +414,25 @@ def run_all(config_file, pkgName, git, patch, skip_setup,
     """
 
     global config
-    global serializer
-    global nic
     global requested_tests
     global result
     global excel_report
-    global stats
+    global stats_report
     global log_handler
-    global debug_mode
-    global debug_case
-    global Package
-    global Patches
-    global scenario
     global check_case_inst
     global support_case_inst
+
     # save global variable
-    Package = pkgName
-    Patches = patch
+    serializer = Serializer()
+
+    # load check/support case lists
     check_case = parse_file()
     check_case.set_filter_case()
     check_case.set_support_case()
+
     # prepare the output folder
     if output_dir == '':
-        output_dir = FOLDERS['Output']
+        output_dir = settings.FOLDERS['Output']
 
     if not os.path.exists(output_dir):
         os.mkdir(output_dir)
@@ -532,9 +442,9 @@ def run_all(config_file, pkgName, git, patch, skip_setup,
 
     # enable debug mode
     if debug is True:
-        debug_mode = True
+        setting.set_local_variable(settings.DEBUG_SETTING, 'yes')
     if debugcase is True:
-        debug_case = True
+        setting.set_local_variable(settings.DEBUG_CASE_SETTING, 'yes')
 
     # init log_handler handler
     if verbose is True:
@@ -554,20 +464,17 @@ def run_all(config_file, pkgName, git, patch, skip_setup,
         raise ConfigParseException(config_file)
 
     # parse commands
-    dts_parse_commands(commands)
-
-    # register exit action
-    atexit.register(close_all_sessions)
+    dts_commands = dts_parse_commands(commands)
 
     os.environ["TERM"] = "dumb"
 
-    serializer = Serializer()
-
-    # excel report and statistics file
-    result = Result()
+    # change rst output folder
     rst.path2Result = output_dir
+
+    # report objects
     excel_report = ExcelReporter(output_dir + '/test_results.xls')
-    stats = StatsReporter(output_dir + '/statistics.txt')
+    stats_report = StatsReporter(output_dir + '/statistics.txt')
+    result = Result()
 
     crbInsts = []
     crbs_conf = CrbsConf()
@@ -578,7 +485,7 @@ def run_all(config_file, pkgName, git, patch, skip_setup,
         dts_parse_param(section)
 
         # verify if the delimiter is good if the lists are vertical
-        dutIPs, targets, test_suites, nics, scenario = dts_parse_config(section)
+        dutIPs, targets, test_suites = dts_parse_config(section)
         for dutIP in dutIPs:
             log_handler.info("\nDUT " + dutIP)
 
@@ -597,262 +504,26 @@ def run_all(config_file, pkgName, git, patch, skip_setup,
         result.dut = dutIPs[0]
 
         # init dut, tester crb
-        dts_crbs_init(crbInsts, skip_setup, read_cache, project, base_dir, nics, virttype)
+        duts, tester = dts_crbs_init(crbInsts, skip_setup, read_cache, project, base_dir, serializer, virttype)
 
-        check_case_inst = check_case_skip(dut)
-        support_case_inst = check_case_support(dut)
+        # register exit action
+        atexit.register(close_all_sessions, duts, tester)
+
+        check_case_inst = check_case_skip(duts[0])
+        support_case_inst = check_case_support(duts[0])
 
         # Run DUT prerequisites
-        if dts_run_prerequisties(pkgName, patch) is False:
-            dts_crbs_exit()
+        if dts_run_prerequisties(duts, tester, pkgName, patch, dts_commands, serializer) is False:
+            dts_crbs_exit(duts, tester)
             continue
 
-        dts_run_target(crbInsts, targets, test_suites, nics, scenario)
+        dts_run_target(duts, tester, targets, test_suites)
 
-        dts_crbs_exit()
+        dts_crbs_exit(duts, tester)
 
     save_all_results()
 
 
-def test_cases_as_blocked(test_suite):
-    """
-    Save result as test case blocked.
-    """
-    if functional_only:
-        for test_case in get_functional_test_cases(test_suite):
-            result.test_case = test_case.__name__
-            result.test_case_blocked('set_up_all failed')
-    if performance_only:
-        for test_case in get_performance_test_cases(test_suite):
-            result.test_case = test_case.__name__
-            result.test_case_blocked('set_up_all failed')
-
-
-def get_subclasses(module, clazz):
-    """
-    Get module attribute name and attribute.
-    """
-    for subclazz_name, subclazz in inspect.getmembers(module):
-        if hasattr(subclazz, '__bases__') and clazz in subclazz.__bases__:
-            yield (subclazz_name, subclazz)
-
-
-def copy_instance_attr(from_inst, to_inst):
-    for key in from_inst.__dict__.keys():
-            to_inst.__dict__[key] = from_inst.__dict__[key]
-
-
-def get_functional_test_cases(test_suite):
-    """
-    Get all functional test cases.
-    """
-    return get_test_cases(test_suite, r'test_(?!perf_)')
-
-
-def get_performance_test_cases(test_suite):
-    """
-    Get all performance test cases.
-    """
-    return get_test_cases(test_suite, r'test_perf_')
-
-
-def has_it_been_requested(test_case, test_name_regex):
-    """
-    Check whether test case has been requested for validation.
-    """
-    name_matches = re.match(test_name_regex, test_case.__name__)
-
-    if requested_tests is not None:
-        return name_matches and test_case.__name__ in requested_tests
-
-    return name_matches
-
-
-def get_test_cases(test_suite, test_name_regex):
-    """
-    Return case list which name matched regex.
-    """
-    for test_case_name in dir(test_suite):
-        test_case = getattr(test_suite, test_case_name)
-        if callable(test_case) and has_it_been_requested(test_case, test_name_regex):
-            yield test_case
-
-
-def execute_test_setup_all(test_case):
-    """
-    Execute suite setup_all function before cases.
-    """
-    try:
-        # clear all previous output
-        test_case.dut.get_session_output(timeout=0.1)
-        test_case.tester.get_session_output(timeout=0.1)
-        test_case.set_up_all()
-        return True
-    except Exception:
-        log_handler.error('set_up_all failed:\n' + traceback.format_exc())
-        return False
-
-
-def execute_all_test_cases(test_suite):
-    """
-    Execute all test cases in one suite.
-    """
-    if functional_only:
-        for test_case in get_functional_test_cases(test_suite):
-            execute_test_case(test_suite, test_case)
-    if performance_only:
-        for test_case in get_performance_test_cases(test_suite):
-            execute_test_case(test_suite, test_case)
-
-
-def execute_test_case(test_suite, test_case):
-    """
-    Execute specified test case in specified suite. If any exception occured in
-    validation process, save the result and tear down this case.
-    """
-    global debug_mode
-    global debug_case
-    global module
-    result.test_case = test_case.__name__
-    rst.write_title("Test Case: " + test_case.__name__)
-    if check_case_inst.case_skip(test_case.__name__[len("test_"):]):
-        log_handler.info('Test Case %s Result SKIPED:' % test_case.__name__)
-        rst.write_result("N/A")
-        result.test_case_skip(check_case_inst.comments)
-        save_all_results()
-        return
-
-    if not support_case_inst.case_support(test_case.__name__[len("test_"):]):
-        log_handler.info('Test Case %s Result SKIPED:' % test_case.__name__)
-        rst.write_result("N/A")
-        result.test_case_skip(support_case_inst.comments)
-        save_all_results()
-        return
-
-    if performance_only:
-        rst.write_annex_title("Annex: " + test_case.__name__)
-    try:
-        log_handler.info('Test Case %s Begin' % test_case.__name__)
-        test_suite.running_case = test_case.__name__
-        # clear all previous output
-        test_suite.dut.get_session_output(timeout=0.1)
-        test_suite.tester.get_session_output(timeout=0.1)
-        # run set_up function for each case
-        test_suite.set_up()
-        # prepare debugger re-run case environment
-        if debug_mode or debug_case:
-            debugger.AliveSuite = test_suite
-            debugger.AliveModule = module
-            debugger.AliveCase = test_case.__name__
-        if debug_case:
-            debugger.keyboard_handle(signal.SIGINT, None)
-        else:
-            test_case()
-
-        result.test_case_passed()
-
-        if dut.want_perf_tests:
-            log_handler.info('Test Case %s Result FINISHED:' % test_case.__name__)
-        else:
-            rst.write_result("PASS")
-            log_handler.info('Test Case %s Result PASSED:' % test_case.__name__)
-
-    except VerifyFailure as v:
-        result.test_case_failed(str(v))
-        rst.write_result("FAIL")
-        log_handler.error('Test Case %s Result FAILED: ' % (test_case.__name__) + str(v))
-    except KeyboardInterrupt:
-        result.test_case_blocked("Skipped")
-        log_handler.error('Test Case %s SKIPED: ' % (test_case.__name__))
-        raise KeyboardInterrupt("Stop DCTS")
-    except TimeoutException as e:
-        rst.write_result("FAIL")
-        msg = str(e)
-        result.test_case_failed(msg)
-        log_handler.error('Test Case %s Result FAILED: ' % (test_case.__name__) + msg)
-        log_handler.error('%s' % (e.get_output()))
-    except Exception:
-        trace = traceback.format_exc()
-        result.test_case_failed(trace)
-        log_handler.error('Test Case %s Result ERROR: ' % (test_case.__name__) + trace)
-    finally:
-        test_suite.tear_down()
-        save_all_results()
-
-
-def execute_test_tear_down_all(test_case):
-    """
-    execute suite tear_down_all function
-    """
-    try:
-        test_case.tear_down_all()
-    except Exception:
-        log_handler.error('tear_down_all failed:\n' + traceback.format_exc())
-
-    dut.kill_all()
-    tester.kill_all()
-
-
-def results_table_add_header(header):
-    """
-    Add the title of result table.
-    Usage:
-    results_table_add_header(header)
-    results_table_add_row(row)
-    results_table_print()
-    """
-    global table, results_table_header, results_table_rows
-
-    results_table_rows = []
-    results_table_rows.append([])
-    table = texttable.Texttable(max_width=150)
-    results_table_header = header
-
-
-def results_table_add_row(row):
-    """
-    Add one row to result table.
-    """
-    results_table_rows.append(row)
-
-
-def results_table_print():
-    """
-    Show off result table.
-    """
-    table.add_rows(results_table_rows)
-    table.header(results_table_header)
-
-    alignments = []
-    # all header align to left
-    for _ in results_table_header:
-        alignments.append("l")
-    table.set_cols_align(alignments)
-
-    out = table.draw()
-    rst.write_text('\n' + out + '\n\n')
-    log_handler.info('\n' + out)
-
-
-def results_plot_print(image, width=90):
-    """
-    Includes an image in the report file.
-    The image name argument must include the path. <path>/<image name>
-    """
-    rst.include_image(image, width)
-
-
-def create_mask(indexes):
-    """
-    Convert index to hex mask.
-    """
-    val = 0
-    for index in indexes:
-        val |= 1 << int(index)
-
-    return hex(val).rstrip("L")
-
-
 def show_speedup_options_messages(read_cache, skip_setup):
     if read_cache:
         log_handler.info('CACHE: All configuration will be read from cache.')
@@ -870,23 +541,21 @@ def save_all_results():
     Save all result to files.
     """
     excel_report.save(result)
-    stats.save(result)
+    stats_report.save(result)
 
 
-def accepted_nic(pci_id):
+def close_all_sessions(duts, tester):
     """
-    Return True if the pci_id is a known NIC card in the settings file and if
-    it is selected in the execution file, otherwise it returns False.
+    Close session to DUT and tester.
     """
-    global nic
-    if pci_id not in NICS.values():
-        return False
-
-    if nic is 'any':
-        return True
-
-    else:
-        if pci_id == NICS[nic]:
-            return True
-
-    return False
+    # close all nics
+    for dutobj in duts:
+        if getattr(dutobj, 'ports_info', None) and dutobj.ports_info:
+            for port_info in dutobj.ports_info:
+                netdev = port_info['port']
+                netdev.close()
+        # close all session
+        dutobj.close()
+    if tester is not None:
+        tester.close()
+    log_handler.info("DTS ended")
-- 
1.9.3

  reply	other threads:[~2016-08-04  5:38 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-04  5:38 [dts] [PATCH 0/9] optimize overall " Marvin Liu
2016-08-04  5:38 ` Marvin Liu [this message]
2016-08-04  5:38 ` [dts] [PATCH 2/9] framework config: add concept for dut board Marvin Liu
2016-08-04  5:38 ` [dts] [PATCH 3/9] framework dut: remove dependency on dts module Marvin Liu
2016-08-04  5:38 ` [dts] [PATCH 4/9] framework rst: add class to handle RST report Marvin Liu
2016-08-04  5:38 ` [dts] [PATCH 5/9] framework settings: support global setting load and save Marvin Liu
2016-08-04  5:38 ` [dts] [PATCH 6/9] framework test_result: add class to handle result Marvin Liu
2016-08-04  5:38 ` [dts] [PATCH 7/9] framework test_case: add test case handle logic Marvin Liu
2016-08-04  5:38 ` [dts] [PATCH 8/9] framework utils: move shared function from dts module Marvin Liu
2016-08-04  5:38 ` [dts] [PATCH 9/9] tests: remove dependencies of " Marvin Liu
2016-08-04  6:07 ` [dts] [PATCH 0/9] optimize overall execution process Liu, Yong

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1470289102-12677-2-git-send-email-yong.liu@intel.com \
    --to=yong.liu@intel.com \
    --cc=dts@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).