On Thu, Jun 11, 2026 at 7:44 AM Daniel Henrique Barboza <[email protected]> wrote: > > Add a TPM specific selftest for the riscv-server-ref board. The test > will be skipped if there's no 'swtpm' in the host. > > The test has been basically cloned from our Aspeed ast2600 friends. > Shoutout to monsieur Cédric Le Goater for the code. > > Signed-off-by: Daniel Henrique Barboza <[email protected]>
Reviewed-by: Alistair Francis <[email protected]> Alistair > --- > tests/functional/riscv64/test_server_ref.py | 31 ++++++++++++++++++++- > 1 file changed, 30 insertions(+), 1 deletion(-) > > diff --git a/tests/functional/riscv64/test_server_ref.py > b/tests/functional/riscv64/test_server_ref.py > index 2ecfcf60ad..9b120628dc 100755 > --- a/tests/functional/riscv64/test_server_ref.py > +++ b/tests/functional/riscv64/test_server_ref.py > @@ -8,8 +8,13 @@ > riscv-server-ref board test > """ > > +import os > +import tempfile > +import subprocess > + > from qemu_test import QemuSystemTest, Asset > from qemu_test import wait_for_console_pattern > +from qemu_test import skipIfMissingCommands > > class RiscvServerRefTest(QemuSystemTest): > """ > @@ -26,7 +31,7 @@ class RiscvServerRefTest(QemuSystemTest): > 'master/riscv/images/virt64/buildroot/rootfs.ext2'), > 'f00bb88749f945d80675540a1338bd1ccb226574685a5b6c65ab44027d0411a8') > > - def test_boot_linux_test(self): > + def _test_boot_linux_test(self, tpmstate_dir=None): > self.set_machine('riscv-server-ref') > kernel_path = self.ASSET_KERNEL.fetch() > rootfs_path = self.ASSET_ROOTFS.fetch() > @@ -38,6 +43,22 @@ def test_boot_linux_test(self): > self.vm.add_args('-device', 'ahci,id=ahci') > self.vm.add_args('-device', 'ide-hd,drive=hd0,bus=ahci.0') > > + if tpmstate_dir is not None: > + # Note: code taken verbatim from > + # tests/functional/arm/test_aspeed_ast2600_buildroot_tpm.py > + > + # We must put the TPM state dir in /tmp/, not the build dir, > + # because some distros use AppArmor to lock down swtpm and > + # restrict the set of locations it can access files in. > + socket = os.path.join(tpmstate_dir, 'swtpm-socket') > + subprocess.run(['swtpm', 'socket', '-d', '--tpm2', > + '--tpmstate', f'dir={tpmstate_dir}', > + '--ctrl', f'type=unixio,path={socket}'], > + check=True) > + self.vm.add_args('-chardev', f'socket,id=chrtpm,path={socket}') > + self.vm.add_args('-tpmdev', 'emulator,id=tpm0,chardev=chrtpm') > + self.vm.add_args('-device', 'tpm-tis-device,tpmdev=tpm0') > + > self.vm.set_console() > self.vm.launch() > > @@ -55,5 +76,13 @@ def test_boot_linux_test(self): > # Wait for boot to complete - system reaches login prompt > wait_for_console_pattern(self, 'Run /sbin/init as init process') > > + def test_boot_linux_test(self): > + self._test_boot_linux_test() > + > + @skipIfMissingCommands('swtpm') > + def test_boot_linux_test_tpm(self): > + with tempfile.TemporaryDirectory(prefix="qemu_") as tpmstate_dir: > + self._test_boot_linux_test(tpmstate_dir) > + > if __name__ == '__main__': > QemuSystemTest.main() > -- > 2.43.0 > >
