about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--tests/local.mk3
-rw-r--r--tests/run.nix17
-rw-r--r--tests/run.sh27
3 files changed, 46 insertions, 1 deletions
diff --git a/tests/local.mk b/tests/local.mk
index 2b92ec4e5a84..baf74224bb12 100644
--- a/tests/local.mk
+++ b/tests/local.mk
@@ -18,7 +18,8 @@ nix_tests = \
   structured-attrs.sh \
   fetchGit.sh \
   fetchMercurial.sh \
-  signing.sh
+  signing.sh \
+  run.sh
   # parallel.sh
 
 install-tests += $(foreach x, $(nix_tests), tests/$(x))
diff --git a/tests/run.nix b/tests/run.nix
new file mode 100644
index 000000000000..77dcbd2a9df0
--- /dev/null
+++ b/tests/run.nix
@@ -0,0 +1,17 @@
+with import ./config.nix;
+
+{
+  hello = mkDerivation {
+    name = "hello";
+    buildCommand =
+      ''
+        mkdir -p $out/bin
+        cat > $out/bin/hello <<EOF
+        #! ${shell}
+        who=\$1
+        echo "Hello \''${who:-World} from $out/bin/hello"
+        EOF
+        chmod +x $out/bin/hello
+      '';
+  };
+}
diff --git a/tests/run.sh b/tests/run.sh
new file mode 100644
index 000000000000..1ba181c9cd53
--- /dev/null
+++ b/tests/run.sh
@@ -0,0 +1,27 @@
+source common.sh
+
+clearStore
+clearCache
+
+nix run -f run.nix hello -c hello | grep 'Hello World'
+nix run -f run.nix hello -c hello NixOS | grep 'Hello NixOS'
+
+if [[ $(uname) = Linux ]]; then
+
+    chmod -R u+w $TEST_ROOT/store0 || true
+    rm -rf $TEST_ROOT/store0
+
+    clearStore
+
+    path=$(nix eval --raw -f run.nix hello)
+
+    # Note: we need the sandbox paths to ensure that the shell is
+    # visible in the sandbox.
+    nix run --sandbox-paths '/nix? /bin? /lib? /usr?' --store $TEST_ROOT/store0 -f run.nix hello -c hello | grep 'Hello World'
+
+    path2=$(nix run --sandbox-paths '/nix? /bin? /lib? /usr?' --store $TEST_ROOT/store0 -f run.nix hello -c $SHELL -c 'type -p hello')
+
+    [[ $path/bin/hello = $path2 ]]
+
+    [[ -e $TEST_ROOT/store0/nix/store/$(basename $path)/bin/hello ]]
+fi