> -----Original Message-----
> From: Kovacevic, Marko
> Sent: Friday, December 14, 2018 3:33 PM
> To: dev@dpdk.org
> Cc: akhil.goyal@nxp.com; Daly, Lee <lee.daly@intel.com>; Jozwiak, TomaszX
> <tomaszx.jozwiak@intel.com>; O'Hare, Cathal <cathal.ohare@intel.com>;
> Trahe, Fiona <fiona.trahe@intel.com>; Kovacevic, Marko
> <marko.kovacevic@intel.com>
> Subject: [PATCH v1 1/2] test/compress: add out of space test
>
> From: "Kovacevic, Marko" <marko.kovacevic@intel.com>
>
> 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 <marko.kovacevic@intel.com>
> ---
Acked-by: Lee Daly <lee.daly@intel.com>
@@ -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 */
}
};