diff options
author | Daan De Meyer <daan.j.demeyer@gmail.com> | 2024-05-03 10:05:24 +0200 |
---|---|---|
committer | Eli Schwartz <eschwartz93@gmail.com> | 2024-05-08 08:05:44 -0400 |
commit | bcaab91bf61327bb7c2a0259292c2a336ad6513a (patch) | |
tree | d36800aee4f941a14d85d3b419709e9d4f29448f | |
parent | 14de8ac5a9e04490a67e3ddcbd44b31915aed1b9 (diff) | |
download | meson-bcaab91bf61327bb7c2a0259292c2a336ad6513a.zip meson-bcaab91bf61327bb7c2a0259292c2a336ad6513a.tar.gz meson-bcaab91bf61327bb7c2a0259292c2a336ad6513a.tar.bz2 |
mtest: Set MESON_TEST_ITERATION to the current iteration of the test
When running our integration tests in systemd we depend on each test
having a unique name. This is always the case unless --repeat is used,
in which case multiple tests with the same name run concurrently which
causes issues when allocating resources that use the test name as the
identifier.
Let's set MESON_TEST_ITERATION to the current iteration of the test so
we can use $TEST_NAME-$TEST_ITERATION as our test identifiers which will
avoid these issues.
-rw-r--r-- | docs/markdown/Unit-tests.md | 3 | ||||
-rw-r--r-- | docs/markdown/snippets/test_iteration.md | 5 | ||||
-rw-r--r-- | mesonbuild/mtest.py | 5 |
3 files changed, 11 insertions, 2 deletions
diff --git a/docs/markdown/Unit-tests.md b/docs/markdown/Unit-tests.md index 73e58dc..6fda0f5 100644 --- a/docs/markdown/Unit-tests.md +++ b/docs/markdown/Unit-tests.md @@ -208,6 +208,9 @@ Sometimes you need to run the tests multiple times, which is done like this: $ meson test --repeat=10 ``` +Meson will set the `MESON_TEST_ITERATION` environment variable to the +current iteration of the test *(added 1.5.0)*. + Invoking tests via a helper executable such as Valgrind can be done with the `--wrap` argument diff --git a/docs/markdown/snippets/test_iteration.md b/docs/markdown/snippets/test_iteration.md new file mode 100644 index 0000000..67daf27 --- /dev/null +++ b/docs/markdown/snippets/test_iteration.md @@ -0,0 +1,5 @@ +## meson test now sets the `MESON_TEST_ITERATION` environment variable + +`meson test` will now set the `MESON_TEST_ITERATION` environment variable to the +current iteration of the test. This will always be `1` unless `--repeat` is used +to run the same test multiple times. diff --git a/mesonbuild/mtest.py b/mesonbuild/mtest.py index 460a44c..03d2eb2 100644 --- a/mesonbuild/mtest.py +++ b/mesonbuild/mtest.py @@ -1709,7 +1709,7 @@ class TestHarness: sys.exit('Conflict: both test setup and command line specify an exe wrapper.') return current.env.get_env(os.environ.copy()) - def get_test_runner(self, test: TestSerialisation) -> SingleTestRunner: + def get_test_runner(self, test: TestSerialisation, iteration: int) -> SingleTestRunner: name = self.get_pretty_suite(test) options = deepcopy(self.options) if self.options.setup: @@ -1721,6 +1721,7 @@ class TestHarness: if (test.is_cross_built and test.needs_exe_wrapper and test.exe_wrapper and test.exe_wrapper.found()): env['MESON_EXE_WRAPPER'] = join_args(test.exe_wrapper.get_command()) + env['MESON_TEST_ITERATION'] = str(iteration + 1) return SingleTestRunner(test, env, name, options) def process_test_result(self, result: TestRun) -> None: @@ -1822,7 +1823,7 @@ class TestHarness: os.chdir(self.options.wd) runners: T.List[SingleTestRunner] = [] for i in range(self.options.repeat): - runners.extend(self.get_test_runner(test) for test in tests) + runners.extend(self.get_test_runner(test, i) for test in tests) if i == 0: self.duration_max_len = max(len(str(int(runner.timeout or 99))) for runner in runners) |