aboutsummaryrefslogtreecommitdiff
path: root/tests/functional/nested-sandboxing
diff options
context:
space:
mode:
authorJohn Ericson <John.Ericson@Obsidian.Systems>2023-10-05 12:12:18 -0400
committerJohn Ericson <John.Ericson@Obsidian.Systems>2023-12-01 12:06:43 -0500
commit30dcc19d1f30fc203be460134c4578509cce704f (patch)
tree6cc32609b9984a2c4d5ecc0cac5cf30609e208b9 /tests/functional/nested-sandboxing
parent72425212657d795dc215b334b7c8c8cd36d06b72 (diff)
Put functional tests in `tests/functional`
I think it is bad for these reasons when `tests/` contains a mix of functional and integration tests - Concepts is harder to understand, the documentation makes a good unit vs functional vs integration distinction, but when the integration tests are just two subdirs within `tests/` this is not clear. - Source filtering in the `flake.nix` is more complex. We need to filter out some of the dirs from `tests/`, rather than simply pick the dirs we want and take all of them. This is a good sign the structure of what we are trying to do is not matching the structure of the files. With this change we have a clean: ```shell-session $ git show 'HEAD:tests' tree HEAD:tests functional/ installer/ nixos/ ``` (cherry picked from commit 68c81c737571794f7246db53fb4774e94fcf4b7e)
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
+ '';
+}