From f28b884c0140eee8ddd52c4543b554915eacd458 Mon Sep 17 00:00:00 2001 From: deajan Date: Fri, 2 Sep 2016 13:13:53 +0200 Subject: [PATCH] Added encryption unit tests --- dev/tests/run_local_tests.sh | 340 ++++++++++++++++++++++++---- dev/tests/run_travis_tests.sh | 402 +++++++++++++++++++++++++++++++--- 2 files changed, 664 insertions(+), 78 deletions(-) diff --git a/dev/tests/run_local_tests.sh b/dev/tests/run_local_tests.sh index a5c4dff..d2f0d75 100755 --- a/dev/tests/run_local_tests.sh +++ b/dev/tests/run_local_tests.sh @@ -1,11 +1,18 @@ #!/usr/bin/env bash -## obackup basic tests suite 2016083004 +## obackup basic tests suite 2016090101 + +#TODO: Must recreate files before each test set OBACKUP_DIR="$(pwd)" OBACKUP_DIR=${OBACKUP_DIR%%/dev*} DEV_DIR="$OBACKUP_DIR/dev" TESTS_DIR="$DEV_DIR/tests" +CONF_DIR="$TESTS_DIR/conf" + +LOCAL_CONF="local.conf" +PULL_CONF="pull.conf" +PUSH_CONF="push.conf" OBACKUP_EXECUTABLE=obackup.sh @@ -21,6 +28,9 @@ TARGET_DIR_FILE_PULL="$TARGET_DIR/files-pull" TARGET_DIR_SQL_PUSH="$TARGET_DIR/sql-push" TARGET_DIR_FILE_PUSH="$TARGET_DIR/files-push" +TARGET_DIR_SQL_CRYPT="$TARGET_DIR/sql-crypt" +TARGET_DIR_FILE_CRYPT="$TARGET_DIR/files-crypt" + SIMPLE_DIR="testData" RECURSIVE_DIR="testDataRecursive" @@ -34,6 +44,7 @@ S_FILE_1="some file" R_FILE_1="file_1" R_FILE_2="file 2" R_FILE_3="file 3" +N_FILE_1="non recurse file" EXCLUDED_FILE="exclu.ded" @@ -41,8 +52,88 @@ DATABASE_1="mysql.sql.xz" DATABASE_2="performance_schema.sql.xz" DATABASE_EXCLUDED="information_schema.sql.xz" +CRYPT_EXTENSION=".obackup.gpg" +ROTATE_1_EXTENSION=".obackup.1" + +PASSFILE="passfile" + +function SetStableToYes () { + if grep "^IS_STABLE=YES" "$OBACKUP_DIR/$OBACKUP_EXECUTABLE" > /dev/null; then + IS_STABLE=yes + else + IS_STABLE=no + sed -i.tmp 's/^IS_STABLE=no/IS_STABLE=yes/' "$OBACKUP_DIR/$OBACKUP_EXECUTABLE" + assertEquals "Set stable to yes" "0" $? + fi +} + +function SetStableToOrigin () { + if [ "$IS_STABLE" == "no" ]; then + sed -i.tmp 's/^IS_STABLE=yes/IS_STABLE=no/' "$OBACKUP_DIR/$OBACKUP_EXECUTABLE" + assertEquals "Set stable to origin value" "0" $? + fi +} + +function SetEncryption () { + local confFile="${1}" + local value="${2}" + + if [ $value == true ]; then + sed -i 's/^ENCRYPTION=no/ENCRYPTION=yes/' "$confFile" + assertEquals "Enable encryption in $file" "0" $? + else + sed -i 's/^ENCRYPTION=yes/ENCRYPTION=no/' "$confFile" + assertEquals "Disable encryption in $file" "0" $? + fi +} + +function SetupGPG { + if ! gpg2 --list-keys | grep "John Doe" ; then + + cat >gpgcommand < /dev/null 2>&1; then + rndg -r /dev/urandom + fi + + gpg2 --batch --gen-key gpgcommand + echo $(gpg2 --list-keys) + rm -f gpgcommand + + fi + + echo "PassPhrase123" > "$TESTS_DIR/$PASSFILE" +} + +function SetupSSH { + echo -e 'y\n'| ssh-keygen -t rsa -b 2048 -N "" -f "${HOME}/.ssh/id_rsa_local" + cat "${HOME}/.ssh/id_rsa_local.pub" >> "${HOME}/.ssh/authorized_keys" + chmod 600 "${HOME}/.ssh/authorized_keys" + ls ${HOME}/.ssh -lah +} + function oneTimeSetUp () { source "$DEV_DIR/ofunctions.sh" + SetupGPG + SetupSSH +} + +function SetUp () { + rm -rf "$SOURCE_DIR" + rm -rf "$TARGET_DIR" mkdir -p "$SOURCE_DIR/$SIMPLE_DIR/$S_DIR_1" mkdir -p "$SOURCE_DIR/$RECURSIVE_DIR/$R_EXCLUDED_DIR" @@ -52,6 +143,7 @@ function oneTimeSetUp () { touch "$SOURCE_DIR/$SIMPLE_DIR/$S_DIR_1/$S_FILE_1" touch "$SOURCE_DIR/$SIMPLE_DIR/$EXCLUDED_FILE" + touch "$SOURCE_DIR/$RECURSIVE_DIR/$N_FILE_1" touch "$SOURCE_DIR/$RECURSIVE_DIR/$R_DIR_1/$R_FILE_1" touch "$SOURCE_DIR/$RECURSIVE_DIR/$R_DIR_2/$R_FILE_2" dd if=/dev/urandom of="$SOURCE_DIR/$RECURSIVE_DIR/$R_DIR_3/$R_FILE_3" bs=1M count=2 @@ -59,6 +151,7 @@ function oneTimeSetUp () { FilePresence=( "$SOURCE_DIR/$SIMPLE_DIR/$S_DIR_1/$S_FILE_1" + "$SOURCE_DIR/$RECURSIVE_DIR/$N_FILE_1" "$SOURCE_DIR/$RECURSIVE_DIR/$R_DIR_1/$R_FILE_1" "$SOURCE_DIR/$RECURSIVE_DIR/$R_DIR_2/$R_FILE_2" "$SOURCE_DIR/$RECURSIVE_DIR/$R_DIR_3/$R_FILE_3" @@ -81,38 +174,23 @@ function oneTimeSetUp () { DirectoriesExcluded=( "$RECURSIVE_DIR/$R_EXCLUDED_DIR" ) - } function oneTimeTearDown () { - if [ "$IS_STABLE" == "no" ]; then - sed -i 's/^IS_STABLE=yes/IS_STABLE=no/' "$OBACKUP_DIR/$OBACKUP_EXECUTABLE" - fi - - #rm -rf $SOURCE_DIR - #rm -rf $TARGET_DIR + SetStableToOrigin } function test_Merge () { cd "$DEV_DIR" ./merge.sh assertEquals "Merging code" "0" $? + SetStableToYes } -function test_SetStable () { - if grep "^IS_STABLE=YES" "$OBACKUP_DIR/$OBACKUP_EXECUTABLE" > /dev/null; then - IS_STABLE=yes - else - IS_STABLE=no - sed -i 's/^IS_STABLE=no/IS_STABLE=yes/' "$OBACKUP_DIR/$OBACKUP_EXECUTABLE" - assertEquals "Set as stable" "0" $? - fi -} - -function test_FirstLocalRun () { +function test_LocalRun () { # Basic return code tests. Need to go deep into file presence testing cd "$OBACKUP_DIR" - ./$OBACKUP_EXECUTABLE dev/tests/conf/local.conf + ./$OBACKUP_EXECUTABLE "$CONF_DIR/$LOCAL_CONF" assertEquals "Return code" "0" $? for file in "${FilePresence[@]}"; do @@ -139,27 +217,26 @@ function test_FirstLocalRun () { [ -d "$TARGET_DIR_FILE_LOCAL/$directory" ] assertEquals "Directory Excluded [$TARGET_DIR_FILE_LOCAL/$directory]" "1" $? done -} -function test_SecondLocalRun () { - # Only tests presence of rotated files - cd "$OBACKUP_DIR" - ./$OBACKUP_EXECUTABLE dev/tests/conf/local.conf + # Tests presence of rotated files + + ./$OBACKUP_EXECUTABLE "$CONF_DIR/$LOCAL_CONF" assertEquals "Return code" "0" $? for file in "${DatabasePresence[@]}"; do - [ -f "$TARGET_DIR_SQL_LOCAL/$file.obackup.1" ] + [ -f "$TARGET_DIR_SQL_LOCAL/$file$ROTATE_1_EXTENSION" ] assertEquals "Database rotated Presence [$TARGET_DIR_SQL_LOCAL/$file]" "0" $? done - [ -d "$TARGET_DIR_FILE_LOCAL/$(dirname $SOURCE_DIR).obackup.1" ] - assertEquals "File rotated Presence [$TARGET_DIR_FILE_LOCAL/$(dirname $SOURCE_DIR).obackup.1]" "0" $? + [ -d "$TARGET_DIR_FILE_LOCAL/$(dirname $SOURCE_DIR)$ROTATE_1_EXTENSION" ] + assertEquals "File rotated Presence [$TARGET_DIR_FILE_LOCAL/$(dirname $SOURCE_DIR)$ROTATE_1_EXTENSION]" "0" $? + } -function test_FirstPullRun () { +function test_PullRun () { # Basic return code tests. Need to go deep into file presence testing cd "$OBACKUP_DIR" - ./$OBACKUP_EXECUTABLE dev/tests/conf/pull.conf + ./$OBACKUP_EXECUTABLE "$CONF_DIR/$PULL_CONF" assertEquals "Return code" "0" $? for file in "${FilePresence[@]}"; do @@ -186,27 +263,27 @@ function test_FirstPullRun () { [ -d "$TARGET_DIR_FILE_PULL/$directory" ] assertEquals "Directory Excluded [$TARGET_DIR_FILE_PULL/$directory]" "1" $? done -} -function test_SecondPullRun () { - # Only tests presence of rotated files + # Tests presence of rotated files + cd "$OBACKUP_DIR" - ./$OBACKUP_EXECUTABLE dev/tests/conf/pull.conf + ./$OBACKUP_EXECUTABLE "$CONF_DIR/$PULL_CONF" assertEquals "Return code" "0" $? for file in "${DatabasePresence[@]}"; do - [ -f "$TARGET_DIR_SQL_PULL/$file.obackup.1" ] + [ -f "$TARGET_DIR_SQL_PULL/$file$ROTATE_1_EXTENSION" ] assertEquals "Database rotated Presence [$TARGET_DIR_SQL_PULL/$file]" "0" $? done - [ -d "$TARGET_DIR_FILE_PULL/$(dirname $SOURCE_DIR).obackup.1" ] + [ -d "$TARGET_DIR_FILE_PULL/$(dirname $SOURCE_DIR)$ROTATE_1_EXTENSION" ] assertEquals "File rotated Presence" "0" $? + } -function test_FirstPushRun () { +function test_PushRun () { # Basic return code tests. Need to go deep into file presence testing cd "$OBACKUP_DIR" - ./$OBACKUP_EXECUTABLE dev/tests/conf/push.conf + ./$OBACKUP_EXECUTABLE "$CONF_DIR/$PUSH_CONF" assertEquals "Return code" "0" $? for file in "${FilePresence[@]}"; do @@ -233,21 +310,190 @@ function test_FirstPushRun () { [ -d "$TARGET_DIR_FILE_PUSH/$directory" ] assertEquals "Directory Excluded [$TARGET_DIR_FILE_PUSH/$directory]" "1" $? done -} -function test_SecondPushRun () { - # Only tests presence of rotated files + # Tests presence of rotated files cd "$OBACKUP_DIR" - ./$OBACKUP_EXECUTABLE dev/tests/conf/push.conf + ./$OBACKUP_EXECUTABLE "$CONF_DIR/$PUSH_CONF" assertEquals "Return code" "0" $? for file in "${DatabasePresence[@]}"; do - [ -f "$TARGET_DIR_SQL_PUSH/$file.obackup.1" ] + [ -f "$TARGET_DIR_SQL_PUSH/$file$ROTATE_1_EXTENSION" ] assertEquals "Database rotated Presence [$TARGET_DIR_SQL_PUSH/$file]" "0" $? done - [ -d "$TARGET_DIR_FILE_PUSH/$(dirname $SOURCE_DIR).obackup.1" ] + [ -d "$TARGET_DIR_FILE_PUSH/$(dirname $SOURCE_DIR)$ROTATE_1_EXTENSION" ] assertEquals "File rotated Presence" "0" $? + +} + +function test_EncryptLocalRun () { + SetEncryption "$CONF_DIR/$LOCAL_CONF" true + + cd "$OBACKUP_DIR" + ./$OBACKUP_EXECUTABLE "$CONF_DIR/$LOCAL_CONF" + + for file in "${FilePresence[@]}"; do + [ -f "$TARGET_DIR_FILE_LOCAL/$file$CRYPT_EXTENSION" ] + assertEquals "File Presence [$TARGET_DIR_FILE_LOCAL/$file$CRYPT_EXTENSION]" "0" $? + done + +# TODO: Exclusion lists don't work with encrypted files yet +# for file in "${FileExcluded[@]}"; do +# [ -f "$TARGET_DIR_FILE_LOCAL/$file$CRYPT_EXTENSION" ] +# assertEquals "File Excluded [$TARGET_DIR_FILE_LOCAL/$file$CRYPT_EXTENSION]" "1" $? +# done + + for file in "${DatabasePresence[@]}"; do + [ -f "$TARGET_DIR_SQL_LOCAL/$file$CRYPT_EXTENSION" ] + assertEquals "Database Presence [$TARGET_DIR_SQL_LOCAL/$file$CRYPT_EXTENSION]" "0" $? + done + +# for file in "${DatabaseExcluded[@]}"; do +# [ -f "$TARGET_DIR_SQL_LOCAL/$file$CRYPT_EXTENSION" ] +# assertEquals "Database Excluded [$TARGET_DIR_SQL_LOCAL/$file$CRYPT_EXTENSION]" "1" $? +# done + +# for directory in "${DirectoriesExcluded[@]}"; do +# [ -d "$TARGET_DIR_FILE_LOCAL/$directory" ] +# assertEquals "Directory Excluded [$TARGET_DIR_FILE_LOCAL/$directory]" "1" $? +# done + + + # Tests presence of rotated files + + cd "$OBACKUP_DIR" + ./$OBACKUP_EXECUTABLE "$CONF_DIR/$LOCAL_CONF" + assertEquals "Return code" "0" $? + + for file in "${DatabasePresence[@]}"; do + [ -f "$TARGET_DIR_SQL_LOCAL/$file$CRYPT_EXTENSION$ROTATE_1_EXTENSION" ] + assertEquals "Database rotated Presence [$TARGET_DIR_SQL_LOCAL/$file$CRYPT_EXTENSION$ROTATE_1_EXTENSION]" "0" $? + done + + [ -d "$TARGET_DIR_FILE_LOCAL/$(dirname $SOURCE_DIR)$CRYPT_EXTENSION$ROTATE_1_EXTENSION" ] + assertEquals "File rotated Presence [$TARGET_DIR_FILE_LOCAL/$(dirname $SOURCE_DIR)$CRYPT_EXTENSION$ROTATE_1_EXTENSION]" "0" $? + + SetEncryption "$CONF_DIR/$LOCAL_CONF" false + + ./$OBACKUP_EXECUTABLE --decrypt="$TARGET_DIR_SQL_LOCAL" --passphrase-file="$TESTS_DIR/$PASSFILE" + assertEquals "Decrypt sql storage" "0" $? + + ./$OBACKUP_EXECUTABLE --decrypt="$TARGET_DIR_FILE_LOCAL" --passphrase-file="$TESTS_DIR/$PASSFILE" + assertEquals "Decrypt file storage" "0" $? + +} + +function test_EncryptPullRun () { + # Basic return code tests. Need to go deep into file presence testing + SetEncryption "$CONF_DIR/$PULL_CONF" true + + cd "$OBACKUP_DIR" + ./$OBACKUP_EXECUTABLE "$CONF_DIR/$PULL_CONF" + assertEquals "Return code" "0" $? + + for file in "${FilePresence[@]}"; do + [ -f "$TARGET_DIR_FILE_PULL/$file$CRYPT_EXTENSION" ] + assertEquals "File Presence [$TARGET_DIR_FILE_PULL/$file$CRYPT_EXTENSION]" "0" $? + done + +# for file in "${FileExcluded[@]}"; do +# [ -f "$TARGET_DIR_FILE_PULL/$file$CRYPT_EXTENSION" ] +# assertEquals "File Excluded [$TARGET_DIR_FILE_PULL/$file$CRYPT_EXTENSION]" "1" $? +# done + + for file in "${DatabasePresence[@]}"; do + [ -f "$TARGET_DIR_SQL_PULL/$file$CRYPT_EXTENSION" ] + assertEquals "Database Presence [$TARGET_DIR_SQL_PULL/$file$CRYPT_EXTENSION]" "0" $? + done + +# for file in "${DatabaseExcluded[@]}"; do +# [ -f "$TARGET_DIR_SQL_PULL/$file$CRYPT_EXTENSION" ] +# assertEquals "Database Excluded [$TARGET_DIR_SQL_PULL/$file$CRYPT_EXTENSION]" "1" $? +# done + +# for directory in "${DirectoriesExcluded[@]}"; do +# [ -d "$TARGET_DIR_FILE_PULL/$directory" ] +# assertEquals "Directory Excluded [$TARGET_DIR_FILE_PULL/$directory]" "1" $? +# done + + # Tests presence of rotated files + + cd "$OBACKUP_DIR" + ./$OBACKUP_EXECUTABLE "$CONF_DIR/$PULL_CONF" + assertEquals "Return code" "0" $? + + for file in "${DatabasePresence[@]}"; do + [ -f "$TARGET_DIR_SQL_PULL/$file$CRYPT_EXTENSION$ROTATE_1_EXTENSION" ] + assertEquals "Database rotated Presence [$TARGET_DIR_SQL_PULL/$file$CRYPT_EXTENSION]" "0" $? + done + + [ -d "$TARGET_DIR_FILE_PULL/$(dirname $SOURCE_DIR)$CRYPT_EXTENSION$ROTATE_1_EXTENSION" ] + assertEquals "File rotated Presence [$TARGET_DIR_FILE_PULL/$(dirname $SOURCE_DIR)$CRYPT_EXTENSION$ROTATE_1_EXTENSION]" "0" $? + + SetEncryption "$CONF_DIR/$PULL_CONF" false + + ./$OBACKUP_EXECUTABLE --decrypt="$TARGET_DIR_SQL_PULL" --passphrase-file="$TESTS_DIR/$PASSFILE" + assertEquals "Decrypt sql storage" "0" $? + + ./$OBACKUP_EXECUTABLE --decrypt="$TARGET_DIR_FILE_PULL" --passphrase-file="$TESTS_DIR/$PASSFILE" + assertEquals "Decrypt file storage" "0" $? + +} + +function test_EncryptPushRun () { + # Basic return code tests. Need to go deep into file presence testing + SetEncryption "$CONF_DIR/$PUSH_CONF" true + + cd "$OBACKUP_DIR" + ./$OBACKUP_EXECUTABLE "$CONF_DIR/$PUSH_CONF" + assertEquals "Return code" "0" $? + + for file in "${FilePresence[@]}"; do + [ -f "$TARGET_DIR_FILE_PUSH/$file$CRYPT_EXTENSION" ] + assertEquals "File Presence [$TARGET_DIR_FILE_PUSH/$file$CRYPT_EXTENSION]" "0" $? + done + +# for file in "${FileExcluded[@]}"; do +# [ -f "$TARGET_DIR_FILE_PUSH/$file$CRYPT_EXTENSION" ] +# assertEquals "File Excluded [$TARGET_DIR_FILE_PUSH/$file$CRYPT_EXTENSION]" "1" $? +# done + + for file in "${DatabasePresence[@]}"; do + [ -f "$TARGET_DIR_SQL_PUSH/$file$CRYPT_EXTENSION" ] + assertEquals "Database Presence [$TARGET_DIR_SQL_PUSH/$file$CRYPT_EXTENSION]" "0" $? + done + +# for file in "${DatabaseExcluded[@]}"; do +# [ -f "$TARGET_DIR_SQL_PUSH/$file$CRYPT_EXTENSION" ] +# assertEquals "Database Excluded [$TARGET_DIR_SQL_PUSH/$file$CRYPT_EXTENSION]" "1" $? +# done + +# for directory in "${DirectoriesExcluded[@]}"; do +# [ -d "$TARGET_DIR_FILE_PUSH/$directory" ] +# assertEquals "Directory Excluded [$TARGET_DIR_FILE_PUSH/$directory]" "1" $? +# done + + # Tests presence of rotated files + + cd "$OBACKUP_DIR" + ./$OBACKUP_EXECUTABLE "$CONF_DIR/$PUSH_CONF" + assertEquals "Return code" "0" $? + + for file in "${DatabasePresence[@]}"; do + [ -f "$TARGET_DIR_SQL_PUSH/$file$CRYPT_EXTENSION$ROTATE_1_EXTENSION" ] + assertEquals "Database rotated Presence [$TARGET_DIR_SQL_PUSH/$file$CRYPT_EXTENSION]" "0" $? + done + + [ -d "$TARGET_DIR_FILE_PUSH/$(dirname $SOURCE_DIR)$CRYPT_EXTENSION$ROTATE_1_EXTENSION" ] + assertEquals "File rotated Presence [$TARGET_DIR_FILE_PUSH/$(dirname $SOURCE_DIR)$CRYPT_EXTENSION$ROTATE_1_EXTENSION]" "0" $? + + SetEncryption "$CONF_DIR/$PUSH_CONF" false + + ./$OBACKUP_EXECUTABLE --decrypt="$TARGET_DIR_SQL_PULL" --passphrase-file="$TESTS_DIR/$PASSFILE" + assertEquals "Decrypt sql storage" "0" $? + + ./$OBACKUP_EXECUTABLE --decrypt="$TARGET_DIR_FILE_PULL" --passphrase-file="$TESTS_DIR/$PASSFILE" + assertEquals "Decrypt file storage" "0" $? } function test_WaitForTaskCompletion () { @@ -301,15 +547,15 @@ function test_WaitForTaskCompletion () { function test_ParallelExec () { # Test if parallelExec works correctly - cmd="sleep 10;sleep 10;sleep 10;sleep 10" + cmd="sleep 2;sleep 2;sleep 2;sleep 2" ParallelExec 4 "$cmd" assertEquals "ParallelExec test 1" "0" $? - cmd="sleep 10;du /none;sleep 5" + cmd="sleep 2;du /none;sleep 2" ParallelExec 2 "$cmd" assertEquals "ParallelExec test 2" "1" $? - cmd="sleep 19;du /none;sleep 10;du /none;sleep 4" + cmd="sleep 4;du /none;sleep 3;du /none;sleep 2" ParallelExec 3 "$cmd" assertEquals "ParallelExec test 3" "2" $? } diff --git a/dev/tests/run_travis_tests.sh b/dev/tests/run_travis_tests.sh index bbe8aab..d2f0d75 100755 --- a/dev/tests/run_travis_tests.sh +++ b/dev/tests/run_travis_tests.sh @@ -1,11 +1,18 @@ #!/usr/bin/env bash -## obackup basic tests suite 2016083004 +## obackup basic tests suite 2016090101 + +#TODO: Must recreate files before each test set OBACKUP_DIR="$(pwd)" OBACKUP_DIR=${OBACKUP_DIR%%/dev*} DEV_DIR="$OBACKUP_DIR/dev" TESTS_DIR="$DEV_DIR/tests" +CONF_DIR="$TESTS_DIR/conf" + +LOCAL_CONF="local.conf" +PULL_CONF="pull.conf" +PUSH_CONF="push.conf" OBACKUP_EXECUTABLE=obackup.sh @@ -21,6 +28,9 @@ TARGET_DIR_FILE_PULL="$TARGET_DIR/files-pull" TARGET_DIR_SQL_PUSH="$TARGET_DIR/sql-push" TARGET_DIR_FILE_PUSH="$TARGET_DIR/files-push" +TARGET_DIR_SQL_CRYPT="$TARGET_DIR/sql-crypt" +TARGET_DIR_FILE_CRYPT="$TARGET_DIR/files-crypt" + SIMPLE_DIR="testData" RECURSIVE_DIR="testDataRecursive" @@ -34,6 +44,7 @@ S_FILE_1="some file" R_FILE_1="file_1" R_FILE_2="file 2" R_FILE_3="file 3" +N_FILE_1="non recurse file" EXCLUDED_FILE="exclu.ded" @@ -41,8 +52,88 @@ DATABASE_1="mysql.sql.xz" DATABASE_2="performance_schema.sql.xz" DATABASE_EXCLUDED="information_schema.sql.xz" +CRYPT_EXTENSION=".obackup.gpg" +ROTATE_1_EXTENSION=".obackup.1" + +PASSFILE="passfile" + +function SetStableToYes () { + if grep "^IS_STABLE=YES" "$OBACKUP_DIR/$OBACKUP_EXECUTABLE" > /dev/null; then + IS_STABLE=yes + else + IS_STABLE=no + sed -i.tmp 's/^IS_STABLE=no/IS_STABLE=yes/' "$OBACKUP_DIR/$OBACKUP_EXECUTABLE" + assertEquals "Set stable to yes" "0" $? + fi +} + +function SetStableToOrigin () { + if [ "$IS_STABLE" == "no" ]; then + sed -i.tmp 's/^IS_STABLE=yes/IS_STABLE=no/' "$OBACKUP_DIR/$OBACKUP_EXECUTABLE" + assertEquals "Set stable to origin value" "0" $? + fi +} + +function SetEncryption () { + local confFile="${1}" + local value="${2}" + + if [ $value == true ]; then + sed -i 's/^ENCRYPTION=no/ENCRYPTION=yes/' "$confFile" + assertEquals "Enable encryption in $file" "0" $? + else + sed -i 's/^ENCRYPTION=yes/ENCRYPTION=no/' "$confFile" + assertEquals "Disable encryption in $file" "0" $? + fi +} + +function SetupGPG { + if ! gpg2 --list-keys | grep "John Doe" ; then + + cat >gpgcommand < /dev/null 2>&1; then + rndg -r /dev/urandom + fi + + gpg2 --batch --gen-key gpgcommand + echo $(gpg2 --list-keys) + rm -f gpgcommand + + fi + + echo "PassPhrase123" > "$TESTS_DIR/$PASSFILE" +} + +function SetupSSH { + echo -e 'y\n'| ssh-keygen -t rsa -b 2048 -N "" -f "${HOME}/.ssh/id_rsa_local" + cat "${HOME}/.ssh/id_rsa_local.pub" >> "${HOME}/.ssh/authorized_keys" + chmod 600 "${HOME}/.ssh/authorized_keys" + ls ${HOME}/.ssh -lah +} + function oneTimeSetUp () { source "$DEV_DIR/ofunctions.sh" + SetupGPG + SetupSSH +} + +function SetUp () { + rm -rf "$SOURCE_DIR" + rm -rf "$TARGET_DIR" mkdir -p "$SOURCE_DIR/$SIMPLE_DIR/$S_DIR_1" mkdir -p "$SOURCE_DIR/$RECURSIVE_DIR/$R_EXCLUDED_DIR" @@ -52,6 +143,7 @@ function oneTimeSetUp () { touch "$SOURCE_DIR/$SIMPLE_DIR/$S_DIR_1/$S_FILE_1" touch "$SOURCE_DIR/$SIMPLE_DIR/$EXCLUDED_FILE" + touch "$SOURCE_DIR/$RECURSIVE_DIR/$N_FILE_1" touch "$SOURCE_DIR/$RECURSIVE_DIR/$R_DIR_1/$R_FILE_1" touch "$SOURCE_DIR/$RECURSIVE_DIR/$R_DIR_2/$R_FILE_2" dd if=/dev/urandom of="$SOURCE_DIR/$RECURSIVE_DIR/$R_DIR_3/$R_FILE_3" bs=1M count=2 @@ -59,6 +151,7 @@ function oneTimeSetUp () { FilePresence=( "$SOURCE_DIR/$SIMPLE_DIR/$S_DIR_1/$S_FILE_1" + "$SOURCE_DIR/$RECURSIVE_DIR/$N_FILE_1" "$SOURCE_DIR/$RECURSIVE_DIR/$R_DIR_1/$R_FILE_1" "$SOURCE_DIR/$RECURSIVE_DIR/$R_DIR_2/$R_FILE_2" "$SOURCE_DIR/$RECURSIVE_DIR/$R_DIR_3/$R_FILE_3" @@ -81,38 +174,23 @@ function oneTimeSetUp () { DirectoriesExcluded=( "$RECURSIVE_DIR/$R_EXCLUDED_DIR" ) - } function oneTimeTearDown () { - if [ "$IS_STABLE" == "no" ]; then - sed -i 's/^IS_STABLE=yes/IS_STABLE=no/' "$OBACKUP_DIR/$OBACKUP_EXECUTABLE" - fi - - #rm -rf $SOURCE_DIR - #rm -rf $TARGET_DIR + SetStableToOrigin } function test_Merge () { cd "$DEV_DIR" ./merge.sh assertEquals "Merging code" "0" $? + SetStableToYes } -function test_SetStable () { - if grep "^IS_STABLE=YES" "$OBACKUP_DIR/$OBACKUP_EXECUTABLE" > /dev/null; then - IS_STABLE=yes - else - IS_STABLE=no - sed -i 's/^IS_STABLE=no/IS_STABLE=yes/' "$OBACKUP_DIR/$OBACKUP_EXECUTABLE" - assertEquals "Set as stable" "0" $? - fi -} - -function test_FirstLocalRun () { +function test_LocalRun () { # Basic return code tests. Need to go deep into file presence testing cd "$OBACKUP_DIR" - ./$OBACKUP_EXECUTABLE dev/tests/conf/local.conf + ./$OBACKUP_EXECUTABLE "$CONF_DIR/$LOCAL_CONF" assertEquals "Return code" "0" $? for file in "${FilePresence[@]}"; do @@ -139,21 +217,283 @@ function test_FirstLocalRun () { [ -d "$TARGET_DIR_FILE_LOCAL/$directory" ] assertEquals "Directory Excluded [$TARGET_DIR_FILE_LOCAL/$directory]" "1" $? done -} -function test_SecondLocalRun () { - # Only tests presence of rotated files - cd "$OBACKUP_DIR" - ./$OBACKUP_EXECUTABLE dev/tests/conf/local.conf + # Tests presence of rotated files + + ./$OBACKUP_EXECUTABLE "$CONF_DIR/$LOCAL_CONF" assertEquals "Return code" "0" $? for file in "${DatabasePresence[@]}"; do - [ -f "$TARGET_DIR_SQL_LOCAL/$file.obackup.1" ] + [ -f "$TARGET_DIR_SQL_LOCAL/$file$ROTATE_1_EXTENSION" ] assertEquals "Database rotated Presence [$TARGET_DIR_SQL_LOCAL/$file]" "0" $? done - [ -d "$TARGET_DIR_FILE_LOCAL/$(dirname $SOURCE_DIR).obackup.1" ] - assertEquals "File rotated Presence [$TARGET_DIR_FILE_LOCAL/$(dirname $SOURCE_DIR).obackup.1]" "0" $? + [ -d "$TARGET_DIR_FILE_LOCAL/$(dirname $SOURCE_DIR)$ROTATE_1_EXTENSION" ] + assertEquals "File rotated Presence [$TARGET_DIR_FILE_LOCAL/$(dirname $SOURCE_DIR)$ROTATE_1_EXTENSION]" "0" $? + +} + +function test_PullRun () { + # Basic return code tests. Need to go deep into file presence testing + cd "$OBACKUP_DIR" + ./$OBACKUP_EXECUTABLE "$CONF_DIR/$PULL_CONF" + assertEquals "Return code" "0" $? + + for file in "${FilePresence[@]}"; do + [ -f "$TARGET_DIR_FILE_PULL/$file" ] + assertEquals "File Presence [$TARGET_DIR_FILE_PULL/$file]" "0" $? + done + + for file in "${FileExcluded[@]}"; do + [ -f "$TARGET_DIR_FILE_PULL/$file" ] + assertEquals "File Excluded [$TARGET_DIR_FILE_PULL/$file]" "1" $? + done + + for file in "${DatabasePresence[@]}"; do + [ -f "$TARGET_DIR_SQL_PULL/$file" ] + assertEquals "Database Presence [$TARGET_DIR_SQL_PULL/$file]" "0" $? + done + + for file in "${DatabaseExcluded[@]}"; do + [ -f "$TARGET_DIR_SQL_PULL/$file" ] + assertEquals "Database Excluded [$TARGET_DIR_SQL_PULL/$file]" "1" $? + done + + for directory in "${DirectoriesExcluded[@]}"; do + [ -d "$TARGET_DIR_FILE_PULL/$directory" ] + assertEquals "Directory Excluded [$TARGET_DIR_FILE_PULL/$directory]" "1" $? + done + + # Tests presence of rotated files + + cd "$OBACKUP_DIR" + ./$OBACKUP_EXECUTABLE "$CONF_DIR/$PULL_CONF" + assertEquals "Return code" "0" $? + + for file in "${DatabasePresence[@]}"; do + [ -f "$TARGET_DIR_SQL_PULL/$file$ROTATE_1_EXTENSION" ] + assertEquals "Database rotated Presence [$TARGET_DIR_SQL_PULL/$file]" "0" $? + done + + [ -d "$TARGET_DIR_FILE_PULL/$(dirname $SOURCE_DIR)$ROTATE_1_EXTENSION" ] + assertEquals "File rotated Presence" "0" $? + +} + +function test_PushRun () { + # Basic return code tests. Need to go deep into file presence testing + cd "$OBACKUP_DIR" + ./$OBACKUP_EXECUTABLE "$CONF_DIR/$PUSH_CONF" + assertEquals "Return code" "0" $? + + for file in "${FilePresence[@]}"; do + [ -f "$TARGET_DIR_FILE_PUSH/$file" ] + assertEquals "File Presence [$TARGET_DIR_FILE_PUSH/$file]" "0" $? + done + + for file in "${FileExcluded[@]}"; do + [ -f "$TARGET_DIR_FILE_PUSH/$file" ] + assertEquals "File Excluded [$TARGET_DIR_FILE_PUSH/$file]" "1" $? + done + + for file in "${DatabasePresence[@]}"; do + [ -f "$TARGET_DIR_SQL_PUSH/$file" ] + assertEquals "Database Presence [$TARGET_DIR_SQL_PUSH/$file]" "0" $? + done + + for file in "${DatabaseExcluded[@]}"; do + [ -f "$TARGET_DIR_SQL_PUSH/$file" ] + assertEquals "Database Excluded [$TARGET_DIR_SQL_PUSH/$file]" "1" $? + done + + for directory in "${DirectoriesExcluded[@]}"; do + [ -d "$TARGET_DIR_FILE_PUSH/$directory" ] + assertEquals "Directory Excluded [$TARGET_DIR_FILE_PUSH/$directory]" "1" $? + done + + # Tests presence of rotated files + cd "$OBACKUP_DIR" + ./$OBACKUP_EXECUTABLE "$CONF_DIR/$PUSH_CONF" + assertEquals "Return code" "0" $? + + for file in "${DatabasePresence[@]}"; do + [ -f "$TARGET_DIR_SQL_PUSH/$file$ROTATE_1_EXTENSION" ] + assertEquals "Database rotated Presence [$TARGET_DIR_SQL_PUSH/$file]" "0" $? + done + + [ -d "$TARGET_DIR_FILE_PUSH/$(dirname $SOURCE_DIR)$ROTATE_1_EXTENSION" ] + assertEquals "File rotated Presence" "0" $? + +} + +function test_EncryptLocalRun () { + SetEncryption "$CONF_DIR/$LOCAL_CONF" true + + cd "$OBACKUP_DIR" + ./$OBACKUP_EXECUTABLE "$CONF_DIR/$LOCAL_CONF" + + for file in "${FilePresence[@]}"; do + [ -f "$TARGET_DIR_FILE_LOCAL/$file$CRYPT_EXTENSION" ] + assertEquals "File Presence [$TARGET_DIR_FILE_LOCAL/$file$CRYPT_EXTENSION]" "0" $? + done + +# TODO: Exclusion lists don't work with encrypted files yet +# for file in "${FileExcluded[@]}"; do +# [ -f "$TARGET_DIR_FILE_LOCAL/$file$CRYPT_EXTENSION" ] +# assertEquals "File Excluded [$TARGET_DIR_FILE_LOCAL/$file$CRYPT_EXTENSION]" "1" $? +# done + + for file in "${DatabasePresence[@]}"; do + [ -f "$TARGET_DIR_SQL_LOCAL/$file$CRYPT_EXTENSION" ] + assertEquals "Database Presence [$TARGET_DIR_SQL_LOCAL/$file$CRYPT_EXTENSION]" "0" $? + done + +# for file in "${DatabaseExcluded[@]}"; do +# [ -f "$TARGET_DIR_SQL_LOCAL/$file$CRYPT_EXTENSION" ] +# assertEquals "Database Excluded [$TARGET_DIR_SQL_LOCAL/$file$CRYPT_EXTENSION]" "1" $? +# done + +# for directory in "${DirectoriesExcluded[@]}"; do +# [ -d "$TARGET_DIR_FILE_LOCAL/$directory" ] +# assertEquals "Directory Excluded [$TARGET_DIR_FILE_LOCAL/$directory]" "1" $? +# done + + + # Tests presence of rotated files + + cd "$OBACKUP_DIR" + ./$OBACKUP_EXECUTABLE "$CONF_DIR/$LOCAL_CONF" + assertEquals "Return code" "0" $? + + for file in "${DatabasePresence[@]}"; do + [ -f "$TARGET_DIR_SQL_LOCAL/$file$CRYPT_EXTENSION$ROTATE_1_EXTENSION" ] + assertEquals "Database rotated Presence [$TARGET_DIR_SQL_LOCAL/$file$CRYPT_EXTENSION$ROTATE_1_EXTENSION]" "0" $? + done + + [ -d "$TARGET_DIR_FILE_LOCAL/$(dirname $SOURCE_DIR)$CRYPT_EXTENSION$ROTATE_1_EXTENSION" ] + assertEquals "File rotated Presence [$TARGET_DIR_FILE_LOCAL/$(dirname $SOURCE_DIR)$CRYPT_EXTENSION$ROTATE_1_EXTENSION]" "0" $? + + SetEncryption "$CONF_DIR/$LOCAL_CONF" false + + ./$OBACKUP_EXECUTABLE --decrypt="$TARGET_DIR_SQL_LOCAL" --passphrase-file="$TESTS_DIR/$PASSFILE" + assertEquals "Decrypt sql storage" "0" $? + + ./$OBACKUP_EXECUTABLE --decrypt="$TARGET_DIR_FILE_LOCAL" --passphrase-file="$TESTS_DIR/$PASSFILE" + assertEquals "Decrypt file storage" "0" $? + +} + +function test_EncryptPullRun () { + # Basic return code tests. Need to go deep into file presence testing + SetEncryption "$CONF_DIR/$PULL_CONF" true + + cd "$OBACKUP_DIR" + ./$OBACKUP_EXECUTABLE "$CONF_DIR/$PULL_CONF" + assertEquals "Return code" "0" $? + + for file in "${FilePresence[@]}"; do + [ -f "$TARGET_DIR_FILE_PULL/$file$CRYPT_EXTENSION" ] + assertEquals "File Presence [$TARGET_DIR_FILE_PULL/$file$CRYPT_EXTENSION]" "0" $? + done + +# for file in "${FileExcluded[@]}"; do +# [ -f "$TARGET_DIR_FILE_PULL/$file$CRYPT_EXTENSION" ] +# assertEquals "File Excluded [$TARGET_DIR_FILE_PULL/$file$CRYPT_EXTENSION]" "1" $? +# done + + for file in "${DatabasePresence[@]}"; do + [ -f "$TARGET_DIR_SQL_PULL/$file$CRYPT_EXTENSION" ] + assertEquals "Database Presence [$TARGET_DIR_SQL_PULL/$file$CRYPT_EXTENSION]" "0" $? + done + +# for file in "${DatabaseExcluded[@]}"; do +# [ -f "$TARGET_DIR_SQL_PULL/$file$CRYPT_EXTENSION" ] +# assertEquals "Database Excluded [$TARGET_DIR_SQL_PULL/$file$CRYPT_EXTENSION]" "1" $? +# done + +# for directory in "${DirectoriesExcluded[@]}"; do +# [ -d "$TARGET_DIR_FILE_PULL/$directory" ] +# assertEquals "Directory Excluded [$TARGET_DIR_FILE_PULL/$directory]" "1" $? +# done + + # Tests presence of rotated files + + cd "$OBACKUP_DIR" + ./$OBACKUP_EXECUTABLE "$CONF_DIR/$PULL_CONF" + assertEquals "Return code" "0" $? + + for file in "${DatabasePresence[@]}"; do + [ -f "$TARGET_DIR_SQL_PULL/$file$CRYPT_EXTENSION$ROTATE_1_EXTENSION" ] + assertEquals "Database rotated Presence [$TARGET_DIR_SQL_PULL/$file$CRYPT_EXTENSION]" "0" $? + done + + [ -d "$TARGET_DIR_FILE_PULL/$(dirname $SOURCE_DIR)$CRYPT_EXTENSION$ROTATE_1_EXTENSION" ] + assertEquals "File rotated Presence [$TARGET_DIR_FILE_PULL/$(dirname $SOURCE_DIR)$CRYPT_EXTENSION$ROTATE_1_EXTENSION]" "0" $? + + SetEncryption "$CONF_DIR/$PULL_CONF" false + + ./$OBACKUP_EXECUTABLE --decrypt="$TARGET_DIR_SQL_PULL" --passphrase-file="$TESTS_DIR/$PASSFILE" + assertEquals "Decrypt sql storage" "0" $? + + ./$OBACKUP_EXECUTABLE --decrypt="$TARGET_DIR_FILE_PULL" --passphrase-file="$TESTS_DIR/$PASSFILE" + assertEquals "Decrypt file storage" "0" $? + +} + +function test_EncryptPushRun () { + # Basic return code tests. Need to go deep into file presence testing + SetEncryption "$CONF_DIR/$PUSH_CONF" true + + cd "$OBACKUP_DIR" + ./$OBACKUP_EXECUTABLE "$CONF_DIR/$PUSH_CONF" + assertEquals "Return code" "0" $? + + for file in "${FilePresence[@]}"; do + [ -f "$TARGET_DIR_FILE_PUSH/$file$CRYPT_EXTENSION" ] + assertEquals "File Presence [$TARGET_DIR_FILE_PUSH/$file$CRYPT_EXTENSION]" "0" $? + done + +# for file in "${FileExcluded[@]}"; do +# [ -f "$TARGET_DIR_FILE_PUSH/$file$CRYPT_EXTENSION" ] +# assertEquals "File Excluded [$TARGET_DIR_FILE_PUSH/$file$CRYPT_EXTENSION]" "1" $? +# done + + for file in "${DatabasePresence[@]}"; do + [ -f "$TARGET_DIR_SQL_PUSH/$file$CRYPT_EXTENSION" ] + assertEquals "Database Presence [$TARGET_DIR_SQL_PUSH/$file$CRYPT_EXTENSION]" "0" $? + done + +# for file in "${DatabaseExcluded[@]}"; do +# [ -f "$TARGET_DIR_SQL_PUSH/$file$CRYPT_EXTENSION" ] +# assertEquals "Database Excluded [$TARGET_DIR_SQL_PUSH/$file$CRYPT_EXTENSION]" "1" $? +# done + +# for directory in "${DirectoriesExcluded[@]}"; do +# [ -d "$TARGET_DIR_FILE_PUSH/$directory" ] +# assertEquals "Directory Excluded [$TARGET_DIR_FILE_PUSH/$directory]" "1" $? +# done + + # Tests presence of rotated files + + cd "$OBACKUP_DIR" + ./$OBACKUP_EXECUTABLE "$CONF_DIR/$PUSH_CONF" + assertEquals "Return code" "0" $? + + for file in "${DatabasePresence[@]}"; do + [ -f "$TARGET_DIR_SQL_PUSH/$file$CRYPT_EXTENSION$ROTATE_1_EXTENSION" ] + assertEquals "Database rotated Presence [$TARGET_DIR_SQL_PUSH/$file$CRYPT_EXTENSION]" "0" $? + done + + [ -d "$TARGET_DIR_FILE_PUSH/$(dirname $SOURCE_DIR)$CRYPT_EXTENSION$ROTATE_1_EXTENSION" ] + assertEquals "File rotated Presence [$TARGET_DIR_FILE_PUSH/$(dirname $SOURCE_DIR)$CRYPT_EXTENSION$ROTATE_1_EXTENSION]" "0" $? + + SetEncryption "$CONF_DIR/$PUSH_CONF" false + + ./$OBACKUP_EXECUTABLE --decrypt="$TARGET_DIR_SQL_PULL" --passphrase-file="$TESTS_DIR/$PASSFILE" + assertEquals "Decrypt sql storage" "0" $? + + ./$OBACKUP_EXECUTABLE --decrypt="$TARGET_DIR_FILE_PULL" --passphrase-file="$TESTS_DIR/$PASSFILE" + assertEquals "Decrypt file storage" "0" $? } function test_WaitForTaskCompletion () { @@ -207,15 +547,15 @@ function test_WaitForTaskCompletion () { function test_ParallelExec () { # Test if parallelExec works correctly - cmd="sleep 10;sleep 10;sleep 10;sleep 10" + cmd="sleep 2;sleep 2;sleep 2;sleep 2" ParallelExec 4 "$cmd" assertEquals "ParallelExec test 1" "0" $? - cmd="sleep 10;du /none;sleep 5" + cmd="sleep 2;du /none;sleep 2" ParallelExec 2 "$cmd" assertEquals "ParallelExec test 2" "1" $? - cmd="sleep 19;du /none;sleep 10;du /none;sleep 4" + cmd="sleep 4;du /none;sleep 3;du /none;sleep 2" ParallelExec 3 "$cmd" assertEquals "ParallelExec test 3" "2" $? }