From patchwork Fri Dec 14 15:33:25 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Kovacevic, Marko" X-Patchwork-Id: 48884 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id CC8DD1B8B1; Fri, 14 Dec 2018 16:33:34 +0100 (CET) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by dpdk.org (Postfix) with ESMTP id 5B2711B87F for ; Fri, 14 Dec 2018 16:33:33 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 14 Dec 2018 07:33:30 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,353,1539673200"; d="scan'208";a="125968580" Received: from silpixa00399502.ir.intel.com (HELO silpixa00399502.ger.corp.intel.com) ([10.237.222.111]) by fmsmga002.fm.intel.com with ESMTP; 14 Dec 2018 07:33:28 -0800 From: Marko Kovacevic To: dev@dpdk.org Cc: akhil.goyal@nxp.com, lee.daly@intel.com, tomaszx.jozwiak@intel.com, cathal.ohare@intel.com, fiona.trahe@intel.com, "Kovacevic, Marko" Date: Fri, 14 Dec 2018 15:33:25 +0000 Message-Id: <20181214153326.17356-1-marko.kovacevic@intel.com> X-Mailer: git-send-email 2.9.5 Subject: [dpdk-dev] [PATCH v1 1/2] test/compress: add out of space test X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: "Kovacevic, Marko" This patch adds new out of space testcase to check that the destination mbuf is smaller than required for the output of compression to ensure the driver doesn't crash and returns the valid error case. Signed-off-by: Marko Kovacevic Acked-by: Lee Daly --- test/test/test_compressdev.c | 112 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 108 insertions(+), 4 deletions(-) diff --git a/test/test/test_compressdev.c b/test/test/test_compressdev.c index 4ea13f4..63b1ba9 100644 --- a/test/test/test_compressdev.c +++ b/test/test/test_compressdev.c @@ -41,6 +41,9 @@ #define ZLIB_TRAILER_SIZE 4 #define GZIP_HEADER_SIZE 10 #define GZIP_TRAILER_SIZE 8 +#define OUT_OF_SPACE_BUF 1 + +int out_of_space; const char * huffman_type_strings[] = { @@ -727,8 +730,9 @@ test_deflate_comp_decomp(const char * const test_bufs[], if (sgl) { for (i = 0; i < num_bufs; i++) { - data_size = strlen(test_bufs[i]) * - COMPRESS_BUF_SIZE_RATIO; + out_of_space ? data_size = OUT_OF_SPACE_BUF : + (data_size = strlen(test_bufs[i]) * + COMPRESS_BUF_SIZE_RATIO); if (prepare_sgl_bufs(NULL, comp_bufs[i], data_size, ts_params->small_mbuf_pool, @@ -739,8 +743,9 @@ test_deflate_comp_decomp(const char * const test_bufs[], } else { for (i = 0; i < num_bufs; i++) { - data_size = strlen(test_bufs[i]) * - COMPRESS_BUF_SIZE_RATIO; + out_of_space ? data_size = OUT_OF_SPACE_BUF : + (data_size = strlen(test_bufs[i]) * + COMPRESS_BUF_SIZE_RATIO); rte_pktmbuf_append(comp_bufs[i], data_size); } } @@ -1663,6 +1668,103 @@ test_compressdev_deflate_stateless_checksum(void) return ret; } +static int +test_compressdev_out_of_space_buffer(void) +{ + struct comp_testsuite_params *ts_params = &testsuite_params; + const char *test_buffer; + int ret; + uint16_t i = 0; + const struct rte_compressdev_capabilities *capab; + out_of_space = 1; + + capab = rte_compressdev_capability_get(0, RTE_COMP_ALGO_DEFLATE); + TEST_ASSERT(capab != NULL, "Failed to retrieve device capabilities"); + + if ((capab->comp_feature_flags & RTE_COMP_FF_HUFFMAN_FIXED) == 0) + return -ENOTSUP; + + struct rte_comp_xform *compress_xform = + rte_malloc(NULL, sizeof(struct rte_comp_xform), 0); + + if (compress_xform == NULL) { + RTE_LOG(ERR, USER1, + "Compress xform could not be created\n"); + ret = TEST_FAILED; + goto exit; + } + + test_buffer = compress_test_bufs[i]; + + if (capab->comp_feature_flags & RTE_COMP_FF_OOP_SGL_IN_SGL_OUT) { + + /* Compress with compressdev, decompress with Zlib */ + if (test_deflate_comp_decomp(&test_buffer, 1, + &i, + &ts_params->def_comp_xform, + &ts_params->def_decomp_xform, + 1, + RTE_COMP_OP_STATELESS, + 1, + ZLIB_DECOMPRESS, + 0) == 0) { + ret = TEST_FAILED; + goto exit; + + } + + /* Compress with Zlib, decompress with compressdev */ + if (test_deflate_comp_decomp(&test_buffer, 1, + &i, + &ts_params->def_comp_xform, + &ts_params->def_decomp_xform, + 1, + RTE_COMP_OP_STATELESS, + 0, + ZLIB_COMPRESS, + 0) == 0) { + ret = TEST_FAILED; + goto exit; + } + } + + /* Compress with compressdev, decompress with Zlib */ + if (test_deflate_comp_decomp(&test_buffer, 1, + &i, + &ts_params->def_comp_xform, + &ts_params->def_decomp_xform, + 1, + RTE_COMP_OP_STATELESS, + 0, + ZLIB_DECOMPRESS, + 0) == 0) { + ret = TEST_FAILED; + goto exit; + + } + + /* Compress with Zlib, decompress with compressdev */ + if (test_deflate_comp_decomp(&test_buffer, 1, + &i, + &ts_params->def_comp_xform, + &ts_params->def_decomp_xform, + 1, + RTE_COMP_OP_STATELESS, + 0, + ZLIB_COMPRESS, + 0) == 0) { + ret = TEST_FAILED; + goto exit; + } + + ret = TEST_SUCCESS; + out_of_space = 0; + +exit: + rte_free(compress_xform); + return ret; +} + static struct unit_test_suite compressdev_testsuite = { .suite_name = "compressdev unit test suite", .setup = testsuite_setup, @@ -1684,6 +1786,8 @@ static struct unit_test_suite compressdev_testsuite = { test_compressdev_deflate_stateless_sgl), TEST_CASE_ST(generic_ut_setup, generic_ut_teardown, test_compressdev_deflate_stateless_checksum), + TEST_CASE_ST(generic_ut_setup, generic_ut_teardown, + test_compressdev_out_of_space_buffer), TEST_CASES_END() /**< NULL terminate unit test array */ } }; From patchwork Fri Dec 14 15:33:26 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Kovacevic, Marko" X-Patchwork-Id: 48885 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 37D521B994; Fri, 14 Dec 2018 16:33:37 +0100 (CET) Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by dpdk.org (Postfix) with ESMTP id 228161B87F for ; Fri, 14 Dec 2018 16:33:33 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 14 Dec 2018 07:33:32 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,353,1539673200"; d="scan'208";a="125968588" Received: from silpixa00399502.ir.intel.com (HELO silpixa00399502.ger.corp.intel.com) ([10.237.222.111]) by fmsmga002.fm.intel.com with ESMTP; 14 Dec 2018 07:33:30 -0800 From: Marko Kovacevic To: dev@dpdk.org Cc: akhil.goyal@nxp.com, lee.daly@intel.com, tomaszx.jozwiak@intel.com, cathal.ohare@intel.com, fiona.trahe@intel.com, Marko Kovacevic Date: Fri, 14 Dec 2018 15:33:26 +0000 Message-Id: <20181214153326.17356-2-marko.kovacevic@intel.com> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20181214153326.17356-1-marko.kovacevic@intel.com> References: <20181214153326.17356-1-marko.kovacevic@intel.com> Subject: [dpdk-dev] [PATCH v1 2/2] test/compress: add varied buffer input/outputs X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Added unit test to check if a SGL buffer was added as an input and a Linear Buffer as output and vice versa so we can test if the application would process the different buffers properly. Signed-off-by: Marko Kovacevic Acked-by: Lee Daly --- test/test/test_compressdev.c | 185 +++++++++++++++++++++++++++++++------------ 1 file changed, 134 insertions(+), 51 deletions(-) diff --git a/test/test/test_compressdev.c b/test/test/test_compressdev.c index 63b1ba9..1fa9824 100644 --- a/test/test/test_compressdev.c +++ b/test/test/test_compressdev.c @@ -71,6 +71,13 @@ struct comp_testsuite_params { struct rte_comp_xform *def_decomp_xform; }; +enum varied_buff { + LB_BOTH = 0, /* both input and output are linear*/ + SGL_BOTH, /* both input and output are chained */ + SGL_TO_LB, /* input buffer is chained */ + LB_TO_SGL /* output buffer is chained */ +}; + static struct comp_testsuite_params testsuite_params = { 0 }; static void @@ -346,7 +353,7 @@ compress_zlib(struct rte_comp_op *op, } /* Assuming stateless operation */ - /* SGL */ + /* SGL Input */ if (op->m_src->nb_segs > 1) { single_src_buf = rte_malloc(NULL, rte_pktmbuf_pkt_len(op->m_src), 0); @@ -354,14 +361,10 @@ compress_zlib(struct rte_comp_op *op, RTE_LOG(ERR, USER1, "Buffer could not be allocated\n"); goto exit; } - single_dst_buf = rte_malloc(NULL, - rte_pktmbuf_pkt_len(op->m_dst), 0); - if (single_dst_buf == NULL) { - RTE_LOG(ERR, USER1, "Buffer could not be allocated\n"); - goto exit; - } - if (rte_pktmbuf_read(op->m_src, 0, - rte_pktmbuf_pkt_len(op->m_src), + + if (rte_pktmbuf_read(op->m_src, op->src.offset, + rte_pktmbuf_pkt_len(op->m_src) - + op->src.offset, single_src_buf) == NULL) { RTE_LOG(ERR, USER1, "Buffer could not be read entirely\n"); @@ -370,15 +373,31 @@ compress_zlib(struct rte_comp_op *op, stream.avail_in = op->src.length; stream.next_in = single_src_buf; - stream.avail_out = rte_pktmbuf_pkt_len(op->m_dst); - stream.next_out = single_dst_buf; } else { stream.avail_in = op->src.length; - stream.next_in = rte_pktmbuf_mtod(op->m_src, uint8_t *); + stream.next_in = rte_pktmbuf_mtod_offset(op->m_src, uint8_t *, + op->src.offset); + } + /* SGL output */ + if (op->m_dst->nb_segs > 1) { + + single_dst_buf = rte_malloc(NULL, + rte_pktmbuf_pkt_len(op->m_dst), 0); + if (single_dst_buf == NULL) { + RTE_LOG(ERR, USER1, "Buffer could not be allocated\n"); + goto exit; + } + + stream.avail_out = op->m_dst->pkt_len; + stream.next_out = single_dst_buf; + + } else {/* linear output */ stream.avail_out = op->m_dst->data_len; - stream.next_out = rte_pktmbuf_mtod(op->m_dst, uint8_t *); + stream.next_out = rte_pktmbuf_mtod_offset(op->m_dst, uint8_t *, + op->dst.offset); } + /* Stateless operation, all buffer will be compressed in one go */ zlib_flush = map_zlib_flush_flag(op->flush_flag); ret = deflate(&stream, zlib_flush); @@ -392,14 +411,14 @@ compress_zlib(struct rte_comp_op *op, goto exit; /* Copy data to destination SGL */ - if (op->m_src->nb_segs > 1) { + if (op->m_dst->nb_segs > 1) { uint32_t remaining_data = stream.total_out; uint8_t *src_data = single_dst_buf; struct rte_mbuf *dst_buf = op->m_dst; while (remaining_data > 0) { - uint8_t *dst_data = rte_pktmbuf_mtod(dst_buf, - uint8_t *); + uint8_t *dst_data = rte_pktmbuf_mtod_offset(dst_buf, + uint8_t *, op->dst.offset); /* Last segment */ if (remaining_data < dst_buf->data_len) { memcpy(dst_data, src_data, remaining_data); @@ -655,7 +674,7 @@ test_deflate_comp_decomp(const char * const test_bufs[], struct rte_comp_xform *decompress_xforms[], unsigned int num_xforms, enum rte_comp_op_type state, - unsigned int sgl, + enum varied_buff buff_type, enum zlib_direction zlib_dir) { struct comp_testsuite_params *ts_params = &testsuite_params; @@ -686,7 +705,7 @@ test_deflate_comp_decomp(const char * const test_bufs[], memset(ops_processed, 0, sizeof(struct rte_comp_op *) * num_bufs); memset(priv_xforms, 0, sizeof(void *) * num_bufs); - if (sgl) + if (buff_type == SGL_BOTH) buf_pool = ts_params->small_mbuf_pool; else buf_pool = ts_params->large_mbuf_pool; @@ -701,7 +720,7 @@ test_deflate_comp_decomp(const char * const test_bufs[], goto exit; } - if (sgl) { + if (buff_type == SGL_BOTH || buff_type == SGL_TO_LB) { for (i = 0; i < num_bufs; i++) { data_size = strlen(test_bufs[i]) + 1; if (prepare_sgl_bufs(test_bufs[i], uncomp_bufs[i], @@ -728,7 +747,7 @@ test_deflate_comp_decomp(const char * const test_bufs[], goto exit; } - if (sgl) { + if (buff_type == SGL_BOTH || buff_type == LB_TO_SGL) { for (i = 0; i < num_bufs; i++) { out_of_space ? data_size = OUT_OF_SPACE_BUF : (data_size = strlen(test_bufs[i]) * @@ -931,7 +950,7 @@ test_deflate_comp_decomp(const char * const test_bufs[], goto exit; } - if (sgl) { + if (buff_type == SGL_BOTH || buff_type == LB_TO_SGL) { for (i = 0; i < num_bufs; i++) { priv_data = (struct priv_op_data *) (ops_processed[i] + 1); @@ -1220,7 +1239,7 @@ test_compressdev_deflate_stateless_fixed(void) &ts_params->def_decomp_xform, 1, RTE_COMP_OP_STATELESS, - 0, + LB_BOTH, ZLIB_DECOMPRESS) < 0) { ret = TEST_FAILED; goto exit; @@ -1233,7 +1252,7 @@ test_compressdev_deflate_stateless_fixed(void) &ts_params->def_decomp_xform, 1, RTE_COMP_OP_STATELESS, - 0, + LB_BOTH, ZLIB_COMPRESS) < 0) { ret = TEST_FAILED; goto exit; @@ -1286,7 +1305,7 @@ test_compressdev_deflate_stateless_dynamic(void) &ts_params->def_decomp_xform, 1, RTE_COMP_OP_STATELESS, - 0, + LB_BOTH, ZLIB_DECOMPRESS) < 0) { ret = TEST_FAILED; goto exit; @@ -1299,7 +1318,7 @@ test_compressdev_deflate_stateless_dynamic(void) &ts_params->def_decomp_xform, 1, RTE_COMP_OP_STATELESS, - 0, + LB_BOTH, ZLIB_COMPRESS) < 0) { ret = TEST_FAILED; goto exit; @@ -1331,7 +1350,7 @@ test_compressdev_deflate_stateless_multi_op(void) &ts_params->def_decomp_xform, 1, RTE_COMP_OP_STATELESS, - 0, + LB_BOTH, ZLIB_DECOMPRESS) < 0) return TEST_FAILED; @@ -1342,7 +1361,7 @@ test_compressdev_deflate_stateless_multi_op(void) &ts_params->def_decomp_xform, 1, RTE_COMP_OP_STATELESS, - 0, + LB_BOTH, ZLIB_COMPRESS) < 0) return TEST_FAILED; @@ -1382,7 +1401,7 @@ test_compressdev_deflate_stateless_multi_level(void) &ts_params->def_decomp_xform, 1, RTE_COMP_OP_STATELESS, - 0, + LB_BOTH, ZLIB_DECOMPRESS) < 0) { ret = TEST_FAILED; goto exit; @@ -1453,7 +1472,7 @@ test_compressdev_deflate_stateless_multi_xform(void) decompress_xforms, NUM_XFORMS, RTE_COMP_OP_STATELESS, - 0, + LB_BOTH, ZLIB_DECOMPRESS) < 0) { ret = TEST_FAILED; goto exit; @@ -1492,8 +1511,8 @@ test_compressdev_deflate_stateless_sgl(void) &ts_params->def_decomp_xform, 1, RTE_COMP_OP_STATELESS, - 1, - ZLIB_DECOMPRESS) < 0) + SGL_BOTH, + ZLIB_COMPRESS) < 0) return TEST_FAILED; /* Compress with Zlib, decompress with compressdev */ @@ -1503,13 +1522,12 @@ test_compressdev_deflate_stateless_sgl(void) &ts_params->def_decomp_xform, 1, RTE_COMP_OP_STATELESS, - 1, - ZLIB_COMPRESS) < 0) + SGL_BOTH, + ZLIB_DECOMPRESS) < 0) return TEST_FAILED; } return TEST_SUCCESS; - } static int @@ -1571,7 +1589,7 @@ test_compressdev_deflate_stateless_checksum(void) &decompress_xform, 1, RTE_COMP_OP_STATELESS, - 0, + LB_BOTH, ZLIB_COMPRESS) < 0) { ret = TEST_FAILED; goto exit; @@ -1586,7 +1604,7 @@ test_compressdev_deflate_stateless_checksum(void) &decompress_xform, 1, RTE_COMP_OP_STATELESS, - 0, + LB_BOTH, ZLIB_NONE) < 0) { ret = TEST_FAILED; goto exit; @@ -1611,7 +1629,7 @@ test_compressdev_deflate_stateless_checksum(void) &decompress_xform, 1, RTE_COMP_OP_STATELESS, - 0, + LB_BOTH, ZLIB_COMPRESS) < 0) { ret = TEST_FAILED; goto exit; @@ -1625,7 +1643,7 @@ test_compressdev_deflate_stateless_checksum(void) &decompress_xform, 1, RTE_COMP_OP_STATELESS, - 0, + LB_BOTH, ZLIB_NONE) < 0) { ret = TEST_FAILED; goto exit; @@ -1652,7 +1670,7 @@ test_compressdev_deflate_stateless_checksum(void) &decompress_xform, 1, RTE_COMP_OP_STATELESS, - 0, + LB_BOTH, ZLIB_NONE) < 0) { ret = TEST_FAILED; goto exit; @@ -1705,9 +1723,8 @@ test_compressdev_out_of_space_buffer(void) &ts_params->def_decomp_xform, 1, RTE_COMP_OP_STATELESS, - 1, - ZLIB_DECOMPRESS, - 0) == 0) { + LB_BOTH, + ZLIB_DECOMPRESS) == 0) { ret = TEST_FAILED; goto exit; @@ -1720,9 +1737,8 @@ test_compressdev_out_of_space_buffer(void) &ts_params->def_decomp_xform, 1, RTE_COMP_OP_STATELESS, - 0, - ZLIB_COMPRESS, - 0) == 0) { + LB_BOTH, + ZLIB_COMPRESS) == 0) { ret = TEST_FAILED; goto exit; } @@ -1735,9 +1751,8 @@ test_compressdev_out_of_space_buffer(void) &ts_params->def_decomp_xform, 1, RTE_COMP_OP_STATELESS, - 0, - ZLIB_DECOMPRESS, - 0) == 0) { + SGL_BOTH, + ZLIB_DECOMPRESS) == 0) { ret = TEST_FAILED; goto exit; @@ -1750,9 +1765,8 @@ test_compressdev_out_of_space_buffer(void) &ts_params->def_decomp_xform, 1, RTE_COMP_OP_STATELESS, - 0, - ZLIB_COMPRESS, - 0) == 0) { + SGL_BOTH, + ZLIB_COMPRESS) == 0) { ret = TEST_FAILED; goto exit; } @@ -1765,6 +1779,72 @@ test_compressdev_out_of_space_buffer(void) return ret; } +static int +test_compressdev_deflate_stateless_varied_buf(void) +{ + struct comp_testsuite_params *ts_params = &testsuite_params; + uint16_t i; + const char *test_buffer; + const struct rte_compressdev_capabilities *capab; + + capab = rte_compressdev_capability_get(0, RTE_COMP_ALGO_DEFLATE); + TEST_ASSERT(capab != NULL, "Failed to retrieve device capabilities"); + + for (i = 0; i < RTE_DIM(compress_test_bufs); i++) { + test_buffer = compress_test_bufs[0]; + + if (capab->comp_feature_flags & RTE_COMP_FF_OOP_SGL_IN_LB_OUT) { + /* Compress with compressdev, decompress with Zlib*/ + if (test_deflate_comp_decomp(&test_buffer, 1, + &i, + &ts_params->def_comp_xform, + &ts_params->def_decomp_xform, + 1, + RTE_COMP_OP_STATELESS, + SGL_TO_LB, + ZLIB_DECOMPRESS) < 0) + return TEST_FAILED; + + /* Compress with Zlib, decompress with compressdev*/ + if (test_deflate_comp_decomp(&test_buffer, 1, + &i, + &ts_params->def_comp_xform, + &ts_params->def_decomp_xform, + 1, + RTE_COMP_OP_STATELESS, + SGL_TO_LB, + ZLIB_COMPRESS) < 0) + return TEST_FAILED; + } + + if (capab->comp_feature_flags & RTE_COMP_FF_OOP_LB_IN_SGL_OUT) { + /* Compress with compressdev, decompress with Zlib*/ + if (test_deflate_comp_decomp(&test_buffer, 1, + &i, + &ts_params->def_comp_xform, + &ts_params->def_decomp_xform, + 1, + RTE_COMP_OP_STATELESS, + LB_TO_SGL, + ZLIB_DECOMPRESS) < 0) + return TEST_FAILED; + + /* Compress with Zlib, decompress with compressdev*/ + if (test_deflate_comp_decomp(&test_buffer, 1, + &i, + &ts_params->def_comp_xform, + &ts_params->def_decomp_xform, + 1, + RTE_COMP_OP_STATELESS, + LB_TO_SGL, + ZLIB_COMPRESS) < 0) + return TEST_FAILED; + } + } + + return TEST_SUCCESS; +} + static struct unit_test_suite compressdev_testsuite = { .suite_name = "compressdev unit test suite", .setup = testsuite_setup, @@ -1788,6 +1868,9 @@ static struct unit_test_suite compressdev_testsuite = { test_compressdev_deflate_stateless_checksum), TEST_CASE_ST(generic_ut_setup, generic_ut_teardown, test_compressdev_out_of_space_buffer), + TEST_CASE_ST(generic_ut_setup, generic_ut_teardown, + test_compressdev_deflate_stateless_varied_buf), + TEST_CASES_END() /**< NULL terminate unit test array */ } };