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 <marko.kovace...@intel.com>
---
 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 */
        }
 };
-- 
2.9.5

Reply via email to