backup-utils/test/test-ghe-restore-external-d...

195 строки
6.6 KiB
Bash
Executable File

#!/usr/bin/env bash
# ghe-restore command tests - external database
# Bring in testlib
# shellcheck source=test/testlib.sh
. "$(dirname "$0")/testlib.sh"
setup_test_data "$GHE_DATA_DIR/1"
# Make the current symlink
ln -s 1 "$GHE_DATA_DIR/current"
function setup(){
rm -rf "$GHE_REMOTE_ROOT_DIR"
setup_remote_metadata
# set as configured, enable maintenance mode and create required directories
setup_maintenance_mode "configured"
# set restore host environ var
GHE_RESTORE_HOST=127.0.0.1
export GHE_RESTORE_HOST
# Remove settings file with invalid data.
rm -rf "$GHE_DATA_DIR/current/settings.json"
}
# Helper function to set BYODB state of backup snapshot
function set_external_database_enabled_state_of_backup_snapshot(){
git config -f "$GHE_DATA_DIR/current/settings.json" mysql.external.enabled "$1"
}
# Helper function to set BYODB state of remote host
function set_external_database_enabled_state_of_appliance(){
git config -f "$GHE_REMOTE_DATA_USER_DIR/common/github.conf" mysql.external.enabled "$1"
}
function output_debug_logs_and_fail_test() {
cat "$TRASHDIR/restore-out"
exit 1
}
function check_restore_output_for() {
grep -q "$1" "$TRASHDIR/restore-out"
}
begin_test "ghe-restore allows restore of external DB snapshot to external DB instance"
(
set -e
setup
set_external_database_enabled_state_of_backup_snapshot true
set_external_database_enabled_state_of_appliance true
export EXTERNAL_DATABASE_RESTORE_SCRIPT="echo 'fake ghe-export-mysql data'"
# run ghe-restore and write output to file for asserting against
if ! GHE_DEBUG=1 ghe-restore -v -f > "$TRASHDIR/restore-out" 2>&1; then
output_debug_logs_and_fail_test
fi
# verify connect to right host
check_restore_output_for "Connect 127.0.0.1:122 OK"
# verify stale servers were cleared
check_restore_output_for "Cleaning up stale nodes ..."
verify_all_restored_data
)
end_test
begin_test "ghe-restore -c from external DB snapshot to non-external DB appliance is not allowed"
(
set -e
setup
set_external_database_enabled_state_of_backup_snapshot true
set_external_database_enabled_state_of_appliance false
if ! GHE_DEBUG=1 ghe-restore -v -f -c > "$TRASHDIR/restore-out" 2>&1; then
# Verify that the restore failed due to snapshot incompatibility.
check_restore_output_for "Restoring the settings of a snapshot from an appliance using an externally-managed MySQL service to an appliance using the bundled MySQL service is not supported."
check_restore_output_for "Please reconfigure the appliance first, then run ghe-restore again."
else
output_debug_logs_and_fail_test
fi
)
end_test
begin_test "ghe-restore -c from non external DB snapshot to external DB appliance is not allowed"
(
set -e
setup
set_external_database_enabled_state_of_backup_snapshot false
set_external_database_enabled_state_of_appliance true
# run ghe-restore and write output to file for asserting against
if ! GHE_DEBUG=1 ghe-restore -v -f -c > "$TRASHDIR/restore-out" 2>&1; then
# Verify that the restore failed due to snapshot incompatibility.
check_restore_output_for "Restoring the settings of a snapshot from an appliance using the bundled MySQL service to an appliance using an externally-managed MySQL service is not supported."
check_restore_output_for "Please reconfigure the appliance first, then run ghe-restore again."
else
output_debug_logs_and_fail_test
fi
)
end_test
begin_test "ghe-restore from external DB snapshot to non external DB appliance without --skip-mysql is not allowed"
set -e
setup
set_external_database_enabled_state_of_backup_snapshot true
set_external_database_enabled_state_of_appliance false
# run ghe-restore and write output to file for asserting against
if ! GHE_DEBUG=1 ghe-restore -v -f > "$TRASHDIR/restore-out" 2>&1; then
check_restore_output_for "Restoring a snapshot from an appliance using an externally-managed MySQL service to an appliance using the bundled MySQL service is not supported."
check_restore_output_for "Please migrate the MySQL data beforehand, then run ghe-restore again, passing in the --skip-mysql flag."
else
output_debug_logs_and_fail_test
fi
end_test
begin_test "ghe-restore from non external DB snapshot to external DB appliance without --skip-mysql is not allowed"
set -e
setup
set_external_database_enabled_state_of_backup_snapshot false
set_external_database_enabled_state_of_appliance true
# run ghe-restore and write output to file for asserting against
if ! GHE_DEBUG=1 ghe-restore -v -f > "$TRASHDIR/restore-out" 2>&1; then
check_restore_output_for "Restoring a snapshot from an appliance using the bundled MySQL service to an appliance using an externally-managed MySQL service is not supported."
check_restore_output_for "Please migrate the MySQL data beforehand, then run ghe-restore again, passing in the --skip-mysql flag."
else
output_debug_logs_and_fail_test
fi
end_test
begin_test "ghe-restore allows restore of external DB snapshot to non-external DB appliance with --skip-mysql"
(
set -e
setup
set_external_database_enabled_state_of_backup_snapshot true
set_external_database_enabled_state_of_appliance false
# run ghe-restore and write output to file for asserting against
if ! GHE_DEBUG=1 ghe-restore -v -f --skip-mysql > "$TRASHDIR/restore-out" 2>&1; then
output_debug_logs_and_fail_test
fi
check_restore_output_for "Skipping MySQL restore."
# verify connect to right host
check_restore_output_for "Connect 127.0.0.1:122 OK"
# verify stale servers were cleared
check_restore_output_for "Cleaning up stale nodes ..."
# ghe-restore sets this when --skip-mysql is passed, but that won't propagate back to this shell and it affects what we validate
SKIP_MYSQL=true verify_all_restored_data
)
end_test
begin_test "ghe-restore allows restore of non external DB snapshot to external DB appliance with --skip-mysql"
(
set -e
setup
set_external_database_enabled_state_of_backup_snapshot false
set_external_database_enabled_state_of_appliance true
# run ghe-restore and write output to file for asserting against
if ! GHE_DEBUG=1 ghe-restore -v -f --skip-mysql > "$TRASHDIR/restore-out" 2>&1; then
output_debug_logs_and_fail_test
fi
check_restore_output_for "Skipping MySQL restore."
# verify connect to right host
check_restore_output_for "Connect 127.0.0.1:122 OK"
# verify stale servers were cleared
check_restore_output_for "Cleaning up stale nodes ..."
# ghe-restore sets SKIP_MYSQL=true when --skip-mysql is passed, but that won't propagate back to this shell and it affects what we validate
SKIP_MYSQL=true verify_all_restored_data
)
end_test