forked from lix-project/lix
Clean up daemon handling
Split `common.sh` into the vars and functions definitions vs starting the daemon (and possibly other initialization logic). This way, `init.sh` can just `source` the former. Trying to start the daemon before `nix.conf` is written will fail because `nix daemon` requires `--experimental-features 'nix-command'`. `killDaemon` is idempotent, so it's safe to call when no daemon is running. `startDaemon` and `killDaemon` use the PID (which is now exported to subshells) to decide whether there is work to be done, rather than `NIX_REMOTE`, which might conceivably be set differently even if a daemon is running. `startDaemon` and `killDaemon` can save/restore the old `NIX_REMOTE` as `NIX_REMOTE_OLD`. `init.sh` kills daemon before deleting everything (including the daemon socket).
This commit is contained in:
parent
5dbbf23332
commit
87da941348
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -75,7 +75,7 @@ perl/Makefile.config
|
||||||
|
|
||||||
# /tests/
|
# /tests/
|
||||||
/tests/test-tmp
|
/tests/test-tmp
|
||||||
/tests/common.sh
|
/tests/common/vars-and-functions.sh
|
||||||
/tests/result*
|
/tests/result*
|
||||||
/tests/restricted-innocent
|
/tests/restricted-innocent
|
||||||
/tests/shell
|
/tests/shell
|
||||||
|
|
12
tests/common.sh
Normal file
12
tests/common.sh
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [[ -z "${COMMON_SH_SOURCED-}" ]]; then
|
||||||
|
|
||||||
|
COMMON_SH_SOURCED=1
|
||||||
|
|
||||||
|
source "$(readlink -f "$(dirname "${BASH_SOURCE[0]}")")/common/vars-and-functions.sh"
|
||||||
|
if [[ -n "${NIX_DAEMON_PACKAGE:-}" ]]; then
|
||||||
|
startDaemon
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi # COMMON_SH_SOURCED
|
|
@ -1,8 +1,8 @@
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
if [[ -z "$COMMON_SH_SOURCED" ]]; then
|
if [[ -z "${COMMON_VARS_AND_FUNCTIONS_SH_SOURCED-}" ]]; then
|
||||||
|
|
||||||
COMMON_SH_SOURCED=1
|
COMMON_VARS_AND_FUNCTIONS_SH_SOURCED=1
|
||||||
|
|
||||||
export PS4='+(${BASH_SOURCE[0]}:$LINENO) '
|
export PS4='+(${BASH_SOURCE[0]}:$LINENO) '
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ if [[ -n $NIX_STORE ]]; then
|
||||||
fi
|
fi
|
||||||
export _NIX_IN_TEST=$TEST_ROOT/shared
|
export _NIX_IN_TEST=$TEST_ROOT/shared
|
||||||
export _NIX_TEST_NO_LSOF=1
|
export _NIX_TEST_NO_LSOF=1
|
||||||
export NIX_REMOTE=$NIX_REMOTE_
|
export NIX_REMOTE=${NIX_REMOTE_-}
|
||||||
unset NIX_PATH
|
unset NIX_PATH
|
||||||
export TEST_HOME=$TEST_ROOT/test-home
|
export TEST_HOME=$TEST_ROOT/test-home
|
||||||
export HOME=$TEST_HOME
|
export HOME=$TEST_HOME
|
||||||
|
@ -90,13 +90,14 @@ clearCacheCache() {
|
||||||
|
|
||||||
startDaemon() {
|
startDaemon() {
|
||||||
# Don’t start the daemon twice, as this would just make it loop indefinitely
|
# Don’t start the daemon twice, as this would just make it loop indefinitely
|
||||||
if [[ "$NIX_REMOTE" == daemon ]]; then
|
if [[ "${_NIX_TEST_DAEMON_PID-}" != '' ]]; then
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
# Start the daemon, wait for the socket to appear.
|
# Start the daemon, wait for the socket to appear.
|
||||||
rm -f $NIX_DAEMON_SOCKET_PATH
|
rm -f $NIX_DAEMON_SOCKET_PATH
|
||||||
PATH=$DAEMON_PATH nix-daemon&
|
PATH=$DAEMON_PATH nix-daemon &
|
||||||
pidDaemon=$!
|
_NIX_TEST_DAEMON_PID=$!
|
||||||
|
export _NIX_TEST_DAEMON_PID
|
||||||
for ((i = 0; i < 300; i++)); do
|
for ((i = 0; i < 300; i++)); do
|
||||||
if [[ -S $NIX_DAEMON_SOCKET_PATH ]]; then
|
if [[ -S $NIX_DAEMON_SOCKET_PATH ]]; then
|
||||||
DAEMON_STARTED=1
|
DAEMON_STARTED=1
|
||||||
|
@ -108,25 +109,35 @@ startDaemon() {
|
||||||
fail "Didn’t manage to start the daemon"
|
fail "Didn’t manage to start the daemon"
|
||||||
fi
|
fi
|
||||||
trap "killDaemon" EXIT
|
trap "killDaemon" EXIT
|
||||||
|
# Save for if daemon is killed
|
||||||
|
NIX_REMOTE_OLD=$NIX_REMOTE
|
||||||
export NIX_REMOTE=daemon
|
export NIX_REMOTE=daemon
|
||||||
}
|
}
|
||||||
|
|
||||||
killDaemon() {
|
killDaemon() {
|
||||||
kill $pidDaemon
|
# Don’t fail trying to stop a non-existant daemon twice
|
||||||
|
if [[ "${_NIX_TEST_DAEMON_PID-}" == '' ]]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
kill $_NIX_TEST_DAEMON_PID
|
||||||
for i in {0..100}; do
|
for i in {0..100}; do
|
||||||
kill -0 $pidDaemon 2> /dev/null || break
|
kill -0 $_NIX_TEST_DAEMON_PID 2> /dev/null || break
|
||||||
sleep 0.1
|
sleep 0.1
|
||||||
done
|
done
|
||||||
kill -9 $pidDaemon 2> /dev/null || true
|
kill -9 $_NIX_TEST_DAEMON_PID 2> /dev/null || true
|
||||||
wait $pidDaemon || true
|
wait $_NIX_TEST_DAEMON_PID || true
|
||||||
|
rm -f $NIX_DAEMON_SOCKET_PATH
|
||||||
|
# Indicate daemon is stopped
|
||||||
|
unset _NIX_TEST_DAEMON_PID
|
||||||
|
# Restore old nix remote
|
||||||
|
NIX_REMOTE=$NIX_REMOTE_OLD
|
||||||
trap "" EXIT
|
trap "" EXIT
|
||||||
}
|
}
|
||||||
|
|
||||||
restartDaemon() {
|
restartDaemon() {
|
||||||
[[ -z "${pidDaemon:-}" ]] && return 0
|
[[ -z "${_NIX_TEST_DAEMON_PID:-}" ]] && return 0
|
||||||
|
|
||||||
killDaemon
|
killDaemon
|
||||||
unset NIX_REMOTE
|
|
||||||
startDaemon
|
startDaemon
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -190,10 +201,6 @@ enableFeatures() {
|
||||||
|
|
||||||
set -x
|
set -x
|
||||||
|
|
||||||
if [[ -n "${NIX_DAEMON_PACKAGE:-}" ]]; then
|
|
||||||
startDaemon
|
|
||||||
fi
|
|
||||||
|
|
||||||
onError() {
|
onError() {
|
||||||
set +x
|
set +x
|
||||||
echo "$0: test failed at:" >&2
|
echo "$0: test failed at:" >&2
|
||||||
|
@ -205,4 +212,4 @@ onError() {
|
||||||
|
|
||||||
trap onError ERR
|
trap onError ERR
|
||||||
|
|
||||||
fi # COMMON_SH_SOURCED
|
fi # COMMON_VARS_AND_FUNCTIONS_SH_SOURCED
|
|
@ -9,7 +9,6 @@ fi
|
||||||
source common.sh
|
source common.sh
|
||||||
|
|
||||||
killDaemon
|
killDaemon
|
||||||
unset NIX_REMOTE
|
|
||||||
|
|
||||||
# Fill the db using the older Nix
|
# Fill the db using the older Nix
|
||||||
PATH_WITH_NEW_NIX="$PATH"
|
PATH_WITH_NEW_NIX="$PATH"
|
||||||
|
|
|
@ -1,14 +1,13 @@
|
||||||
set -e -o pipefail
|
set -eu -o pipefail
|
||||||
|
|
||||||
source common.sh
|
# Don't start the daemon
|
||||||
|
source common/vars-and-functions.sh
|
||||||
|
|
||||||
test -n "$TEST_ROOT"
|
test -n "$TEST_ROOT"
|
||||||
if test -d "$TEST_ROOT"; then
|
if test -d "$TEST_ROOT"; then
|
||||||
chmod -R u+w "$TEST_ROOT"
|
chmod -R u+w "$TEST_ROOT"
|
||||||
# We would delete any daemon socket, so let's stop the daemon first.
|
# We would delete any daemon socket, so let's stop the daemon first.
|
||||||
if [[ -n "${NIX_DAEMON_PACKAGE:-}" ]]; then
|
|
||||||
killDaemon
|
killDaemon
|
||||||
fi
|
|
||||||
rm -rf "$TEST_ROOT"
|
rm -rf "$TEST_ROOT"
|
||||||
fi
|
fi
|
||||||
mkdir "$TEST_ROOT"
|
mkdir "$TEST_ROOT"
|
||||||
|
|
|
@ -129,9 +129,9 @@ endif
|
||||||
|
|
||||||
install-tests += $(foreach x, $(nix_tests), tests/$(x))
|
install-tests += $(foreach x, $(nix_tests), tests/$(x))
|
||||||
|
|
||||||
clean-files += $(d)/common.sh $(d)/config.nix $(d)/ca/config.nix
|
clean-files += $(d)/tests/common/vars-and-functions.sh $(d)/config.nix $(d)/ca/config.nix
|
||||||
|
|
||||||
test-deps += tests/common.sh tests/config.nix tests/ca/config.nix
|
test-deps += tests/common/vars-and-functions.sh tests/config.nix tests/ca/config.nix tests/plugins/libplugintest.$(SO_EXT)
|
||||||
|
|
||||||
ifeq ($(BUILD_SHARED_LIBS), 1)
|
ifeq ($(BUILD_SHARED_LIBS), 1)
|
||||||
test-deps += tests/plugins/libplugintest.$(SO_EXT)
|
test-deps += tests/plugins/libplugintest.$(SO_EXT)
|
||||||
|
|
Loading…
Reference in a new issue