diff mbox series

[v2] tests/functional: Convert Aarch64 SBSA-Ref avocado tests

Message ID 20240822114146.86838-1-philmd@linaro.org
State New
Headers show
Series [v2] tests/functional: Convert Aarch64 SBSA-Ref avocado tests | expand

Commit Message

Philippe Mathieu-Daudé Aug. 22, 2024, 11:41 a.m. UTC
Straight forward conversion. Since SBSA_FLASH files are not
tarballs, use lzma_uncompress() method.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
Based-on: <20240821082748.65853-1-thuth@redhat.com>
---
 MAINTAINERS                                   |   2 +-
 tests/functional/meson.build                  |   5 +
 .../test_aarch64_sbsaref.py}                  | 144 ++++++------------
 3 files changed, 55 insertions(+), 96 deletions(-)
 rename tests/{avocado/machine_aarch64_sbsaref.py => functional/test_aarch64_sbsaref.py} (56%)
 mode change 100644 => 100755

Comments

Thomas Huth Aug. 22, 2024, 12:34 p.m. UTC | #1
On 22/08/2024 13.41, Philippe Mathieu-Daudé wrote:
> Straight forward conversion. Since SBSA_FLASH files are not
> tarballs, use lzma_uncompress() method.
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> Based-on: <20240821082748.65853-1-thuth@redhat.com>
> ---
>   MAINTAINERS                                   |   2 +-
>   tests/functional/meson.build                  |   5 +
>   .../test_aarch64_sbsaref.py}                  | 144 ++++++------------
>   3 files changed, 55 insertions(+), 96 deletions(-)
>   rename tests/{avocado/machine_aarch64_sbsaref.py => functional/test_aarch64_sbsaref.py} (56%)
>   mode change 100644 => 100755

Thanks for your help with the conversions!

Reviewed-by: Thomas Huth <thuth@redhat.com>
Marcin Juszkiewicz Aug. 22, 2024, 2:06 p.m. UTC | #2
On 22.08.2024 13:41, Philippe Mathieu-Daudé wrote:
>   # Timeouts for individual tests that can be slow e.g. with debugging enabled
>   test_timeouts = {
> +  'aarch64_sbsaref' : 180,

What kind of machine is able to run those tests in 180s? I bumped them 
to 2400s and got timeout (Macbook with M1 Pro).

"make check-avocado" (with some AVOCADO_* vars to limit list of tests) 
shown me which test is run and pass/fail for each.

"make check-functional-aarch64 V=1" shows me "1/4 
qemu:func-thorough+func-aarch64-thorough+thorough / 
func-aarch64-aarch64_sbsaref" and timeouts without information which 
tests pass, which fail.

Maybe for QEMU project this is a progress. For me it is moving tests 
from working ones to "sorry, timeout, find out why" ones.
Thomas Huth Aug. 22, 2024, 2:37 p.m. UTC | #3
On 22/08/2024 16.06, Marcin Juszkiewicz wrote:
> On 22.08.2024 13:41, Philippe Mathieu-Daudé wrote:
>>   # Timeouts for individual tests that can be slow e.g. with debugging 
>> enabled
>>   test_timeouts = {
>> +  'aarch64_sbsaref' : 180,
> 
> What kind of machine is able to run those tests in 180s? I bumped them to 
> 2400s and got timeout (Macbook with M1 Pro).
> 
> "make check-avocado" (with some AVOCADO_* vars to limit list of tests) shown 
> me which test is run and pass/fail for each.
> 
> "make check-functional-aarch64 V=1" shows me "1/4 
> qemu:func-thorough+func-aarch64-thorough+thorough / 
> func-aarch64-aarch64_sbsaref" and timeouts without information which tests 
> pass, which fail.

Try running "make check-functional V=1" ... it should show you the 
individual subtests, so you hopefully can conclude from the tests that 
succeeded to the one that was hanging.

  Thomas
Philippe Mathieu-Daudé Aug. 22, 2024, 2:39 p.m. UTC | #4
On 22/8/24 16:06, Marcin Juszkiewicz wrote:
> On 22.08.2024 13:41, Philippe Mathieu-Daudé wrote:
>>   # Timeouts for individual tests that can be slow e.g. with debugging 
>> enabled
>>   test_timeouts = {
>> +  'aarch64_sbsaref' : 180,
> 
> What kind of machine is able to run those tests in 180s? I bumped them 
> to 2400s and got timeout (Macbook with M1 Pro).
> 
> "make check-avocado" (with some AVOCADO_* vars to limit list of tests) 
> shown me which test is run and pass/fail for each.
> 
> "make check-functional-aarch64 V=1" shows me "1/4 
> qemu:func-thorough+func-aarch64-thorough+thorough / 
> func-aarch64-aarch64_sbsaref" and timeouts without information which 
> tests pass, which fail.
> 
> Maybe for QEMU project this is a progress. For me it is moving tests 
> from working ones to "sorry, timeout, find out why" ones.

Sorry for the annoyance of switching from one framework to another
one :/ Are you using Linux on your Macbook with M1 Pro? I'm using
macOS and these tests currently don't work, so for me this is a
huge win.

Most of the (long) time was spent in downloading the assets.

IIUC there is a way to pre-download without using the test timer
(apparently Richard and Daniel use it) but I haven't found the way
yet.

I'll check with Thomas how to tune these timeouts and return back
to you.

Regards,

Phil.
Thomas Huth Aug. 22, 2024, 2:43 p.m. UTC | #5
On 22/08/2024 16.39, Philippe Mathieu-Daudé wrote:
> On 22/8/24 16:06, Marcin Juszkiewicz wrote:
>> On 22.08.2024 13:41, Philippe Mathieu-Daudé wrote:
>>>   # Timeouts for individual tests that can be slow e.g. with debugging 
>>> enabled
>>>   test_timeouts = {
>>> +  'aarch64_sbsaref' : 180,
>>
>> What kind of machine is able to run those tests in 180s? I bumped them to 
>> 2400s and got timeout (Macbook with M1 Pro).
>>
>> "make check-avocado" (with some AVOCADO_* vars to limit list of tests) 
>> shown me which test is run and pass/fail for each.
>>
>> "make check-functional-aarch64 V=1" shows me "1/4 
>> qemu:func-thorough+func-aarch64-thorough+thorough / 
>> func-aarch64-aarch64_sbsaref" and timeouts without information which tests 
>> pass, which fail.
>>
>> Maybe for QEMU project this is a progress. For me it is moving tests from 
>> working ones to "sorry, timeout, find out why" ones.
> 
> Sorry for the annoyance of switching from one framework to another
> one :/ Are you using Linux on your Macbook with M1 Pro? I'm using
> macOS and these tests currently don't work, so for me this is a
> huge win.
> 
> Most of the (long) time was spent in downloading the assets.
> 
> IIUC there is a way to pre-download without using the test timer
> (apparently Richard and Daniel use it) but I haven't found the way
> yet.

It's done automatically when you run "make check-functional" ... but I think 
it might get skipped if you run "make check-functional-<target>".

Anyway, you can do the precaching manually by running:

  make precache-functional

  HTH,
   Thomas
Marcin Juszkiewicz Aug. 22, 2024, 6:48 p.m. UTC | #6
On 22.08.2024 13:41, Philippe Mathieu-Daudé wrote:
> Straight forward conversion. Since SBSA_FLASH files are not
> tarballs, use lzma_uncompress() method.
> 
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> Based-on: <20240821082748.65853-1-thuth@redhat.com>
> ---

> diff --git a/tests/avocado/machine_aarch64_sbsaref.py b/tests/functional/test_aarch64_sbsaref.py
> old mode 100644
> new mode 100755
> similarity index 56%
> rename from tests/avocado/machine_aarch64_sbsaref.py
> rename to tests/functional/test_aarch64_sbsaref.py
> index f8bf40c192..6728e5f92a
> --- a/tests/avocado/machine_aarch64_sbsaref.py
> +++ b/tests/functional/test_aarch64_sbsaref.py

> @@ -44,47 +55,31 @@ def fetch_firmware(self):
>           """
>   
>           # Secure BootRom (TF-A code)
> -        fs0_xz_url = (
> -            "https://artifacts.codelinaro.org/artifactory/linaro-419-sbsa-ref/"
> -            "20240619-148232/edk2/SBSA_FLASH0.fd.xz"
> -        )
> -        fs0_xz_hash = "0c954842a590988f526984de22e21ae0ab9cb351a0c99a8a58e928f0c7359cf7"
> -        tar_xz_path = self.fetch_asset(fs0_xz_url, asset_hash=fs0_xz_hash,
> -                                      algorithm='sha256')
> -        archive.extract(tar_xz_path, self.workdir)
> +        fs0_xz_path = self.ASSET_FLASH0.fetch()
>           fs0_path = os.path.join(self.workdir, "SBSA_FLASH0.fd")
> +        lzma_uncompress(fs0_xz_path, fs0_path)
>   
>           # Non-secure rom (UEFI and EFI variables)
> -        fs1_xz_url = (
> -            "https://artifacts.codelinaro.org/artifactory/linaro-419-sbsa-ref/"
> -            "20240619-148232/edk2/SBSA_FLASH1.fd.xz"
> -        )
> -        fs1_xz_hash = "c6ec39374c4d79bb9e9cdeeb6db44732d90bb4a334cec92002b3f4b9cac4b5ee"
> -        tar_xz_path = self.fetch_asset(fs1_xz_url, asset_hash=fs1_xz_hash,
> -                                      algorithm='sha256')
> -        archive.extract(tar_xz_path, self.workdir)
> +        fs1_xz_path = self.ASSET_FLASH0.fetch()

Here you want ASSET_FLASH1 not ASSET_FLASH0. That's why it timed out - 
system was hanging on exit from TF-A to EDK2.

>           fs1_path = os.path.join(self.workdir, "SBSA_FLASH1.fd")
> +        lzma_uncompress(fs1_xz_path, fs1_path)
Marcin Juszkiewicz Aug. 22, 2024, 6:57 p.m. UTC | #7
On 22.08.2024 16:39, Philippe Mathieu-Daudé wrote:
> On 22/8/24 16:06, Marcin Juszkiewicz wrote:

>> Maybe for QEMU project this is a progress. For me it is moving tests 
>> from working ones to "sorry, timeout, find out why" ones.

OK, problem was found (check my previous mail). Tests took 222s on
Macbook with M1 Pro. Not looked yet how to enable skipped ones.


▶ 1/4 test_aarch64_sbsaref.Aarch64SbsarefMachine.test_sbsaref_alpine_linux_cortex_a57       OK
▶ 1/4 test_aarch64_sbsaref.Aarch64SbsarefMachine.test_sbsaref_alpine_linux_max              SKIP
▶ 1/4 test_aarch64_sbsaref.Aarch64SbsarefMachine.test_sbsaref_alpine_linux_max_pauth_impdef OK
▶ 1/4 test_aarch64_sbsaref.Aarch64SbsarefMachine.test_sbsaref_alpine_linux_max_pauth_off    OK
▶ 1/4 test_aarch64_sbsaref.Aarch64SbsarefMachine.test_sbsaref_alpine_linux_neoverse_n1      OK
▶ 1/4 test_aarch64_sbsaref.Aarch64SbsarefMachine.test_sbsaref_edk2_firmware                 OK
▶ 1/4 test_aarch64_sbsaref.Aarch64SbsarefMachine.test_sbsaref_openbsd73_cortex_a57          OK
▶ 1/4 test_aarch64_sbsaref.Aarch64SbsarefMachine.test_sbsaref_openbsd73_max                 SKIP
▶ 1/4 test_aarch64_sbsaref.Aarch64SbsarefMachine.test_sbsaref_openbsd73_max_pauth_impdef    SKIP
▶ 1/4 test_aarch64_sbsaref.Aarch64SbsarefMachine.test_sbsaref_openbsd73_max_pauth_off       OK
▶ 1/4 test_aarch64_sbsaref.Aarch64SbsarefMachine.test_sbsaref_openbsd73_neoverse_n1         OK
1/4 qemu:func-thorough+func-aarch64-thorough+thorough / func-aarch64-aarch64_sbsaref        OK                 222.88s   8 subtests passed

> Sorry for the annoyance of switching from one framework to another
> one :/ 

Project wants to change framework so I am not against it. Just asking
questions.

> Are you using Linux on your Macbook with M1 Pro? I'm using
> macOS and these tests currently don't work, so for me this is a
> huge win.

I am using Fedora Asahi Remix on this Macbook for over a year. Total use
of MacOS was probably a few hours total (including waiting for MacOS
updates to fetch).
Philippe Mathieu-Daudé Aug. 23, 2024, 6:20 a.m. UTC | #8
On 22/8/24 20:48, Marcin Juszkiewicz wrote:
> On 22.08.2024 13:41, Philippe Mathieu-Daudé wrote:
>> Straight forward conversion. Since SBSA_FLASH files are not
>> tarballs, use lzma_uncompress() method.
>>
>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>> ---
>> Based-on: <20240821082748.65853-1-thuth@redhat.com>
>> ---
> 
>> diff --git a/tests/avocado/machine_aarch64_sbsaref.py 
>> b/tests/functional/test_aarch64_sbsaref.py
>> old mode 100644
>> new mode 100755
>> similarity index 56%
>> rename from tests/avocado/machine_aarch64_sbsaref.py
>> rename to tests/functional/test_aarch64_sbsaref.py
>> index f8bf40c192..6728e5f92a
>> --- a/tests/avocado/machine_aarch64_sbsaref.py
>> +++ b/tests/functional/test_aarch64_sbsaref.py
> 
>> @@ -44,47 +55,31 @@ def fetch_firmware(self):
>>           """
>>           # Secure BootRom (TF-A code)
>> -        fs0_xz_url = (
>> -            
>> "https://artifacts.codelinaro.org/artifactory/linaro-419-sbsa-ref/"
>> -            "20240619-148232/edk2/SBSA_FLASH0.fd.xz"
>> -        )
>> -        fs0_xz_hash = 
>> "0c954842a590988f526984de22e21ae0ab9cb351a0c99a8a58e928f0c7359cf7"
>> -        tar_xz_path = self.fetch_asset(fs0_xz_url, 
>> asset_hash=fs0_xz_hash,
>> -                                      algorithm='sha256')
>> -        archive.extract(tar_xz_path, self.workdir)
>> +        fs0_xz_path = self.ASSET_FLASH0.fetch()
>>           fs0_path = os.path.join(self.workdir, "SBSA_FLASH0.fd")
>> +        lzma_uncompress(fs0_xz_path, fs0_path)
>>           # Non-secure rom (UEFI and EFI variables)
>> -        fs1_xz_url = (
>> -            
>> "https://artifacts.codelinaro.org/artifactory/linaro-419-sbsa-ref/"
>> -            "20240619-148232/edk2/SBSA_FLASH1.fd.xz"
>> -        )
>> -        fs1_xz_hash = 
>> "c6ec39374c4d79bb9e9cdeeb6db44732d90bb4a334cec92002b3f4b9cac4b5ee"
>> -        tar_xz_path = self.fetch_asset(fs1_xz_url, 
>> asset_hash=fs1_xz_hash,
>> -                                      algorithm='sha256')
>> -        archive.extract(tar_xz_path, self.workdir)
>> +        fs1_xz_path = self.ASSET_FLASH0.fetch()
> 
> Here you want ASSET_FLASH1 not ASSET_FLASH0. That's why it timed out - 
> system was hanging on exit from TF-A to EDK2.

Oops... Thanks you for debugging / noticing this!

> 
>>           fs1_path = os.path.join(self.workdir, "SBSA_FLASH1.fd")
>> +        lzma_uncompress(fs1_xz_path, fs1_path)
>
Philippe Mathieu-Daudé Aug. 23, 2024, 1:12 p.m. UTC | #9
On 22/8/24 16:06, Marcin Juszkiewicz wrote:
> On 22.08.2024 13:41, Philippe Mathieu-Daudé wrote:
>>   # Timeouts for individual tests that can be slow e.g. with debugging 
>> enabled
>>   test_timeouts = {
>> +  'aarch64_sbsaref' : 180,
> 
> What kind of machine is able to run those tests in 180s? I bumped them 
> to 2400s and got timeout (Macbook with M1 Pro).

Indeed with Avocado this timeout was per test function, now it is
per test class. Having 11 test functions, for a 1-1 change we'd
need 180 * 11 = 1980 seconds.

I made a comment on Thomas/Daniel's series this patch is based on:
https://lore.kernel.org/qemu-devel/4b4018c6-4a2b-4250-bb53-be9cc5df7cb4@linaro.org/

I could run all the tests in <300sec but for safety, should I keep
Avocado equivalent and use 2000s?

▶ 1/5 
test_aarch64_sbsaref.Aarch64SbsarefMachine.test_sbsaref_alpine_linux_max 
              OK
▶ 1/5 
test_aarch64_sbsaref.Aarch64SbsarefMachine.test_sbsaref_alpine_linux_max_pauth_impdef 
OK
▶ 1/5 
test_aarch64_sbsaref.Aarch64SbsarefMachine.test_sbsaref_alpine_linux_max_pauth_off 
    OK
▶ 1/5 
test_aarch64_sbsaref.Aarch64SbsarefMachine.test_sbsaref_alpine_linux_neoverse_n1 
      OK
▶ 1/5 
test_aarch64_sbsaref.Aarch64SbsarefMachine.test_sbsaref_edk2_firmware 
              OK
▶ 1/5 
test_aarch64_sbsaref.Aarch64SbsarefMachine.test_sbsaref_openbsd73_cortex_a57 
          OK
▶ 1/5 
test_aarch64_sbsaref.Aarch64SbsarefMachine.test_sbsaref_openbsd73_max 
              OK
▶ 1/5 
test_aarch64_sbsaref.Aarch64SbsarefMachine.test_sbsaref_openbsd73_max_pauth_impdef 
    OK
▶ 1/5 
test_aarch64_sbsaref.Aarch64SbsarefMachine.test_sbsaref_openbsd73_max_pauth_off 
       OK
▶ 1/5 
test_aarch64_sbsaref.Aarch64SbsarefMachine.test_sbsaref_openbsd73_neoverse_n1 
         OK
1/5 qemu:func-thorough+func-aarch64-thorough+thorough / 
func-aarch64-aarch64_sbsaref        OK             241.79s   11 subtests 
passed

> "make check-avocado" (with some AVOCADO_* vars to limit list of tests) 
> shown me which test is run and pass/fail for each.
> 
> "make check-functional-aarch64 V=1" shows me "1/4 
> qemu:func-thorough+func-aarch64-thorough+thorough / 
> func-aarch64-aarch64_sbsaref" and timeouts without information which 
> tests pass, which fail.
> 
> Maybe for QEMU project this is a progress. For me it is moving tests 
> from working ones to "sorry, timeout, find out why" ones.
diff mbox series

Patch

diff --git a/MAINTAINERS b/MAINTAINERS
index 91e5b061bf..c720c02800 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -971,7 +971,7 @@  F: hw/misc/sbsa_ec.c
 F: hw/watchdog/sbsa_gwdt.c
 F: include/hw/watchdog/sbsa_gwdt.h
 F: docs/system/arm/sbsa.rst
-F: tests/avocado/machine_aarch64_sbsaref.py
+F: tests/functional/test_aarch64_sbsaref.py
 
 Sharp SL-5500 (Collie) PDA
 M: Peter Maydell <peter.maydell@linaro.org>
diff --git a/tests/functional/meson.build b/tests/functional/meson.build
index f1fce045fc..2445239a5c 100644
--- a/tests/functional/meson.build
+++ b/tests/functional/meson.build
@@ -11,6 +11,7 @@  endif
 
 # Timeouts for individual tests that can be slow e.g. with debugging enabled
 test_timeouts = {
+  'aarch64_sbsaref' : 180,
   'acpi_bits' : 240,
   'netdev_ethtool' : 180,
   'ppc_40p' : 240,
@@ -26,6 +27,10 @@  tests_generic = [
   'version',
 ]
 
+tests_aarch64_thorough = [
+  'aarch64_sbsaref',
+]
+
 tests_arm_thorough = [
   'arm_canona1100',
   'arm_integratorcp',
diff --git a/tests/avocado/machine_aarch64_sbsaref.py b/tests/functional/test_aarch64_sbsaref.py
old mode 100644
new mode 100755
similarity index 56%
rename from tests/avocado/machine_aarch64_sbsaref.py
rename to tests/functional/test_aarch64_sbsaref.py
index f8bf40c192..6728e5f92a
--- a/tests/avocado/machine_aarch64_sbsaref.py
+++ b/tests/functional/test_aarch64_sbsaref.py
@@ -1,3 +1,5 @@ 
+#!/usr/bin/env python3
+#
 # Functional test that boots a Linux kernel and checks the console
 #
 # SPDX-FileCopyrightText: 2023-2024 Linaro Ltd.
@@ -8,12 +10,11 @@ 
 
 import os
 
-from avocado import skipUnless
-from avocado.utils import archive
-
-from avocado_qemu import QemuSystemTest
-from avocado_qemu import wait_for_console_pattern
-from avocado_qemu import interrupt_interactive_console_until_pattern
+from qemu_test import QemuSystemTest, Asset
+from qemu_test import wait_for_console_pattern
+from qemu_test import interrupt_interactive_console_until_pattern
+from qemu_test.utils import lzma_uncompress
+from unittest import skipUnless
 
 
 class Aarch64SbsarefMachine(QemuSystemTest):
@@ -28,6 +29,16 @@  class Aarch64SbsarefMachine(QemuSystemTest):
 
     timeout = 180
 
+    ASSET_FLASH0 = Asset(
+        ('https://artifacts.codelinaro.org/artifactory/linaro-419-sbsa-ref/'
+         '20240619-148232/edk2/SBSA_FLASH0.fd.xz'),
+        '0c954842a590988f526984de22e21ae0ab9cb351a0c99a8a58e928f0c7359cf7')
+
+    ASSET_FLASH1 = Asset(
+        ('https://artifacts.codelinaro.org/artifactory/linaro-419-sbsa-ref/'
+         '20240619-148232/edk2/SBSA_FLASH1.fd.xz'),
+        'c6ec39374c4d79bb9e9cdeeb6db44732d90bb4a334cec92002b3f4b9cac4b5ee')
+
     def fetch_firmware(self):
         """
         Flash volumes generated using:
@@ -44,47 +55,31 @@  def fetch_firmware(self):
         """
 
         # Secure BootRom (TF-A code)
-        fs0_xz_url = (
-            "https://artifacts.codelinaro.org/artifactory/linaro-419-sbsa-ref/"
-            "20240619-148232/edk2/SBSA_FLASH0.fd.xz"
-        )
-        fs0_xz_hash = "0c954842a590988f526984de22e21ae0ab9cb351a0c99a8a58e928f0c7359cf7"
-        tar_xz_path = self.fetch_asset(fs0_xz_url, asset_hash=fs0_xz_hash,
-                                      algorithm='sha256')
-        archive.extract(tar_xz_path, self.workdir)
+        fs0_xz_path = self.ASSET_FLASH0.fetch()
         fs0_path = os.path.join(self.workdir, "SBSA_FLASH0.fd")
+        lzma_uncompress(fs0_xz_path, fs0_path)
 
         # Non-secure rom (UEFI and EFI variables)
-        fs1_xz_url = (
-            "https://artifacts.codelinaro.org/artifactory/linaro-419-sbsa-ref/"
-            "20240619-148232/edk2/SBSA_FLASH1.fd.xz"
-        )
-        fs1_xz_hash = "c6ec39374c4d79bb9e9cdeeb6db44732d90bb4a334cec92002b3f4b9cac4b5ee"
-        tar_xz_path = self.fetch_asset(fs1_xz_url, asset_hash=fs1_xz_hash,
-                                      algorithm='sha256')
-        archive.extract(tar_xz_path, self.workdir)
+        fs1_xz_path = self.ASSET_FLASH0.fetch()
         fs1_path = os.path.join(self.workdir, "SBSA_FLASH1.fd")
+        lzma_uncompress(fs1_xz_path, fs1_path)
 
         for path in [fs0_path, fs1_path]:
             with open(path, "ab+") as fd:
                 fd.truncate(256 << 20)  # Expand volumes to 256MiB
 
+        self.set_machine('sbsa-ref')
         self.vm.set_console()
         self.vm.add_args(
-            "-drive",
-            f"if=pflash,file={fs0_path},format=raw",
-            "-drive",
-            f"if=pflash,file={fs1_path},format=raw",
-            "-machine",
-            "sbsa-ref",
+            "-drive", f"if=pflash,file={fs0_path},format=raw",
+            "-drive", f"if=pflash,file={fs1_path},format=raw",
         )
 
     def test_sbsaref_edk2_firmware(self):
-        """
-        :avocado: tags=cpu:cortex-a57
-        """
 
         self.fetch_firmware()
+
+        self.vm.add_args('-cpu', 'cortex-a57')
         self.vm.launch()
 
         # TF-A boot sequence:
@@ -110,87 +105,62 @@  def test_sbsaref_edk2_firmware(self):
         wait_for_console_pattern(self, "UEFI firmware (version 1.0")
         interrupt_interactive_console_until_pattern(self, "QEMU SBSA-REF Machine")
 
+
+    ASSET_ALPINE_ISO = Asset(
+        ('https://dl-cdn.alpinelinux.org/'
+         'alpine/v3.17/releases/aarch64/alpine-standard-3.17.2-aarch64.iso'),
+        '5a36304ecf039292082d92b48152a9ec21009d3a62f459de623e19c4bd9dc027')
+
     # This tests the whole boot chain from EFI to Userspace
     # We only boot a whole OS for the current top level CPU and GIC
     # Other test profiles should use more minimal boots
     def boot_alpine_linux(self, cpu):
         self.fetch_firmware()
 
-        iso_url = (
-            "https://dl-cdn.alpinelinux.org/"
-            "alpine/v3.17/releases/aarch64/alpine-standard-3.17.2-aarch64.iso"
-        )
-
-        iso_hash = "5a36304ecf039292082d92b48152a9ec21009d3a62f459de623e19c4bd9dc027"
-        iso_path = self.fetch_asset(iso_url, algorithm="sha256", asset_hash=iso_hash)
+        iso_path = self.ASSET_ALPINE_ISO.fetch()
 
         self.vm.set_console()
         self.vm.add_args(
-            "-cpu",
-            cpu,
-            "-drive",
-            f"file={iso_path},media=cdrom,format=raw",
+            "-cpu", cpu,
+            "-drive", f"file={iso_path},media=cdrom,format=raw",
         )
 
         self.vm.launch()
         wait_for_console_pattern(self, "Welcome to Alpine Linux 3.17")
 
     def test_sbsaref_alpine_linux_cortex_a57(self):
-        """
-        :avocado: tags=cpu:cortex-a57
-        :avocado: tags=os:linux
-        """
         self.boot_alpine_linux("cortex-a57")
 
     def test_sbsaref_alpine_linux_neoverse_n1(self):
-        """
-        :avocado: tags=cpu:neoverse-n1
-        :avocado: tags=os:linux
-        """
         self.boot_alpine_linux("neoverse-n1")
 
     def test_sbsaref_alpine_linux_max_pauth_off(self):
-        """
-        :avocado: tags=cpu:max
-        :avocado: tags=os:linux
-        """
         self.boot_alpine_linux("max,pauth=off")
 
     def test_sbsaref_alpine_linux_max_pauth_impdef(self):
-        """
-        :avocado: tags=cpu:max
-        :avocado: tags=os:linux
-        """
         self.boot_alpine_linux("max,pauth-impdef=on")
 
-    @skipUnless(os.getenv('AVOCADO_TIMEOUT_EXPECTED'), 'Test might timeout')
+    @skipUnless(os.getenv('QEMU_TEST_TIMEOUT_EXPECTED'), 'Test might timeout')
     def test_sbsaref_alpine_linux_max(self):
-        """
-        :avocado: tags=cpu:max
-        :avocado: tags=os:linux
-        """
         self.boot_alpine_linux("max")
 
 
+    ASSET_OPENBSD_ISO = Asset(
+        ('https://cdn.openbsd.org/pub/OpenBSD/7.3/arm64/miniroot73.img'),
+        '7fc2c75401d6f01fbfa25f4953f72ad7d7c18650056d30755c44b9c129b707e5')
+
     # This tests the whole boot chain from EFI to Userspace
     # We only boot a whole OS for the current top level CPU and GIC
     # Other test profiles should use more minimal boots
     def boot_openbsd73(self, cpu):
         self.fetch_firmware()
 
-        img_url = (
-            "https://cdn.openbsd.org/pub/OpenBSD/7.3/arm64/miniroot73.img"
-        )
-
-        img_hash = "7fc2c75401d6f01fbfa25f4953f72ad7d7c18650056d30755c44b9c129b707e5"
-        img_path = self.fetch_asset(img_url, algorithm="sha256", asset_hash=img_hash)
+        img_path = self.ASSET_OPENBSD_ISO.fetch()
 
         self.vm.set_console()
         self.vm.add_args(
-            "-cpu",
-            cpu,
-            "-drive",
-            f"file={img_path},format=raw,snapshot=on",
+            "-cpu", cpu,
+            "-drive", f"file={img_path},format=raw,snapshot=on",
         )
 
         self.vm.launch()
@@ -199,38 +169,22 @@  def boot_openbsd73(self, cpu):
                                  " 7.3 installation program.")
 
     def test_sbsaref_openbsd73_cortex_a57(self):
-        """
-        :avocado: tags=cpu:cortex-a57
-        :avocado: tags=os:openbsd
-        """
         self.boot_openbsd73("cortex-a57")
 
     def test_sbsaref_openbsd73_neoverse_n1(self):
-        """
-        :avocado: tags=cpu:neoverse-n1
-        :avocado: tags=os:openbsd
-        """
         self.boot_openbsd73("neoverse-n1")
 
     def test_sbsaref_openbsd73_max_pauth_off(self):
-        """
-        :avocado: tags=cpu:max
-        :avocado: tags=os:openbsd
-        """
         self.boot_openbsd73("max,pauth=off")
 
-    @skipUnless(os.getenv('AVOCADO_TIMEOUT_EXPECTED'), 'Test might timeout')
+    @skipUnless(os.getenv('QEMU_TEST_TIMEOUT_EXPECTED'), 'Test might timeout')
     def test_sbsaref_openbsd73_max_pauth_impdef(self):
-        """
-        :avocado: tags=cpu:max
-        :avocado: tags=os:openbsd
-        """
         self.boot_openbsd73("max,pauth-impdef=on")
 
-    @skipUnless(os.getenv('AVOCADO_TIMEOUT_EXPECTED'), 'Test might timeout')
+    @skipUnless(os.getenv('QEMU_TEST_TIMEOUT_EXPECTED'), 'Test might timeout')
     def test_sbsaref_openbsd73_max(self):
-        """
-        :avocado: tags=cpu:max
-        :avocado: tags=os:openbsd
-        """
         self.boot_openbsd73("max")
+
+
+if __name__ == '__main__':
+    QemuSystemTest.main()