diff --git a/dev/tests/run_tests.sh b/dev/tests/run_tests.sh index 6568416..16d5fb6 100755 --- a/dev/tests/run_tests.sh +++ b/dev/tests/run_tests.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -# osync test suite 2016111705 +# osync test suite 20161112001 # 4 tests: # quicklocal @@ -24,7 +24,7 @@ # ParallelExec # daemon mode tests for both config files -LARGE_FILESET_URL="http://ftp.drupal.org/files/projects/drupal-8.1.9.tar.gz" +LARGE_FILESET_URL="http://ftp.drupal.org/files/projects/drupal-8.2.2.tar.gz" OSYNC_DIR="$(pwd)" OSYNC_DIR=${OSYNC_DIR%%/dev*} @@ -67,16 +67,27 @@ OSYNC_MIN_VERSION=x OSYNC_IS_STABLE=maybe # Setup an array with all function modes -declare -Ag osyncParameters +#declare -Ag 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" +readonly __quickLocal=0 +readonly __quickRemote=1 +readonly __confLocal=2 +readonly __confRemote=3 -declare -Ag osyncDaemonParameters -osyncDaemonParameters[daemonlocal]="$CONF_DIR/$LOCAL_CONF --on-changes" -osyncDaemonParameters[daemonremote]="$CONF_DIR/$REMOTE_CONF --on-changes" +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 () { local file="${1}" @@ -98,7 +109,9 @@ function SetConfFileValue () { local value="${3}" if grep "^$name=" "$file" > /dev/null; then + # Using -i.tmp for BSD compat sed -i.tmp "s/^$name=.*/$name=$value/" "$file" + rm -f "$file.tmp" assertEquals "Set $name to [$value]." "0" $? else assertEquals "$name does not exist in [$file]." "1" "0" @@ -116,11 +129,22 @@ function SetupSSH { fi } +function RemoveSSH { + local pubkey + + if [ -f "${HOME}/.ssh/id_rsa_local" ]; then + + pubkey=$(cat "${HOME}/.ssh/id_rsa_local.pub") + sed -i.bak "#$pubkey#d" "${HOME}/.ssh/authorized_keys" + rm -f "${HOME}/.ssh/{id_rsa_local.pub,id_rsa_local}" + fi +} + function DownloadLargeFileSet() { local destinationPath="${1}" cd "$OSYNC_DIR" - wget -q "$LARGE_FILESET_URL" > /dev/null + wget -q --no-check-certificate "$LARGE_FILESET_URL" > /dev/null assertEquals "Download [$LARGE_FILESET_URL]." "0" $? tar xvf "$(basename $LARGE_FILESET_URL)" -C "$destinationPath" > /dev/null @@ -181,8 +205,10 @@ function oneTimeTearDown () { # Set osync version stable flag back to origin SetConfFileValue "$OSYNC_DIR/$OSYNC_EXECUTABLE" "IS_STABLE" "$OSYNC_IS_STABLE" + RemoveSSH + #TODO: uncomment this when dev is done - rm -rf "$OSYNC_TESTS_DIR" + #rm -rf "$OSYNC_TESTS_DIR" ELAPSED_TIME=$(($SECONDS - $START_TIME)) echo "It took $ELAPSED_TIME seconds to run these tests." @@ -439,12 +465,13 @@ function test_skip_deletion () { } function test_softdeletion_cleanup () { - declare -A files + #declare -A files - files[deletedFileInitiator]="$INITIATOR_DIR/$OSYNC_DELETE_DIR/someDeletedFileInitiator" - files[deletedFileTarget]="$TARGET_DIR/$OSYNC_DELETE_DIR/someDeletedFileTarget" - files[backedUpFileInitiator]="$INITIATOR_DIR/$OSYNC_BACKUP_DIR/someBackedUpFileInitiator" - files[backedUpFileTarget]="$TARGET_DIR/$OSYNC_BACKUP_DIR/someBackedUpFileTarget" + files=() + files[0]="$INITIATOR_DIR/$OSYNC_DELETE_DIR/someDeletedFileInitiator" + files[1]="$TARGET_DIR/$OSYNC_DELETE_DIR/someDeletedFileTarget" + files[2]="$INITIATOR_DIR/$OSYNC_BACKUP_DIR/someBackedUpFileInitiator" + files[3]="$TARGET_DIR/$OSYNC_BACKUP_DIR/someBackedUpFileTarget" for i in "${osyncParameters[@]}"; do cd "$OSYNC_DIR" @@ -506,9 +533,13 @@ function test_FileAttributePropagation () { DirA="dir a" DirB="dir b" + DirC="dir c" + DirD="dir d" mkdir "$INITIATOR_DIR/$DirA" mkdir "$TARGET_DIR/$DirB" + mkdir "$INITIATOR_DIR/$DirC" + mkdir "$TARGET_DIR/$DirD" FileA="$DirA/FileA" FileB="$DirB/FileB" @@ -517,34 +548,48 @@ function test_FileAttributePropagation () { touch "$TARGET_DIR/$FileB" # First run - REMOTE_HOST_PING=no ./$OSYNC_EXECUTABLE $i + PRESERVE_ACL=yes PRESERVE_XATTR=yes REMOTE_HOST_PING=no ./$OSYNC_EXECUTABLE $i assertEquals "First deletion run with parameters [$i]." "0" $? sleep 1 - getfacl -p "$INITIATOR_DIR/$FileA" | grep "other::r--" > /dev/null + getfacl "$INITIATOR_DIR/$FileA" | grep "other::r--" > /dev/null assertEquals "Check getting ACL on initiator." "0" $? - getfacl -p "$TARGET_DIR/$FileB" | grep "other::r--" > /dev/null + getfacl "$TARGET_DIR/$FileB" | grep "other::r--" > /dev/null assertEquals "Check getting ACL on target." "0" $? + getfacl "$INITIATOR_DIR/$DirC" | grep "other::r-x" > /dev/null + assertEquals "Check getting ACL on initiator subdirectory." "0" $? + + getfacl "$TARGET_DIR/$DirD" | grep "other::r-x" > /dev/null + assertEquals "Check getting ACL on target subdirectory." "0" $? + setfacl -m o:r-x "$INITIATOR_DIR/$FileA" assertEquals "Set ACL on initiator" "0" $? setfacl -m o:-w- "$TARGET_DIR/$FileB" assertEquals "Set ACL on target" "0" $? + setfacl -m o:rwx "$INITIATOR_DIR/$DirC" + assertEquals "Set ACL on initiator directory" "0" $? + setfacl -m o:-wx "$TARGET_DIR/$DirD" + assertEquals "Set ACL on target directory" "0" $? + # Second run - REMOTE_HOST_PING=no ./$OSYNC_EXECUTABLE $i + PRESERVE_ACL=yes PRESERVE_XATTR=yes REMOTE_HOST_PING=no ./$OSYNC_EXECUTABLE $i assertEquals "First deletion run with parameters [$i]." "0" $? - getfacl -p "$TARGET_DIR/$FileA" | grep "other::r-x" > /dev/null + getfacl "$TARGET_DIR/$FileA" | grep "other::r-x" > /dev/null assertEquals "ACLs matched original value on target." "0" $? - getfacl -p "$INITIATOR_DIR/$FileB" | grep "other::-w-" > /dev/null + getfacl "$INITIATOR_DIR/$FileB" | grep "other::-w-" > /dev/null assertEquals "ACLs matched original value on initiator." "0" $? - getfacl -p "$TARGET_DIR/$FileA" - getfacl -p "$INITIATOR_DIR/$FileB" + getfacl "$TARGET_DIR/$DirC" | grep "other::rwx" > /dev/null + assertEquals "ACLs matched original value on target subdirectory." "0" $? + + getfacl "$INITIATOR_DIR/$DirD" | grep "other::-wx" > /dev/null + assertEquals "ACLs matched original value on initiator subdirectory." "0" $? done } @@ -682,28 +727,28 @@ function test_Locking () { mkdir -p "$TARGET_DIR/$OSYNC_WORKDIR" echo 65536@quicklocal > "$TARGET_DIR/$OSYNC_WORKDIR/lock" - REMOTE_HOST_PING=no ./$OSYNC_EXECUTABLE ${osyncParameters[quickLocal]} + REMOTE_HOST_PING=no ./$OSYNC_EXECUTABLE ${osyncParameters[$__quickLocal]} assertEquals "Should be able to resume locked target with same instance_id in quickLocal mode." "0" $? PrepareLocalDirs mkdir -p "$TARGET_DIR/$OSYNC_WORKDIR" echo 65536@local > "$TARGET_DIR/$OSYNC_WORKDIR/lock" - REMOTE_HOST_PING=no ./$OSYNC_EXECUTABLE ${osyncParameters[confLocal]} + REMOTE_HOST_PING=no ./$OSYNC_EXECUTABLE ${osyncParameters[$__confLocal]} assertEquals "Should be able to resume locked target with same instance_id in confLocal mode." "0" $? PrepareLocalDirs mkdir -p "$TARGET_DIR/$OSYNC_WORKDIR" echo 65536@quickremote > "$TARGET_DIR/$OSYNC_WORKDIR/lock" - REMOTE_HOST_PING=no ./$OSYNC_EXECUTABLE ${osyncParameters[quickRemote]} + REMOTE_HOST_PING=no ./$OSYNC_EXECUTABLE ${osyncParameters[$__quickRemote]} assertEquals "Should be able to resume locked target with same instance_id in quickRemote mode." "0" $? PrepareLocalDirs mkdir -p "$TARGET_DIR/$OSYNC_WORKDIR" echo 65536@remote > "$TARGET_DIR/$OSYNC_WORKDIR/lock" - REMOTE_HOST_PING=no ./$OSYNC_EXECUTABLE ${osyncParameters[confRemote]} + REMOTE_HOST_PING=no ./$OSYNC_EXECUTABLE ${osyncParameters[$__confRemote]} assertEquals "Should be able to resume locked target with same instance_id in confRemote mode." "0" $? # Remote Target lock present should not be resumed if instance ID is NOT the same as current one, local target lock is resumed @@ -711,28 +756,28 @@ function test_Locking () { mkdir -p "$TARGET_DIR/$OSYNC_WORKDIR" echo 65536@bogusinstance > "$TARGET_DIR/$OSYNC_WORKDIR/lock" - REMOTE_HOST_PING=no ./$OSYNC_EXECUTABLE ${osyncParameters[quickLocal]} + REMOTE_HOST_PING=no ./$OSYNC_EXECUTABLE ${osyncParameters[$__quickLocal]} assertEquals "Should be able to resume locked local target with bogus instance id in quickLocal mode." "0" $? PrepareLocalDirs mkdir -p "$TARGET_DIR/$OSYNC_WORKDIR" echo 65536@bogusinstance > "$TARGET_DIR/$OSYNC_WORKDIR/lock" - REMOTE_HOST_PING=no ./$OSYNC_EXECUTABLE ${osyncParameters[confLocal]} + REMOTE_HOST_PING=no ./$OSYNC_EXECUTABLE ${osyncParameters[$__confLocal]} assertEquals "Should be able to resume locked local target with bogus instance_id in confLocal mode." "0" $? PrepareLocalDirs mkdir -p "$TARGET_DIR/$OSYNC_WORKDIR" echo 65536@bogusinstance > "$TARGET_DIR/$OSYNC_WORKDIR/lock" - REMOTE_HOST_PING=no ./$OSYNC_EXECUTABLE ${osyncParameters[quickRemote]} + REMOTE_HOST_PING=no ./$OSYNC_EXECUTABLE ${osyncParameters[$__quickRemote]} assertEquals "Should not be able to resume remote locked target with bogus instance_id in quickRemote mode." "1" $? PrepareLocalDirs mkdir -p "$TARGET_DIR/$OSYNC_WORKDIR" echo 65536@bogusinstance > "$TARGET_DIR/$OSYNC_WORKDIR/lock" - REMOTE_HOST_PING=no ./$OSYNC_EXECUTABLE ${osyncParameters[confRemote]} + REMOTE_HOST_PING=no ./$OSYNC_EXECUTABLE ${osyncParameters[$__confRemote]} assertEquals "Should not be able to resume remote locked target with bgous instance_id in confRemote mode." "1" $? # Target lock present should be resumed if instance ID is NOT the same as current one but FORCE_STRANGER_UNLOCK=yes @@ -940,4 +985,15 @@ function test_DaemonMode () { done } + +function test_NoRemoteAccessTest () { + RemoveSSH + + cd "$OSYNC_DIR" + PrepareLocalDirs + + REMOTE_HOST_PING=no ./$OSYNC_EXECUTABLE ${osyncParameters[$__confLocal]} + assertEquals "Basic local test without remote access." "0" $? +} + . "$TESTS_DIR/shunit2/shunit2"