set -e export TEST_ROOT=$(realpath ${TMPDIR:-/tmp}/nix-test) 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_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_REMOTE=$NIX_REMOTE_ unset NIX_PATH export TEST_HOME=$TEST_ROOT/test-home export HOME=$TEST_HOME unset XDG_CACHE_HOME mkdir -p $TEST_HOME export PATH=@bindir@:$PATH coreutils=@coreutils@ export dot=@dot@ export xmllint="@xmllint@" export SHELL="@bash@" export PAGER=cat export HAVE_SODIUM="@HAVE_SODIUM@" export HAVE_BROTLI="@HAVE_BROTLI@" 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_STATE_DIR/daemon-socket/socket ]; 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 } canUseSandbox() { if [[ $(uname) != Linux ]]; then return 1; fi if [ ! -L /proc/self/ns/user ]; then echo "Kernel doesn't support user namespaces, skipping this test..." return 1 fi if [ -e /proc/sys/kernel/unprivileged_userns_clone ]; then if [ "$(cat /proc/sys/kernel/unprivileged_userns_clone)" != 1 ]; then echo "Unprivileged user namespaces disabled by sysctl, skipping this test..." return 1 fi 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