diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..f19fe3742 --- /dev/null +++ b/Makefile @@ -0,0 +1,10 @@ +.PHONY: clean all test + +test: + go test + $(MAKE) -C cmd/khepri + test/run.sh cmd/khepri/khepri + +clean: + go clean + $(MAKE) -C cmd/khepri test diff --git a/cmd/khepri/Makefile b/cmd/khepri/Makefile new file mode 100644 index 000000000..d1d610c91 --- /dev/null +++ b/cmd/khepri/Makefile @@ -0,0 +1,7 @@ +.PHONY: clean all test + +test: + go build + +clean: + go clean diff --git a/test/fake-data.tar.gz b/test/fake-data.tar.gz new file mode 100644 index 000000000..526b65a64 Binary files /dev/null and b/test/fake-data.tar.gz differ diff --git a/test/run.sh b/test/run.sh new file mode 100755 index 000000000..77ca7d75b --- /dev/null +++ b/test/run.sh @@ -0,0 +1,90 @@ +#!/bin/bash + +set -e + +export khepri="${1:-khepri}"; shift +export dir=$(dirname "$0") +export fake_data_file="${dir}/fake-data.tar.gz" + +k() { + "${khepri}" "$@" +} + +prepare() { + export BASE="$(mktemp --tmpdir --directory khepri-testsuite-XXXXXX)" + export KHEPRI_REPOSITORY="${BASE}/khepri-backup" + export DATADIR="${BASE}/fake-data" + debug "repository is at ${KHEPRI_REPOSITORY}" + + mkdir -p "$DATADIR" + (cd "$DATADIR"; tar xz) < "$fake_data_file" + debug "extracted fake data to ${DATADIR}" +} + +cleanup() { + if [ "$DEBUG" = "1" ]; then + debug "leaving dir ${BASE}" + return + fi + + rm -rf "${BASE}" + debug "removed dir ${BASE}" + unset BASE + unset KHEPRI_REPOSITORY +} + +msg() { + printf "%s: %s\n" "$(basename "$0" .sh)" "$*" +} + +pass() { + printf "\e[32m%s: %s\e[39m\n" "$(basename "$0" .sh)" "$*" +} + +err() { + printf "\e[31m%s: %s\e[39m\n" "$(basename "$0" .sh)" "$*" +} + +debug() { + if [ "$DEBUG" = "1" ]; then + printf "\e[33m%s: %s\e[39m\n" "$(basename "$0" .sh)" "$*" + fi +} + +fail() { + err "$@" + exit 1 +} + +run() { + if [ "$DEBUG" = "1" ]; then + "$@" + else + "$@" > /dev/null + fi +} + +export -f k prepare cleanup msg debug pass err fail run + +if [ ! -x "$khepri" ]; then + fail khepri binary not found! +fi + +if [ "$#" -gt 0 ]; then + testfiles="$1" +else + testfiles=(${dir}/test-*.sh) +fi + +echo "testfiles: $testfiles" + +for testfile in "$testfiles"; do + current=$(basename "${testfile}" .sh) + + bash "${testfile}" + if [ "$?" != "0" ]; then + err "${current} failed!" + else + pass "${current} pass" + fi +done diff --git a/test/test-backup.sh b/test/test-backup.sh new file mode 100755 index 000000000..72d4a29b4 --- /dev/null +++ b/test/test-backup.sh @@ -0,0 +1,5 @@ +prepare +run k backup "${BASE}/fake-data" +run k restore "$(k list ref)" "${BASE}/fake-data-restore" +diff -aur "${BASE}/fake-data" "${BASE}/fake-data-restore" +cleanup