Added timed execution tests for v1.1 branch

This commit is contained in:
deajan 2016-11-30 12:56:25 +01:00
parent fd204349fb
commit 92f95e309a
1 changed files with 168 additions and 55 deletions

View File

@ -5,7 +5,9 @@
## On Mac OSX, this needs to be run as root in order to use sudo without password ## On Mac OSX, this needs to be run as root in order to use sudo without password
## From current terminal run sudo -s in order to get a new terminal as root ## From current terminal run sudo -s in order to get a new terminal as root
# osync test suite 2016112108 ## On CYGWIN / MSYS, ACL and extended attributes aren't supported
# osync test suite 2016113002
# 4 tests: # 4 tests:
# quicklocal # quicklocal
@ -23,13 +25,14 @@
# replica lock checks # replica lock checks
# file attribute tests # file attribute tests
# local / remote locking resume tests # local / remote locking resume tests
# timed execution tests
# function test # function test
# WaitForTaskCompletion # WaitForTaskCompletion
# ParallelExec # ParallelExec
# daemon mode tests for both config files # daemon mode tests for both config files
#TODO: on BSD, remount UFS with ACL support using mount -o acls / # on BSD, remount UFS with ACL support using mount -o acls /
# setfacl needs double ':' to be compatible with both linux and BSD # setfacl needs double ':' to be compatible with both linux and BSD
# setfacl -m o::rwx file # setfacl -m o::rwx file
@ -78,26 +81,6 @@ OSYNC_IS_STABLE=maybe
# Setup an array with all function modes # Setup an array with all function modes
#declare -Ag osyncParameters #declare -Ag osyncParameters
readonly __quickLocal=0
readonly __quickRemote=1
readonly __confLocal=2
readonly __confRemote=3
osyncParameters=()
osyncParameters[$__quickLocal]="--initiator=$INITIATOR_DIR --target=$TARGET_DIR --instance-id=quicklocal"
osyncParameters[$__quickRemote]="--initiator=$INITIATOR_DIR --target=ssh://localhost:$SSH_PORT/$TARGET_DIR --rsakey=${HOME}/.ssh/id_rsa_local --instance-id=quickremote"
osyncParameters[$__confLocal]="$CONF_DIR/$LOCAL_CONF"
osyncParameters[$__confRemote]="$CONF_DIR/$REMOTE_CONF"
#declare -Ag osyncDaemonParameters
osyncDaemonParameters=()
readonly __local
readonly __remote
osyncDaemonParameters[$__local]="$CONF_DIR/$LOCAL_CONF --on-changes"
osyncDaemonParameters[$__remote]="$CONF_DIR/$REMOTE_CONF --on-changes"
function GetConfFileValue () { function GetConfFileValue () {
local file="${1}" local file="${1}"
local name="${2}" local name="${2}"
@ -205,10 +188,34 @@ function oneTimeSetUp () {
START_TIME=$SECONDS START_TIME=$SECONDS
source "$DEV_DIR/ofunctions.sh" source "$DEV_DIR/ofunctions.sh"
SetupSSH
GetLocalOS GetLocalOS
# Setup modes per test
readonly __quickLocal=0
readonly __quickRemote=1
readonly __confLocal=2
readonly __confRemote=3
osyncParameters=()
osyncParameters[$__quickLocal]="--initiator=$INITIATOR_DIR --target=$TARGET_DIR --instance-id=quicklocal"
osyncParameters[$__confLocal]="$CONF_DIR/$LOCAL_CONF"
osyncDaemonParameters=()
readonly __local
readonly __remote
osyncDaemonParameters[$__local]="$CONF_DIR/$LOCAL_CONF --on-changes"
if [ "$LOCAL_OS" != "msys" ]; then
osyncParameters[$__quickRemote]="--initiator=$INITIATOR_DIR --target=ssh://localhost:$SSH_PORT/$TARGET_DIR --rsakey=${HOME}/.ssh/id_rsa_local --instance-id=quickremote"
osyncParameters[$__confRemote]="$CONF_DIR/$REMOTE_CONF"
osyncDaemonParameters[$__remote]="$CONF_DIR/$REMOTE_CONF --on-changes"
SetupSSH
fi
#TODO: Assuming that macos has the same syntax than bsd here #TODO: Assuming that macos has the same syntax than bsd here
if [ "$LOCAL_OS" == "BSD" ] || [ "$LOCAL_OS" == "MacOSX" ]; then if [ "$LOCAL_OS" == "BSD" ] || [ "$LOCAL_OS" == "MacOSX" ]; then
SUDO_CMD="" SUDO_CMD=""
@ -258,7 +265,7 @@ function test_Merge () {
SetConfFileValue "$OSYNC_DIR/$OSYNC_EXECUTABLE" "IS_STABLE" "yes" SetConfFileValue "$OSYNC_DIR/$OSYNC_EXECUTABLE" "IS_STABLE" "yes"
} }
function test_LargeFileSet () { function nope_test_LargeFileSet () {
for i in "${osyncParameters[@]}"; do for i in "${osyncParameters[@]}"; do
cd "$OSYNC_DIR" cd "$OSYNC_DIR"
@ -276,7 +283,7 @@ function test_LargeFileSet () {
done done
} }
function test_Exclusions () { function nope_test_Exclusions () {
# Will sync except php files # Will sync except php files
# RSYNC_EXCLUDE_PATTERN="*.php" is set at runtime for quicksync and in config files for other runs # RSYNC_EXCLUDE_PATTERN="*.php" is set at runtime for quicksync and in config files for other runs
@ -296,7 +303,6 @@ function test_Exclusions () {
REMOTE_HOST_PING=no RSYNC_EXCLUDE_PATTERN="*.php" ./$OSYNC_EXECUTABLE $i REMOTE_HOST_PING=no RSYNC_EXCLUDE_PATTERN="*.php" ./$OSYNC_EXECUTABLE $i
assertEquals "Exclusions with parameters [$i]." "0" $? assertEquals "Exclusions with parameters [$i]." "0" $?
#WIP Add exclusion from file tests here
numberOfInitiatorFiles=$(find "$INITIATOR_DIR" ! -wholename "$INITIATOR_DIR/$OSYNC_WORKDIR*" | wc -l) numberOfInitiatorFiles=$(find "$INITIATOR_DIR" ! -wholename "$INITIATOR_DIR/$OSYNC_WORKDIR*" | wc -l)
numberOfTargetFiles=$(find "$TARGET_DIR" ! -wholename "$TARGET_DIR/$OSYNC_WORKDIR*" | wc -l) numberOfTargetFiles=$(find "$TARGET_DIR" ! -wholename "$TARGET_DIR/$OSYNC_WORKDIR*" | wc -l)
numberOfExcludedFiles=$((numberOfInitiatorFiles-numberOfTargetFiles)) numberOfExcludedFiles=$((numberOfInitiatorFiles-numberOfTargetFiles))
@ -305,7 +311,7 @@ function test_Exclusions () {
done done
} }
function test_Deletetion () { function nope_test_Deletetion () {
local iFile1="$INITIATOR_DIR/ific" local iFile1="$INITIATOR_DIR/ific"
local iFile2="$INITIATOR_DIR/ifoc" local iFile2="$INITIATOR_DIR/ifoc"
local tFile1="$TARGET_DIR/tfic" local tFile1="$TARGET_DIR/tfic"
@ -349,7 +355,11 @@ function test_Deletetion () {
done done
} }
function test_deletion_failure () { function nope_test_deletion_failure () {
if [ "$LOCAL_OS" == "WinNT10" ]; then
echo "Skipping deletion failure test as Win10 does not have chattr support."
return 0
fi
for i in "${osyncParameters[@]}"; do for i in "${osyncParameters[@]}"; do
cd "$OSYNC_DIR" cd "$OSYNC_DIR"
@ -411,7 +421,7 @@ function test_deletion_failure () {
done done
} }
function test_skip_deletion () { function nope_test_skip_deletion () {
local modes local modes
if [ "$OSYNC_MIN_VERSION" == "1" ]; then if [ "$OSYNC_MIN_VERSION" == "1" ]; then
@ -482,7 +492,7 @@ function test_skip_deletion () {
SetConfFileValue "$CONF_DIR/$REMOTE_CONF" "SKIP_DELETION" "" SetConfFileValue "$CONF_DIR/$REMOTE_CONF" "SKIP_DELETION" ""
} }
function test_softdeletion_cleanup () { function nope_test_softdeletion_cleanup () {
#declare -A files #declare -A files
files=() files=()
@ -511,8 +521,8 @@ function test_softdeletion_cleanup () {
touch "$file.new" touch "$file.new"
if [ "$TRAVIS_RUN" == true ] || [ "$LOCAL_OS" == "BSD" ] || [ "$LOCAL_OS" == "MacOSX" ]; then if [ "$TRAVIS_RUN" == true ] || [ "$LOCAL_OS" == "BSD" ] || [ "$LOCAL_OS" == "MacOSX" ] || [ "$LOCAL_OS" == "WinNT10" ] || [ "LOCAL_OS" == "msys" ]; then
echo "Skipping changing ctime on file because travis / bsd / macos does not support debugfs" echo "Skipping changing ctime on file because travis / bsd / macos / Win10 / msys / cygwin does not support debugfs"
else else
CreateOldFile "$file.old" CreateOldFile "$file.old"
fi fi
@ -526,7 +536,7 @@ function test_softdeletion_cleanup () {
[ -f "$file.new" ] [ -f "$file.new" ]
assertEquals "New softdeleted / backed up file [$file.new] exists." "0" $? assertEquals "New softdeleted / backed up file [$file.new] exists." "0" $?
if [ "$TRAVIS_RUN" == true ] || [ "$LOCAL_OS" == "BSD" ] || [ "$LOCAL_OS" == "MacOSX" ]; then if [ "$TRAVIS_RUN" == true ] || [ "$LOCAL_OS" == "BSD" ] || [ "$LOCAL_OS" == "MacOSX" ] || [ "$LOCAL_OS" == "WinNT10" ] || [ "$LOCAL_OS" == "msys" ]; then
[ ! -f "$file.old" ] [ ! -f "$file.old" ]
assertEquals "Old softdeleted / backed up file [$file.old] is deleted permanently." "0" $? assertEquals "Old softdeleted / backed up file [$file.old] is deleted permanently." "0" $?
else else
@ -538,7 +548,7 @@ function test_softdeletion_cleanup () {
} }
function test_FileAttributePropagation () { function nope_test_FileAttributePropagation () {
if [ "$TRAVIS_RUN" == true ]; then if [ "$TRAVIS_RUN" == true ]; then
echo "Skipping FileAttributePropagation tests as travis does not support getfacl / setfacl." echo "Skipping FileAttributePropagation tests as travis does not support getfacl / setfacl."
@ -616,7 +626,7 @@ function test_FileAttributePropagation () {
done done
} }
function test_ConflictBackups () { function nope_test_ConflictBackups () {
for i in "${osyncParameters[@]}"; do for i in "${osyncParameters[@]}"; do
cd "$OSYNC_DIR" cd "$OSYNC_DIR"
PrepareLocalDirs PrepareLocalDirs
@ -652,7 +662,7 @@ function test_ConflictBackups () {
done done
} }
function test_MultipleConflictBackups () { function nope_test_MultipleConflictBackups () {
local additionalParameters local additionalParameters
@ -712,7 +722,7 @@ function test_MultipleConflictBackups () {
SetConfFileValue "$CONF_DIR/$REMOTE_CONF" "CONFLICT_BACKUP_MULTIPLE" "no" SetConfFileValue "$CONF_DIR/$REMOTE_CONF" "CONFLICT_BACKUP_MULTIPLE" "no"
} }
function test_Locking () { function nope_test_Locking () {
local forceStrangerUnlockLocal local forceStrangerUnlockLocal
local forceStrangerUnlockRemote local forceStrangerUnlockRemote
@ -822,21 +832,60 @@ function test_Locking () {
} }
function test_WaitForTaskCompletion () { function test_WaitForTaskCompletion () {
local pids
# Tests compatible with v1.1 syntax
# These tests aren't really effective because in any case, output from WaitFor functions is always 0, which was a bad behavior in v1.1
if [ "$OSYNC_MIN_VERSION" == "1" ]; then if [ "$OSYNC_MIN_VERSION" == "1" ]; then
echo "Skipping WaitForTaskCompletion test because osync v1.1 does not support multiple pid monitoring" echo "Using v1.1 WaitForTaskCompletion test"
# Needed in order to get PROCESS_nope_test_CMD value
InitLocalOSSettings
# Standard wait
sleep 2 &
pid=$!
WaitForTaskCompletion $pid 0 0 ${FUNCNAME[0]}
assertEquals "WaitForTaskCompletion v1.1 test 1" "0" $?
# Standard wait with warning
sleep 5 &
WaitForTaskCompletion $! 3 0 ${FUNCNAME[0]}
assertEquals "WaitForTaskCompletion v1.1 test 2" "0" $?
# Pid is killed
sleep 5 &
WaitForTaskCompletion $! 0 2 ${FUNCNAME[0]}
assertEquals "WaitForTaskCompletion v1.1 test 3" "1" $?
# Standard wait
sleep 2 &
WaitForCompletion $! 0 0 ${FUNCNAME[0]}
assertEquals "WaitForCompletion test 1" "0" $?
# Standard wait with warning
sleep 5 &
WaitForCompletion $! 3 0 ${FUNCNAME[0]}
assertEquals "WaitForCompletion test 2" "0" $?
# Pid is killed
sleep 5 &
WaitForCompletion $! 0 2 ${FUNCNAME[0]}
assertEquals "WaitForCompletion test 3" "1" $?
return 0 return 0
fi fi
local pids # Tests if wait for task completion works correctly with v1.2+
# Tests if wait for task completion works correctly
# Standard wait # Standard wait
sleep 1 & sleep 1 &
pids="$!" pids="$!"
sleep 2 & sleep 2 &
pids="$pids;$!" pids="$pids;$!"
WaitForTaskCompletion $pids 0 0 ${FUNCNAME[0]} true 0 WaitForTaskCompletion $pids 0 0 $SLEEP_TIME $KEEP_LOGGING true true false ${FUNCNAME[0]}
assertEquals "WaitForTaskCompletion test 1" "0" $? assertEquals "WaitForTaskCompletion test 1" "0" $?
# Standard wait with warning # Standard wait with warning
@ -845,7 +894,7 @@ function test_WaitForTaskCompletion () {
sleep 5 & sleep 5 &
pids="$pids;$!" pids="$pids;$!"
WaitForTaskCompletion $pids 3 0 ${FUNCNAME[0]} true 0 WaitForTaskCompletion $pids 3 0 $SLEEP_TIME $KEEP_LOGGING true true false ${FUNCNAME[0]}
assertEquals "WaitForTaskCompletion test 2" "0" $? assertEquals "WaitForTaskCompletion test 2" "0" $?
# Both pids are killed # Both pids are killed
@ -854,7 +903,7 @@ function test_WaitForTaskCompletion () {
sleep 5 & sleep 5 &
pids="$pids;$!" pids="$pids;$!"
WaitForTaskCompletion $pids 0 2 ${FUNCNAME[0]} true 0 WaitForTaskCompletion $pids 0 2 $SLEEP_TIME $KEEP_LOGGING true true false ${FUNCNAME[0]}
assertEquals "WaitForTaskCompletion test 3" "2" $? assertEquals "WaitForTaskCompletion test 3" "2" $?
# One of two pids are killed # One of two pids are killed
@ -863,7 +912,7 @@ function test_WaitForTaskCompletion () {
sleep 10 & sleep 10 &
pids="$pids;$!" pids="$pids;$!"
WaitForTaskCompletion $pids 0 3 ${FUNCNAME[0]} true 0 WaitForTaskCompletion $pids 0 3 $SLEEP_TIME $KEEP_LOGGING true true false ${FUNCNAME[0]}
assertEquals "WaitForTaskCompletion test 4" "1" $? assertEquals "WaitForTaskCompletion test 4" "1" $?
# Count since script begin, the following should output two warnings and both pids should get killed # Count since script begin, the following should output two warnings and both pids should get killed
@ -872,20 +921,18 @@ function test_WaitForTaskCompletion () {
sleep 20 & sleep 20 &
pids="$pids;$!" pids="$pids;$!"
WaitForTaskCompletion $pids 3 5 ${FUNCNAME[0]} false 0 WaitForTaskCompletion $pids 3 5 $SLEEP_TIME $KEEP_LOGGING false true false ${FUNCNAME[0]}
assertEquals "WaitForTaskCompletion test 5" "2" $? assertEquals "WaitForTaskCompletion test 5" "2" $?
} }
function test_ParallelExec () { function nope_test_ParallelExec () {
if [ "$OSYNC_MIN_VERSION" == "1" ]; then if [ "$OSYNC_MIN_VERSION" == "1" ]; then
echo "Skipping ParallelExec test because osync v1.1 didn't have this" echo "Skipping ParallelExec test because osync v1.1 ofunctions don't have this function."
return 0 return 0
fi fi
local cmd local cmd
# Test if parallelExec works correctly in array mode # Test if parallelExec works correctly in array mode
cmd="sleep 2;sleep 2;sleep 2;sleep 2" cmd="sleep 2;sleep 2;sleep 2;sleep 2"
@ -923,9 +970,71 @@ function test_ParallelExec () {
ParallelExec 3 "$TMP_FILE" true ParallelExec 3 "$TMP_FILE" true
assertEquals "ParallelExec test 6" "2" $? assertEquals "ParallelExec test 6" "2" $?
#function ParallelExec $numberOfProcesses $commandsArg $readFromFile $softTime $HardTime $sleepTime $keepLogging $counting $Spinner $noError $callerName
# Test if parallelExec works correctly in array mode with full time control
cmd="sleep 5;sleep 5;sleep 5;sleep 5;sleep 5"
ParallelExec 4 "$cmd" false 1 0 .05 3600 true true false ${FUNCNAME[0]}
assertEquals "ParallelExec full test 1" "0" $?
cmd="sleep 2;du /none;sleep 2;sleep 2;sleep 4"
ParallelExec 2 "$cmd" false 0 0 .1 2 true false false ${FUNCNAME[0]}
assertEquals "ParallelExec full test 2" "1" $?
cmd="sleep 4;du /none;sleep 3;du /none;sleep 2"
ParallelExec 3 "$cmd" false 1 2 .05 7000 true true false ${FUNCNAME[0]}
assertNotEquals "ParallelExec full test 3" "0" $?
} }
function test_UpgradeConfRun () { function test_timedExecution () {
local arguments
local warnExitCode
# Clever usage of indexes and exit codes
# osync exits with 0 when no problem detected
# exits with 1 when error detected (triggered by reaching HARD_MAX_EXEC_TIME)
# exits with 2 when warning only detected (triggered by reaching SOFT_MAX_EXEC_TIME)
softTimes=()
softTimes[0]=7200 # original values (to be executed at last in order to leave config file in original state)
hardTimes[0]=10600
softTimes[1]=0
hardTimes[1]=3
softTimes[2]=2
hardTimes[2]=10600
for x in 2 1 0; do
SetConfFileValue "$CONF_DIR/$LOCAL_CONF" "SOFT_MAX_EXEC_TIME" ${softTimes[$x]}
SetConfFileValue "$CONF_DIR/$LOCAL_CONF" "HARD_MAX_EXEC_TIME" ${hardTimes[$x]}
SetConfFileValue "$CONF_DIR/$REMOTE_CONF" "SOFT_MAX_EXEC_TIME" ${softTimes[$x]}
SetConfFileValue "$CONF_DIR/$REMOTE_CONF" "HARD_MAX_EXEC_TIME" ${hardTimes[$x]}
for i in "${osyncParameters[@]}"; do
cd "$OSYNC_DIR"
PrepareLocalDirs
echo "Test with args [$i $arguments]."
SLEEP_TIME=1 SOFT_MAX_EXEC_TIME=${softTimes[$x]} HARD_MAX_EXEC_TIME=${hardTimes[$x]} ./$OSYNC_EXECUTABLE $i
retval=$?
if [ "$OSYNC_MIN_VERSION" -gt 1 ]; then
assertEquals "Timed Execution test with timed SOFT_MAX_EXEC_TIME=${softTimes[$x]} and HARD_MAX_EXEC_TIME=${hardTimes[$x]}." $x $retval
else
# osync v1.1 had different exit codes, 240 was warning, anything else than 0 was error
if [ $x -eq 2 ]; then
assertEquals "Timed Execution test with timed SOFT_MAX_EXEC_TIME=${softTimes[$x]} and HARD_MAX_EXEC_TIME=${hardTimes[$x]}." 240 $retval
elif [ $x -eq 1 ]; then
assertNotEquals "Timed Execution test with timed SOFT_MAX_EXEC_TIME=${softTimes[$x]} and HARD_MAX_EXEC_TIME=${hardTimes[$x]}." 0 $retval
else
assertEquals "Timed Execution test with timed SOFT_MAX_EXEC_TIME=${softTimes[$x]} and HARD_MAX_EXEC_TIME=${hardTimes[$x]}." 0 $retval
fi
fi
done
done
}
function nope_test_UpgradeConfRun () {
if [ "$OSYNC_MIN_VERSION" == "1" ]; then if [ "$OSYNC_MIN_VERSION" == "1" ]; then
echo "Skipping Upgrade script test because no further dev will happen on this for v1.1" echo "Skipping Upgrade script test because no further dev will happen on this for v1.1"
return 0 return 0
@ -947,7 +1056,11 @@ function test_UpgradeConfRun () {
rm -f "$CONF_DIR/$TMP_OLD_CONF.save" rm -f "$CONF_DIR/$TMP_OLD_CONF.save"
} }
function test_DaemonMode () { function nope_test_DaemonMode () {
if [ "$LOCAL_OS" == "WinNT10" ] || [ "$LOCAL_OS" == "msys" ]; then
echo "Skipping daemon mode test as Win10 does not have inotifywait support."
return 0
fi
for i in "${osyncDaemonParameters[@]}"; do for i in "${osyncDaemonParameters[@]}"; do
@ -991,14 +1104,14 @@ function test_DaemonMode () {
assertEquals "File [$INITIATOR_DIR/$OSYNC_DELETE_DIR/$FileB] should be in soft deletion dir." "0" $? assertEquals "File [$INITIATOR_DIR/$OSYNC_DELETE_DIR/$FileB] should be in soft deletion dir." "0" $?
[ -f "$TARGET_DIR/$FileC" ] [ -f "$TARGET_DIR/$FileC" ]
assertEquals "$File [$TARGET_DIR/$FileC] should be synced." "0" $? assertEquals "File [$TARGET_DIR/$FileC] should be synced." "0" $?
kill $pid kill $pid
done done
} }
function test_NoRemoteAccessTest () { function nope_test_NoRemoteAccessTest () {
RemoveSSH RemoveSSH
cd "$OSYNC_DIR" cd "$OSYNC_DIR"