Skip to content

Commit

Permalink
Add a test ensuring compatibility with an old daemon
Browse files Browse the repository at this point in the history
This requires adding `nix` to its own closure which is a bit unfortunate,
but as it is optional (the test will be disabled if `OUTER_NIX` is unset) it
shouldn't be too much of an issue.

(Ideally this should go in another derivation so that we can build Nix and run
the test independently, but as the tests are running in the same derivation
as the build it's a bit complicated to do so).
  • Loading branch information
thufschmitt committed Feb 16, 2021
1 parent 4e98f03 commit 7e30bbf
Show file tree
Hide file tree
Showing 5 changed files with 20 additions and 5 deletions.
9 changes: 9 additions & 0 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,11 @@
# 'nix.perl-bindings' packages.
overlay = final: prev: {

# An older version of Nix to test against when using the daemon.
# Currently using `nixUnstable` as the stable one doesn't respect
# `NIX_DAEMON_SOCKET_PATH` which is needed for the tests.
mainstream-nix = prev.nixUnstable;

nix = with final; with commonDeps pkgs; stdenv.mkDerivation {
name = "nix-${version}";
inherit version;
Expand All @@ -123,6 +128,8 @@

VERSION_SUFFIX = versionSuffix;

OUTER_NIX = mainstream-nix;

outputs = [ "out" "dev" "doc" ];

nativeBuildInputs = nativeBuildDeps;
Expand Down Expand Up @@ -483,6 +490,8 @@
stdenv.mkDerivation {
name = "nix";

OUTER_NIX = mainstream-nix;

outputs = [ "out" "dev" "doc" ];

nativeBuildInputs = nativeBuildDeps;
Expand Down
3 changes: 1 addition & 2 deletions tests/common.sh.in
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,6 @@ clearStore() {
mkdir "$NIX_STORE_DIR"
rm -rf "$NIX_STATE_DIR"
mkdir "$NIX_STATE_DIR"
nix-store --init
clearProfiles
}

Expand All @@ -73,7 +72,7 @@ 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 &
${NIX_DAEMON_COMMAND:-nix daemon} &
for ((i = 0; i < 30; i++)); do
if [ -e $NIX_DAEMON_SOCKET_PATH ]; then break; fi
sleep 1
Expand Down
2 changes: 1 addition & 1 deletion tests/local.mk
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ nix_tests = \
gc-auto.sh \
referrers.sh user-envs.sh logging.sh nix-build.sh misc.sh fixed.sh \
gc-runtime.sh check-refs.sh filter-source.sh \
local-store.sh remote-store.sh export.sh export-graph.sh \
local-store.sh remote-store.sh remote-store-old-daemon.sh export.sh export-graph.sh \
timeout.sh secure-drv-outputs.sh nix-channel.sh \
multiple-outputs.sh import-derivation.sh fetchurl.sh optimise-store.sh \
binary-cache.sh \
Expand Down
7 changes: 7 additions & 0 deletions tests/remote-store-old-daemon.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Test that the new Nix can properly talk to an old daemon.
# If `$OUTER_NIX` isn't set (e.g. when bootsraping), just skip this test

if [[ -n "$OUTER_NIX" ]]; then
export NIX_DAEMON_COMMAND=$OUTER_NIX/bin/nix-daemon
source remote-store.sh
fi
4 changes: 2 additions & 2 deletions tests/remote-store.sh
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,12 @@ startDaemon

storeCleared=1 NIX_REMOTE_=$NIX_REMOTE $SHELL ./user-envs.sh

nix-store --gc --max-freed 1K

nix-store --dump-db > $TEST_ROOT/d1
NIX_REMOTE= nix-store --dump-db > $TEST_ROOT/d2
cmp $TEST_ROOT/d1 $TEST_ROOT/d2

nix-store --gc --max-freed 1K

killDaemon

user=$(whoami)
Expand Down

0 comments on commit 7e30bbf

Please sign in to comment.