@@ -1620,6 +1620,54 @@ static void test_flat_xor_hd3_init_failure(void)
16201620 }
16211621}
16221622
1623+ static void test_flat_xor_too_many_failures (void )
1624+ {
1625+ int desc = -1 ;
1626+ int orig_data_size = 1024 * 1024 ;
1627+ char * orig_data = NULL ;
1628+ char * * encoded_data = NULL , * * encoded_parity = NULL ;
1629+ uint64_t encoded_fragment_len = 0 ;
1630+ uint64_t decoded_data_len = 0 ;
1631+ char * decoded_data = NULL ;
1632+ char * * avail_frags = NULL ;
1633+ int num_avail_frags = 0 ;
1634+ int rc = -1 ;
1635+ struct ec_args bad_args [] = {
1636+ {.k = 5 , .m = 5 , .hd = 3 },
1637+ {.k = 5 , .m = 5 , .hd = 4 },
1638+ };
1639+ int * skip = create_skips_array (bad_args ,-1 );
1640+ skip [0 ] = skip [1 ] = skip [2 ] = skip [3 ] = 1 ;
1641+
1642+ for (int i = 0 ; i < sizeof (bad_args )/sizeof (bad_args [0 ]); ++ i ) {
1643+ desc = liberasurecode_instance_create (
1644+ EC_BACKEND_FLAT_XOR_HD , & bad_args [i ]);
1645+ assert (desc > 0 );
1646+ orig_data = create_buffer (orig_data_size , 'x' );
1647+ assert (orig_data != NULL );
1648+ rc = liberasurecode_encode (desc , orig_data , orig_data_size ,
1649+ & encoded_data , & encoded_parity , & encoded_fragment_len );
1650+ assert (0 == rc );
1651+
1652+ num_avail_frags = create_frags_array (& avail_frags , encoded_data ,
1653+ encoded_parity , & bad_args [i ], skip );
1654+ assert (num_avail_frags > 0 );
1655+ rc = liberasurecode_decode (desc , avail_frags , num_avail_frags ,
1656+ encoded_fragment_len , 1 ,
1657+ & decoded_data , & decoded_data_len );
1658+ assert (-1 == rc );
1659+ assert (decoded_data == NULL );
1660+ assert (decoded_data_len == 0 );
1661+ rc = liberasurecode_encode_cleanup (desc , encoded_data , encoded_parity );
1662+ assert (rc == 0 );
1663+
1664+ assert (0 == liberasurecode_instance_destroy (desc ));
1665+ free (orig_data );
1666+ free (avail_frags );
1667+ }
1668+ free (skip );
1669+ }
1670+
16231671static void test_simple_encode_decode (const ec_backend_id_t be_id ,
16241672 struct ec_args * args )
16251673{
@@ -1955,6 +2003,7 @@ struct testcase testcases[] = {
19552003 // Flat XOR backend tests
19562004 TEST_SUITE (EC_BACKEND_FLAT_XOR_HD ),
19572005 TEST ({.no_args = test_flat_xor_hd3_init_failure }, EC_BACKENDS_MAX , 0 ),
2006+ TEST ({.no_args = test_flat_xor_too_many_failures }, EC_BACKENDS_MAX , 0 ),
19582007 // Jerasure RS Vand backend tests
19592008 TEST_SUITE (EC_BACKEND_JERASURE_RS_VAND ),
19602009 TEST ({.no_args = test_jerasure_rs_vand_simple_encode_decode_over32 }, EC_BACKENDS_MAX , 0 ),
0 commit comments