mirror of
https://github.com/NixOS/nix
synced 2025-06-25 02:21:16 +02:00
Merge remote-tracking branch 'origin/master' into nix-copy-gc
This commit is contained in:
commit
d002324f1b
298 changed files with 1709 additions and 5686 deletions
|
@ -1,6 +1,6 @@
|
|||
{ busybox }:
|
||||
|
||||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
let
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{ busybox, contentAddressed ? false }:
|
||||
|
||||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
let
|
||||
|
||||
|
|
2
tests/functional/ca/config.nix
Normal file
2
tests/functional/ca/config.nix
Normal file
|
@ -0,0 +1,2 @@
|
|||
# Shim to get generated file
|
||||
import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/ca/config.nix"
|
|
@ -1,4 +1,4 @@
|
|||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/ca/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
let mkCADerivation = args: mkDerivation ({
|
||||
__contentAddressed = true;
|
||||
|
|
|
@ -1,29 +0,0 @@
|
|||
ca-tests := \
|
||||
$(d)/build-with-garbage-path.sh \
|
||||
$(d)/build.sh \
|
||||
$(d)/build-cache.sh \
|
||||
$(d)/concurrent-builds.sh \
|
||||
$(d)/derivation-json.sh \
|
||||
$(d)/duplicate-realisation-in-closure.sh \
|
||||
$(d)/eval-store.sh \
|
||||
$(d)/gc.sh \
|
||||
$(d)/import-from-derivation.sh \
|
||||
$(d)/new-build-cmd.sh \
|
||||
$(d)/nix-copy.sh \
|
||||
$(d)/nix-run.sh \
|
||||
$(d)/nix-shell.sh \
|
||||
$(d)/post-hook.sh \
|
||||
$(d)/recursive.sh \
|
||||
$(d)/repl.sh \
|
||||
$(d)/selfref-gc.sh \
|
||||
$(d)/signatures.sh \
|
||||
$(d)/substitute.sh \
|
||||
$(d)/why-depends.sh
|
||||
|
||||
install-tests-groups += ca
|
||||
|
||||
clean-files += \
|
||||
$(d)/config.nix
|
||||
|
||||
test-deps += \
|
||||
tests/functional/ca/config.nix
|
|
@ -6,7 +6,4 @@ flakeDir="$TEST_HOME/flake"
|
|||
mkdir -p "${flakeDir}"
|
||||
cp flake.nix "${_NIX_TEST_BUILD_DIR}/ca/config.nix" content-addressed.nix "${flakeDir}"
|
||||
|
||||
# `config.nix` cannot be gotten via build dir / env var (runs afoul pure eval). Instead get from flake.
|
||||
removeBuildDirRef "$flakeDir"/*.nix
|
||||
|
||||
nix run --no-write-lock-file "path:${flakeDir}#runnable"
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/ca/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
let mkCADerivation = args: mkDerivation ({
|
||||
__contentAddressed = true;
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
# build it at once.
|
||||
|
||||
|
||||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/ca/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
mkDerivation {
|
||||
name = "simple";
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
rec {
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
rec {
|
||||
dep1 = mkDerivation {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{checkBuildId ? 0}:
|
||||
|
||||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
{
|
||||
nondeterministic = mkDerivation {
|
||||
|
|
|
@ -39,9 +39,6 @@ EOF
|
|||
|
||||
cp simple.nix shell.nix simple.builder.sh "${config_nix}" "$flakeDir/"
|
||||
|
||||
# `config.nix` cannot be gotten via build dir / env var (runs afoul pure eval). Instead get from flake.
|
||||
removeBuildDirRef "$flakeDir"/*.nix
|
||||
|
||||
TODO_NixOS
|
||||
|
||||
outPath=$(nix build --print-out-paths --no-link --sandbox-paths '/nix? /bin? /lib? /lib64? /usr?' --store "$TEST_ROOT/x" path:"$flakeDir")
|
||||
|
|
|
@ -343,15 +343,6 @@ count() {
|
|||
echo $#
|
||||
}
|
||||
|
||||
# Sometimes, e.g. due to pure eval, restricted eval, or sandboxing, we
|
||||
# cannot look up `config.nix` in the build dir, and have to instead get
|
||||
# it from the current directory. (In this case, the current directly
|
||||
# will be somewhere in `$TEST_ROOT`.)
|
||||
removeBuildDirRef() {
|
||||
# shellcheck disable=SC2016 # The ${} in this is Nix, not shell
|
||||
sed -i -e 's,"${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/[^ ]*config.nix",./config.nix,' "$@"
|
||||
}
|
||||
|
||||
trap onError ERR
|
||||
|
||||
fi # COMMON_FUNCTIONS_SH_SOURCED
|
||||
|
|
|
@ -19,7 +19,7 @@ EOF
|
|||
|
||||
# When we're doing everything in the same store, we need to bring
|
||||
# dependencies into context.
|
||||
sed -i "$(dirname "${BASH_SOURCE[0]}")"/../config.nix \
|
||||
sed -i "${_NIX_TEST_BUILD_DIR}/config.nix" \
|
||||
-e 's^\(shell\) = "/nix/store/\([^/]*\)/\(.*\)";^\1 = builtins.appendContext "/nix/store/\2" { "/nix/store/\2".path = true; } + "/\3";^' \
|
||||
-e 's^\(path\) = "/nix/store/\([^/]*\)/\(.*\)";^\1 = builtins.appendContext "/nix/store/\2" { "/nix/store/\2".path = true; } + "/\3";^' \
|
||||
;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# NOTE: instances of @variable@ are substituted as defined in /mk/templates.mk
|
||||
# NOTE: instances of @variable@ are substituted by the build system
|
||||
|
||||
if [[ -z "${COMMON_SUBST_VARS_SH_SOURCED-}" ]]; then
|
||||
|
||||
|
|
2
tests/functional/config.nix
Normal file
2
tests/functional/config.nix
Normal file
|
@ -0,0 +1,2 @@
|
|||
# Shim to get generated file
|
||||
import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix"
|
|
@ -1,5 +1,5 @@
|
|||
{ hashInvalidator ? "" }:
|
||||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
let {
|
||||
|
||||
|
|
2
tests/functional/dyn-drv/config.nix
Normal file
2
tests/functional/dyn-drv/config.nix
Normal file
|
@ -0,0 +1,2 @@
|
|||
# Shim to get generated file
|
||||
import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/dyn-drv/config.nix"
|
|
@ -1,15 +0,0 @@
|
|||
dyn-drv-tests := \
|
||||
$(d)/text-hashed-output.sh \
|
||||
$(d)/recursive-mod-json.sh \
|
||||
$(d)/build-built-drv.sh \
|
||||
$(d)/eval-outputOf.sh \
|
||||
$(d)/dep-built-drv.sh \
|
||||
$(d)/old-daemon-error-hack.sh
|
||||
|
||||
install-tests-groups += dyn-drv
|
||||
|
||||
clean-files += \
|
||||
$(d)/config.nix
|
||||
|
||||
test-deps += \
|
||||
tests/functional/dyn-drv/config.nix
|
|
@ -1,4 +1,4 @@
|
|||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/dyn-drv/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
# A simple content-addressed derivation.
|
||||
# The derivation can be arbitrarily modified by passing a different `seed`,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/dyn-drv/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
let innerName = "foo"; in
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/dyn-drv/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
# A simple content-addressed derivation.
|
||||
# The derivation can be arbitrarily modified by passing a different `seed`,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
rec {
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{ destFile, seed }:
|
||||
|
||||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
mkDerivation {
|
||||
name = "simple";
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{ busybox }:
|
||||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
let
|
||||
|
||||
mkDerivation = args:
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
mkDerivation {
|
||||
name = "filter";
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
rec {
|
||||
|
||||
|
|
|
@ -4,9 +4,6 @@ source common.sh
|
|||
|
||||
cp ../simple.nix ../simple.builder.sh "${config_nix}" "$TEST_HOME"
|
||||
|
||||
# `config.nix` cannot be gotten via build dir / env var (runs afoul pure eval). Instead get from flake.
|
||||
removeBuildDirRef "$TEST_HOME"/*.nix
|
||||
|
||||
cd "$TEST_HOME"
|
||||
|
||||
cat <<EOF > flake.nix
|
||||
|
|
|
@ -35,9 +35,6 @@ writeSimpleFlake() {
|
|||
EOF
|
||||
|
||||
cp ../simple.nix ../shell.nix ../simple.builder.sh "${config_nix}" "$flakeDir/"
|
||||
|
||||
# `config.nix` cannot be gotten via build dir / env var (runs afoul pure eval). Instead get from flake.
|
||||
removeBuildDirRef "$flakeDir"/*.nix
|
||||
}
|
||||
|
||||
createSimpleGitFlake() {
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
source common.sh
|
||||
|
||||
cp ../simple.nix ../simple.builder.sh "${config_nix}" $TEST_HOME
|
||||
removeBuildDirRef "$TEST_HOME/simple.nix"
|
||||
|
||||
cd $TEST_HOME
|
||||
|
||||
|
@ -27,7 +26,17 @@ cat <<EOF > flake.nix
|
|||
EOF
|
||||
|
||||
# Without --accept-flake-config, the post hook should not run.
|
||||
# To test variations in stderr tty-ness, we run the command in different ways,
|
||||
# none of which should block on stdin or accept the `nixConfig`s.
|
||||
nix build < /dev/null
|
||||
nix build < /dev/null 2>&1 | cat
|
||||
# EOF counts as no, even when interactive (throw EOF error before)
|
||||
if type -p script >/dev/null && script -q -c true /dev/null; then
|
||||
echo "script is available and GNU-like, so we can ensure a tty"
|
||||
script -q -c 'nix build < /dev/null' /dev/null
|
||||
else
|
||||
echo "script is not available or not GNU-like, so we skip testing with an added tty"
|
||||
fi
|
||||
(! [[ -f post-hook-ran ]])
|
||||
TODO_NixOS
|
||||
clearStore
|
||||
|
|
|
@ -27,9 +27,6 @@ EOF
|
|||
mkdir -p "$TEST_HOME/nixpkgs"
|
||||
cp "${config_nix}" ../shell.nix "$TEST_HOME/nixpkgs"
|
||||
|
||||
# `config.nix` cannot be gotten via build dir / env var (runs afoul pure eval). Instead get from flake.
|
||||
removeBuildDirRef "$TEST_HOME/nixpkgs"/*.nix
|
||||
|
||||
cat <<EOF >"$TEST_HOME/nixpkgs/flake.nix"
|
||||
{
|
||||
outputs = {self}: {
|
||||
|
@ -125,7 +122,7 @@ expectStderr 1 nix develop --unset-env-var FOO --set-env-var FOO 'BAR' --no-writ
|
|||
grepQuiet "error: Cannot set environment variable 'FOO' that is unset with '--unset-env-var'"
|
||||
|
||||
# Check that multiple `--ignore-env`'s are okay.
|
||||
expectStderr 0 nix develop --ignore-env --set-env-var FOO 'BAR' --ignore-env .#hello
|
||||
expectStderr 0 nix develop --ignore-env --set-env-var FOO 'BAR' --ignore-env .#hello < /dev/null
|
||||
|
||||
# Determine the bashInteractive executable.
|
||||
nix build --no-write-lock-file './nixpkgs#bashInteractive' --out-link ./bash-interactive
|
||||
|
|
|
@ -1,25 +0,0 @@
|
|||
flake-tests := \
|
||||
$(d)/flakes.sh \
|
||||
$(d)/develop.sh \
|
||||
$(d)/edit.sh \
|
||||
$(d)/run.sh \
|
||||
$(d)/mercurial.sh \
|
||||
$(d)/circular.sh \
|
||||
$(d)/init.sh \
|
||||
$(d)/inputs.sh \
|
||||
$(d)/follow-paths.sh \
|
||||
$(d)/bundle.sh \
|
||||
$(d)/check.sh \
|
||||
$(d)/unlocked-override.sh \
|
||||
$(d)/absolute-paths.sh \
|
||||
$(d)/absolute-attr-paths.sh \
|
||||
$(d)/build-paths.sh \
|
||||
$(d)/flake-in-submodule.sh \
|
||||
$(d)/prefetch.sh \
|
||||
$(d)/eval-cache.sh \
|
||||
$(d)/search-root.sh \
|
||||
$(d)/config.sh \
|
||||
$(d)/show.sh \
|
||||
$(d)/dubious-query.sh
|
||||
|
||||
install-tests-groups += flake
|
|
@ -8,8 +8,6 @@ clearStore
|
|||
rm -rf $TEST_HOME/.cache $TEST_HOME/.config $TEST_HOME/.local
|
||||
|
||||
cp ../shell-hello.nix "${config_nix}" $TEST_HOME
|
||||
# `config.nix` cannot be gotten via build dir / env var (runs afoul pure eval). Instead get from flake.
|
||||
removeBuildDirRef "$TEST_HOME"/*.nix
|
||||
cd $TEST_HOME
|
||||
|
||||
cat <<EOF > flake.nix
|
||||
|
|
|
@ -87,28 +87,3 @@ assert show_output.legacyPackages.${builtins.currentSystem}.AAAAAASomeThingsFail
|
|||
assert show_output.legacyPackages.${builtins.currentSystem}.simple.name == "simple";
|
||||
true
|
||||
'
|
||||
|
||||
cat >flake.nix<<EOF
|
||||
{
|
||||
outputs = inputs: {
|
||||
packages.$system = {
|
||||
aNoDescription = import ./simple.nix;
|
||||
bOneLineDescription = import ./simple.nix // { meta.description = "one line"; };
|
||||
cMultiLineDescription = import ./simple.nix // { meta.description = ''
|
||||
line one
|
||||
line two
|
||||
''; };
|
||||
dLongDescription = import ./simple.nix // { meta.description = ''
|
||||
01234567890123456789012345678901234567890123456789012345678901234567890123456789abcdefg
|
||||
''; };
|
||||
eEmptyDescription = import ./simple.nix // { meta.description = ""; };
|
||||
};
|
||||
};
|
||||
}
|
||||
EOF
|
||||
nix flake show > ./show-output.txt
|
||||
test "$(awk -F '[:] ' '/aNoDescription/{print $NF}' ./show-output.txt)" = "package 'simple'"
|
||||
test "$(awk -F '[:] ' '/bOneLineDescription/{print $NF}' ./show-output.txt)" = "package 'simple' - 'one line'"
|
||||
test "$(awk -F '[:] ' '/cMultiLineDescription/{print $NF}' ./show-output.txt)" = "package 'simple' - 'line one'"
|
||||
test "$(awk -F '[:] ' '/dLongDescription/{print $NF}' ./show-output.txt)" = "package 'simple' - '012345678901234567890123456..."
|
||||
test "$(awk -F '[:] ' '/eEmptyDescription/{print $NF}' ./show-output.txt)" = "package 'simple'"
|
|
@ -1,4 +1,4 @@
|
|||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
rec {
|
||||
x1 = mkDerivation {
|
||||
name = "x1";
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
{ lockFifo ? null }:
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
mkDerivation {
|
||||
name = "gc-runtime";
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
git-hashing-tests := \
|
||||
$(d)/simple.sh
|
||||
|
||||
install-tests-groups += git-hashing
|
||||
|
||||
clean-files += \
|
||||
$(d)/config.nix
|
|
@ -5,7 +5,7 @@
|
|||
, withFinalRefs ? false
|
||||
}:
|
||||
|
||||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
let
|
||||
contentAddressedByDefault = builtins.getEnv "NIX_TESTS_CA_BY_DEFAULT" == "1";
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
import (
|
||||
mkDerivation {
|
||||
name = "foo";
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
rec {
|
||||
bar = mkDerivation {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
rec {
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{ var, value }:
|
||||
|
||||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
mkDerivation {
|
||||
name = "test";
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{ mode }:
|
||||
|
||||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
mkDerivation (
|
||||
{
|
||||
|
|
|
@ -1,14 +0,0 @@
|
|||
local-overlay-store-tests := \
|
||||
$(d)/check-post-init.sh \
|
||||
$(d)/redundant-add.sh \
|
||||
$(d)/build.sh \
|
||||
$(d)/bad-uris.sh \
|
||||
$(d)/add-lower.sh \
|
||||
$(d)/delete-refs.sh \
|
||||
$(d)/delete-duplicate.sh \
|
||||
$(d)/gc.sh \
|
||||
$(d)/verify.sh \
|
||||
$(d)/optimise.sh \
|
||||
$(d)/stale-file-handle.sh
|
||||
|
||||
install-tests-groups += local-overlay-store
|
|
@ -1,146 +0,0 @@
|
|||
nix_tests = \
|
||||
test-infra.sh \
|
||||
gc.sh \
|
||||
nix-collect-garbage-d.sh \
|
||||
remote-store.sh \
|
||||
legacy-ssh-store.sh \
|
||||
lang.sh \
|
||||
lang-gc.sh \
|
||||
characterisation-test-infra.sh \
|
||||
experimental-features.sh \
|
||||
fetchMercurial.sh \
|
||||
gc-auto.sh \
|
||||
user-envs.sh \
|
||||
user-envs-migration.sh \
|
||||
binary-cache.sh \
|
||||
multiple-outputs.sh \
|
||||
nix-build.sh \
|
||||
gc-concurrent.sh \
|
||||
repair.sh \
|
||||
fixed.sh \
|
||||
export-graph.sh \
|
||||
timeout.sh \
|
||||
fetchGitRefs.sh \
|
||||
gc-runtime.sh \
|
||||
tarball.sh \
|
||||
fetchGit.sh \
|
||||
fetchurl.sh \
|
||||
fetchPath.sh \
|
||||
fetchTree-file.sh \
|
||||
simple.sh \
|
||||
referrers.sh \
|
||||
optimise-store.sh \
|
||||
substitute-with-invalid-ca.sh \
|
||||
signing.sh \
|
||||
hash-convert.sh \
|
||||
hash-path.sh \
|
||||
gc-non-blocking.sh \
|
||||
check.sh \
|
||||
nix-shell.sh \
|
||||
check-refs.sh \
|
||||
build-remote-input-addressed.sh \
|
||||
secure-drv-outputs.sh \
|
||||
restricted.sh \
|
||||
fetchGitSubmodules.sh \
|
||||
fetchGitVerification.sh \
|
||||
readfile-context.sh \
|
||||
nix-channel.sh \
|
||||
recursive.sh \
|
||||
dependencies.sh \
|
||||
check-reqs.sh \
|
||||
build-remote-content-addressed-fixed.sh \
|
||||
build-remote-content-addressed-floating.sh \
|
||||
build-remote-trustless-should-pass-0.sh \
|
||||
build-remote-trustless-should-pass-1.sh \
|
||||
build-remote-trustless-should-pass-2.sh \
|
||||
build-remote-trustless-should-pass-3.sh \
|
||||
build-remote-trustless-should-fail-0.sh \
|
||||
build-remote-with-mounted-ssh-ng.sh \
|
||||
nar-access.sh \
|
||||
impure-eval.sh \
|
||||
pure-eval.sh \
|
||||
eval.sh \
|
||||
repl.sh \
|
||||
binary-cache-build-remote.sh \
|
||||
search.sh \
|
||||
logging.sh \
|
||||
export.sh \
|
||||
config.sh \
|
||||
add.sh \
|
||||
chroot-store.sh \
|
||||
filter-source.sh \
|
||||
misc.sh \
|
||||
dump-db.sh \
|
||||
linux-sandbox.sh \
|
||||
supplementary-groups.sh \
|
||||
build-dry.sh \
|
||||
structured-attrs.sh \
|
||||
shell.sh \
|
||||
brotli.sh \
|
||||
zstd.sh \
|
||||
compression-levels.sh \
|
||||
nix-copy-ssh.sh \
|
||||
nix-copy-ssh-ng.sh \
|
||||
post-hook.sh \
|
||||
function-trace.sh \
|
||||
fmt.sh \
|
||||
eval-store.sh \
|
||||
why-depends.sh \
|
||||
derivation-json.sh \
|
||||
derivation-advanced-attributes.sh \
|
||||
import-from-derivation.sh \
|
||||
nix_path.sh \
|
||||
nars.sh \
|
||||
placeholders.sh \
|
||||
ssh-relay.sh \
|
||||
build.sh \
|
||||
build-delete.sh \
|
||||
output-normalization.sh \
|
||||
selfref-gc.sh \
|
||||
db-migration.sh \
|
||||
bash-profile.sh \
|
||||
pass-as-file.sh \
|
||||
nix-profile.sh \
|
||||
suggestions.sh \
|
||||
store-info.sh \
|
||||
fetchClosure.sh \
|
||||
completions.sh \
|
||||
impure-derivations.sh \
|
||||
path-from-hash-part.sh \
|
||||
path-info.sh \
|
||||
toString-path.sh \
|
||||
read-only-store.sh \
|
||||
nested-sandboxing.sh \
|
||||
impure-env.sh \
|
||||
debugger.sh \
|
||||
extra-sandbox-profile.sh \
|
||||
|
||||
ifeq ($(HAVE_LIBCPUID), 1)
|
||||
nix_tests += compute-levels.sh
|
||||
endif
|
||||
|
||||
ifeq ($(ENABLE_BUILD), yes)
|
||||
nix_tests += test-libstoreconsumer.sh
|
||||
|
||||
ifeq ($(BUILD_SHARED_LIBS), 1)
|
||||
nix_tests += plugins.sh
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(ENABLE_DOC_GEN), yes)
|
||||
nix_tests += help.sh
|
||||
endif
|
||||
|
||||
$(d)/test-libstoreconsumer.sh.test $(d)/test-libstoreconsumer.sh.test-debug: \
|
||||
$(buildprefix)$(d)/test-libstoreconsumer/test-libstoreconsumer
|
||||
$(d)/plugins.sh.test $(d)/plugins.sh.test-debug: \
|
||||
$(buildprefix)$(d)/plugins/libplugintest.$(SO_EXT)
|
||||
|
||||
install-tests += $(foreach x, $(nix_tests), $(d)/$(x))
|
||||
|
||||
test-clean-files := \
|
||||
$(d)/common/subst-vars.sh \
|
||||
$(d)/config.nix
|
||||
|
||||
clean-files += $(test-clean-files)
|
||||
test-deps += $(test-clean-files)
|
|
@ -1,4 +1,4 @@
|
|||
project('nix-functional-tests', 'cpp',
|
||||
project('nix-functional-tests',
|
||||
version : files('.version'),
|
||||
default_options : [
|
||||
'cpp_std=c++2a',
|
||||
|
@ -17,7 +17,12 @@ fs = import('fs')
|
|||
nix = find_program('nix')
|
||||
bash = find_program('bash', native : true)
|
||||
busybox = find_program('busybox', native : true, required : false)
|
||||
coreutils = find_program('coreutils', native : true)
|
||||
if host_machine.system() == 'windows'
|
||||
# Because of the state of symlinks on Windows, coreutils.exe doesn't usually exist, but things like ls.exe will
|
||||
coreutils = find_program('ls', native : true)
|
||||
else
|
||||
coreutils = find_program('coreutils', native : true)
|
||||
endif
|
||||
dot = find_program('dot', native : true, required : false)
|
||||
|
||||
nix_bin_dir = fs.parent(nix.full_path())
|
||||
|
@ -170,6 +175,7 @@ suites = [
|
|||
|
||||
nix_store = dependency('nix-store', required : false)
|
||||
if nix_store.found()
|
||||
add_languages('cpp')
|
||||
subdir('test-libstoreconsumer')
|
||||
suites += {
|
||||
'name': 'libstoreconsumer',
|
||||
|
@ -187,6 +193,7 @@ endif
|
|||
# Plugin tests require shared libraries support.
|
||||
nix_expr = dependency('nix-expr', required : false)
|
||||
if nix_expr.found() and get_option('default_library') != 'static'
|
||||
add_languages('cpp')
|
||||
subdir('plugins')
|
||||
suites += {
|
||||
'name': 'plugins',
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
rec {
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
rec {
|
||||
a = mkDerivation {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
rec {
|
||||
|
||||
|
|
|
@ -167,6 +167,35 @@ EOF
|
|||
chmod a+x $TEST_ROOT/marco/polo/default.nix
|
||||
(cd $TEST_ROOT/marco && ./polo/default.nix | grepQuiet "Polo")
|
||||
|
||||
# https://github.com/NixOS/nix/issues/11892
|
||||
mkdir $TEST_ROOT/issue-11892
|
||||
cat >$TEST_ROOT/issue-11892/shebangscript <<EOF
|
||||
#!$(type -P env) nix-shell
|
||||
#! nix-shell -I nixpkgs=$shellDotNix
|
||||
#! nix-shell -p 'callPackage (import ./my_package.nix) {}'
|
||||
#! nix-shell -i bash
|
||||
set -euxo pipefail
|
||||
my_package
|
||||
EOF
|
||||
cat >$TEST_ROOT/issue-11892/my_package.nix <<EOF
|
||||
{ stdenv, shell, ... }:
|
||||
stdenv.mkDerivation {
|
||||
name = "my_package";
|
||||
buildCommand = ''
|
||||
mkdir -p \$out/bin
|
||||
( echo "#!\${shell}"
|
||||
echo "echo 'ok' 'baz11892'"
|
||||
) > \$out/bin/my_package
|
||||
cat \$out/bin/my_package
|
||||
chmod a+x \$out/bin/my_package
|
||||
'';
|
||||
}
|
||||
EOF
|
||||
chmod a+x $TEST_ROOT/issue-11892/shebangscript
|
||||
$TEST_ROOT/issue-11892/shebangscript \
|
||||
| tee /dev/stderr \
|
||||
| grepQuiet "ok baz11892"
|
||||
|
||||
|
||||
#####################
|
||||
# Flake equivalents #
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
{ lib
|
||||
, stdenv
|
||||
, mkMesonDerivation
|
||||
, releaseTools
|
||||
|
||||
, meson
|
||||
, ninja
|
||||
|
@ -16,14 +15,11 @@
|
|||
, nix-expr
|
||||
, nix-cli
|
||||
|
||||
, rapidcheck
|
||||
, gtest
|
||||
, runCommand
|
||||
|
||||
, busybox-sandbox-shell ? null
|
||||
|
||||
# Configuration Options
|
||||
|
||||
, pname ? "nix-functional-tests"
|
||||
, version
|
||||
|
||||
# For running the functional tests against a different pre-built Nix.
|
||||
|
@ -35,8 +31,7 @@ let
|
|||
in
|
||||
|
||||
mkMesonDerivation (finalAttrs: {
|
||||
pname = "nix-functional-tests";
|
||||
inherit version;
|
||||
inherit pname version;
|
||||
|
||||
workDir = ./.;
|
||||
fileset = fileset.unions [
|
||||
|
@ -60,6 +55,7 @@ mkMesonDerivation (finalAttrs: {
|
|||
# etc.
|
||||
busybox-sandbox-shell
|
||||
# For Overlay FS tests need `mount`, `umount`, and `unshare`.
|
||||
# For `script` command (ensuring a TTY)
|
||||
# TODO use `unixtools` to be precise over which executables instead?
|
||||
util-linux
|
||||
];
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{sleepTime ? 3}:
|
||||
|
||||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
let
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
mkDerivation {
|
||||
name = "filter";
|
||||
|
|
|
@ -1,11 +0,0 @@
|
|||
libraries += libplugintest
|
||||
|
||||
libplugintest_DIR := $(d)
|
||||
|
||||
libplugintest_SOURCES := $(d)/plugintest.cc
|
||||
|
||||
libplugintest_ALLOW_UNDEFINED := 1
|
||||
|
||||
libplugintest_EXCLUDE_FROM_LIBRARY_LIST := 1
|
||||
|
||||
libplugintest_CXXFLAGS := $(INCLUDE_libutil) $(INCLUDE_libstore) $(INCLUDE_libexpr) $(INCLUDE_libfetchers)
|
|
@ -1,4 +1,4 @@
|
|||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
let
|
||||
|
||||
|
|
|
@ -12,10 +12,6 @@ mkdir -p "$TEST_ROOT/nix"
|
|||
cp ./simple.nix "$TEST_ROOT/nix"
|
||||
cp ./simple.builder.sh "$TEST_ROOT/nix"
|
||||
cp "${config_nix}" "$TEST_ROOT/nix"
|
||||
simple_nix="$TEST_ROOT/nix/simple.nix"
|
||||
# N.B. redefine
|
||||
config_nix="$TEST_ROOT/nix/config.nix"
|
||||
removeBuildDirRef "${simple_nix}"
|
||||
cd "$TEST_ROOT/nix"
|
||||
|
||||
nix-instantiate --restrict-eval ./simple.nix -I src=.
|
||||
|
@ -27,7 +23,7 @@ nix-instantiate --restrict-eval ./simple.nix -I src1=./simple.nix -I src2=./conf
|
|||
(! nix-instantiate --restrict-eval --eval -E 'builtins.readFile ./simple.nix')
|
||||
nix-instantiate --restrict-eval --eval -E 'builtins.readFile ./simple.nix' -I src=../..
|
||||
|
||||
expectStderr 1 nix-instantiate --restrict-eval --eval -E 'let __nixPath = [ { prefix = "foo"; path = ./.; } ]; in builtins.readFile <foo/simple.nix>' | grepQuiet "forbidden in restricted mode"
|
||||
expectStderr 1 nix-instantiate --restrict-eval --eval -E 'let __nixPath = [ { prefix = "foo"; path = ./.; } ]; in builtins.readFile <foo/simple.nix>' | grepQuiet "was not found in the Nix search path"
|
||||
nix-instantiate --restrict-eval --eval -E 'let __nixPath = [ { prefix = "foo"; path = ./.; } ]; in builtins.readFile <foo/simple.nix>' -I src=.
|
||||
|
||||
p=$(nix eval --raw --expr "builtins.fetchurl file://${_NIX_TEST_SOURCE_DIR}/restricted.sh" --impure --restrict-eval --allowed-uris "file://${_NIX_TEST_SOURCE_DIR}")
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
{
|
||||
hello = mkDerivation rec {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
{
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
rec {
|
||||
hello = mkDerivation {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{ inNixShell ? false, contentAddressed ? false, fooContents ? "foo" }:
|
||||
|
||||
let cfg = import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix"; in
|
||||
let cfg = import ./config.nix; in
|
||||
with cfg;
|
||||
|
||||
let
|
||||
|
@ -37,7 +37,7 @@ let pkgs = rec {
|
|||
mkdir -p $out
|
||||
ln -s ${setupSh} $out/setup
|
||||
'';
|
||||
};
|
||||
} // { inherit mkDerivation; };
|
||||
|
||||
shellDrv = mkDerivation {
|
||||
name = "shellDrv";
|
||||
|
@ -94,5 +94,9 @@ let pkgs = rec {
|
|||
chmod a+rx $out/bin/ruby
|
||||
'';
|
||||
|
||||
inherit (cfg) shell;
|
||||
|
||||
callPackage = f: args: f (pkgs // args);
|
||||
|
||||
inherit pkgs;
|
||||
}; in pkgs
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
mkDerivation {
|
||||
name = "simple-failing";
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
mkDerivation {
|
||||
name = "simple";
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
let
|
||||
dep = mkDerivation {
|
||||
name = "dep";
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
let
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
let
|
||||
foo_in_store = builtins.toFile "foo" "foo";
|
||||
|
|
|
@ -1,15 +0,0 @@
|
|||
programs += test-libstoreconsumer
|
||||
|
||||
test-libstoreconsumer_DIR := $(d)
|
||||
|
||||
# do not install
|
||||
test-libstoreconsumer_INSTALL_DIR :=
|
||||
|
||||
test-libstoreconsumer_SOURCES := \
|
||||
$(wildcard $(d)/*.cc) \
|
||||
|
||||
test-libstoreconsumer_CXXFLAGS += $(INCLUDE_libutil) $(INCLUDE_libstore)
|
||||
|
||||
test-libstoreconsumer_LIBS = libstore libutil
|
||||
|
||||
test-libstoreconsumer_LDFLAGS = $(THREAD_LDFLAGS) $(SODIUM_LIBS) $(EDITLINE_LIBS) $(BOOST_LDFLAGS) $(LOWDOWN_LIBS)
|
|
@ -1,4 +1,4 @@
|
|||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
{
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
{ foo ? "foo"
|
||||
}:
|
||||
|
||||
with import "${builtins.getEnv "_NIX_TEST_BUILD_DIR"}/config.nix";
|
||||
with import ./config.nix;
|
||||
|
||||
assert foo == "foo";
|
||||
|
||||
|
|
|
@ -21,7 +21,8 @@ let
|
|||
defaults = {
|
||||
nixpkgs.pkgs = nixpkgsFor.${system}.native;
|
||||
nix.checkAllErrors = false;
|
||||
nix.package = noTests nixpkgsFor.${system}.native.nix;
|
||||
# TODO: decide which packaging stage to use. `nix-cli` is efficient, but not the same as the user-facing `everything.nix` package (`default`). Perhaps a good compromise is `everything.nix` + `noTests` defined above?
|
||||
nix.package = nixpkgsFor.${system}.native.nixComponents.nix-cli;
|
||||
};
|
||||
_module.args.nixpkgs = nixpkgs;
|
||||
_module.args.system = system;
|
||||
|
@ -33,10 +34,9 @@ let
|
|||
forNix = nixVersion: runNixOSTestFor system {
|
||||
imports = [test];
|
||||
defaults.nixpkgs.overlays = [(curr: prev: {
|
||||
# NOTE: noTests pkg might not have been built yet for some older versions of the package
|
||||
# and in versions before 2.25, the untested build wasn't shared with the tested build yet
|
||||
# Add noTests here when those versions become irrelevant.
|
||||
nix = (builtins.getFlake "nix/${nixVersion}").packages.${system}.nix;
|
||||
nix = let
|
||||
packages = (builtins.getFlake "nix/${nixVersion}").packages.${system};
|
||||
in packages.nix-cli or packages.nix;
|
||||
})];
|
||||
};
|
||||
};
|
||||
|
@ -124,6 +124,8 @@ in
|
|||
|
||||
nix-copy = runNixOSTestFor "x86_64-linux" ./nix-copy.nix;
|
||||
|
||||
nix-docker = runNixOSTestFor "x86_64-linux" ./nix-docker.nix;
|
||||
|
||||
nssPreload = runNixOSTestFor "x86_64-linux" ./nss-preload.nix;
|
||||
|
||||
githubFlakes = runNixOSTestFor "x86_64-linux" ./github-flakes.nix;
|
||||
|
|
|
@ -24,47 +24,42 @@ in
|
|||
environment.systemPackages = let
|
||||
run-test-suite = pkgs.writeShellApplication {
|
||||
name = "run-test-suite";
|
||||
runtimeInputs = [ pkgs.gnumake pkgs.jq pkgs.git ];
|
||||
runtimeInputs = [
|
||||
pkgs.meson
|
||||
pkgs.ninja
|
||||
pkgs.jq
|
||||
pkgs.git
|
||||
|
||||
# Want to avoid `/run/current-system/sw/bin/bash` because we
|
||||
# want a store path. Likewise for coreutils.
|
||||
pkgs.bash
|
||||
pkgs.coreutils
|
||||
];
|
||||
text = ''
|
||||
set -x
|
||||
|
||||
cat /proc/sys/fs/file-max
|
||||
ulimit -Hn
|
||||
ulimit -Sn
|
||||
|
||||
cd ~
|
||||
cp -r ${pkgs.nix.overrideAttrs (o: {
|
||||
name = "nix-configured-source";
|
||||
outputs = [ "out" ];
|
||||
separateDebugInfo = false;
|
||||
disallowedReferences = [ ];
|
||||
buildPhase = ":";
|
||||
checkPhase = ":";
|
||||
installPhase = ''
|
||||
cp -r . $out
|
||||
'';
|
||||
installCheckPhase = ":";
|
||||
fixupPhase = ":";
|
||||
doInstallCheck = true;
|
||||
})} nix
|
||||
|
||||
cp -r ${pkgs.nixComponents.nix-functional-tests.src} nix
|
||||
chmod -R +w nix
|
||||
cd nix
|
||||
|
||||
# Tests we don't need
|
||||
echo >tests/functional/plugins/local.mk
|
||||
sed -i tests/functional/local.mk \
|
||||
-e 's!nix_tests += plugins\.sh!!' \
|
||||
-e 's!nix_tests += test-libstoreconsumer\.sh!!' \
|
||||
;
|
||||
|
||||
_NIX_TEST_SOURCE_DIR="$(realpath tests/functional)"
|
||||
export _NIX_TEST_SOURCE_DIR
|
||||
export _NIX_TEST_BUILD_DIR="''${_NIX_TEST_SOURCE_DIR}"
|
||||
chmod u+w nix/.version
|
||||
echo ${pkgs.nixComponents.version} > nix/.version
|
||||
|
||||
export isTestOnNixOS=1
|
||||
export version=${config.nix.package.version}
|
||||
|
||||
export NIX_REMOTE_=daemon
|
||||
export NIX_REMOTE=daemon
|
||||
|
||||
export NIX_STORE=${builtins.storeDir}
|
||||
make -j1 installcheck --keep-going
|
||||
|
||||
meson setup nix/tests/functional build
|
||||
cd build
|
||||
meson test -j1 --print-errorlogs
|
||||
'';
|
||||
};
|
||||
in [
|
||||
|
|
|
@ -37,7 +37,8 @@ in {
|
|||
{ config, pkgs, ... }:
|
||||
{ services.openssh.enable = true;
|
||||
services.openssh.settings.PermitRootLogin = "yes";
|
||||
users.users.root.password = "foobar";
|
||||
users.users.root.hashedPasswordFile = null;
|
||||
users.users.root.password = "foobar";
|
||||
virtualisation.writableStore = true;
|
||||
virtualisation.additionalPaths = [ pkgB pkgC ];
|
||||
};
|
||||
|
@ -64,7 +65,7 @@ in {
|
|||
# Copy the closure of package A from the client to the server using password authentication,
|
||||
# and check that all prompts are visible
|
||||
server.fail("nix-store --check-validity ${pkgA}")
|
||||
client.send_chars("nix copy --to ssh://server ${pkgA} >&2; echo done\n")
|
||||
client.send_chars("nix copy --to ssh://server ${pkgA} >&2; echo -n do; echo ne\n")
|
||||
client.wait_for_text("continue connecting")
|
||||
client.send_chars("yes\n")
|
||||
client.wait_for_text("Password:")
|
||||
|
|
47
tests/nixos/nix-docker-test.sh
Normal file
47
tests/nixos/nix-docker-test.sh
Normal file
|
@ -0,0 +1,47 @@
|
|||
#!/usr/bin/env bash
|
||||
# docker.nix test script. Runs inside a built docker.nix container.
|
||||
|
||||
set -eEuo pipefail
|
||||
|
||||
export NIX_CONFIG='substituters = http://cache:5000?trusted=1'
|
||||
|
||||
cd /tmp
|
||||
|
||||
# Test getting a fetched derivation
|
||||
test "$("$(nix-build -E '(import <nixpkgs> {}).hello')"/bin/hello)" = "Hello, world!"
|
||||
|
||||
# Test building a simple derivation
|
||||
# shellcheck disable=SC2016
|
||||
nix-build -E '
|
||||
let
|
||||
pkgs = import <nixpkgs> {};
|
||||
in
|
||||
builtins.derivation {
|
||||
name = "test";
|
||||
system = builtins.currentSystem;
|
||||
builder = "${pkgs.bash}/bin/bash";
|
||||
args = ["-c" "echo OK > $out"];
|
||||
}'
|
||||
test "$(cat result)" = OK
|
||||
|
||||
# Ensure #!/bin/sh shebang works
|
||||
echo '#!/bin/sh' > ./shebang-test
|
||||
echo 'echo OK' >> ./shebang-test
|
||||
chmod +x ./shebang-test
|
||||
test "$(./shebang-test)" = OK
|
||||
|
||||
# Ensure #!/usr/bin/env shebang works
|
||||
echo '#!/usr/bin/env bash' > ./shebang-test
|
||||
echo 'echo OK' >> ./shebang-test
|
||||
chmod +x ./shebang-test
|
||||
test "$(./shebang-test)" = OK
|
||||
|
||||
# Test nix-shell
|
||||
{
|
||||
echo '#!/usr/bin/env nix-shell'
|
||||
echo '#! nix-shell -i bash'
|
||||
echo '#! nix-shell -p hello'
|
||||
echo 'hello'
|
||||
} > ./nix-shell-test
|
||||
chmod +x ./nix-shell-test
|
||||
test "$(./nix-shell-test)" = "Hello, world!"
|
53
tests/nixos/nix-docker.nix
Normal file
53
tests/nixos/nix-docker.nix
Normal file
|
@ -0,0 +1,53 @@
|
|||
# Test the container built by ../../docker.nix.
|
||||
|
||||
{ lib, config, nixpkgs, hostPkgs, ... }:
|
||||
|
||||
let
|
||||
pkgs = config.nodes.machine.nixpkgs.pkgs;
|
||||
|
||||
nixImage = import ../../docker.nix {
|
||||
inherit (config.nodes.machine.nixpkgs) pkgs;
|
||||
};
|
||||
nixUserImage = import ../../docker.nix {
|
||||
inherit (config.nodes.machine.nixpkgs) pkgs;
|
||||
name = "nix-user";
|
||||
uid = 1000;
|
||||
gid = 1000;
|
||||
uname = "user";
|
||||
gname = "user";
|
||||
};
|
||||
|
||||
containerTestScript = ./nix-docker-test.sh;
|
||||
|
||||
in {
|
||||
name = "nix-docker";
|
||||
|
||||
nodes =
|
||||
{ machine =
|
||||
{ config, lib, pkgs, ... }:
|
||||
{ virtualisation.diskSize = 4096;
|
||||
};
|
||||
cache =
|
||||
{ config, lib, pkgs, ... }:
|
||||
{ virtualisation.additionalPaths = [ pkgs.stdenv pkgs.hello ];
|
||||
services.harmonia.enable = true;
|
||||
networking.firewall.allowedTCPPorts = [ 5000 ];
|
||||
};
|
||||
};
|
||||
|
||||
testScript = { nodes }: ''
|
||||
cache.wait_for_unit("harmonia.service")
|
||||
|
||||
machine.succeed("mkdir -p /etc/containers")
|
||||
machine.succeed("""echo '{"default":[{"type":"insecureAcceptAnything"}]}' > /etc/containers/policy.json""")
|
||||
|
||||
machine.succeed("${pkgs.podman}/bin/podman load -i ${nixImage}")
|
||||
machine.succeed("${pkgs.podman}/bin/podman run --rm nix nix --version")
|
||||
machine.succeed("${pkgs.podman}/bin/podman run --rm -i nix < ${containerTestScript}")
|
||||
|
||||
machine.succeed("${pkgs.podman}/bin/podman load -i ${nixUserImage}")
|
||||
machine.succeed("${pkgs.podman}/bin/podman run --rm nix-user nix --version")
|
||||
machine.succeed("${pkgs.podman}/bin/podman run --rm -i nix-user < ${containerTestScript}")
|
||||
machine.succeed("[[ $(${pkgs.podman}/bin/podman run --rm nix-user stat -c %u /nix/store) = 1000 ]]")
|
||||
'';
|
||||
}
|
|
@ -34,6 +34,8 @@ let
|
|||
}
|
||||
'';
|
||||
|
||||
supportsBadShell = lib.versionAtLeast config.nodes.client.nix.package.version "2.25pre";
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
|
@ -82,7 +84,7 @@ in
|
|||
nix.settings.substituters = lib.mkForce [ ];
|
||||
programs.ssh.extraConfig = "ConnectTimeout 30";
|
||||
environment.systemPackages = [
|
||||
# `bad-shell` is used to make sure Nix works an environment with a misbehaving shell.
|
||||
# `bad-shell` is used to make sure Nix works in an environment with a misbehaving shell.
|
||||
#
|
||||
# More realistically, a bad shell would still run the command ("echo started")
|
||||
# but considering that our solution is to avoid this shell (set via $SHELL), we
|
||||
|
@ -125,13 +127,15 @@ in
|
|||
'echo hello world on $(hostname)' >&2
|
||||
""")
|
||||
|
||||
${lib.optionalString supportsBadShell ''
|
||||
# Check that SSH uses SHELL for LocalCommand, as expected, and check that
|
||||
# our test setup here is working. The next test will use this bad SHELL.
|
||||
client.succeed(f"SHELL=$(which bad-shell) ssh -oLocalCommand='true' -oPermitLocalCommand=yes {builder1.name} 'echo hello world' | grep -F 'Hello, I am a broken shell'")
|
||||
''}
|
||||
|
||||
# Perform a build and check that it was performed on the builder.
|
||||
out = client.succeed(
|
||||
"SHELL=$(which bad-shell) nix-build ${expr nodes.client 1} 2> build-output",
|
||||
"${lib.optionalString supportsBadShell "SHELL=$(which bad-shell)"} nix-build ${expr nodes.client 1} 2> build-output",
|
||||
"grep -q Hello build-output"
|
||||
)
|
||||
builder1.succeed(f"test -e {out}")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue