#!/bin/bash set -e export restic="${1:-restic}"; shift export dirdiff="${1:-dirdiff}"; shift export dir=$(dirname "$0") export fake_data_file="${dir}/fake-data.tar.gz" prepare() { export BASE="$(mktemp --tmpdir --directory restic-testsuite-XXXXXX)" export RESTIC_REPOSITORY="${BASE}/restic-backup" export DATADIR="${BASE}/fake-data" export RESTIC_PASSWORD="foobar" debug "repository is at ${RESTIC_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 RESTIC_REPOSITORY } restic() { "${restic}" "$@" } dirdiff() { "${dirdiff}" "$@" } 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 restic dirdiff prepare cleanup msg debug pass err fail run if [ ! -x "$restic" ]; then fail restic binary not found! fi if [ "$#" -gt 0 ]; then testfiles="$1" else testfiles=(${dir}/test-*.sh) fi echo "testfiles: ${testfiles[@]}" failed="" for testfile in "${testfiles[@]}"; do current=$(basename "${testfile}" .sh) if bash "${testfile}"; then pass "${current} pass" else err "${current} failed!" failed+=" ${current}" fi done if [ -n "$failed" ]; then err "failed tests: ${failed}" exit 1 fi