mirror of
https://git.yoctoproject.org/meta-arm
synced 2026-01-11 15:00:39 +00:00
Rationalise the port forwarding to be the same as the runqemu defaults, so change the SSH port forward to be 2222=22 instead of 8022=22. Signed-off-by: Ross Burton <ross.burton@arm.com> Signed-off-by: Jon Mason <jon.mason@arm.com>
50 lines
2.7 KiB
Markdown
50 lines
2.7 KiB
Markdown
# OEQA on Arm FVPs
|
|
|
|
OE-Core's [oeqa][OEQA] framework provides a method of performing runtime tests on machines using the `testimage` Yocto task. meta-arm has good support for writing test cases against [Arm FVPs][FVP], meaning the [runfvp][RUNFVP] boot configuration can be re-used.
|
|
|
|
Tests can be configured to run automatically post-build by setting the variable `TESTIMAGE_AUTO="1"`, e.g. in your Kas file or local.conf.
|
|
|
|
meta-arm provides the OEFVPTarget which must be set up in the machine configuration:
|
|
```
|
|
TEST_TARGET = "OEFVPTarget"
|
|
TEST_SERVER_IP = "127.0.0.1"
|
|
TEST_TARGET_IP = "127.0.0.1:2222"
|
|
IMAGE_FEATURES:append = " ssh-server-dropbear"
|
|
FVP_CONFIG[bp.virtio_net.hostbridge.userNetPorts] ?= "2222=22"
|
|
FVP_CONSOLES[default] = "terminal_0"
|
|
FVP_CONSOLES[tf-a] = "s_terminal_0"
|
|
```
|
|
|
|
The test target also generates a log file with the prefix 'fvp_log' in the image recipe's `${WORKDIR}/testimage` containing the FVP's stdout.
|
|
|
|
OEFVPTarget supports two different test interfaces - SSH and pexpect.
|
|
|
|
## SSH
|
|
|
|
As in OEQA in OE-core, tests cases can run commands on the machine using SSH. It therefore requires that an SSH server is installed in the image.
|
|
|
|
This uses the `run` method on the target, e.g:
|
|
```
|
|
(status, output) = self.target.run('uname -a')
|
|
```
|
|
which executes a single command on the target (using `ssh -c`) and returns the status code and the output. It is therefore useful for running tests in a Linux environment.
|
|
|
|
For examples of test cases, see meta/lib/oeqa/runtime/cases in OE-Core. The majority of test cases depend on `ssh.SSHTest.test_ssh`, which first validates that the SSH connection is functioning.
|
|
|
|
## pexpect
|
|
|
|
To support firmware and baremetal testing, OEFVPTarget also allows test cases to make assertions against one or more consoles using the pexpect library.
|
|
|
|
Internally, this test target launches a [Pexpect][PEXPECT] instance for each entry in FVP_CONSOLES which can be used with the provided alias. The whole Pexpect API is exposed on the target, where the alias is always passed as the first argument, e.g.:
|
|
```
|
|
self.target.expect('default', r'root@.*\:~#', timeout=30)
|
|
self.assertNotIn(b'ERROR:', self.target.before('tf-a'))
|
|
```
|
|
|
|
For an example of a full test case, see meta-arm/lib/oeqa/runtime/cases/linuxboot.py This test case can be used to minimally verify that a machine boots to a Linux shell. The default timeout is 10 minutes, but this can be configured with the variable TEST_FVP_LINUX_BOOT_TIMEOUT, which expects a value in seconds.
|
|
|
|
[OEQA]: https://docs.yoctoproject.org/test-manual/intro.html
|
|
[FVP]: https://developer.arm.com/tools-and-software/simulation-models/fixed-virtual-platforms
|
|
[RUNFVP]: runfvp.md
|
|
[PEXPECT]: https://pexpect.readthedocs.io/en/stable/overview.html
|