set -u
function fail() {
echo "FAILURE:" "$@" >&2
false
}
[ -v PATHRS_CMD ] || {
echo "PATHRS_CMD (pathrs-cmd) must be provided" >&2
exit 2
}
function sane_run() {
local cmd="$1"
shift
run "$cmd" "$@"
echo "$(basename "$cmd") $* (status=$status)" >&2
echo "$output" >&2
}
function pathrs-cmd() {
sane_run "$PATHRS_CMD" "$@"
}
function check-errno() {
local errno_num
errno_num="$(errno "$1" | awk '{ print $2 }')"
[ "$status" -ne 0 ]
[[ "$output" == *"ERRNO $errno_num "* ]]
}
TESTDIR_TMPDIR="$BATS_TMPDIR/pathrs-e2e-tests"
mkdir -p "$TESTDIR_TMPDIR"
TESTDIR_LIST="$TESTDIR_TMPDIR/pathrs-test-tmpdirs.$$"
function setup_tmpdir() {
[[ -n "${PATHRS_TMPDIR:-}" ]] || PATHRS_TMPDIR="$TESTDIR_TMPDIR"
mktemp -d "$PATHRS_TMPDIR/pathrs-test-tmpdir.XXXXXXXX" | tee -a "$TESTDIR_LIST"
}
function setup_tmpdirs() {
declare -g PATHRS_TMPDIR
PATHRS_TMPDIR="$(setup_tmpdir)"
}
function teardown_tmpdirs() {
[ -e "$TESTDIR_LIST" ] || return
while IFS= read -r tmpdir; do
[ -e "$tmpdir" ] || continue
chmod -R 0777 "$tmpdir"
rm -rf "$tmpdir"
done < "$TESTDIR_LIST"
rm -f "$TESTDIR_LIST"
}
function is-compiled() {
local bin="$1"
readelf -h "$bin" >/dev/null 2>&1
}
function requires() {
for var in "$@"; do
case "$var" in
root)
[ "$(id -u)" -eq 0 ] || skip "test requires ${var}"
;;
compiled)
{ is-compiled "$1"; } || skip "test requires $PATHRS_CMD be compiled"
;;
can-mkwhiteout)
mknod "$(setup_tmpdir)/mknod0" c 0 0 || skip "test requires the ability to 'mknod c 0 0'"
;;
*)
fail "BUG: Invalid requires ${var}."
;;
esac
done
}