2
0
mirror of https://github.com/deajan/osync synced 2024-11-03 15:40:14 +00:00
osync/dev/tests/run_tests.sh

1385 lines
45 KiB
Bash
Raw Normal View History

2016-09-05 20:21:25 +00:00
#!/usr/bin/env bash
## If this script is stopped while running, config file values and IS_STABLE value might be in inconsistent state
2016-11-21 12:42:10 +00:00
## 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
2016-11-24 12:26:10 +00:00
## On CYGWIN / MSYS, ACL and extended attributes aren't supported
2017-02-07 16:43:30 +00:00
# osync test suite 2017020701
2016-09-05 20:21:25 +00:00
2016-09-06 17:26:37 +00:00
# 4 tests:
# quicklocal
# quickremote
# conflocal
# confremote
# for each test:
2016-11-17 11:15:24 +00:00
# files with spaces, subdirs
# largefileset (...large ?)
# exclusions
# conflict resolution initiator with backups / multiple backups
# conflict resolution target with backups / multiple backups
# deletion propagation, failed deletion repropagation, skip deletion
2016-12-04 17:57:39 +00:00
# symlink and broken symlink propagation and deletion
2016-11-17 11:15:24 +00:00
# replica lock checks
# file attribute tests
# local / remote locking resume tests
2016-11-29 21:40:10 +00:00
# timed execution tests
2016-11-17 11:15:24 +00:00
# function test
# WaitForTaskCompletion
# ParallelExec
2016-11-17 22:40:17 +00:00
# daemon mode tests for both config files
2016-09-06 17:26:37 +00:00
# on BSD, remount UFS with ACL support using mount -o acls /
2016-11-20 20:47:56 +00:00
# setfacl needs double ':' to be compatible with both linux and BSD
# setfacl -m o::rwx file
2016-11-20 19:56:47 +00:00
# drupal servers are often unreachable for whetever reason or give 0 bytes files
#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-drupal-8.2.2.tar.gz"
2016-09-16 07:51:29 +00:00
2016-09-05 20:21:25 +00:00
OSYNC_DIR="$(pwd)"
OSYNC_DIR=${OSYNC_DIR%%/dev*}
DEV_DIR="$OSYNC_DIR/dev"
TESTS_DIR="$DEV_DIR/tests"
2016-12-06 08:23:43 +00:00
CONF_DIR="$TESTS_DIR/conf"
2016-10-23 17:17:25 +00:00
LOCAL_CONF="local.conf"
REMOTE_CONF="remote.conf"
OLD_CONF="old.conf"
TMP_OLD_CONF="tmp.old.conf"
2016-09-05 20:21:25 +00:00
OSYNC_EXECUTABLE="osync.sh"
2016-11-16 10:46:09 +00:00
OSYNC_DEV_EXECUTABLE="dev/n_osync.sh"
2016-10-23 17:17:25 +00:00
OSYNC_UPGRADE="upgrade-v1.0x-v1.2x.sh"
2016-09-06 17:26:37 +00:00
TMP_FILE="$DEV_DIR/tmp"
2016-09-05 20:21:25 +00:00
2016-11-15 20:29:12 +00:00
OSYNC_TESTS_DIR="${HOME}/osync-tests"
INITIATOR_DIR="$OSYNC_TESTS_DIR/initiator"
TARGET_DIR="$OSYNC_TESTS_DIR/target"
2016-09-16 15:19:04 +00:00
OSYNC_WORKDIR=".osync_workdir"
OSYNC_STATE_DIR="$OSYNC_WORKDIR/state"
2016-10-17 14:45:02 +00:00
OSYNC_DELETE_DIR="$OSYNC_WORKDIR/deleted"
OSYNC_BACKUP_DIR="$OSYNC_WORKDIR/backup"
2016-09-05 20:21:25 +00:00
2016-11-16 10:46:09 +00:00
# Later populated variables
OSYNC_VERSION=1.x.y
OSYNC_MIN_VERSION=x
OSYNC_IS_STABLE=maybe
2016-09-06 17:26:37 +00:00
# Setup an array with all function modes
#declare -Ag osyncParameters
function GetConfFileValue () {
local file="${1}"
local name="${2}"
local value
value=$(grep "^$name=" "$file")
if [ $? == 0 ]; then
value="${value##*=}"
echo "$value"
else
2016-11-21 15:34:31 +00:00
assertEquals "$name does not exist in [$file]." "1" "0"
fi
}
function SetConfFileValue () {
local file="${1}"
local name="${2}"
local value="${3}"
if grep "^$name=" "$file" > /dev/null; then
2016-11-19 14:06:32 +00:00
# Using -i.tmp for BSD compat
sed -i.tmp "s/^$name=.*/$name=$value/" "$file"
2016-11-19 14:06:32 +00:00
rm -f "$file.tmp"
assertEquals "Set $name to [$value]." "0" $?
else
assertEquals "$name does not exist in [$file]." "1" "0"
fi
}
2016-09-05 20:21:25 +00:00
function SetupSSH {
echo -e 'y\n'| ssh-keygen -t rsa -b 2048 -N "" -f "${HOME}/.ssh/id_rsa_local"
2016-11-20 17:57:51 +00:00
if ! grep "$(cat ${HOME}/.ssh/id_rsa_local.pub)" "${HOME}/.ssh/authorized_keys"; then
2016-11-20 17:18:07 +00:00
cat "${HOME}/.ssh/id_rsa_local.pub" >> "${HOME}/.ssh/authorized_keys"
fi
2016-09-05 20:21:25 +00:00
chmod 600 "${HOME}/.ssh/authorized_keys"
# Add localhost to known hosts so self connect works
2016-11-20 17:18:07 +00:00
if [ -z "$(ssh-keygen -F localhost)" ]; then
ssh-keyscan -H localhost >> "${HOME}/.ssh/known_hosts"
2016-09-05 20:21:25 +00:00
fi
# Update remote conf files with SSH port
2016-12-06 08:23:43 +00:00
sed -i.tmp 's#ssh://.*@localhost:[0-9]*/${HOME}/osync-tests/target#ssh://'$REMOTE_USER'@localhost:'$SSH_PORT'/${HOME}/osync-tests/target#' "$CONF_DIR/$REMOTE_CONF"
2016-09-05 20:21:25 +00:00
}
2016-11-19 13:21:42 +00:00
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
}
2016-09-16 07:51:29 +00:00
function DownloadLargeFileSet() {
local destinationPath="${1}"
cd "$OSYNC_DIR"
2016-11-20 17:04:32 +00:00
if type wget > /dev/null 2>&1; then
wget -q --no-check-certificate "$LARGE_FILESET_URL" > /dev/null
assertEquals "Download [$LARGE_FILESET_URL] with wget." "0" $?
elif type curl > /dev/null 2>&1; then
curl -O -L "$LARGE_FILESET_URL" > /dev/null 2>&1
assertEquals "Download [$LARGE_FILESET_URL] with curl." "0" $?
fi
2016-09-16 07:51:29 +00:00
2016-11-20 17:04:32 +00:00
tar xf "$(basename $LARGE_FILESET_URL)" -C "$destinationPath"
2016-09-16 07:51:29 +00:00
assertEquals "Extract $(basename $LARGE_FILESET_URL)" "0" $?
2016-10-17 14:45:02 +00:00
rm -f "$(basename $LARGE_FILESET_URL)"
2016-09-16 07:51:29 +00:00
}
function CreateOldFile () {
2016-11-13 13:12:51 +00:00
local drive
2016-09-16 07:51:29 +00:00
local filePath="${1}"
local type="${2:-false}"
if [ $type == true ]; then
mkdir -p "$filePath"
else
mkdir -p "$(dirname $filePath)"
touch "$filePath"
fi
2016-09-16 07:51:29 +00:00
2016-11-13 13:12:51 +00:00
assertEquals "touch [$filePath]" "0" $?
# Get current drive
2016-12-11 19:54:40 +00:00
drive=$(df "$OSYNC_DIR" | tail -1 | awk '{print $1}')
2016-11-13 13:12:51 +00:00
# modify ctime on ext4 so osync thinks it has to delete the old files
2016-11-13 15:23:04 +00:00
debugfs -w -R 'set_inode_field "'$filePath'" ctime 201001010101' $drive
2016-09-16 07:51:29 +00:00
assertEquals "CreateOldFile [$filePath]" "0" $?
2016-11-13 13:12:51 +00:00
# force update of inodes (ctimes)
echo 3 > /proc/sys/vm/drop_caches
2016-09-16 07:51:29 +00:00
assertEquals "Drop caches" "0" $?
}
function PrepareLocalDirs () {
# Remote dirs are the same as local dirs, so no problem here
2016-09-05 20:21:25 +00:00
if [ -d "$INITIATOR_DIR" ]; then
rm -rf "$INITIATOR_DIR"
fi
mkdir -p "$INITIATOR_DIR"
2016-09-05 20:21:25 +00:00
if [ -d "$TARGET_DIR" ]; then
2016-12-11 19:54:40 +00:00
rm -rf "$TARGET_DIR"
2016-09-05 20:21:25 +00:00
fi
mkdir -p "$TARGET_DIR"
}
2016-09-05 20:25:25 +00:00
function oneTimeSetUp () {
2016-11-17 22:48:06 +00:00
START_TIME=$SECONDS
2016-09-05 20:25:25 +00:00
source "$DEV_DIR/ofunctions.sh"
2016-11-20 19:56:47 +00:00
GetLocalOS
2016-12-05 19:06:00 +00:00
echo "Detected OS: $LOCAL_OS"
2016-12-06 08:23:43 +00:00
# Set some travis related changes
if [ "$TRAVIS_RUN" == true ]; then
echo "Running with travis settings"
REMOTE_USER="travis"
2016-12-23 19:41:23 +00:00
RHOST_PING="no"
2016-12-06 08:23:43 +00:00
SetConfFileValue "$CONF_DIR/$REMOTE_CONF" "REMOTE_3RD_PARTY_HOSTS" ""
SetConfFileValue "$CONF_DIR/$REMOTE_CONF" "REMOTE_HOST_PING" "no"
SetConfFileValue "$CONF_DIR/$OLD_CONF" "REMOTE_3RD_PARTY_HOSTS" ""
SetConfFileValue "$CONF_DIR/$OLD_CONF" "REMOTE_HOST_PING" "no"
2016-12-06 08:23:43 +00:00
else
echo "Running with local settings"
REMOTE_USER="root"
2016-12-23 19:41:23 +00:00
RHOST_PING="yes"
SetConfFileValue "$CONF_DIR/$REMOTE_CONF" "REMOTE_3RD_PARTY_HOSTS" "\"www.kernel.org www.google.com\""
SetConfFileValue "$CONF_DIR/$REMOTE_CONF" "REMOTE_HOST_PING" "yes"
SetConfFileValue "$CONF_DIR/$OLD_CONF" "REMOTE_3RD_PARTY_HOSTS" "\"www.kernel.org www.google.com\""
SetConfFileValue "$CONF_DIR/$OLD_CONF" "REMOTE_HOST_PING" "yes"
2016-12-06 08:23:43 +00:00
fi
# Get default ssh port from env
if [ "$SSH_PORT" == "" ]; then
SSH_PORT=22
fi
2016-11-22 18:24:51 +00:00
# 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"
2016-12-12 18:27:34 +00:00
if [ "$LOCAL_OS" != "msys" ] && [ "$LOCAL_OS" != "Cygwin" ]; then
2016-11-22 18:24:51 +00:00
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
2016-11-20 19:56:47 +00:00
#TODO: Assuming that macos has the same syntax than bsd here
if [ "$LOCAL_OS" == "BSD" ] || [ "$LOCAL_OS" == "MacOSX" ]; then
2016-11-21 09:04:00 +00:00
SUDO_CMD=""
2016-11-20 19:56:47 +00:00
IMMUTABLE_ON_CMD="chflags schg"
IMMUTABLE_OFF_CMD="chflags noschg"
else
IMMUTABLE_ON_CMD="chattr +i"
IMMUTABLE_OFF_CMD="chattr -i"
2016-11-21 09:04:00 +00:00
SUDO_CMD="sudo"
2016-11-20 19:56:47 +00:00
fi
2016-11-15 21:56:02 +00:00
# Get osync version
2016-11-16 10:46:09 +00:00
OSYNC_VERSION=$(GetConfFileValue "$OSYNC_DIR/$OSYNC_DEV_EXECUTABLE" "PROGRAM_VERSION")
2016-11-15 21:56:02 +00:00
OSYNC_VERSION="${OSYNC_VERSION##*=}"
OSYNC_MIN_VERSION="${OSYNC_VERSION:2:1}"
2016-11-16 10:46:09 +00:00
OSYNC_IS_STABLE=$(GetConfFileValue "$OSYNC_DIR/$OSYNC_DEV_EXECUTABLE" "IS_STABLE")
echo "Running with $OSYNC_VERSION ($OSYNC_MIN_VERSION) STABLE=$OSYNC_IS_STABLE"
2016-12-04 17:57:39 +00:00
# Be sure to set default values for config files which can be incoherent if tests gets aborted
SetConfFileValue "$CONF_DIR/$LOCAL_CONF" "SKIP_DELETION" ""
SetConfFileValue "$CONF_DIR/$REMOTE_CONF" "SKIP_DELETION" ""
SetConfFileValue "$CONF_DIR/$LOCAL_CONF" "COPY_SYMLINKS" "no"
SetConfFileValue "$CONF_DIR/$REMOTE_CONF" "COPY_SYMLINKS" "no"
SetConfFileValue "$CONF_DIR/$LOCAL_CONF" "CONFLICT_BACKUP_MULTIPLE" "no"
SetConfFileValue "$CONF_DIR/$REMOTE_CONF" "CONFLICT_BACKUP_MULTIPLE" "no"
SetConfFileValue "$CONF_DIR/$LOCAL_CONF" "FORCE_STRANGER_LOCK_RESUME" "no"
SetConfFileValue "$CONF_DIR/$REMOTE_CONF" "FORCE_STRANGER_LOCK_RESUME" "no"
SetConfFileValue "$CONF_DIR/$REMOTE_CONF" "SOFT_MAX_EXEC_TIME" "7200"
SetConfFileValue "$CONF_DIR/$REMOTE_CONF" "HARD_MAX_EXEC_TIME" "10600"
2016-09-05 20:25:25 +00:00
}
function oneTimeTearDown () {
2016-11-16 10:46:09 +00:00
# Set osync version stable flag back to origin
SetConfFileValue "$OSYNC_DIR/$OSYNC_EXECUTABLE" "IS_STABLE" "$OSYNC_IS_STABLE"
2016-11-19 13:21:42 +00:00
RemoveSSH
2016-11-16 10:46:09 +00:00
#TODO: uncomment this when dev is done
2016-11-20 16:22:03 +00:00
#rm -rf "$OSYNC_TESTS_DIR"
rm -f "$TMP_FILE"
2016-11-17 22:48:06 +00:00
ELAPSED_TIME=$(($SECONDS - $START_TIME))
echo "It took $ELAPSED_TIME seconds to run these tests."
2016-09-05 20:25:25 +00:00
}
2016-10-23 17:17:25 +00:00
function setUp () {
2016-12-11 19:54:40 +00:00
rm -rf "$INITIATOR_DIR"
rm -rf "$TARGET_DIR"
2016-10-23 17:17:25 +00:00
}
2016-11-15 20:29:12 +00:00
# This test has to be done everytime in order for osync executable to be fresh
2016-11-24 12:33:26 +00:00
function test_Merge () {
2016-09-05 20:21:25 +00:00
cd "$DEV_DIR"
./merge.sh
assertEquals "Merging code" "0" $?
2016-11-16 10:46:09 +00:00
# Set osync version to stable while testing to avoid warning message
SetConfFileValue "$OSYNC_DIR/$OSYNC_EXECUTABLE" "IS_STABLE" "yes"
2016-09-05 20:21:25 +00:00
}
2016-11-29 21:40:10 +00:00
function test_LargeFileSet () {
2016-09-16 07:51:29 +00:00
for i in "${osyncParameters[@]}"; do
cd "$OSYNC_DIR"
PrepareLocalDirs
DownloadLargeFileSet "$INITIATOR_DIR"
2016-12-23 19:41:23 +00:00
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i
2016-09-16 07:51:29 +00:00
assertEquals "LargeFileSet test with parameters [$i]." "0" $?
2016-11-13 19:22:52 +00:00
[ -d "$INITIATOR_DIR/$OSYNC_STATE_DIR" ]
assertEquals "Initiator state dir exists" "0" $?
[ -d "$TARGET_DIR/$OSYNC_STATE_DIR" ]
assertEquals "Target state dir exists" "0" $?
2016-09-16 07:51:29 +00:00
done
}
2016-11-29 21:40:10 +00:00
function test_Exclusions () {
2016-11-13 13:12:51 +00:00
# Will sync except php files
# RSYNC_EXCLUDE_PATTERN="*.php" is set at runtime for quicksync and in config files for other runs
2016-09-16 07:51:29 +00:00
local numberOfPHPFiles
local numberOfExcludedFiles
2016-09-16 08:16:18 +00:00
local numberOfInitiatorFiles
local numberOfTargetFiles
2016-09-16 07:51:29 +00:00
for i in "${osyncParameters[@]}"; do
cd "$OSYNC_DIR"
PrepareLocalDirs
DownloadLargeFileSet "$INITIATOR_DIR"
2016-09-16 15:19:04 +00:00
numberOfPHPFiles=$(find "$INITIATOR_DIR" ! -wholename "$INITIATOR_DIR/$OSYNC_WORKDIR*" -name "*.php" | wc -l)
2016-09-16 07:51:29 +00:00
2016-12-23 19:41:23 +00:00
REMOTE_HOST_PING=$RHOST_PING RSYNC_EXCLUDE_PATTERN="*.php" ./$OSYNC_EXECUTABLE $i
2016-09-16 07:51:29 +00:00
assertEquals "Exclusions with parameters [$i]." "0" $?
2016-09-16 15:19:04 +00:00
numberOfInitiatorFiles=$(find "$INITIATOR_DIR" ! -wholename "$INITIATOR_DIR/$OSYNC_WORKDIR*" | wc -l)
numberOfTargetFiles=$(find "$TARGET_DIR" ! -wholename "$TARGET_DIR/$OSYNC_WORKDIR*" | wc -l)
2016-09-16 08:16:18 +00:00
numberOfExcludedFiles=$((numberOfInitiatorFiles-numberOfTargetFiles))
2016-09-16 07:51:29 +00:00
assertEquals "Number of php files: $numberOfPHPFiles - Number of excluded files: $numberOfExcludedFiles" $numberOfPHPFiles $numberOfExcludedFiles
done
}
2016-11-29 21:40:10 +00:00
function test_Deletetion () {
2016-10-17 14:45:02 +00:00
local iFile1="$INITIATOR_DIR/ific"
local iFile2="$INITIATOR_DIR/ifoc"
local tFile1="$TARGET_DIR/tfic"
local tFile2="$TARGET_DIR/tfoc"
for i in "${osyncParameters[@]}"; do
cd "$OSYNC_DIR"
PrepareLocalDirs
touch "$iFile1"
touch "$iFile2"
touch "$tFile1"
touch "$tFile2"
2016-12-23 19:41:23 +00:00
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i
2016-10-17 14:45:02 +00:00
assertEquals "First deletion run with parameters [$i]." "0" $?
rm -f "$iFile1"
rm -f "$tFile1"
2016-12-23 19:41:23 +00:00
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i
2016-10-17 14:45:02 +00:00
assertEquals "Second deletion run with parameters [$i]." "0" $?
2016-11-13 19:22:52 +00:00
[ -f "$TARGET_DIR/$OSYNC_DELETE_DIR/$(basename $iFile1)" ]
assertEquals "File [$TARGET_DIR/$OSYNC_DELETE_DIR/$(basename $iFile1)] has been soft deleted on target" "0" $?
2016-10-17 14:45:02 +00:00
[ -f "$iFile1" ]
assertEquals "File [$iFile1] is still in initiator" "1" $?
2016-11-15 21:56:02 +00:00
# The variable substitution is not the best comprehensible code
2016-10-17 14:45:02 +00:00
[ -f "${iFile1/$INITIATOR_DIR/TARGET_DIR}" ]
assertEquals "File [${iFile1/$INITIATOR_DIR/TARGET_DIR}] is still in target" "1" $?
2016-11-13 19:22:52 +00:00
[ -f "$INITIATOR_DIR/$OSYNC_DELETE_DIR/$(basename $tFile1)" ]
assertEquals "File [$INITIATOR_DIR/$OSYNC_DELETE_DIR/$(basename $tFile1)] has been soft deleted on initiator" "0" $?
2016-10-17 14:45:02 +00:00
[ -f "$tFile1" ]
assertEquals "File [$tFile1] is still in target" "1" $?
2016-11-15 21:56:02 +00:00
2016-10-17 14:45:02 +00:00
[ -f "${tFile1/$TARGET_DIR/INITIATOR_DIR}" ]
assertEquals "File [${tFile1/$TARGET_DIR/INITIATOR_DIR}] is still in initiator" "1" $?
done
}
2016-11-29 21:40:10 +00:00
function test_deletion_failure () {
2016-12-12 18:27:34 +00:00
if [ "$LOCAL_OS" == "WinNT10" ] || [ "$LOCAL_OS" == "msys" ] || [ "$LOCAL_OS" == "Cygwin" ]; then
2016-11-22 16:40:47 +00:00
echo "Skipping deletion failure test as Win10 does not have chattr support."
return 0
fi
2016-11-15 20:29:12 +00:00
for i in "${osyncParameters[@]}"; do
cd "$OSYNC_DIR"
PrepareLocalDirs
DirA="some directory with spaces"
DirB="another directoy/and sub directory"
mkdir -p "$INITIATOR_DIR/$DirA"
mkdir -p "$TARGET_DIR/$DirB"
FileA="$DirA/File A"
FileB="$DirB/File B"
touch "$INITIATOR_DIR/$FileA"
touch "$TARGET_DIR/$FileB"
2016-12-23 19:41:23 +00:00
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i
2016-11-15 20:29:12 +00:00
assertEquals "First deletion run with parameters [$i]." "0" $?
rm -f "$INITIATOR_DIR/$FileA"
rm -f "$TARGET_DIR/$FileB"
# Prevent files from being deleted
2016-11-21 09:25:08 +00:00
$SUDO_CMD $IMMUTABLE_ON_CMD "$TARGET_DIR/$FileA"
$SUDO_CMD $IMMUTABLE_ON_CMD "$INITIATOR_DIR/$FileB"
2016-11-15 20:29:12 +00:00
# This shuold fail with exitcode 1
2016-12-23 19:41:23 +00:00
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i
2016-11-15 20:29:12 +00:00
assertEquals "Second deletion run with parameters [$i]." "1" $?
2016-12-04 17:57:39 +00:00
# standard file tests
2016-11-15 20:29:12 +00:00
[ -f "$TARGET_DIR/$FileA" ]
2016-12-04 17:57:39 +00:00
assertEquals "File [$TARGET_DIR/$FileA] is still present in replica dir." "0" $?
2016-11-15 20:29:12 +00:00
[ ! -f "$TARGET_DIR/$OSYNC_DELETE_DIR/$FileA" ]
assertEquals "File [$TARGET_DIR/$OSYNC_DELETE_DIR/$FileA] is not present in deletion dir." "0" $?
[ -f "$INITIATOR_DIR/$FileB" ]
2016-12-04 17:57:39 +00:00
assertEquals "File [$INITIATOR_DIR/$FileB] is still present in replica dir." "0" $?
2016-11-15 20:29:12 +00:00
[ ! -f "$INITIATOR_DIR/$OSYNC_DELETE_DIR/$FileB" ]
assertEquals "File [$INITIATOR_DIR/$OSYNC_DELETE_DIR/$FileB] is not present in deletion dir." "0" $?
# Allow files from being deleted
2016-11-21 09:25:08 +00:00
$SUDO_CMD $IMMUTABLE_OFF_CMD "$TARGET_DIR/$FileA"
$SUDO_CMD $IMMUTABLE_OFF_CMD "$INITIATOR_DIR/$FileB"
2016-11-15 20:29:12 +00:00
2016-12-23 19:41:23 +00:00
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i
2016-11-15 20:29:12 +00:00
assertEquals "Third deletion run with parameters [$i]." "0" $?
[ ! -f "$TARGET_DIR/$FileA" ]
2016-12-04 17:57:39 +00:00
assertEquals "File [$TARGET_DIR/$FileA] is still present in replica dir." "0" $?
2016-11-15 20:29:12 +00:00
[ -f "$TARGET_DIR/$OSYNC_DELETE_DIR/$FileA" ]
assertEquals "File [$TARGET_DIR/$OSYNC_DELETE_DIR/$FileA] is not present in deletion dir." "0" $?
[ ! -f "$INITIATOR_DIR/$FileB" ]
2016-12-04 17:57:39 +00:00
assertEquals "File [$INITIATOR_DIR/$FileB] is still present in replica dir." "0" $?
2016-11-15 20:29:12 +00:00
[ -f "$INITIATOR_DIR/$OSYNC_DELETE_DIR/$FileB" ]
assertEquals "File [$INITIATOR_DIR/$OSYNC_DELETE_DIR/$FileB] is not present in deletion dir." "0" $?
done
}
2016-11-29 21:40:10 +00:00
function test_skip_deletion () {
2016-11-16 14:48:33 +00:00
local modes
if [ "$OSYNC_MIN_VERSION" == "1" ]; then
echo "Skipping SkipDeletion test because it wasn't implemented in osync v1.1."
return 0
fi
# TRAVIS SPECIFIC - time limitation
if [ "$TRAVIS_RUN" != true ]; then
modes=('initiator' 'target' 'initiator,target')
else
modes=('target')
fi
2016-11-16 14:48:33 +00:00
for mode in "${modes[@]}"; do
SetConfFileValue "$CONF_DIR/$LOCAL_CONF" "SKIP_DELETION" "$mode"
SetConfFileValue "$CONF_DIR/$REMOTE_CONF" "SKIP_DELETION" "$mode"
for i in "${osyncParameters[@]}"; do
cd "$OSYNC_DIR"
PrepareLocalDirs
DirA="another/one/bites/ de_dust"
DirB="phantom of /the opera"
mkdir -p "$INITIATOR_DIR/$DirA"
mkdir -p "$TARGET_DIR/$DirB"
FileA="$DirA/Iron Rhapsody"
FileB="$DirB/Bohemian Maiden"
touch "$INITIATOR_DIR/$FileA"
touch "$TARGET_DIR/$FileB"
# First run
2016-12-23 19:41:23 +00:00
REMOTE_HOST_PING=$RHOST_PING SKIP_DELETION="$mode" ./$OSYNC_EXECUTABLE $i
2016-11-16 14:48:33 +00:00
assertEquals "First deletion run with parameters [$i]." "0" $?
rm -f "$INITIATOR_DIR/$FileA"
rm -f "$TARGET_DIR/$FileB"
# Second run
2016-12-23 19:41:23 +00:00
REMOTE_HOST_PING=$RHOST_PING SKIP_DELETION="$mode" ./$OSYNC_EXECUTABLE $i
2016-11-16 14:48:33 +00:00
assertEquals "First deletion run with parameters [$i]." "0" $?
if [ "$mode" == "initiator" ]; then
[ -f "$TARGET_DIR/$FileA" ]
assertEquals "File [$TARGET_DIR/$FileA] still exists in mode $mode." "1" $?
[ -f "$INITIATOR_DIR/$FileB" ]
assertEquals "File [$INITIATOR_DIR/$FileB still exists in mode $mode." "0" $?
elif [ "$mode" == "target" ]; then
[ -f "$TARGET_DIR/$FileA" ]
assertEquals "File [$TARGET_DIR/$FileA] still exists in mode $mode." "0" $?
[ -f "$INITIATOR_DIR/$FileB" ]
assertEquals "File [$INITIATOR_DIR/$FileB still exists in mode $mode." "1" $?
elif [ "$mode" == "initiator,target" ]; then
[ -f "$TARGET_DIR/$FileA" ]
assertEquals "File [$TARGET_DIR/$FileA] still exists in mode $mode." "0" $?
[ -f "$INITIATOR_DIR/$FileB" ]
assertEquals "File [$INITIATOR_DIR/$FileB still exists in mode $mode." "0" $?
else
assertEquals "Bogus skip deletion mode" "0" "1"
fi
done
done
# Set original values back
2016-11-21 12:42:10 +00:00
SetConfFileValue "$CONF_DIR/$LOCAL_CONF" "SKIP_DELETION" ""
SetConfFileValue "$CONF_DIR/$REMOTE_CONF" "SKIP_DELETION" ""
}
2016-11-15 20:29:12 +00:00
2016-12-04 17:57:39 +00:00
function test_handle_symlinks () {
if [ "$OSYNC_MIN_VERSION" == "1" ]; then
echo "Skipping symlink tests as osync v1.1x didn't handle this."
return 0
fi
2016-12-09 18:25:23 +00:00
if [ "$LOCAL_OS" == "msys" ]; then
echo "Skipping symlink tests because msys handles them strangely or not at all."
return 0
fi
2016-12-04 17:57:39 +00:00
# Check with and without copySymlinks
copySymlinks="no"
2016-12-04 17:57:39 +00:00
echo "Running with COPY_SYMLINKS=$copySymlinks"
SetConfFileValue "$CONF_DIR/$LOCAL_CONF" "COPY_SYMLINKS" "$copySymlinks"
SetConfFileValue "$CONF_DIR/$REMOTE_CONF" "COPY_SYMLINKS" "$copySymlinks"
for i in "${osyncParameters[@]}"; do
cd "$OSYNC_DIR"
PrepareLocalDirs
DirA="some directory with spaces"
DirB="another directoy/and sub directory"
mkdir -p "$INITIATOR_DIR/$DirA"
mkdir -p "$TARGET_DIR/$DirB"
FileA="$DirA/File A"
FileB="$DirB/File B"
FileAL="$DirA/File A symlink"
FileBL="$DirB/File B symlink"
# Create symlinks
touch "$INITIATOR_DIR/$FileA"
touch "$TARGET_DIR/$FileB"
ln -s "$INITIATOR_DIR/$FileA" "$INITIATOR_DIR/$FileAL"
ln -s "$TARGET_DIR/$FileB" "$TARGET_DIR/$FileBL"
2016-12-23 19:41:23 +00:00
COPY_SYMLINKS=$copySymlinks REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i
2016-12-04 17:57:39 +00:00
assertEquals "First symlink run with parameters [$i]." "0" $?
# Delete symlinks
rm -f "$INITIATOR_DIR/$FileAL"
rm -f "$TARGET_DIR/$FileBL"
2016-12-23 19:41:23 +00:00
COPY_SYMLINKS=$copySymlinks REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i
2016-12-04 17:57:39 +00:00
assertEquals "Second symlink deletion run with parameters [$i]." "0" $?
# symlink deletion propagation
2016-12-05 11:22:59 +00:00
[ ! -L "$TARGET_DIR/$FileAL" ]
2016-12-04 17:57:39 +00:00
assertEquals "File [$TARGET_DIR/$FileAL] is still present in replica dir." "0" $?
2016-12-05 11:22:59 +00:00
[ -L "$TARGET_DIR/$OSYNC_DELETE_DIR/$FileAL" ]
2016-12-04 17:57:39 +00:00
assertEquals "File [$TARGET_DIR/$OSYNC_DELETE_DIR/$FileAL] is not present in deletion dir." "0" $?
2016-12-05 11:22:59 +00:00
[ ! -L "$INITIATOR_DIR/$FileBL" ]
2016-12-04 17:57:39 +00:00
assertEquals "File [$INITIATOR_DIR/$FileBL] is still present in replica dir." "0" $?
2016-12-05 11:22:59 +00:00
[ -L "$INITIATOR_DIR/$OSYNC_DELETE_DIR/$FileBL" ]
2016-12-04 17:57:39 +00:00
assertEquals "File [$INITIATOR_DIR/$OSYNC_DELETE_DIR/$FileBL] is not present in deletion dir." "0" $?
# Create broken symlinks and propagate them
ln -s "$INITIATOR_DIR/$FileA" "$INITIATOR_DIR/$FileAL"
ln -s "$TARGET_DIR/$FileB" "$TARGET_DIR/$FileBL"
rm -f "$INITIATOR_DIR/$FileA"
rm -f "$TARGET_DIR/$FileB"
2016-12-23 19:41:23 +00:00
COPY_SYMLINKS=$copySymlinks REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i
2016-12-05 11:22:59 +00:00
assertEquals "Third broken symlink run with parameters [$i]." "0" $?
2016-12-04 17:57:39 +00:00
2016-12-05 11:22:59 +00:00
[ -L "$TARGET_DIR/$FileAL" ]
2016-12-04 17:57:39 +00:00
assertEquals "File [$TARGET_DIR/$FileAL] is present in replica dir." "0" $?
2016-12-05 11:22:59 +00:00
[ -L "$INITIATOR_DIR/$FileBL" ]
2016-12-04 17:57:39 +00:00
assertEquals "File [$INITIATOR_DIR/$FileBL] is present in replica dir." "0" $?
# Check broken symlink deletion propagation
rm -f "$INITIATOR_DIR/$FileAL"
rm -f "$TARGET_DIR/$FileBL"
2016-12-23 19:41:23 +00:00
COPY_SYMLINKS=$copySymlinks REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i
2016-12-05 11:22:59 +00:00
assertEquals "Fourth symlink deletion run with parameters [$i]." "0" $?
2016-12-04 17:57:39 +00:00
2016-12-05 11:22:59 +00:00
[ ! -L "$TARGET_DIR/$FileAL" ]
2016-12-04 17:57:39 +00:00
assertEquals "File [$TARGET_DIR/$FileAL] is still present in replica dir." "0" $?
2016-12-05 11:22:59 +00:00
[ -L "$TARGET_DIR/$OSYNC_DELETE_DIR/$FileAL" ]
2016-12-04 17:57:39 +00:00
assertEquals "File [$TARGET_DIR/$OSYNC_DELETE_DIR/$FileAL] is not present in deletion dir." "0" $?
2016-12-05 11:22:59 +00:00
[ ! -L "$INITIATOR_DIR/$FileBL" ]
2016-12-04 17:57:39 +00:00
assertEquals "File [$INITIATOR_DIR/$FileBL] is still present in replica dir." "0" $?
2016-12-05 11:22:59 +00:00
[ -L "$INITIATOR_DIR/$OSYNC_DELETE_DIR/$FileBL" ]
2016-12-04 17:57:39 +00:00
assertEquals "File [$INITIATOR_DIR/$OSYNC_DELETE_DIR/$FileBL] is not present in deletion dir." "0" $?
done
# TRAVIS SPECIFIC - time limitation
if [ "$TRAVIS_RUN" != true ]; then
return 0
fi
2016-12-04 17:57:39 +00:00
# Check with and without copySymlinks
copySymlinks="yes"
2016-12-04 17:57:39 +00:00
echo "Running with COPY_SYMLINKS=$copySymlinks"
SetConfFileValue "$CONF_DIR/$LOCAL_CONF" "COPY_SYMLINKS" "$copySymlinks"
SetConfFileValue "$CONF_DIR/$REMOTE_CONF" "COPY_SYMLINKS" "$copySymlinks"
for i in "${osyncParameters[@]}"; do
cd "$OSYNC_DIR"
PrepareLocalDirs
DirA="some directory with spaces"
DirB="another directoy/and sub directory"
mkdir -p "$INITIATOR_DIR/$DirA"
mkdir -p "$TARGET_DIR/$DirB"
FileA="$DirA/File A"
FileB="$DirB/File B"
FileAL="$DirA/File A symlink"
FileBL="$DirB/File B symlink"
# Create symlinks
touch "$INITIATOR_DIR/$FileA"
touch "$TARGET_DIR/$FileB"
ln -s "$INITIATOR_DIR/$FileA" "$INITIATOR_DIR/$FileAL"
ln -s "$TARGET_DIR/$FileB" "$TARGET_DIR/$FileBL"
2016-12-23 19:41:23 +00:00
COPY_SYMLINKS=$copySymlinks REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i
2016-12-04 17:57:39 +00:00
assertEquals "First symlink run with parameters [$i]." "0" $?
# Delete symlinks
rm -f "$INITIATOR_DIR/$FileAL"
rm -f "$TARGET_DIR/$FileBL"
2016-12-23 19:41:23 +00:00
COPY_SYMLINKS=$copySymlinks REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i
2016-12-04 17:57:39 +00:00
assertEquals "Second symlink deletion run with parameters [$i]." "0" $?
# symlink deletion propagation
2016-12-05 11:22:59 +00:00
[ ! -f "$TARGET_DIR/$FileAL" ]
2016-12-04 17:57:39 +00:00
assertEquals "File [$TARGET_DIR/$FileAL] is still present in replica dir." "0" $?
2016-12-05 11:22:59 +00:00
[ -f "$TARGET_DIR/$OSYNC_DELETE_DIR/$FileAL" ]
2016-12-04 17:57:39 +00:00
assertEquals "File [$TARGET_DIR/$OSYNC_DELETE_DIR/$FileAL] is not present in deletion dir." "0" $?
2016-12-05 11:22:59 +00:00
[ ! -f "$INITIATOR_DIR/$FileBL" ]
2016-12-04 17:57:39 +00:00
assertEquals "File [$INITIATOR_DIR/$FileBL] is still present in replica dir." "0" $?
2016-12-05 11:22:59 +00:00
[ -f "$INITIATOR_DIR/$OSYNC_DELETE_DIR/$FileBL" ]
2016-12-04 17:57:39 +00:00
assertEquals "File [$INITIATOR_DIR/$OSYNC_DELETE_DIR/$FileBL] is not present in deletion dir." "0" $?
# Create broken symlinks and propagate them
ln -s "$INITIATOR_DIR/$FileA" "$INITIATOR_DIR/$FileAL"
ln -s "$TARGET_DIR/$FileB" "$TARGET_DIR/$FileBL"
rm -f "$INITIATOR_DIR/$FileA"
rm -f "$TARGET_DIR/$FileB"
2016-12-23 19:41:23 +00:00
COPY_SYMLINKS=$copySymlinks REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i
2016-12-05 11:22:59 +00:00
assertEquals "Third broken symlink run with parameters should fail [$i]." "1" $?
2016-12-04 17:57:39 +00:00
2016-12-05 11:22:59 +00:00
[ ! -f "$TARGET_DIR/$FileAL" ]
2016-12-04 17:57:39 +00:00
assertEquals "File [$TARGET_DIR/$FileAL] is present in replica dir." "0" $?
2016-12-05 11:22:59 +00:00
[ ! -f "$INITIATOR_DIR/$FileBL" ]
2016-12-04 17:57:39 +00:00
assertEquals "File [$INITIATOR_DIR/$FileBL] is present in replica dir." "0" $?
# Check broken symlink deletion propagation
rm -f "$INITIATOR_DIR/$FileAL"
rm -f "$TARGET_DIR/$FileBL"
2016-12-23 19:41:23 +00:00
COPY_SYMLINKS=$copySymlinks REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i
assertEquals "Fourth symlink deletion run should resume with parameters [$i]." "0" $?
2016-12-04 17:57:39 +00:00
2016-12-05 11:22:59 +00:00
[ ! -f "$TARGET_DIR/$FileAL" ]
2016-12-04 17:57:39 +00:00
assertEquals "File [$TARGET_DIR/$FileAL] is still present in replica dir." "0" $?
2016-12-05 11:22:59 +00:00
[ -f "$TARGET_DIR/$OSYNC_DELETE_DIR/$FileAL" ]
2016-12-04 17:57:39 +00:00
assertEquals "File [$TARGET_DIR/$OSYNC_DELETE_DIR/$FileAL] is not present in deletion dir." "0" $?
2016-12-05 11:22:59 +00:00
[ ! -f "$INITIATOR_DIR/$FileBL" ]
2016-12-04 17:57:39 +00:00
assertEquals "File [$INITIATOR_DIR/$FileBL] is still present in replica dir." "0" $?
2016-12-05 11:22:59 +00:00
[ -f "$INITIATOR_DIR/$OSYNC_DELETE_DIR/$FileBL" ]
2016-12-04 17:57:39 +00:00
assertEquals "File [$INITIATOR_DIR/$OSYNC_DELETE_DIR/$FileBL] is not present in deletion dir." "0" $?
done
}
2016-11-29 21:40:10 +00:00
function test_softdeletion_cleanup () {
2016-11-18 12:34:49 +00:00
#declare -A files
2016-11-13 13:12:51 +00:00
2016-11-18 12:34:49 +00:00
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"
2016-11-13 15:23:04 +00:00
DirA="$INITIATOR_DIR/$OSYNC_DELETE_DIR/somedir"
DirB="$TARGET_DIR/$OSYNC_DELETE_DIR/someotherdir"
2016-11-13 13:12:51 +00:00
for i in "${osyncParameters[@]}"; do
cd "$OSYNC_DIR"
PrepareLocalDirs
# First run
2016-12-23 19:41:23 +00:00
#REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i
#assertEquals "First deletion run with parameters [$i]." "0" $?
2016-11-13 13:12:51 +00:00
# Get current drive
drive=$(df "$OSYNC_DIR" | tail -1 | awk '{print $1}')
# Create some deleted & backed up files, some new and some old
for file in "${files[@]}"; do
2016-11-15 20:29:12 +00:00
# Create directories first if they do not exist (deletion dir is created by osync, backup dir is created by rsync only when needed)
2016-11-13 13:12:51 +00:00
if [ ! -d "$(dirname $file)" ]; then
mkdir -p "$(dirname $file)"
2016-11-13 13:12:51 +00:00
fi
touch "$file.new"
2016-11-13 14:11:06 +00:00
2016-12-09 18:26:58 +00:00
if [ "$TRAVIS_RUN" == true ] || [ "$LOCAL_OS" == "BSD" ] || [ "$LOCAL_OS" == "MacOSX" ] || [ "$LOCAL_OS" == "WinNT10" ] || [ "$LOCAL_OS" == "msys" ] || [ "$LOCAL_OS" == "Cygwin" ]; then
2016-11-22 18:24:51 +00:00
echo "Skipping changing ctime on file because travis / bsd / macos / Win10 / msys / cygwin does not support debugfs"
else
CreateOldFile "$file.old"
2016-11-13 14:11:06 +00:00
fi
2016-11-13 13:12:51 +00:00
done
if [ "$TRAVIS_RUN" == true ] || [ "$LOCAL_OS" == "BSD" ] || [ "$LOCAL_OS" == "MacOSX" ] || [ "$LOCAL_OS" == "WinNT10" ] || [ "$LOCAL_OS" == "msys" ] || [ "$LOCAL_OS" == "Cygwin" ]; then
echo "Skipping changing ctime on dir too"
else
CreateOldFile "$DirA" true
CreateOldFile "$DirB" true
fi
2016-11-13 13:12:51 +00:00
2016-11-13 19:22:52 +00:00
# Second run
2016-12-23 19:41:23 +00:00
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i
2016-11-13 13:12:51 +00:00
# Check file presence
for file in "${files[@]}"; do
[ -f "$file.new" ]
assertEquals "New softdeleted / backed up file [$file.new] exists." "0" $?
2016-11-13 15:23:04 +00:00
2016-12-09 18:22:14 +00:00
if [ "$TRAVIS_RUN" == true ] || [ "$LOCAL_OS" == "BSD" ] || [ "$LOCAL_OS" == "MacOSX" ] || [ "$LOCAL_OS" == "WinNT10" ] || [ "$LOCAL_OS" == "msys" ] || [ "$LOCAL_OS" == "Cygwin" ]; then
2016-11-13 15:23:04 +00:00
[ ! -f "$file.old" ]
assertEquals "Old softdeleted / backed up file [$file.old] is deleted permanently." "0" $?
2016-11-13 14:11:06 +00:00
else
2016-11-13 15:23:04 +00:00
[ ! -f "$file.old" ]
assertEquals "Old softdeleted / backed up file [$file.old] is deleted permanently." "1" $?
2016-11-13 14:11:06 +00:00
fi
2016-11-13 13:12:51 +00:00
done
if [ "$TRAVIS_RUN" == true ] || [ "$LOCAL_OS" == "BSD" ] || [ "$LOCAL_OS" == "MacOSX" ] || [ "$LOCAL_OS" == "WinNT10" ] || [ "$LOCAL_OS" == "msys" ] || [ "$LOCAL_OS" == "Cygwin" ]; then
[ ! -d "$DirA" ]
assertEquals "Old softdeleted / backed up directory [$dirA] is deleted permanently." "0" $?
[ ! -d "$DirB" ]
assertEquals "Old softdeleted / backed up directory [$dirB] is deleted permanently." "0" $?
else
[ ! -d "$DirA" ]
assertEquals "Old softdeleted / backed up directory [$DirA] is deleted permanently." "1" $?
[ ! -d "$DirB" ]
assertEquals "Old softdeleted / backed up directory [$DirB] is deleted permanently." "1" $?
fi
2016-11-13 13:12:51 +00:00
done
}
2016-11-29 21:40:10 +00:00
function test_FileAttributePropagation () {
2016-10-23 17:17:25 +00:00
if [ "$TRAVIS_RUN" == true ]; then
echo "Skipping FileAttributePropagation tests as travis does not support getfacl / setfacl."
return 0
fi
2016-12-12 18:27:34 +00:00
if [ "$LOCAL_OS" == "MacOSX" ] || [ "$LOCAL_OS" == "msys" ] || [ "$LOCAL_OS" == "Cygwin" ]; then
2016-12-08 09:53:47 +00:00
echo "Skipping FileAttributePropagation tests because [$LOCAL_OS] does not support ACL."
return 0
fi
2016-11-13 19:22:52 +00:00
for i in "${osyncParameters[@]}"; do
cd "$OSYNC_DIR"
PrepareLocalDirs
2016-10-23 17:17:25 +00:00
DirA="dir a"
DirB="dir b"
2016-11-20 16:22:03 +00:00
DirC="dir c"
DirD="dir d"
mkdir "$INITIATOR_DIR/$DirA"
mkdir "$TARGET_DIR/$DirB"
2016-11-20 16:22:03 +00:00
mkdir "$INITIATOR_DIR/$DirC"
mkdir "$TARGET_DIR/$DirD"
FileA="$DirA/FileA"
FileB="$DirB/FileB"
2016-09-05 20:21:25 +00:00
2016-11-13 19:22:52 +00:00
touch "$INITIATOR_DIR/$FileA"
touch "$TARGET_DIR/$FileB"
2016-09-05 20:21:25 +00:00
2016-11-13 19:22:52 +00:00
# First run
2016-12-23 19:41:23 +00:00
PRESERVE_ACL=yes PRESERVE_XATTR=yes REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i
2016-11-13 19:22:52 +00:00
assertEquals "First deletion run with parameters [$i]." "0" $?
2016-09-05 20:21:25 +00:00
2016-11-13 19:22:52 +00:00
sleep 1
2016-09-05 20:21:25 +00:00
2016-11-18 12:34:49 +00:00
getfacl "$INITIATOR_DIR/$FileA" | grep "other::r--" > /dev/null
2016-11-13 19:22:52 +00:00
assertEquals "Check getting ACL on initiator." "0" $?
2016-11-18 12:34:49 +00:00
getfacl "$TARGET_DIR/$FileB" | grep "other::r--" > /dev/null
2016-11-13 19:22:52 +00:00
assertEquals "Check getting ACL on target." "0" $?
2016-10-23 17:17:25 +00:00
2016-11-20 16:22:03 +00:00
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" $?
2016-11-20 20:47:56 +00:00
setfacl -m o::r-x "$INITIATOR_DIR/$FileA"
2016-11-13 19:22:52 +00:00
assertEquals "Set ACL on initiator" "0" $?
2016-11-20 20:47:56 +00:00
setfacl -m o::-w- "$TARGET_DIR/$FileB"
2016-11-13 19:22:52 +00:00
assertEquals "Set ACL on target" "0" $?
2016-10-23 17:17:25 +00:00
2016-11-20 20:47:56 +00:00
setfacl -m o::rwx "$INITIATOR_DIR/$DirC"
2016-11-20 16:22:03 +00:00
assertEquals "Set ACL on initiator directory" "0" $?
2016-11-20 20:47:56 +00:00
setfacl -m o::-wx "$TARGET_DIR/$DirD"
2016-11-20 16:22:03 +00:00
assertEquals "Set ACL on target directory" "0" $?
2016-11-13 19:22:52 +00:00
# Second run
2016-12-23 19:41:23 +00:00
PRESERVE_ACL=yes PRESERVE_XATTR=yes REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i
2016-11-13 19:22:52 +00:00
assertEquals "First deletion run with parameters [$i]." "0" $?
2016-09-05 20:21:25 +00:00
2016-11-18 12:34:49 +00:00
getfacl "$TARGET_DIR/$FileA" | grep "other::r-x" > /dev/null
2016-11-13 19:22:52 +00:00
assertEquals "ACLs matched original value on target." "0" $?
2016-09-05 20:21:25 +00:00
2016-11-18 12:34:49 +00:00
getfacl "$INITIATOR_DIR/$FileB" | grep "other::-w-" > /dev/null
2016-11-13 19:22:52 +00:00
assertEquals "ACLs matched original value on initiator." "0" $?
2016-11-20 16:22:03 +00:00
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" $?
2016-11-13 19:22:52 +00:00
done
2016-09-05 20:21:25 +00:00
}
2016-11-29 21:40:10 +00:00
function test_ConflictBackups () {
for i in "${osyncParameters[@]}"; do
cd "$OSYNC_DIR"
PrepareLocalDirs
DirA="some dir"
DirB="some other dir"
mkdir -p "$INITIATOR_DIR/$DirA"
mkdir -p "$TARGET_DIR/$DirB"
FileA="$DirA/FileA"
FileB="$DirB/File B"
echo "$FileA" > "$INITIATOR_DIR/$FileA"
echo "$FileB" > "$TARGET_DIR/$FileB"
# First run
2016-12-23 19:41:23 +00:00
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i
assertEquals "First deletion run with parameters [$i]." "0" $?
echo "$FileA+" > "$TARGET_DIR/$FileA"
echo "$FileB+" > "$INITIATOR_DIR/$FileB"
# Second run
2016-12-23 19:41:23 +00:00
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i
assertEquals "First deletion run with parameters [$i]." "0" $?
[ -f "$INITIATOR_DIR/$OSYNC_BACKUP_DIR/$FileA" ]
assertEquals "Backup file is present in [$INITIATOR_DIR/$OSYNC_BACKUP_DIR/$FileA]." "0" $?
[ -f "$TARGET_DIR/$OSYNC_BACKUP_DIR/$FileB" ]
assertEquals "Backup file is present in [$TARGET_DIR/$OSYNC_BACKUP_DIR/$FileB]." "0" $?
done
}
2016-11-29 21:40:10 +00:00
function test_MultipleConflictBackups () {
2016-11-15 21:56:02 +00:00
local additionalParameters
# modify config files
SetConfFileValue "$CONF_DIR/$LOCAL_CONF" "CONFLICT_BACKUP_MULTIPLE" "yes"
SetConfFileValue "$CONF_DIR/$REMOTE_CONF" "CONFLICT_BACKUP_MULTIPLE" "yes"
2016-11-15 21:56:02 +00:00
if [ "$OSYNC_MIN_VERSION" != "1" ]; then
additionalParameters="--errors-only --summary --no-prefix"
fi
for i in "${osyncParameters[@]}"; do
2017-02-07 16:43:30 +00:00
echo "Running with parameters [$i]."
cd "$OSYNC_DIR"
PrepareLocalDirs
FileA="FileA"
FileB="FileB"
echo "$FileA" > "$INITIATOR_DIR/$FileA"
echo "$FileB" > "$TARGET_DIR/$FileB"
# First run
2016-12-23 19:41:23 +00:00
CONFLICT_BACKUP_MULTIPLE=yes REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i $additionalParameters
assertEquals "First deletion run with parameters [$i]." "0" $?
echo "$FileA+" > "$TARGET_DIR/$FileA"
echo "$FileB+" > "$INITIATOR_DIR/$FileB"
# Second run
2016-12-23 19:41:23 +00:00
CONFLICT_BACKUP_MULTIPLE=yes REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i $additionalParameters
assertEquals "First deletion run with parameters [$i]." "0" $?
echo "$FileA-" > "$TARGET_DIR/$FileA"
echo "$FileB-" > "$INITIATOR_DIR/$FileB"
# Third run
2016-12-23 19:41:23 +00:00
CONFLICT_BACKUP_MULTIPLE=yes REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i $additionalParameters
assertEquals "First deletion run with parameters [$i]." "0" $?
echo "$FileA*" > "$TARGET_DIR/$FileA"
echo "$FileB*" > "$INITIATOR_DIR/$FileB"
# Fouth run
2016-12-23 19:41:23 +00:00
CONFLICT_BACKUP_MULTIPLE=yes REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i $additionalParameters
assertEquals "First deletion run with parameters [$i]." "0" $?
# This test may fail only on 31th December at 23:59 :)
[ $(find "$INITIATOR_DIR/$OSYNC_BACKUP_DIR/" -type f -name "FileA.$(date '+%Y')*" | wc -l) -eq 3 ]
assertEquals "3 Backup files are present in [$INITIATOR_DIR/$OSYNC_BACKUP_DIR/]." "0" $?
[ $(find "$TARGET_DIR/$OSYNC_BACKUP_DIR/" -type f -name "FileB.$(date '+%Y')*" | wc -l) -eq 3 ]
assertEquals "3 Backup files are present in [$TARGET_DIR/$OSYNC_BACKUP_DIR/]." "0" $?
done
2016-11-21 18:41:35 +00:00
SetConfFileValue "$CONF_DIR/$LOCAL_CONF" "CONFLICT_BACKUP_MULTIPLE" "no"
SetConfFileValue "$CONF_DIR/$REMOTE_CONF" "CONFLICT_BACKUP_MULTIPLE" "no"
}
2016-11-29 21:40:10 +00:00
function test_Locking () {
2016-11-17 11:15:24 +00:00
# local not running = resume
# remote same instance_id = resume
# remote different instance_id = stop
# remote dfiffent instance_id + FORCE_STRANGER_LOCK_RESUME = resume
# Initiator lock present should always be resumed if pid does not run
for i in "${osyncParameters[@]}"; do
cd "$OSYNC_DIR"
PrepareLocalDirs
mkdir -p "$INITIATOR_DIR/$OSYNC_WORKDIR"
echo 65536 > "$INITIATOR_DIR/$OSYNC_WORKDIR/lock"
2016-12-23 19:41:23 +00:00
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i
2016-11-17 11:15:24 +00:00
assertEquals "Should be able to resume when initiator has lock without running pid." "0" $?
echo $$ > "$INITIATOR_DIR/$OSYNC_WORKDIR/lock"
2016-12-23 19:41:23 +00:00
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i
2016-11-17 11:15:24 +00:00
assertEquals "Should never be able to resume when initiator has lock with running pid." "1" $?
done
# Target lock present should be resumed if instance ID is the same as current one
PrepareLocalDirs
mkdir -p "$TARGET_DIR/$OSYNC_WORKDIR"
echo 65536@quicklocal > "$TARGET_DIR/$OSYNC_WORKDIR/lock"
2016-12-23 19:41:23 +00:00
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE ${osyncParameters[$__quickLocal]}
2016-11-17 11:15:24 +00:00
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"
2016-12-23 19:41:23 +00:00
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE ${osyncParameters[$__confLocal]}
2016-11-17 11:15:24 +00:00
assertEquals "Should be able to resume locked target with same instance_id in confLocal mode." "0" $?
2016-12-12 18:27:34 +00:00
if [ "$LOCAL_OS" != "msys" ] && [ "$LOCAL_OS" != "Cygwin" ]; then
2016-12-08 11:09:52 +00:00
PrepareLocalDirs
mkdir -p "$TARGET_DIR/$OSYNC_WORKDIR"
echo 65536@quickremote > "$TARGET_DIR/$OSYNC_WORKDIR/lock"
2016-11-17 11:15:24 +00:00
2016-12-23 19:41:23 +00:00
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE ${osyncParameters[$__quickRemote]}
2016-12-08 11:09:52 +00:00
assertEquals "Should be able to resume locked target with same instance_id in quickRemote mode." "0" $?
2016-11-17 11:15:24 +00:00
2016-12-08 11:09:52 +00:00
PrepareLocalDirs
mkdir -p "$TARGET_DIR/$OSYNC_WORKDIR"
echo 65536@remote > "$TARGET_DIR/$OSYNC_WORKDIR/lock"
2016-11-17 11:15:24 +00:00
2016-12-23 19:41:23 +00:00
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE ${osyncParameters[$__confRemote]}
2016-12-08 11:09:52 +00:00
assertEquals "Should be able to resume locked target with same instance_id in confRemote mode." "0" $?
fi
2016-11-17 11:15:24 +00:00
# Remote Target lock present should not be resumed if instance ID is NOT the same as current one, local target lock is resumed
PrepareLocalDirs
mkdir -p "$TARGET_DIR/$OSYNC_WORKDIR"
echo 65536@bogusinstance > "$TARGET_DIR/$OSYNC_WORKDIR/lock"
2016-12-23 19:41:23 +00:00
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE ${osyncParameters[$__quickLocal]}
2016-11-17 11:15:24 +00:00
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"
2016-12-23 19:41:23 +00:00
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE ${osyncParameters[$__confLocal]}
2016-11-17 11:15:24 +00:00
assertEquals "Should be able to resume locked local target with bogus instance_id in confLocal mode." "0" $?
2016-12-12 18:27:34 +00:00
if [ "$LOCAL_OS" != "msys" ] && [ "$LOCAL_OS" != "Cygwin" ]; then
2016-12-08 11:09:52 +00:00
PrepareLocalDirs
mkdir -p "$TARGET_DIR/$OSYNC_WORKDIR"
echo 65536@bogusinstance > "$TARGET_DIR/$OSYNC_WORKDIR/lock"
2016-11-17 11:15:24 +00:00
2016-12-23 19:41:23 +00:00
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE ${osyncParameters[$__quickRemote]}
2016-12-08 11:09:52 +00:00
assertEquals "Should not be able to resume remote locked target with bogus instance_id in quickRemote mode." "1" $?
2016-11-17 11:15:24 +00:00
2016-12-08 11:09:52 +00:00
PrepareLocalDirs
mkdir -p "$TARGET_DIR/$OSYNC_WORKDIR"
echo 65536@bogusinstance > "$TARGET_DIR/$OSYNC_WORKDIR/lock"
2016-11-17 11:15:24 +00:00
2016-12-23 19:41:23 +00:00
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE ${osyncParameters[$__confRemote]}
2016-12-08 11:09:52 +00:00
assertEquals "Should not be able to resume remote locked target with bogus instance_id in confRemote mode." "1" $?
fi
2016-11-17 11:15:24 +00:00
# Target lock present should be resumed if instance ID is NOT the same as current one but FORCE_STRANGER_UNLOCK=yes
SetConfFileValue "$CONF_DIR/$LOCAL_CONF" "FORCE_STRANGER_LOCK_RESUME" "yes"
SetConfFileValue "$CONF_DIR/$REMOTE_CONF" "FORCE_STRANGER_LOCK_RESUME" "yes"
for i in "${osyncParameters[@]}"; do
cd "$OSYNC_DIR"
PrepareLocalDirs
mkdir -p "$INITIATOR_DIR/$OSYNC_WORKDIR"
echo 65536@bogusinstance > "$INITIATOR_DIR/$OSYNC_WORKDIR/lock"
2016-12-23 19:41:23 +00:00
FORCE_STRANGER_UNLOCK=yes REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE $i
2016-11-17 11:15:24 +00:00
assertEquals "Should be able to resume when target has lock with different instance id but FORCE_STRANGER_UNLOCK=yes." "0" $?
done
2016-12-04 17:57:39 +00:00
SetConfFileValue "$CONF_DIR/$LOCAL_CONF" "FORCE_STRANGER_LOCK_RESUME" "no"
SetConfFileValue "$CONF_DIR/$REMOTE_CONF" "FORCE_STRANGER_LOCK_RESUME" "no"
2016-11-17 11:15:24 +00:00
}
2016-11-29 21:40:10 +00:00
function test_WaitForTaskCompletion () {
local pids
# Tests compatible with v1.1 syntax
2016-11-30 12:50:49 +00:00
# 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
2016-11-15 23:47:27 +00:00
if [ "$OSYNC_MIN_VERSION" == "1" ]; then
2016-11-30 12:50:49 +00:00
echo "Using v1.1 WaitForTaskCompletion test"
# Needed in order to get PROCESS_test_CMD value
InitLocalOSSettings
# Standard wait
sleep 2 &
2016-11-30 12:50:49 +00:00
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]}
2016-11-30 12:50:49 +00:00
assertEquals "WaitForTaskCompletion v1.1 test 2" "0" $?
# Pid is killed
sleep 5 &
WaitForTaskCompletion $! 0 2 ${FUNCNAME[0]}
2016-11-30 12:50:49 +00:00
assertEquals "WaitForTaskCompletion v1.1 test 3" "1" $?
# Standard wait
sleep 2 &
WaitForCompletion $! 0 0 ${FUNCNAME[0]}
2016-11-30 12:50:49 +00:00
assertEquals "WaitForCompletion test 1" "0" $?
# Standard wait with warning
sleep 5 &
WaitForCompletion $! 3 0 ${FUNCNAME[0]}
2016-11-30 12:50:49 +00:00
assertEquals "WaitForCompletion test 2" "0" $?
# Pid is killed
sleep 5 &
WaitForCompletion $! 0 2 ${FUNCNAME[0]}
2016-11-30 12:50:49 +00:00
assertEquals "WaitForCompletion test 3" "1" $?
2016-11-15 22:20:20 +00:00
return 0
fi
# Tests if wait for task completion works correctly with v1.2+
2016-09-05 20:21:25 +00:00
# Standard wait
sleep 1 &
pids="$!"
sleep 2 &
pids="$pids;$!"
2016-11-24 12:26:10 +00:00
WaitForTaskCompletion $pids 0 0 $SLEEP_TIME $KEEP_LOGGING true true false ${FUNCNAME[0]}
2016-09-05 20:21:25 +00:00
assertEquals "WaitForTaskCompletion test 1" "0" $?
# Standard wait with warning
sleep 2 &
pids="$!"
sleep 5 &
pids="$pids;$!"
2016-11-24 12:26:10 +00:00
WaitForTaskCompletion $pids 3 0 $SLEEP_TIME $KEEP_LOGGING true true false ${FUNCNAME[0]}
2016-09-05 20:21:25 +00:00
assertEquals "WaitForTaskCompletion test 2" "0" $?
# Both pids are killed
sleep 5 &
pids="$!"
sleep 5 &
pids="$pids;$!"
2016-11-24 12:26:10 +00:00
WaitForTaskCompletion $pids 0 2 $SLEEP_TIME $KEEP_LOGGING true true false ${FUNCNAME[0]}
2016-09-05 20:21:25 +00:00
assertEquals "WaitForTaskCompletion test 3" "2" $?
# One of two pids are killed
sleep 2 &
pids="$!"
sleep 10 &
pids="$pids;$!"
2016-11-24 12:26:10 +00:00
WaitForTaskCompletion $pids 0 3 $SLEEP_TIME $KEEP_LOGGING true true false ${FUNCNAME[0]}
2016-09-05 20:21:25 +00:00
assertEquals "WaitForTaskCompletion test 4" "1" $?
# Count since script begin, the following should output two warnings and both pids should get killed
sleep 20 &
pids="$!"
sleep 20 &
pids="$pids;$!"
2016-11-24 12:26:10 +00:00
WaitForTaskCompletion $pids 3 5 $SLEEP_TIME $KEEP_LOGGING false true false ${FUNCNAME[0]}
2016-09-05 20:21:25 +00:00
assertEquals "WaitForTaskCompletion test 5" "2" $?
}
2016-11-29 21:40:10 +00:00
function test_ParallelExec () {
2016-11-15 23:47:27 +00:00
if [ "$OSYNC_MIN_VERSION" == "1" ]; then
2016-11-24 12:26:10 +00:00
echo "Skipping ParallelExec test because osync v1.1 ofunctions don't have this function."
2016-11-15 22:20:20 +00:00
return 0
fi
2016-09-06 17:26:37 +00:00
local cmd
# Test if parallelExec works correctly in array mode
2016-09-05 20:21:25 +00:00
cmd="sleep 2;sleep 2;sleep 2;sleep 2"
ParallelExec 4 "$cmd"
assertEquals "ParallelExec test 1" "0" $?
cmd="sleep 2;du /none;sleep 2"
ParallelExec 2 "$cmd"
assertEquals "ParallelExec test 2" "1" $?
cmd="sleep 4;du /none;sleep 3;du /none;sleep 2"
ParallelExec 3 "$cmd"
assertEquals "ParallelExec test 3" "2" $?
2016-09-06 17:26:37 +00:00
# Test if parallelExec works correctly in file mode
echo "sleep 2" > "$TMP_FILE"
echo "sleep 2" >> "$TMP_FILE"
echo "sleep 2" >> "$TMP_FILE"
echo "sleep 2" >> "$TMP_FILE"
2016-09-08 20:57:57 +00:00
ParallelExec 4 "$TMP_FILE" true
2016-09-06 17:26:37 +00:00
assertEquals "ParallelExec test 4" "0" $?
echo "sleep 2" > "$TMP_FILE"
echo "du /nome" >> "$TMP_FILE"
echo "sleep 2" >> "$TMP_FILE"
2016-09-08 20:57:57 +00:00
ParallelExec 2 "$TMP_FILE" true
2016-09-06 17:26:37 +00:00
assertEquals "ParallelExec test 5" "1" $?
echo "sleep 4" > "$TMP_FILE"
echo "du /none" >> "$TMP_FILE"
echo "sleep 3" >> "$TMP_FILE"
echo "du /none" >> "$TMP_FILE"
echo "sleep 2" >> "$TMP_FILE"
2016-09-08 20:57:57 +00:00
ParallelExec 3 "$TMP_FILE" true
2016-09-06 17:26:37 +00:00
assertEquals "ParallelExec test 6" "2" $?
2016-11-24 12:26:10 +00:00
#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" $?
2016-09-05 20:21:25 +00:00
}
2016-11-29 19:28:15 +00:00
function test_timedExecution () {
local arguments
2016-11-30 12:50:49 +00:00
local warnExitCode
2016-11-29 19:28:15 +00:00
# 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
2016-11-30 12:50:49 +00:00
softTimes[1]=0
2016-11-29 19:28:15 +00:00
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]."
2016-11-30 12:50:49 +00:00
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
2016-12-11 19:54:40 +00:00
assertEquals "Timed Execution test with timed SOFT_MAX_EXEC_TIME=${softTimes[$x]} and HARD_MAX_EXEC_TIME=${hardTimes[$x]}." $x $retval
2016-11-30 12:50:49 +00:00
else
# osync v1.1 had different exit codes, 240 was warning, anything else than 0 was error
if [ $x -eq 2 ]; then
2016-12-11 19:54:40 +00:00
assertEquals "Timed Execution test with timed SOFT_MAX_EXEC_TIME=${softTimes[$x]} and HARD_MAX_EXEC_TIME=${hardTimes[$x]}." 240 $retval
2016-11-30 12:50:49 +00:00
elif [ $x -eq 1 ]; then
2016-12-11 19:54:40 +00:00
assertNotEquals "Timed Execution test with timed SOFT_MAX_EXEC_TIME=${softTimes[$x]} and HARD_MAX_EXEC_TIME=${hardTimes[$x]}." 0 $retval
2016-11-30 12:50:49 +00:00
else
2016-12-11 19:54:40 +00:00
assertEquals "Timed Execution test with timed SOFT_MAX_EXEC_TIME=${softTimes[$x]} and HARD_MAX_EXEC_TIME=${hardTimes[$x]}." 0 $retval
2016-11-30 12:50:49 +00:00
fi
fi
2016-11-29 19:28:15 +00:00
done
done
}
2016-11-29 21:40:10 +00:00
function test_UpgradeConfRun () {
2016-11-15 23:47:27 +00:00
if [ "$OSYNC_MIN_VERSION" == "1" ]; then
2016-11-15 22:20:20 +00:00
echo "Skipping Upgrade script test because no further dev will happen on this for v1.1"
return 0
fi
2016-10-23 17:17:25 +00:00
2016-12-11 19:54:40 +00:00
# Basic return code tests. Need to go deep into file presence testing
cd "$OSYNC_DIR"
2016-10-23 17:17:25 +00:00
PrepareLocalDirs
2016-12-11 19:54:40 +00:00
# Make a security copy of the old config file
cp "$CONF_DIR/$OLD_CONF" "$CONF_DIR/$TMP_OLD_CONF"
2016-10-23 17:17:25 +00:00
2016-12-11 19:54:40 +00:00
./$OSYNC_UPGRADE "$CONF_DIR/$TMP_OLD_CONF"
assertEquals "Conf file upgrade" "0" $?
# 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"
2016-12-11 19:54:40 +00:00
./$OSYNC_EXECUTABLE "$CONF_DIR/$TMP_OLD_CONF"
assertEquals "Upgraded conf file execution test" "0" $?
2016-10-23 17:17:25 +00:00
2016-12-11 19:54:40 +00:00
rm -f "$CONF_DIR/$TMP_OLD_CONF"
rm -f "$CONF_DIR/$TMP_OLD_CONF.save"
2016-10-23 17:17:25 +00:00
}
2016-11-29 21:40:10 +00:00
function test_DaemonMode () {
2016-12-09 18:22:14 +00:00
if [ "$LOCAL_OS" == "WinNT10" ] || [ "$LOCAL_OS" == "msys" ] || [ "$LOCAL_OS" == "Cygwin" ]; then
echo "Skipping daemon mode test as [$LOCAL_OS] does not have inotifywait support."
2016-11-22 16:40:47 +00:00
return 0
fi
2016-11-17 22:40:17 +00:00
for i in "${osyncDaemonParameters[@]}"; do
cd "$OSYNC_DIR"
PrepareLocalDirs
FileA="FileA"
FileB="FileB"
FileC="FileC"
touch "$INITIATOR_DIR/$FileA"
touch "$TARGET_DIR/$FileB"
./$OSYNC_EXECUTABLE "$CONF_DIR/$LOCAL_CONF" --on-changes &
pid=$!
2016-10-23 17:17:25 +00:00
2016-11-17 22:40:17 +00:00
# Trivial value of 2xMIN_WAIT from config files
echo "Sleeping for 120s"
sleep 120
[ -f "$TARGET_DIR/$FileB" ]
assertEquals "File [$TARGET_DIR/$FileB] should be synced." "0" $?
[ -f "$INITIATOR_DIR/$FileA" ]
assertEquals "File [$INITIATOR_DIR/$FileB] should be synced." "0" $?
touch "$INITIATOR_DIR/$FileC"
rm -f "$INITIATOR_DIR/$FileA"
rm -f "$TARGET_DIR/$FileB"
echo "Sleeping for 120s"
sleep 120
[ ! -f "$TARGET_DIR/$FileB" ]
assertEquals "File [$TARGET_DIR/$FileB] should be deleted." "0" $?
[ ! -f "$INITIATOR_DIR/$FileA" ]
assertEquals "File [$INITIATOR_DIR/$FileA] should be deleted." "0" $?
[ -f "$TARGET_DIR/$OSYNC_DELETE_DIR/$FileA" ]
assertEquals "File [$TARGET_DIR/$OSYNC_DELETE_DIR/$FileA] should be in soft deletion dir." "0" $?
[ -f "$INITIATOR_DIR/$OSYNC_DELETE_DIR/$FileB" ]
assertEquals "File [$INITIATOR_DIR/$OSYNC_DELETE_DIR/$FileB] should be in soft deletion dir." "0" $?
[ -f "$TARGET_DIR/$FileC" ]
2016-11-22 18:24:51 +00:00
assertEquals "File [$TARGET_DIR/$FileC] should be synced." "0" $?
2016-11-17 22:40:17 +00:00
kill $pid
done
}
2016-11-19 13:21:42 +00:00
2016-11-29 21:40:10 +00:00
function test_NoRemoteAccessTest () {
2016-11-19 13:21:42 +00:00
RemoveSSH
2016-12-11 19:54:40 +00:00
cd "$OSYNC_DIR"
2016-11-19 13:21:42 +00:00
PrepareLocalDirs
2016-12-23 19:41:23 +00:00
REMOTE_HOST_PING=$RHOST_PING ./$OSYNC_EXECUTABLE ${osyncParameters[$__confLocal]}
2016-11-19 13:21:42 +00:00
assertEquals "Basic local test without remote access." "0" $?
}
2016-09-05 20:21:25 +00:00
. "$TESTS_DIR/shunit2/shunit2"