Commit Graph

737 Commits

Author SHA1 Message Date
Julien Olivain 7a6edbc7b9 support/testing/infra/emulator.py: add host load info in run log
Runtime tests running on test runners are subject to a high
variability in term of performance and timing. Most or the runtime
test commands are executed with a timeout, in pexpect.

Slow or very loaded test runners can use the timeout_multiplier to
globally increase those timeouts.

Some runtime test commands sometimes needs to poll or query a state,
rather than having purely sequential actions. It is sometimes hard to
know, from the test writer point of view, the maximum timeout to set, or
if a retry logic is needed.

In order to help debugging runtime tests failing due very slow
execution, this commit adds extra information on the host test runner
about its load in the run log. Relevant information are: number of
cpus, the load average at the moment the emulator is started and the
current timeout_multiplier.

Note: this change was discussed in:
https://lists.buildroot.org/pipermail/buildroot/2024-July/759119.html

Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2024-07-28 21:51:01 +02:00
J. Neuschäfer 7801890c3a support/testing: add testing for eltest in execline test
The previous commit removes s6-test from the runtime tests. This
commit adds the same test for eltest, which replaced s6-test.

Signed-off-by: J. Neuschäfer <j.neuschaefer@gmx.net>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2024-07-27 16:23:41 +02:00
J. Neuschäfer 6b70913703 support/testing: fix s6-portable-utils test
s6-test was removed in s6-portable-utils 2.3.0.0, and replaced with
eltest (from execline). This change broke the existing runtime tests
with commit 42fad03182 ("packages: bump skalibs-related packages").

Instead of s6-test simply use the shell built-in "test", which provides
sufficient functionality.

Fixes:

  https://gitlab.com/buildroot.org/buildroot/-/jobs/7338388010

Signed-off-by: J. Neuschäfer <j.neuschaefer@gmx.net>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2024-07-27 16:20:25 +02:00
Julien Olivain 49156a0fa4 support/testing: package: gpsd: fix gpsfake command line
The gpsfake command line has a typo (a missing space), which makes the
next gpsctl command to always fail.

This commit fixes the issue by adding the missing space.

Fixes:
https://gitlab.com/buildroot.org/buildroot/-/jobs/7391792948

Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2024-07-23 10:50:08 +02:00
Julien Olivain b09ae4f045 support/testing: add 4th runtime test
Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2024-07-22 22:20:58 +02:00
Brandon Maier 95e1043013 support/testing/infra/emulator.py: support init=/bin/sh
The TestInitSystemNone bypasses the normal init and instead launches
directly into a shell. So it needs to bypass the login code and go
directly to a shell.

Signed-off-by: Brandon Maier <brandon.maier@collins.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2024-07-22 21:51:00 +02:00
Brandon Maier 5ed1fab018 support/testing: fix TestInitSystemNone for non-login shell
This test started failing at commit
0cad947b96
"support/testing/infra/emulator.py: fix qemu prompt detection" with the
error message

  AttributeError: 'NoneType' object has no attribute 'run_command'

This is because we changed emulator.run() so that emulator.login() must
be called first. But this test skips the login and goes directly to a
shell. Use the new emulator.connect_shell() function which prepares the
shell without logging in.

Signed-off-by: Brandon Maier <brandon.maier@collins.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2024-07-22 21:49:40 +02:00
Julien Olivain 91738f5093 support/testing: add iproute2 runtime test
Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2024-07-22 14:28:29 +02:00
Julien Olivain 5510d2890f support/testing: add nmap runtime test
Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
2024-07-22 09:41:09 +02:00
Julien Olivain 9c8f6dc5e4 support/testing: add gpsd runtime testing
Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2024-07-20 23:21:56 +02:00
Julien Olivain f04a95f79f support/testing: add mawk runtime test
Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2024-07-20 23:11:48 +02:00
Brandon Maier 9b843284d2 support/testing: fix package/test_s6_networking.py
This test fails with the following error

  -sh: s6-tcpserver4: not found

In release 2.6.0.0 of s6-networking the `s6-tcpserver4` was unified into
a new `s6-tcpserver` command[1].

[1] https://github.com/skarnet/s6-networking/blob/master/NEWS#L33

Signed-off-by: Brandon Maier <brandon.maier@collins.com>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
2024-07-15 16:49:52 +02:00
Marcus Hoffmann 2fe638af26 support/testing: add python-asn1crypto runtime test
Signed-off-by: Marcus Hoffmann <buildroot@bubu1.eu>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2024-07-15 13:04:12 +02:00
Julien Olivain 009f9106d9 support/testing: fs: new btrfs runtime test
Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
2024-07-15 11:22:10 +02:00
Julien Olivain 9d0bb0e67b support/testing: new dmidecode runtime test
Note: this test was not working in Buildroot test infrastructure
before commit [1] was merged, because dmidecode has the string "# "
in its output.

[1] https://gitlab.com/buildroot.org/buildroot/-/commit/0cad947b964be5612a182413da136fcf0dc5a1f2

Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
2024-07-15 11:22:09 +02:00
Marcus Hoffmann d429d5d399 support/testing: add python-msgpack runtime test
Signed-off-by: Marcus Hoffmann <buildroot@bubu1.eu>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
2024-07-15 00:12:51 +02:00
Julien Olivain 2da40a2fd7 support/testing: add attr runtime test
Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
2024-07-15 00:12:47 +02:00
Julien Olivain 14b3ca20c9 support/testing: new btrfs-progs runtime test
Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2024-07-14 17:36:11 +02:00
Arnout Vandecappelle 51a58ff062 support/testing/infra/emulator.py: add license header
Since we copied a piece from code from pexpect, we need to also follow
the license of pexpect. Effectively, that makes the file licensed under
both our default GPL-2.0 and pexpect's ISC license. This is already
hinted at in the comment inside _repl_sh_child, but let's make it
explicit by adding a license header to the file.

Ideally, of course, each file in Buildroot would have a license file.

This was done with the reuse tool:
    reuse annotate -l GPL-2.0 -l ISC support/testing/infra/emulator.py

Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
2024-07-14 13:19:32 +02:00
Brandon Maier 0cad947b96 support/testing/infra/emulator.py: fix qemu prompt detection
The qemu.run() method can break when a command happens to output the
string "# " to stdout. This is because qemu.run() detects when a command
has completed by searching for the shell prompt, which by default is
"# ". It then captures everything before the "# " as the commands
output, causing the rest of output to be lost.

Instead use the pexpect libraries REPLWrapper to handle running
commands. It has hooks to set a custom prompt and avoid some other
pitfalls of wrapping a shell.

We unfortunately can't reuse replwrap._repl_sh directly, because it
tries to spawn a command while we already have a qemu started. So we
need to copy that code into _repl_sh_child. While we're at it, also
define our own prompt strings.

Signed-off-by: Brandon Maier <brandon.maier@collins.com>
[Arnout:
 - Make all arguments to _repl_sh_spawn non-optional.
 - Move non_printable_insert to a local variable instead of an argument,
   we don't need to override it.
 - Copy the comment from _repl_sh that explains why non_printable_insert
   is needed.
 - Add a comment about timeouts.
 - Rename spawn to child (we don't actually spawn anything so this felt
   more natural, even though the class
 - Use single quotes instead of triple quotes, and explicitly escape the
   nested quotes.
]
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
2024-07-14 13:19:31 +02:00
James Hilliard 9b9333c929 package/python-pymupdf: bump to version 1.23.22
The python-pymupdf and mupdf packages do not follow the exact same
version numbers anymore. There is no specific mention of version
compatibilities in the upstream package, so update our comment to just
say that both should be "compatible" (to try to avoid one being
updated without the other).

The hardcoded paths we used to remove from setup.py are no longer
present, so the post-patch hook is removed.  The new setup.py instead
uses new environment variables which we now provide.

This new python-pymupdf version fails at runtime when mupdf builds
static libraries.

Note also that python-pymupdf is gradually switching to a new
implementation that requires mupdf to be built with python
bindings. For now, both implementations are still available but we
only compile the old one. The runtime test is adapted accordingly as
the legacy implementation has to be imported with "fitz_old".

While at it, the dependencies are also split to one per line to make
them easier to diff in the future.

Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
[Raphaël:
 - fix cross-compilation
 - remove unneeded dependencies
 - update to 1.23.22
 - update the commit message
]
Signed-off-by: Raphaël Mélotte <raphael.melotte@mind.be>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2024-07-13 21:55:26 +02:00
Raphaël Mélotte 115e9493b8 support/testing: add new test for python-pymupdf
To give us a chance to catch runtime issues (such as missing
dependencies) more easily, add a test that writes a sample PDF file,
read it back and verify the text that was read.

Like similar packages that lead to a big
rootfs (e.g. python-botocore), this test requires a separate ext2
rootfs to avoid filling the default amount of RAM available
entirely (which would cause missing files from the root filesystem and
in turn, test failures).

Signed-off-by: Raphaël Mélotte <raphael.melotte@mind.be>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2024-07-13 21:54:42 +02:00
Julien Olivain 1fb08cdc85 support/testing: new xfsprogs runtime test
Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
2024-07-13 19:13:53 +02:00
Julien Olivain 4516c6c5d0 support/testing: add bcc runtime test
Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2024-07-12 16:40:23 +02:00
Julien Olivain 3ba6f800fd support/testing: add mosquitto runtime test
Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2024-07-12 16:38:31 +02:00
Marcus Hoffmann f538c7e6bd package/python-ruamel-yaml-clib: new package
Add optional c extension for python-ruamel-yaml which can speed up yaml
loading/parsing.

Extend the ruamel-yaml runtime test to check if the c extension works
correctly.

Signed-off-by: Marcus Hoffmann <buildroot@bubu1.eu>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2024-07-12 15:17:27 +02:00
Marcus Hoffmann 21da0df09d support/testing: add new python-ruamel-yaml runtime test
Signed-off-by: Marcus Hoffmann <buildroot@bubu1.eu>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2024-07-12 15:04:45 +02:00
Julien Olivain 48790b4329 support/testing: add kmod runtime test
Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2024-07-10 23:58:21 +02:00
Yann E. MORIN 083de00fdf package/python-paho-mqtt: bump version to 2.1.0
Version 2.1.0 is a major bump, with an API change that should be
backward compatible with version up to 1.6.1.

The runtime test failed in timeout because the crng init did not have
time to complete in the default 5-second timeout; tests showed that the
trip-off would be between 6s and 7s here, so increase it enough to leave
some margin on less-capable machines.

Signed-off-by: Yann E. MORIN <yann.morin@orange.com>
Cc: Asaf Kahlon <asafka7@gmail.com>
Cc: Davide Viti <zinosat@gmail.com>
Cc: James Hilliard <james.hilliard1@gmail.com>
Cc: Yegor Yefremov <yegorslists@googlemail.com>
Reviewed-by: Marcus Hoffmann <buildroot@bubu1.eu>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2024-07-10 10:49:05 +02:00
Brandon Maier 6b625b42aa support/testing: add atftp test
Signed-off-by: Brandon Maier <brandon.maier@collins.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2024-07-09 22:15:24 +02:00
Julien Olivain 3ebc7c69d5 support/testing: new rt-tests runtime test
Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Romain Naour <romain.naour@smile.fr>
2024-07-03 23:50:24 +02:00
Julien Olivain c986928aff support/testing: add ntp runtime test
Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
2024-06-19 22:19:14 +02:00
Peter Korsgaard 876d24578c Merge branch 'next' 2024-06-13 11:16:07 +02:00
Brandon Maier 4dafb8b5c2 support/testing/infra/builder.py: fix missing $HOME during build
When running a test that uses host-python-setuptools using the Buildroot
Docker image, for example running the following command,

> ./utils/docker-run ./support/testing/run-tests -o output -s -k tests.package.test_python_pytest.TestPythonPy3Pytest

The build fails with the following error,

>   File "/home/blmaier/buildroot/output/TestPythonPy3Pytest/build/host-python-setuptools-69.2.0/setuptools/_distutils/dist.py", line 354, in _gen_paths
>     yield pathlib.Path('~').expanduser() / filename
>           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   File "/home/blmaier/buildroot/output/TestPythonPy3Pytest/host/lib/python3.11/pathlib.py", line 1385, in expanduser
>     raise RuntimeError("Could not determine home directory.")
> RuntimeError: Could not determine home directory.
>
> ERROR Backend subprocess exited when trying to invoke get_requires_for_build_wheel

Python setuptools is looking for $HOME but failing to find it.

Signed-off-by: Brandon Maier <brandon.maier@collins.com>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
2024-06-06 20:57:22 +02:00
Peter Korsgaard ed9288505c support/testing: sample_python_pybind.py: use python3 shebang
No functional change as we install a python symlink, but use python3 for
consistency with the other scripts.

Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
2024-06-05 22:34:41 +02:00
Brandon Maier 5806419b91 support/testing: add mtd test
Signed-off-by: Brandon Maier <brandon.maier@collins.com>
[yann.morin.1998@free.fr:
  - don't set an empty BR2_ENABLE_LOCALE_WHITELIST
]
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
2024-06-01 21:35:19 +02:00
Thomas Perale 9cf5c95e38 support/testing: add tests for Go providers
Test the source provider of host-go to build a Go package.

The tests consist of building and installing a Go package in the root
file system of an ARM vexpress QEMU system.

Signed-off-by: Thomas Perale <thomas.perale@mind.be>
[yann.morin.1998@free.fr: drop the go-bin test-case]
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
2024-06-01 17:38:51 +02:00
Julien Olivain 9a734700d7 support/testing: improve python-magic-wormhole test reliability
The python-magic-wormhole runtime test can randomly fail on slow
runners, see [1].

The issue is that the sending command is started first in background
_without_ redirecting its output to /dev/null. The receiving command
is started after, expecting the message to be printed on the first
standard output line. On slower systems, the sending command still
print messages while the test controller expect output from the
receiving command. The expected string finally appear, but not on the
first line. This makes the test fail.

This commit fixes the issue by redirecting all outputs (stdout, stderr)
of the sending command to /dev/null. To help even more, the sleep time
is moved from the emulator to the test controller. The sleep time is
also multiplied by the timeout_multiplier.

Fixes: [1]

[1] https://gitlab.com/buildroot.org/buildroot/-/jobs/6888691508

Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Romain Naour <romain.naour@smile.fr>
2024-05-22 15:04:39 +02:00
Peter Korsgaard 71c9da92b2 support/testing/tests/package/test_python_hid.py: drop unneeded explicit hidapi package
The python-hid package got tweaked when applied in commit 4432b08790
(package/python-hid: new package) so it now selects
BR2_PACKAGE_HIDAPI, and we therefore do not need to explicitly enable
hidapi in the test.

Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2024-05-12 09:04:48 +02:00
Brandon Maier 23ef540288 support/testing: add zip test
Signed-off-by: Brandon Maier <brandon.maier@collins.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2024-05-11 08:46:27 +02:00
Francois Perrad 9f84196986 package/lua-lightningmdb: new package
Signed-off-by: Francois Perrad <francois.perrad@gadz.org>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2024-05-10 22:01:48 +02:00
Julien Olivain 92ae6d75c1 support/testing: add gnuplot runtime test
Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2024-05-10 14:03:10 +02:00
Yann E. MORIN 8eea9f5783 support/testing: update hashes for generated archives
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
2024-05-09 22:45:09 +02:00
Yann E. MORIN 2c3c1fa788 support/testing: update git tests
Replace the names of the tarballs in the hash files to -git3.

We don't have any symlinks in the tests, so the hashes themselves don't
change.

Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
2024-05-09 22:45:01 +02:00
Yann E. MORIN 32dcc92655 *: update filename for git-download packages
The version suffix for the git-generated archives has changed, so update
the filenames accordingly in the hash files. The content of the archives
has not changed, though.

Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
2024-05-09 22:44:55 +02:00
Yann E. MORIN a6182475b0 support/testing: add test for export-subst support in git-download
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
2024-05-09 22:44:52 +02:00
Julien Olivain d46b0936ce package/python-sympy: new package
SymPy is a Python library for symbolic mathematics. It aims
to become a full-featured computer algebra system (CAS)
while keeping the code as simple as possible in order to be
comprehensible and easily extensible. SymPy is written
entirely in Python.

https://www.sympy.org/

Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2024-05-09 22:31:05 +02:00
Julien Olivain b9c09bd3c4 package/python-mpmath: new package
mpmath is a free (BSD licensed) Python library for real and
complex floating-point arithmetic with arbitrary precision.

https://mpmath.org/

Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2024-05-09 22:31:03 +02:00
Peter Korsgaard f6542cf10b support/testing: add python-hid test
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2024-05-09 22:17:00 +02:00
Julien Olivain 85f0941532 support/testing: add zbar runtime test
Signed-off-by: Julien Olivain <ju.o@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2024-05-09 22:09:22 +02:00