get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/112862/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 112862,
    "url": "https://patches.dpdk.org/api/patches/112862/?format=api",
    "web_url": "https://patches.dpdk.org/project/dts/patch/1655343854-24546-2-git-send-email-yogesh.jangra@intel.com/",
    "project": {
        "id": 3,
        "url": "https://patches.dpdk.org/api/projects/3/?format=api",
        "name": "DTS",
        "link_name": "dts",
        "list_id": "dts.dpdk.org",
        "list_email": "dts@dpdk.org",
        "web_url": "",
        "scm_url": "git://dpdk.org/tools/dts",
        "webscm_url": "http://git.dpdk.org/tools/dts/",
        "list_archive_url": "https://inbox.dpdk.org/dts",
        "list_archive_url_format": "https://inbox.dpdk.org/dts/{}",
        "commit_url_format": ""
    },
    "msgid": "<1655343854-24546-2-git-send-email-yogesh.jangra@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dts/1655343854-24546-2-git-send-email-yogesh.jangra@intel.com",
    "date": "2022-06-16T01:44:13",
    "name": "[1/2] tests/pipeline: adding testcases for multiple features",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "ccd0081d6523d8308ef53ef8920264cbf161c30c",
    "submitter": {
        "id": 2025,
        "url": "https://patches.dpdk.org/api/people/2025/?format=api",
        "name": "Yogesh Jangra",
        "email": "yogesh.jangra@intel.com"
    },
    "delegate": null,
    "mbox": "https://patches.dpdk.org/project/dts/patch/1655343854-24546-2-git-send-email-yogesh.jangra@intel.com/mbox/",
    "series": [
        {
            "id": 23561,
            "url": "https://patches.dpdk.org/api/series/23561/?format=api",
            "web_url": "https://patches.dpdk.org/project/dts/list/?series=23561",
            "date": "2022-06-16T01:44:12",
            "name": "adding testcases for multiple features",
            "version": 1,
            "mbox": "https://patches.dpdk.org/series/23561/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/112862/comments/",
    "check": "pending",
    "checks": "https://patches.dpdk.org/api/patches/112862/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dts-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 965D8A00BE;\n\tThu, 16 Jun 2022 11:07:50 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 9032842BFB;\n\tThu, 16 Jun 2022 11:07:50 +0200 (CEST)",
            "from mga11.intel.com (mga11.intel.com [192.55.52.93])\n by mails.dpdk.org (Postfix) with ESMTP id 99C424281E\n for <dts@dpdk.org>; Thu, 16 Jun 2022 11:07:48 +0200 (CEST)",
            "from fmsmga002.fm.intel.com ([10.253.24.26])\n by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 16 Jun 2022 02:07:48 -0700",
            "from ena-4.iind.intel.com ([10.190.200.151])\n by fmsmga002.fm.intel.com with ESMTP; 16 Jun 2022 02:07:45 -0700"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple;\n d=intel.com; i=@intel.com; q=dns/txt; s=Intel;\n t=1655370468; x=1686906468;\n h=from:to:cc:subject:date:message-id:in-reply-to: references;\n bh=TDJB7zr5srWMs0kbMRtN/qGfNsmU0SEXfv5kQiTDx7I=;\n b=CQDdiKUySSb4yM9Kkc/B0v8UpaPDPfeiTlOWkucv/9bbSxyNmDWQiz1S\n 7ePV0GfeM29sszCSfufJQyp7K9louC/UKZ6ftw2QGTJKqvfCGo/6WJHga\n /5FpHO5makihUIs8qhbCkvackftPqSFgFT8txjhLBSFMn+EgXt9KjxpaF\n 4b0PaFgfUuGHTAtNWbFAlDPZ26Zf79ZC++VNuxJJ6pG/PTEgaUSr+Ly9p\n gjmwpPwQpaKVmPAmL3H5/uqkovKL4wz8S/PNwevA2+Vh6VhY5rycaUm28\n okGLEbS2mo/73W4aU/gNxqrHOHh3XEe/f6agUk7R0mRyjAPs1XqHkUWOR A==;",
        "X-IronPort-AV": [
            "E=McAfee;i=\"6400,9594,10379\"; a=\"276779477\"",
            "E=Sophos;i=\"5.91,304,1647327600\"; d=\"scan'208\";a=\"276779477\"",
            "E=Sophos;i=\"5.91,304,1647327600\"; d=\"scan'208\";a=\"687735655\""
        ],
        "X-ExtLoop1": "1",
        "From": "Yogesh Jangra <yogesh.jangra@intel.com>",
        "To": "dts@dpdk.org",
        "Cc": "venkata.suresh.kumar.p@intel.com, kamalakannan.r@intel.com,\n harshad.suresh.narayane@intel.com, yogesh.jangra@intel.com",
        "Subject": "[PATCH 1/2] tests/pipeline: adding testcases for multiple features",
        "Date": "Wed, 15 Jun 2022 21:44:13 -0400",
        "Message-Id": "<1655343854-24546-2-git-send-email-yogesh.jangra@intel.com>",
        "X-Mailer": "git-send-email 1.8.3.1",
        "In-Reply-To": "<1655343854-24546-1-git-send-email-yogesh.jangra@intel.com>",
        "References": "<1655343854-24546-1-git-send-email-yogesh.jangra@intel.com>",
        "X-BeenThere": "dts@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "test suite reviews and discussions <dts.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dts>,\n <mailto:dts-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dts/>",
        "List-Post": "<mailto:dts@dpdk.org>",
        "List-Help": "<mailto:dts-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dts>,\n <mailto:dts-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dts-bounces@dpdk.org"
    },
    "content": "This patch include the changes to enhance the pipeline test suite\ncovering mirroring, recirculation, direction flag, extern hash,\nlearner table, and table default parameterized action features.\n\nSigned-off-by: Kamalakannan R <kamalakannan.r@intel.com>\nSigned-off-by: Yogesh Jangra <yogesh.jangra@intel.com>\nSigned-off-by: Harshad Suresh Narayane <harshad.suresh.narayane@intel.com>\nTested-by: Venkata Suresh Kumar P <venkata.suresh.kumar.p@intel.com>\n---\n tests/TestSuite_pipeline.py | 603 +++++++++++++++++++++++++++++++++++++++++++-\n 1 file changed, 597 insertions(+), 6 deletions(-)",
    "diff": "diff --git a/tests/TestSuite_pipeline.py b/tests/TestSuite_pipeline.py\nindex dd23cc9..309504c 100644\n--- a/tests/TestSuite_pipeline.py\n+++ b/tests/TestSuite_pipeline.py\n@@ -62,7 +62,6 @@ class TestPipeline(TestCase):\n             for line in input:\n                 time = TIMESTAMP.match(line)\n                 if time:\n-                    # print(\"time match\")\n                     if flag_line_completed == 1:\n                         flag_line_completed = 0\n                         output.write(\"\\n# Packet {}\\n\".format(i))\n@@ -72,14 +71,11 @@ class TestPipeline(TestCase):\n                     continue\n                 payload = PAYLOAD.match(line)\n                 if payload:\n-                    # print(\"payload match\")\n                     address = payload.group(1)\n                     hex_data = payload.group(2).replace(\" \", \"\")\n                     hex_data = \" \".join(\n                         \"\".join(part) for part in self.pair_hex_digits(hex_data, 2, \" \")\n                     )\n-                    # print('{}  {}'.format(address, hex_data))\n-                    # print(len(hex_data))\n                     if len(hex_data) < 47:\n                         output.write(\"{:0>6}  {:<47}\\n\".format(address, hex_data))\n                         output.write(\"\\n\")\n@@ -443,7 +439,6 @@ class TestPipeline(TestCase):\n                 sleep(1)\n                 msg = s.recv(BUFFER_SIZE)\n                 response = msg.decode()\n-                # print('Rxd: ' + response)\n                 if \"pipeline>\" not in response:\n                     s.close()\n                     self.dut.send_expect(\"^C\", \"# \", 20)\n@@ -465,7 +460,6 @@ class TestPipeline(TestCase):\n         sleep(0.1)\n         msg = socket.recv(BUFFER_SIZE)\n         response = msg.decode()\n-        # print('Rxd: ' + response)\n         if expected_rsp not in response:\n             socket.close()\n             self.dut.send_expect(\"^C\", \"# \", 20)\n@@ -643,6 +637,58 @@ class TestPipeline(TestCase):\n         self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n         self.dut.send_expect(\"^C\", \"# \", 20)\n \n+    def test_extract_emit_010(self):\n+\n+        cli_file = \"/tmp/pipeline/extract_emit_010/extract_emit_010.cli\"\n+        self.run_dpdk_app(cli_file)\n+\n+        in_pcap = [\"pipeline/extract_emit_010/pcap_files/in_1.txt\"] * 4\n+        out_pcap = [\"pipeline/extract_emit_010/pcap_files/out_1.txt\"] * 4\n+        filters = [\"less 120\"] * 4\n+        tx_port = [0, 1, 2, 3]\n+        rx_port = [0, 1, 2, 3]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+        self.dut.send_expect(\"^C\", \"# \", 20)\n+\n+    def test_extract_emit_011(self):\n+\n+        cli_file = \"/tmp/pipeline/extract_emit_011/extract_emit_011.cli\"\n+        self.run_dpdk_app(cli_file)\n+\n+        in_pcap = [\"pipeline/extract_emit_011/pcap_files/in_1.txt\"] * 4\n+        out_pcap = [\"pipeline/extract_emit_011/pcap_files/out_1.txt\"] * 4\n+        filters = [\"less 120\"] * 4\n+        tx_port = [0, 1, 2, 3]\n+        rx_port = [0, 1, 2, 3]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+        self.dut.send_expect(\"^C\", \"# \", 20)\n+\n+    def test_extract_emit_012(self):\n+\n+        cli_file = \"/tmp/pipeline/extract_emit_012/extract_emit_012.cli\"\n+        self.run_dpdk_app(cli_file)\n+\n+        in_pcap = [\"pipeline/extract_emit_012/pcap_files/in_1.txt\"] * 4\n+        out_pcap = [\"pipeline/extract_emit_012/pcap_files/out_1.txt\"] * 4\n+        filters = [\"less 120\"] * 4\n+        tx_port = [0, 1, 2, 3]\n+        rx_port = [0, 1, 2, 3]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+        self.dut.send_expect(\"^C\", \"# \", 20)\n+\n+    def test_extract_emit_013(self):\n+\n+        cli_file = \"/tmp/pipeline/extract_emit_013/extract_emit_013.cli\"\n+        self.run_dpdk_app(cli_file)\n+\n+        in_pcap = [\"pipeline/extract_emit_013/pcap_files/in_1.txt\"] * 4\n+        out_pcap = [\"pipeline/extract_emit_013/pcap_files/out_1.txt\"] * 4\n+        filters = [\"udp and less 160\"] * 4\n+        tx_port = [0, 1, 2, 3]\n+        rx_port = [0, 1, 2, 3]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+        self.dut.send_expect(\"^C\", \"# \", 20)\n+\n     def test_and_001(self):\n \n         cli_file = \"/tmp/pipeline/and_001/and_001.cli\"\n@@ -2670,6 +2716,82 @@ class TestPipeline(TestCase):\n         self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n         self.dut.send_expect(\"^C\", \"# \", 20)\n \n+    def test_table_005(self):\n+\n+        cli_file = \"/tmp/pipeline/table_005/table_005.cli\"\n+        self.run_dpdk_app(cli_file)\n+\n+        in_pcap = [\"pipeline/table_005/pcap_files/in_1.txt\"] * 4\n+        out_pcap = [\"pipeline/table_005/pcap_files/out_1.txt\"] * 4\n+        filters = [\"tcp\"] * 4\n+        tx_port = [0, 1, 2, 3]\n+        rx_port = [0, 1, 2, 3]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+        self.dut.send_expect(\"^C\", \"# \", 20)\n+\n+    def test_table_006(self):\n+\n+        cli_file = \"/tmp/pipeline/table_006/table_006.cli\"\n+        self.run_dpdk_app(cli_file)\n+\n+        in_pcap = [\"pipeline/table_006/pcap_files/in_1.txt\"]\n+        out_pcap = [\n+            \"pipeline/table_006/pcap_files/out_0.txt\",\n+            \"pipeline/table_006/pcap_files/out_1.txt\",\n+        ]\n+        filters = [\"udp port 4789 and less 120\", \"tcp\"]\n+        tx_port = [1]\n+        rx_port = [0, 1]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+        self.dut.send_expect(\"^C\", \"# \", 20)\n+\n+    def test_table_007(self):\n+\n+        cli_file = \"/tmp/pipeline/table_007/table_007.cli\"\n+        self.run_dpdk_app(cli_file)\n+\n+        in_pcap = [\"pipeline/table_007/pcap_files/in_1.txt\"] * 4\n+        out_pcap = [\"pipeline/table_007/pcap_files/out_1.txt\"] * 4\n+        filters = [\"tcp\"] * 4\n+        tx_port = [0, 1, 2, 3]\n+        rx_port = [0, 1, 2, 3]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+        self.dut.send_expect(\"^C\", \"# \", 20)\n+\n+    def test_table_008(self):\n+\n+        cli_file = \"/tmp/pipeline/table_008/table_008.cli\"\n+        self.run_dpdk_app(cli_file)\n+        sleep(1)\n+        s = self.connect_cli_server()\n+\n+        in_pcap = [\"pipeline/table_008/pcap_files/in_1.txt\"] * 4\n+        out_pcap = [\"pipeline/table_008/pcap_files/out_1.txt\"] * 4\n+        filters = [\"tcp\"] * 4\n+        tx_port = [0, 1, 2, 3]\n+        rx_port = [0, 1, 2, 3]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        CLI_CMD = (\n+            \"pipeline PIPELINE0 table table_008_table default \"\n+            \"/tmp/pipeline/table_008/cmd_files/cmd_2.txt\\n\"\n+        )\n+        self.socket_send_cmd(s, CLI_CMD, \"pipeline> \")\n+        CLI_CMD = \"pipeline PIPELINE0 commit\\n\"\n+        self.socket_send_cmd(s, CLI_CMD, \"pipeline> \")\n+\n+        in_pcap = [\"pipeline/table_008/pcap_files/in_1.txt\"] * 4\n+        out_pcap = [\"pipeline/table_008/pcap_files/out_2.txt\"] * 4\n+        filters = [\"tcp\"] * 4\n+        tx_port = [0, 1, 2, 3]\n+        rx_port = [0, 1, 2, 3]\n+\n+        sleep(2)\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        s.close()\n+        self.dut.send_expect(\"^C\", \"# \", 20)\n+\n     def test_reg_001(self):\n \n         cli_file = \"/tmp/pipeline/reg_001/reg_001.cli\"\n@@ -5171,6 +5293,446 @@ class TestPipeline(TestCase):\n         self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n         self.dut.send_expect(\"^C\", \"# \", 20)\n \n+    def test_learner_003(self):\n+\n+        cli_file = \"/tmp/pipeline/learner_003/learner_003.cli\"\n+        self.run_dpdk_app(cli_file)\n+\n+        in_pcap = [\"pipeline/learner_003/pcap_files/in_1.txt\"]\n+        out_pcap = [\"pipeline/learner_003/pcap_files/out_1.txt\"]\n+        filters = [\"tcp\"]\n+        tx_port = [0]\n+        rx_port = [0]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        in_pcap = [\"pipeline/learner_003/pcap_files/in_2.txt\"]\n+        out_pcap = [\"pipeline/learner_003/pcap_files/out_2.txt\"]\n+        filters = [\"tcp\"]\n+        tx_port = [1]\n+        rx_port = [1]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        in_pcap = [\"pipeline/learner_003/pcap_files/in_3.txt\"]\n+        out_pcap = [\"pipeline/learner_003/pcap_files/out_3.txt\"]\n+        filters = [\"tcp\"]\n+        tx_port = [2]\n+        rx_port = [2]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        in_pcap = [\"pipeline/learner_003/pcap_files/in_4.txt\"]\n+        out_pcap = [\"pipeline/learner_003/pcap_files/out_4.txt\"]\n+        filters = [\"tcp\"]\n+        tx_port = [3]\n+        rx_port = [3]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        self.dut.send_expect(\"^C\", \"# \", 20)\n+\n+    def test_learner_004(self):\n+\n+        cli_file = \"/tmp/pipeline/learner_004/learner_004.cli\"\n+        self.run_dpdk_app(cli_file)\n+\n+        in_pcap = [\"pipeline/learner_004/pcap_files/in_1.txt\"]\n+        out_pcap = [\"pipeline/learner_004/pcap_files/out_1.txt\"]\n+        out_pcap.append(\"pipeline/learner_004/pcap_files/out_2.txt\")\n+        filters = [\"udp port 4789 and less 120\", \"tcp\"]\n+        tx_port = [1]\n+        rx_port = [0, 1]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        self.dut.send_expect(\"^C\", \"# \", 20)\n+\n+    def test_learner_005(self):\n+\n+        cli_file = \"/tmp/pipeline/learner_005/learner_005.cli\"\n+        self.run_dpdk_app(cli_file)\n+        sleep(1)\n+        s = self.connect_cli_server()\n+\n+        in_pcap = [\"pipeline/learner_005/pcap_files/in_1.txt\"]\n+        out_pcap = [\"pipeline/learner_005/pcap_files/out_1.txt\"]\n+        out_pcap.append(\"pipeline/learner_005/pcap_files/out_2.txt\")\n+        filters = [\"udp port 4789 and less 120\", \"tcp\"]\n+        tx_port = [1]\n+        rx_port = [0, 1]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        CLI_CMD = (\n+            \"pipeline PIPELINE0 learner learn_005 default \"\n+            \"/tmp/pipeline/learner_005/cmd_files/cmd_1.txt\\n\"\n+        )\n+        self.socket_send_cmd(s, CLI_CMD, \"pipeline> \")\n+        CLI_CMD = \"pipeline PIPELINE0 commit\\n\"\n+        self.socket_send_cmd(s, CLI_CMD, \"pipeline> \")\n+\n+        in_pcap = [\"pipeline/learner_005/pcap_files/in_2.txt\"]\n+        out_pcap = [\"pipeline/learner_005/pcap_files/out_3.txt\"]\n+        out_pcap.append(\"pipeline/learner_005/pcap_files/out_3.txt\")\n+        filters = [\"tcp\"] * 2\n+        tx_port = [2]\n+        rx_port = [2]\n+\n+        sleep(2)\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        s.close()\n+        self.dut.send_expect(\"^C\", \"# \", 20)\n+\n+    def test_learner_006(self):\n+\n+        cli_file = \"/tmp/pipeline/learner_006/learner_006.cli\"\n+        self.run_dpdk_app(\n+            cli_file, \"pipeline PIPELINE0 port out 3 link LINK3 txq 0 bsz 1\\n\"\n+        )\n+        sleep(1)\n+        s = self.connect_cli_server()\n+\n+        CLI_CMD = (\n+            \"pipeline PIPELINE0 build /tmp/pipeline/learner_006/learner_006.spec\\n\"\n+        )\n+        self.socket_send_cmd(s, CLI_CMD, \"Error -22 at line 65: Action config error.\")\n+\n+        s.close()\n+        self.dut.send_expect(\"^C\", \"# \", 20)\n+\n+    def test_learner_007(self):\n+\n+        cli_file = \"/tmp/pipeline/learner_007/learner_007.cli\"\n+        self.run_dpdk_app(cli_file)\n+\n+        in_pcap = [\"pipeline/learner_007/pcap_files/in_1.txt\"]\n+        out_pcap = [\"pipeline/learner_007/pcap_files/out_1.txt\"]\n+        filters = [\"tcp\"] * 4\n+\n+        tx_port = [0]\n+        rx_port = [0]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        tx_port = [0]\n+        rx_port = [1]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        sleep(30)\n+\n+        tx_port = [0]\n+        rx_port = [0]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        self.dut.send_expect(\"^C\", \"# \", 20)\n+\n+    def test_learner_008(self):\n+\n+        cli_file = \"/tmp/pipeline/learner_008/learner_008.cli\"\n+        self.run_dpdk_app(cli_file)\n+\n+        in_pcap = [\"pipeline/learner_008/pcap_files/in_1.txt\"]\n+        out_pcap = [\"pipeline/learner_008/pcap_files/out_1.txt\"]\n+        filters = [\"tcp\"] * 4\n+\n+        tx_port = [0]\n+        rx_port = [0]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        tx_port = [0]\n+        rx_port = [1]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        sleep(60)\n+\n+        in_pcap = [\"pipeline/learner_008/pcap_files/in_2.txt\"]\n+        out_pcap_1 = \"pipeline/learner_008/pcap_files/out_21.txt\"\n+        out_pcap_2 = \"pipeline/learner_008/pcap_files/out_22.txt\"\n+\n+        out_pcap = [out_pcap_1, out_pcap_2]\n+        tx_port = [0]\n+        rx_port = [1, 0]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        self.dut.send_expect(\"^C\", \"# \", 20)\n+\n+    def test_learner_009(self):\n+\n+        cli_file = \"/tmp/pipeline/learner_009/learner_009.cli\"\n+        self.run_dpdk_app(cli_file)\n+\n+        in_pcap = [\"pipeline/learner_009/pcap_files/in_1.txt\"]\n+        out_pcap = [\"pipeline/learner_009/pcap_files/out_1.txt\"]\n+        filters = [\"tcp\"] * 4\n+\n+        tx_port = [0]\n+        rx_port = [0]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        sleep(30)\n+\n+        tx_port = [0]\n+        rx_port = [1]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        sleep(40)\n+\n+        tx_port = [0]\n+        rx_port = [0]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        self.dut.send_expect(\"^C\", \"# \", 20)\n+\n+    def test_learner_010(self):\n+\n+        cli_file = \"/tmp/pipeline/learner_010/learner_010.cli\"\n+        self.run_dpdk_app(cli_file)\n+\n+        in_pcap = [\"pipeline/learner_010/pcap_files/in_1.txt\"]\n+        out_pcap = [\"pipeline/learner_010/pcap_files/out_1.txt\"]\n+        filters = [\"tcp\"] * 4\n+\n+        tx_port = [0]\n+        rx_port = [0]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        tx_port = [0]\n+        rx_port = [1]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        sleep(30)\n+\n+        tx_port = [0]\n+        rx_port = [0]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        tx_port = [0]\n+        rx_port = [1]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        self.dut.send_expect(\"^C\", \"# \", 20)\n+\n+    def test_learner_011(self):\n+\n+        cli_file = \"/tmp/pipeline/learner_011/learner_011.cli\"\n+        self.run_dpdk_app(cli_file)\n+\n+        in_pcap = [\"pipeline/learner_011/pcap_files/in_1.txt\"]\n+        out_pcap = [\"pipeline/learner_011/pcap_files/out_1.txt\"]\n+        filters = [\"tcp\"] * 4\n+\n+        tx_port = [0]\n+        rx_port = [0]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        tx_port = [0]\n+        rx_port = [1]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        sleep(60)\n+\n+        in_pcap = [\"pipeline/learner_011/pcap_files/in_2.txt\"]\n+        out_pcap_1 = \"pipeline/learner_011/pcap_files/out_21.txt\"\n+        out_pcap_2 = \"pipeline/learner_011/pcap_files/out_22.txt\"\n+        out_pcap = [out_pcap_1, out_pcap_2]\n+\n+        tx_port = [0]\n+        rx_port = [1, 0]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        self.dut.send_expect(\"^C\", \"# \", 20)\n+\n+    def test_mirror_001(self):\n+\n+        cli_file = \"/tmp/pipeline/mirror_001/mirror_001.cli\"\n+        self.run_dpdk_app(cli_file)\n+\n+        in_pcap = [\"pipeline/mirror_001/pcap_files/in_1.txt\"]\n+        out_pcap_1 = \"pipeline/mirror_001/pcap_files/out_11.txt\"\n+        out_pcap_2 = \"pipeline/mirror_001/pcap_files/out_12.txt\"\n+\n+        out_pcap = [out_pcap_1, out_pcap_2]\n+\n+        filters = [\"udp port 5000\"] * 4\n+        tx_port = [0]\n+        rx_port = [0, 1]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        tx_port = [1]\n+        rx_port = [1, 2]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        tx_port = [2]\n+        rx_port = [2, 3]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        tx_port = [3]\n+        rx_port = [3, 0]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        self.dut.send_expect(\"^C\", \"# \", 20)\n+\n+    def test_mirror_002(self):\n+\n+        cli_file = \"/tmp/pipeline/mirror_002/mirror_002.cli\"\n+        self.run_dpdk_app(cli_file)\n+\n+        in_pcap = [\"pipeline/mirror_002/pcap_files/in_1.txt\"]\n+        out_pcap_1 = \"pipeline/mirror_002/pcap_files/out_11.txt\"\n+        out_pcap_2 = \"pipeline/mirror_002/pcap_files/out_12.txt\"\n+\n+        out_pcap = [out_pcap_1, out_pcap_2]\n+\n+        filters = [\"udp port 5000\"] * 4\n+        tx_port = [0]\n+        rx_port = [0, 1]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        tx_port = [1]\n+        rx_port = [1, 2]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        tx_port = [2]\n+        rx_port = [2, 3]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        tx_port = [3]\n+        rx_port = [3, 0]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        self.dut.send_expect(\"^C\", \"# \", 20)\n+\n+    def test_mirror_003(self):\n+\n+        cli_file = \"/tmp/pipeline/mirror_003/mirror_003.cli\"\n+        self.run_dpdk_app(cli_file)\n+\n+        in_pcap = [\"pipeline/mirror_003/pcap_files/in_1.txt\"]\n+        out_pcap_1 = \"pipeline/mirror_003/pcap_files/out_11.txt\"\n+        out_pcap_2 = \"pipeline/mirror_003/pcap_files/out_12.txt\"\n+        out_pcap_3 = \"pipeline/mirror_003/pcap_files/out_13.txt\"\n+        out_pcap_4 = \"pipeline/mirror_003/pcap_files/out_14.txt\"\n+\n+        out_pcap = [out_pcap_1, out_pcap_3]\n+\n+        filters = [\"udp port 5000\"] * 4\n+        tx_port = [0]\n+        rx_port = [0, 1]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        out_pcap = [out_pcap_1, out_pcap_4]\n+        tx_port = [1]\n+        rx_port = [1, 2]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        out_pcap = [out_pcap_1, out_pcap_2]\n+        tx_port = [2]\n+        rx_port = [2, 3]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        out_pcap = [out_pcap_1, out_pcap_2]\n+        tx_port = [3]\n+        rx_port = [3, 0]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        self.dut.send_expect(\"^C\", \"# \", 20)\n+\n+    def test_mirror_004(self):\n+\n+        cli_file = \"/tmp/pipeline/mirror_004/mirror_004.cli\"\n+        self.run_dpdk_app(cli_file)\n+\n+        in_pcap = [\"pipeline/mirror_004/pcap_files/in_1.txt\"]\n+        out_pcap_1 = \"pipeline/mirror_004/pcap_files/out_11.txt\"\n+        out_pcap_2 = \"pipeline/mirror_004/pcap_files/out_12.txt\"\n+\n+        out_pcap = [out_pcap_1, out_pcap_2]\n+\n+        filters = [\"udp port 5000\"] * 4\n+        tx_port = [0]\n+        rx_port = [0, 1]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        tx_port = [1]\n+        rx_port = [1, 2]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        tx_port = [2]\n+        rx_port = [2, 3]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        tx_port = [3]\n+        rx_port = [3, 0]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        self.dut.send_expect(\"^C\", \"# \", 20)\n+\n+    def test_mirror_005(self):\n+\n+        cli_file = \"/tmp/pipeline/mirror_005/mirror_005.cli\"\n+        self.run_dpdk_app(cli_file)\n+\n+        in_pcap = [\"pipeline/mirror_005/pcap_files/in_1.txt\"]\n+        out_pcap_1 = \"pipeline/mirror_005/pcap_files/out_11.txt\"\n+        out_pcap_2 = \"pipeline/mirror_005/pcap_files/out_12.txt\"\n+        out_pcap_3 = \"pipeline/mirror_005/pcap_files/out_13.txt\"\n+\n+        out_pcap = [out_pcap_1, out_pcap_2, out_pcap_3]\n+\n+        filters = [\"udp port 5000\"] * 4\n+        tx_port = [0]\n+        rx_port = [0, 1, 2]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        self.dut.send_expect(\"^C\", \"# \", 20)\n+\n+    def test_mirror_006(self):\n+\n+        cli_file = \"/tmp/pipeline/mirror_006/mirror_006.cli\"\n+        self.run_dpdk_app(cli_file)\n+\n+        in_pcap = [\"pipeline/mirror_006/pcap_files/in_1.txt\"]\n+        out_pcap_1 = \"pipeline/mirror_006/pcap_files/out_11.txt\"\n+        out_pcap_2 = \"pipeline/mirror_006/pcap_files/out_12.txt\"\n+        out_pcap_3 = \"pipeline/mirror_006/pcap_files/out_13.txt\"\n+\n+        out_pcap = [out_pcap_1, out_pcap_2, out_pcap_3]\n+\n+        filters = [\"udp port 5000\"] * 4\n+        tx_port = [0]\n+        rx_port = [0, 1, 2]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        self.dut.send_expect(\"^C\", \"# \", 20)\n+\n+    def test_mirror_007(self):\n+\n+        cli_file = \"/tmp/pipeline/mirror_007/mirror_007.cli\"\n+        self.run_dpdk_app(cli_file)\n+\n+        in_pcap = [\"pipeline/mirror_007/pcap_files/in_1.txt\"]\n+        out_pcap_1 = \"pipeline/mirror_007/pcap_files/out_11.txt\"\n+        out_pcap_2 = \"pipeline/mirror_007/pcap_files/out_12.txt\"\n+\n+        out_pcap = [out_pcap_1, out_pcap_2]\n+\n+        filters = [\"udp port 500\"] * 4\n+        tx_port = [0]\n+        rx_port = [0, 1]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        self.dut.send_expect(\"^C\", \"# \", 20)\n+\n+    def test_recirculate_001(self):\n+\n+        cli_file = \"/tmp/pipeline/recirculate_001/recirculate_001.cli\"\n+        self.run_dpdk_app(cli_file)\n+\n+        in_pcap = [\"pipeline/recirculate_001/pcap_files/in_1.txt\"]\n+        out_pcap = [\"pipeline/recirculate_001/pcap_files/out_1.txt\"]\n+\n+        filters = [\"udp port 54505\"] * 4\n+        tx_port = [0]\n+        rx_port = [0]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap, filters)\n+\n+        self.dut.send_expect(\"^C\", \"# \", 20)\n+\n     def test_annotation_001(self):\n \n         cli_file = \"/tmp/pipeline/annotation_001/annotation_001.cli\"\n@@ -5258,6 +5820,35 @@ class TestPipeline(TestCase):\n \n         self.dut.send_expect(\"^C\", \"# \", 20)\n \n+    def test_direction_001(self):\n+\n+        cli_file = \"/tmp/pipeline/direction_001/direction_001.cli\"\n+        self.run_dpdk_app(cli_file)\n+\n+        in_pcap = [\"pipeline/direction_001/pcap_files/in_1.txt\"]\n+        out_pcap_1 = [\"pipeline/direction_001/pcap_files/out_1.txt\"]\n+        out_pcap_2 = [\"pipeline/direction_001/pcap_files/out_2.txt\"]\n+\n+        filters = [\"udp port 5000\"]\n+\n+        tx_port = [0]\n+        rx_port = [0]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap_1, filters)\n+\n+        tx_port = [1]\n+        rx_port = [1]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap_1, filters)\n+\n+        tx_port = [2]\n+        rx_port = [2]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap_2, filters)\n+\n+        tx_port = [3]\n+        rx_port = [3]\n+        self.send_and_sniff_multiple(tx_port, rx_port, in_pcap, out_pcap_2, filters)\n+\n+        self.dut.send_expect(\"^C\", \"# \", 20)\n+\n     def tear_down(self):\n         \"\"\"\n         Run after each test case.\n",
    "prefixes": [
        "1/2"
    ]
}