aboutsummaryrefslogtreecommitdiff
path: root/tests/functional/nested-sandboxing
diff options
context:
space:
mode:
Diffstat (limited to 'tests/functional/nested-sandboxing')
-rw-r--r--tests/functional/nested-sandboxing/command.sh29
-rw-r--r--tests/functional/nested-sandboxing/runner.nix24
2 files changed, 53 insertions, 0 deletions
diff --git a/tests/functional/nested-sandboxing/command.sh b/tests/functional/nested-sandboxing/command.sh
new file mode 100644
index 000000000..69366486c
--- /dev/null
+++ b/tests/functional/nested-sandboxing/command.sh
@@ -0,0 +1,29 @@
+export NIX_BIN_DIR=$(dirname $(type -p nix))
+# TODO Get Nix and its closure more flexibly
+export EXTRA_SANDBOX="/nix/store $(dirname $NIX_BIN_DIR)"
+
+badStoreUrl () {
+ local altitude=$1
+ echo $TEST_ROOT/store-$altitude
+}
+
+goodStoreUrl () {
+ local altitude=$1
+ echo $("badStoreUrl" "$altitude")?store=/foo-$altitude
+}
+
+# The non-standard sandbox-build-dir helps ensure that we get the same behavior
+# whether this test is being run in a derivation as part of the nix build or
+# being manually run by a developer outside a derivation
+runNixBuild () {
+ local storeFun=$1
+ local altitude=$2
+ nix-build \
+ --no-substitute --no-out-link \
+ --store "$("$storeFun" "$altitude")" \
+ --extra-sandbox-paths "$EXTRA_SANDBOX" \
+ ./nested-sandboxing/runner.nix \
+ --arg altitude "$((altitude - 1))" \
+ --argstr storeFun "$storeFun" \
+ --sandbox-build-dir /build-non-standard
+}
diff --git a/tests/functional/nested-sandboxing/runner.nix b/tests/functional/nested-sandboxing/runner.nix
new file mode 100644
index 000000000..9a5822c88
--- /dev/null
+++ b/tests/functional/nested-sandboxing/runner.nix
@@ -0,0 +1,24 @@
+{ altitude, storeFun }:
+
+with import ../config.nix;
+
+mkDerivation {
+ name = "nested-sandboxing";
+ busybox = builtins.getEnv "busybox";
+ EXTRA_SANDBOX = builtins.getEnv "EXTRA_SANDBOX";
+ buildCommand = if altitude == 0 then ''
+ echo Deep enough! > $out
+ '' else ''
+ cp -r ${../common} ./common
+ cp ${../common.sh} ./common.sh
+ cp ${../config.nix} ./config.nix
+ cp -r ${./.} ./nested-sandboxing
+
+ export PATH=${builtins.getEnv "NIX_BIN_DIR"}:$PATH
+
+ source common.sh
+ source ./nested-sandboxing/command.sh
+
+ runNixBuild ${storeFun} ${toString altitude} >> $out
+ '';
+}