pyeclib/test/ec_pyeclib_file_test.sh

95 lines
3.1 KiB
Bash
Executable File

#!/bin/bash
# Copyright (c) 2013, Kevin Greenan (kmgreen2@gmail.com)
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
#
# Redistributions in binary form must reproduce the above copyright notice, this
# list of conditions and the following disclaimer in the documentation and/or
# other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY
# THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
# EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
# OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
FILE_DIR=./test_files
DECODED_DIR=./decoded_files
FRAGMENT_DIR=./test_fragments
FILES=`echo ${FILE_DIR}`
TOOLS_DIR=../tools
if [ ! -d ${DECODED_DIR} ]; then
mkdir ${DECODED_DIR}
fi
if [ ! -d ${FRAGMENT_DIR} ]; then
mkdir ${FRAGMENT_DIR}
fi
TYPES="
jerasure_rs_vand
jerasure_rs_cauchy
flat_xor_hd_3
flat_xor_hd_4
isa_l_rs_vand
liberasurecode_rs_vand
"
NUM_DATAS="10 11 12"
RS_NUM_PARITIES="2 3 4"
XOR_NUM_PARITIES="6"
# Weird stuff happens when we try to rebuild and
# are beyond the FT of the code... Make it fail
# gracefully
for TYPE in ${TYPES}; do
for NUM_DATA in ${NUM_DATAS}; do
rm ${DECODED_DIR}/*
rm ${FRAGMENT_DIR}/*
NUM_PARITIES=${RS_NUM_PARITIES}
if [[ ${TYPE} == "flat_xor_hd"* ]]; then
NUM_PARITIES=${XOR_NUM_PARITIES}
fi
for NUM_PARITY in ${NUM_PARITIES}; do
let NUM_TOTAL=$(( NUM_DATA + NUM_PARITY))
FAULT_TOL=${NUM_PARITY}
if [[ ${TYPE} == "flat_xor_hd"* ]]; then
FAULT_TOL="2"
fi
for file in `cd ${FILES}; echo *; cd ..`; do
python ${TOOLS_DIR}/pyeclib_encode.py ${NUM_DATA} ${NUM_PARITY} ${TYPE} ${FILE_DIR} ${file} ${FRAGMENT_DIR}
done
for file in `cd ${FILES}; echo *; cd ..`; do
fragments=( `echo ${FRAGMENT_DIR}/${file}.*` )
let i=0
while (( $i < ${FAULT_TOL} )); do
index=$(( RANDOM % NUM_TOTAL ))
fragments[${index}]=""
let i=$i+1
done
python ${TOOLS_DIR}/pyeclib_decode.py ${NUM_DATA} ${NUM_PARITY} ${TYPE} ${fragments[*]} ${DECODED_DIR}/${file}
diff ${FILE_DIR}/${file} ${DECODED_DIR}/${file}.decoded
if [[ $? != 0 ]]; then
echo "${FILE_DIR}/${file} != ${DECODED_DIR}/${file}.decoded"
exit 1
fi
done
done
done
done
rm ${DECODED_DIR}/*
rm ${FRAGMENT_DIR}/*