On Mon, Mar 09, 2026 at 11:55:58AM +0000, Peter Maydell wrote:
> The functional test documentation suggests running a single test
> with the build/run script. But if you do this where do the logfiles go?

They should always go in the build directory

> As you can see from this transcript, they don't seem to get written
> into the place that a "make check-functional" run puts them:
> 
> $ ls -l 
> build/san/tests/functional/arm/test_emcraft_sf2.EmcraftSf2Machine.test_arm_emcraft_sf2/
> total 16
> -rw-r--r-- 1 pm215 pm215 3084 Mar  9 10:51 base.log
> -rw-r--r-- 1 pm215 pm215  825 Mar  9 10:51 console.log
> -rw-r--r-- 1 pm215 pm215  235 Mar  9 10:54 default.log
> drwxr-xr-x 3 pm215 pm215 4096 Mar  9 10:51 scratch
> $ date
> Mon Mar  9 11:20:13 GMT 2026
> $ time QEMU_TEST_QEMU_BINARY=./build/san/qemu-system-arm
> ./build/san/run tests/functional/arm/test_emcraft_sf2.py
> TAP version 13
> ok 1 test_emcraft_sf2.EmcraftSf2Machine.test_arm_emcraft_sf2
> 1..1
> 
> real    3m24.394s
> user    3m21.314s
> sys     0m3.100s
> $ ls -l 
> build/san/tests/functional/arm/test_emcraft_sf2.EmcraftSf2Machine.test_arm_emcraft_sf2/
> total 16
> -rw-r--r-- 1 pm215 pm215 3084 Mar  9 10:51 base.log
> -rw-r--r-- 1 pm215 pm215  825 Mar  9 10:51 console.log
> -rw-r--r-- 1 pm215 pm215  235 Mar  9 10:54 default.log
> drwxr-xr-x 3 pm215 pm215 4096 Mar  9 10:51 scratch

That seems different from the behaviour I get


$ ls -al 
build/tests/functional/arm/test_emcraft_sf2.EmcraftSf2Machine.test_arm_emcraft_sf2/
total 28
drwxr-xr-x. 2 berrange berrange 4096 Mar  9 12:31 .
drwxr-xr-x. 3 berrange berrange 4096 Mar  9 12:30 ..
-rw-r--r--. 1 berrange berrange 6449 Mar  9 12:31 base.log
-rw-r--r--. 1 berrange berrange 8200 Mar  9 12:31 console.log
-rw-r--r--. 1 berrange berrange    0 Mar  9 12:30 default.log

$ time QEMU_TEST_QEMU_BINARY=qemu-system-arm ./build/run 
tests/functional/arm/test_emcraft_sf2.py
TAP version 13
ok 1 test_emcraft_sf2.EmcraftSf2Machine.test_arm_emcraft_sf2
1..1

real    0m10.731s
user    0m10.597s
sys     0m0.130s
$ ls -al 
build/tests/functional/arm/test_emcraft_sf2.EmcraftSf2Machine.test_arm_emcraft_sf2/
total 28
drwxr-xr-x. 2 berrange berrange 4096 Mar  9 12:32 .
drwxr-xr-x. 3 berrange berrange 4096 Mar  9 12:30 ..
-rw-r--r--. 1 berrange berrange 7253 Mar  9 12:32 base.log
-rw-r--r--. 1 berrange berrange 8200 Mar  9 12:32 console.log
-rw-r--r--. 1 berrange berrange    0 Mar  9 12:32 default.log


but in my case I'm just using ./build, where as you are using
./build/san, and I think that's tripping us up


def _build_dir():
    root = os.getenv('QEMU_BUILD_ROOT')
    if root is not None:
        return Path(root)
    # Makefile.mtest only exists in build dir, so if it is available, use CWD
    if os.path.exists('Makefile.mtest'):
        return Path(os.getcwd())

    root = os.path.join(_source_dir(), 'build')
    if os.path.exists(root):
        return Path(root)

    raise Exception("Cannot identify build dir, set QEMU_BUILD_ROOT")


The $CWD is the directory from which you are invoking the scripts,
so that Makefile.mtest check won't pass.

The _source_dir() / 'build'  test will pass, but that's not your
actual build dir, so that's not really correct.

The QEMU_BUILD_ROOT env was a special hack to allow overrides, but
we never set that by default.

These days, we do, however, set MESON_BUILD_ROOT in the meson devenv,
so the 'run' script should see that.

IOW, we should fix the _build_dir() method to look at MESON_BUILD_ROOT
instead of QEMU_BUILD_ROOT.

Meanwhile your logs are likely in build/tests/functional/... instead
of build/san/tests/functional.

With regards,
Daniel
-- 
|: https://berrange.com       ~~        https://hachyderm.io/@berrange :|
|: https://libvirt.org          ~~          https://entangle-photo.org :|
|: https://pixelfed.art/berrange   ~~    https://fstop138.berrange.com :|


Reply via email to