From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id A91A21B40E for ; Wed, 6 Jun 2018 07:38:36 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 05 Jun 2018 22:38:36 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.49,482,1520924400"; d="scan'208";a="234770612" Received: from shecgisg006.sh.intel.com ([10.239.39.68]) by fmsmga005.fm.intel.com with ESMTP; 05 Jun 2018 22:38:35 -0700 Received: from shecgisg006.sh.intel.com (localhost [127.0.0.1]) by shecgisg006.sh.intel.com with ESMTP id w565cYvM026710; Wed, 6 Jun 2018 13:38:34 +0800 Received: (from yufengmx@localhost) by shecgisg006.sh.intel.com with œ id w565cYRZ026706; Wed, 6 Jun 2018 13:38:34 +0800 From: yufengx.mo@intel.com To: dts@dpdk.org Cc: yufengmx Date: Wed, 6 Jun 2018 13:38:32 +0800 Message-Id: <1528263513-26500-6-git-send-email-yufengx.mo@intel.com> X-Mailer: git-send-email 1.7.0.7 In-Reply-To: <1528263513-26500-1-git-send-email-yufengx.mo@intel.com> References: <1528263513-26500-1-git-send-email-yufengx.mo@intel.com> Subject: [dts] [PATCH V1 5/6] pmd_bonded_8023ad: framework work flow X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 06 Jun 2018 05:38:37 -0000 From: yufengmx add dts work flow support for switch equipment. Signed-off-by: yufengmx --- framework/dts.py | 20 +++++++++++++++++++- framework/dut.py | 14 +++++++++++--- framework/exception.py | 10 ++++++++++ framework/logger.py | 24 +++++++++++++++++++++++- framework/project_dpdk.py | 6 +++++- framework/settings.py | 7 ++++++- framework/ssh_connection.py | 9 ++++++--- framework/ssh_pexpect.py | 36 ++++++++++++++++++++++++++++++++++-- 8 files changed, 114 insertions(+), 12 deletions(-) diff --git a/framework/dts.py b/framework/dts.py index 0b2240c..06e2441 100644 --- a/framework/dts.py +++ b/framework/dts.py @@ -1,6 +1,6 @@ # BSD LICENSE # -# Copyright(c) 2010-2016 Intel Corporation. All rights reserved. +# Copyright(c) 2010-2018 Intel Corporation. All rights reserved. # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -249,6 +249,14 @@ def dts_log_testsuite(duts, tester, suite_obj, log_handler, test_classname): except Exception as ex: pass + # check if dts use switch equipment + try: + if tester.it_uses_switch(): + switch_scenes = getattr(tester, 'switch_scenes') + for name, obj in switch_scenes.iteritems(): + obj.logger.config_suite(test_classname, obj.name) + except Exception as ex: + pass def dts_log_execution(duts, tester, log_handler): """ @@ -266,6 +274,15 @@ def dts_log_execution(duts, tester, log_handler): tester.ixia_packet_gen.logger.config_execution('ixia') except Exception as ex: pass + + # check if dts use switch equipment + try: + if tester.it_uses_switch(): + switch_scenes = getattr(tester, 'switch_scenes') + for name, obj in switch_scenes.iteritems(): + obj.logger.config_execution(obj.name) + except Exception as ex: + pass def dts_crbs_init(crbInsts, skip_setup, read_cache, project, base_dir, serializer, virttype): @@ -296,6 +313,7 @@ def dts_crbs_init(crbInsts, skip_setup, read_cache, project, base_dir, serialize show_speedup_options_messages(read_cache, skip_setup) tester.set_speedup_options(read_cache, skip_setup) tester.init_ext_gen() + tester.init_switch() nic = settings.load_global_setting(settings.HOST_NIC_SETTING) for dutobj in duts: diff --git a/framework/dut.py b/framework/dut.py index 18f0b39..e230450 100644 --- a/framework/dut.py +++ b/framework/dut.py @@ -1,6 +1,6 @@ # BSD LICENSE # -# Copyright(c) 2010-2014 Intel Corporation. All rights reserved. +# Copyright(c) 2010-2018 Intel Corporation. All rights reserved. # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -980,13 +980,21 @@ class Dut(Crb): def disable_tester_ipv6(self): for tester_port in self.ports_map: - if self.tester.ports_info[tester_port]['type'] != 'ixia': + if self.tester.ports_info[tester_port]['type'] == 'ixia': + continue + elif self.tester.ports_info[tester_port]['type'] == 'switch': + continue + else: port = self.tester.ports_info[tester_port]['port'] port.disable_ipv6() def enable_tester_ipv6(self): for tester_port in range(len(self.tester.ports_info)): - if self.tester.ports_info[tester_port]['type'] != 'ixia': + if self.tester.ports_info[tester_port]['type'] == 'ixia': + continue + elif self.tester.ports_info[tester_port]['type'] == 'switch': + continue + else: port = self.tester.ports_info[tester_port]['port'] port.enable_ipv6() diff --git a/framework/exception.py b/framework/exception.py index 654e420..027568a 100644 --- a/framework/exception.py +++ b/framework/exception.py @@ -143,3 +143,13 @@ class VirtVmOperationException(Exception): class VirtHostPrepareException(Exception): pass + +class SwitchException(Exception): + """ + switch exception + """ + def __init__(self, msg): + self.msg = msg + + def __str__(self): + return "Switch exception: " + self.msg diff --git a/framework/logger.py b/framework/logger.py index 8d0e5e8..cd16ac1 100644 --- a/framework/logger.py +++ b/framework/logger.py @@ -1,6 +1,6 @@ # BSD LICENSE # -# Copyright(c) 2010-2014 Intel Corporation. All rights reserved. +# Copyright(c) 2010-2018 Intel Corporation. All rights reserved. # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -64,6 +64,9 @@ logging.DTS_IXIA_OUTPUT = logging.DEBUG + 5 logging.DTS_VIRTDUT_CMD = logging.INFO + 6 logging.DTS_VIRTDUT_OUTPUT = logging.DEBUG + 6 +logging.DTS_SWITCH_CMD = logging.INFO + 7 +logging.DTS_SWITCH_OUTPUT = logging.DEBUG + 7 + logging.addLevelName(logging.DTS_DUT_CMD, 'DTS_DUT_CMD') logging.addLevelName(logging.DTS_DUT_OUTPUT, 'DTS_DUT_OUTPUT') logging.addLevelName(logging.DTS_DUT_RESULT, 'DTS_DUT_RESULT') @@ -75,6 +78,9 @@ logging.addLevelName(logging.DTS_TESTER_RESULT, 'DTS_TESTER_RESULT') logging.addLevelName(logging.DTS_IXIA_CMD, 'DTS_IXIA_CMD') logging.addLevelName(logging.DTS_IXIA_OUTPUT, 'DTS_IXIA_OUTPUT') +logging.addLevelName(logging.DTS_SWITCH_CMD, 'DTS_SWITCH_CMD') +logging.addLevelName(logging.DTS_SWITCH_OUTPUT, 'DTS_SWITCH_OUTPUT') + logging.addLevelName(logging.DTS_VIRTDUT_CMD, 'VIRTDUT_CMD') logging.addLevelName(logging.DTS_VIRTDUT_OUTPUT, 'VIRTDUT_OUTPUT') @@ -143,6 +149,12 @@ class BaseLoggerAdapter(logging.LoggerAdapter): def dts_ixia_output(self, msg, *args, **kwargs): self.log(logging.DTS_IXIA_OUTPUT, msg, *args, **kwargs) + def dts_switch_cmd(self, msg, *args, **kwargs): + self.log(logging.DTS_SWITCH_CMD, msg, *args, **kwargs) + + def dts_switch_output(self, msg, *args, **kwargs): + self.log(logging.DTS_SWITCH_OUTPUT, msg, *args, **kwargs) + def dts_virtdut_cmd(self, msg, *args, **kwargs): self.log(logging.DTS_VIRTDUT_CMD, msg, *args, **kwargs) @@ -167,6 +179,8 @@ class ColorHandler(logging.StreamHandler): logging.SUITE_TESTER_CMD: '', # SYSTEM logging.DTS_IXIA_CMD: '', # SYSTEM logging.DTS_IXIA_OUTPUT: '', # SYSTEM + logging.DTS_SWITCH_CMD: '', # SYSTEM + logging.DTS_SWITCH_OUTPUT: '', # SYSTEM logging.DTS_VIRTDUT_CMD: '', # SYSTEM logging.DTS_VIRTDUT_OUTPUT: '', # SYSTEM logging.WARN: '\033[01;33m', # BOLD YELLOW @@ -310,6 +324,11 @@ class DTSLOG(BaseLoggerAdapter): elif crb.startswith('ixia'): self.info_lvl = logging.DTS_IXIA_CMD self.debug_lvl = logging.DTS_IXIA_OUTPUT + elif crb.startswith('switch'): + self.info_lvl = logging.DTS_SWITCH_CMD + self.debug_lvl = logging.DTS_SWITCH_OUTPUT + + set_salt(crb, 'switch') elif crb.startswith('virtdut'): self.info_lvl = logging.DTS_VIRTDUT_CMD self.debug_lvl = logging.DTS_VIRTDUT_OUTPUT @@ -342,6 +361,9 @@ class DTSLOG(BaseLoggerAdapter): elif crb == 'ixia': self.info_lvl = logging.DTS_IXIA_CMD self.debug_lvl = logging.DTS_IXIA_OUTPUT + elif crb == 'switch': + self.info_lvl = logging.DTS_SWITCH_CMD + self.debug_lvl = logging.DTS_SWITCH_OUTPUT elif crb == 'virtdut': self.info_lvl = logging.DTS_VIRTDUT_CMD self.debug_lvl = logging.DTS_VIRTDUT_OUTPUT diff --git a/framework/project_dpdk.py b/framework/project_dpdk.py index f87fd13..315d673 100644 --- a/framework/project_dpdk.py +++ b/framework/project_dpdk.py @@ -1,6 +1,6 @@ # BSD LICENSE # -# Copyright(c) 2010-2014 Intel Corporation. All rights reserved. +# Copyright(c) 2010-2018 Intel Corporation. All rights reserved. # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -40,6 +40,7 @@ from dut import Dut from tester import Tester from logger import getLogger from settings import IXIA, DRIVERS +from settings import SWITCH class DPDKdut(Dut): @@ -493,6 +494,9 @@ class DPDKtester(Tester): assert ("No such file or directory" not in out), "Can not find /root/igb_uio.ko for performance" self.setup_memory() + if SWITCH in self.crb and self.crb[SWITCH] is not None: + self.logger.info("Use switch") + self.stage = "post-init" def setup_memory(self, hugepages=-1): diff --git a/framework/settings.py b/framework/settings.py index 07c3ac6..d1b26d9 100644 --- a/framework/settings.py +++ b/framework/settings.py @@ -1,6 +1,6 @@ # BSD LICENSE # -# Copyright(c) 2010-2014 Intel Corporation. All rights reserved. +# Copyright(c) 2010-2018 Intel Corporation. All rights reserved. # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -194,6 +194,11 @@ Global macro for dts. IXIA = "ixia" """ +Global macro for dts. +""" +SWITCH = "switch" + +""" The log name seperater. """ LOG_NAME_SEP = '.' diff --git a/framework/ssh_connection.py b/framework/ssh_connection.py index 622ed50..a849a2b 100644 --- a/framework/ssh_connection.py +++ b/framework/ssh_connection.py @@ -1,6 +1,6 @@ # BSD LICENSE # -# Copyright(c) 2010-2014 Intel Corporation. All rights reserved. +# Copyright(c) 2010-2018 Intel Corporation. All rights reserved. # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -44,8 +44,11 @@ class SSHConnection(object): Implement send_expect/copy function upper SSHPexpet module. """ - def __init__(self, host, session_name, username, password='', dut_id=0): - self.session = SSHPexpect(host, username, password, dut_id) + def __init__(self, host, session_name, username, password='', dut_id=0, + node_type=None): + node_type = node_type or "normal" + self.session = SSHPexpect(host, username, password, dut_id, + node_type=node_type) self.name = session_name connection = {} connection[self.name] = self.session diff --git a/framework/ssh_pexpect.py b/framework/ssh_pexpect.py index 3c988b7..d266519 100644 --- a/framework/ssh_pexpect.py +++ b/framework/ssh_pexpect.py @@ -14,7 +14,7 @@ Aslo support transfer files to tester or DUT. class SSHPexpect(object): - def __init__(self, host, username, password, dut_id): + def __init__(self, host, username, password, dut_id, node_type="normal"): self.magic_prompt = "MAGIC PROMPT" self.logger = None @@ -22,7 +22,39 @@ class SSHPexpect(object): self.username = username self.password = password - self._connect_host(dut_id=dut_id) + if node_type == "switch": + self.login_switch() + else: + self._connect_host(dut_id=dut_id) + + def login_switch(self): + try: + self.session = pxssh.pxssh() + if ':' in self.host: + self.ip = self.host.split(':')[0] + self.port = int(self.host.split(':')[1]) + self.session.login(self.ip, + self.username, + self.password, + #original_prompt='[$#>]', + auto_prompt_reset=False, + port=self.port, + login_timeout=60) + else: + self.session.login(self.host, + self.username, + self.password, + #original_prompt=r'[$#>]', + auto_prompt_reset=False, + login_timeout=60) + except Exception, e: + print RED(e) + if getattr(self, 'port', None): + suggestion = "\nSuggession: Check if the fireware on [ %s ] " % \ + self.ip + "is stoped\n" + print GREEN(suggestion) + + raise SSHConnectionException(self.host) @parallel_lock(num=8) def _connect_host(self, dut_id=0): -- 1.9.3