WIP: conflict detection and fakeroot install

This commit is contained in:
deajan 2018-06-30 19:46:11 +02:00
parent 3d6eaef447
commit 21bc4e1ee7
1 changed files with 123 additions and 67 deletions

View File

@ -1,13 +1,11 @@
#!/usr/bin/env bash #!/usr/bin/env bash
## If this script is stopped while running, config file values and IS_STABLE value might be in inconsistent state
## 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
## On CYGWIN / MSYS, ACL and extended attributes aren't supported ## On CYGWIN / MSYS, ACL and extended attributes aren't supported
# osync test suite 2018051801 # osync test suite 2018062901
# 4 tests: # 4 tests:
# quicklocal # quicklocal
@ -26,6 +24,7 @@
# replica lock checks # replica lock checks
# file attribute tests # file attribute tests
# local / remote locking resume tests # local / remote locking resume tests
# conflict detection
# timed execution tests # timed execution tests
# function test # function test
@ -41,6 +40,9 @@
#LARGE_FILESET_URL="http://ftp.drupal.org/files/projects/drupal-8.2.2.tar.gz" #LARGE_FILESET_URL="http://ftp.drupal.org/files/projects/drupal-8.2.2.tar.gz"
LARGE_FILESET_URL="http://www.netpower.fr/sites/default/files/osync-test-files.tar.gz" LARGE_FILESET_URL="http://www.netpower.fr/sites/default/files/osync-test-files.tar.gz"
# Fakeroot for install / uninstall and test of executables
FAKEROOT="/tmp/osync_test_install"
OSYNC_DIR="$(pwd)" OSYNC_DIR="$(pwd)"
OSYNC_DIR=${OSYNC_DIR%%/dev*} OSYNC_DIR=${OSYNC_DIR%%/dev*}
DEV_DIR="$OSYNC_DIR/dev" DEV_DIR="$OSYNC_DIR/dev"
@ -52,7 +54,7 @@ REMOTE_CONF="remote.conf"
OLD_CONF="old.conf" OLD_CONF="old.conf"
TMP_OLD_CONF="tmp.old.conf" TMP_OLD_CONF="tmp.old.conf"
OSYNC_EXECUTABLE="osync.sh" OSYNC_EXECUTABLE="$FAKEROOT/usr/local/bin/osync.sh"
OSYNC_DEV_EXECUTABLE="dev/n_osync.sh" OSYNC_DEV_EXECUTABLE="dev/n_osync.sh"
OSYNC_UPGRADE="upgrade-v1.0x-v1.2x.sh" OSYNC_UPGRADE="upgrade-v1.0x-v1.2x.sh"
TMP_FILE="$DEV_DIR/tmp" TMP_FILE="$DEV_DIR/tmp"
@ -158,6 +160,8 @@ function PrepareLocalDirs () {
function oneTimeSetUp () { function oneTimeSetUp () {
START_TIME=$SECONDS START_TIME=$SECONDS
mkdir --parents "$FAKEROOT"
source "$DEV_DIR/ofunctions.sh" source "$DEV_DIR/ofunctions.sh"
# Fix default umask because of ACL test that expects 0022 when creating test files # Fix default umask because of ACL test that expects 0022 when creating test files
@ -210,6 +214,7 @@ function oneTimeSetUp () {
osyncDaemonParameters[$__local]="$CONF_DIR/$LOCAL_CONF --on-changes" osyncDaemonParameters[$__local]="$CONF_DIR/$LOCAL_CONF --on-changes"
# Do not check remote config on msys or cygwin since we don't have a local SSH server
if [ "$LOCAL_OS" != "msys" ] && [ "$LOCAL_OS" != "Cygwin" ]; then if [ "$LOCAL_OS" != "msys" ] && [ "$LOCAL_OS" != "Cygwin" ]; then
osyncParameters[$__quickRemote]="--initiator=$INITIATOR_DIR --target=ssh://localhost:$SSH_PORT/$TARGET_DIR --rsakey=${HOME}/.ssh/id_rsa_local --instance-id=quickremote --remote-token=SomeAlphaNumericToken9" osyncParameters[$__quickRemote]="--initiator=$INITIATOR_DIR --target=ssh://localhost:$SSH_PORT/$TARGET_DIR --rsakey=${HOME}/.ssh/id_rsa_local --instance-id=quickremote --remote-token=SomeAlphaNumericToken9"
osyncParameters[$__confRemote]="$CONF_DIR/$REMOTE_CONF" osyncParameters[$__confRemote]="$CONF_DIR/$REMOTE_CONF"
@ -261,7 +266,7 @@ function oneTimeSetUp () {
function oneTimeTearDown () { function oneTimeTearDown () {
# Set osync version stable flag back to origin # Set osync version stable flag back to origin
SetConfFileValue "$OSYNC_DIR/$OSYNC_EXECUTABLE" "IS_STABLE" "$OSYNC_IS_STABLE" #SetConfFileValue "$OSYNC_DIR/$OSYNC_EXECUTABLE" "IS_STABLE" "$OSYNC_IS_STABLE"
RemoveSSH RemoveSSH
@ -270,7 +275,9 @@ function oneTimeTearDown () {
rm -f "$TMP_FILE" rm -f "$TMP_FILE"
cd "$OSYNC_DIR" cd "$OSYNC_DIR"
$SUDO_CMD ./install.sh --remove --no-stats echo ""
echo "Uninstalling osync from $FAKEROOT"
$SUDO_CMD ./install.sh --remove --no-stats --prefix="$FAKEROOT"
assertEquals "Uninstall failed" "0" $? assertEquals "Uninstall failed" "0" $?
ELAPSED_TIME=$(($SECONDS - $START_TIME)) ELAPSED_TIME=$(($SECONDS - $START_TIME))
@ -289,21 +296,23 @@ function test_Merge () {
assertEquals "Merging code" "0" $? assertEquals "Merging code" "0" $?
cd "$OSYNC_DIR" cd "$OSYNC_DIR"
$SUDO_CMD ./install.sh --no-stats echo ""
echo "Installing osync to $FAKEROOT"
$SUDO_CMD ./install.sh --no-stats --prefix="$FAKEROOT"
assertEquals "Install failed" "0" $? assertEquals "Install failed" "0" $?
# Set osync version to stable while testing to avoid warning message # Set osync version to stable while testing to avoid warning message
SetConfFileValue "$OSYNC_DIR/$OSYNC_EXECUTABLE" "IS_STABLE" "yes" SetConfFileValue "$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"
PrepareLocalDirs PrepareLocalDirs
DownloadLargeFileSet "$INITIATOR_DIR" DownloadLargeFileSet "$INITIATOR_DIR"
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE $i
assertEquals "LargeFileSet test with parameters [$i]." "0" $? assertEquals "LargeFileSet test with parameters [$i]." "0" $?
[ -d "$INITIATOR_DIR/$OSYNC_STATE_DIR" ] [ -d "$INITIATOR_DIR/$OSYNC_STATE_DIR" ]
@ -314,7 +323,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
@ -331,7 +340,7 @@ function test_Exclusions () {
numberOfPHPFiles=$(find "$INITIATOR_DIR" ! -wholename "$INITIATOR_DIR/$OSYNC_WORKDIR*" -name "*.php" | wc -l) numberOfPHPFiles=$(find "$INITIATOR_DIR" ! -wholename "$INITIATOR_DIR/$OSYNC_WORKDIR*" -name "*.php" | wc -l)
REMOTE_HOST_PING=$RHOST_PING RSYNC_EXCLUDE_PATTERN="*.php" ./$OSYNC_EXECUTABLE $i REMOTE_HOST_PING=$RHOST_PING RSYNC_EXCLUDE_PATTERN="*.php" $OSYNC_EXECUTABLE $i
assertEquals "Exclusions with parameters [$i]." "0" $? assertEquals "Exclusions with parameters [$i]." "0" $?
numberOfInitiatorFiles=$(find "$INITIATOR_DIR" ! -wholename "$INITIATOR_DIR/$OSYNC_WORKDIR*" | wc -l) numberOfInitiatorFiles=$(find "$INITIATOR_DIR" ! -wholename "$INITIATOR_DIR/$OSYNC_WORKDIR*" | wc -l)
@ -342,7 +351,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"
@ -358,13 +367,13 @@ function test_Deletetion () {
touch "$tFile1" touch "$tFile1"
touch "$tFile2" touch "$tFile2"
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE $i
assertEquals "First deletion run with parameters [$i]." "0" $? assertEquals "First deletion run with parameters [$i]." "0" $?
rm -f "$iFile1" rm -f "$iFile1"
rm -f "$tFile1" rm -f "$tFile1"
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE $i
assertEquals "Second deletion run with parameters [$i]." "0" $? assertEquals "Second deletion run with parameters [$i]." "0" $?
[ -f "$TARGET_DIR/$OSYNC_DELETE_DIR/$(basename $iFile1)" ] [ -f "$TARGET_DIR/$OSYNC_DELETE_DIR/$(basename $iFile1)" ]
@ -386,7 +395,7 @@ function test_Deletetion () {
done done
} }
function test_deletion_failure () { function nope_test_deletion_failure () {
if [ "$LOCAL_OS" == "WinNT10" ] || [ "$LOCAL_OS" == "msys" ] || [ "$LOCAL_OS" == "Cygwin" ]; then if [ "$LOCAL_OS" == "WinNT10" ] || [ "$LOCAL_OS" == "msys" ] || [ "$LOCAL_OS" == "Cygwin" ]; then
echo "Skipping deletion failure test as Win10 does not have chattr support." echo "Skipping deletion failure test as Win10 does not have chattr support."
return 0 return 0
@ -409,7 +418,7 @@ function test_deletion_failure () {
touch "$INITIATOR_DIR/$FileA" touch "$INITIATOR_DIR/$FileA"
touch "$TARGET_DIR/$FileB" touch "$TARGET_DIR/$FileB"
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE $i
assertEquals "First deletion run with parameters [$i]." "0" $? assertEquals "First deletion run with parameters [$i]." "0" $?
rm -f "$INITIATOR_DIR/$FileA" rm -f "$INITIATOR_DIR/$FileA"
@ -420,7 +429,7 @@ function test_deletion_failure () {
$SUDO_CMD $IMMUTABLE_ON_CMD "$INITIATOR_DIR/$FileB" $SUDO_CMD $IMMUTABLE_ON_CMD "$INITIATOR_DIR/$FileB"
# This shuold fail with exitcode 1 # This shuold fail with exitcode 1
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE $i
assertEquals "Second deletion run with parameters [$i]." "1" $? assertEquals "Second deletion run with parameters [$i]." "1" $?
# standard file tests # standard file tests
@ -438,7 +447,7 @@ function test_deletion_failure () {
$SUDO_CMD $IMMUTABLE_OFF_CMD "$TARGET_DIR/$FileA" $SUDO_CMD $IMMUTABLE_OFF_CMD "$TARGET_DIR/$FileA"
$SUDO_CMD $IMMUTABLE_OFF_CMD "$INITIATOR_DIR/$FileB" $SUDO_CMD $IMMUTABLE_OFF_CMD "$INITIATOR_DIR/$FileB"
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE $i
assertEquals "Third deletion run with parameters [$i]." "0" $? assertEquals "Third deletion run with parameters [$i]." "0" $?
[ ! -f "$TARGET_DIR/$FileA" ] [ ! -f "$TARGET_DIR/$FileA" ]
@ -453,7 +462,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
@ -490,14 +499,14 @@ function test_skip_deletion () {
touch "$TARGET_DIR/$FileB" touch "$TARGET_DIR/$FileB"
# First run # First run
REMOTE_HOST_PING=$RHOST_PING SKIP_DELETION="$mode" ./$OSYNC_EXECUTABLE $i REMOTE_HOST_PING=$RHOST_PING SKIP_DELETION="$mode" $OSYNC_EXECUTABLE $i
assertEquals "First deletion run with parameters [$i]." "0" $? assertEquals "First deletion run with parameters [$i]." "0" $?
rm -f "$INITIATOR_DIR/$FileA" rm -f "$INITIATOR_DIR/$FileA"
rm -f "$TARGET_DIR/$FileB" rm -f "$TARGET_DIR/$FileB"
# Second run # Second run
REMOTE_HOST_PING=$RHOST_PING SKIP_DELETION="$mode" ./$OSYNC_EXECUTABLE $i REMOTE_HOST_PING=$RHOST_PING SKIP_DELETION="$mode" $OSYNC_EXECUTABLE $i
assertEquals "First deletion run with parameters [$i]." "0" $? assertEquals "First deletion run with parameters [$i]." "0" $?
if [ "$mode" == "initiator" ]; then if [ "$mode" == "initiator" ]; then
@ -529,7 +538,7 @@ function test_skip_deletion () {
SetConfFileValue "$CONF_DIR/$REMOTE_CONF" "SKIP_DELETION" "" SetConfFileValue "$CONF_DIR/$REMOTE_CONF" "SKIP_DELETION" ""
} }
function test_handle_symlinks () { function nope_test_handle_symlinks () {
if [ "$OSYNC_MIN_VERSION" == "1" ]; then if [ "$OSYNC_MIN_VERSION" == "1" ]; then
echo "Skipping symlink tests as osync v1.1x didn't handle this." echo "Skipping symlink tests as osync v1.1x didn't handle this."
return 0 return 0
@ -570,14 +579,14 @@ function test_handle_symlinks () {
ln -s "$INITIATOR_DIR/$FileA" "$INITIATOR_DIR/$FileAL" ln -s "$INITIATOR_DIR/$FileA" "$INITIATOR_DIR/$FileAL"
ln -s "$TARGET_DIR/$FileB" "$TARGET_DIR/$FileBL" ln -s "$TARGET_DIR/$FileB" "$TARGET_DIR/$FileBL"
COPY_SYMLINKS=$copySymlinks REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i COPY_SYMLINKS=$copySymlinks REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE $i
assertEquals "First symlink run with parameters [$i]." "0" $? assertEquals "First symlink run with parameters [$i]." "0" $?
# Delete symlinks # Delete symlinks
rm -f "$INITIATOR_DIR/$FileAL" rm -f "$INITIATOR_DIR/$FileAL"
rm -f "$TARGET_DIR/$FileBL" rm -f "$TARGET_DIR/$FileBL"
COPY_SYMLINKS=$copySymlinks REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i COPY_SYMLINKS=$copySymlinks REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE $i
assertEquals "Second symlink deletion run with parameters [$i]." "0" $? assertEquals "Second symlink deletion run with parameters [$i]." "0" $?
# symlink deletion propagation # symlink deletion propagation
@ -596,7 +605,7 @@ function test_handle_symlinks () {
rm -f "$INITIATOR_DIR/$FileA" rm -f "$INITIATOR_DIR/$FileA"
rm -f "$TARGET_DIR/$FileB" rm -f "$TARGET_DIR/$FileB"
COPY_SYMLINKS=$copySymlinks REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i COPY_SYMLINKS=$copySymlinks REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE $i
assertEquals "Third broken symlink run with parameters [$i]." "0" $? assertEquals "Third broken symlink run with parameters [$i]." "0" $?
[ -L "$TARGET_DIR/$FileAL" ] [ -L "$TARGET_DIR/$FileAL" ]
@ -609,7 +618,7 @@ function test_handle_symlinks () {
rm -f "$INITIATOR_DIR/$FileAL" rm -f "$INITIATOR_DIR/$FileAL"
rm -f "$TARGET_DIR/$FileBL" rm -f "$TARGET_DIR/$FileBL"
COPY_SYMLINKS=$copySymlinks REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i COPY_SYMLINKS=$copySymlinks REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE $i
assertEquals "Fourth symlink deletion run with parameters [$i]." "0" $? assertEquals "Fourth symlink deletion run with parameters [$i]." "0" $?
[ ! -L "$TARGET_DIR/$FileAL" ] [ ! -L "$TARGET_DIR/$FileAL" ]
@ -657,14 +666,14 @@ function test_handle_symlinks () {
ln -s "$INITIATOR_DIR/$FileA" "$INITIATOR_DIR/$FileAL" ln -s "$INITIATOR_DIR/$FileA" "$INITIATOR_DIR/$FileAL"
ln -s "$TARGET_DIR/$FileB" "$TARGET_DIR/$FileBL" ln -s "$TARGET_DIR/$FileB" "$TARGET_DIR/$FileBL"
COPY_SYMLINKS=$copySymlinks REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i COPY_SYMLINKS=$copySymlinks REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE $i
assertEquals "First symlink run with parameters [$i]." "0" $? assertEquals "First symlink run with parameters [$i]." "0" $?
# Delete symlinks # Delete symlinks
rm -f "$INITIATOR_DIR/$FileAL" rm -f "$INITIATOR_DIR/$FileAL"
rm -f "$TARGET_DIR/$FileBL" rm -f "$TARGET_DIR/$FileBL"
COPY_SYMLINKS=$copySymlinks REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i COPY_SYMLINKS=$copySymlinks REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE $i
assertEquals "Second symlink deletion run with parameters [$i]." "0" $? assertEquals "Second symlink deletion run with parameters [$i]." "0" $?
# symlink deletion propagation # symlink deletion propagation
@ -683,7 +692,7 @@ function test_handle_symlinks () {
rm -f "$INITIATOR_DIR/$FileA" rm -f "$INITIATOR_DIR/$FileA"
rm -f "$TARGET_DIR/$FileB" rm -f "$TARGET_DIR/$FileB"
COPY_SYMLINKS=$copySymlinks REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i COPY_SYMLINKS=$copySymlinks REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE $i
assertEquals "Third broken symlink run with parameters should fail [$i]." "1" $? assertEquals "Third broken symlink run with parameters should fail [$i]." "1" $?
[ ! -f "$TARGET_DIR/$FileAL" ] [ ! -f "$TARGET_DIR/$FileAL" ]
@ -696,7 +705,7 @@ function test_handle_symlinks () {
rm -f "$INITIATOR_DIR/$FileAL" rm -f "$INITIATOR_DIR/$FileAL"
rm -f "$TARGET_DIR/$FileBL" rm -f "$TARGET_DIR/$FileBL"
COPY_SYMLINKS=$copySymlinks REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i COPY_SYMLINKS=$copySymlinks REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE $i
assertEquals "Fourth symlink deletion run should resume with parameters [$i]." "0" $? assertEquals "Fourth symlink deletion run should resume with parameters [$i]." "0" $?
[ ! -f "$TARGET_DIR/$FileAL" ] [ ! -f "$TARGET_DIR/$FileAL" ]
@ -710,7 +719,7 @@ function test_handle_symlinks () {
done done
} }
function test_softdeletion_cleanup () { function nope_test_softdeletion_cleanup () {
#declare -A files #declare -A files
files=() files=()
@ -727,7 +736,7 @@ function test_softdeletion_cleanup () {
PrepareLocalDirs PrepareLocalDirs
# First run # First run
#REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i #REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE $i
#assertEquals "First deletion run with parameters [$i]." "0" $? #assertEquals "First deletion run with parameters [$i]." "0" $?
# Get current drive # Get current drive
@ -756,7 +765,7 @@ function test_softdeletion_cleanup () {
fi fi
# Second run # Second run
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE $i
# Check file presence # Check file presence
for file in "${files[@]}"; do for file in "${files[@]}"; do
@ -787,7 +796,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."
@ -820,7 +829,7 @@ function test_FileAttributePropagation () {
touch "$TARGET_DIR/$FileB" touch "$TARGET_DIR/$FileB"
# First run # First run
PRESERVE_ACL=yes PRESERVE_XATTR=yes REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i PRESERVE_ACL=yes PRESERVE_XATTR=yes REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE $i
assertEquals "First deletion run with parameters [$i]." "0" $? assertEquals "First deletion run with parameters [$i]." "0" $?
sleep 1 sleep 1
@ -848,7 +857,7 @@ function test_FileAttributePropagation () {
assertEquals "Set ACL on target directory" "0" $? assertEquals "Set ACL on target directory" "0" $?
# Second run # Second run
PRESERVE_ACL=yes PRESERVE_XATTR=yes REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i PRESERVE_ACL=yes PRESERVE_XATTR=yes REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE $i
assertEquals "First deletion run with parameters [$i]." "0" $? assertEquals "First deletion run with parameters [$i]." "0" $?
getfacl "$TARGET_DIR/$FileA" | grep "other::r-x" > /dev/null getfacl "$TARGET_DIR/$FileA" | grep "other::r-x" > /dev/null
@ -865,7 +874,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
@ -883,14 +892,14 @@ function test_ConflictBackups () {
echo "$FileB" > "$TARGET_DIR/$FileB" echo "$FileB" > "$TARGET_DIR/$FileB"
# First run # First run
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE $i
assertEquals "First deletion run with parameters [$i]." "0" $? assertEquals "First deletion run with parameters [$i]." "0" $?
echo "$FileA+" > "$TARGET_DIR/$FileA" echo "$FileA+" > "$TARGET_DIR/$FileA"
echo "$FileB+" > "$INITIATOR_DIR/$FileB" echo "$FileB+" > "$INITIATOR_DIR/$FileB"
# Second run # Second run
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE $i
assertEquals "First deletion run with parameters [$i]." "0" $? assertEquals "First deletion run with parameters [$i]." "0" $?
[ -f "$INITIATOR_DIR/$OSYNC_BACKUP_DIR/$FileA" ] [ -f "$INITIATOR_DIR/$OSYNC_BACKUP_DIR/$FileA" ]
@ -901,7 +910,7 @@ function test_ConflictBackups () {
done done
} }
function test_MultipleConflictBackups () { function nope_test_MultipleConflictBackups () {
local additionalParameters local additionalParameters
@ -927,28 +936,28 @@ function test_MultipleConflictBackups () {
echo "$FileB" > "$TARGET_DIR/$FileB" echo "$FileB" > "$TARGET_DIR/$FileB"
# First run # First run
CONFLICT_BACKUP_MULTIPLE=yes REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i $additionalParameters CONFLICT_BACKUP_MULTIPLE=yes REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE $i $additionalParameters
assertEquals "First deletion run with parameters [$i]." "0" $? assertEquals "First deletion run with parameters [$i]." "0" $?
echo "$FileA+" > "$TARGET_DIR/$FileA" echo "$FileA+" > "$TARGET_DIR/$FileA"
echo "$FileB+" > "$INITIATOR_DIR/$FileB" echo "$FileB+" > "$INITIATOR_DIR/$FileB"
# Second run # Second run
CONFLICT_BACKUP_MULTIPLE=yes REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i $additionalParameters CONFLICT_BACKUP_MULTIPLE=yes REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE $i $additionalParameters
assertEquals "First deletion run with parameters [$i]." "0" $? assertEquals "First deletion run with parameters [$i]." "0" $?
echo "$FileA-" > "$TARGET_DIR/$FileA" echo "$FileA-" > "$TARGET_DIR/$FileA"
echo "$FileB-" > "$INITIATOR_DIR/$FileB" echo "$FileB-" > "$INITIATOR_DIR/$FileB"
# Third run # Third run
CONFLICT_BACKUP_MULTIPLE=yes REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i $additionalParameters CONFLICT_BACKUP_MULTIPLE=yes REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE $i $additionalParameters
assertEquals "First deletion run with parameters [$i]." "0" $? assertEquals "First deletion run with parameters [$i]." "0" $?
echo "$FileA*" > "$TARGET_DIR/$FileA" echo "$FileA*" > "$TARGET_DIR/$FileA"
echo "$FileB*" > "$INITIATOR_DIR/$FileB" echo "$FileB*" > "$INITIATOR_DIR/$FileB"
# Fouth run # Fouth run
CONFLICT_BACKUP_MULTIPLE=yes REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i $additionalParameters CONFLICT_BACKUP_MULTIPLE=yes REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE $i $additionalParameters
assertEquals "First deletion run with parameters [$i]." "0" $? assertEquals "First deletion run with parameters [$i]." "0" $?
# This test may fail only on 31th December at 23:59 :) # This test may fail only on 31th December at 23:59 :)
@ -963,7 +972,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 not running = resume # local not running = resume
# remote same instance_id = resume # remote same instance_id = resume
# remote different instance_id = stop # remote different instance_id = stop
@ -978,12 +987,12 @@ function test_Locking () {
mkdir -p "$INITIATOR_DIR/$OSYNC_WORKDIR" mkdir -p "$INITIATOR_DIR/$OSYNC_WORKDIR"
echo 65536 > "$INITIATOR_DIR/$OSYNC_WORKDIR/lock" echo 65536 > "$INITIATOR_DIR/$OSYNC_WORKDIR/lock"
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE $i
assertEquals "Should be able to resume when initiator has lock without running pid." "0" $? assertEquals "Should be able to resume when initiator has lock without running pid." "0" $?
echo $$ > "$INITIATOR_DIR/$OSYNC_WORKDIR/lock" echo $$ > "$INITIATOR_DIR/$OSYNC_WORKDIR/lock"
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE $i
assertEquals "Should never be able to resume when initiator has lock with running pid." "1" $? assertEquals "Should never be able to resume when initiator has lock with running pid." "1" $?
done done
@ -992,14 +1001,14 @@ function test_Locking () {
mkdir -p "$TARGET_DIR/$OSYNC_WORKDIR" mkdir -p "$TARGET_DIR/$OSYNC_WORKDIR"
echo 65536@quicklocal > "$TARGET_DIR/$OSYNC_WORKDIR/lock" echo 65536@quicklocal > "$TARGET_DIR/$OSYNC_WORKDIR/lock"
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE ${osyncParameters[$__quickLocal]} REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE ${osyncParameters[$__quickLocal]}
assertEquals "Should be able to resume locked target with same instance_id in quickLocal mode." "0" $? assertEquals "Should be able to resume locked target with same instance_id in quickLocal mode." "0" $?
PrepareLocalDirs PrepareLocalDirs
mkdir -p "$TARGET_DIR/$OSYNC_WORKDIR" mkdir -p "$TARGET_DIR/$OSYNC_WORKDIR"
echo 65536@local > "$TARGET_DIR/$OSYNC_WORKDIR/lock" echo 65536@local > "$TARGET_DIR/$OSYNC_WORKDIR/lock"
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE ${osyncParameters[$__confLocal]} REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE ${osyncParameters[$__confLocal]}
assertEquals "Should be able to resume locked target with same instance_id in confLocal mode." "0" $? assertEquals "Should be able to resume locked target with same instance_id in confLocal mode." "0" $?
if [ "$LOCAL_OS" != "msys" ] && [ "$LOCAL_OS" != "Cygwin" ]; then if [ "$LOCAL_OS" != "msys" ] && [ "$LOCAL_OS" != "Cygwin" ]; then
@ -1007,14 +1016,14 @@ function test_Locking () {
mkdir -p "$TARGET_DIR/$OSYNC_WORKDIR" mkdir -p "$TARGET_DIR/$OSYNC_WORKDIR"
echo 65536@quickremote > "$TARGET_DIR/$OSYNC_WORKDIR/lock" echo 65536@quickremote > "$TARGET_DIR/$OSYNC_WORKDIR/lock"
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE ${osyncParameters[$__quickRemote]} REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE ${osyncParameters[$__quickRemote]}
assertEquals "Should be able to resume locked target with same instance_id in quickRemote mode." "0" $? assertEquals "Should be able to resume locked target with same instance_id in quickRemote mode." "0" $?
PrepareLocalDirs PrepareLocalDirs
mkdir -p "$TARGET_DIR/$OSYNC_WORKDIR" mkdir -p "$TARGET_DIR/$OSYNC_WORKDIR"
echo 65536@remote > "$TARGET_DIR/$OSYNC_WORKDIR/lock" echo 65536@remote > "$TARGET_DIR/$OSYNC_WORKDIR/lock"
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE ${osyncParameters[$__confRemote]} REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE ${osyncParameters[$__confRemote]}
assertEquals "Should be able to resume locked target with same instance_id in confRemote mode." "0" $? assertEquals "Should be able to resume locked target with same instance_id in confRemote mode." "0" $?
fi fi
@ -1023,14 +1032,14 @@ function test_Locking () {
mkdir -p "$TARGET_DIR/$OSYNC_WORKDIR" mkdir -p "$TARGET_DIR/$OSYNC_WORKDIR"
echo 65536@bogusinstance > "$TARGET_DIR/$OSYNC_WORKDIR/lock" echo 65536@bogusinstance > "$TARGET_DIR/$OSYNC_WORKDIR/lock"
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE ${osyncParameters[$__quickLocal]} REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE ${osyncParameters[$__quickLocal]}
assertEquals "Should be able to resume locked local target with bogus instance id in quickLocal mode." "0" $? assertEquals "Should be able to resume locked local target with bogus instance id in quickLocal mode." "0" $?
PrepareLocalDirs PrepareLocalDirs
mkdir -p "$TARGET_DIR/$OSYNC_WORKDIR" mkdir -p "$TARGET_DIR/$OSYNC_WORKDIR"
echo 65536@bogusinstance > "$TARGET_DIR/$OSYNC_WORKDIR/lock" echo 65536@bogusinstance > "$TARGET_DIR/$OSYNC_WORKDIR/lock"
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE ${osyncParameters[$__confLocal]} REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE ${osyncParameters[$__confLocal]}
assertEquals "Should be able to resume locked local target with bogus instance_id in confLocal mode." "0" $? assertEquals "Should be able to resume locked local target with bogus instance_id in confLocal mode." "0" $?
if [ "$LOCAL_OS" != "msys" ] && [ "$LOCAL_OS" != "Cygwin" ]; then if [ "$LOCAL_OS" != "msys" ] && [ "$LOCAL_OS" != "Cygwin" ]; then
@ -1038,14 +1047,14 @@ function test_Locking () {
mkdir -p "$TARGET_DIR/$OSYNC_WORKDIR" mkdir -p "$TARGET_DIR/$OSYNC_WORKDIR"
echo 65536@bogusinstance > "$TARGET_DIR/$OSYNC_WORKDIR/lock" echo 65536@bogusinstance > "$TARGET_DIR/$OSYNC_WORKDIR/lock"
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE ${osyncParameters[$__quickRemote]} REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE ${osyncParameters[$__quickRemote]}
assertEquals "Should not be able to resume remote locked target with bogus instance_id in quickRemote mode." "1" $? assertEquals "Should not be able to resume remote locked target with bogus instance_id in quickRemote mode." "1" $?
PrepareLocalDirs PrepareLocalDirs
mkdir -p "$TARGET_DIR/$OSYNC_WORKDIR" mkdir -p "$TARGET_DIR/$OSYNC_WORKDIR"
echo 65536@bogusinstance > "$TARGET_DIR/$OSYNC_WORKDIR/lock" echo 65536@bogusinstance > "$TARGET_DIR/$OSYNC_WORKDIR/lock"
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE ${osyncParameters[$__confRemote]} REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE ${osyncParameters[$__confRemote]}
assertEquals "Should not be able to resume remote locked target with bogus instance_id in confRemote mode." "1" $? assertEquals "Should not be able to resume remote locked target with bogus instance_id in confRemote mode." "1" $?
fi fi
@ -1062,7 +1071,7 @@ function test_Locking () {
mkdir -p "$INITIATOR_DIR/$OSYNC_WORKDIR" mkdir -p "$INITIATOR_DIR/$OSYNC_WORKDIR"
echo 65536@bogusinstance > "$INITIATOR_DIR/$OSYNC_WORKDIR/lock" echo 65536@bogusinstance > "$INITIATOR_DIR/$OSYNC_WORKDIR/lock"
FORCE_STRANGER_UNLOCK=yes REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i FORCE_STRANGER_UNLOCK=yes REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE $i
assertEquals "Should be able to resume when target has lock with different instance id but FORCE_STRANGER_UNLOCK=yes." "0" $? assertEquals "Should be able to resume when target has lock with different instance id but FORCE_STRANGER_UNLOCK=yes." "0" $?
done done
@ -1070,7 +1079,54 @@ function test_Locking () {
SetConfFileValue "$CONF_DIR/$REMOTE_CONF" "FORCE_STRANGER_LOCK_RESUME" "no" SetConfFileValue "$CONF_DIR/$REMOTE_CONF" "FORCE_STRANGER_LOCK_RESUME" "no"
} }
function test_WaitForTaskCompletion () { function test_ConflictDetetion () {
local result
# Tests compatible with v1.3+
if [ $OSYNC_MIN_VERSION -lt 3 ]; then
echo "Skipping conflict detection test because osync min version is $OSYNC_MIN_VERSION (must be 3 at least)."
return 0
fi
for i in "${osyncParameters[@]}"; do
cd "$OSYNC_DIR"
PrepareLocalDirs
FileA="some file"
FileB="some other file"
touch "$INITIATOR_DIR/$FileA"
touch "$TARGET_DIR/$FileB"
# Initializing treeList
REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE $i --initialize
assertEquals "Initialization run with parameters [$i]." "0" $?
# Now modifying files on both sides
echo "A" > "$INITIATOR_DIR/$FileA"
echo "B" > "$TARGET_DIR/$FileB"
# Now run should return conflicts
REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE $i --log-conflicts > "$TMP/output.log"
result=$?
echo "$TMP/output.log"
assertEquals "Second run that should detect conflicts with parameters [$i]." "0" $result
grep ">> $FileA" "$TMP/output.log"
assertEquals "Initiator conflict detect with parameters [$i]." "0" $?
grep "<< $FileB" "$TMP/output.log"
assertEquals "Target conflict detect with parameters [$i]." "0" $?
# TODO: Missing test for conflict prevalance
done
}
function nope_test_WaitForTaskCompletion () {
local pids local pids
# Tests compatible with v1.1 syntax # Tests compatible with v1.1 syntax
@ -1164,7 +1220,7 @@ function test_WaitForTaskCompletion () {
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 ofunctions don't have this function." echo "Skipping ParallelExec test because osync v1.1 ofunctions don't have this function."
return 0 return 0
@ -1225,7 +1281,7 @@ function test_ParallelExec () {
assertNotEquals "ParallelExec full test 3" "0" $? assertNotEquals "ParallelExec full test 3" "0" $?
} }
function test_timedExecution () { function nope_test_timedExecution () {
local arguments local arguments
local warnExitCode local warnExitCode
@ -1254,7 +1310,7 @@ function test_timedExecution () {
PrepareLocalDirs PrepareLocalDirs
echo "Test with args [$i $arguments]." echo "Test with args [$i $arguments]."
SLEEP_TIME=1 SOFT_MAX_EXEC_TIME=${softTimes[$x]} HARD_MAX_EXEC_TIME=${hardTimes[$x]} ./$OSYNC_EXECUTABLE $i SLEEP_TIME=1 SOFT_MAX_EXEC_TIME=${softTimes[$x]} HARD_MAX_EXEC_TIME=${hardTimes[$x]} $OSYNC_EXECUTABLE $i
retval=$? retval=$?
if [ "$OSYNC_MIN_VERSION" -gt 1 ]; then 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 assertEquals "Timed Execution test with timed SOFT_MAX_EXEC_TIME=${softTimes[$x]} and HARD_MAX_EXEC_TIME=${hardTimes[$x]}." $x $retval
@ -1272,7 +1328,7 @@ function test_timedExecution () {
done done
} }
function test_UpgradeConfRun () { 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
@ -1291,14 +1347,14 @@ function test_UpgradeConfRun () {
# Update remote conf files with SSH port # Update remote conf files with SSH port
sed -i.tmp 's#ssh://.*@localhost:[0-9]*/${HOME}/osync-tests/target#ssh://'$REMOTE_USER'@localhost:'$SSH_PORT'/${HOME}/osync-tests/target#' "$CONF_DIR/$TMP_OLD_CONF" sed -i.tmp 's#ssh://.*@localhost:[0-9]*/${HOME}/osync-tests/target#ssh://'$REMOTE_USER'@localhost:'$SSH_PORT'/${HOME}/osync-tests/target#' "$CONF_DIR/$TMP_OLD_CONF"
./$OSYNC_EXECUTABLE "$CONF_DIR/$TMP_OLD_CONF" $OSYNC_EXECUTABLE "$CONF_DIR/$TMP_OLD_CONF"
assertEquals "Upgraded conf file execution test" "0" $? assertEquals "Upgraded conf file execution test" "0" $?
rm -f "$CONF_DIR/$TMP_OLD_CONF" rm -f "$CONF_DIR/$TMP_OLD_CONF"
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" ] || [ "$LOCAL_OS" == "Cygwin" ]; then if [ "$LOCAL_OS" == "WinNT10" ] || [ "$LOCAL_OS" == "msys" ] || [ "$LOCAL_OS" == "Cygwin" ]; then
echo "Skipping daemon mode test as [$LOCAL_OS] does not have inotifywait support." echo "Skipping daemon mode test as [$LOCAL_OS] does not have inotifywait support."
return 0 return 0
@ -1316,7 +1372,7 @@ function test_DaemonMode () {
touch "$INITIATOR_DIR/$FileA" touch "$INITIATOR_DIR/$FileA"
touch "$TARGET_DIR/$FileB" touch "$TARGET_DIR/$FileB"
./$OSYNC_EXECUTABLE "$CONF_DIR/$LOCAL_CONF" --on-changes & $OSYNC_EXECUTABLE "$CONF_DIR/$LOCAL_CONF" --on-changes &
pid=$! pid=$!
# Trivial value of 2xMIN_WAIT from config files # Trivial value of 2xMIN_WAIT from config files
@ -1353,13 +1409,13 @@ function test_DaemonMode () {
} }
function test_NoRemoteAccessTest () { function nope_test_NoRemoteAccessTest () {
RemoveSSH RemoveSSH
cd "$OSYNC_DIR" cd "$OSYNC_DIR"
PrepareLocalDirs PrepareLocalDirs
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE ${osyncParameters[$__confLocal]} REMOTE_HOST_PING=$RHOST_PING $OSYNC_EXECUTABLE ${osyncParameters[$__confLocal]}
assertEquals "Basic local test without remote access." "0" $? assertEquals "Basic local test without remote access." "0" $?
} }