From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-yw0-f174.google.com (mail-yw0-f174.google.com [209.85.161.174]) by dpdk.org (Postfix) with ESMTP id 37C5F2BA1 for ; Tue, 5 Sep 2017 03:58:56 +0200 (CEST) Received: by mail-yw0-f174.google.com with SMTP id k78so7722922ywe.1 for ; Mon, 04 Sep 2017 18:58:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=12egdnXQK23fenJoKrTS/afu9ejURZUk7A/0E2u4bK4=; b=h4CRvpfAzMkepkb0OHIUnjO2jCazRth7jCtBTkGNrq/AjOZ/zBcsYxAGIRL7mo3SIy qhaep05+47lqOcUAN0rSSLy0How1sdi5QTGfxF4MwylxKEpvr8vN7+XWqqmTBS3cqK5a 5OfMsTG5nE+y3a3RMnrEVAkrNI6h7P9eZ5Nt8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=12egdnXQK23fenJoKrTS/afu9ejURZUk7A/0E2u4bK4=; b=dYNpr9qz3fvH1oSnTN9RoRbGkONoprbXXcN4GYGBkry+HSJlRICMlPEpaLMkg9jNgJ I8cAgFAMVbLyTa1pgPijMcVCa4fT9oCFQKZ1TK5m2211vNZdYGa9UmIq5R1m/4hkKZz6 SeYDMLsdAvdpbnide7dd0imOntxH1QbBmU9chp9bYT3N3nYOxgldZCizU0sr7gEeqPJz yDzuuXwm+UGxAunfjWicTSNtPjEoSSk7CsevxVnqPR2c8mQe+mA5MV1IbQ6ntua9hgcn zYSvSUn0liYphiW7Sspu+SxVediJWx9WD2jN1D6vrKGcdN+i5DD2u7yHnn8NXqahA3jt HS5A== X-Gm-Message-State: AHPjjUh9mNmvvj+C0yG8W2Ps9B/zaHOpoRe4Rwby0cpgOuI1fTrah1kj 4x28LGvc58OSqc1KEERdckXiPRh8E1fq X-Google-Smtp-Source: ADKCNb6YqETav4b9vnVOZPonh1t+rmY2HYpI0ChFdGWN9uU1X1XORqnkch0BExvv/5Kq5Up1kRRjBFU9coyQP95haWk= X-Received: by 10.37.134.205 with SMTP id y13mr2006595ybm.248.1504576735757; Mon, 04 Sep 2017 18:58:55 -0700 (PDT) MIME-Version: 1.0 Received: by 10.37.183.73 with HTTP; Mon, 4 Sep 2017 18:58:55 -0700 (PDT) In-Reply-To: References: <1503311443-26858-1-git-send-email-jianbo.liu@linaro.org> From: Jianbo Liu Date: Tue, 5 Sep 2017 09:58:55 +0800 Message-ID: To: =?UTF-8?Q?Rados=C5=82aw_Biernacki?= Cc: dts@dpdk.org, Herbert Guan Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Subject: Re: [dts] [PATCH] tests/ip_pipeline: fix test failures 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: Tue, 05 Sep 2017 01:58:57 -0000 On 4 September 2017 at 17:39, Rados=C5=82aw Biernacki wr= ote: > 2017-08-21 12:30 GMT+02:00 Jianbo Liu : >> >> The ip_pipeline was changed a lot, and the configuration and commands >> are different from those in this testing case. >> >> Signed-off-by: Jianbo Liu >> --- >> tests/TestSuite_ip_pipeline.py | 157 >> +++++++++++++++++++++++------------------ >> 1 file changed, 90 insertions(+), 67 deletions(-) >> >> diff --git a/tests/TestSuite_ip_pipeline.py >> b/tests/TestSuite_ip_pipeline.py >> index 90dba31..300b1de 100644 >> --- a/tests/TestSuite_ip_pipeline.py >> +++ b/tests/TestSuite_ip_pipeline.py >> @@ -124,11 +124,47 @@ class TestIPPipeline(TestCase): >> >> writer.close() >> >> + def create_passthrough_cfgfile(self): >> + self.dut.send_expect('echo [PIPELINE0] > /tmp/ip_pipeline.cfg', >> '#') >> + self.dut.send_expect('echo type =3D MASTER >> >> /tmp/ip_pipeline.cfg', '#') >> + self.dut.send_expect('echo core =3D 0 >> /tmp/ip_pipeline.cfg', >> '#') >> + self.dut.send_expect('echo [PIPELINE1] >> /tmp/ip_pipeline.cfg'= , >> '#') >> + self.dut.send_expect('echo type =3D PASS-THROUGH >> >> /tmp/ip_pipeline.cfg', '#') >> + self.dut.send_expect('echo core =3D 1 >> /tmp/ip_pipeline.cfg', >> '#') >> + self.dut.send_expect('echo pktq_in =3D RXQ0.0 RXQ1.0 >> >> /tmp/ip_pipeline.cfg', '#') >> + self.dut.send_expect('echo pktq_out =3D TXQ1.0 TXQ0.0 >> >> /tmp/ip_pipeline.cfg', '#') >> + >> + def create_routing_cfgfile(self): >> + self.dut.send_expect('echo [PIPELINE0] > /tmp/ip_pipeline.cfg', >> '#') >> + self.dut.send_expect('echo type =3D MASTER >> >> /tmp/ip_pipeline.cfg', '#') >> + self.dut.send_expect('echo core =3D 0 >> /tmp/ip_pipeline.cfg', >> '#') >> + self.dut.send_expect('echo [PIPELINE1] >> /tmp/ip_pipeline.cfg'= , >> '#') >> + self.dut.send_expect('echo type =3D ROUTING >> >> /tmp/ip_pipeline.cfg', '#') >> + self.dut.send_expect('echo core =3D 1 >> /tmp/ip_pipeline.cfg', >> '#') >> + self.dut.send_expect('echo pktq_in =3D RXQ0.0 RXQ1.0 >> >> /tmp/ip_pipeline.cfg', '#') >> + self.dut.send_expect('echo pktq_out =3D TXQ0.0 TXQ1.0 >> >> /tmp/ip_pipeline.cfg', '#') >> + self.dut.send_expect('echo encap =3D ethernet >> >> /tmp/ip_pipeline.cfg', '#') >> + self.dut.send_expect('echo ip_hdr_offset =3D 270 >> >> /tmp/ip_pipeline.cfg', '#') >> + self.dut.send_expect('echo arp_key_offset =3D 128 >> >> /tmp/ip_pipeline.cfg', '#') >> + self.dut.send_expect('echo n_arp_entries =3D 1000 >> >> /tmp/ip_pipeline.cfg', '#') >> + >> + def create_flow_cfgfile(self): >> + self.dut.send_expect('echo [PIPELINE0] > /tmp/ip_pipeline.cfg', >> '#') >> + self.dut.send_expect('echo type =3D MASTER >> >> /tmp/ip_pipeline.cfg', '#') >> + self.dut.send_expect('echo core =3D 0 >> /tmp/ip_pipeline.cfg', >> '#') >> + self.dut.send_expect('echo [PIPELINE1] >> /tmp/ip_pipeline.cfg'= , >> '#') >> + self.dut.send_expect('echo type =3D FLOW_CLASSIFICATION >> >> /tmp/ip_pipeline.cfg', '#') >> + self.dut.send_expect('echo core =3D 1 >> /tmp/ip_pipeline.cfg', >> '#') >> + self.dut.send_expect('echo pktq_in =3D RXQ0.0 RXQ1.0 >> >> /tmp/ip_pipeline.cfg', '#') >> + self.dut.send_expect('echo pktq_out =3D TXQ0.0 TXQ1.0 SINK0 >> >> /tmp/ip_pipeline.cfg', '#') >> + self.dut.send_expect('echo n_flows =3D 65536 >> >> /tmp/ip_pipeline.cfg', '#') >> + self.dut.send_expect('echo key_size =3D 16 >> >> /tmp/ip_pipeline.cfg', '#') >> + self.dut.send_expect('echo key_offset =3D 278 >> >> /tmp/ip_pipeline.cfg', '#') >> + self.dut.send_expect('echo key_mask =3D >> 00FF0000FFFFFFFFFFFFFFFFFFFFFFFF >> /tmp/ip_pipeline.cfg', '#') >> + self.dut.send_expect('echo flowid_offset =3D 128 >> >> /tmp/ip_pipeline.cfg', '#') >> + >> def start_ip_pipeline(self, ports): >> - command_line =3D "./examples/ip_pipeline/build/ip_pipeline -c %= s -n >> %d -- -p %s" % \ >> - (self.coremask, >> - self.dut.get_memory_channels(), >> - ports) >> + command_line =3D "./examples/ip_pipeline/build/ip_pipeline -p %= s -f >> /tmp/ip_pipeline.cfg" % ports >> >> out =3D self.dut.send_expect(command_line, 'pipeline>', 60) >> sleep(5) # 'Initialization completed' is not the last output= , >> some >> @@ -150,10 +186,10 @@ class TestIPPipeline(TestCase): >> """ >> >> for iface in ifaces: >> + command =3D ('rm -f tcpdump_{0}.pcap').format(iface) >> + self.tester.send_expect(command, '#') >> command =3D ( >> 'tcpdump -w tcpdump_{0}.pcap -i {0} 2>tcpdump_{0}.out >> &').format(iface) >> - self.tester.send_expect( >> - 'rm -f tcpdump_{0}.pcap', '#').format(iface) >> self.tester.send_expect(command, '#') >> >> def tcpdump_stop_sniff(self): >> @@ -200,15 +236,13 @@ class TestIPPipeline(TestCase): >> >> tx_port =3D self.tester.get_local_port(self.dut_ports[from_port= ]) >> rx_port =3D self.tester.get_local_port(self.dut_ports[to_port]) >> + port0 =3D self.tester.get_local_port(self.dut_ports[0]) >> >> tx_interface =3D self.tester.get_interface(tx_port) >> rx_interface =3D self.tester.get_interface(rx_port) >> >> self.tcpdump_start_sniffing([tx_interface, rx_interface]) >> >> - self.dut.send_expect('link 0 up', 'pipeline>') >> - self.dut.send_expect('link 1 up', 'pipeline>') >> - >> timeout =3D frames_number * inter + 2 >> inter =3D ", inter=3D%d" % inter >> >> @@ -225,64 +259,58 @@ class TestIPPipeline(TestCase): >> >> self.tcpdump_stop_sniff() >> >> - self.dut.send_expect('link 0 down', 'pipeline>') >> - self.dut.send_expect('link 1 down', 'pipeline>') >> - >> rx_stats =3D self.number_of_packets('tcpdump_%s.pcap' % >> rx_interface) >> tx_stats =3D self.number_of_packets('tcpdump_%s.pcap' % >> tx_interface) >> >> # Do not count the sent frames in the tx_interface >> tx_stats =3D tx_stats - frames_number >> >> - return {'rx': rx_stats, 'tx': tx_stats} >> + if port0 =3D=3D tx_port: >> + return {'rx0': tx_stats, 'rx1': rx_stats} >> + else: >> + return {'rx0': rx_stats, 'rx1': tx_stats} >> >> def check_results(self, stats, expected): >> """ >> - This function check that the Rx and Tx stats matches the >> expected. >> - expected =3D [Rx, Tx] >> + This function check that the received packet numbers of port0 a= nd >> port1 match the expected. >> + expected =3D [Rx0, Rx1] >> """ >> >> - for port in ['rx', 'tx']: >> + for port in ['rx0', 'rx1']: >> self.verify(stats[port] =3D=3D expected[port], >> 'Frames expected (%s) and received (%s) mismatc= h >> on %s port' % ( >> expected[port], stats[port], port)) >> >> def pipeline_command(self, command): >> out =3D self.dut.send_expect(command, 'pipeline>') >> - self.verify("Illegal" not in out, "Pipeline command error 1: >> '%s'" % command) >> - self.verify("Bad" not in out, "Pipeline command error 2: '%s'" = % >> command) >> + self.verify("arguments" not in out, "Incorrect arguments: '%s'"= % >> command) >> + self.verify("Invalid" not in out, "Invalid argument: '%s'" % >> command) >> + self.verify("Syntax error" not in out, "Syntax error: '%s'" % >> command) >> return out >> >> - def pipeline_add_flow(self, port, src_ip, dst_ip, src_port, dst_por= t, >> + def pipeline_add_flow(self, port, src_ip, dst_ip, src_port, dst_por= t, >> flowid, >> protocol=3D6): >> - command =3D 'flow add %s %s %d %d %d %d' % (src_ip, dst_ip, >> src_port, >> - dst_port, protocol, >> port) >> + command =3D 'p 1 flow add ipv4 %s %s %d %d %d port %d id %d' % >> (src_ip, dst_ip, src_port, >> + dst_port, protocol, >> port, flowid) >> out =3D self.pipeline_command(command) >> - self.verify("Adding flow" in out, "Add flow error") >> + self.verify("failed" not in out, "Add flow error") >> >> def pipeline_del_flow(self, src_ip, dst_ip, src_port, dst_port, >> protocol=3D6): >> - command =3D 'flow del %s %s %d %d %d' % (src_ip, dst_ip, src_po= rt, >> + command =3D 'p 1 flow del ipv4 %s %s %d %d %d' % (src_ip, dst_i= p, >> src_port, >> dst_port, protocol) >> out =3D self.pipeline_command(command) >> - self.verify("Deleting flow" in out, "Del flow error") >> + self.verify("failed" not in out, "Del flow error") >> >> def pipeline_add_route(self, port, src_ip, netmask, gw_ip): >> - command =3D 'route add %s %d %d %s' % (src_ip, netmask, port, >> gw_ip) >> + command =3D 'p 1 route add %s %d port %d ether %s' % (src_ip, >> netmask, port, gw_ip) >> out =3D self.pipeline_command(command) >> - self.verify("Adding route" in out, "Add route error") >> + self.verify("failed" not in out, "Add route error") >> >> def pipeline_del_route(self, src_ip, netmask): >> - command =3D 'route del %s %d' % (src_ip, netmask) >> + command =3D 'p 1 route del %s %d' % (src_ip, netmask) >> out =3D self.pipeline_command(command) >> - self.verify("Deleting route" in out, "Del route error") >> - >> - def pipeline_traffic_burst(self): >> - self.dut.send_expect('link 0 up', 'pipeline>') >> - self.dut.send_expect('link 1 up', 'pipeline>') >> - sleep(0.1) >> - self.dut.send_expect('link 0 down', 'pipeline>') >> - self.dut.send_expect('link 1 down', 'pipeline>') >> + self.verify("failed" not in out, "Del route error") >> >> def set_up_all(self): >> """ >> @@ -291,14 +319,8 @@ class TestIPPipeline(TestCase): >> PMD prerequisites. >> """ >> >> - # Check for port availability >> - self.needed_ports =3D {"niantic": 2, >> - "I217V": 1, >> - "I217LM": 1, >> - "I218V": 1, >> - "I218LM": 1} >> self.dut_ports =3D self.dut.get_ports() >> - self.verify(len(self.dut_ports) >=3D self.needed_ports[self.nic= ], >> + self.verify(len(self.dut_ports) >=3D 2, >> "Insufficient ports for speed testing") > > > If we access both ports from remain parts of the code, than why we check = for > single port for specific platforms. > In other words what was was the purpose of those removed lines? > I saw that 2 ports were used in the tests, so I think it's better to remove them. >> >> >> out =3D self.dut.build_dpdk_apps("./examples/ip_pipeline") >> @@ -324,9 +346,10 @@ class TestIPPipeline(TestCase): >> pcap_file =3D 'ip_pipeline.pcap' >> frame_size =3D 64 >> >> + self.create_passthrough_cfgfile() >> self.start_ip_pipeline(ports=3Dself.ports_mask) >> self.dut.send_expect( >> - 'run examples/ip_pipeline/ip_pipeline.sh', 'pipeline>', 10) >> + 'run examples/ip_pipeline/config/ip_pipeline.sh', >> 'pipeline>', 10) >> >> # Create a PCAP file containing the maximum frames_number of >> frames needed >> # with fixed size and incremental IP >> @@ -342,13 +365,13 @@ class TestIPPipeline(TestCase): >> stats =3D self.send_and_sniff_pcap_file(pcap_file, >> frames_number, >> 1, 0, inter) >> >> - expected =3D {'tx': 0, 'rx': frames_number} >> + expected =3D {'rx0': frames_number, 'rx1': 0} >> self.check_results(stats, expected) >> >> stats =3D self.send_and_sniff_pcap_file(pcap_file, >> frames_number, >> 0, 1, inter) >> >> - expected =3D {'tx': frames_number, 'rx': 0} >> + expected =3D {'rx0': 0, 'rx1': frames_number} >> self.check_results(stats, expected) >> >> def test_frame_sizes(self): >> @@ -359,9 +382,10 @@ class TestIPPipeline(TestCase): >> frames_number =3D 100 >> inter =3D 0.5 >> >> + self.create_passthrough_cfgfile() >> self.start_ip_pipeline(ports=3Dself.ports_mask) >> self.dut.send_expect( >> - 'run examples/ip_pipeline/ip_pipeline.sh', 'pipeline>', 10) >> + 'run examples/ip_pipeline/config/ip_pipeline.sh', >> 'pipeline>', 10) >> >> for frame_size in TestIPPipeline.frame_sizes: >> >> @@ -376,13 +400,13 @@ class TestIPPipeline(TestCase): >> stats =3D self.send_and_sniff_pcap_file(pcap_file, >> frames_number, >> 1, 0, inter) >> >> - expected =3D {'tx': 0, 'rx': frames_number} >> + expected =3D {'rx0': frames_number, 'rx1': 0} >> self.check_results(stats, expected) >> >> stats =3D self.send_and_sniff_pcap_file(pcap_file, >> frames_number, >> 0, 1, inter) >> >> - expected =3D {'tx': frames_number, 'rx': 0} >> + expected =3D {'rx0': 0, 'rx1': frames_number} >> self.check_results(stats, expected) >> >> def test_flow_management(self): >> @@ -392,11 +416,6 @@ class TestIPPipeline(TestCase): >> pcap_file =3D 'ip_pipeline.pcap' >> frame_size =3D 64 >> >> - default_setup =3D ['arp add 0 0.0.0.1 0a:0b:0c:0d:0e:0f', >> - 'arp add 1 0.128.0.1 1a:1b:1c:1d:1e:1f', >> - 'route add 0.0.0.0 9 0 0.0.0.1', >> - 'route add 0.128.0.0 9 1 0.128.0.1'] >> - >> ip_addrs =3D [ >> '0.0.0.0', '0.0.0.1', '0.0.0.127', '0.0.0.128', '0.0.0.255'= , >> '0.0.1.0', '0.0.127.0', '0.0.128.0', '0.0.129.0', >> '0.0.255.0', >> @@ -409,30 +428,32 @@ class TestIPPipeline(TestCase): >> frames.append(self.create_tcp_ipv4_frame(0, '0.0.0.0', addr= , >> frame_size)) >> >> + self.create_flow_cfgfile() >> self.create_pcap_file_from_frames(pcap_file, frames) >> self.tester.session.copy_file_to(pcap_file) >> >> # Start ip_pipeline app and setup defaults >> self.start_ip_pipeline(ports=3Dself.ports_mask) >> - for command in default_setup: >> - self.pipeline_command(command) >> + >> + # default to SINK0 >> + self.pipeline_command('p 1 flow add default 3') >> >> # Check that no traffic pass though >> stats =3D self.send_and_sniff_pcap_file(pcap_file, len(frames), >> 1, 0, 0.2) >> - expected =3D {'tx': 0, 'rx': 0} >> + expected =3D {'rx0': 0, 'rx1': 0} >> self.check_results(stats, expected) >> >> # Add the flows >> flows_added =3D 0 >> for addrs in ip_addrs: >> - self.pipeline_add_flow(1, '0.0.0.0', addrs, 0, 0) >> + self.pipeline_add_flow(0, '0.0.0.0', addrs, 0, 0, >> flows_added) >> flows_added +=3D 1 >> >> # Check that traffic matching flows pass though >> stats =3D self.send_and_sniff_pcap_file(pcap_file, len(fram= es), >> 1, 0, 0.2) >> - expected =3D {'tx': 0, 'rx': flows_added} >> + expected =3D {'rx0': flows_added, 'rx1': 0} >> self.check_results(stats, expected) >> >> # Remove flows >> @@ -443,7 +464,7 @@ class TestIPPipeline(TestCase): >> # Check that traffic matching flows pass though >> stats =3D self.send_and_sniff_pcap_file(pcap_file, len(fram= es), >> 1, 0, 0.2) >> - expected =3D {'tx': 0, 'rx': flows_added} >> + expected =3D {'rx0': flows_added, 'rx1': 0} >> self.check_results(stats, expected) >> >> out =3D self.dut.send_expect('flow print', 'pipeline>') >> @@ -452,7 +473,7 @@ class TestIPPipeline(TestCase): >> # Check that again no traffic pass though >> stats =3D self.send_and_sniff_pcap_file(pcap_file, len(frames), >> 1, 0, 0.2) >> - expected =3D {'tx': 0, 'rx': 0} >> + expected =3D {'rx0': 0, 'rx1': 0} >> self.check_results(stats, expected) >> >> self.quit_ip_pipeline() >> @@ -464,9 +485,8 @@ class TestIPPipeline(TestCase): >> pcap_file =3D 'ip_pipeline.pcap' >> frame_size =3D 64 >> >> - default_setup =3D ['arp add 0 0.0.0.1 0a:0b:0c:0d:0e:0f', >> - 'arp add 1 0.128.0.1 1a:1b:1c:1d:1e:1f', >> - 'flow add all'] >> + default_setup =3D ['p 1 arp add 0 0.0.0.1 0a:0b:0c:0d:0e:0f', >> + 'p 1 arp add 1 0.128.0.1 1a:1b:1c:1d:1e:1f'] >> >> ip_addrs =3D [ >> '0.0.0.0', '0.0.0.1', '0.0.0.127', '0.0.0.128', '0.0.0.255'= , >> @@ -483,6 +503,7 @@ class TestIPPipeline(TestCase): >> self.create_pcap_file_from_frames(pcap_file, frames) >> self.tester.session.copy_file_to(pcap_file) >> >> + self.create_routing_cfgfile() >> # Start ip_pipeline app and setup defaults >> self.start_ip_pipeline(ports=3Dself.ports_mask) >> for command in default_setup: >> @@ -491,7 +512,7 @@ class TestIPPipeline(TestCase): >> # Check that no traffic pass though >> stats =3D self.send_and_sniff_pcap_file(pcap_file, len(frames), >> 1, 0, 0.2) >> - expected =3D {'tx': 0, 'rx': 0} >> + expected =3D {'rx0': 0, 'rx1': 0} >> self.check_results(stats, expected) >> >> # Add the routes >> @@ -504,7 +525,7 @@ class TestIPPipeline(TestCase): >> stats =3D self.send_and_sniff_pcap_file(pcap_file, len(fram= es), >> 1, 0, 0.2) >> >> - expected =3D {'tx': 0, 'rx': routes_added} >> + expected =3D {'rx0': routes_added, 'rx1': 0} >> self.check_results(stats, expected) >> >> # Remove routes >> @@ -515,7 +536,7 @@ class TestIPPipeline(TestCase): >> # Check that traffic matching flows pass though >> stats =3D self.send_and_sniff_pcap_file(pcap_file, len(fram= es), >> 1, 0, 0.2) >> - expected =3D {'tx': 0, 'rx': routes_added} >> + expected =3D {'rx0': routes_added, 'rx1': 0} >> self.check_results(stats, expected) >> >> out =3D self.dut.send_expect('route print', 'pipeline>') >> @@ -524,7 +545,7 @@ class TestIPPipeline(TestCase): >> # Check that again no traffic pass though >> stats =3D self.send_and_sniff_pcap_file(pcap_file, len(frames), >> 1, 0, 0.2) >> - expected =3D {'tx': 0, 'rx': 0} >> + expected =3D {'rx0': 0, 'rx1': 0} >> self.check_results(stats, expected) >> >> self.quit_ip_pipeline() >> @@ -539,5 +560,7 @@ class TestIPPipeline(TestCase): >> """ >> Run after each test suite. >> """ >> + self.dut.send_expect("rm /tmp/ip_pipeline.cfg", "#") >> + self.dut.send_expect("rm /tmp/ip_pipeline.cfg.out", "#") >> out =3D self.dut.build_dpdk_apps("./examples/ip_pipeline") >> self.verify("Error" not in out, "Compilation error") >> -- >> 1.9.1 >> >