summaryrefslogtreecommitdiff
path: root/test/liberasurecode_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/liberasurecode_test.c')
-rw-r--r--test/liberasurecode_test.c52
1 files changed, 50 insertions, 2 deletions
diff --git a/test/liberasurecode_test.c b/test/liberasurecode_test.c
index e92795e..d1ad516 100644
--- a/test/liberasurecode_test.c
+++ b/test/liberasurecode_test.c
@@ -177,6 +177,31 @@ int *create_skips_array(struct ec_args *args, int skip)
return buf;
}
+static int create_fake_frags_no_meta(char ***array, int num_frags,
+ const char *data, int data_len)
+{
+ int _num_frags = 0;
+ int i = 0;
+ char **ptr = NULL;
+
+ *array = malloc(num_frags * sizeof(char *));
+ if (array == NULL) {
+ _num_frags = -1;
+ goto out;
+ }
+
+ // add data and parity frags
+ ptr = *array;
+ for (i = 0; i < num_frags; i++) {
+ *ptr = (char *) malloc(data_len);
+ strncpy(*ptr++, data, data_len);
+ _num_frags++;
+ }
+
+out:
+ return _num_frags;
+}
+
static int create_frags_array(char ***array,
char **data,
char **parity,
@@ -391,6 +416,7 @@ static void test_decode_invalid_args()
int *skips = create_skips_array(&null_args, -1);
char *decoded_data = NULL;
uint64_t decoded_data_len = 0;
+ const char *fake_data = " ";
desc = liberasurecode_instance_create(EC_BACKEND_NULL, &null_args);
if (-EBACKENDNOTAVAIL == desc) {
@@ -398,12 +424,34 @@ static void test_decode_invalid_args()
return;
}
assert(desc > 0);
+
+ // test with invalid fragments (no metadata headers)
+ num_avail_frags = create_fake_frags_no_meta(&avail_frags, (null_args.k +
+ null_args.m),
+ fake_data, strlen(fake_data));
+ assert(num_avail_frags > 0);
+
+ rc = liberasurecode_decode(desc, avail_frags, num_avail_frags,
+ strlen(fake_data), 1,
+ &decoded_data, &decoded_data_len);
+ assert(rc == -EBADHEADER);
+
+ // test with num_fragments < (k)
+ num_avail_frags = create_fake_frags_no_meta(&avail_frags, (null_args.k - 1),
+ " ", 1);
+ assert(num_avail_frags > 0);
+ rc = liberasurecode_decode(desc, avail_frags, num_avail_frags,
+ strlen(fake_data), 1,
+ &decoded_data, &decoded_data_len);
+ assert(rc == -EINSUFFFRAGS);
+
rc = liberasurecode_encode(desc, orig_data, orig_data_size,
&encoded_data, &encoded_parity, &encoded_fragment_len);
- assert(0 == rc);
+ assert(rc == 0);
num_avail_frags = create_frags_array(&avail_frags, encoded_data,
encoded_parity, &null_args, skips);
+ assert(num_avail_frags > 0);
rc = liberasurecode_decode(-1, avail_frags, num_avail_frags,
encoded_fragment_len, 1,
@@ -698,7 +746,7 @@ static void encode_decode_test_impl(const ec_backend_id_t be_id,
num_avail_frags = create_frags_array(&avail_frags, encoded_data,
encoded_parity, args, skip);
- assert(num_avail_frags != -1);
+ assert(num_avail_frags > 0);
rc = liberasurecode_decode(desc, avail_frags, num_avail_frags,
encoded_fragment_len, 1,
&decoded_data, &decoded_data_len);