aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2019-12-02 12:34:46 +0100
committerEelco Dolstra <edolstra@gmail.com>2019-12-02 12:34:46 +0100
commitac2bc721d84f3c6c214212e41808a45fa792c6e8 (patch)
tree926cbc0364db1f097b592609b29de8e07f36f7cf /tests
parentec364582eb3821f87bb25760e9dd0f511cf21917 (diff)
parent69326f3637f1560407711838e7298d736274ffd4 (diff)
Merge remote-tracking branch 'origin/recursive-nix'
Diffstat (limited to 'tests')
-rw-r--r--tests/local.mk3
-rw-r--r--tests/recursive.sh69
2 files changed, 71 insertions, 1 deletions
diff --git a/tests/local.mk b/tests/local.mk
index f1d215eec..8c7c673d7 100644
--- a/tests/local.mk
+++ b/tests/local.mk
@@ -30,7 +30,8 @@ nix_tests = \
search.sh \
nix-copy-ssh.sh \
post-hook.sh \
- function-trace.sh
+ function-trace.sh \
+ recursive.sh
# parallel.sh
install-tests += $(foreach x, $(nix_tests), tests/$(x))
diff --git a/tests/recursive.sh b/tests/recursive.sh
new file mode 100644
index 000000000..62896c015
--- /dev/null
+++ b/tests/recursive.sh
@@ -0,0 +1,69 @@
+source common.sh
+
+clearStore
+
+export unreachable=$(nix add-to-store ./recursive.sh)
+
+nix --experimental-features 'nix-command recursive-nix' build -o $TEST_ROOT/result -L '(
+ with import ./config.nix;
+ with import <nix/config.nix>;
+ mkDerivation {
+ name = "recursive";
+ dummy = builtins.toFile "dummy" "bla bla";
+ SHELL = shell;
+
+ # Note: this is a string without context.
+ unreachable = builtins.getEnv "unreachable";
+
+ requiredSystemFeatures = [ "recursive-nix" ];
+
+ buildCommand = '\'\''
+ mkdir $out
+ PATH=${nixBinDir}:$PATH
+ opts="--experimental-features nix-command"
+
+ # Check that we can query/build paths in our input closure.
+ nix $opts path-info $dummy
+ nix $opts build $dummy
+
+ # Make sure we cannot query/build paths not in out input closure.
+ [[ -e $unreachable ]]
+ (! nix $opts path-info $unreachable)
+ (! nix $opts build $unreachable)
+
+ # Add something to the store.
+ echo foobar > foobar
+ foobar=$(nix $opts add-to-store ./foobar)
+
+ nix $opts path-info $foobar
+ nix $opts build $foobar
+
+ # Add it to our closure.
+ ln -s $foobar $out/foobar
+
+ [[ $(nix $opts path-info --all | wc -l) -eq 3 ]]
+
+ # Build a derivation.
+ nix $opts build -L '\''(
+ derivation {
+ name = "inner1";
+ builder = builtins.getEnv "SHELL";
+ system = builtins.getEnv "system";
+ fnord = builtins.toFile "fnord" "fnord";
+ args = [ "-c" "echo $fnord blaat > $out" ];
+ }
+ )'\''
+
+ [[ $(nix $opts path-info --json ./result) =~ fnord ]]
+
+ ln -s $(nix $opts path-info ./result) $out/inner1
+ '\'\'';
+ })
+'
+
+[[ $(cat $TEST_ROOT/result/inner1) =~ blaat ]]
+
+# Make sure the recursively created paths are in the closure.
+nix path-info -r $TEST_ROOT/result | grep foobar
+nix path-info -r $TEST_ROOT/result | grep fnord
+nix path-info -r $TEST_ROOT/result | grep inner1