[dts] [PATCH v2 04/16] framework: add DUT index support
Marvin Liu
yong.liu at intel.com
Wed Jan 10 01:11:02 CET 2018
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 <yong.liu at intel.com>
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..9c2a5a8 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):
@@ -366,11 +372,11 @@ class Dut(Crb):
return False
def get_dpdk_bind_script(self):
- op = self.send_command("ls")
+ op = self.send_expect("ls", "#")
if "usertools" in op:
res = 'usertools/dpdk-devbind.py'
else:
- op = self.send_command("ls tools")
+ op = self.send_expect("ls tools", "#")
if "dpdk_nic_bind.py" in op:
res = 'tools/dpdk_nic_bind.py'
else:
@@ -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 1f673c9..40c862a 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):
@@ -447,7 +447,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
More information about the dts
mailing list