From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 7E4B6A00BE; Thu, 4 Jun 2020 11:25:45 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 55E8D1D5E6; Thu, 4 Jun 2020 11:25:45 +0200 (CEST) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id 72DED23D for ; Thu, 4 Jun 2020 11:25:43 +0200 (CEST) IronPort-SDR: Sr7X3qoFdpIGBQaYMJxZp/ZWhsHZUmf9HPddlRhK5xCULTyX4rzYBNbxOF0KtxCCrVrEDGm1gS mluvz0TWnjAw== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Jun 2020 02:25:42 -0700 IronPort-SDR: okn49O6YWVwRaX1A45l7r+9nORo+EzgSY4yhvmCgB54D5x0MCcBh9M8hXKSsbrietICyymqthH zPLxnhw8LpOg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,471,1583222400"; d="scan'208";a="312849999" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by FMSMGA003.fm.intel.com with ESMTP; 04 Jun 2020 02:25:41 -0700 Received: from fmsmsx602.amr.corp.intel.com (10.18.126.82) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 4 Jun 2020 02:25:41 -0700 Received: from fmsmsx602.amr.corp.intel.com (10.18.126.82) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 4 Jun 2020 02:25:41 -0700 Received: from FMSEDG002.ED.cps.intel.com (10.1.192.134) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.1713.5 via Frontend Transport; Thu, 4 Jun 2020 02:25:41 -0700 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (104.47.66.44) by edgegateway.intel.com (192.55.55.69) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 4 Jun 2020 02:25:30 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YnXfL07RqKYPp5biEEj6Igdhtk6oIpwsUSXEwU7yOOofvym0/IgkUMPs3G8VAvrjIRADYUQVKQ74yR8RqOnkEHLmn9q0TXfSTC3aZ0j3djnMUO4oSBTIjFTqzgvR25t9cLZcaYe2LM/yP9ptJrD6S1HeiuDXZktgGxii5yIy7z6RLxxwZqtdDyTDPbGJhl2Ofq2eo355nP7t5xDn20I8ak9Lu9JPgqbSFL6244mIClg4NRwLnSCsPG8xzY5MIGUYPRo2x/9wezmB7kOffv3cOWnxlgglhjUjasxjIyHIOjvxS0GYNLFuHOem2iqnflWrr5c+/YJtevFx5ZWsL+tnvg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6qbcpae+/CIxLHZS5jAYKmLWqrWzgztxNGg15F1ozT8=; b=B2c8KZyXyEpQFJGRc9e1hd6MsI5FNP1oKCi8ZirSRew+ANsfQiRbG58tO9sNzxLVm3cJ7JV8PuIQxku2RWj3kd8fJPT9RiGkOgLjrX3VFacgkLmn1akhaEgxvDCQtSNnlp3Wznw8GGtJuTUOecI4YXoXkqGXz2t+hTDiQ168xeQrD8SBwO4eBUXx6nqmmkIVgCExCl3qe3GHPiLdkybzR779XUJxK37WCbb98JwW/j9NjVuCTi2nY2DWEo73zb0N6EDY1DxJXuK4X9SrDGGETD3pStOo97q1aVUy7mYjHv6T5K4uOMhplewcdmvUpuyGOt0DnlWwSHDbBhHzv+AUyQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6qbcpae+/CIxLHZS5jAYKmLWqrWzgztxNGg15F1ozT8=; b=c1H3ogiatcqQCL5DUoJlV3leoShLw8znIftXz5GPQhyuVYMQjFvmmA1Y30QRjDaSfumjUhIFsUNBI0qIuMkdqhzLNkyJE7BVjnGkUzeYWpNLmgw3zcYD74VZsNlWUiJr2aBeXF9uvQKAQQqroZHBiIfv5Yh4UolrUmaWkmfmh74= Received: from MWHPR11MB1392.namprd11.prod.outlook.com (2603:10b6:300:24::14) by MWHPR11MB1806.namprd11.prod.outlook.com (2603:10b6:300:10e::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3066.18; Thu, 4 Jun 2020 09:25:21 +0000 Received: from MWHPR11MB1392.namprd11.prod.outlook.com ([fe80::6d72:d9ca:aa1a:89c5]) by MWHPR11MB1392.namprd11.prod.outlook.com ([fe80::6d72:d9ca:aa1a:89c5%8]) with mapi id 15.20.3066.018; Thu, 4 Jun 2020 09:25:21 +0000 From: "Fu, Qi" To: "Zhang, XiX" , "dts@dpdk.org" CC: "Zhang, XiX" Thread-Topic: [dts] [PATCH V1] tests/TestSuite_shutdown_apitests:change dpdk pf create vf to kernel pf create vf Thread-Index: AQHWNAViaWYORjCm3UKFU9+8jsPxj6jIO4QA Date: Thu, 4 Jun 2020 09:25:20 +0000 Message-ID: References: <1590570365-110634-1-git-send-email-xix.zhang@intel.com> In-Reply-To: <1590570365-110634-1-git-send-email-xix.zhang@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-reaction: no-action dlp-version: 11.2.0.6 dlp-product: dlpe-windows authentication-results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=intel.com; x-originating-ip: [192.55.52.220] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 7156d951-e773-437c-208f-08d808693404 x-ms-traffictypediagnostic: MWHPR11MB1806: x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:103; x-forefront-prvs: 04244E0DC5 x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: H4wyvSQ5UThxXJVp/g4zNvZIkRLcJLSpMmkBsnKFmAYQOvri+/lZBYtfPgDnrDP/0X+2agJJdjt3GawdSNVNGL36/5X9NeaFE7THA5ngd9RPiLtcNJbbRLtf1LvbBEcHc4tUDAGENJYiTABlCxQ1sPa3JTiV33DWCxxo8+Ef9bYsnKcRqjQImytnmxyrwEULD27EMNZbDcShQaTP9UjNCbnxPS9HVOLgyBVq7nTvqO75luOexmKhZwdGMgnIczrZ+fO4EkHlczU2sLKxY4iA3JtuLLjzx0er4CXDApfFF+QCt6sQNw6GFW500d/sHLO/+dNZEZTEZ5Qd7WJ6iWVUig== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MWHPR11MB1392.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(366004)(376002)(39860400002)(136003)(346002)(396003)(107886003)(6506007)(5660300002)(26005)(2906002)(71200400001)(53546011)(4326008)(9686003)(55016002)(30864003)(316002)(110136005)(33656002)(186003)(66476007)(66556008)(64756008)(66446008)(8936002)(52536014)(66946007)(478600001)(7696005)(76116006)(83380400001)(86362001); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata: kg6aDkXpY5pBSjVGpX+cFwSYjCKh4GCV9VcMo7xadSKAxriyNLbg9BaHAvfBUBWVoV8B5kwolX23VgsN52dcrp/v2CTo4mwczqwHXyfth8ElV2c4zCDkQOUqAxZCI/zyn1WZEfakAbkujpXBeyvRmSisSqOdB+h1JvO9i4Vakg7eQKlWZ02iYqGlOxh/zt4yY0gx7FxLDp5YZnoVlzTMcU7rwq0QMdzB+zo3JP5xyzeK4HQ4r7rjcfQJXiP3YphZkrFncpOfeJovoNloEmq0zWLWCcmMBvXdORozrSF4pwgOZiB6hATMqmqv0moR6nKfGOBmRYu/m1cRn+HK7Jw57rmap2h5yolnCZk3QYMamwgaZNqyDRWjpM1MhZO+qtIvMLNY42y2+Ln06TClOyN/Kem8uvt23Verofeyz3Xd3LowknuZBkbbc3YGSUPJ3SQtNr9oGWphD4RBcWiiWVEEzBfisk48Zq4XSVQsPt3Ue8E= Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 7156d951-e773-437c-208f-08d808693404 X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Jun 2020 09:25:20.8140 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: j+pEJfYuU4h2zoO7tVdhiGYxGi4CZi6CQU1SHM0sEOdCvweAJs1WlspECnyhrQ1Z X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR11MB1806 X-OriginatorOrg: intel.com Subject: Re: [dts] [PATCH V1] tests/TestSuite_shutdown_apitests:change dpdk pf create vf to kernel pf create vf 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: , Errors-To: dts-bounces@dpdk.org Sender: "dts" Acked-by: Fu, Qi Best regards, Fu, Qi > -----Original Message----- > From: dts On Behalf Of xizhan4x > Sent: Wednesday, May 27, 2020 5:06 PM > To: dts@dpdk.org > Cc: Zhang, XiX > Subject: [dts] [PATCH V1] tests/TestSuite_shutdown_apitests:change dpdk p= f > create vf to kernel pf create vf >=20 > change dpdk pf create vf to kernel pf create vf and used ethtool Modify = speed >=20 >=20 > Signed-off-by: xizhan4x > --- > tests/TestSuite_shutdown_api.py | 129 ++++++++++++++++---------------- > 1 file changed, 66 insertions(+), 63 deletions(-) >=20 > diff --git a/tests/TestSuite_shutdown_api.py b/tests/TestSuite_shutdown_a= pi.py > index 3a29b9c..650ccfc 100644 > --- a/tests/TestSuite_shutdown_api.py > +++ b/tests/TestSuite_shutdown_api.py > @@ -48,7 +48,7 @@ from exception import VerifyFailure from qemu_kvm > import QEMUKvm from settings import get_nic_name from random import > randint > - > +from settings import DRIVERS > # > # > # Test class. > @@ -80,6 +80,18 @@ class TestShutdownApi(TestCase): > self.pmdout =3D PmdOutput(self.dut) > self.vm_env_done =3D False >=20 > + def set_up(self): > + """ > + Run before each test case. > + """ > + if self._suite_result.test_case =3D=3D "test_change_linkspeed_vf= ": > + self.used_driver =3D self.dut.ports_info[0]["port"].get_nic_= driver() > + driver_name =3D DRIVERS.get(self.nic) > + self.dut_ports =3D self.dut.get_ports(self.nic) > + self.verify(len(self.dut_ports) >=3D 1, "Insufficient ports"= ) > + self.bind_nic_driver(self.dut_ports, driver=3Ddriver_name) > + self.setup_vm_env(driver_name) > + > def get_stats(self, portid): > """ > Get packets number from port statistic. > @@ -188,11 +200,6 @@ class TestShutdownApi(TestCase): > else: > self.verify("Link detected: no" in out, "Wrong link stat= us") >=20 > - def set_up(self): > - """ > - Run before each test case. > - """ > - pass >=20 > def check_linkspeed_config(self, configs): > ret_val =3D False > @@ -211,14 +218,12 @@ class TestShutdownApi(TestCase): > return ret_val >=20 > def check_vf_link_status(self): > - self.dut_testpmd.start_testpmd("Default", "--port-topology=3Dcha= ined") > self.vm0_testpmd.start_testpmd(VM_CORES_MASK, '--port- > topology=3Dchained') > - for i in range(10): > + time.sleep(2) > + for i in range(15): > out =3D self.vm0_testpmd.execute_cmd('show port info 0') > print(out) > if 'Link status: down' in out: > - self.dut_testpmd.execute_cmd('port stop all') > - self.dut_testpmd.execute_cmd('port start all') > time.sleep(2) > else : > break > @@ -239,7 +244,6 @@ class TestShutdownApi(TestCase): > driver =3D netdev.default_driver > if driver !=3D driver_now: > netdev.bind_driver(driver=3Ddriver) > - > def setup_vm_env(self, driver=3D'default'): > """ > Create testing environment with 1VF generated from 1PF @@ -247,9 > +251,6 @@ class TestShutdownApi(TestCase): > if self.vm_env_done: > return >=20 > - # initialize vm > - self.dut_ports =3D self.dut.get_ports(self.nic) > - self.verify(len(self.dut_ports) >=3D 1, "Insufficient ports") > self.vm0 =3D None >=20 > # set vf assign method and vf driver @@ -263,12 +264,9 @@ class > TestShutdownApi(TestCase): > self.vf_assign_method =3D 'vfio-pci' > self.dut.send_expect('modprobe vfio-pci', '#') >=20 > - self.dut.setup_modules_linux(self.target, 'igb_uio', '') > - self.bind_nic_driver(self.dut_ports[:1], driver=3D"igb_uio") > self.used_dut_port =3D self.dut_ports[0] > tester_port =3D self.tester.get_local_port(self.used_dut_port) > self.tester_intf =3D self.tester.get_interface(tester_port) > - > self.dut.generate_sriov_vfs_by_port( > self.used_dut_port, 2, driver=3Ddriver) > self.sriov_vfs_port =3D self.dut.ports_info[ @@ -276,14 +274,11 = @@ class > TestShutdownApi(TestCase): > for port in self.sriov_vfs_port: > port.bind_driver(self.vf_driver) > time.sleep(1) > - self.dut_testpmd =3D PmdOutput(self.dut) > - self.dut_testpmd.start_testpmd( > - "Default", "--rxq=3D4 --txq=3D4 --port-topology=3Dchained") > - self.dut_testpmd.execute_cmd("start") > - time.sleep(5) >=20 > vf0_prop =3D {'opt_host': self.sriov_vfs_port[0].pci} > - > + self.host_intf =3D self.dut.ports_info[self.used_dut_port]['intf= '] > + self.vf_mac =3D "00:01:23:45:67:89" > + self.dut.send_expect("ip link set %s vf 0 mac %s" % > + (self.host_intf, self.vf_mac), "# ") > # set up VM0 ENV > self.vm0 =3D QEMUKvm(self.dut, 'vm0', 'shutdown_api') > self.vm0.set_vm_device(driver=3Dself.vf_assign_method, **vf0_pro= p) @@ - > 294,30 +289,35 @@ class TestShutdownApi(TestCase): > except Exception as e: > self.destroy_vm_env() > raise Exception(e) > - > self.vm0_dut_ports =3D self.vm0_dut.get_ports('any') > self.vm0_testpmd =3D PmdOutput(self.vm0_dut) >=20 > self.vm_env_done =3D True > - self.dut_testpmd.quit() > - self.bind_nic_driver(self.dut_ports[:1], driver=3Dself.vf_driver= ) > + >=20 > def destroy_vm_env(self): > + if getattr(self, 'used_dut_port', None) is not None: > + self.dut.destroy_sriov_vfs_by_port(self.used_dut_port) > + self.used_dut_port =3D None > + > + for port in self.ports: > + self.dut.send_expect("ethtool -s %s autoneg on " % > + self.dut.ports_info[port]["intf"], "#") > + > + self.bind_nic_driver(self.dut_ports, driver=3Dself.used_driver o= r > + self.drivername) > + > if not self.vm_env_done: > return > + > + if getattr(self, 'self.vm0_testpmd', None): > + self.vm0_testpmd.quit() > + > if getattr(self, 'vm0', None): > - self.vm0_dut.kill_all() > + if getattr(self, 'vm0_dut', None): > + self.vm0_dut.kill_all() > self.vm0_testpmd =3D None > self.vm0_dut_ports =3D None > # destroy vm0 > self.vm0.stop() > - self.vm0 =3D None > - > - if getattr(self, 'used_dut_port', None): > - self.dut.destroy_sriov_vfs_by_port(self.used_dut_port) > - port =3D self.dut.ports_info[self.used_dut_port]['port'] > - self.used_dut_port =3D None > - > self.vm_env_done =3D False >=20 > def test_stop_restart(self): > @@ -525,47 +525,53 @@ class TestShutdownApi(TestCase): > self.dut.send_expect("start", "testpmd> ") > self.check_forwarding() > self.dut.send_expect("stop", "testpmd> ") > - > def test_change_linkspeed_vf(self): > """ > Change Link Speed VF . > """ > - self.setup_vm_env() > self.check_vf_link_status() > out =3D self.tester.send_expect( > "ethtool %s" % > self.tester.get_interface(self.tester.get_local_port(self.ports[0])), "# = ", 100) >=20 > - self.verify("Supports auto-negotiation: Yes" in out, "Auto-negot= iation not > support.") > - > + dut_out=3Dself.dut.send_expect("ethtool %s" % self.dut.ports_inf= o[0]["intf"], > "# ", 100) > + check_auto_negotiation=3D"Supports auto-negotiation: Yes" > + self.verify(check_auto_negotiation in out and > + check_auto_negotiation in dut_out , "tester or dut Auto-negotiation > + not support.") > result_scanner =3D r"([0-9]+)base\S*/([A-Za-z]+)" > scanner =3D re.compile(result_scanner, re.DOTALL) > - m =3D scanner.findall(out) > + m =3D scanner.findall(dut_out) > configs =3D m[:-int(len(m) / 2)] >=20 > if not self.check_linkspeed_config(configs): > - return; > + return >=20 > result_linkspeed_scanner =3D r"Link\s*speed:\s([0-9]+)\s*Mbps" > linkspeed_scanner =3D re.compile(result_linkspeed_scanner, re.DO= TALL) > result_linktype_scanner =3D r"Link\s*duplex:\s*(\S*)\s*-\s*duple= x" > linktype_scanner =3D re.compile(result_linktype_scanner, re.DOTA= LL) > - > + tx_rx_packets =3D 3 > + self.vm0_testpmd.execute_cmd('set fwd mac', "testpmd> ", 30) > + self.vm0_testpmd.execute_cmd('start') > for config in configs: > print(config) > - if self.nic in ["ironpond"]: > - if config[0] !=3D '1000' or '10000': > - continue > - elif self.nic in ["sagepond"]: > - if config[0] !=3D '1000' and '10000': > - continue > - self.dut.send_expect("port stop all", "testpmd> ", 100) > for port in self.ports: > - self.dut.send_expect("port config %d speed %s duplex %s"= % (port, > - config[0], config[1].lower()), "tes= tpmd> ") > - self.dut.send_expect("set fwd mac", "testpmd>") > - self.dut.send_expect("port start all", "testpmd> ", 100) > - time.sleep(8) # sleep few seconds for link stable > - # check changing VF link speed is supported or not. > + if len(configs) !=3D 1: > + self.dut.send_expect( > + "ethtool -s %s autoneg off speed %s duplex %s" = % > (self.dut.ports_info[port]["intf"], > + = config[0], config[1].lower()), "#") > + time.sleep(5) > + self.tester_itf_1 =3D self.tester.get_interface(port) > + pkt =3D 'Ether(dst=3D"%s", src=3D"02:00:00:00:00:01")/IP= ()/UDP()/("X"*22)' % > self.vf_mac > + self.tester.scapy_append( > + 'sendp([%s], iface=3D"%s", count=3D%d)' > + % (pkt, self.tester_intf, tx_rx_packets)) > + self.tester.scapy_execute() > + time.sleep(2) > + out =3D self.vm0_testpmd.execute_cmd('show port stats al= l') > + self.verify("RX-packets: %d" % tx_rx_packets in out and = "TX- > packets: %d" % tx_rx_packets in out, > + "VF Expected results: RX-packets: %d \n Actu= al results:%s " % > (tx_rx_packets, out)) > + self.vm0_testpmd.execute_cmd('clear port stats all') > + time.sleep(1) > + > out =3D self.vm0_testpmd.execute_cmd('show port info all') >=20 > linkspeed =3D linkspeed_scanner.findall(out) @@ -575,12 +581= ,7 @@ class > TestShutdownApi(TestCase): > "Wrong VF speed reported by the self.tester.") > self.verify(config[1].lower() =3D=3D linktype[0].lower(), > "Wrong VF link type reported by the self.tester.= ") > - # quit vm > - self.vm0_testpmd.quit() > - self.dut_testpmd.quit() > - time.sleep(3) > - self.vm0_dut.kill_all() > - self.destroy_vm_env() > + >=20 > def test_enable_disablejumbo(self): > """ > @@ -818,8 +819,11 @@ class TestShutdownApi(TestCase): > """ > Run after each test case. > """ > + if self._suite_result.test_case =3D=3D "test_change_linkspeed_vf= ": > + self.destroy_vm_env() > self.dut.kill_all() > - self.pmdout.start_testpmd("Default", "--portmask=3D%s --port- > topology=3Dloop" % utils.create_mask(self.ports), socket=3Dself.ports_soc= ket) > + self.pmdout.start_testpmd("Default", "--portmask=3D%s --port- > topology=3Dloop" % utils.create_mask(self.ports), > + socket=3Dself.ports_socket) > ports_num =3D len(self.ports) > # link up test, to avoid failing further tests if link was down > for i in range(ports_num): > @@ -828,12 +832,11 @@ class TestShutdownApi(TestCase): > # start ports, to avodi failing further tests if ports are stope= d > self.dut.send_expect("port start all", "testpmd> ", 100) > self.dut.send_expect("quit", "# ") > + >=20 >=20 > def tear_down_all(self): > """ > Run after each test suite. > """ > - if self.vm_env_done: > - self.destroy_vm_env() > self.dut.kill_all() > -- > 2.17.2