From bd59cbdfc96c82694af92e014cfb1a316a262f66 Mon Sep 17 00:00:00 2001 From: Qyriad Date: Wed, 3 Apr 2024 17:38:09 -0600 Subject: [PATCH] meson: add missing tests: ca, dyn-drv, plugins, libstoreconsumer Change-Id: I6a74ebaf93697cb99aadd6b51538c2766b0a808a --- tests/functional/meson.build | 47 +++++++++++++++++++ tests/functional/plugins.sh | 11 ++++- tests/functional/plugins/meson.build | 30 ++++++++++++ .../test-libstoreconsumer/meson.build | 13 +++++ 4 files changed, 99 insertions(+), 2 deletions(-) create mode 100644 tests/functional/plugins/meson.build create mode 100644 tests/functional/test-libstoreconsumer/meson.build diff --git a/tests/functional/meson.build b/tests/functional/meson.build index 0ea0e4df5..d90230624 100644 --- a/tests/functional/meson.build +++ b/tests/functional/meson.build @@ -25,9 +25,37 @@ subdir('ca') # Just configures `dyn-drv/config.nix.in`. Same as above. subdir('dyn-drv') +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', @@ -152,6 +180,8 @@ functional_tests_scripts = [ 'read-only-store.sh', 'nested-sandboxing.sh', 'debugger.sh', + 'plugins.sh', + 'test-libstoreconsumer.sh', ] # TODO(Qyriad): this will hopefully be able to be removed when we remove the autoconf+Make @@ -165,6 +195,21 @@ 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, @@ -179,5 +224,7 @@ foreach script : functional_tests_scripts # 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 diff --git a/tests/functional/plugins.sh b/tests/functional/plugins.sh index 491b933b7..6df10147b 100644 --- a/tests/functional/plugins.sh +++ b/tests/functional/plugins.sh @@ -4,12 +4,19 @@ if [[ $BUILD_SHARED_LIBS != 1 ]]; then skipTest "Plugins are not supported" fi -res=$(nix --option setting-set true --option plugin-files $PWD/plugins/libplugintest.* eval --expr builtins.anotherNull) +# FIXME(Qyriad): this is working around Meson putting `libplugintest.so.p` in the same place +# as `libplugintest.so`, so `libplugintest.*` grabs both. +libext=so +if [[ "$(uname -s)" == "Darwin" ]]; then + libext=dylib +fi + +res=$(nix --option setting-set true --option plugin-files "$PWD/plugins/libplugintest.$libext" eval --expr builtins.anotherNull) [ "$res"x = "nullx" ] # Plugin load failing due to missing symbols -res=$(nix --option plugin-files $PWD/plugins/libplugintestfail.* eval --expr '1234 + 5' 2>&1) +res=$(nix --option plugin-files "$PWD/plugins/libplugintestfail.$libext" eval --expr '1234 + 5' 2>&1) # We expect this to succeed evaluating echo "$res" | grep 1239 >/dev/null # On Linux, we expect this to print some failure of dlopen. diff --git a/tests/functional/plugins/meson.build b/tests/functional/plugins/meson.build new file mode 100644 index 000000000..ba941b103 --- /dev/null +++ b/tests/functional/plugins/meson.build @@ -0,0 +1,30 @@ +libplugintest = library( + 'plugintest', + 'plugintest.cc', + dependencies : [ + liblixutil, + liblixstore, + liblixexpr, + liblixfetchers, + ], + build_by_default : false, +) + +libplugintestfail_link_args = [] +if is_linux + libplugintestfail_link_args = ['-z', 'now'] +endif + +libplugintestfail = shared_module( + 'plugintestfail', + 'plugintestfail.cc', + dependencies : [ + liblixutil, + liblixstore, + liblixexpr, + liblixfetchers, + ], + cpp_args : ['-DMISSING_REFERENCE'], + link_args : libplugintestfail_link_args, + build_by_default : false, +) diff --git a/tests/functional/test-libstoreconsumer/meson.build b/tests/functional/test-libstoreconsumer/meson.build new file mode 100644 index 000000000..ad96aac12 --- /dev/null +++ b/tests/functional/test-libstoreconsumer/meson.build @@ -0,0 +1,13 @@ +libstoreconsumer_tester = executable( + 'test-libstoreconsumer', + 'main.cc', + dependencies : [ + liblixutil, + liblixstore, + sodium, + editline, + boost, + lowdown, + ], + build_by_default : false, +)