mirror of
https://github.com/NixOS/nix.git
synced 2025-12-16 05:51:05 +01:00
For some reason, an old socket occasionally stays here on OSX, causing
the subsequent tests to fail
(cherry picked from commit c2c0dba792)
177 lines
3.8 KiB
Bash
177 lines
3.8 KiB
Bash
set -e
|
||
|
||
if [[ -z "$COMMON_SH_SOURCED" ]]; then
|
||
|
||
COMMON_SH_SOURCED=1
|
||
|
||
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/daemon-socket
|
||
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_CACHE_HOME
|
||
mkdir -p $TEST_HOME
|
||
|
||
export PATH=@bindir@:$PATH
|
||
if [[ -n "${NIX_CLIENT_PACKAGE:-}" ]]; then
|
||
export PATH="$NIX_CLIENT_PACKAGE/bin":$PATH
|
||
fi
|
||
if [[ -n "${NIX_DAEMON_PACKAGE:-}" ]]; then
|
||
export NIX_DAEMON_COMMAND="$NIX_DAEMON_PACKAGE/bin/nix-daemon"
|
||
fi
|
||
coreutils=@coreutils@
|
||
|
||
export dot=@dot@
|
||
export xmllint="@xmllint@"
|
||
export SHELL="@bash@"
|
||
export PAGER=cat
|
||
export HAVE_SODIUM="@HAVE_SODIUM@"
|
||
|
||
export version=@PACKAGE_VERSION@
|
||
export system=@system@
|
||
|
||
export IMPURE_VAR1=foo
|
||
export IMPURE_VAR2=bar
|
||
|
||
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"
|
||
clearProfiles
|
||
}
|
||
|
||
clearCache() {
|
||
rm -rf "$cacheDir"
|
||
}
|
||
|
||
clearCacheCache() {
|
||
rm -f $TEST_HOME/.cache/nix/binary-cache*
|
||
}
|
||
|
||
startDaemon() {
|
||
# Don’t start the daemon twice, as this would just make it loop indefinitely
|
||
if [[ "$NIX_REMOTE" == daemon ]]; then
|
||
return
|
||
fi
|
||
# Start the daemon, wait for the socket to appear. !!!
|
||
# ‘nix-daemon’ should have an option to fork into the background.
|
||
rm -f $NIX_DAEMON_SOCKET_PATH
|
||
${NIX_DAEMON_COMMAND:-nix-daemon} &
|
||
for ((i = 0; i < 30; i++)); do
|
||
if [[ -S $NIX_DAEMON_SOCKET_PATH ]]; then break; fi
|
||
sleep 1
|
||
done
|
||
pidDaemon=$!
|
||
trap "killDaemon" EXIT
|
||
export NIX_REMOTE=daemon
|
||
}
|
||
|
||
killDaemon() {
|
||
kill $pidDaemon
|
||
for i in {0.10}; do
|
||
kill -0 $pidDaemon || break
|
||
sleep 1
|
||
done
|
||
kill -9 $pidDaemon || true
|
||
wait $pidDaemon || true
|
||
trap "" EXIT
|
||
}
|
||
|
||
restartDaemon() {
|
||
[[ -z "${pidDaemon:-}" ]] && return 0
|
||
|
||
killDaemon
|
||
unset NIX_REMOTE
|
||
startDaemon
|
||
}
|
||
|
||
if [[ $(uname) == Linux ]] && [[ -L /proc/self/ns/user ]] && unshare --user true; then
|
||
_canUseSandbox=1
|
||
fi
|
||
|
||
isDaemonNewer () {
|
||
[[ -n "${NIX_DAEMON_PACKAGE:-}" ]] || return 0
|
||
local requiredVersion="$1"
|
||
local daemonVersion=$($NIX_DAEMON_PACKAGE/bin/nix-daemon --version | cut -d' ' -f3)
|
||
return [[ $(nix eval --expr "builtins.compareVersions ''$daemonVersion'' ''2.4''") -ge 0 ]]
|
||
}
|
||
|
||
requireDaemonNewerThan () {
|
||
isDaemonNewer "$1" || exit 99
|
||
}
|
||
|
||
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 ]]
|
||
}
|
||
|
||
needLocalStore() {
|
||
if [[ "$NIX_REMOTE" == "daemon" ]]; then
|
||
echo "Can’t run through the daemon ($1), skipping this test..."
|
||
return 99
|
||
fi
|
||
}
|
||
|
||
# Just to make it easy to find which tests should be fixed
|
||
buggyNeedLocalStore () {
|
||
needLocalStore
|
||
}
|
||
|
||
set -x
|
||
|
||
if [[ -n "${NIX_DAEMON_PACKAGE:-}" ]]; then
|
||
startDaemon
|
||
fi
|
||
|
||
fi # COMMON_SH_SOURCED
|