diff options
Diffstat (limited to 'test/testenv')
-rwxr-xr-x | test/testenv | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/test/testenv b/test/testenv new file mode 100755 index 0000000..7072326 --- /dev/null +++ b/test/testenv @@ -0,0 +1,69 @@ +#!/usr/bin/env bash + +# Parse the arguments +NETWORK=true +SUDO=true +while [[ $# -gt 0 ]]; do + case "$1" in + --no-network) shift; unset NETWORK;; + --network) shift; NETWORK=true;; + --no-sudo) shift; unset SUDO;; + --sudo) shift; SUDO=true;; + --) shift; break;; + *) break;; + esac +done +export NETWORK SUDO + +if [[ $# == 0 ]]; then + echo 'You need to run testenv with arguments!' >&2 + exit 1 +fi + +# Set up the working directory, and add the hook to clean it up +export TMPDIR="$(mktemp --tmpdir -d libretools-test.XXXXXXXXXX)" +trap "rm -rf '$TMPDIR'" EXIT + +# Set up the install to work with +destdir=$TMPDIR/destdir + +old_pwd="$(pwd)" +if [[ -f $0 ]]; then + cd "${0%/*}" +fi +if ! make -C .. install DESTDIR="$destdir" &>"$TMPDIR/make-output"; then + echo 'error creating local install, cannot run tests' >&2 + cat "$TMPDIR/make-output" + exit 1 +fi +cd "$old_pwd" + +# Set up the environment +export PATH="$destdir/usr/bin:$PATH" +export LIBRETOOLS_LIBDIR="$destdir/usr/lib/libretools" +export XBS_LIBDIR="$destdir/usr/lib/xbs" +export HOME=$TMPDIR/home +export XDG_CACHE_HOME="$HOME/.cache" +export XDG_CONFIG_HOME="$HOME/.config" +export _librelib_conf_sh_sysconfdir="$destdir/etc" +export _librelib_conf_sh_pkgconfdir="$destdir/etc/libretools.d" + +# Hack to respect our variables in sudo +_sudo() { + local vars=(TMPDIR PATH LIBRETOOLS_LIBDIR XDG_CACHE_HOME XDG_CONFIG_HOME _librelib_conf_sh_sysconfdir) + local args=() + local var + for var in "${vars[@]}"; do + args+=("$var=${!var}") + done + sudo env "${args[@]}" "$@" +} +printf '%s\n' \ + '#!/bin/bash' \ + "$(declare -f _sudo)" \ + '_sudo "$@"' \ + > "$destdir/usr/bin/testsudo" +chmod 755 "$destdir/usr/bin/testsudo" + +# Run the tests +eval "$@" |