From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by dpdk.org (Postfix) with ESMTP id 109A31B16F for ; Mon, 8 Jan 2018 10:56:24 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga104.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 08 Jan 2018 01:56:24 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.46,330,1511856000"; d="scan'208";a="193209964" Received: from dpdk-test38.sh.intel.com ([10.67.119.87]) by fmsmga006.fm.intel.com with ESMTP; 08 Jan 2018 01:56:24 -0800 From: Marvin Liu To: dts@dpdk.org Cc: Marvin Liu Date: Sun, 7 Jan 2018 21:49:17 -0500 Message-Id: <1515379769-11553-5-git-send-email-yong.liu@intel.com> X-Mailer: git-send-email 1.9.3 In-Reply-To: <1515379769-11553-1-git-send-email-yong.liu@intel.com> References: <1515379769-11553-1-git-send-email-yong.liu@intel.com> Subject: [dts] [PATCH v1 04/16] framework: add DUT index support 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: Mon, 08 Jan 2018 09:56:25 -0000 1. All CRBs will have index concept, the index value is assigned when CRB instantiating. 2. Alternative session is not must for virtual DUT. Thus can save lots of system resource when starting many vitual machines. 3. Virtual environment setup will remove all related ssh rsa keys. Signed-off-by: Marvin Liu diff --git a/framework/crb.py b/framework/crb.py index dd29a8b..7affce7 100644 --- a/framework/crb.py +++ b/framework/crb.py @@ -49,7 +49,8 @@ class Crb(object): CPU/PCI/NIC on the board and setup running environment for DPDK. """ - def __init__(self, crb, serializer, name): + def __init__(self, crb, serializer, name, alt_session=True, dut_id=0): + self.dut_id = dut_id self.crb = crb self.read_cache = False self.skip_setup = False @@ -62,14 +63,18 @@ class Crb(object): self.logger = getLogger(name) self.session = SSHConnection(self.get_ip_address(), name, self.get_username(), - self.get_password()) + self.get_password(), dut_id) self.session.init_log(self.logger) - self.alt_session = SSHConnection( - self.get_ip_address(), - name + '_alt', - self.get_username(), - self.get_password()) - self.alt_session.init_log(self.logger) + if alt_session: + self.alt_session = SSHConnection( + self.get_ip_address(), + name + '_alt', + self.get_username(), + self.get_password(), + dut_id) + self.alt_session.init_log(self.logger) + else: + self.alt_session = None def send_expect(self, cmds, expected, timeout=TIMEOUT, alt_session=False, verify=False): @@ -78,8 +83,8 @@ class Crb(object): there's no expected string found before timeout, TimeoutException will be raised. """ - - if alt_session: + # sometimes there will be no alt_session like VM dut + if alt_session and self.alt_session: return self.alt_session.session.send_expect(cmds, expected, timeout, verify) @@ -93,7 +98,8 @@ class Crb(object): session = SSHConnection(self.get_ip_address(), name, self.get_username(), - self.get_password()) + self.get_password(), + dut_id = self.dut_id) session.init_log(logger) self.sessions.append(session) return session @@ -104,7 +110,7 @@ class Crb(object): """ for save_session in self.sessions: if save_session == session: - save_session.close() + save_session.close(force=True) logger = getLogger(save_session.name) logger.logger_exit() self.sessions.remove(save_session) @@ -141,7 +147,7 @@ class Crb(object): Send commands to crb and return string before timeout. """ - if alt_session: + if alt_session and self.alt_session: return self.alt_session.session.send_command(cmds, timeout) return self.session.send_command(cmds, timeout) @@ -167,7 +173,7 @@ class Crb(object): "awk '/HugePages_Total/ { print $2 }' /proc/meminfo", "# ", alt_session=True) if huge_pages != "": - return int(huge_pages) + return int(huge_pages.split()[0]) return 0 def mount_huge_pages(self): @@ -220,9 +226,6 @@ class Crb(object): """ self.base_dir = base_dir - def set_virttype(self, virttype): - self.virttype = virttype - def admin_ports(self, port, status): """ Force set port's interface status. diff --git a/framework/dut.py b/framework/dut.py index 22ff0bb..258a6cc 100644 --- a/framework/dut.py +++ b/framework/dut.py @@ -39,7 +39,7 @@ from ssh_connection import SSHConnection from crb import Crb from net_device import GetNicObj from virt_resource import VirtResource -from utils import RED +from utils import RED, remove_old_rsa_key from uuid import uuid4 @@ -60,9 +60,9 @@ class Dut(Crb): CORE_LIST_CACHE_KEY = 'dut_core_list' PCI_DEV_CACHE_KEY = 'dut_pci_dev_info' - def __init__(self, crb, serializer): + def __init__(self, crb, serializer, dut_id): self.NAME = 'dut' + LOG_NAME_SEP + '%s' % crb['My IP'] - super(Dut, self).__init__(crb, serializer, self.NAME) + super(Dut, self).__init__(crb, serializer, self.NAME, alt_session=True, dut_id=dut_id) self.host_init_flag = False self.number_of_cores = 0 @@ -76,29 +76,35 @@ class Dut(Crb): # hypervisor pid list, used for cleanup self.virt_pids = [] - def init_host_session(self): - if self.host_init_flag: - pass - else: - self.host_session = SSHConnection( - self.get_ip_address(), - self.NAME + '_host', - self.get_username(), - self.get_password()) - self.host_session.init_log(self.logger) - self.host_init_flag = True + def init_host_session(self, vm_name): + """ + Create session for each VM, session will be handled by VM instance + """ + self.host_session = SSHConnection( + self.get_ip_address(), + vm_name + '_host', + self.get_username(), + self.get_password()) + self.host_session.init_log(self.logger) + self.logger.info("[%s] create new session for VM" % (threading.current_thread().name)) def new_session(self, suite=""): """ Create new session for dut instance. Session name will be unique. """ - session_name = self.NAME + '_' + str(uuid4()) + if len(suite): + session_name = self.NAME + '_' + suite + else: + session_name = self.NAME + '_' + str(uuid4()) session = self.create_session(name=session_name) if suite != "": session.logger.config_suite(suite, self.NAME) else: session.logger.config_execution(self.NAME) - session.send_expect("cd %s" % self.base_dir, "# ") + + if getattr(self, "base_dir", None): + session.send_expect("cd %s" % self.base_dir, "# ") + return session def close_session(self, session): @@ -788,6 +794,14 @@ class Dut(Crb): self.ports_info.append({'port': port, 'pci': pci_str, 'type': pci_id, 'intf': intf, 'mac': macaddr, 'ipv6': ipv6, 'numa': -1}) + def setup_virtenv(self, virttype): + """ + Setup current virtualization hypervisor type and remove elder VM ssh keys + """ + self.virttype = virttype + # remove VM ras keys from tester + remove_old_rsa_key(self.tester, self.crb['My IP']) + def generate_sriov_vfs_by_port(self, port_id, vf_num, driver='default'): """ Generate SRIOV VFs with default driver it is bound now or specifid driver. diff --git a/framework/project_dpdk.py b/framework/project_dpdk.py index 6bc47f2..a25e7a7 100644 --- a/framework/project_dpdk.py +++ b/framework/project_dpdk.py @@ -49,8 +49,8 @@ class DPDKdut(Dut): build, memory and kernel module. """ - def __init__(self, crb, serializer): - super(DPDKdut, self).__init__(crb, serializer) + def __init__(self, crb, serializer, dut_id): + super(DPDKdut, self).__init__(crb, serializer, dut_id) self.testpmd = None def set_target(self, target, bind_dev=True): @@ -439,7 +439,7 @@ class DPDKtester(Tester): interface and generate port map. """ - def __init__(self, crb, serializer): + def __init__(self, crb, serializer, dut_id): self.NAME = "tester" super(DPDKtester, self).__init__(crb, serializer) -- 1.9.3