aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorregnat <rg@regnat.ovh>2020-11-10 10:43:33 +0100
committerregnat <rg@regnat.ovh>2021-03-16 14:20:41 +0100
commit5716345adf2e794fd62229ea52352e74e92e8e63 (patch)
tree3712c69131d9a84b39cbe4e7f464078fa060af4d
parent338f2710580b334a754fad28b88c5cb137c83352 (diff)
Add a test ensuring compatibility with an old daemon
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).
-rw-r--r--flake.nix9
-rw-r--r--tests/common.sh.in3
-rw-r--r--tests/local.mk2
-rw-r--r--tests/remote-store-old-daemon.sh7
-rw-r--r--tests/remote-store.sh4
5 files changed, 20 insertions, 5 deletions
diff --git a/flake.nix b/flake.nix
index e59ec9a35..3e236aaca 100644
--- a/flake.nix
+++ b/flake.nix
@@ -150,6 +150,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;
@@ -158,6 +163,8 @@
VERSION_SUFFIX = versionSuffix;
+ OUTER_NIX = mainstream-nix;
+
outputs = [ "out" "dev" "doc" ];
nativeBuildInputs = nativeBuildDeps;
@@ -486,6 +493,8 @@
stdenv.mkDerivation {
name = "nix";
+ OUTER_NIX = mainstream-nix;
+
outputs = [ "out" "dev" "doc" ];
nativeBuildInputs = nativeBuildDeps;
diff --git a/tests/common.sh.in b/tests/common.sh.in
index de44a4da4..277dd6dfa 100644
--- a/tests/common.sh.in
+++ b/tests/common.sh.in
@@ -57,7 +57,6 @@ clearStore() {
mkdir "$NIX_STORE_DIR"
rm -rf "$NIX_STATE_DIR"
mkdir "$NIX_STATE_DIR"
- nix-store --init
clearProfiles
}
@@ -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
diff --git a/tests/local.mk b/tests/local.mk
index de095c117..dd9a0ad56 100644
--- a/tests/local.mk
+++ b/tests/local.mk
@@ -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 \
diff --git a/tests/remote-store-old-daemon.sh b/tests/remote-store-old-daemon.sh
new file mode 100644
index 000000000..ede7ce716
--- /dev/null
+++ b/tests/remote-store-old-daemon.sh
@@ -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
diff --git a/tests/remote-store.sh b/tests/remote-store.sh
index f7ae1a2ed..31210ab47 100644
--- a/tests/remote-store.sh
+++ b/tests/remote-store.sh
@@ -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)