On Mon, Oct 4, 2021 at 6:13 PM Daniel Latypov <dlatypov@xxxxxxxxxx> wrote: > > Currently, `run_kernel()` dumps all the kernel output to a file > (.kunit/test.log) and then opens the file and yields it to callers. > This made it easier to respect the requested timeout, if any. > > But it means that we can't yield the results in real time, either to the > parser or to stdout (if --raw_output is set). > > This change spins up a background thread to enforce the timeout, which > allows us to yield the kernel output in real time, while also copying it > to the .kunit/test.log file. > It's also careful to ensure that the .kunit/test.log file is complete, > even in the kunit_parser throws an exception/otherwise doesn't consume > every line, see the new `finally` block and unit test. > > For example: > > $ ./tools/testing/kunit/kunit.py run --arch=x86_64 --raw_output > <configure + build steps> > ... > <can now see output from QEMU in real time> > > This does not currently have a visible effect when --raw_output is not > passed, as kunit_parser.py currently only outputs everything at the end. > But that could change, and this patch is a necessary step towards > showing parsed test results in real time. > > Signed-off-by: Daniel Latypov <dlatypov@xxxxxxxxxx> Awesome! Thanks for finally fixing this! Reviewed-by: Brendan Higgins <brendanhiggins@xxxxxxxxxx>