diff --git a/src/libstore-tests/derivation-parser-bench.cc b/src/libstore-tests/derivation-parser-bench.cc index 1709eed1c..f0aa721cb 100644 --- a/src/libstore-tests/derivation-parser-bench.cc +++ b/src/libstore-tests/derivation-parser-bench.cc @@ -2,7 +2,7 @@ #include "nix/store/derivations.hh" #include "nix/store/store-api.hh" #include "nix/util/experimental-features.hh" -#include "nix/util/environment-variables.hh" +#include "nix/util/tests/test-data.hh" #include "nix/store/store-open.hh" #include #include @@ -50,11 +50,7 @@ static void BM_UnparseRealDerivationFile(benchmark::State & state, const std::st } // Register benchmarks for actual test derivation files if they exist -BENCHMARK_CAPTURE( - BM_ParseRealDerivationFile, hello, getEnvNonEmpty("_NIX_TEST_UNIT_DATA").value() + "/derivation/hello.drv"); -BENCHMARK_CAPTURE( - BM_ParseRealDerivationFile, firefox, getEnvNonEmpty("_NIX_TEST_UNIT_DATA").value() + "/derivation/firefox.drv"); -BENCHMARK_CAPTURE( - BM_UnparseRealDerivationFile, hello, getEnvNonEmpty("_NIX_TEST_UNIT_DATA").value() + "/derivation/hello.drv"); -BENCHMARK_CAPTURE( - BM_UnparseRealDerivationFile, firefox, getEnvNonEmpty("_NIX_TEST_UNIT_DATA").value() + "/derivation/firefox.drv"); +BENCHMARK_CAPTURE(BM_ParseRealDerivationFile, hello, (getUnitTestData() / "derivation/hello.drv").string()); +BENCHMARK_CAPTURE(BM_ParseRealDerivationFile, firefox, (getUnitTestData() / "derivation/firefox.drv").string()); +BENCHMARK_CAPTURE(BM_UnparseRealDerivationFile, hello, (getUnitTestData() / "derivation/hello.drv").string()); +BENCHMARK_CAPTURE(BM_UnparseRealDerivationFile, firefox, (getUnitTestData() / "derivation/firefox.drv").string()); diff --git a/src/libstore-tests/nix_api_store.cc b/src/libstore-tests/nix_api_store.cc index ea600f905..e67e5ffef 100644 --- a/src/libstore-tests/nix_api_store.cc +++ b/src/libstore-tests/nix_api_store.cc @@ -8,6 +8,7 @@ #include "nix/store/tests/nix_api_store.hh" #include "nix/store/globals.hh" #include "nix/util/tests/string_callback.hh" +#include "nix/util/tests/test-data.hh" #include "nix/util/url.hh" #include "store-tests-config.hh" @@ -302,7 +303,7 @@ public: store = open_local_store(); - std::filesystem::path unitTestData{getenv("_NIX_TEST_UNIT_DATA")}; + std::filesystem::path unitTestData = nix::getUnitTestData(); std::ifstream t{unitTestData / "derivation/ca/self-contained.json"}; std::stringstream buffer; buffer << t.rdbuf(); @@ -357,7 +358,7 @@ TEST_F(nix_api_store_test_base, build_from_json) auto * store = open_local_store(); - std::filesystem::path unitTestData{getenv("_NIX_TEST_UNIT_DATA")}; + std::filesystem::path unitTestData = nix::getUnitTestData(); std::ifstream t{unitTestData / "derivation/ca/self-contained.json"}; std::stringstream buffer; @@ -404,7 +405,7 @@ TEST_F(nix_api_store_test_base, nix_store_realise_invalid_system) auto * store = open_local_store(); - std::filesystem::path unitTestData{getenv("_NIX_TEST_UNIT_DATA")}; + std::filesystem::path unitTestData = nix::getUnitTestData(); std::ifstream t{unitTestData / "derivation/ca/self-contained.json"}; std::stringstream buffer; buffer << t.rdbuf(); @@ -449,7 +450,7 @@ TEST_F(nix_api_store_test_base, nix_store_realise_builder_fails) auto * store = open_local_store(); - std::filesystem::path unitTestData{getenv("_NIX_TEST_UNIT_DATA")}; + std::filesystem::path unitTestData = nix::getUnitTestData(); std::ifstream t{unitTestData / "derivation/ca/self-contained.json"}; std::stringstream buffer; buffer << t.rdbuf(); @@ -494,7 +495,7 @@ TEST_F(nix_api_store_test_base, nix_store_realise_builder_no_output) auto * store = open_local_store(); - std::filesystem::path unitTestData{getenv("_NIX_TEST_UNIT_DATA")}; + std::filesystem::path unitTestData = nix::getUnitTestData(); std::ifstream t{unitTestData / "derivation/ca/self-contained.json"}; std::stringstream buffer; buffer << t.rdbuf(); @@ -870,7 +871,7 @@ TEST_F(NixApiStoreTestWithRealisedPath, nix_store_get_fs_closure_error_propagati */ static std::string load_json_from_test_data(const char * filename) { - std::filesystem::path unitTestData{getenv("_NIX_TEST_UNIT_DATA")}; + std::filesystem::path unitTestData = nix::getUnitTestData(); std::ifstream t{unitTestData / filename}; std::stringstream buffer; buffer << t.rdbuf(); diff --git a/src/libutil-test-support/include/nix/util/tests/characterization.hh b/src/libutil-test-support/include/nix/util/tests/characterization.hh index 67ad8fb51..52321828f 100644 --- a/src/libutil-test-support/include/nix/util/tests/characterization.hh +++ b/src/libutil-test-support/include/nix/util/tests/characterization.hh @@ -4,24 +4,11 @@ #include #include "nix/util/types.hh" -#include "nix/util/environment-variables.hh" #include "nix/util/file-system.hh" +#include "nix/util/tests/test-data.hh" namespace nix { -/** - * The path to the unit test data directory. See the contributing guide - * in the manual for further details. - */ -static inline std::filesystem::path getUnitTestData() -{ - auto data = getEnv("_NIX_TEST_UNIT_DATA"); - if (!data) - throw Error( - "_NIX_TEST_UNIT_DATA environment variable is not set. Recommendation: use meson, example: 'meson test -C build --gdb'"); - return std::filesystem::path(*data); -} - /** * Whether we should update "golden masters" instead of running tests * against them. See the contributing guide in the manual for further diff --git a/src/libutil-test-support/include/nix/util/tests/meson.build b/src/libutil-test-support/include/nix/util/tests/meson.build index 3be085892..9f09183f3 100644 --- a/src/libutil-test-support/include/nix/util/tests/meson.build +++ b/src/libutil-test-support/include/nix/util/tests/meson.build @@ -10,4 +10,5 @@ headers = files( 'json-characterization.hh', 'nix_api_util.hh', 'string_callback.hh', + 'test-data.hh', ) diff --git a/src/libutil-test-support/include/nix/util/tests/test-data.hh b/src/libutil-test-support/include/nix/util/tests/test-data.hh new file mode 100644 index 000000000..6b965b848 --- /dev/null +++ b/src/libutil-test-support/include/nix/util/tests/test-data.hh @@ -0,0 +1,24 @@ +#pragma once +///@file + +#include +#include "nix/util/environment-variables.hh" +#include "nix/util/error.hh" + +namespace nix { + +/** + * The path to the unit test data directory. See the contributing guide + * in the manual for further details. + */ +static inline std::filesystem::path getUnitTestData() +{ + auto data = getEnv("_NIX_TEST_UNIT_DATA"); + if (!data) + throw Error( + "_NIX_TEST_UNIT_DATA environment variable is not set. " + "Recommendation: use meson, example: 'meson test -C build --gdb'"); + return std::filesystem::path(*data); +} + +} // namespace nix