diff options
author | Tushar Gohad <tushar.gohad@intel.com> | 2015-03-28 16:23:11 -0700 |
---|---|---|
committer | Tushar Gohad <tushar.gohad@intel.com> | 2015-03-28 22:33:45 -0700 |
commit | 9a24890f9c45e09e6f00ff58e437cc971653c8d9 (patch) | |
tree | 1d5c727482eaab4d98ef32fc3e693facb3a9fe5e /test | |
parent | a2f17bcd63006e24da1090587bae193a3a16bab8 (diff) | |
download | liberasurecode-9a24890f9c45e09e6f00ff58e437cc971653c8d9.tar.gz |
Sanitize fragments_to_string() errorcodes, add tests for frags w/o fmetadata
Addresses issue#10
Diffstat (limited to 'test')
-rw-r--r-- | test/liberasurecode_test.c | 52 |
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); |