forked from lix-project/lix
![regnat](/assets/img/avatar_default.png)
Requires a slight update to the test infra to work properly, but having the possibility to group tests that way makes the whole thing quite cleaner imho
122 lines
2.5 KiB
Bash
122 lines
2.5 KiB
Bash
set -e
|
||
|
||
export TEST_ROOT=$(realpath ${TMPDIR:-/tmp}/nix-test)/${TEST_NAME:-default}
|
||
export NIX_STORE_DIR
|
||
if ! NIX_STORE_DIR=$(readlink -f $TEST_ROOT/store 2> /dev/null); then
|
||
# Maybe the build directory is symlinked.
|
||
export NIX_IGNORE_SYMLINK_STORE=1
|
||
NIX_STORE_DIR=$TEST_ROOT/store
|
||
fi
|
||
export NIX_LOCALSTATE_DIR=$TEST_ROOT/var
|
||
export NIX_LOG_DIR=$TEST_ROOT/var/log/nix
|
||
export NIX_STATE_DIR=$TEST_ROOT/var/nix
|
||
export NIX_CONF_DIR=$TEST_ROOT/etc
|
||
export NIX_DAEMON_SOCKET_PATH=$TEST_ROOT/dSocket
|
||
unset NIX_USER_CONF_FILES
|
||
export _NIX_TEST_SHARED=$TEST_ROOT/shared
|
||
if [[ -n $NIX_STORE ]]; then
|
||
export _NIX_TEST_NO_SANDBOX=1
|
||
fi
|
||
export _NIX_IN_TEST=$TEST_ROOT/shared
|
||
export _NIX_TEST_NO_LSOF=1
|
||
export NIX_REMOTE=$NIX_REMOTE_
|
||
unset NIX_PATH
|
||
export TEST_HOME=$TEST_ROOT/test-home
|
||
export HOME=$TEST_HOME
|
||
unset XDG_CONFIG_HOME
|
||
unset XDG_CONFIG_DIRS
|
||
unset XDG_CACHE_HOME
|
||
mkdir -p $TEST_HOME
|
||
|
||
export PATH=@bindir@:$PATH
|
||
coreutils=@coreutils@
|
||
|
||
export dot=@dot@
|
||
export SHELL="@bash@"
|
||
export PAGER=cat
|
||
export busybox="@sandbox_shell@"
|
||
|
||
export version=@PACKAGE_VERSION@
|
||
export system=@system@
|
||
|
||
cacheDir=$TEST_ROOT/binary-cache
|
||
|
||
readLink() {
|
||
ls -l "$1" | sed 's/.*->\ //'
|
||
}
|
||
|
||
clearProfiles() {
|
||
profiles="$NIX_STATE_DIR"/profiles
|
||
rm -rf $profiles
|
||
}
|
||
|
||
clearStore() {
|
||
echo "clearing store..."
|
||
chmod -R +w "$NIX_STORE_DIR"
|
||
rm -rf "$NIX_STORE_DIR"
|
||
mkdir "$NIX_STORE_DIR"
|
||
rm -rf "$NIX_STATE_DIR"
|
||
mkdir "$NIX_STATE_DIR"
|
||
nix-store --init
|
||
clearProfiles
|
||
}
|
||
|
||
clearCache() {
|
||
rm -rf "$cacheDir"
|
||
}
|
||
|
||
clearCacheCache() {
|
||
rm -f $TEST_HOME/.cache/nix/binary-cache*
|
||
}
|
||
|
||
startDaemon() {
|
||
# Start the daemon, wait for the socket to appear. !!!
|
||
# ‘nix-daemon’ should have an option to fork into the background.
|
||
rm -f $NIX_STATE_DIR/daemon-socket/socket
|
||
nix daemon &
|
||
for ((i = 0; i < 30; i++)); do
|
||
if [ -e $NIX_DAEMON_SOCKET_PATH ]; then break; fi
|
||
sleep 1
|
||
done
|
||
pidDaemon=$!
|
||
trap "kill -9 $pidDaemon" EXIT
|
||
export NIX_REMOTE=daemon
|
||
}
|
||
|
||
killDaemon() {
|
||
kill -9 $pidDaemon
|
||
wait $pidDaemon || true
|
||
trap "" EXIT
|
||
}
|
||
|
||
if [[ $(uname) == Linux ]] && [[ -L /proc/self/ns/user ]] && unshare --user true; then
|
||
_canUseSandbox=1
|
||
fi
|
||
|
||
canUseSandbox() {
|
||
if [[ ! $_canUseSandbox ]]; then
|
||
echo "Sandboxing not supported, skipping this test..."
|
||
return 1
|
||
fi
|
||
|
||
return 0
|
||
}
|
||
|
||
fail() {
|
||
echo "$1"
|
||
exit 1
|
||
}
|
||
|
||
expect() {
|
||
local expected res
|
||
expected="$1"
|
||
shift
|
||
set +e
|
||
"$@"
|
||
res="$?"
|
||
set -e
|
||
[[ $res -eq $expected ]]
|
||
}
|
||
|
||
set -x
|