Commit Graph
29 Commits
Author SHA1 Message Date
Tobias Waldekranz 7bb48ece49 test: Reinstate podman as default runner
Partial revert of 23469bbe3b. When running tests in a GitHub action,
we do not want to run as host root user. Therefore, restore podman as
the default runner, but make sure to prefer docker when attaching to
the host network namespace.
2024-05-20 16:21:06 +02:00
Tobias Waldekranz d7c41489e0 test: Always run tests inside container
When we want to test a `make run` instance, or a physical topology,
start the docker in the host's network namespace instead.
2024-05-20 16:21:06 +02:00
Tobias Waldekranz 3ad20dfd5b test: Drop support for running tests with podman
When testing in the host's namespace, only docker seems to offer the
required capabilities (due to its daemon/client architecture).

Qeneth tests can still be run in podman. Users will have to install
the docker wrappers for podman to make use of this.
2024-05-20 16:21:06 +02:00
Tobias Waldekranz 1dbe09b428 test: Spellchecking 2024-05-20 16:21:06 +02:00
Tobias Waldekranz b9907fa7ae test: Add nsenter helper script to enter Infamy namespaces
When a test starts an isolated MACVLAN namespace, it is often useful
to interactively join that namespace to investigate issues. To do
this, we need to find the "sleeper" process backing the namespace, and
`nsenter` into that process's network namespace.

Add a script that automates this process.

To start a shell in the netns of the MACVLAN stacked on top of d1b,
start a shell in the test environment:

    infix/test $ ./shell
    13:37:00 infamy0:test # ./nsenter d1b
    13:37:01 infamy0(netns:d1b):test #
2024-05-20 16:21:06 +02:00
Tobias WaldekranzandJoachim Wiberg a2906acdf7 test: Optionally use deterministic topology mappings
Due to the salting being applied to Python's `hash()` (see [1]), the
hash of an object is not stable across different Python processes. As
a result, neither are the topology mappings generated by networkx.

The upside of this is randomness that we get better test coverage over
time, especially on physical devices where the underlying hardware
could differ between ports, for example.

On the other hand, it can be very frustrating to track down a bug when
locial nodes are suffled around between phyical nodes on each
invocation of a test case.

Therefore, use a random seed by default, but allow the user to specify
a fixed value if they so choose. We then add a meta test that logs the
seed being used for the current suite - which means we can simply
copy&paste that value to rerun the suite (or single test) with the
same topology mappings.

[1]: https://docs.python.org/3/reference/datamodel.html#object.__hash__
2024-05-03 14:44:54 +02:00
Mattias WalströmandJoachim Wiberg dcc80d0d8a Allow to run testsystem using disk image
This will run the testsystem with a disk
image containing grub bootloader.
2024-04-23 16:24:18 +02:00
Joachim Wiberg 24ce5cbc62 .github: clean up unused containers and images before starting
Error: error creating container storage: the container name "infamy0" is already in use by "2011c2d7cb1737b788b854a8bd08e519f3cbd6e36dae4975784978cff1f238fc". You have to remove that container to be able to reuse that name.: that name is already in use
make[1]: *** [/home/github-runner/actions-runner/_work/infix/infix/test/test.mk:6: test-unit] Error 125

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2024-04-03 16:08:37 +02:00
Joachim WibergandMattias Walström cde9feadd7 test: allow test container to run tcpdump (cap-net-raw)
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2024-03-07 12:45:55 +01:00
Joachim WibergandMattias Walström c1787622a1 test: fix running on systems without /dev/kvm
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2024-02-28 13:55:57 +01:00
Joachim Wiberg 3a04bec92d test: drop --interactive in non-interactive docker sessions
With a self-hosted runner we get the following classic error when
calling `make test-unit`:

    make[1]: Entering directory '/home/runner/_work/infix/infix/buildroot'
    /home/runner/_work/infix/infix/test/env /home/runner/_work/infix/infix/test/9pm/9pm.py /home/runner/_work/infix/infix/test/case/all-repo.yaml /home/runner/_work/infix/infix/test/case/all-unit.yaml
    the input device is not a TTY
    make[2]: *** [/home/runner/_work/infix/infix/board/x86_64/board.mk:14: test-unit] Error 1

This patch drops interactive from all non-interactive docker sessions.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2024-02-27 12:33:20 +01:00
Joachim Wiberg 9aa9a60aca test: replace hard-coded dependency on podman in Infamy
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2024-02-27 12:05:31 +01:00
Joachim Wiberg 5386ec9a3a test,doc,board: Infamy Made Easy
As of 4768cae6, we can use conserver/telnet to connect to the docker0
bridge IP:90XX, where XX is DUTXX.  This was a great UX improvement
and this patch set aims to further the experience by:

 - allow running Infamy (infix-test container) completely rootless¹
 - reduce the expsed port range 50->10 (can be improved further)
 - use 'podman --publish-all' ports, which allocates ten random
   ports for the exposed Qemu telnet ports
 - add Quick Start Guide to doc/testing.md

This restores the possiblity of running multiple "make test-sh"
instances, e.g., when multiple users share the same server.

The 'console' script included in this commit uses 'podman inspect' to
find the port number for a given DUT, and optional instance.  It takes
either the console/dut number (1-N), or the dut name from the topology.

Also in this commit:
 - set hostname for easy identification (for console script)
 - set conatainer --name to hostname
 - adjust workdir from buildroot to infix/test
 - simplify PS1 and add time to prompt (when did the test finish?)

When running 'make test-sh' the prompt now tells you which instance you
are running, e.g., infmay10.  Calling 'console 1 infamy10' connects to
console 1 (port 9001) on the infamy10 instance.

For more information, see the Quick Start Guide in doc/testing.md.  It
shows how to use the new helper scripts: console and shell.

Fix #227

_______
¹) devs using podman, instead of docker, with slirp4netns installed, can
   run the infix-test container completely rootless.  We like this, and
   as of today podman is our recommendation.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2024-02-25 19:49:27 +01:00
Joachim WibergandMattias Walström 2b372dda28 test: fix regression in starting qeneth from e644d87c
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-12-14 16:40:41 +01:00
Mattias WalströmandTobias Waldekranz 797d69e774 Add support for downloading required yang models automatic 2023-12-11 09:10:52 +01:00
Joachim WibergandTobias Waldekranz e644d87c31 Relocate qeneth and 9pm submodules to test/
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-12-01 20:57:54 +01:00
Tobias WaldekranzandMattias Walström c5ba2971e6 test/docker: Add tshark
Needed by new sniffer implementation.
2023-11-29 16:57:48 +01:00
Tobias WaldekranzandJoachim Wiberg bf5de743c6 test/docker: Add jq to docker
Needed by upcoming unit tests.
2023-11-29 11:28:14 +01:00
Mattias WalströmandJoachim Wiberg 4768cae603 Expose ports 9000-9050 for console connections outside docker 2023-11-17 07:19:28 +01:00
Joachim Wiberg f58a726604 test: Bump docker container 0.6 -> 0.7, now with socat
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-25 19:16:33 +02:00
Joachim Wiberg 0d311cc94f test: set 9pm LOG_PATH to create GitHub action summary from last log
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-09-25 17:58:09 +02:00
Ahmed KaricandJoachim Wiberg b44932c614 "test/docker: add passlib to docker image" 2023-07-13 14:15:41 +02:00
Tobias WaldekranzandJoachim Wiberg 5be61a7013 test/case: Add ietf_system/upgrade
Verifies that RAUC bundles can be installed using NETCONF.

We choose to not add this to the "all" suite for now, as the qeneth
topologies do not run with full disk emulation.

To test locally, configure your "make run" instance to use the UEFI
loader, launch `make run`, and then run:

    make INFIX_TESTS=test/case/ietf_system/upgrade.py test-run
2023-06-30 15:33:10 +02:00
Joachim WibergandTobias Waldekranz ecdf2a1012 test: add fakeroot to the docker image
We need fakeroot for running tcpdump inside the container.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-06-30 14:13:09 +02:00
Tobias WaldekranzandJoachim Wiberg d75ecf3a1e test/env: Improve usage message 2023-06-14 17:40:16 +02:00
Tobias WaldekranzandJoachim Wiberg c35553b20a test/env: Allow KVM to be explicitly disabled in the container
This let's us check for timing issues in tests that arise when falling
back to TCG acceleration in QEMU.

While we're here, add a proper option to see the usage message.
2023-06-14 17:40:16 +02:00
Tobias WaldekranzandJoachim Wiberg d5b5cffa3b test/env: Provide a wrapper for qeneth to the running topology
With this change, when running an interactive test session, a plain
`qeneth status` will show the status for the network started by
test/env.
2023-06-14 17:40:16 +02:00
Tobias WaldekranzandJoachim Wiberg bc3933ad92 test/env: Accept an explicit topology in place of a qeneth network
For now, this is only expected to be used with `-C`, i.e. not in a
containerized environment.
2023-06-14 17:40:16 +02:00
Tobias WaldekranzandJoachim Wiberg 0f76b07625 test: Introduce a standardized test environment 2023-06-08 11:10:31 +02:00