From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-yw0-f181.google.com (mail-yw0-f181.google.com [209.85.161.181]) by dpdk.org (Postfix) with ESMTP id F3A713989 for ; Mon, 4 Sep 2017 11:33:23 +0200 (CEST) Received: by mail-yw0-f181.google.com with SMTP id h127so22579882ywf.3 for ; Mon, 04 Sep 2017 02:33:23 -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; bh=sORLiJzfk4HaSnOJzGkNqN8fgyjUfze3hkqYFMyMZzQ=; b=kZtjLVWssmlLTGe28H2jtcNtE7tRPzD+CvUWTKsF/1Jwp+PyrJmh9UEIAlG7NZPcnU hKFJPJ7E29e4ehamgseZPQ9Zs2ucpvVcIw0NjPJnVnyhm3PV7tY2co9k9j9yirp8nYEy 8esQ0zeL4DcUM0nKKkJGNTfcuIFvYXJSyp8Ng= 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; bh=sORLiJzfk4HaSnOJzGkNqN8fgyjUfze3hkqYFMyMZzQ=; b=Gk9KeuKPNowpvOHr6X0f6x8J46bCgekxUCwQ2Dg0c4g7EAmaN/ITGUhzrs2MVfR/pi 4bixc207OCs/iQGbidm4f+iWR8IqiTSj8mM923g2Fj4kdIJ5V4gOBU1yMkVwMDIkY8EP X5ly3/IgwfveE3x/MnmBmx343V0m7udxUdR9rEK9qo6cz/NxISf1L2RUdskizsm7aFAo yp5yWB3YpErU2KHc83IQN0Lsd3/uaiMJrfz566buAmJOW+DKTh/mZRMot7qkHJhfvtKD i7yVqLqStqQhKdjkjzhXJo2rlLNQsYEeMlSAidN01NddQ0+OucVnUodllkoLB8w4sefS 0qoA== X-Gm-Message-State: AHPjjUgZAn2b8lk9kiH9JU79KpeOFGzk3STpWqrnkAX3vvQ08gmXK7vF Kbnj/1H1re8pl6qqrmWNowMGv8Xl7ECOo/E= X-Google-Smtp-Source: ADKCNb4yALgSb1u/u25I5zWRDefyL2EzJ8kHpTbznVj9ZW+CA98GZVIDpYAzOMprx0KVjV2i6bFC4jzV1zsajOlIZTg= X-Received: by 10.37.200.131 with SMTP id y125mr8132281ybf.229.1504517603178; Mon, 04 Sep 2017 02:33:23 -0700 (PDT) MIME-Version: 1.0 Received: by 10.37.183.73 with HTTP; Mon, 4 Sep 2017 02:33:22 -0700 (PDT) In-Reply-To: <86228AFD5BCD8E4EBFD2B90117B5E81E62E99C55@SHSMSX103.ccr.corp.intel.com> References: <1503311443-26858-1-git-send-email-jianbo.liu@linaro.org> <86228AFD5BCD8E4EBFD2B90117B5E81E62E99C55@SHSMSX103.ccr.corp.intel.com> From: Jianbo Liu Date: Mon, 4 Sep 2017 17:33:22 +0800 Message-ID: To: "Liu, Yong" Cc: "dts@dpdk.org" , Herbert Guan , "Xu, Qian Q" Content-Type: text/plain; charset="UTF-8" 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: Mon, 04 Sep 2017 09:33:24 -0000 Oh, the default flow (SINK0) is 2. I will fix that in a new version. Thanks! On 4 September 2017 at 16:50, Liu, Yong wrote: > Hi Jianbo, > I met one issue when trying to validate your patch. Sorry for late response, we're working on remaining issues in test suites these weeks. > > 04/09/2017 23:38:39 SUITE_DUT_CMD: [10.67.119.120] p 1 flow add default 3 > 04/09/2017 23:38:39 SUITE_DUT_OUTPUT: [10.67.119.120] p 1 flow add default 3^M^M > Command "flow add default" failed > > > Thanks, > Marvin > >> -----Original Message----- >> From: Jianbo Liu [mailto:jianbo.liu@linaro.org] >> Sent: Monday, September 04, 2017 2:32 PM >> To: dts@dpdk.org; Herbert Guan >> Cc: Xu, Qian Q ; Liu, Yong >> Subject: Re: [PATCH] tests/ip_pipeline: fix test failures >> >> Hi Yong and Qian, >> >> Have you reviewed this patch, any comments? >> >> Thanks! >> Jianbo >> >> >> On 21 August 2017 at 18:30, Jianbo Liu wrote: >> > 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 = MASTER >> >> /tmp/ip_pipeline.cfg', '#') >> > + self.dut.send_expect('echo core = 0 >> /tmp/ip_pipeline.cfg', >> '#') >> > + self.dut.send_expect('echo [PIPELINE1] >> /tmp/ip_pipeline.cfg', >> '#') >> > + self.dut.send_expect('echo type = PASS-THROUGH >> >> /tmp/ip_pipeline.cfg', '#') >> > + self.dut.send_expect('echo core = 1 >> /tmp/ip_pipeline.cfg', >> '#') >> > + self.dut.send_expect('echo pktq_in = RXQ0.0 RXQ1.0 >> >> /tmp/ip_pipeline.cfg', '#') >> > + self.dut.send_expect('echo pktq_out = 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 = MASTER >> >> /tmp/ip_pipeline.cfg', '#') >> > + self.dut.send_expect('echo core = 0 >> /tmp/ip_pipeline.cfg', >> '#') >> > + self.dut.send_expect('echo [PIPELINE1] >> /tmp/ip_pipeline.cfg', >> '#') >> > + self.dut.send_expect('echo type = ROUTING >> >> /tmp/ip_pipeline.cfg', '#') >> > + self.dut.send_expect('echo core = 1 >> /tmp/ip_pipeline.cfg', >> '#') >> > + self.dut.send_expect('echo pktq_in = RXQ0.0 RXQ1.0 >> >> /tmp/ip_pipeline.cfg', '#') >> > + self.dut.send_expect('echo pktq_out = TXQ0.0 TXQ1.0 >> >> /tmp/ip_pipeline.cfg', '#') >> > + self.dut.send_expect('echo encap = ethernet >> >> /tmp/ip_pipeline.cfg', '#') >> > + self.dut.send_expect('echo ip_hdr_offset = 270 >> >> /tmp/ip_pipeline.cfg', '#') >> > + self.dut.send_expect('echo arp_key_offset = 128 >> >> /tmp/ip_pipeline.cfg', '#') >> > + self.dut.send_expect('echo n_arp_entries = 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 = MASTER >> >> /tmp/ip_pipeline.cfg', '#') >> > + self.dut.send_expect('echo core = 0 >> /tmp/ip_pipeline.cfg', >> '#') >> > + self.dut.send_expect('echo [PIPELINE1] >> /tmp/ip_pipeline.cfg', >> '#') >> > + self.dut.send_expect('echo type = FLOW_CLASSIFICATION >> >> /tmp/ip_pipeline.cfg', '#') >> > + self.dut.send_expect('echo core = 1 >> /tmp/ip_pipeline.cfg', >> '#') >> > + self.dut.send_expect('echo pktq_in = RXQ0.0 RXQ1.0 >> >> /tmp/ip_pipeline.cfg', '#') >> > + self.dut.send_expect('echo pktq_out = TXQ0.0 TXQ1.0 SINK0 >> >> /tmp/ip_pipeline.cfg', '#') >> > + self.dut.send_expect('echo n_flows = 65536 >> >> /tmp/ip_pipeline.cfg', '#') >> > + self.dut.send_expect('echo key_size = 16 >> >> /tmp/ip_pipeline.cfg', '#') >> > + self.dut.send_expect('echo key_offset = 278 >> >> /tmp/ip_pipeline.cfg', '#') >> > + self.dut.send_expect('echo key_mask = >> 00FF0000FFFFFFFFFFFFFFFFFFFFFFFF >> /tmp/ip_pipeline.cfg', '#') >> > + self.dut.send_expect('echo flowid_offset = 128 >> >> /tmp/ip_pipeline.cfg', '#') >> > + >> > def start_ip_pipeline(self, ports): >> > - command_line = "./examples/ip_pipeline/build/ip_pipeline -c %s >> -n %d -- -p %s" % \ >> > - (self.coremask, >> > - self.dut.get_memory_channels(), >> > - ports) >> > + command_line = "./examples/ip_pipeline/build/ip_pipeline -p %s >> -f /tmp/ip_pipeline.cfg" % ports >> > >> > out = 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 = ('rm -f tcpdump_{0}.pcap').format(iface) >> > + self.tester.send_expect(command, '#') >> > command = ( >> > '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 = self.tester.get_local_port(self.dut_ports[from_port]) >> > rx_port = self.tester.get_local_port(self.dut_ports[to_port]) >> > + port0 = self.tester.get_local_port(self.dut_ports[0]) >> > >> > tx_interface = self.tester.get_interface(tx_port) >> > rx_interface = 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 = frames_number * inter + 2 >> > inter = ", inter=%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 = self.number_of_packets('tcpdump_%s.pcap' % >> rx_interface) >> > tx_stats = self.number_of_packets('tcpdump_%s.pcap' % >> tx_interface) >> > >> > # Do not count the sent frames in the tx_interface >> > tx_stats = tx_stats - frames_number >> > >> > - return {'rx': rx_stats, 'tx': tx_stats} >> > + if port0 == 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 = [Rx, Tx] >> > + This function check that the received packet numbers of port0 >> and port1 match the expected. >> > + expected = [Rx0, Rx1] >> > """ >> > >> > - for port in ['rx', 'tx']: >> > + for port in ['rx0', 'rx1']: >> > self.verify(stats[port] == expected[port], >> > 'Frames expected (%s) and received (%s) >> mismatch on %s port' % ( >> > expected[port], stats[port], port)) >> > >> > def pipeline_command(self, command): >> > out = 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_port, >> > + def pipeline_add_flow(self, port, src_ip, dst_ip, src_port, >> dst_port, flowid, >> > protocol=6): >> > - command = 'flow add %s %s %d %d %d %d' % (src_ip, dst_ip, >> src_port, >> > - dst_port, protocol, >> port) >> > + command = '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 = 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=6): >> > - command = 'flow del %s %s %d %d %d' % (src_ip, dst_ip, src_port, >> > + command = 'p 1 flow del ipv4 %s %s %d %d %d' % (src_ip, dst_ip, >> src_port, >> > dst_port, protocol) >> > out = 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 = 'route add %s %d %d %s' % (src_ip, netmask, port, >> gw_ip) >> > + command = 'p 1 route add %s %d port %d ether %s' % (src_ip, >> netmask, port, gw_ip) >> > out = 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 = 'route del %s %d' % (src_ip, netmask) >> > + command = 'p 1 route del %s %d' % (src_ip, netmask) >> > out = 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 = {"niantic": 2, >> > - "I217V": 1, >> > - "I217LM": 1, >> > - "I218V": 1, >> > - "I218LM": 1} >> > self.dut_ports = self.dut.get_ports() >> > - self.verify(len(self.dut_ports) >= self.needed_ports[self.nic], >> > + self.verify(len(self.dut_ports) >= 2, >> > "Insufficient ports for speed testing") >> > >> > out = self.dut.build_dpdk_apps("./examples/ip_pipeline") >> > @@ -324,9 +346,10 @@ class TestIPPipeline(TestCase): >> > pcap_file = 'ip_pipeline.pcap' >> > frame_size = 64 >> > >> > + self.create_passthrough_cfgfile() >> > self.start_ip_pipeline(ports=self.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 = self.send_and_sniff_pcap_file(pcap_file, >> frames_number, >> > 1, 0, inter) >> > >> > - expected = {'tx': 0, 'rx': frames_number} >> > + expected = {'rx0': frames_number, 'rx1': 0} >> > self.check_results(stats, expected) >> > >> > stats = self.send_and_sniff_pcap_file(pcap_file, >> frames_number, >> > 0, 1, inter) >> > >> > - expected = {'tx': frames_number, 'rx': 0} >> > + expected = {'rx0': 0, 'rx1': frames_number} >> > self.check_results(stats, expected) >> > >> > def test_frame_sizes(self): >> > @@ -359,9 +382,10 @@ class TestIPPipeline(TestCase): >> > frames_number = 100 >> > inter = 0.5 >> > >> > + self.create_passthrough_cfgfile() >> > self.start_ip_pipeline(ports=self.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 = self.send_and_sniff_pcap_file(pcap_file, >> frames_number, >> > 1, 0, inter) >> > >> > - expected = {'tx': 0, 'rx': frames_number} >> > + expected = {'rx0': frames_number, 'rx1': 0} >> > self.check_results(stats, expected) >> > >> > stats = self.send_and_sniff_pcap_file(pcap_file, >> frames_number, >> > 0, 1, inter) >> > >> > - expected = {'tx': frames_number, 'rx': 0} >> > + expected = {'rx0': 0, 'rx1': frames_number} >> > self.check_results(stats, expected) >> > >> > def test_flow_management(self): >> > @@ -392,11 +416,6 @@ class TestIPPipeline(TestCase): >> > pcap_file = 'ip_pipeline.pcap' >> > frame_size = 64 >> > >> > - default_setup = ['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 = [ >> > '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=self.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 = self.send_and_sniff_pcap_file(pcap_file, len(frames), >> > 1, 0, 0.2) >> > - expected = {'tx': 0, 'rx': 0} >> > + expected = {'rx0': 0, 'rx1': 0} >> > self.check_results(stats, expected) >> > >> > # Add the flows >> > flows_added = 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 += 1 >> > >> > # Check that traffic matching flows pass though >> > stats = self.send_and_sniff_pcap_file(pcap_file, >> len(frames), >> > 1, 0, 0.2) >> > - expected = {'tx': 0, 'rx': flows_added} >> > + expected = {'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 = self.send_and_sniff_pcap_file(pcap_file, >> len(frames), >> > 1, 0, 0.2) >> > - expected = {'tx': 0, 'rx': flows_added} >> > + expected = {'rx0': flows_added, 'rx1': 0} >> > self.check_results(stats, expected) >> > >> > out = self.dut.send_expect('flow print', 'pipeline>') >> > @@ -452,7 +473,7 @@ class TestIPPipeline(TestCase): >> > # Check that again no traffic pass though >> > stats = self.send_and_sniff_pcap_file(pcap_file, len(frames), >> > 1, 0, 0.2) >> > - expected = {'tx': 0, 'rx': 0} >> > + expected = {'rx0': 0, 'rx1': 0} >> > self.check_results(stats, expected) >> > >> > self.quit_ip_pipeline() >> > @@ -464,9 +485,8 @@ class TestIPPipeline(TestCase): >> > pcap_file = 'ip_pipeline.pcap' >> > frame_size = 64 >> > >> > - default_setup = ['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 = ['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 = [ >> > '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=self.ports_mask) >> > for command in default_setup: >> > @@ -491,7 +512,7 @@ class TestIPPipeline(TestCase): >> > # Check that no traffic pass though >> > stats = self.send_and_sniff_pcap_file(pcap_file, len(frames), >> > 1, 0, 0.2) >> > - expected = {'tx': 0, 'rx': 0} >> > + expected = {'rx0': 0, 'rx1': 0} >> > self.check_results(stats, expected) >> > >> > # Add the routes >> > @@ -504,7 +525,7 @@ class TestIPPipeline(TestCase): >> > stats = self.send_and_sniff_pcap_file(pcap_file, >> len(frames), >> > 1, 0, 0.2) >> > >> > - expected = {'tx': 0, 'rx': routes_added} >> > + expected = {'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 = self.send_and_sniff_pcap_file(pcap_file, >> len(frames), >> > 1, 0, 0.2) >> > - expected = {'tx': 0, 'rx': routes_added} >> > + expected = {'rx0': routes_added, 'rx1': 0} >> > self.check_results(stats, expected) >> > >> > out = self.dut.send_expect('route print', 'pipeline>') >> > @@ -524,7 +545,7 @@ class TestIPPipeline(TestCase): >> > # Check that again no traffic pass though >> > stats = self.send_and_sniff_pcap_file(pcap_file, len(frames), >> > 1, 0, 0.2) >> > - expected = {'tx': 0, 'rx': 0} >> > + expected = {'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 = self.dut.build_dpdk_apps("./examples/ip_pipeline") >> > self.verify("Error" not in out, "Compilation error") >> > -- >> > 1.9.1 >> >