diff options
Diffstat (limited to 'tests/geo-rep/geo-rep-helper.rc')
-rw-r--r-- | tests/geo-rep/geo-rep-helper.rc | 296 |
1 files changed, 296 insertions, 0 deletions
diff --git a/tests/geo-rep/geo-rep-helper.rc b/tests/geo-rep/geo-rep-helper.rc new file mode 100644 index 00000000000..de8a6817305 --- /dev/null +++ b/tests/geo-rep/geo-rep-helper.rc @@ -0,0 +1,296 @@ +#!/bin/bash + +function geo_rep_checkpoint_status() +{ + echo "Verifying the sync status using geo-rep checkpoint" >> $LOG_FILE + local timeout=300 + local temp_status="NOTOK" + echo "setting the checkpoint" >> $LOG_FILE + + $CLI volume geo-rep $GMV0 $H0::$GSV0 config checkpoint now >> $LOG_FILE 2>&1 + +# There is a bug, where in after checkpoint set, geo-rep status still +# shows the old data for the first execution of geo-rep status. Running +#geo-rep status to clear that. + $CLI volume geo-replication $GMV0 $H0::$GSV0 status >> $LOG_FILE 2>&1 + + while [ $timeout -gt 0 ] && [ $temp_status == "NOTOK" ]; + do + $CLI volume geo-replication $GMV0 $H0::$GSV0 status | \ + egrep -i "not reached yet" 2>&1 >/dev/null + test $? -ne 0 && temp_status="completed" + echo "Waiting for the files to sync ..." >> $LOG_FILE + sleep 20 + timeout=`expr $timeout - 20` + echo "temp_status is $temp_status" >> $LOG_FILE + echo "geo-rep status output:" >> $LOG_FILE + $CLI volume geo-replication $GMV0 $H0::$GSV0 status detail >> \ + $LOG_FILE 2>&1 + + done + + echo "resetting the geo-rep checkpoint" >> $LOG_FILE + $CLI volume geo-rep $GMV0 $H0::$GSV0 config \!checkpoint >> $LOG_FILE 2>&1 + + if test $temp_status = "completed" ; then + echo "geo-rep checkpoint has completed" >> $LOG_FILE + return 0 + elif test $temp_status = "NOTOK" ; then + echo "geo-rep checkpoint has failed to complete within 300 seconds" >> \ + $LOG_FILE + return 1 + fi +} + + + +function geo_rep_arequal_status() +{ + + echo "Verifying the sync status using arequal" >> $LOG_FILE + local timeout=300 + local temp_status="NOTOK" + local comp_arequal="$(dirname $0)/compare-arequal.py" + + while [ $timeout -gt 0 ] && [ $temp_status == "NOTOK" ]; + do + echo "Waiting for the files to sync ..." >> $LOG_FILE + sleep 20 + timeout=`expr $timeout - 20` + + echo "calculating and comparing arequal checksum between $GMV0 and \ +$GSV0 " >> $LOG_FILE + python $comp_arequal $H0::$GMV0 $H0::$GSV0 >> $LOG_FILE 2>&1 + + local ret=$? + # There is a bug, where sometimes metadata checksum of directories + # and regular files don't match. This is to avoid that for now. + if [[ $ret -eq 0 || $ret -eq 67 || $ret -eq 68 ]] ;then + temp_status="completed" + fi + + done + + if test $temp_status = "completed" ; then + echo "checksum between master and slave match " >> $LOG_FILE + return 0 + elif test $temp_status = "NOTOK" ; then + echo "checksum between master and slave doesn't match" >> $LOG_FILE + return 1 + fi +} + + +function geo_rep_filecount_status() +{ + + echo "Verifying the sync status through files count" >> $LOG_FILE + local timeout=300 + local temp_status="NOTOK" + local comp_arequal="$(dirname $0)/compare-arequal.py" + + while [ $timeout -gt 0 ] && [ $temp_status == "NOTOK" ]; + do + echo "Waiting for the files to sync ..." >> $LOG_FILE + sleep 20 + timeout=`expr $timeout - 20` + + echo "calculating and comparing files count between $GMV0 and \ +$GSV0 " >> $LOG_FILE + python $comp_arequal -c "find" $H0::$GMV0 $H0::$GSV0 >> $LOG_FILE 2>&1 + + if [ $? -eq 0 ];then + temp_status="completed" + fi + + done + + if test $temp_status = "completed" ; then + echo "files count between master and slave match " >> $LOG_FILE + return 0 + elif test $temp_status = "NOTOK" ; then + echo "files count between master and slave doesn't match" >> $LOG_FILE + return 1 + fi +} + + + +function check_status_arequal() +{ +# checkpoint is failing to reach even though all the files got synced in the latest build. +# Hence not using checkpoint to check for sync status. +# geo_rep_checkpoint_status + local comp_arequal="$(dirname $0)/compare-arequal.py" + local comp_gfid="$(dirname $0)/compare-gfid.py" + + geo_rep_filecount_status + + geo_rep_arequal_status + + echo "calculating and comparing gfids between $GMV0 and $GSV0 " \ + >> $LOG_FILE + python $comp_gfid $H0::$GMV0 $H0::$GSV0 >> $LOG_FILE 2>&1 + + if [ $? != 0 ]; then + return 1 + else + echo "gfids between master and slave match" >> $LOG_FILE + fi + + echo "calculating and comparing arequal checksum between $GMV0 and $GSV0 " \ + >> $LOG_FILE + python $comp_arequal $H0::$GMV0 $H0::$GSV0 >> $LOG_FILE 2>&1 + + local rett=$? + + if [[ $rett -eq 0 || $rett -eq 67 || $rett -eq 68 ]] ;then + reta=0 + else + reta=1 + fi + + return $reta + +} + + + + +function create_data() +{ + fop=$1 + MNT_PNT=$2 + create_data="$(dirname $0)/../utils/create-files.py" + + if [ $DIR_STR == "MULTI" ];then + + python $create_data -n $nf --multi -b 10 -d 10 --random --max=2K \ + --min=1K -t $FILE_TYPE --fop=$fop $MNT_PNT >> $LOG_FILE 2>&1 + + elif [ $DIR_STR == "SINGLE" ];then + + python $create_data -n $ns --random --max=2K --min=1K -t $FILE_TYPE \ + --fop=$fop $MNT_PNT >> $LOG_FILE 2>&1 + + else + + echo "Wrong option for the create-files" >> $LOG_FILE + + fi + +} + + +function result() +{ + +local ret=$1 +local test=$2 +if [ $ret -ne 0 ]; then + echo -e "\n[ FAIL ] : $test has failed" >> $LOG_FILE + exit 1 +else + echo -e "\n[ PASS ] : $test has passed" >> $LOG_FILE +fi + +} + + +## hybrid crawl test-cases + +function hybrid_mode_test() +{ + local FOP=$1 + local MNT_PNT=$2 + echo -e "\n:::::::::::::::::::::::" >> $LOG_FILE + echo "Start of hybrid-mode-$DIR_STR-$FILE_TYPE-$FOP-test with \ +$MNT_PNT client" >> $LOG_FILE + echo -e ":::::::::::::::::::::::\n" >> $LOG_FILE + + local ret=0 + echo "stopping geo-rep session before creating data" >> $LOG_FILE + + $CLI volume geo-rep $GMV0 $H0::$GSV0 stop force >> $LOG_FILE 2>&1 + + if [ $? -ne 0 ]; then + echo "stopping geo-rep session has failed" >> $LOG_FILE + return 1 + fi + + create_data $FOP $MNT_PNT + + $CLI volume geo-rep $GMV0 $H0::$GSV0 start >> $LOG_FILE 2>&1 + + if [ $? -ne 0 ]; then + echo "starting geo-rep session has failed" >> $LOG_FILE + return 1 + fi + + check_status_arequal + + if [ $? -ne 0 ]; then + ret=1 + fi + + result $ret "hybrid-mode-$DIR_STR-$FILE_TYPE-$FOP-test with $CLIENT client" + + return $ret + +} + +#### Changelog based test-cases + +function changelog_mode_test() +{ + local FOP=$1 + local MNT_PNT=$2 + echo -e "\n:::::::::::::::::::::::" >> $LOG_FILE + echo "Start of changelog-mode-$DIR_STR-$FILE_TYPE-$FOP-test with \ +$MNT_PNT client" >> $LOG_FILE + echo -e ":::::::::::::::::::::::\n" >> $LOG_FILE + + local ret=0 + + create_data $FOP $MNT_PNT + + check_status_arequal + + if [ $? -ne 0 ]; then + ret=1 + fi + + result $ret "basic-changelog-$DIR_STR-$FILE_TYPE-$FOP-test with $CLIENT \ +client" + + return $ret +} + + +function changelog_mode_remove_test() +{ + MNT_PNT=$1 + + echo -e "\n:::::::::::::::::::::::" >> $LOG_FILE + echo "Start of changelog-mode-$DIR_STR-$FILE_TYPE-remove-test with \ +$MNT_PNT client" >> $LOG_FILE + echo -e ":::::::::::::::::::::::\n" >> $LOG_FILE + + local ret=0 + + if [ ! -z $MNT_PNT ]; then + rm -rvf $MNT_PNT >> $LOG_FILE + else + echo "Value of MNT_PNT is NULL" >> $LOG_FILE + fi + + check_status_arequal + if [ $? -ne 0 ]; then + ret=1 + fi + + result $ret "chnagelog-mode-$DIR_STR-$FILE_TYPE-remove-test with \ +$MNT_PNT client" + + return $ret +} |