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 +}  | 
