Add liberasurecode_rs_vand test cases
This commit is contained in:
@@ -26,6 +26,7 @@ from string import ascii_letters, ascii_uppercase, digits
|
|||||||
import sys
|
import sys
|
||||||
import tempfile
|
import tempfile
|
||||||
import unittest
|
import unittest
|
||||||
|
from pyeclib.ec_iface import ECBackendNotSupported
|
||||||
from pyeclib.ec_iface import ECDriverError
|
from pyeclib.ec_iface import ECDriverError
|
||||||
from pyeclib.ec_iface import ECInsufficientFragments
|
from pyeclib.ec_iface import ECInsufficientFragments
|
||||||
|
|
||||||
@@ -117,13 +118,26 @@ class TestPyECLibDriver(unittest.TestCase):
|
|||||||
else:
|
else:
|
||||||
_instance = ECDriver(k=10, m=5, ec_type=_type)
|
_instance = ECDriver(k=10, m=5, ec_type=_type)
|
||||||
except ECDriverError:
|
except ECDriverError:
|
||||||
self.fail("%s algorithm not supported" % _type)
|
self.fail("%p: %s algorithm not supported" % _instance, _type)
|
||||||
|
|
||||||
|
self.assertRaises(ECBackendNotSupported, ECDriver, k=10, m=5,
|
||||||
|
ec_type="invalid_algo")
|
||||||
|
|
||||||
def test_small_encode(self):
|
def test_small_encode(self):
|
||||||
pyeclib_drivers = []
|
pyeclib_drivers = []
|
||||||
pyeclib_drivers.append(ECDriver(k=12, m=2, ec_type="jerasure_rs_vand"))
|
pyeclib_drivers.append(ECDriver(k=12, m=2, ec_type="jerasure_rs_vand"))
|
||||||
pyeclib_drivers.append(ECDriver(k=11, m=2, ec_type="jerasure_rs_vand"))
|
pyeclib_drivers.append(ECDriver(k=11, m=2, ec_type="jerasure_rs_vand"))
|
||||||
pyeclib_drivers.append(ECDriver(k=10, m=2, ec_type="jerasure_rs_vand"))
|
pyeclib_drivers.append(ECDriver(k=10, m=2, ec_type="jerasure_rs_vand"))
|
||||||
|
pyeclib_drivers.append(ECDriver(k=8, m=4, ec_type="jerasure_rs_vand"))
|
||||||
|
|
||||||
|
pyeclib_drivers.append(ECDriver(k=12, m=2,
|
||||||
|
ec_type="liberasurecode_rs_vand"))
|
||||||
|
pyeclib_drivers.append(ECDriver(k=11, m=2,
|
||||||
|
ec_type="liberasurecode_rs_vand"))
|
||||||
|
pyeclib_drivers.append(ECDriver(k=10, m=2,
|
||||||
|
ec_type="liberasurecode_rs_vand"))
|
||||||
|
pyeclib_drivers.append(ECDriver(k=8, m=4,
|
||||||
|
ec_type="liberasurecode_rs_vand"))
|
||||||
|
|
||||||
encode_strs = [b"a", b"hello", b"hellohyhi", b"yo"]
|
encode_strs = [b"a", b"hello", b"hellohyhi", b"yo"]
|
||||||
|
|
||||||
@@ -196,80 +210,97 @@ class TestPyECLibDriver(unittest.TestCase):
|
|||||||
# pyeclib_driver.verify_stripe_metadata(fragment_metadata_list) == -1)
|
# pyeclib_driver.verify_stripe_metadata(fragment_metadata_list) == -1)
|
||||||
#
|
#
|
||||||
|
|
||||||
def get_available_backend(self, k, m, ec_type, chksum_type = "inline_crc32"):
|
def check_metadata_formatted(self, k, m, ec_type, chksum_type):
|
||||||
if ec_type[:11] == "flat_xor_hd":
|
|
||||||
return ECDriver(k=k, m=m, ec_type="flat_xor_hd", chksum_type=chksum_type)
|
|
||||||
elif ec_type in self.available_backends:
|
|
||||||
return ECDriver(k=k, m=m, ec_type=ec_type, chksum_type=chksum_type)
|
|
||||||
else:
|
|
||||||
return None
|
|
||||||
|
|
||||||
def test_get_metadata_formatted(self):
|
|
||||||
pyeclib_driver = ECDriver(k=12, m=2, ec_type="jerasure_rs_vand", chksum_type="inline_crc32")
|
|
||||||
|
|
||||||
filesize = 1024 * 1024 * 3
|
filesize = 1024 * 1024 * 3
|
||||||
file_str = ''.join(random.choice(ascii_letters) for i in range(filesize))
|
file_str = ''.join(random.choice(ascii_letters)
|
||||||
|
for i in range(filesize))
|
||||||
file_bytes = file_str.encode('utf-8')
|
file_bytes = file_str.encode('utf-8')
|
||||||
|
|
||||||
|
pyeclib_driver = ECDriver(k=k, m=m, ec_type=ec_type,
|
||||||
|
chksum_type=chksum_type)
|
||||||
|
|
||||||
fragments = pyeclib_driver.encode(file_bytes)
|
fragments = pyeclib_driver.encode(file_bytes)
|
||||||
|
|
||||||
i = 0
|
f = 0
|
||||||
for fragment in fragments:
|
for fragment in fragments:
|
||||||
metadata = pyeclib_driver.get_metadata(fragment, 1)
|
metadata = pyeclib_driver.get_metadata(fragment, 1)
|
||||||
if metadata.has_key('index'):
|
if 'index' in metadata:
|
||||||
self.assertEqual(metadata['index'], i)
|
self.assertEqual(metadata['index'], f)
|
||||||
else:
|
else:
|
||||||
self.assertTrue(false)
|
self.assertTrue(False)
|
||||||
|
|
||||||
if metadata.has_key('chksum_mismatch'):
|
if 'chksum_mismatch' in metadata:
|
||||||
self.assertEqual(metadata['chksum_mismatch'], 0)
|
self.assertEqual(metadata['chksum_mismatch'], 0)
|
||||||
else:
|
else:
|
||||||
self.assertTrue(false)
|
self.assertTrue(False)
|
||||||
|
|
||||||
if metadata.has_key('backend_id'):
|
if 'backend_id' in metadata:
|
||||||
self.assertEqual(metadata['backend_id'], 'jerasure_rs_vand')
|
self.assertEqual(metadata['backend_id'], ec_type)
|
||||||
else:
|
else:
|
||||||
self.assertTrue(false)
|
self.assertTrue(False)
|
||||||
|
|
||||||
if metadata.has_key('orig_data_size'):
|
if 'orig_data_size' in metadata:
|
||||||
self.assertEqual(metadata['orig_data_size'], 3145728)
|
self.assertEqual(metadata['orig_data_size'], 3145728)
|
||||||
else:
|
else:
|
||||||
self.assertTrue(false)
|
self.assertTrue(False)
|
||||||
|
|
||||||
if metadata.has_key('chksum_type'):
|
if 'chksum_type' in metadata:
|
||||||
self.assertEqual(metadata['chksum_type'], 'crc32')
|
self.assertEqual(metadata['chksum_type'], 'crc32')
|
||||||
else:
|
else:
|
||||||
self.assertTrue(false)
|
self.assertTrue(False)
|
||||||
|
|
||||||
if not metadata.has_key('backend_version'):
|
if 'backend_version' not in metadata:
|
||||||
self.assertTrue(false)
|
self.assertTrue(False)
|
||||||
|
|
||||||
if not metadata.has_key('chksum'):
|
if 'chksum' not in metadata:
|
||||||
self.assertTrue(false)
|
self.assertTrue(False)
|
||||||
|
|
||||||
if not metadata.has_key('size'):
|
if 'size' not in metadata:
|
||||||
self.assertTrue(false)
|
self.assertTrue(False)
|
||||||
|
|
||||||
i += 1
|
|
||||||
|
|
||||||
|
f += 1
|
||||||
|
|
||||||
|
def test_get_metadata_formatted(self):
|
||||||
|
self.check_metadata_formatted(12, 2, "jerasure_rs_vand",
|
||||||
|
"inline_crc32")
|
||||||
|
self.check_metadata_formatted(12, 2, "liberasurecode_rs_vand",
|
||||||
|
"inline_crc32")
|
||||||
|
self.check_metadata_formatted(8, 4, "liberasurecode_rs_vand",
|
||||||
|
"inline_crc32")
|
||||||
|
|
||||||
def test_verify_fragment_inline_chksum_fail(self):
|
def test_verify_fragment_inline_chksum_fail(self):
|
||||||
pyeclib_drivers = []
|
pyeclib_drivers = []
|
||||||
pyeclib_drivers.append(
|
pyeclib_drivers.append(
|
||||||
ECDriver(k=12, m=2, ec_type="jerasure_rs_vand", chksum_type="inline_crc32"))
|
ECDriver(k=12, m=2, ec_type="jerasure_rs_vand",
|
||||||
|
chksum_type="inline_crc32"))
|
||||||
pyeclib_drivers.append(
|
pyeclib_drivers.append(
|
||||||
ECDriver(k=12, m=3, ec_type="jerasure_rs_vand", chksum_type="inline_crc32"))
|
ECDriver(k=12, m=3, ec_type="jerasure_rs_vand",
|
||||||
|
chksum_type="inline_crc32"))
|
||||||
pyeclib_drivers.append(
|
pyeclib_drivers.append(
|
||||||
ECDriver(k=12, m=4, ec_type="jerasure_rs_vand", chksum_type="inline_crc32"))
|
ECDriver(k=12, m=4, ec_type="jerasure_rs_vand",
|
||||||
|
chksum_type="inline_crc32"))
|
||||||
pyeclib_drivers.append(
|
pyeclib_drivers.append(
|
||||||
ECDriver(k=12, m=2, ec_type="jerasure_rs_cauchy", chksum_type="inline_crc32"))
|
ECDriver(k=12, m=2, ec_type="jerasure_rs_cauchy",
|
||||||
|
chksum_type="inline_crc32"))
|
||||||
|
|
||||||
|
pyeclib_drivers.append(
|
||||||
|
ECDriver(k=12, m=2, ec_type="liberasurecode_rs_vand",
|
||||||
|
chksum_type="inline_crc32"))
|
||||||
|
pyeclib_drivers.append(
|
||||||
|
ECDriver(k=12, m=3, ec_type="liberasurecode_rs_vand",
|
||||||
|
chksum_type="inline_crc32"))
|
||||||
|
pyeclib_drivers.append(
|
||||||
|
ECDriver(k=12, m=4, ec_type="liberasurecode_rs_vand",
|
||||||
|
chksum_type="inline_crc32"))
|
||||||
|
pyeclib_drivers.append(
|
||||||
|
ECDriver(k=12, m=2, ec_type="liberasurecode_rs_vand",
|
||||||
|
chksum_type="inline_crc32"))
|
||||||
|
|
||||||
filesize = 1024 * 1024 * 3
|
filesize = 1024 * 1024 * 3
|
||||||
file_str = ''.join(random.choice(ascii_letters) for i in range(filesize))
|
file_str = ''.join(random.choice(ascii_letters) for i in range(filesize))
|
||||||
file_bytes = file_str.encode('utf-8')
|
file_bytes = file_str.encode('utf-8')
|
||||||
|
|
||||||
|
|
||||||
for pyeclib_driver in pyeclib_drivers:
|
for pyeclib_driver in pyeclib_drivers:
|
||||||
fragments = pyeclib_driver.encode(file_bytes)
|
fragments = pyeclib_driver.encode(file_bytes)
|
||||||
|
|
||||||
@@ -339,6 +370,12 @@ class TestPyECLibDriver(unittest.TestCase):
|
|||||||
ECDriver(k=11, m=2, ec_type="jerasure_rs_vand"))
|
ECDriver(k=11, m=2, ec_type="jerasure_rs_vand"))
|
||||||
pyeclib_drivers.append(
|
pyeclib_drivers.append(
|
||||||
ECDriver(k=10, m=2, ec_type="jerasure_rs_vand"))
|
ECDriver(k=10, m=2, ec_type="jerasure_rs_vand"))
|
||||||
|
pyeclib_drivers.append(
|
||||||
|
ECDriver(k=12, m=2, ec_type="liberasurecode_rs_vand"))
|
||||||
|
pyeclib_drivers.append(
|
||||||
|
ECDriver(k=11, m=2, ec_type="liberasurecode_rs_vand"))
|
||||||
|
pyeclib_drivers.append(
|
||||||
|
ECDriver(k=10, m=2, ec_type="liberasurecode_rs_vand"))
|
||||||
|
|
||||||
file_size = 1024 * 1024
|
file_size = 1024 * 1024
|
||||||
segment_size = 3 * 1024
|
segment_size = 3 * 1024
|
||||||
@@ -372,6 +409,12 @@ class TestPyECLibDriver(unittest.TestCase):
|
|||||||
ECDriver(k=11, m=2, ec_type="jerasure_rs_vand"))
|
ECDriver(k=11, m=2, ec_type="jerasure_rs_vand"))
|
||||||
pyeclib_drivers.append(
|
pyeclib_drivers.append(
|
||||||
ECDriver(k=10, m=2, ec_type="jerasure_rs_vand"))
|
ECDriver(k=10, m=2, ec_type="jerasure_rs_vand"))
|
||||||
|
pyeclib_drivers.append(
|
||||||
|
ECDriver(k=12, m=2, ec_type="liberasurecode_rs_vand"))
|
||||||
|
pyeclib_drivers.append(
|
||||||
|
ECDriver(k=11, m=2, ec_type="liberasurecode_rs_vand"))
|
||||||
|
pyeclib_drivers.append(
|
||||||
|
ECDriver(k=10, m=2, ec_type="liberasurecode_rs_vand"))
|
||||||
|
|
||||||
file_sizes = [
|
file_sizes = [
|
||||||
1024 * 1024,
|
1024 * 1024,
|
||||||
@@ -450,6 +493,12 @@ class TestPyECLibDriver(unittest.TestCase):
|
|||||||
ECDriver(k=12, m=6, ec_type="flat_xor_hd"))
|
ECDriver(k=12, m=6, ec_type="flat_xor_hd"))
|
||||||
pyeclib_drivers.append(
|
pyeclib_drivers.append(
|
||||||
ECDriver(k=10, m=5, ec_type="flat_xor_hd"))
|
ECDriver(k=10, m=5, ec_type="flat_xor_hd"))
|
||||||
|
pyeclib_drivers.append(
|
||||||
|
ECDriver(k=12, m=2, ec_type="liberasurecode_rs_vand"))
|
||||||
|
pyeclib_drivers.append(
|
||||||
|
ECDriver(k=8, m=6, ec_type="liberasurecode_rs_vand"))
|
||||||
|
pyeclib_drivers.append(
|
||||||
|
ECDriver(k=10, m=4, ec_type="liberasurecode_rs_vand"))
|
||||||
|
|
||||||
for pyeclib_driver in pyeclib_drivers:
|
for pyeclib_driver in pyeclib_drivers:
|
||||||
for file_size in self.file_sizes:
|
for file_size in self.file_sizes:
|
||||||
@@ -457,7 +506,6 @@ class TestPyECLibDriver(unittest.TestCase):
|
|||||||
tmp_file.seek(0)
|
tmp_file.seek(0)
|
||||||
whole_file_str = tmp_file.read()
|
whole_file_str = tmp_file.read()
|
||||||
whole_file_bytes = whole_file_str.encode('utf-8')
|
whole_file_bytes = whole_file_str.encode('utf-8')
|
||||||
got_exception = False
|
|
||||||
|
|
||||||
encode_input = whole_file_bytes
|
encode_input = whole_file_bytes
|
||||||
orig_fragments = pyeclib_driver.encode(encode_input)
|
orig_fragments = pyeclib_driver.encode(encode_input)
|
||||||
@@ -511,33 +559,32 @@ class TestPyECLibDriver(unittest.TestCase):
|
|||||||
fragments[i] = corrupted_fragment
|
fragments[i] = corrupted_fragment
|
||||||
i += 1
|
i += 1
|
||||||
|
|
||||||
try:
|
self.assertRaises(ECInsufficientFragments,
|
||||||
decoded_string = pyeclib_driver.decode(fragments[:], force_metadata_checks=True)
|
pyeclib_driver.decode,
|
||||||
except:
|
fragments[:], force_metadata_checks=True)
|
||||||
got_exception = True
|
|
||||||
self.assertTrue(got_exception)
|
|
||||||
|
|
||||||
def test_liberasurecode_error(self):
|
def get_available_backend(self, k, m, ec_type, chksum_type="inline_crc32"):
|
||||||
pyeclib_driver = self.get_available_backend(k=10, m=5, ec_type="flat_xor_hd_3")
|
if ec_type[:11] == "flat_xor_hd":
|
||||||
|
return ECDriver(k=k, m=m, ec_type="flat_xor_hd",
|
||||||
|
chksum_type=chksum_type)
|
||||||
|
elif ec_type in _available_backends:
|
||||||
|
return ECDriver(k=k, m=m, ec_type=ec_type, chksum_type=chksum_type)
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
def test_liberasurecode_insufficient_frags_error(self):
|
||||||
file_size = self.file_sizes[0]
|
file_size = self.file_sizes[0]
|
||||||
tmp_file = self.files[file_size]
|
tmp_file = self.files[file_size]
|
||||||
tmp_file.seek(0)
|
tmp_file.seek(0)
|
||||||
whole_file_str = tmp_file.read()
|
whole_file_str = tmp_file.read()
|
||||||
whole_file_bytes = whole_file_str.encode('utf-8')
|
whole_file_bytes = whole_file_str.encode('utf-8')
|
||||||
hit_exception = False
|
for ec_type in ['flat_xor_hd_3', 'liberasurecode_rs_vand']:
|
||||||
|
pyeclib_driver = self.get_available_backend(
|
||||||
|
k=10, m=5, ec_type=ec_type)
|
||||||
fragments = pyeclib_driver.encode(whole_file_bytes)
|
fragments = pyeclib_driver.encode(whole_file_bytes)
|
||||||
|
self.assertRaises(ECInsufficientFragments,
|
||||||
#
|
pyeclib_driver.reconstruct,
|
||||||
# Test reconstructor with insufficient fragments
|
[fragments[0]], [1, 2, 3, 4, 5, 6])
|
||||||
#
|
|
||||||
try:
|
|
||||||
pyeclib_driver.reconstruct([fragments[0]], [1, 2, 3, 4, 5, 6])
|
|
||||||
except ECInsufficientFragments as e:
|
|
||||||
hit_exception = True
|
|
||||||
self.assertTrue(e.error_str.__str__().find("Insufficient number of fragments") > -1)
|
|
||||||
|
|
||||||
self.assertTrue(hit_exception)
|
|
||||||
|
|
||||||
def test_min_parity_fragments_needed(self):
|
def test_min_parity_fragments_needed(self):
|
||||||
pyeclib_drivers = []
|
pyeclib_drivers = []
|
||||||
|
|||||||
Reference in New Issue
Block a user