mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-22 05:56:15 +02:00
Functional test for derivation "advanced attrs"
This tests the Nix language side of things. We are purposely skipping most of `common.sh` because it is overkill for this test: we don't want to have an "overfit" test environment. Co-Authored-By: John Ericson <John.Ericson@Obsidian.Systems>
This commit is contained in:
parent
490ca93cf8
commit
9f9984e4d0
14 changed files with 155 additions and 11 deletions
20
tests/functional/common/paths.sh
Normal file
20
tests/functional/common/paths.sh
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
# shellcheck shell=bash
|
||||||
|
|
||||||
|
commonDir="$(readlink -f "$(dirname "${BASH_SOURCE[0]-$0}")")"
|
||||||
|
|
||||||
|
# Since this is a generated file
|
||||||
|
# shellcheck disable=SC1091
|
||||||
|
source "$commonDir/subst-vars.sh"
|
||||||
|
# Make sure shellcheck knows this will be defined by the above generated snippet
|
||||||
|
: "${bindir?}"
|
||||||
|
|
||||||
|
export PATH="$bindir:$PATH"
|
||||||
|
|
||||||
|
if [[ -n "${NIX_CLIENT_PACKAGE:-}" ]]; then
|
||||||
|
export PATH="$NIX_CLIENT_PACKAGE/bin":$PATH
|
||||||
|
fi
|
||||||
|
|
||||||
|
DAEMON_PATH="$PATH"
|
||||||
|
if [[ -n "${NIX_DAEMON_PACKAGE:-}" ]]; then
|
||||||
|
DAEMON_PATH="${NIX_DAEMON_PACKAGE}/bin:$DAEMON_PATH"
|
||||||
|
fi
|
|
@ -1,6 +1,10 @@
|
||||||
# NOTE: instances of @variable@ are substituted as defined in /mk/templates.mk
|
# NOTE: instances of @variable@ are substituted as defined in /mk/templates.mk
|
||||||
|
|
||||||
export PATH=@bindir@:$PATH
|
if [[ -z "${COMMON_SUBST_VARS_SH_SOURCED-}" ]]; then
|
||||||
|
|
||||||
|
COMMON_SUBST_VARS_SH_SOURCED=1
|
||||||
|
|
||||||
|
bindir=@bindir@
|
||||||
export coreutils=@coreutils@
|
export coreutils=@coreutils@
|
||||||
#lsof=@lsof@
|
#lsof=@lsof@
|
||||||
|
|
||||||
|
@ -13,3 +17,5 @@ export version=@PACKAGE_VERSION@
|
||||||
export system=@system@
|
export system=@system@
|
||||||
|
|
||||||
export BUILD_SHARED_LIBS=@BUILD_SHARED_LIBS@
|
export BUILD_SHARED_LIBS=@BUILD_SHARED_LIBS@
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
4
tests/functional/common/test-root.sh
Normal file
4
tests/functional/common/test-root.sh
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
# shellcheck shell=bash
|
||||||
|
|
||||||
|
TEST_ROOT=$(realpath "${TMPDIR:-/tmp}/nix-test")/${TEST_NAME:-default/tests\/functional//}
|
||||||
|
export TEST_ROOT
|
|
@ -12,9 +12,11 @@ commonDir="$(readlink -f "$(dirname "${BASH_SOURCE[0]-$0}")")"
|
||||||
|
|
||||||
source "$commonDir/subst-vars.sh"
|
source "$commonDir/subst-vars.sh"
|
||||||
# Make sure shellcheck knows all these will be defined by the above generated snippet
|
# Make sure shellcheck knows all these will be defined by the above generated snippet
|
||||||
: "${PATH?} ${coreutils?} ${dot?} ${SHELL?} ${PAGER?} ${busybox?} ${version?} ${system?} ${BUILD_SHARED_LIBS?}"
|
: "${bindir?} ${coreutils?} ${dot?} ${SHELL?} ${PAGER?} ${busybox?} ${version?} ${system?} ${BUILD_SHARED_LIBS?}"
|
||||||
|
|
||||||
|
source "$commonDir/paths.sh"
|
||||||
|
source "$commonDir/test-root.sh"
|
||||||
|
|
||||||
export TEST_ROOT=$(realpath ${TMPDIR:-/tmp}/nix-test)/${TEST_NAME:-default/tests\/functional//}
|
|
||||||
export NIX_STORE_DIR
|
export NIX_STORE_DIR
|
||||||
if ! NIX_STORE_DIR=$(readlink -f $TEST_ROOT/store 2> /dev/null); then
|
if ! NIX_STORE_DIR=$(readlink -f $TEST_ROOT/store 2> /dev/null); then
|
||||||
# Maybe the build directory is symlinked.
|
# Maybe the build directory is symlinked.
|
||||||
|
@ -43,14 +45,6 @@ unset XDG_CONFIG_HOME
|
||||||
unset XDG_CONFIG_DIRS
|
unset XDG_CONFIG_DIRS
|
||||||
unset XDG_CACHE_HOME
|
unset XDG_CACHE_HOME
|
||||||
|
|
||||||
if [[ -n "${NIX_CLIENT_PACKAGE:-}" ]]; then
|
|
||||||
export PATH="$NIX_CLIENT_PACKAGE/bin":$PATH
|
|
||||||
fi
|
|
||||||
DAEMON_PATH="$PATH"
|
|
||||||
if [[ -n "${NIX_DAEMON_PACKAGE:-}" ]]; then
|
|
||||||
DAEMON_PATH="${NIX_DAEMON_PACKAGE}/bin:$DAEMON_PATH"
|
|
||||||
fi
|
|
||||||
|
|
||||||
export IMPURE_VAR1=foo
|
export IMPURE_VAR1=foo
|
||||||
export IMPURE_VAR2=bar
|
export IMPURE_VAR2=bar
|
||||||
|
|
||||||
|
|
23
tests/functional/derivation-advanced-attributes.sh
Executable file
23
tests/functional/derivation-advanced-attributes.sh
Executable file
|
@ -0,0 +1,23 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
source common/test-root.sh
|
||||||
|
source common/paths.sh
|
||||||
|
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
source characterisation/framework.sh
|
||||||
|
|
||||||
|
badDiff=0
|
||||||
|
badExitCode=0
|
||||||
|
|
||||||
|
store="$TEST_ROOT/store"
|
||||||
|
|
||||||
|
for nixFile in derivation/*.nix; do
|
||||||
|
drvPath=$(nix-instantiate --store "$store" --pure-eval --expr "$(< "$nixFile")")
|
||||||
|
testName=$(basename "$nixFile" .nix)
|
||||||
|
got="${store}${drvPath}"
|
||||||
|
expected="derivation/$testName.drv"
|
||||||
|
diffAndAcceptInner "$testName" "$got" "$expected"
|
||||||
|
done
|
||||||
|
|
||||||
|
characterisationTestExit
|
|
@ -0,0 +1 @@
|
||||||
|
Derive([("out","/nix/store/1qsc7svv43m4dw2prh6mvyf7cai5czji-advanced-attributes-defaults","","")],[],[],"my-system","/bin/bash",["-c","echo hello > $out"],[("builder","/bin/bash"),("name","advanced-attributes-defaults"),("out","/nix/store/1qsc7svv43m4dw2prh6mvyf7cai5czji-advanced-attributes-defaults"),("system","my-system")])
|
|
@ -0,0 +1,6 @@
|
||||||
|
derivation {
|
||||||
|
name = "advanced-attributes-defaults";
|
||||||
|
system = "my-system";
|
||||||
|
builder = "/bin/bash";
|
||||||
|
args = [ "-c" "echo hello > $out" ];
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
Derive([("dev","/nix/store/8bazivnbipbyi569623skw5zm91z6kc2-advanced-attributes-structured-attrs-defaults-dev","",""),("out","/nix/store/f8f8nvnx32bxvyxyx2ff7akbvwhwd9dw-advanced-attributes-structured-attrs-defaults","","")],[],[],"my-system","/bin/bash",["-c","echo hello > $out"],[("__json","{\"builder\":\"/bin/bash\",\"name\":\"advanced-attributes-structured-attrs-defaults\",\"outputs\":[\"out\",\"dev\"],\"system\":\"my-system\"}"),("dev","/nix/store/8bazivnbipbyi569623skw5zm91z6kc2-advanced-attributes-structured-attrs-defaults-dev"),("out","/nix/store/f8f8nvnx32bxvyxyx2ff7akbvwhwd9dw-advanced-attributes-structured-attrs-defaults")])
|
|
@ -0,0 +1,8 @@
|
||||||
|
derivation {
|
||||||
|
name = "advanced-attributes-structured-attrs-defaults";
|
||||||
|
system = "my-system";
|
||||||
|
builder = "/bin/bash";
|
||||||
|
args = [ "-c" "echo hello > $out" ];
|
||||||
|
outputs = [ "out" "dev" ];
|
||||||
|
__structuredAttrs = true;
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
Derive([("bin","/nix/store/pbzb48v0ycf80jgligcp4n8z0rblna4n-advanced-attributes-structured-attrs-bin","",""),("dev","/nix/store/7xapi8jv7flcz1qq8jhw55ar8ag8hldh-advanced-attributes-structured-attrs-dev","",""),("out","/nix/store/mpq3l1l1qc2yr50q520g08kprprwv79f-advanced-attributes-structured-attrs","","")],[("/nix/store/4xm4wccqsvagz9gjksn24s7rip2fdy7v-foo.drv",["out"]),("/nix/store/plsq5jbr5nhgqwcgb2qxw7jchc09dnl8-bar.drv",["out"])],[],"my-system","/bin/bash",["-c","echo hello > $out"],[("__json","{\"__darwinAllowLocalNetworking\":true,\"__impureHostDeps\":[\"/usr/bin/ditto\"],\"__noChroot\":true,\"__sandboxProfile\":\"sandcastle\",\"allowSubstitutes\":false,\"builder\":\"/bin/bash\",\"impureEnvVars\":[\"UNICORN\"],\"name\":\"advanced-attributes-structured-attrs\",\"outputChecks\":{\"bin\":{\"disallowedReferences\":[\"/nix/store/7rhsm8i393hm1wcsmph782awg1hi2f7x-bar\"],\"disallowedRequisites\":[\"/nix/store/7rhsm8i393hm1wcsmph782awg1hi2f7x-bar\"]},\"dev\":{\"maxClosureSize\":5909,\"maxSize\":789},\"out\":{\"allowedReferences\":[\"/nix/store/3c08bzb71z4wiag719ipjxr277653ynp-foo\"],\"allowedRequisites\":[\"/nix/store/3c08bzb71z4wiag719ipjxr277653ynp-foo\"]}},\"outputs\":[\"out\",\"bin\",\"dev\"],\"preferLocalBuild\":true,\"requiredSystemFeatures\":[\"rainbow\",\"uid-range\"],\"system\":\"my-system\"}"),("bin","/nix/store/pbzb48v0ycf80jgligcp4n8z0rblna4n-advanced-attributes-structured-attrs-bin"),("dev","/nix/store/7xapi8jv7flcz1qq8jhw55ar8ag8hldh-advanced-attributes-structured-attrs-dev"),("out","/nix/store/mpq3l1l1qc2yr50q520g08kprprwv79f-advanced-attributes-structured-attrs")])
|
|
@ -0,0 +1,45 @@
|
||||||
|
let
|
||||||
|
system = "my-system";
|
||||||
|
foo = derivation {
|
||||||
|
inherit system;
|
||||||
|
name = "foo";
|
||||||
|
builder = "/bin/bash";
|
||||||
|
args = ["-c" "echo foo > $out"];
|
||||||
|
};
|
||||||
|
bar = derivation {
|
||||||
|
inherit system;
|
||||||
|
name = "bar";
|
||||||
|
builder = "/bin/bash";
|
||||||
|
args = ["-c" "echo bar > $out"];
|
||||||
|
};
|
||||||
|
in
|
||||||
|
derivation {
|
||||||
|
inherit system;
|
||||||
|
name = "advanced-attributes-structured-attrs";
|
||||||
|
builder = "/bin/bash";
|
||||||
|
args = [ "-c" "echo hello > $out" ];
|
||||||
|
__sandboxProfile = "sandcastle";
|
||||||
|
__noChroot = true;
|
||||||
|
__impureHostDeps = ["/usr/bin/ditto"];
|
||||||
|
impureEnvVars = ["UNICORN"];
|
||||||
|
__darwinAllowLocalNetworking = true;
|
||||||
|
outputs = [ "out" "bin" "dev" ];
|
||||||
|
__structuredAttrs = true;
|
||||||
|
outputChecks = {
|
||||||
|
out = {
|
||||||
|
allowedReferences = [foo];
|
||||||
|
allowedRequisites = [foo];
|
||||||
|
};
|
||||||
|
bin = {
|
||||||
|
disallowedReferences = [bar];
|
||||||
|
disallowedRequisites = [bar];
|
||||||
|
};
|
||||||
|
dev = {
|
||||||
|
maxSize = 789;
|
||||||
|
maxClosureSize = 5909;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
requiredSystemFeatures = ["rainbow" "uid-range"];
|
||||||
|
preferLocalBuild = true;
|
||||||
|
allowSubstitutes = false;
|
||||||
|
}
|
1
tests/functional/derivation/advanced-attributes.drv
Normal file
1
tests/functional/derivation/advanced-attributes.drv
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Derive([("out","/nix/store/33a6fdmn8q9ih9d7npbnrxn2q56a4l8q-advanced-attributes","","")],[("/nix/store/4xm4wccqsvagz9gjksn24s7rip2fdy7v-foo.drv",["out"]),("/nix/store/plsq5jbr5nhgqwcgb2qxw7jchc09dnl8-bar.drv",["out"])],[],"my-system","/bin/bash",["-c","echo hello > $out"],[("__darwinAllowLocalNetworking","1"),("__impureHostDeps","/usr/bin/ditto"),("__noChroot","1"),("__sandboxProfile","sandcastle"),("allowSubstitutes",""),("allowedReferences","/nix/store/3c08bzb71z4wiag719ipjxr277653ynp-foo"),("allowedRequisites","/nix/store/3c08bzb71z4wiag719ipjxr277653ynp-foo"),("builder","/bin/bash"),("disallowedReferences","/nix/store/7rhsm8i393hm1wcsmph782awg1hi2f7x-bar"),("disallowedRequisites","/nix/store/7rhsm8i393hm1wcsmph782awg1hi2f7x-bar"),("impureEnvVars","UNICORN"),("name","advanced-attributes"),("out","/nix/store/33a6fdmn8q9ih9d7npbnrxn2q56a4l8q-advanced-attributes"),("preferLocalBuild","1"),("requiredSystemFeatures","rainbow uid-range"),("system","my-system")])
|
33
tests/functional/derivation/advanced-attributes.nix
Normal file
33
tests/functional/derivation/advanced-attributes.nix
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
let
|
||||||
|
system = "my-system";
|
||||||
|
foo = derivation {
|
||||||
|
inherit system;
|
||||||
|
name = "foo";
|
||||||
|
builder = "/bin/bash";
|
||||||
|
args = ["-c" "echo foo > $out"];
|
||||||
|
};
|
||||||
|
bar = derivation {
|
||||||
|
inherit system;
|
||||||
|
name = "bar";
|
||||||
|
builder = "/bin/bash";
|
||||||
|
args = ["-c" "echo bar > $out"];
|
||||||
|
};
|
||||||
|
in
|
||||||
|
derivation {
|
||||||
|
inherit system;
|
||||||
|
name = "advanced-attributes";
|
||||||
|
builder = "/bin/bash";
|
||||||
|
args = [ "-c" "echo hello > $out" ];
|
||||||
|
__sandboxProfile = "sandcastle";
|
||||||
|
__noChroot = true;
|
||||||
|
__impureHostDeps = ["/usr/bin/ditto"];
|
||||||
|
impureEnvVars = ["UNICORN"];
|
||||||
|
__darwinAllowLocalNetworking = true;
|
||||||
|
allowedReferences = [foo];
|
||||||
|
allowedRequisites = [foo];
|
||||||
|
disallowedReferences = [bar];
|
||||||
|
disallowedRequisites = [bar];
|
||||||
|
requiredSystemFeatures = ["rainbow" "uid-range"];
|
||||||
|
preferLocalBuild = true;
|
||||||
|
allowSubstitutes = false;
|
||||||
|
}
|
|
@ -106,6 +106,7 @@ nix_tests = \
|
||||||
eval-store.sh \
|
eval-store.sh \
|
||||||
why-depends.sh \
|
why-depends.sh \
|
||||||
derivation-json.sh \
|
derivation-json.sh \
|
||||||
|
derivation-advanced-attributes.sh \
|
||||||
import-derivation.sh \
|
import-derivation.sh \
|
||||||
nix_path.sh \
|
nix_path.sh \
|
||||||
case-hack.sh \
|
case-hack.sh \
|
||||||
|
|
Loading…
Reference in a new issue