summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorJim Cheung <jim.cheung@phazr.io>2017-01-23 13:55:24 -0800
committerjimcheung <jim.cheung@phazr.io>2017-02-28 11:14:11 -0800
commit06e50ea86b6de729fa5dbc23ef41af87b19e636a (patch)
treeace75bea1a47a5a380af8913923956fdcd693679 /test
parent0794b31c623e4cede76d66be730719d24debcca9 (diff)
downloadliberasurecode-06e50ea86b6de729fa5dbc23ef41af87b19e636a.tar.gz
Add Phazr.IO libphazr backend to liberasurecode
Currently, there are several implementations of erasure codes that are available within OpenStack Swift. Most, if not all, of which are based on the Reed Solomon coding algorithm. Phazr.IO’s Erasure Coding technology uses a patented algorithm which are significantly more efficient and improves the speed of coding, decoding and reconstruction. In addition, Phazr.IO Erasure Code use a non-systematic algorithm which provides data protection at rest and in transport without the need to use encryption. Please contact support@phazr.io for more info on our technology. Change-Id: I4e40d02a8951e38409ad3c604c5dd6f050fa7ea0
Diffstat (limited to 'test')
-rw-r--r--test/liberasurecode_test.c91
1 files changed, 86 insertions, 5 deletions
diff --git a/test/liberasurecode_test.c b/test/liberasurecode_test.c
index 8f89cd8..1a7dfc4 100644
--- a/test/liberasurecode_test.c
+++ b/test/liberasurecode_test.c
@@ -42,6 +42,7 @@
#define ISA_L_RS_CAUCHY_BACKEND "isa_l_rs_cauchy"
#define SHSS_BACKEND "shss"
#define RS_VAND_BACKEND "liberasurecode_rs_vand"
+#define LIBPHAZR_BACKEND "libphazr"
typedef void (*TEST_FUNC)();
@@ -222,6 +223,13 @@ struct ec_args *liberasurecode_rs_vand_test_args[] = {
&liberasurecode_rs_vand_48_args,
NULL };
+struct ec_args libphazr_args = {
+ .k = 4,
+ .m = 4,
+};
+
+struct ec_args *libphazr_test_args[] = { &libphazr_args, NULL };
+
struct ec_args **all_backend_tests[] = {
null_test_args,
flat_xor_test_args,
@@ -230,6 +238,7 @@ struct ec_args **all_backend_tests[] = {
isa_l_test_args,
shss_test_args,
liberasurecode_rs_vand_test_args,
+ libphazr_test_args,
NULL};
int num_backends()
@@ -288,6 +297,8 @@ char * get_name_from_backend_id(ec_backend_id_t be) {
return SHSS_BACKEND;
case EC_BACKEND_LIBERASURECODE_RS_VAND:
return RS_VAND_BACKEND;
+ case EC_BACKEND_LIBPHAZR:
+ return LIBPHAZR_BACKEND;
default:
return "UNKNOWN";
}
@@ -325,6 +336,9 @@ struct ec_args *create_ec_args(ec_backend_id_t be, ec_checksum_type_t ct, int ba
case EC_BACKEND_SHSS:
backend_args_array = shss_test_args;
break;
+ case EC_BACKEND_LIBPHAZR:
+ backend_args_array = libphazr_test_args;
+ break;
default:
return NULL;
}
@@ -932,10 +946,8 @@ static void encode_decode_test_impl(const ec_backend_id_t be_id,
int num_avail_frags = 0;
char *orig_data_ptr = NULL;
int remaining = 0;
- ec_backend_t be = NULL;
desc = liberasurecode_instance_create(be_id, args);
- be = liberasurecode_backend_instance_get_by_desc(desc);
if (-EBACKENDNOTAVAIL == desc) {
fprintf (stderr, "Backend library not available!\n");
@@ -970,14 +982,14 @@ static void encode_decode_test_impl(const ec_backend_id_t be_id,
fragment_metadata_t metadata = header->meta;
assert(metadata.idx == i);
- assert(metadata.size == encoded_fragment_len - frag_header_size - be->common.backend_metadata_size);
+ assert(metadata.size == encoded_fragment_len - frag_header_size - metadata.frag_backend_metadata_size);
assert(metadata.orig_data_size == orig_data_size);
assert(metadata.backend_id == be_id);
assert(metadata.chksum_mismatch == 0);
data_ptr = frag + frag_header_size;
cmp_size = remaining >= metadata.size ? metadata.size : remaining;
- // shss doesn't keep original data on data fragments
- if (be_id != EC_BACKEND_SHSS) {
+ // shss & libphazr doesn't keep original data on data fragments
+ if (be_id != EC_BACKEND_SHSS && be_id != EC_BACKEND_LIBPHAZR) {
assert(memcmp(data_ptr, orig_data_ptr, cmp_size) == 0);
}
remaining -= cmp_size;
@@ -2177,6 +2189,75 @@ struct testcase testcases[] = {
test_verify_stripe_metadata_frag_idx_invalid,
EC_BACKEND_LIBERASURECODE_RS_VAND, CHKSUM_CRC32,
.skip = false},
+ // libphazr backend tests
+ {"create_and_destroy_backend",
+ test_create_and_destroy_backend,
+ EC_BACKEND_LIBPHAZR, CHKSUM_NONE,
+ .skip = false},
+ {"simple_encode_libphazr",
+ test_simple_encode_decode,
+ EC_BACKEND_LIBPHAZR, CHKSUM_NONE,
+ .skip = false},
+ {"decode_with_missing_data_libphazr",
+ test_decode_with_missing_data,
+ EC_BACKEND_LIBPHAZR, CHKSUM_NONE,
+ .skip = false},
+ {"decode_with_missing_parity_libphazr",
+ test_decode_with_missing_parity,
+ EC_BACKEND_LIBPHAZR, CHKSUM_NONE,
+ .skip = false},
+ {"decode_with_missing_multi_data_libphazr",
+ test_decode_with_missing_multi_data,
+ EC_BACKEND_LIBPHAZR, CHKSUM_NONE,
+ .skip = false},
+ {"decode_with_missing_multi_parity_libphazr",
+ test_decode_with_missing_multi_parity,
+ EC_BACKEND_LIBPHAZR, CHKSUM_NONE,
+ .skip = false},
+ {"test_decode_with_missing_multi_data_parity_libphazr",
+ test_decode_with_missing_multi_data_parity,
+ EC_BACKEND_LIBPHAZR, CHKSUM_NONE,
+ .skip = false},
+ {"simple_reconstruct_libphazr",
+ test_simple_reconstruct,
+ EC_BACKEND_LIBPHAZR, CHKSUM_NONE,
+ .skip = false},
+ {"test_fragments_needed_libphazr",
+ test_fragments_needed,
+ EC_BACKEND_LIBPHAZR, CHKSUM_NONE,
+ .skip = false},
+ {"test_get_fragment_metadata_libphazr",
+ test_get_fragment_metadata,
+ EC_BACKEND_LIBPHAZR, CHKSUM_NONE,
+ .skip = false},
+ {"test_get_fragment_metadata_libphazr_crc32",
+ test_get_fragment_metadata,
+ EC_BACKEND_LIBPHAZR, CHKSUM_CRC32,
+ .skip = false},
+ {"test_verify_stripe_metadata",
+ test_verify_stripe_metadata,
+ EC_BACKEND_LIBPHAZR, CHKSUM_CRC32,
+ .skip = false},
+ {"test_verify_stripe_metadata_libec_mismatch",
+ test_verify_stripe_metadata_libec_mismatch,
+ EC_BACKEND_LIBPHAZR, CHKSUM_CRC32,
+ .skip = false},
+ {"test_verify_stripe_metadata_magic_mismatch",
+ test_verify_stripe_metadata_magic_mismatch,
+ EC_BACKEND_LIBPHAZR, CHKSUM_CRC32,
+ .skip = false},
+ {"test_verify_stripe_metadata_be_id_mismatch",
+ test_verify_stripe_metadata_be_id_mismatch,
+ EC_BACKEND_LIBPHAZR, CHKSUM_CRC32,
+ .skip = false},
+ {"test_verify_stripe_metadata_be_ver_mismatch",
+ test_verify_stripe_metadata_be_ver_mismatch,
+ EC_BACKEND_LIBPHAZR, CHKSUM_CRC32,
+ .skip = false},
+ {"test_verify_stripe_metadata_frag_idx_invalid",
+ test_verify_stripe_metadata_frag_idx_invalid,
+ EC_BACKEND_LIBPHAZR, CHKSUM_CRC32,
+ .skip = false},
{ NULL, NULL, 0, 0, false },
};