Files
lix/tests/functional/meson.build
T
62ee2aea29 libexpr: rectify filtering logic for filter builtins under chroot stores
Under chroot or diverted store setups, the filtering logic of
`builtins.filterSource` and `builtins.path` (which shares the same filtering
logic as `filterSource`) would incorrectly pass physical paths to the
filter function instead of logical store paths.

This caused actual breakage in nixpkgs when the `lib.fileset` library was
introduced. Due to this unresolved bug in Nix, the library was forbidden
from use: <https://github.com/NixOS/nixpkgs/pull/369694>.

To the best of our knowledge, this bug has existed since CppNix 2.3.

The existing tests were strengthened to cover these cases, but
additional testing may be required, particularly regarding symlink
handling.

References: https://github.com/NixOS/nix/pull/12512 (CppNix fix to the
problem using "union" abstractions).

Co-authored-by: Raito Bezarius <raito@lix.systems>
Co-authored-by: Alois Wohlschlager <alois1@gmx-topmail.de>
Co-authored-by: eldritch horrors <pennae@lix.systems>
Signed-off-by: Raito Bezarius <raito@lix.systems>
Change-Id: Iaf6ca8c506eeca145393ce100c64db12178daa62
2025-02-27 00:26:48 +01:00

258 lines
6.4 KiB
Meson

ls = find_program('ls', native : true)
test_confdata = {
'bindir': bindir,
'ls': fs.parent(ls.full_path()),
'lsof': lsof.full_path(),
'dot': dot.found() ? dot.full_path() : '',
'bash': bash.full_path(),
'sandbox_shell': busybox.found() ? busybox.full_path() : '',
'PACKAGE_VERSION': meson.project_version(),
'system': host_system,
'python': python.full_path(),
'runinpty': runinpty.full_path(),
}
# Just configures `common/vars-and-functions.sh.in`.
# Done as a subdir() so Meson places it under `common` in the build directory as well.
subdir('common')
config_nix_in = configure_file(
input : 'config.nix.in',
output : 'config.nix',
configuration : test_confdata,
)
# Just configures `ca/config.nix.in`. Done as a subdir() for the same reason as above.
subdir('ca')
# Just configures `dyn-drv/config.nix.in`. Same as above.
subdir('dyn-drv')
# Just configures `nix-shell/config.nix.in`. Same as above.
subdir('nix-shell')
subdir('plugins')
subdir('test-libstoreconsumer')
functional_tests_scripts = [
'init.sh',
'test-infra.sh',
'ca/build.sh',
'ca/build-cache.sh',
'ca/concurrent-builds.sh',
'ca/derivation-json.sh',
'ca/duplicate-realisation-in-closure.sh',
'ca/eval-store.sh',
'ca/gc.sh',
'ca/import-derivation.sh',
'ca/new-build-cmd.sh',
'ca/nix-copy.sh',
'ca/nix-run.sh',
'ca/nix-shell.sh',
'ca/post-hook.sh',
'ca/recursive.sh',
'ca/repl.sh',
'ca/selfref-gc.sh',
'ca/signatures.sh',
'ca/substitute.sh',
'ca/why-depends.sh',
'dyn-drv/text-hashed-output.sh',
'dyn-drv/recursive-mod-json.sh',
'dyn-drv/build-built-drv.sh',
'dyn-drv/eval-outputOf.sh',
'dyn-drv/dep-built-drv.sh',
'dyn-drv/old-daemon-error-hack.sh',
'flakes/flakes.sh',
'flakes/develop.sh',
'flakes/develop-r8854.sh',
'flakes/run.sh',
'flakes/mercurial.sh',
'flakes/circular.sh',
'flakes/init.sh',
'flakes/inputs.sh',
'flakes/follow-paths.sh',
'flakes/bundle.sh',
'flakes/check.sh',
'flakes/unlocked-override.sh',
'flakes/absolute-paths.sh',
'flakes/build-paths.sh',
'flakes/flake-in-submodule.sh',
'flakes/flake-metadata.sh',
'flakes/flake-registry.sh',
'flakes/subdir-flake.sh',
'gc.sh',
'nix-collect-garbage-d.sh',
'nix-collect-garbage-dry-run.sh',
'remote-store.sh',
'legacy-ssh-store.sh',
'lang.sh',
'lang-test-infra.sh',
'experimental-features.sh',
'fetchMercurial.sh',
'gc-auto.sh',
'user-envs.sh',
'user-envs-migration.sh',
'binary-cache.sh',
'binary-cache-regression-fj647.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',
'fetchers.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.sh',
'gc-non-blocking.sh',
'check.sh',
'nix-shell/basic.sh',
'nix-shell/structured-attrs.sh',
'nix-shell/regression-533.sh',
'check-refs.sh',
'build-remote-input-addressed.sh',
'secure-drv-outputs.sh',
'restricted.sh',
'fetchGitSubmodules.sh',
'flakes/search-root.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-jobless.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',
'local-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',
'pre-hook.sh',
'post-hook.sh',
'function-trace.sh',
'flakes/config.sh',
'fmt.sh',
'eval-store.sh',
'why-depends.sh',
'derivation-json.sh',
'import-derivation.sh',
'nix_path.sh',
'case-hack.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-ping.sh',
'fetchClosure.sh',
'completions.sh',
'flakes/show.sh',
'impure-derivations.sh',
'path-from-hash-part.sh',
'toString-path.sh',
'read-only-store.sh',
'nested-sandboxing.sh',
'debugger.sh',
'test-libstoreconsumer.sh',
'extra-sandbox-profile.sh',
'substitute-truncated-nar.sh',
'regression-484.sh',
'regression-reference-checks.sh',
'external-commands.sh',
'redirected-filter-source.sh',
]
# Plugin tests require shared libraries support.
if get_option('default_library') != 'static'
functional_tests_scripts += ['plugins.sh']
endif
# TODO(Qyriad): this will hopefully be able to be removed when we remove the autoconf+Make
# buildsystem. See the comments at the top of setup-functional-tests.py for why this is here.
meson.add_install_script(
python,
meson.project_source_root() / 'meson/setup-functional-tests.py',
)
foreach script : functional_tests_scripts
# Turns, e.g., `tests/functional/flakes/show.sh` into a Meson test target called
# `functional-flakes-show`.
name = 'functional-@0@'.format(fs.replace_suffix(script, '')).replace('/', '-')
extra_deps = []
if script == 'plugins.sh'
extra_deps += [
# Set in tests/functional/plugins/meson.build
libplugintest,
libplugintestfail,
]
elif script == 'test-libstoreconsumer.sh'
extra_deps += [
# Set in tests/functional/test-libstoreconsumer/meson.build
libstoreconsumer_tester,
]
endif
test(
name,
python,
args: [
meson.project_source_root() / 'meson/run-test.py',
script,
],
suite : 'installcheck',
env : {
'MESON_BUILD_ROOT': meson.project_build_root(),
},
# some tests take 15+ seconds even on an otherwise idle machine, on a loaded machine
# this can easily drive them to failure. give them more time, 5min rather than 30sec
timeout : 300,
# Used for target dependency/ordering tracking, not adding compiler flags or anything.
depends : extra_deps,
)
endforeach
subdir('repl_characterization')