aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/mtest.py
AgeCommit message (Collapse)AuthorFilesLines
2022-09-04mtest: Run ninja build.ninja before loading testsAndres Freund1-0/+10
When the build definition has changed since the last ninja invocation meson test operated on an outdated list of tests and their dependencies. That could lead to some tests not being run / not all dependencies being built. This was particularly confusing because the user would see the output of reconfiguration and rebuilding, and the next mtest invocation would have the updated configuration. One issue with this is that that we will now output more useless ninja output when nothing needs to be done (the "Entering directory" part is not repeated, as we happen to be in the build directory already). It likely is worth removing that output, perhaps by testing if anything needs to be done with ninja -n, but that seems better addressed separately. Fixes: #9852
2022-09-04mtest: pull detection of ninja into TestHarnessAndres Freund1-10/+24
A later commit will add a second invocation of ninja, no point in having the detection code twice. This changes the exit code in case ninja isn't found from 125 to 127, which seems more appropriate given the justification for returning 125 (to make git bisect run skip that commit). If we can't find ninja we'll not succeed in other commits either.
2022-09-04mtest: Move loading of test data into its own functionAndres Freund1-10/+13
A subsequent commit will do a bit more during test data loading, making a dedicated function seem advisable. The diff looks a bit odd, using git show --diff-algorithm=patience will make it clearer.
2022-08-12mesonbuild/mtest.py: filter more invalid googletest JUnit4 attributesDimitri John Ledkov1-0/+4
googletest 1.12.1 generates new JUnit4 invalid attributes file and line. Maybe all gtest "invalid" attributes are actually valid JUnit5 attributes, and maybe schema should be upgraded to JUni5. Signed-off-by: Dimitri John Ledkov <dimitri.ledkov@canonical.com>
2022-08-07mtest: unify parsed and non-parsed output handlingHemmo Nieminen1-25/+13
Use the same routines to handle output both when parsing the output and when not. Also fixes broken stderr handling for parsed tests.
2022-08-01Inline try_wait_one using asyncio.wait_forElliott Sales de Andrade1-8/+7
Although the former accepts multiple awaitables, it is only ever called with a single one, so just use `wait_for` instead. Additionally, the `try_wait_one` fails in Python 3.11, as `Process.wait()` returns a coroutine, and `asyncio.wait` only accepts tasks, so it errors out.
2022-06-17Improve WINEPATH reductionXavier Claessens1-1/+2
- Remove duplicated code in mdevenv.py - Change the limit to 1024 instead of 2048 which is what has been tested. - Skip shortening if it is already short enough. - Skip shortening with wine >= 6.4 which does not seems to have that limitation any more. - Downgrade exception to warning in the case WINEPATH cannot be shortened under 1024 chars, it is possible that it will still work.
2022-06-09mtest: do not process zero byte reads in read_decode()Hemmo Nieminen1-4/+5
AsyncIO.StreamReader.readuntil() occasionally raises IncompleteRead exception before a byte of data has been read. Do not process the "read" data in those cases.
2022-06-09mtest: enable access to the console logger instanceHemmo Nieminen1-3/+7
Store a reference to the console logger instance in a test harness' member variable to allow accessing it (and its logging utilities) from any other functions in test harness. This added functionality will be used in future commits.
2022-06-09mtest: store all test results directly to TestRunHemmo Nieminen1-60/+57
Store return code, test result and additional error directly to the relevant TestRun instance. This reduces the number of individual arguments to other relevant functions that need to be passed around and thus simplifies the code. The test output (and error) were earlier similarly moved to be stored directly to the TestRun instance for the same reason.
2022-06-09mtest: store test output directly to a TestRun objectHemmo Nieminen1-33/+48
By storing test output directly to the TestRun instance we avoid the need to pass the outputs around in individual function arguments thus simplifying the code. The amount of individual arguments will be further reduced in a future commit.
2022-06-09mtest: print only one empty line before test summaryHemmo Nieminen1-1/+0
2022-06-09mtest: improve text test log formattingHemmo Nieminen1-13/+17
Write additional metadata such as exit details and try to visually differentiate the tests better from each other in the (textual) test logs.
2022-06-09mtest: differentiate stdout and stderr in test log text filesHemmo Nieminen1-2/+7
Make --no-stdsplit option affect test log text files as well. This means that if the option --no-stdsplit is used only "output" is seen not only on the console but in the test log text file as well.
2022-06-09mtest: print "live" test output when verbose with only 1 testHemmo Nieminen1-0/+2
Since running only one test sort of implies --num-processes=1 the "live" output of the test should be printed out when --verbose option has been given and running only a single test.
2022-06-09mtest: remove unused arguments from read_decode_lines()Hemmo Nieminen1-7/+5
The only time the argument would matter (console_mode == ConsoleUser.STDOUT) never happens as the only time the function is ever called is when parsing of the output is needed which in turns implies that console_mode != ConsoleUser.STDOUT.
2022-06-09mtest: introduce get_test_num_prefix() helper functionHemmo Nieminen1-5/+6
2022-06-09mtest: split TestRun's get_details() to multiple functionsHemmo Nieminen1-5/+11
These new functions will be used individually in later commits.
2022-06-09mtest: make ConsoleLogger's detail property a functionHemmo Nieminen1-8/+7
As fetching the returned data is non-trivial (we e.g. iterate over all subtest results) it is best not to hide that fact from the caller of the property / function.
2022-06-09mtest: show "timed out" messages with --print-errorlogs optionHemmo Nieminen1-1/+2
2022-06-09mtest: fix a couple of minor whitespace / typing issuesHemmo Nieminen1-5/+9
2022-05-24mtest: ignore invalid inputPaolo Bonzini1-5/+0
TAP version 14 introduced subtests, that are supposedly backward compatible because "TAP13 specifies that non-TAP output should be ignored". Meson reported TAP syntax errors based on behavior of "prove" at the time, but it seems that now "prove" has become a lot more lenient; it even accepts the following completely bogus input just fine: --- ok 1 ok 2 x 1..1 --- So do the same and make Meson's parser accept invalid TAP input silently. Fixes: #10032
2022-05-17mtest: stop disrespecting the gdb config fileEli Schwartz1-1/+1
This was added in commit 01be50fdd90851f17de5499537f10b5b62c9fb49 with zero explanation as a side effect of moving code around. It seems like a really bad idea and it causes people to view debugging Meson projects on e.g. debuginfod systems as "painful".
2022-03-14mtest: fix logic bug that broke tests where the cmd is a Windows found programEli Schwartz1-3/+3
In this case, the test fname might have an implicit extension and cannot be found by `os.path.isfile()`. We cannot use `shutil.which()` to handle platform differences, because not all test fnames are executable -- for example Java jars. The test representation does have an "is built" attribute which in theory should work here, because all built targets definitely have their full filename known to Meson, but it turns out to be misnamed. Rename it correctly and add an actual "is built" attribute to check. Tests which aren't built by Meson can be assumed to exist without consulting their existence on the filesystem. Fixes #10027
2022-02-27Merge pull request #10004 from bonzini/mtest-tap-stderrJussi Pakkanen1-8/+9
mtest: print stderr of TAP/Rust tests in verbose/non-parallel mode
2022-02-20mtest: refactor common condition into a property of TestRunPaolo Bonzini1-6/+8
For a test to be displayed to stdout without buffering, it has to be 1) in verbose mode 2) not executed in parallel with others 3) not parsed, i.e. not TAP or Rust. Include these three conditions in a new property of stdout and use it in the three places where it matters: when printing the initial and final delimiters of the output, and when deciding the console mode to use. Suggested-by: Jussi Pakkanen <jpakkane@gmail.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2022-02-20mtest: raise informative error message when test program doesn't existEli Schwartz1-2/+5
If --no-rebuild is used, the test program might not exist, spawning a FileNotFoundError inside a long traceback rooted in subprocess.Popen trying to run that test program. Current versions of Meson even say it's an "unhandled python exception". But we can do one better and actually tell the user what is wrong, why, and what to do to fix it. And we can do so before getting waist deep in partially running tests. Fixes #10006
2022-02-20mtest: print stderr of TAP/Rust tests in verbose/non-parallel modePaolo Bonzini1-3/+2
Verbose, non-parallel tests generally print their output as they run, rather than after they finish. This however is not the case if stdout of the test is parsed as is the case for TAP and Rust tests. In this case, the output during the run is the list of the subtests, but stderr still has to be printed after the test finishes.
2022-02-01mtest: support for forcibly verbose logging of some testsPaolo Bonzini1-12/+14
Store in TestSerialisation whether a particular test must always be logged verbosely. This is particularly useful for long-running tests or when a single Meson test() is wrapping an external test harness. In this case, TAP can be used by the external harness and Meson will log each subtest as it runs. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2021-12-11Activate VS env when running `meson test`William Toohey1-1/+4
2021-12-05rename exe_runner to exe_wrapper everywhereEli Schwartz1-6/+6
I don't understand the purpose of this confusing API naming split.
2021-11-16mtest: add an ASCII-only version of the spinnerPaolo Bonzini1-4/+7
While the horizontal line and the other pictograms in mtest have an ASCII-only version, the spinner does not. This causes mtest to fail with a UnicodeEncodeError exception on non-Unicode locales. Fixes: #9538 Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2021-10-28mtest: accept very long linesPaolo Bonzini1-1/+8
Unless parsing TAP output, there is no strict requirement for "meson test" to process test output one line at a time; it simply looks nicer to not print a partial line if it can be avoided. However, in the case of extremely long lines StreamReader.readline can fail with a ValueError. Use readuntil('\n') instead and just process whatever pieces of the line it returns. Fixes: #8591 Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2021-10-27fix various flake8 whitespace errorsEli Schwartz1-2/+2
2021-10-18mtest: limit "magic" CTRL+C behavior to process group leadersPaolo Bonzini1-1/+4
If meson is not a process group leader, a SIGINT will be delivered also to its parent process (and possibly other processes). The parent process then will probably exit and mtest will continue running in the background, without any way to interrupt the run completely. To fix this, treat SIGINT and SIGTERM the same way unless mtest is a process group leader. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2021-10-04fix incorrect porting from % formatting to .format methodEli Schwartz1-1/+1
(var,) is the correct way to pass values to a percent formatted string, but not to .format so we would end up printing something like: unexpected input at line (4,) Upgrade to an f-string and insert the correct value correctly.
2021-10-04various python neatness cleanupsEli Schwartz1-3/+3
All changes were created by running "pyupgrade --py3-only" and committing the results. Although this has been performed in the past, newer versions of pyupgrade can automatically catch more opportunities, notably list comprehensions can use generators instead, in the following cases: - unpacking into function arguments as function(*generator) - unpacking into assignments of the form x, y = generator - as the argument to some builtin functions such as min/max/sorted Also catch a few creeping cases of new code added using older styles.
2021-09-29Revert "mtest: fix test output issues (in console)"Paolo Bonzini1-209/+201
This reverts commit 5fcb0e6525e2044e0f82bda488a51350e0f7f29f. The commit is a massive change that should have been split in separate pieces, and it also removes a few features: * in verbose mode, subtests are not printed as they happen * in non-verbose mode the progress report does not include the number of subtests that have been run * in non-parallel mode, output is batched rather than printed as it happens Furthermore, none of these changes are not documented in the release notes. Revert so that each proposal can be tested, evaluated and documented individually.
2021-09-25mtest: fix test output issues (in console)Hemmo Nieminen1-201/+209
This change set aims to fix various "issues" seen with the current implementation. The changes can be summarized with the following list: * Replace emojis and spinners with multiline status displaying the name and running time of each currently running test. * The test output (especially in verbose mode or when multiple failing tests' output gets printed out) can get confusing. Try to make the output easier to read and grasp. Most notable change here is the addition of the test number to the beginning of each printed line. * Print exit details (i.e. exit code) of the test in verbose mode. * Try to make the verbose "live" output from tests to match the look and feel of otherwise produced (verbose) test output.
2021-09-20mtest: Allow gtest protocol test to fail more gracefullyDylan Baker1-1/+8
Currently, if the test fails to produce XML (or valid XML) then the test fails with a backtrace. It's actually pretty easy to get into this situation, a total failure of the test will result in no XML being written (this can happen, for example, if rpaths to gtest are not correctly set up). If we can't read the test, go ahead and complete using `TestRunExitCode.complete()`, which will fail for the bad exit code.
2021-07-07cleanup self.options.wdPaolo Bonzini1-4/+2
It is never None and always an absolute path
2021-07-07resolve symlinks passed to -CPaolo Bonzini1-2/+3
"meson setup" is resolving symlinks for the build directory in validate_core_dirs. For consistency with it, do the same when the build directory is passed via -C to devenv, dist, init, install and test. This ensures for example that the path to test dependencies is computed correctly in "meson test". Fixes: #8765
2021-06-29fix: Always explicitly set encoding for text files (fixes #8263)Daniel Mensinger1-1/+1
2021-03-23mtest: timeout if the write side of pipes does not closePaolo Bonzini1-11/+39
If a test program forks a child, the pipes might remain open and "await stdo_task"/"await stde_task" will never complete in SingleTestRunner._run_cmd(). Instead, catch them in TestSubprocess.wait() so that the whole process group is killed. Fixes: #8533 Reported-by: Bastien Nocera <hadess@hadess.net>
2021-03-23mtest: remove pointless try/except from try_wait_onePaolo Bonzini1-5/+3
asyncio.wait does not return an asyncio.TimeoutError, so there is no exception to catch.
2021-03-19split program related classes and functions out of dependenciesDylan Baker1-1/+1
Dependencies is already a large and complicated package without adding programs to the list. This also allows us to untangle a bit of spaghetti that we have.
2021-03-04mass rewrite of string formatting to use f-strings everywhereEli Schwartz1-28/+28
performed by running "pyupgrade --py36-plus" and committing the results
2021-03-04various python neatness cleanupsEli Schwartz1-6/+6
All changes were created by running "pyupgrade --py3-only --keep-percent-format" and committing the results. I have not touched string formatting for now. - use set literals - simplify .format() parameter naming - remove __future__ - remove default "r" mode for open() - use OSError rather than compatibility aliases - remove stray parentheses in function(generator) scopes
2021-03-02mtest: create separate runners for multiple repeatsPaolo Bonzini1-18/+21
Reusing the runners for multiple repeats of the test run gets in the way of the progress report, which stores runners in an OrderedSet. Instead, create a separate SingleTestRunner object for each repeat. While at it, fix the "duplicate suite" assertion as it can fire with TAP tests and --repeat=N. Fixes: #8405
2021-02-19[TAP] Fix TAP parser when test exits with statusLuke Drummond1-0/+1
Some time between 0.56 and 0.57 the TAP parser broke when a test exits with a nonzero status. The TAP protocol does not specify this behaviour - giving latitude to implementers, and meson's previous behaviour was to report the exit status gracefully. This patch restores the old behaviour and adds a regression test