test suite reviews and discussions
 help / color / mirror / Atom feed
From: "Radosław Biernacki" <rad@semihalf.com>
To: Jianbo Liu <jianbo.liu@linaro.org>
Cc: dts@dpdk.org, Herbert Guan <herbert.guan@arm.com>,
	yong.liu@intel.com,  rkerur@gmail.com
Subject: Re: [dts] [PATCH] tests/ip_pipeline: fix test failures
Date: Tue, 5 Sep 2017 13:27:52 +0200	[thread overview]
Message-ID: <CAOs-w0LypYxgOB4k7NkotRu8uqko1OKz__HdPrpgpYN3vQZu3w@mail.gmail.com> (raw)
In-Reply-To: <CAP4Qi3-XKBTG1uoPt03+og=Na-P22e+V3-==-_cpQkJbJYsDwQ@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 21668 bytes --]

I understand that. But do we also understand why this table was coded in
first place?
What was the reason of deal with those nics differently even if always
access both ports?

Yong Liu is an author of this test and Ravi Kerur added the change for nics
which require only 1 port.
Lets ask them for opinion.


2017-09-05 3:58 GMT+02:00 Jianbo Liu <jianbo.liu@linaro.org>:

> On 4 September 2017 at 17:39, Radosław Biernacki <rad@semihalf.com> wrote:
> > 2017-08-21 12:30 GMT+02:00 Jianbo Liu <jianbo.liu@linaro.org>:
> >>
> >> 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 <jianbo.liu@linaro.org>
> >> ---
> >>  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")
> >
> >
> > 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 = 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
> >>
> >
>

[-- Attachment #2: Type: text/html, Size: 30464 bytes --]

  reply	other threads:[~2017-09-05 11:28 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-21 10:30 Jianbo Liu
2017-09-04  6:31 ` Jianbo Liu
2017-09-04  8:50   ` Liu, Yong
2017-09-04  9:33     ` Jianbo Liu
2017-09-04  9:39 ` Radosław Biernacki
2017-09-05  1:58   ` Jianbo Liu
2017-09-05 11:27     ` Radosław Biernacki [this message]
2017-09-05  1:54 ` [dts] [PATCH v2] " Jianbo Liu
2017-09-11  3:13   ` Jianbo Liu
2017-09-11  7:14     ` Liu, Yong
2017-09-12  3:31 ` [dts] [PATCH v3] " Jianbo Liu
2017-09-12 23:34   ` Liu, Yong

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAOs-w0LypYxgOB4k7NkotRu8uqko1OKz__HdPrpgpYN3vQZu3w@mail.gmail.com \
    --to=rad@semihalf.com \
    --cc=dts@dpdk.org \
    --cc=herbert.guan@arm.com \
    --cc=jianbo.liu@linaro.org \
    --cc=rkerur@gmail.com \
    --cc=yong.liu@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).