get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 66848,
    "url": "http://patches.dpdk.org/api/patches/66848/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20200318163349.1789-2-adamx.dybkowski@intel.com/",
    "project": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20200318163349.1789-2-adamx.dybkowski@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200318163349.1789-2-adamx.dybkowski@intel.com",
    "date": "2020-03-18T16:33:49",
    "name": "[2/2] test/compress: im buffer too small - add unit tests",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "586c5f8059e1b1b678ebd918dba4a170687ea0ae",
    "submitter": {
        "id": 1322,
        "url": "http://patches.dpdk.org/api/people/1322/?format=api",
        "name": "Dybkowski, AdamX",
        "email": "adamx.dybkowski@intel.com"
    },
    "delegate": {
        "id": 6690,
        "url": "http://patches.dpdk.org/api/users/6690/?format=api",
        "username": "akhil",
        "first_name": "akhil",
        "last_name": "goyal",
        "email": "gakhil@marvell.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20200318163349.1789-2-adamx.dybkowski@intel.com/mbox/",
    "series": [
        {
            "id": 8968,
            "url": "http://patches.dpdk.org/api/series/8968/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=8968",
            "date": "2020-03-18T16:33:48",
            "name": "[1/2] drivers/qat: im buffer too small - split op",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/8968/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/66848/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/66848/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 392E2A057B;\n\tWed, 18 Mar 2020 17:44:15 +0100 (CET)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 6B50F1BF7E;\n\tWed, 18 Mar 2020 17:44:03 +0100 (CET)",
            "from mga04.intel.com (mga04.intel.com [192.55.52.120])\n by dpdk.org (Postfix) with ESMTP id E5D92FEB\n for <dev@dpdk.org>; Wed, 18 Mar 2020 17:43:58 +0100 (CET)",
            "from orsmga002.jf.intel.com ([10.7.209.21])\n by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 18 Mar 2020 09:43:57 -0700",
            "from adamdybx-mobl.ger.corp.intel.com (HELO\n addy-VirtualBox.ger.corp.intel.com) ([10.104.125.86])\n by orsmga002.jf.intel.com with ESMTP; 18 Mar 2020 09:43:55 -0700"
        ],
        "IronPort-SDR": [
            "\n nugJKwOaVCatz8HxScnrbbFvdYzc6KMUk3V6R59gmM0k5Plv9jqzKQBomfmzFlyDDqL3ZIWNSY\n zbrE3dMKQx/Q==",
            "\n eFSmd0+QNzDnuCwyMcnTjPDDTB2woHwu127pUndlJYp0i+J1Dr5SpSP9mpkBII/GK9Vvfpjp8i\n Ikx7Zzkfj30Q=="
        ],
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "X-Amp-File-Uploaded": "False",
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.70,568,1574150400\"; d=\"scan'208\";a=\"263446069\"",
        "From": "Adam Dybkowski <adamx.dybkowski@intel.com>",
        "To": "dev@dpdk.org,\n\tfiona.trahe@intel.com,\n\takhil.goyal@nxp.com",
        "Cc": "Adam Dybkowski <adamx.dybkowski@intel.com>",
        "Date": "Wed, 18 Mar 2020 17:33:49 +0100",
        "Message-Id": "<20200318163349.1789-2-adamx.dybkowski@intel.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "In-Reply-To": "<20200318163349.1789-1-adamx.dybkowski@intel.com>",
        "References": "<20200318163349.1789-1-adamx.dybkowski@intel.com>",
        "Subject": "[dpdk-dev] [PATCH 2/2] test/compress: im buffer too small - add\n\tunit tests",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "This patch adds new test suites for verification of the \"internal\nQAT IM buffer too small\" case handling. These unit tests are\nspecific to the QAT PMD only - that's why they are contained in\nnew test suites (separate for positive and negative tests for\nbetter maintability).\n\nSigned-off-by: Adam Dybkowski <adamx.dybkowski@intel.com>\n---\n app/test/test_compressdev.c | 1234 +++++++++++++++++++++++++++++++++--\n 1 file changed, 1166 insertions(+), 68 deletions(-)",
    "diff": "diff --git a/app/test/test_compressdev.c b/app/test/test_compressdev.c\nindex 7549135c2..15dea5e08 100644\n--- a/app/test/test_compressdev.c\n+++ b/app/test/test_compressdev.c\n@@ -1,10 +1,11 @@\n /* SPDX-License-Identifier: BSD-3-Clause\n  * Copyright(c) 2018 - 2019 Intel Corporation\n  */\n-#include <string.h>\n-#include <zlib.h>\n #include <math.h>\n+#include <stdio.h>\n #include <stdlib.h>\n+#include <string.h>\n+#include <zlib.h>\n #include <unistd.h>\n \n #include <rte_cycles.h>\n@@ -30,6 +31,7 @@\n  * due to the compress block headers\n  */\n #define COMPRESS_BUF_SIZE_RATIO 1.3\n+#define COMPRESS_BUF_SIZE_RATIO_DISABLED 1.0\n #define COMPRESS_BUF_SIZE_RATIO_OVERFLOW 0.2\n #define NUM_LARGE_MBUFS 16\n #define SMALL_SEG_SIZE 256\n@@ -52,6 +54,25 @@\n #define NUM_BIG_MBUFS 4\n #define BIG_DATA_TEST_SIZE (MAX_DATA_MBUF_SIZE * NUM_BIG_MBUFS / 2)\n \n+/* constants for \"im buffer\" tests start here */\n+#define IM_NUM_BIG_MBUFS (512 + 1)\n+#define IM_BIG_DATA_TEST_SIZE (MAX_DATA_MBUF_SIZE * 2)\n+/* number of mbufs lower than number of inflight ops */\n+#define IM_BUF_NUM_MBUFS 3\n+/* slightly above THD (59578) and below the mbuf size */\n+#define IM_BUF_DATA_TEST_SIZE_LB 59600\n+/* data size smaller than the queue capacity */\n+#define IM_BUF_DATA_TEST_SIZE_SGL (MAX_DATA_MBUF_SIZE * IM_BUF_NUM_MBUFS)\n+/* number of mbufs bigger than number of inflight ops */\n+#define IM_BUF_NUM_MBUFS_OVER (NUM_MAX_INFLIGHT_OPS + 1)\n+/* data size bigger than the queue capacity */\n+#define IM_BUF_DATA_TEST_SIZE_OVER (MAX_DATA_MBUF_SIZE * IM_BUF_NUM_MBUFS_OVER)\n+/* number of mid-size mbufs */\n+#define IM_BUF_NUM_MBUFS_MID ((NUM_MAX_INFLIGHT_OPS / 3) + 1)\n+/* capacity of mid-size mbufs */\n+#define IM_BUF_DATA_TEST_SIZE_MID (MAX_DATA_MBUF_SIZE * IM_BUF_NUM_MBUFS_MID)\n+\n+\n const char *\n huffman_type_strings[] = {\n \t[RTE_COMP_HUFFMAN_DEFAULT]\t= \"PMD default\",\n@@ -78,6 +99,11 @@ enum overflow_test {\n \tOVERFLOW_ENABLED\n };\n \n+enum ratio_switch {\n+\tRATIO_DISABLED,\n+\tRATIO_ENABLED\n+};\n+\n enum operation_type {\n \tOPERATION_COMPRESSION,\n \tOPERATION_DECOMPRESSION\n@@ -88,6 +114,7 @@ struct priv_op_data {\n };\n \n struct comp_testsuite_params {\n+\tconst char *suite_name;\n \tstruct rte_mempool *large_mbuf_pool;\n \tstruct rte_mempool *small_mbuf_pool;\n \tstruct rte_mempool *big_mbuf_pool;\n@@ -123,6 +150,7 @@ struct test_data_params {\n \tconst struct rte_memzone *uncompbuf_memzone;\n \t/* overflow test activation */\n \tenum overflow_test overflow;\n+\tenum ratio_switch ratio;\n };\n \n struct test_private_arrays {\n@@ -141,6 +169,26 @@ struct test_private_arrays {\n \n static struct comp_testsuite_params testsuite_params = { 0 };\n \n+\n+static uint8_t\n+is_im_buffer_testsuite(void)\n+{\n+\treturn strstr(testsuite_params.suite_name, \"'im buffer'\") != NULL;\n+}\n+\n+static unsigned int\n+get_num_big_mbufs(void)\n+{\n+\treturn is_im_buffer_testsuite() ? IM_NUM_BIG_MBUFS : NUM_BIG_MBUFS;\n+}\n+\n+static unsigned int\n+get_big_data_test_size(void)\n+{\n+\treturn is_im_buffer_testsuite() ?\n+\t\t\tIM_BIG_DATA_TEST_SIZE : BIG_DATA_TEST_SIZE;\n+}\n+\n static void\n testsuite_teardown(void)\n {\n@@ -212,7 +260,7 @@ testsuite_setup(void)\n \n \t/* Create mempool with big buffers for SGL testing */\n \tts_params->big_mbuf_pool = rte_pktmbuf_pool_create(\"big_mbuf_pool\",\n-\t\t\tNUM_BIG_MBUFS + 1,\n+\t\t\tget_num_big_mbufs() + 1,\n \t\t\tCACHE_SIZE, 0,\n \t\t\tMAX_MBUF_SEGMENT_SIZE,\n \t\t\trte_socket_id());\n@@ -691,7 +739,7 @@ prepare_sgl_bufs(const char *test_buf, struct rte_mbuf *head_buf,\n \n \tif (data_ptr != NULL) {\n \t\t/* Copy characters without NULL terminator */\n-\t\tstrncpy(buf_ptr, data_ptr, data_size);\n+\t\tmemcpy(buf_ptr, data_ptr, data_size);\n \t\tdata_ptr += data_size;\n \t}\n \tremaining_data -= data_size;\n@@ -731,7 +779,7 @@ prepare_sgl_bufs(const char *test_buf, struct rte_mbuf *head_buf,\n \t\t}\n \t\tif (data_ptr != NULL) {\n \t\t\t/* Copy characters without NULL terminator */\n-\t\t\tstrncpy(buf_ptr, data_ptr, data_size);\n+\t\t\tmemcpy(buf_ptr, data_ptr, data_size);\n \t\t\tdata_ptr += data_size;\n \t\t}\n \t\tremaining_data -= data_size;\n@@ -956,7 +1004,9 @@ test_mbufs_calculate_data_size(\n \t/* local variables: */\n \tuint32_t data_size;\n \tstruct priv_op_data *priv_data;\n-\tfloat ratio;\n+\tfloat ratio_val;\n+\tenum ratio_switch ratio = test_data->ratio;\n+\n \tuint8_t not_zlib_compr; /* true if zlib isn't current compression dev */\n \tenum overflow_test overflow = test_data->overflow;\n \n@@ -973,13 +1023,16 @@ test_mbufs_calculate_data_size(\n \t\t\tnot_zlib_compr = (test_data->zlib_dir == ZLIB_DECOMPRESS\n \t\t\t\t|| test_data->zlib_dir == ZLIB_NONE);\n \n-\t\t\tratio = (not_zlib_compr &&\n+\t\t\tratio_val = (ratio == RATIO_ENABLED) ?\n+\t\t\t\t\tCOMPRESS_BUF_SIZE_RATIO :\n+\t\t\t\t\tCOMPRESS_BUF_SIZE_RATIO_DISABLED;\n+\n+\t\t\tratio_val = (not_zlib_compr &&\n \t\t\t\t(overflow == OVERFLOW_ENABLED)) ?\n \t\t\t\tCOMPRESS_BUF_SIZE_RATIO_OVERFLOW :\n-\t\t\t\tCOMPRESS_BUF_SIZE_RATIO;\n-\n-\t\t\tdata_size = strlen(test_bufs[i]) * ratio;\n+\t\t\t\tratio_val;\n \n+\t\t\tdata_size = strlen(test_bufs[i]) * ratio_val;\n \t\t} else {\n \t\t\tpriv_data = (struct priv_op_data *)\n \t\t\t\t\t(ops_processed[i] + 1);\n@@ -1085,6 +1138,9 @@ test_setup_output_bufs(\n \t} else {\n \t\tfor (i = 0; i < num_bufs; i++) {\n \n+\t\t\tenum rte_comp_huffman comp_huffman =\n+\t\t\tts_params->def_comp_xform->compress.deflate.huffman;\n+\n \t\t\t/* data size calculation */\n \t\t\tdata_size = test_mbufs_calculate_data_size(\n \t\t\t\t\top_type,\n@@ -1094,6 +1150,11 @@ test_setup_output_bufs(\n \t\t\t\t\ttest_data,\n \t\t\t\t\ti);\n \n+\t\t\tif (comp_huffman != RTE_COMP_HUFFMAN_DYNAMIC) {\n+\t\t\t\tif (op_type == OPERATION_DECOMPRESSION)\n+\t\t\t\t\tdata_size *= COMPRESS_BUF_SIZE_RATIO;\n+\t\t\t}\n+\n \t\t\t/* data allocation */\n \t\t\tif (buff_type == SGL_BOTH || buff_type == LB_TO_SGL) {\n \t\t\t\tret = prepare_sgl_bufs(NULL, current_bufs[i],\n@@ -1192,6 +1253,11 @@ test_deflate_comp_run(const struct interim_data_params *int_data,\n \t\tops[i]->src.length = rte_pktmbuf_pkt_len(uncomp_bufs[i]);\n \t\tops[i]->dst.offset = 0;\n \n+\t\tRTE_LOG(DEBUG, USER1,\n+\t\t\t\t\"Uncompressed buffer length = %u compressed buffer length = %u\",\n+\t\t\t\trte_pktmbuf_pkt_len(uncomp_bufs[i]),\n+\t\t\t\trte_pktmbuf_pkt_len(comp_bufs[i]));\n+\n \t\tif (operation_type == RTE_COMP_OP_STATELESS) {\n \t\t\tops[i]->flush_flag = RTE_COMP_FLUSH_FINAL;\n \t\t} else {\n@@ -1431,7 +1497,7 @@ test_deflate_comp_finalize(const struct interim_data_params *int_data,\n \t\t\t}\n \n \t\t\tRTE_LOG(ERR, USER1,\n-\t\t\t\t\"Some operations were not successful\\n\");\n+\t\t\t\t\"Comp: Some operations were not successful\\n\");\n \t\t\treturn -1;\n \t\t}\n \t\tpriv_data = (struct priv_op_data *)(ops_processed[i] + 1);\n@@ -1490,6 +1556,7 @@ test_deflate_decomp_run(const struct interim_data_params *int_data,\n \n \t/* from test_priv_data: */\n \tstruct rte_mbuf **uncomp_bufs = test_priv_data->uncomp_bufs;\n+\tstruct rte_mbuf **comp_bufs = test_priv_data->comp_bufs;\n \tstruct rte_comp_op **ops = test_priv_data->ops;\n \tstruct rte_comp_op **ops_processed = test_priv_data->ops_processed;\n \tvoid **priv_xforms = test_priv_data->priv_xforms;\n@@ -1510,7 +1577,7 @@ test_deflate_decomp_run(const struct interim_data_params *int_data,\n \n \t/* Source buffer is the compressed data from the previous operations */\n \tfor (i = 0; i < num_bufs; i++) {\n-\t\tops[i]->m_src = ops_processed[i]->m_dst;\n+\t\tops[i]->m_src = comp_bufs[i];\n \t\tops[i]->m_dst = uncomp_bufs[i];\n \t\tops[i]->src.offset = 0;\n \t\t/*\n@@ -1740,6 +1807,10 @@ test_deflate_decomp_finalize(const struct interim_data_params *int_data,\n \t\t\t\tRTE_COMP_OP_STATUS_OUT_OF_SPACE_RECOVERABLE\n \t\t\t    || ops_processed[i]->status ==\n \t\t\t\tRTE_COMP_OP_STATUS_SUCCESS)) {\n+\n+\t\t\tRTE_LOG(DEBUG, USER1,\n+\t\t\t\t\t\".............RECOVERABLE\\n\");\n+\n \t\t\t/* collect the output into all_decomp_data */\n \t\t\tconst void *ptr = rte_pktmbuf_read(\n \t\t\t\t\tops_processed[i]->m_dst,\n@@ -1777,7 +1848,6 @@ test_deflate_decomp_finalize(const struct interim_data_params *int_data,\n \t\t\t\tops[i]->src.length -=\n \t\t\t\t\t\tops_processed[i]->consumed;\n \t\t\t\t/* repeat the operation */\n-\t\t\t\t//goto next_step;\n \t\t\t\treturn 2;\n \t\t\t} else {\n \t\t\t\t/* Compare the original stream with the */\n@@ -1808,7 +1878,8 @@ test_deflate_decomp_finalize(const struct interim_data_params *int_data,\n \t\t} else if (ops_processed[i]->status !=\n \t\t\t   RTE_COMP_OP_STATUS_SUCCESS) {\n \t\t\tRTE_LOG(ERR, USER1,\n-\t\t\t\t\"Some operations were not successful\\n\");\n+\t\t\t\t\t\"Decomp: Some operations were not successful, status = %u\\n\",\n+\t\t\t\t\tops_processed[i]->status);\n \t\t\treturn -1;\n \t\t}\n \t\tpriv_data = (struct priv_op_data *)(ops_processed[i] + 1);\n@@ -1986,7 +2057,6 @@ test_deflate_comp_decomp(const struct interim_data_params *int_data,\n \t\t\t\"Compress device does not support DEFLATE\\n\");\n \t\treturn -1;\n \t}\n-\t//test_objects_init(&test_priv_data, num_bufs);\n \n \t/* Prepare the source mbufs with the data */\n \tret = test_setup_com_bufs(int_data, test_data, &test_priv_data);\n@@ -1995,6 +2065,8 @@ test_deflate_comp_decomp(const struct interim_data_params *int_data,\n \t\tgoto exit;\n \t}\n \n+\tRTE_LOG(DEBUG, USER1, \"<<< COMPRESSION >>>\\n\");\n+\n /* COMPRESSION  */\n \n \t/* Prepare output (destination) mbufs for compressed data */\n@@ -2031,6 +2103,8 @@ test_deflate_comp_decomp(const struct interim_data_params *int_data,\n \n /* DECOMPRESSION  */\n \n+\tRTE_LOG(DEBUG, USER1, \"<<< DECOMPRESSION >>>\\n\");\n+\n \t/* Prepare output (destination) mbufs for decompressed data */\n \tret = test_setup_output_bufs(\n \t\t\tOPERATION_DECOMPRESSION,\n@@ -2152,7 +2226,8 @@ test_compressdev_deflate_stateless_fixed(void)\n \t\t.zlib_dir = ZLIB_DECOMPRESS,\n \t\t.out_of_space = 0,\n \t\t.big_data = 0,\n-\t\t.overflow = OVERFLOW_DISABLED\n+\t\t.overflow = OVERFLOW_DISABLED,\n+\t\t.ratio = RATIO_ENABLED\n \t};\n \n \tfor (i = 0; i < RTE_DIM(compress_test_bufs); i++) {\n@@ -2223,7 +2298,8 @@ test_compressdev_deflate_stateless_dynamic(void)\n \t\t.zlib_dir = ZLIB_DECOMPRESS,\n \t\t.out_of_space = 0,\n \t\t.big_data = 0,\n-\t\t.overflow = OVERFLOW_DISABLED\n+\t\t.overflow = OVERFLOW_DISABLED,\n+\t\t.ratio = RATIO_ENABLED\n \t};\n \n \tfor (i = 0; i < RTE_DIM(compress_test_bufs); i++) {\n@@ -2278,7 +2354,8 @@ test_compressdev_deflate_stateless_multi_op(void)\n \t\t.zlib_dir = ZLIB_DECOMPRESS,\n \t\t.out_of_space = 0,\n \t\t.big_data = 0,\n-\t\t.overflow = OVERFLOW_DISABLED\n+\t\t.overflow = OVERFLOW_DISABLED,\n+\t\t.ratio = RATIO_ENABLED\n \t};\n \n \t/* Compress with compressdev, decompress with Zlib */\n@@ -2332,7 +2409,8 @@ test_compressdev_deflate_stateless_multi_level(void)\n \t\t.zlib_dir = ZLIB_DECOMPRESS,\n \t\t.out_of_space = 0,\n \t\t.big_data = 0,\n-\t\t.overflow = OVERFLOW_DISABLED\n+\t\t.overflow = OVERFLOW_DISABLED,\n+\t\t.ratio = RATIO_ENABLED\n \t};\n \n \tfor (i = 0; i < RTE_DIM(compress_test_bufs); i++) {\n@@ -2422,7 +2500,8 @@ test_compressdev_deflate_stateless_multi_xform(void)\n \t\t.zlib_dir = ZLIB_DECOMPRESS,\n \t\t.out_of_space = 0,\n \t\t.big_data = 0,\n-\t\t.overflow = OVERFLOW_DISABLED\n+\t\t.overflow = OVERFLOW_DISABLED,\n+\t\t.ratio = RATIO_ENABLED\n \t};\n \n \t/* Compress with compressdev, decompress with Zlib */\n@@ -2471,7 +2550,8 @@ test_compressdev_deflate_stateless_sgl(void)\n \t\t.zlib_dir = ZLIB_DECOMPRESS,\n \t\t.out_of_space = 0,\n \t\t.big_data = 0,\n-\t\t.overflow = OVERFLOW_DISABLED\n+\t\t.overflow = OVERFLOW_DISABLED,\n+\t\t.ratio = RATIO_ENABLED\n \t};\n \n \tfor (i = 0; i < RTE_DIM(compress_test_bufs); i++) {\n@@ -2582,7 +2662,8 @@ test_compressdev_deflate_stateless_checksum(void)\n \t\t.zlib_dir = ZLIB_DECOMPRESS,\n \t\t.out_of_space = 0,\n \t\t.big_data = 0,\n-\t\t.overflow = OVERFLOW_DISABLED\n+\t\t.overflow = OVERFLOW_DISABLED,\n+\t\t.ratio = RATIO_ENABLED\n \t};\n \n \t/* Check if driver supports crc32 checksum and test */\n@@ -2700,7 +2781,8 @@ test_compressdev_out_of_space_buffer(void)\n \t\t.zlib_dir = ZLIB_DECOMPRESS,\n \t\t.out_of_space = 1,  /* run out-of-space test */\n \t\t.big_data = 0,\n-\t\t.overflow = OVERFLOW_DISABLED\n+\t\t.overflow = OVERFLOW_DISABLED,\n+\t\t.ratio = RATIO_ENABLED\n \t};\n \t/* Compress with compressdev, decompress with Zlib */\n \ttest_data.zlib_dir = ZLIB_DECOMPRESS;\n@@ -2742,7 +2824,7 @@ test_compressdev_deflate_stateless_dynamic_big(void)\n \tstruct comp_testsuite_params *ts_params = &testsuite_params;\n \tuint16_t i = 0;\n \tint ret;\n-\tint j;\n+\tunsigned int j;\n \tconst struct rte_compressdev_capabilities *capab;\n \tchar *test_buffer = NULL;\n \n@@ -2755,7 +2837,7 @@ test_compressdev_deflate_stateless_dynamic_big(void)\n \tif ((capab->comp_feature_flags & RTE_COMP_FF_OOP_SGL_IN_SGL_OUT) == 0)\n \t\treturn -ENOTSUP;\n \n-\ttest_buffer = rte_malloc(NULL, BIG_DATA_TEST_SIZE, 0);\n+\ttest_buffer = rte_malloc(NULL, get_big_data_test_size(), 0);\n \tif (test_buffer == NULL) {\n \t\tRTE_LOG(ERR, USER1,\n \t\t\t\"Can't allocate buffer for big-data\\n\");\n@@ -2778,7 +2860,8 @@ test_compressdev_deflate_stateless_dynamic_big(void)\n \t\t.zlib_dir = ZLIB_DECOMPRESS,\n \t\t.out_of_space = 0,\n \t\t.big_data = 1,\n-\t\t.overflow = OVERFLOW_DISABLED\n+\t\t.overflow = OVERFLOW_DISABLED,\n+\t\t.ratio = RATIO_DISABLED\n \t};\n \n \tts_params->def_comp_xform->compress.deflate.huffman =\n@@ -2786,9 +2869,9 @@ test_compressdev_deflate_stateless_dynamic_big(void)\n \n \t/* fill the buffer with data based on rand. data */\n \tsrand(BIG_DATA_TEST_SIZE);\n-\tfor (j = 0; j < BIG_DATA_TEST_SIZE - 1; ++j)\n+\tfor (j = 0; j < get_big_data_test_size() - 1; ++j)\n \t\ttest_buffer[j] = (uint8_t)(rand() % ((uint8_t)-1)) | 1;\n-\ttest_buffer[BIG_DATA_TEST_SIZE-1] = 0;\n+\ttest_buffer[get_big_data_test_size() - 1] = 0;\n \n \t/* Compress with compressdev, decompress with Zlib */\n \ttest_data.zlib_dir = ZLIB_DECOMPRESS;\n@@ -2843,7 +2926,8 @@ test_compressdev_deflate_stateful_decomp(void)\n \t\t.big_data = 0,\n \t\t.decompress_output_block_size = 2000,\n \t\t.decompress_steps_max = 4,\n-\t\t.overflow = OVERFLOW_DISABLED\n+\t\t.overflow = OVERFLOW_DISABLED,\n+\t\t.ratio = RATIO_ENABLED\n \t};\n \n \t/* Compress with Zlib, decompress with compressdev */\n@@ -2926,7 +3010,8 @@ test_compressdev_deflate_stateful_decomp_checksum(void)\n \t\t.big_data = 0,\n \t\t.decompress_output_block_size = 2000,\n \t\t.decompress_steps_max = 4,\n-\t\t.overflow = OVERFLOW_DISABLED\n+\t\t.overflow = OVERFLOW_DISABLED,\n+\t\t.ratio = RATIO_ENABLED\n \t};\n \n \t/* Check if driver supports crc32 checksum and test */\n@@ -3139,7 +3224,8 @@ test_compressdev_deflate_stateless_fixed_oos_recoverable(void)\n \t\t.zlib_dir = ZLIB_DECOMPRESS,\n \t\t.out_of_space = 0,\n \t\t.big_data = 0,\n-\t\t.overflow = OVERFLOW_ENABLED\n+\t\t.overflow = OVERFLOW_ENABLED,\n+\t\t.ratio = RATIO_ENABLED\n \t};\n \n \tfor (i = 0; i < RTE_DIM(compress_test_bufs); i++) {\n@@ -3176,47 +3262,1059 @@ test_compressdev_deflate_stateless_fixed_oos_recoverable(void)\n \treturn ret;\n }\n \n-static struct unit_test_suite compressdev_testsuite  = {\n-\t.suite_name = \"compressdev unit test suite\",\n-\t.setup = testsuite_setup,\n-\t.teardown = testsuite_teardown,\n-\t.unit_test_cases = {\n-\t\tTEST_CASE_ST(NULL, NULL,\n-\t\t\ttest_compressdev_invalid_configuration),\n-\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n-\t\t\ttest_compressdev_deflate_stateless_fixed),\n-\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n-\t\t\ttest_compressdev_deflate_stateless_dynamic),\n-\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n-\t\t\ttest_compressdev_deflate_stateless_dynamic_big),\n-\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n-\t\t\ttest_compressdev_deflate_stateless_multi_op),\n-\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n-\t\t\ttest_compressdev_deflate_stateless_multi_level),\n-\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n-\t\t\ttest_compressdev_deflate_stateless_multi_xform),\n-\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n-\t\t\ttest_compressdev_deflate_stateless_sgl),\n-\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n-\t\t\ttest_compressdev_deflate_stateless_checksum),\n-\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n-\t\t\ttest_compressdev_out_of_space_buffer),\n-\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n-\t\t\ttest_compressdev_deflate_stateful_decomp),\n-\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n-\t\t\ttest_compressdev_deflate_stateful_decomp_checksum),\n-\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n-\t\t\ttest_compressdev_external_mbufs),\n-\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n-\t\ttest_compressdev_deflate_stateless_fixed_oos_recoverable),\n-\t\tTEST_CASES_END() /**< NULL terminate unit test array */\n+static int\n+test_compressdev_deflate_im_buffers_LB_1op(void)\n+{\n+\tstruct comp_testsuite_params *ts_params = &testsuite_params;\n+\tuint16_t i = 0;\n+\tint ret = TEST_SUCCESS;\n+\tint j;\n+\tconst struct rte_compressdev_capabilities *capab;\n+\tchar *test_buffer = NULL;\n+\n+\tcapab = rte_compressdev_capability_get(0, RTE_COMP_ALGO_DEFLATE);\n+\tTEST_ASSERT(capab != NULL, \"Failed to retrieve device capabilities\");\n+\n+\tif ((capab->comp_feature_flags & RTE_COMP_FF_HUFFMAN_DYNAMIC) == 0)\n+\t\treturn -ENOTSUP;\n+\n+\tif ((capab->comp_feature_flags & RTE_COMP_FF_OOP_SGL_IN_SGL_OUT) == 0)\n+\t\treturn -ENOTSUP;\n+\n+\ttest_buffer = rte_malloc(NULL, IM_BUF_DATA_TEST_SIZE_LB, 0);\n+\tif (test_buffer == NULL) {\n+\t\tRTE_LOG(ERR, USER1,\n+\t\t\t\"Can't allocate buffer for 'im buffer' test\\n\");\n+\t\treturn TEST_FAILED;\n \t}\n-};\n+\n+\tstruct interim_data_params int_data = {\n+\t\t(const char * const *)&test_buffer,\n+\t\t1,\n+\t\t&i,\n+\t\t&ts_params->def_comp_xform,\n+\t\t&ts_params->def_decomp_xform,\n+\t\t1\n+\t};\n+\n+\tstruct test_data_params test_data = {\n+\t\t.compress_state = RTE_COMP_OP_STATELESS,\n+\t\t.decompress_state = RTE_COMP_OP_STATELESS,\n+\t\t\t\t/* must be LB to SGL,\n+\t\t\t\t * input LB buffer reaches its maximum,\n+\t\t\t\t * if ratio 1.3 than another mbuf must be\n+\t\t\t\t * created and attached\n+\t\t\t\t */\n+\t\t.buff_type = LB_BOTH,\n+\t\t.zlib_dir = ZLIB_NONE,\n+\t\t.out_of_space = 0,\n+\t\t.big_data = 1,\n+\t\t.overflow = OVERFLOW_DISABLED,\n+\t\t.ratio = RATIO_DISABLED\n+\t};\n+\n+\tts_params->def_comp_xform->compress.deflate.huffman =\n+\t\t\tRTE_COMP_HUFFMAN_DYNAMIC;\n+\n+\t/* fill the buffer with data based on rand. data */\n+\tsrand(IM_BUF_DATA_TEST_SIZE_LB);\n+\tfor (j = 0; j < IM_BUF_DATA_TEST_SIZE_LB - 1; ++j)\n+\t\ttest_buffer[j] = (uint8_t)(rand() % ((uint8_t)-1)) | 1;\n+\n+\t/* Compress with compressdev, decompress with compressdev */\n+\tif (test_deflate_comp_decomp(&int_data, &test_data) < 0) {\n+\t\tret = TEST_FAILED;\n+\t\tgoto end;\n+\t}\n+\n+end:\n+\tts_params->def_comp_xform->compress.deflate.huffman =\n+\t\t\tRTE_COMP_HUFFMAN_DEFAULT;\n+\trte_free(test_buffer);\n+\treturn ret;\n+}\n \n static int\n-test_compressdev(void)\n+test_compressdev_deflate_im_buffers_LB_2ops_first(void)\n {\n-\treturn unit_test_suite_runner(&compressdev_testsuite);\n+\tstruct comp_testsuite_params *ts_params = &testsuite_params;\n+\tuint16_t i = 0;\n+\tint ret = TEST_SUCCESS;\n+\tint j;\n+\tconst struct rte_compressdev_capabilities *capab;\n+\tchar *test_buffer = NULL;\n+\tconst char *test_buffers[2];\n+\n+\tcapab = rte_compressdev_capability_get(0, RTE_COMP_ALGO_DEFLATE);\n+\tTEST_ASSERT(capab != NULL, \"Failed to retrieve device capabilities\");\n+\n+\tif ((capab->comp_feature_flags & RTE_COMP_FF_HUFFMAN_DYNAMIC) == 0)\n+\t\treturn -ENOTSUP;\n+\n+\tif ((capab->comp_feature_flags & RTE_COMP_FF_OOP_SGL_IN_SGL_OUT) == 0)\n+\t\treturn -ENOTSUP;\n+\n+\ttest_buffer = rte_malloc(NULL, IM_BUF_DATA_TEST_SIZE_LB, 0);\n+\tif (test_buffer == NULL) {\n+\t\tRTE_LOG(ERR, USER1,\n+\t\t\t\"Can't allocate buffer for 'im buffer' test\\n\");\n+\t\treturn TEST_FAILED;\n+\t}\n+\n+\ttest_buffers[0] = test_buffer;\n+\ttest_buffers[1] = compress_test_bufs[0];\n+\n+\tstruct interim_data_params int_data = {\n+\t\t(const char * const *)test_buffers,\n+\t\t2,\n+\t\t&i,\n+\t\t&ts_params->def_comp_xform,\n+\t\t&ts_params->def_decomp_xform,\n+\t\t1\n+\t};\n+\n+\tstruct test_data_params test_data = {\n+\t\t.compress_state = RTE_COMP_OP_STATELESS,\n+\t\t.decompress_state = RTE_COMP_OP_STATELESS,\n+\t\t.buff_type = LB_BOTH,\n+\t\t.zlib_dir = ZLIB_NONE,\n+\t\t.out_of_space = 0,\n+\t\t.big_data = 1,\n+\t\t.overflow = OVERFLOW_DISABLED,\n+\t\t.ratio = RATIO_DISABLED\n+\t};\n+\n+\tts_params->def_comp_xform->compress.deflate.huffman =\n+\t\t\tRTE_COMP_HUFFMAN_DYNAMIC;\n+\n+\t/* fill the buffer with data based on rand. data */\n+\tsrand(IM_BUF_DATA_TEST_SIZE_LB);\n+\tfor (j = 0; j < IM_BUF_DATA_TEST_SIZE_LB - 1; ++j)\n+\t\ttest_buffer[j] = (uint8_t)(rand() % ((uint8_t)-1)) | 1;\n+\n+\t/* Compress with compressdev, decompress with compressdev */\n+\tif (test_deflate_comp_decomp(&int_data, &test_data) < 0) {\n+\t\tret = TEST_FAILED;\n+\t\tgoto end;\n+\t}\n+\n+end:\n+\tts_params->def_comp_xform->compress.deflate.huffman =\n+\t\t\tRTE_COMP_HUFFMAN_DEFAULT;\n+\trte_free(test_buffer);\n+\treturn ret;\n+}\n+\n+static int\n+test_compressdev_deflate_im_buffers_LB_2ops_second(void)\n+{\n+\tstruct comp_testsuite_params *ts_params = &testsuite_params;\n+\tuint16_t i = 0;\n+\tint ret = TEST_SUCCESS;\n+\tint j;\n+\tconst struct rte_compressdev_capabilities *capab;\n+\tchar *test_buffer = NULL;\n+\tconst char *test_buffers[2];\n+\n+\tcapab = rte_compressdev_capability_get(0, RTE_COMP_ALGO_DEFLATE);\n+\tTEST_ASSERT(capab != NULL, \"Failed to retrieve device capabilities\");\n+\n+\tif ((capab->comp_feature_flags & RTE_COMP_FF_HUFFMAN_DYNAMIC) == 0)\n+\t\treturn -ENOTSUP;\n+\n+\tif ((capab->comp_feature_flags & RTE_COMP_FF_OOP_SGL_IN_SGL_OUT) == 0)\n+\t\treturn -ENOTSUP;\n+\n+\ttest_buffer = rte_malloc(NULL, IM_BUF_DATA_TEST_SIZE_LB, 0);\n+\tif (test_buffer == NULL) {\n+\t\tRTE_LOG(ERR, USER1,\n+\t\t\t\"Can't allocate buffer for 'im buffer' test\\n\");\n+\t\treturn TEST_FAILED;\n+\t}\n+\n+\ttest_buffers[0] = compress_test_bufs[0];\n+\ttest_buffers[1] = test_buffer;\n+\n+\tstruct interim_data_params int_data = {\n+\t\t(const char * const *)test_buffers,\n+\t\t2,\n+\t\t&i,\n+\t\t&ts_params->def_comp_xform,\n+\t\t&ts_params->def_decomp_xform,\n+\t\t1\n+\t};\n+\n+\tstruct test_data_params test_data = {\n+\t\t.compress_state = RTE_COMP_OP_STATELESS,\n+\t\t.decompress_state = RTE_COMP_OP_STATELESS,\n+\t\t.buff_type = LB_BOTH,\n+\t\t.zlib_dir = ZLIB_NONE,\n+\t\t.out_of_space = 0,\n+\t\t.big_data = 1,\n+\t\t.overflow = OVERFLOW_DISABLED,\n+\t\t.ratio = RATIO_DISABLED\n+\t};\n+\n+\tts_params->def_comp_xform->compress.deflate.huffman =\n+\t\t\tRTE_COMP_HUFFMAN_DYNAMIC;\n+\n+\t/* fill the buffer with data based on rand. data */\n+\tsrand(IM_BUF_DATA_TEST_SIZE_LB);\n+\tfor (j = 0; j < IM_BUF_DATA_TEST_SIZE_LB - 1; ++j)\n+\t\ttest_buffer[j] = (uint8_t)(rand() % ((uint8_t)-1)) | 1;\n+\n+\t/* Compress with compressdev, decompress with compressdev */\n+\tif (test_deflate_comp_decomp(&int_data, &test_data) < 0) {\n+\t\tret = TEST_FAILED;\n+\t\tgoto end;\n+\t}\n+\n+end:\n+\tts_params->def_comp_xform->compress.deflate.huffman =\n+\t\t\tRTE_COMP_HUFFMAN_DEFAULT;\n+\trte_free(test_buffer);\n+\treturn ret;\n+}\n+\n+static int\n+test_compressdev_deflate_im_buffers_LB_3ops(void)\n+{\n+\tstruct comp_testsuite_params *ts_params = &testsuite_params;\n+\tuint16_t i = 0;\n+\tint ret = TEST_SUCCESS;\n+\tint j;\n+\tconst struct rte_compressdev_capabilities *capab;\n+\tchar *test_buffer = NULL;\n+\tconst char *test_buffers[3];\n+\n+\tcapab = rte_compressdev_capability_get(0, RTE_COMP_ALGO_DEFLATE);\n+\tTEST_ASSERT(capab != NULL, \"Failed to retrieve device capabilities\");\n+\n+\tif ((capab->comp_feature_flags & RTE_COMP_FF_HUFFMAN_DYNAMIC) == 0)\n+\t\treturn -ENOTSUP;\n+\n+\tif ((capab->comp_feature_flags & RTE_COMP_FF_OOP_SGL_IN_SGL_OUT) == 0)\n+\t\treturn -ENOTSUP;\n+\n+\ttest_buffer = rte_malloc(NULL, IM_BUF_DATA_TEST_SIZE_LB, 0);\n+\tif (test_buffer == NULL) {\n+\t\tRTE_LOG(ERR, USER1,\n+\t\t\t\"Can't allocate buffer for 'im buffer' test\\n\");\n+\t\treturn TEST_FAILED;\n+\t}\n+\n+\ttest_buffers[0] = compress_test_bufs[0];\n+\ttest_buffers[1] = test_buffer;\n+\ttest_buffers[2] = compress_test_bufs[1];\n+\n+\tstruct interim_data_params int_data = {\n+\t\t(const char * const *)test_buffers,\n+\t\t3,\n+\t\t&i,\n+\t\t&ts_params->def_comp_xform,\n+\t\t&ts_params->def_decomp_xform,\n+\t\t1\n+\t};\n+\n+\tstruct test_data_params test_data = {\n+\t\t.compress_state = RTE_COMP_OP_STATELESS,\n+\t\t.decompress_state = RTE_COMP_OP_STATELESS,\n+\t\t.buff_type = LB_BOTH,\n+\t\t.zlib_dir = ZLIB_NONE,\n+\t\t.out_of_space = 0,\n+\t\t.big_data = 1,\n+\t\t.overflow = OVERFLOW_DISABLED,\n+\t\t.ratio = RATIO_DISABLED\n+\t};\n+\n+\tts_params->def_comp_xform->compress.deflate.huffman =\n+\t\t\tRTE_COMP_HUFFMAN_DYNAMIC;\n+\n+\t/* fill the buffer with data based on rand. data */\n+\tsrand(IM_BUF_DATA_TEST_SIZE_LB);\n+\tfor (j = 0; j < IM_BUF_DATA_TEST_SIZE_LB - 1; ++j)\n+\t\ttest_buffer[j] = (uint8_t)(rand() % ((uint8_t)-1)) | 1;\n+\n+\t/* Compress with compressdev, decompress with compressdev */\n+\tif (test_deflate_comp_decomp(&int_data, &test_data) < 0) {\n+\t\tret = TEST_FAILED;\n+\t\tgoto end;\n+\t}\n+\n+end:\n+\tts_params->def_comp_xform->compress.deflate.huffman =\n+\t\t\tRTE_COMP_HUFFMAN_DEFAULT;\n+\trte_free(test_buffer);\n+\treturn ret;\n+}\n+\n+static int\n+test_compressdev_deflate_im_buffers_LB_4ops(void)\n+{\n+\tstruct comp_testsuite_params *ts_params = &testsuite_params;\n+\tuint16_t i = 0;\n+\tint ret = TEST_SUCCESS;\n+\tint j;\n+\tconst struct rte_compressdev_capabilities *capab;\n+\tchar *test_buffer = NULL;\n+\tconst char *test_buffers[4];\n+\n+\tcapab = rte_compressdev_capability_get(0, RTE_COMP_ALGO_DEFLATE);\n+\tTEST_ASSERT(capab != NULL, \"Failed to retrieve device capabilities\");\n+\n+\tif ((capab->comp_feature_flags & RTE_COMP_FF_HUFFMAN_DYNAMIC) == 0)\n+\t\treturn -ENOTSUP;\n+\n+\tif ((capab->comp_feature_flags & RTE_COMP_FF_OOP_SGL_IN_SGL_OUT) == 0)\n+\t\treturn -ENOTSUP;\n+\n+\ttest_buffer = rte_malloc(NULL, IM_BUF_DATA_TEST_SIZE_LB, 0);\n+\tif (test_buffer == NULL) {\n+\t\tRTE_LOG(ERR, USER1,\n+\t\t\t\"Can't allocate buffer for 'im buffer' test\\n\");\n+\t\treturn TEST_FAILED;\n+\t}\n+\n+\ttest_buffers[0] = compress_test_bufs[0];\n+\ttest_buffers[1] = test_buffer;\n+\ttest_buffers[2] = compress_test_bufs[1];\n+\ttest_buffers[3] = test_buffer;\n+\n+\tstruct interim_data_params int_data = {\n+\t\t(const char * const *)test_buffers,\n+\t\t4,\n+\t\t&i,\n+\t\t&ts_params->def_comp_xform,\n+\t\t&ts_params->def_decomp_xform,\n+\t\t1\n+\t};\n+\n+\tstruct test_data_params test_data = {\n+\t\t.compress_state = RTE_COMP_OP_STATELESS,\n+\t\t.decompress_state = RTE_COMP_OP_STATELESS,\n+\t\t.buff_type = LB_BOTH,\n+\t\t.zlib_dir = ZLIB_NONE,\n+\t\t.out_of_space = 0,\n+\t\t.big_data = 1,\n+\t\t.overflow = OVERFLOW_DISABLED,\n+\t\t.ratio = RATIO_DISABLED\n+\t};\n+\n+\tts_params->def_comp_xform->compress.deflate.huffman =\n+\t\t\tRTE_COMP_HUFFMAN_DYNAMIC;\n+\n+\t/* fill the buffer with data based on rand. data */\n+\tsrand(IM_BUF_DATA_TEST_SIZE_LB);\n+\tfor (j = 0; j < IM_BUF_DATA_TEST_SIZE_LB - 1; ++j)\n+\t\ttest_buffer[j] = (uint8_t)(rand() % ((uint8_t)-1)) | 1;\n+\n+\t/* Compress with compressdev, decompress with compressdev */\n+\tif (test_deflate_comp_decomp(&int_data, &test_data) < 0) {\n+\t\tret = TEST_FAILED;\n+\t\tgoto end;\n+\t}\n+\n+end:\n+\tts_params->def_comp_xform->compress.deflate.huffman =\n+\t\t\tRTE_COMP_HUFFMAN_DEFAULT;\n+\trte_free(test_buffer);\n+\treturn ret;\n+}\n+\n+\n+static int\n+test_compressdev_deflate_im_buffers_SGL_1op(void)\n+{\n+\tstruct comp_testsuite_params *ts_params = &testsuite_params;\n+\tuint16_t i = 0;\n+\tint ret = TEST_SUCCESS;\n+\tint j;\n+\tconst struct rte_compressdev_capabilities *capab;\n+\tchar *test_buffer = NULL;\n+\n+\tcapab = rte_compressdev_capability_get(0, RTE_COMP_ALGO_DEFLATE);\n+\tTEST_ASSERT(capab != NULL, \"Failed to retrieve device capabilities\");\n+\n+\tif ((capab->comp_feature_flags & RTE_COMP_FF_HUFFMAN_DYNAMIC) == 0)\n+\t\treturn -ENOTSUP;\n+\n+\tif ((capab->comp_feature_flags & RTE_COMP_FF_OOP_SGL_IN_SGL_OUT) == 0)\n+\t\treturn -ENOTSUP;\n+\n+\ttest_buffer = rte_malloc(NULL, IM_BUF_DATA_TEST_SIZE_SGL, 0);\n+\tif (test_buffer == NULL) {\n+\t\tRTE_LOG(ERR, USER1,\n+\t\t\t\"Can't allocate buffer for big-data\\n\");\n+\t\treturn TEST_FAILED;\n+\t}\n+\n+\tstruct interim_data_params int_data = {\n+\t\t(const char * const *)&test_buffer,\n+\t\t1,\n+\t\t&i,\n+\t\t&ts_params->def_comp_xform,\n+\t\t&ts_params->def_decomp_xform,\n+\t\t1\n+\t};\n+\n+\tstruct test_data_params test_data = {\n+\t\t.compress_state = RTE_COMP_OP_STATELESS,\n+\t\t.decompress_state = RTE_COMP_OP_STATELESS,\n+\t\t.buff_type = SGL_BOTH,\n+\t\t.zlib_dir = ZLIB_NONE,\n+\t\t.out_of_space = 0,\n+\t\t.big_data = 1,\n+\t\t.overflow = OVERFLOW_DISABLED,\n+\t\t.ratio = RATIO_DISABLED\n+\t};\n+\n+\tts_params->def_comp_xform->compress.deflate.huffman =\n+\t\t\tRTE_COMP_HUFFMAN_DYNAMIC;\n+\n+\t/* fill the buffer with data based on rand. data */\n+\tsrand(IM_BUF_DATA_TEST_SIZE_SGL);\n+\tfor (j = 0; j < IM_BUF_DATA_TEST_SIZE_SGL - 1; ++j)\n+\t\ttest_buffer[j] = (uint8_t)(rand() % ((uint8_t)-1)) | 1;\n+\n+\t/* Compress with compressdev, decompress with compressdev */\n+\tif (test_deflate_comp_decomp(&int_data, &test_data) < 0) {\n+\t\tret = TEST_FAILED;\n+\t\tgoto end;\n+\t}\n+\n+end:\n+\tts_params->def_comp_xform->compress.deflate.huffman =\n+\t\t\tRTE_COMP_HUFFMAN_DEFAULT;\n+\trte_free(test_buffer);\n+\treturn ret;\n+}\n+\n+static int\n+test_compressdev_deflate_im_buffers_SGL_2ops_first(void)\n+{\n+\tstruct comp_testsuite_params *ts_params = &testsuite_params;\n+\tuint16_t i = 0;\n+\tint ret = TEST_SUCCESS;\n+\tint j;\n+\tconst struct rte_compressdev_capabilities *capab;\n+\tchar *test_buffer = NULL;\n+\tconst char *test_buffers[2];\n+\n+\tcapab = rte_compressdev_capability_get(0, RTE_COMP_ALGO_DEFLATE);\n+\tTEST_ASSERT(capab != NULL, \"Failed to retrieve device capabilities\");\n+\n+\tif ((capab->comp_feature_flags & RTE_COMP_FF_HUFFMAN_DYNAMIC) == 0)\n+\t\treturn -ENOTSUP;\n+\n+\tif ((capab->comp_feature_flags & RTE_COMP_FF_OOP_SGL_IN_SGL_OUT) == 0)\n+\t\treturn -ENOTSUP;\n+\n+\ttest_buffer = rte_malloc(NULL, IM_BUF_DATA_TEST_SIZE_SGL, 0);\n+\tif (test_buffer == NULL) {\n+\t\tRTE_LOG(ERR, USER1,\n+\t\t\t\"Can't allocate buffer for big-data\\n\");\n+\t\treturn TEST_FAILED;\n+\t}\n+\n+\ttest_buffers[0] = test_buffer;\n+\ttest_buffers[1] = compress_test_bufs[0];\n+\n+\tstruct interim_data_params int_data = {\n+\t\t(const char * const *)test_buffers,\n+\t\t2,\n+\t\t&i,\n+\t\t&ts_params->def_comp_xform,\n+\t\t&ts_params->def_decomp_xform,\n+\t\t1\n+\t};\n+\n+\tstruct test_data_params test_data = {\n+\t\t.compress_state = RTE_COMP_OP_STATELESS,\n+\t\t.decompress_state = RTE_COMP_OP_STATELESS,\n+\t\t.buff_type = SGL_BOTH,\n+\t\t.zlib_dir = ZLIB_NONE,\n+\t\t.out_of_space = 0,\n+\t\t.big_data = 1,\n+\t\t.overflow = OVERFLOW_DISABLED,\n+\t\t.ratio = RATIO_DISABLED\n+\t};\n+\n+\tts_params->def_comp_xform->compress.deflate.huffman =\n+\t\t\tRTE_COMP_HUFFMAN_DYNAMIC;\n+\n+\t/* fill the buffer with data based on rand. data */\n+\tsrand(IM_BUF_DATA_TEST_SIZE_SGL);\n+\tfor (j = 0; j < IM_BUF_DATA_TEST_SIZE_SGL - 1; ++j)\n+\t\ttest_buffer[j] = (uint8_t)(rand() % ((uint8_t)-1)) | 1;\n+\n+\t/* Compress with compressdev, decompress with compressdev */\n+\tif (test_deflate_comp_decomp(&int_data, &test_data) < 0) {\n+\t\tret = TEST_FAILED;\n+\t\tgoto end;\n+\t}\n+\n+end:\n+\tts_params->def_comp_xform->compress.deflate.huffman =\n+\t\t\tRTE_COMP_HUFFMAN_DEFAULT;\n+\trte_free(test_buffer);\n+\treturn ret;\n+}\n+\n+static int\n+test_compressdev_deflate_im_buffers_SGL_2ops_second(void)\n+{\n+\tstruct comp_testsuite_params *ts_params = &testsuite_params;\n+\tuint16_t i = 0;\n+\tint ret = TEST_SUCCESS;\n+\tint j;\n+\tconst struct rte_compressdev_capabilities *capab;\n+\tchar *test_buffer = NULL;\n+\tconst char *test_buffers[2];\n+\n+\tcapab = rte_compressdev_capability_get(0, RTE_COMP_ALGO_DEFLATE);\n+\tTEST_ASSERT(capab != NULL, \"Failed to retrieve device capabilities\");\n+\n+\tif ((capab->comp_feature_flags & RTE_COMP_FF_HUFFMAN_DYNAMIC) == 0)\n+\t\treturn -ENOTSUP;\n+\n+\tif ((capab->comp_feature_flags & RTE_COMP_FF_OOP_SGL_IN_SGL_OUT) == 0)\n+\t\treturn -ENOTSUP;\n+\n+\ttest_buffer = rte_malloc(NULL, IM_BUF_DATA_TEST_SIZE_SGL, 0);\n+\tif (test_buffer == NULL) {\n+\t\tRTE_LOG(ERR, USER1,\n+\t\t\t\"Can't allocate buffer for big-data\\n\");\n+\t\treturn TEST_FAILED;\n+\t}\n+\n+\ttest_buffers[0] = compress_test_bufs[0];\n+\ttest_buffers[1] = test_buffer;\n+\n+\tstruct interim_data_params int_data = {\n+\t\t(const char * const *)test_buffers,\n+\t\t2,\n+\t\t&i,\n+\t\t&ts_params->def_comp_xform,\n+\t\t&ts_params->def_decomp_xform,\n+\t\t1\n+\t};\n+\n+\tstruct test_data_params test_data = {\n+\t\t.compress_state = RTE_COMP_OP_STATELESS,\n+\t\t.decompress_state = RTE_COMP_OP_STATELESS,\n+\t\t.buff_type = SGL_BOTH,\n+\t\t.zlib_dir = ZLIB_NONE,\n+\t\t.out_of_space = 0,\n+\t\t.big_data = 1,\n+\t\t.overflow = OVERFLOW_DISABLED,\n+\t\t.ratio = RATIO_DISABLED\n+\t};\n+\n+\tts_params->def_comp_xform->compress.deflate.huffman =\n+\t\t\tRTE_COMP_HUFFMAN_DYNAMIC;\n+\n+\t/* fill the buffer with data based on rand. data */\n+\tsrand(IM_BUF_DATA_TEST_SIZE_SGL);\n+\tfor (j = 0; j < IM_BUF_DATA_TEST_SIZE_SGL - 1; ++j)\n+\t\ttest_buffer[j] = (uint8_t)(rand() % ((uint8_t)-1)) | 1;\n+\n+\t/* Compress with compressdev, decompress with compressdev */\n+\tif (test_deflate_comp_decomp(&int_data, &test_data) < 0) {\n+\t\tret = TEST_FAILED;\n+\t\tgoto end;\n+\t}\n+\n+end:\n+\tts_params->def_comp_xform->compress.deflate.huffman =\n+\t\t\tRTE_COMP_HUFFMAN_DEFAULT;\n+\trte_free(test_buffer);\n+\treturn ret;\n+}\n+\n+static int\n+test_compressdev_deflate_im_buffers_SGL_3ops(void)\n+{\n+\tstruct comp_testsuite_params *ts_params = &testsuite_params;\n+\tuint16_t i = 0;\n+\tint ret = TEST_SUCCESS;\n+\tint j;\n+\tconst struct rte_compressdev_capabilities *capab;\n+\tchar *test_buffer = NULL;\n+\tconst char *test_buffers[3];\n+\n+\tcapab = rte_compressdev_capability_get(0, RTE_COMP_ALGO_DEFLATE);\n+\tTEST_ASSERT(capab != NULL, \"Failed to retrieve device capabilities\");\n+\n+\tif ((capab->comp_feature_flags & RTE_COMP_FF_HUFFMAN_DYNAMIC) == 0)\n+\t\treturn -ENOTSUP;\n+\n+\tif ((capab->comp_feature_flags & RTE_COMP_FF_OOP_SGL_IN_SGL_OUT) == 0)\n+\t\treturn -ENOTSUP;\n+\n+\ttest_buffer = rte_malloc(NULL, IM_BUF_DATA_TEST_SIZE_SGL, 0);\n+\tif (test_buffer == NULL) {\n+\t\tRTE_LOG(ERR, USER1,\n+\t\t\t\"Can't allocate buffer for big-data\\n\");\n+\t\treturn TEST_FAILED;\n+\t}\n+\n+\ttest_buffers[0] = compress_test_bufs[0];\n+\ttest_buffers[1] = test_buffer;\n+\ttest_buffers[2] = compress_test_bufs[1];\n+\n+\tstruct interim_data_params int_data = {\n+\t\t(const char * const *)test_buffers,\n+\t\t3,\n+\t\t&i,\n+\t\t&ts_params->def_comp_xform,\n+\t\t&ts_params->def_decomp_xform,\n+\t\t1\n+\t};\n+\n+\tstruct test_data_params test_data = {\n+\t\t.compress_state = RTE_COMP_OP_STATELESS,\n+\t\t.decompress_state = RTE_COMP_OP_STATELESS,\n+\t\t.buff_type = SGL_BOTH,\n+\t\t.zlib_dir = ZLIB_NONE,\n+\t\t.out_of_space = 0,\n+\t\t.big_data = 1,\n+\t\t.overflow = OVERFLOW_DISABLED,\n+\t\t.ratio = RATIO_DISABLED\n+\t};\n+\n+\tts_params->def_comp_xform->compress.deflate.huffman =\n+\t\t\tRTE_COMP_HUFFMAN_DYNAMIC;\n+\n+\t/* fill the buffer with data based on rand. data */\n+\tsrand(IM_BUF_DATA_TEST_SIZE_SGL);\n+\tfor (j = 0; j < IM_BUF_DATA_TEST_SIZE_SGL - 1; ++j)\n+\t\ttest_buffer[j] = (uint8_t)(rand() % ((uint8_t)-1)) | 1;\n+\n+\t/* Compress with compressdev, decompress with compressdev */\n+\tif (test_deflate_comp_decomp(&int_data, &test_data) < 0) {\n+\t\tret = TEST_FAILED;\n+\t\tgoto end;\n+\t}\n+\n+end:\n+\tts_params->def_comp_xform->compress.deflate.huffman =\n+\t\t\tRTE_COMP_HUFFMAN_DEFAULT;\n+\trte_free(test_buffer);\n+\treturn ret;\n+}\n+\n+\n+static int\n+test_compressdev_deflate_im_buffers_SGL_4ops(void)\n+{\n+\tstruct comp_testsuite_params *ts_params = &testsuite_params;\n+\tuint16_t i = 0;\n+\tint ret = TEST_SUCCESS;\n+\tint j;\n+\tconst struct rte_compressdev_capabilities *capab;\n+\tchar *test_buffer = NULL;\n+\tconst char *test_buffers[4];\n+\n+\tcapab = rte_compressdev_capability_get(0, RTE_COMP_ALGO_DEFLATE);\n+\tTEST_ASSERT(capab != NULL, \"Failed to retrieve device capabilities\");\n+\n+\tif ((capab->comp_feature_flags & RTE_COMP_FF_HUFFMAN_DYNAMIC) == 0)\n+\t\treturn -ENOTSUP;\n+\n+\tif ((capab->comp_feature_flags & RTE_COMP_FF_OOP_SGL_IN_SGL_OUT) == 0)\n+\t\treturn -ENOTSUP;\n+\n+\ttest_buffer = rte_malloc(NULL, IM_BUF_DATA_TEST_SIZE_SGL, 0);\n+\tif (test_buffer == NULL) {\n+\t\tRTE_LOG(ERR, USER1,\n+\t\t\t\"Can't allocate buffer for big-data\\n\");\n+\t\treturn TEST_FAILED;\n+\t}\n+\n+\ttest_buffers[0] = compress_test_bufs[0];\n+\ttest_buffers[1] = test_buffer;\n+\ttest_buffers[2] = compress_test_bufs[1];\n+\ttest_buffers[3] = test_buffer;\n+\n+\tstruct interim_data_params int_data = {\n+\t\t(const char * const *)test_buffers,\n+\t\t4,\n+\t\t&i,\n+\t\t&ts_params->def_comp_xform,\n+\t\t&ts_params->def_decomp_xform,\n+\t\t1\n+\t};\n+\n+\tstruct test_data_params test_data = {\n+\t\t.compress_state = RTE_COMP_OP_STATELESS,\n+\t\t.decompress_state = RTE_COMP_OP_STATELESS,\n+\t\t.buff_type = SGL_BOTH,\n+\t\t.zlib_dir = ZLIB_NONE,\n+\t\t.out_of_space = 0,\n+\t\t.big_data = 1,\n+\t\t.overflow = OVERFLOW_DISABLED,\n+\t\t.ratio = RATIO_DISABLED\n+\t};\n+\n+\tts_params->def_comp_xform->compress.deflate.huffman =\n+\t\t\tRTE_COMP_HUFFMAN_DYNAMIC;\n+\n+\t/* fill the buffer with data based on rand. data */\n+\tsrand(IM_BUF_DATA_TEST_SIZE_SGL);\n+\tfor (j = 0; j < IM_BUF_DATA_TEST_SIZE_SGL - 1; ++j)\n+\t\ttest_buffer[j] = (uint8_t)(rand() % ((uint8_t)-1)) | 1;\n+\n+\t/* Compress with compressdev, decompress with compressdev */\n+\tif (test_deflate_comp_decomp(&int_data, &test_data) < 0) {\n+\t\tret = TEST_FAILED;\n+\t\tgoto end;\n+\t}\n+\n+end:\n+\tts_params->def_comp_xform->compress.deflate.huffman =\n+\t\t\tRTE_COMP_HUFFMAN_DEFAULT;\n+\trte_free(test_buffer);\n+\treturn ret;\n+}\n+\n+static int\n+test_compressdev_deflate_im_buffers_SGL_over_1op(void)\n+{\n+\tstruct comp_testsuite_params *ts_params = &testsuite_params;\n+\tuint16_t i = 0;\n+\tint ret = TEST_SUCCESS;\n+\tint j;\n+\tconst struct rte_compressdev_capabilities *capab;\n+\tchar *test_buffer = NULL;\n+\n+\tcapab = rte_compressdev_capability_get(0, RTE_COMP_ALGO_DEFLATE);\n+\tTEST_ASSERT(capab != NULL, \"Failed to retrieve device capabilities\");\n+\n+\tif ((capab->comp_feature_flags & RTE_COMP_FF_HUFFMAN_DYNAMIC) == 0)\n+\t\treturn -ENOTSUP;\n+\n+\tif ((capab->comp_feature_flags & RTE_COMP_FF_OOP_SGL_IN_SGL_OUT) == 0)\n+\t\treturn -ENOTSUP;\n+\n+\ttest_buffer = rte_malloc(NULL, IM_BUF_DATA_TEST_SIZE_OVER, 0);\n+\tif (test_buffer == NULL) {\n+\t\tRTE_LOG(ERR, USER1,\n+\t\t\t\"Can't allocate buffer for big-data\\n\");\n+\t\treturn TEST_FAILED;\n+\t}\n+\n+\tstruct interim_data_params int_data = {\n+\t\t(const char * const *)&test_buffer,\n+\t\t1,\n+\t\t&i,\n+\t\t&ts_params->def_comp_xform,\n+\t\t&ts_params->def_decomp_xform,\n+\t\t1\n+\t};\n+\n+\tstruct test_data_params test_data = {\n+\t\t.compress_state = RTE_COMP_OP_STATELESS,\n+\t\t.decompress_state = RTE_COMP_OP_STATELESS,\n+\t\t.buff_type = SGL_BOTH,\n+\t\t.zlib_dir = ZLIB_NONE,\n+\t\t.out_of_space = 0,\n+\t\t.big_data = 1,\n+\t\t.overflow = OVERFLOW_DISABLED,\n+\t\t.ratio = RATIO_DISABLED\n+\t};\n+\n+\tts_params->def_comp_xform->compress.deflate.huffman =\n+\t\t\tRTE_COMP_HUFFMAN_DYNAMIC;\n+\n+\t/* fill the buffer with data based on rand. data */\n+\tsrand(IM_BUF_DATA_TEST_SIZE_OVER);\n+\tfor (j = 0; j < IM_BUF_DATA_TEST_SIZE_OVER - 1; ++j)\n+\t\ttest_buffer[j] = (uint8_t)(rand() % ((uint8_t)-1)) | 1;\n+\n+\t/* Compress with compressdev, decompress with compressdev */\n+\tif (test_deflate_comp_decomp(&int_data, &test_data) < 0) {\n+\t\tret = TEST_SUCCESS;\n+\t\tgoto end;\n+\t}\n+\n+end:\n+\tts_params->def_comp_xform->compress.deflate.huffman =\n+\t\t\tRTE_COMP_HUFFMAN_DEFAULT;\n+\trte_free(test_buffer);\n+\treturn ret;\n+}\n+\n+\n+static int\n+test_compressdev_deflate_im_buffers_SGL_over_2ops_first(void)\n+{\n+\tstruct comp_testsuite_params *ts_params = &testsuite_params;\n+\tuint16_t i = 0;\n+\tint ret = TEST_SUCCESS;\n+\tint j;\n+\tconst struct rte_compressdev_capabilities *capab;\n+\tchar *test_buffer = NULL;\n+\tconst char *test_buffers[2];\n+\n+\tcapab = rte_compressdev_capability_get(0, RTE_COMP_ALGO_DEFLATE);\n+\tTEST_ASSERT(capab != NULL, \"Failed to retrieve device capabilities\");\n+\n+\tif ((capab->comp_feature_flags & RTE_COMP_FF_HUFFMAN_DYNAMIC) == 0)\n+\t\treturn -ENOTSUP;\n+\n+\tif ((capab->comp_feature_flags & RTE_COMP_FF_OOP_SGL_IN_SGL_OUT) == 0)\n+\t\treturn -ENOTSUP;\n+\n+\ttest_buffer = rte_malloc(NULL, IM_BUF_DATA_TEST_SIZE_OVER, 0);\n+\tif (test_buffer == NULL) {\n+\t\tRTE_LOG(ERR, USER1,\n+\t\t\t\"Can't allocate buffer for big-data\\n\");\n+\t\treturn TEST_FAILED;\n+\t}\n+\n+\ttest_buffers[0] = test_buffer;\n+\ttest_buffers[1] = compress_test_bufs[0];\n+\n+\tstruct interim_data_params int_data = {\n+\t\t(const char * const *)test_buffers,\n+\t\t2,\n+\t\t&i,\n+\t\t&ts_params->def_comp_xform,\n+\t\t&ts_params->def_decomp_xform,\n+\t\t1\n+\t};\n+\n+\tstruct test_data_params test_data = {\n+\t\t.compress_state = RTE_COMP_OP_STATELESS,\n+\t\t.decompress_state = RTE_COMP_OP_STATELESS,\n+\t\t.buff_type = SGL_BOTH,\n+\t\t.zlib_dir = ZLIB_NONE,\n+\t\t.out_of_space = 0,\n+\t\t.big_data = 1,\n+\t\t.overflow = OVERFLOW_DISABLED,\n+\t\t.ratio = RATIO_DISABLED\n+\t};\n+\n+\tts_params->def_comp_xform->compress.deflate.huffman =\n+\t\t\tRTE_COMP_HUFFMAN_DYNAMIC;\n+\n+\t/* fill the buffer with data based on rand. data */\n+\tsrand(IM_BUF_DATA_TEST_SIZE_OVER);\n+\tfor (j = 0; j < IM_BUF_DATA_TEST_SIZE_OVER - 1; ++j)\n+\t\ttest_buffer[j] = (uint8_t)(rand() % ((uint8_t)-1)) | 1;\n+\n+\t/* Compress with compressdev, decompress with compressdev */\n+\tif (test_deflate_comp_decomp(&int_data, &test_data) < 0) {\n+\t\tret = TEST_SUCCESS;\n+\t\tgoto end;\n+\t}\n+\n+end:\n+\tts_params->def_comp_xform->compress.deflate.huffman =\n+\t\t\tRTE_COMP_HUFFMAN_DEFAULT;\n+\trte_free(test_buffer);\n+\treturn ret;\n+}\n+\n+static int\n+test_compressdev_deflate_im_buffers_SGL_over_2ops_second(void)\n+{\n+\tstruct comp_testsuite_params *ts_params = &testsuite_params;\n+\tuint16_t i = 0;\n+\tint ret = TEST_SUCCESS;\n+\tint j;\n+\tconst struct rte_compressdev_capabilities *capab;\n+\tchar *test_buffer = NULL;\n+\tconst char *test_buffers[2];\n+\n+\tcapab = rte_compressdev_capability_get(0, RTE_COMP_ALGO_DEFLATE);\n+\tTEST_ASSERT(capab != NULL, \"Failed to retrieve device capabilities\");\n+\n+\tif ((capab->comp_feature_flags & RTE_COMP_FF_HUFFMAN_DYNAMIC) == 0)\n+\t\treturn -ENOTSUP;\n+\n+\tif ((capab->comp_feature_flags & RTE_COMP_FF_OOP_SGL_IN_SGL_OUT) == 0)\n+\t\treturn -ENOTSUP;\n+\n+\ttest_buffer = rte_malloc(NULL, IM_BUF_DATA_TEST_SIZE_OVER, 0);\n+\tif (test_buffer == NULL) {\n+\t\tRTE_LOG(ERR, USER1,\n+\t\t\t\"Can't allocate buffer for big-data\\n\");\n+\t\treturn TEST_FAILED;\n+\t}\n+\n+\ttest_buffers[0] = compress_test_bufs[0];\n+\ttest_buffers[1] = test_buffer;\n+\n+\tstruct interim_data_params int_data = {\n+\t\t(const char * const *)test_buffers,\n+\t\t2,\n+\t\t&i,\n+\t\t&ts_params->def_comp_xform,\n+\t\t&ts_params->def_decomp_xform,\n+\t\t1\n+\t};\n+\n+\tstruct test_data_params test_data = {\n+\t\t.compress_state = RTE_COMP_OP_STATELESS,\n+\t\t.decompress_state = RTE_COMP_OP_STATELESS,\n+\t\t.buff_type = SGL_BOTH,\n+\t\t.zlib_dir = ZLIB_NONE,\n+\t\t.out_of_space = 0,\n+\t\t.big_data = 1,\n+\t\t.overflow = OVERFLOW_DISABLED,\n+\t\t.ratio = RATIO_DISABLED\n+\t};\n+\n+\tts_params->def_comp_xform->compress.deflate.huffman =\n+\t\t\tRTE_COMP_HUFFMAN_DYNAMIC;\n+\n+\t/* fill the buffer with data based on rand. data */\n+\tsrand(IM_BUF_DATA_TEST_SIZE_OVER);\n+\tfor (j = 0; j < IM_BUF_DATA_TEST_SIZE_OVER - 1; ++j)\n+\t\ttest_buffer[j] = (uint8_t)(rand() % ((uint8_t)-1)) | 1;\n+\n+\t/* Compress with compressdev, decompress with compressdev */\n+\tif (test_deflate_comp_decomp(&int_data, &test_data) < 0) {\n+\t\tret = TEST_SUCCESS;\n+\t\tgoto end;\n+\t}\n+\n+end:\n+\tts_params->def_comp_xform->compress.deflate.huffman =\n+\t\t\tRTE_COMP_HUFFMAN_DEFAULT;\n+\trte_free(test_buffer);\n+\treturn ret;\n+}\n+\n+\n+static struct unit_test_suite compressdev_testsuite  = {\n+\t.suite_name = \"compressdev unit test suite\",\n+\t.setup = testsuite_setup,\n+\t.teardown = testsuite_teardown,\n+\t.unit_test_cases = {\n+\t\tTEST_CASE_ST(NULL, NULL,\n+\t\t\ttest_compressdev_invalid_configuration),\n+\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n+\t\t\ttest_compressdev_deflate_stateless_fixed),\n+\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n+\t\t\ttest_compressdev_deflate_stateless_dynamic),\n+\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n+\t\t\ttest_compressdev_deflate_stateless_dynamic_big),\n+\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n+\t\t\ttest_compressdev_deflate_stateless_multi_op),\n+\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n+\t\t\ttest_compressdev_deflate_stateless_multi_level),\n+\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n+\t\t\ttest_compressdev_deflate_stateless_multi_xform),\n+\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n+\t\t\ttest_compressdev_deflate_stateless_sgl),\n+\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n+\t\t\ttest_compressdev_deflate_stateless_checksum),\n+\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n+\t\t\ttest_compressdev_out_of_space_buffer),\n+\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n+\t\t\ttest_compressdev_deflate_stateful_decomp),\n+\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n+\t\t\ttest_compressdev_deflate_stateful_decomp_checksum),\n+\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n+\t\t\ttest_compressdev_external_mbufs),\n+\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n+\t\ttest_compressdev_deflate_stateless_fixed_oos_recoverable),\n+\t\tTEST_CASES_END() /**< NULL terminate unit test array */\n+\t}\n+};\n+\n+/**********************************/\n+\n+static struct unit_test_suite compressdev_testsuite_im_buf_positive  = {\n+\t.suite_name = \"compressdev unit test suite for 'im buffer'\",\n+\t.setup = testsuite_setup,\n+\t.teardown = testsuite_teardown,\n+\t.unit_test_cases = {\n+\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n+\t\t\ttest_compressdev_deflate_im_buffers_LB_1op),\n+\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n+\t\t\ttest_compressdev_deflate_im_buffers_LB_2ops_first),\n+\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n+\t\t\ttest_compressdev_deflate_im_buffers_LB_2ops_second),\n+\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n+\t\t\ttest_compressdev_deflate_im_buffers_LB_3ops),\n+\n+\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n+\t\t\ttest_compressdev_deflate_im_buffers_LB_4ops),\n+\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n+\t\t\ttest_compressdev_deflate_im_buffers_SGL_1op),\n+\n+\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n+\t\t\ttest_compressdev_deflate_im_buffers_SGL_2ops_first),\n+\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n+\t\t\ttest_compressdev_deflate_im_buffers_SGL_2ops_second),\n+\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n+\t\t\ttest_compressdev_deflate_im_buffers_SGL_3ops),\n+\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n+\t\t\ttest_compressdev_deflate_im_buffers_SGL_4ops),\n+\n+\t\tTEST_CASES_END() /**< NULL terminate unit test array */\n+\t}\n+};\n+\n+static struct unit_test_suite compressdev_testsuite_im_buf_negative  = {\n+\t.suite_name = \"compressdev unit test suite for 'im buffer'\",\n+\t.setup = testsuite_setup,\n+\t.teardown = testsuite_teardown,\n+\t.unit_test_cases = {\n+\n+\t\t/* For this test huge mempool is necessary.\n+\t\t * It tests one case:\n+\t\t * only one op containing big amount of data, so that\n+\t\t * number of requested descriptors higher than number\n+\t\t * of available descriptors (128)\n+\t\t */\n+\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n+\t\t\ttest_compressdev_deflate_im_buffers_SGL_over_1op),\n+\n+\t\t/* For this test huge mempool is necessary.\n+\t\t * 2 ops. First op contains big amount of data:\n+\t\t * number of requested descriptors higher than number\n+\t\t * of available descriptors (128), the second op is\n+\t\t * relatively small. In this case both ops are rejected\n+\t\t */\n+\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n+\t\t       test_compressdev_deflate_im_buffers_SGL_over_2ops_first),\n+\n+\t\tTEST_CASE_ST(generic_ut_setup, generic_ut_teardown,\n+\t\t      test_compressdev_deflate_im_buffers_SGL_over_2ops_second),\n+\n+\t\tTEST_CASES_END() /**< NULL terminate unit test array */\n+\t}\n+};\n+\n+static int\n+test_compressdev(void)\n+{\n+\ttestsuite_params.suite_name = compressdev_testsuite.suite_name;\n+\treturn unit_test_suite_runner(&compressdev_testsuite);\n+}\n+\n+static int\n+test_compressdev_im_buf_positive(void)\n+{\n+\ttestsuite_params.suite_name =\n+\t\t\tcompressdev_testsuite_im_buf_positive.suite_name;\n+\treturn unit_test_suite_runner(&compressdev_testsuite_im_buf_positive);\n+}\n+\n+static int\n+test_compressdev_im_buf_negative(void)\n+{\n+\ttestsuite_params.suite_name =\n+\t\t\tcompressdev_testsuite_im_buf_negative.suite_name;\n+\treturn unit_test_suite_runner(&compressdev_testsuite_im_buf_negative);\n }\n \n REGISTER_TEST_COMMAND(compressdev_autotest, test_compressdev);\n+REGISTER_TEST_COMMAND(compressdev_autotest_im_pos,\n+\t\ttest_compressdev_im_buf_positive);\n+REGISTER_TEST_COMMAND(compressdev_autotest_im_neg,\n+\t\ttest_compressdev_im_buf_negative);\n",
    "prefixes": [
        "2/2"
    ]
}