Ver código fonte

Merge remote-tracking branch 'remotes/philmd/tags/avocado-20211108' into staging

Integration testing patches

- Rename tests/acceptance/ -> tests/avocado/
- Rename avocado_qemu.Test -> avocado_qemu.QemuSystemTest
- Introduce QemuUserTest class
- Add the first linux-user test, covering the bFLT loader

# gpg: Signature made Mon 08 Nov 2021 05:16:46 PM CET
# gpg:                using RSA key FAABE75E12917221DCFD6BB2E3E32C2CDEADC0DE
# gpg: Good signature from "Philippe Mathieu-Daudé (F4BUG) <f4bug@amsat.org>" [full]

* remotes/philmd/tags/avocado-20211108:
  tests/avocado: Remove p7zip binary availability check
  tests/avocado: Rename avocado_qemu.Test -> QemuSystemTest
  tests/avocado: Add bFLT loader linux-user test
  tests/avocado: Share useful helpers from virtiofs_submounts test
  tests/avocado: Introduce QemuUserTest base class
  tests/avocado: Make pick_default_qemu_bin() more generic
  tests/avocado: Extract QemuBaseTest from Test
  tests/acceptance: rename tests acceptance to tests avocado
  tests/acceptance: introduce new check-avocado target

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Richard Henderson 3 anos atrás
pai
commit
114f3c8cc4
65 arquivos alterados com 364 adições e 284 exclusões
  1. 1 1
      .gitlab-ci.d/buildtest-template.yml
  2. 28 28
      .gitlab-ci.d/buildtest.yml
  3. 26 26
      MAINTAINERS
  4. 1 1
      configure
  5. 1 1
      docs/devel/build-system.rst
  6. 1 1
      docs/devel/ci-definitions.rst.inc
  7. 28 29
      docs/devel/testing.rst
  8. 4 4
      docs/system/arm/orangepi.rst
  9. 1 1
      python/qemu/machine/README.rst
  10. 1 1
      python/qemu/qmp/README.rst
  11. 1 1
      python/qemu/utils/README.rst
  12. 14 7
      tests/Makefile.include
  13. 0 10
      tests/acceptance/README.rst
  14. 10 0
      tests/avocado/README.rst
  15. 122 41
      tests/avocado/avocado_qemu/__init__.py
  16. 0 0
      tests/avocado/boot_linux.py
  17. 2 9
      tests/avocado/boot_linux_console.py
  18. 0 0
      tests/avocado/boot_xen.py
  19. 2 2
      tests/avocado/cpu_queries.py
  20. 2 2
      tests/avocado/empty_cpu_model.py
  21. 0 0
      tests/avocado/hotplug_cpu.py
  22. 2 2
      tests/avocado/info_usernet.py
  23. 0 0
      tests/avocado/intel_iommu.py
  24. 3 3
      tests/avocado/linux_initrd.py
  25. 3 2
      tests/avocado/linux_ssh_mips_malta.py
  26. 54 0
      tests/avocado/load_bflt.py
  27. 2 2
      tests/avocado/machine_arm_canona1100.py
  28. 2 2
      tests/avocado/machine_arm_integratorcp.py
  29. 2 2
      tests/avocado/machine_arm_n8x0.py
  30. 3 3
      tests/avocado/machine_avr6.py
  31. 2 2
      tests/avocado/machine_m68k_nextcube.py
  32. 2 2
      tests/avocado/machine_microblaze.py
  33. 2 2
      tests/avocado/machine_mips_fuloong2e.py
  34. 2 2
      tests/avocado/machine_mips_loongson3v.py
  35. 2 2
      tests/avocado/machine_mips_malta.py
  36. 2 2
      tests/avocado/machine_rx_gdbsim.py
  37. 2 2
      tests/avocado/machine_s390_ccw_virtio.py
  38. 0 0
      tests/avocado/machine_sparc64_sun4u.py
  39. 2 2
      tests/avocado/machine_sparc_leon3.py
  40. 2 2
      tests/avocado/migration.py
  41. 2 2
      tests/avocado/multiprocess.py
  42. 2 2
      tests/avocado/pc_cpu_hotplug_props.py
  43. 2 2
      tests/avocado/ppc_405.py
  44. 2 2
      tests/avocado/ppc_bamboo.py
  45. 2 2
      tests/avocado/ppc_mpc8544ds.py
  46. 2 2
      tests/avocado/ppc_prep_40p.py
  47. 2 2
      tests/avocado/ppc_pseries.py
  48. 2 2
      tests/avocado/ppc_virtex_ml507.py
  49. 0 0
      tests/avocado/replay_kernel.py
  50. 0 0
      tests/avocado/replay_linux.py
  51. 0 0
      tests/avocado/reverse_debugging.py
  52. 0 0
      tests/avocado/smmu.py
  53. 0 0
      tests/avocado/tcg_plugins.py
  54. 0 0
      tests/avocado/tesseract_utils.py
  55. 2 2
      tests/avocado/version.py
  56. 2 2
      tests/avocado/virtio-gpu.py
  57. 2 2
      tests/avocado/virtio_check_params.py
  58. 2 2
      tests/avocado/virtio_version.py
  59. 2 57
      tests/avocado/virtiofs_submounts.py
  60. 0 0
      tests/avocado/virtiofs_submounts.py.data/cleanup.sh
  61. 0 0
      tests/avocado/virtiofs_submounts.py.data/guest-cleanup.sh
  62. 0 0
      tests/avocado/virtiofs_submounts.py.data/guest.sh
  63. 0 0
      tests/avocado/virtiofs_submounts.py.data/host.sh
  64. 2 2
      tests/avocado/vnc.py
  65. 2 2
      tests/avocado/x86_cpu_model_versions.py

+ 1 - 1
.gitlab-ci.d/buildtest-template.yml

@@ -37,7 +37,7 @@
     # Avoid recompiling by hiding ninja with NINJA=":"
     # Avoid recompiling by hiding ninja with NINJA=":"
     - make NINJA=":" $MAKE_CHECK_ARGS
     - make NINJA=":" $MAKE_CHECK_ARGS
 
 
-.acceptance_test_job_template:
+.avocado_test_job_template:
   extends: .native_test_job_template
   extends: .native_test_job_template
   cache:
   cache:
     key: "${CI_JOB_NAME}-cache"
     key: "${CI_JOB_NAME}-cache"

+ 28 - 28
.gitlab-ci.d/buildtest.yml

@@ -26,14 +26,14 @@ check-system-alpine:
     IMAGE: alpine
     IMAGE: alpine
     MAKE_CHECK_ARGS: check
     MAKE_CHECK_ARGS: check
 
 
-acceptance-system-alpine:
-  extends: .acceptance_test_job_template
+avocado-system-alpine:
+  extends: .avocado_test_job_template
   needs:
   needs:
     - job: build-system-alpine
     - job: build-system-alpine
       artifacts: true
       artifacts: true
   variables:
   variables:
     IMAGE: alpine
     IMAGE: alpine
-    MAKE_CHECK_ARGS: check-acceptance
+    MAKE_CHECK_ARGS: check-avocado
 
 
 build-system-ubuntu:
 build-system-ubuntu:
   extends: .native_build_job_template
   extends: .native_build_job_template
@@ -59,14 +59,14 @@ check-system-ubuntu:
     IMAGE: ubuntu2004
     IMAGE: ubuntu2004
     MAKE_CHECK_ARGS: check
     MAKE_CHECK_ARGS: check
 
 
-acceptance-system-ubuntu:
-  extends: .acceptance_test_job_template
+avocado-system-ubuntu:
+  extends: .avocado_test_job_template
   needs:
   needs:
     - job: build-system-ubuntu
     - job: build-system-ubuntu
       artifacts: true
       artifacts: true
   variables:
   variables:
     IMAGE: ubuntu2004
     IMAGE: ubuntu2004
-    MAKE_CHECK_ARGS: check-acceptance
+    MAKE_CHECK_ARGS: check-avocado
 
 
 build-system-debian:
 build-system-debian:
   extends: .native_build_job_template
   extends: .native_build_job_template
@@ -91,14 +91,14 @@ check-system-debian:
     IMAGE: debian-amd64
     IMAGE: debian-amd64
     MAKE_CHECK_ARGS: check
     MAKE_CHECK_ARGS: check
 
 
-acceptance-system-debian:
-  extends: .acceptance_test_job_template
+avocado-system-debian:
+  extends: .avocado_test_job_template
   needs:
   needs:
     - job: build-system-debian
     - job: build-system-debian
       artifacts: true
       artifacts: true
   variables:
   variables:
     IMAGE: debian-amd64
     IMAGE: debian-amd64
-    MAKE_CHECK_ARGS: check-acceptance
+    MAKE_CHECK_ARGS: check-avocado
 
 
 build-system-fedora:
 build-system-fedora:
   extends: .native_build_job_template
   extends: .native_build_job_template
@@ -125,14 +125,14 @@ check-system-fedora:
     IMAGE: fedora
     IMAGE: fedora
     MAKE_CHECK_ARGS: check
     MAKE_CHECK_ARGS: check
 
 
-acceptance-system-fedora:
-  extends: .acceptance_test_job_template
+avocado-system-fedora:
+  extends: .avocado_test_job_template
   needs:
   needs:
     - job: build-system-fedora
     - job: build-system-fedora
       artifacts: true
       artifacts: true
   variables:
   variables:
     IMAGE: fedora
     IMAGE: fedora
-    MAKE_CHECK_ARGS: check-acceptance
+    MAKE_CHECK_ARGS: check-avocado
 
 
 build-system-centos:
 build-system-centos:
   extends: .native_build_job_template
   extends: .native_build_job_template
@@ -159,14 +159,14 @@ check-system-centos:
     IMAGE: centos8
     IMAGE: centos8
     MAKE_CHECK_ARGS: check
     MAKE_CHECK_ARGS: check
 
 
-acceptance-system-centos:
-  extends: .acceptance_test_job_template
+avocado-system-centos:
+  extends: .avocado_test_job_template
   needs:
   needs:
     - job: build-system-centos
     - job: build-system-centos
       artifacts: true
       artifacts: true
   variables:
   variables:
     IMAGE: centos8
     IMAGE: centos8
-    MAKE_CHECK_ARGS: check-acceptance
+    MAKE_CHECK_ARGS: check-avocado
 
 
 build-system-opensuse:
 build-system-opensuse:
   extends: .native_build_job_template
   extends: .native_build_job_template
@@ -191,14 +191,14 @@ check-system-opensuse:
     IMAGE: opensuse-leap
     IMAGE: opensuse-leap
     MAKE_CHECK_ARGS: check
     MAKE_CHECK_ARGS: check
 
 
-acceptance-system-opensuse:
-  extends: .acceptance_test_job_template
+avocado-system-opensuse:
+  extends: .avocado_test_job_template
   needs:
   needs:
     - job: build-system-opensuse
     - job: build-system-opensuse
       artifacts: true
       artifacts: true
   variables:
   variables:
     IMAGE: opensuse-leap
     IMAGE: opensuse-leap
-    MAKE_CHECK_ARGS: check-acceptance
+    MAKE_CHECK_ARGS: check-avocado
 
 
 
 
 # This jobs explicitly disable TCG (--disable-tcg), KVM is detected by
 # This jobs explicitly disable TCG (--disable-tcg), KVM is detected by
@@ -317,7 +317,7 @@ clang-user:
 # This can be accomplished by using -enable-slirp=git, which avoids the use of
 # This can be accomplished by using -enable-slirp=git, which avoids the use of
 # a system-wide version of the library
 # a system-wide version of the library
 #
 #
-# Split in three sets of build/check/acceptance to limit the execution time of each
+# Split in three sets of build/check/avocado to limit the execution time of each
 # job
 # job
 build-cfi-aarch64:
 build-cfi-aarch64:
   extends: .native_build_job_template
   extends: .native_build_job_template
@@ -352,14 +352,14 @@ check-cfi-aarch64:
     IMAGE: fedora
     IMAGE: fedora
     MAKE_CHECK_ARGS: check
     MAKE_CHECK_ARGS: check
 
 
-acceptance-cfi-aarch64:
-  extends: .acceptance_test_job_template
+avocado-cfi-aarch64:
+  extends: .avocado_test_job_template
   needs:
   needs:
     - job: build-cfi-aarch64
     - job: build-cfi-aarch64
       artifacts: true
       artifacts: true
   variables:
   variables:
     IMAGE: fedora
     IMAGE: fedora
-    MAKE_CHECK_ARGS: check-acceptance
+    MAKE_CHECK_ARGS: check-avocado
 
 
 build-cfi-ppc64-s390x:
 build-cfi-ppc64-s390x:
   extends: .native_build_job_template
   extends: .native_build_job_template
@@ -394,14 +394,14 @@ check-cfi-ppc64-s390x:
     IMAGE: fedora
     IMAGE: fedora
     MAKE_CHECK_ARGS: check
     MAKE_CHECK_ARGS: check
 
 
-acceptance-cfi-ppc64-s390x:
-  extends: .acceptance_test_job_template
+avocado-cfi-ppc64-s390x:
+  extends: .avocado_test_job_template
   needs:
   needs:
     - job: build-cfi-ppc64-s390x
     - job: build-cfi-ppc64-s390x
       artifacts: true
       artifacts: true
   variables:
   variables:
     IMAGE: fedora
     IMAGE: fedora
-    MAKE_CHECK_ARGS: check-acceptance
+    MAKE_CHECK_ARGS: check-avocado
 
 
 build-cfi-x86_64:
 build-cfi-x86_64:
   extends: .native_build_job_template
   extends: .native_build_job_template
@@ -430,14 +430,14 @@ check-cfi-x86_64:
     IMAGE: fedora
     IMAGE: fedora
     MAKE_CHECK_ARGS: check
     MAKE_CHECK_ARGS: check
 
 
-acceptance-cfi-x86_64:
-  extends: .acceptance_test_job_template
+avocado-cfi-x86_64:
+  extends: .avocado_test_job_template
   needs:
   needs:
     - job: build-cfi-x86_64
     - job: build-cfi-x86_64
       artifacts: true
       artifacts: true
   variables:
   variables:
     IMAGE: fedora
     IMAGE: fedora
-    MAKE_CHECK_ARGS: check-acceptance
+    MAKE_CHECK_ARGS: check-avocado
 
 
 tsan-build:
 tsan-build:
   extends: .native_build_job_template
   extends: .native_build_job_template

+ 26 - 26
MAINTAINERS

@@ -177,7 +177,7 @@ L: qemu-arm@nongnu.org
 S: Maintained
 S: Maintained
 F: hw/arm/smmu*
 F: hw/arm/smmu*
 F: include/hw/arm/smmu*
 F: include/hw/arm/smmu*
-F: tests/acceptance/smmu.py
+F: tests/avocado/smmu.py
 
 
 AVR TCG CPUs
 AVR TCG CPUs
 M: Michael Rolnik <mrolnik@gmail.com>
 M: Michael Rolnik <mrolnik@gmail.com>
@@ -185,7 +185,7 @@ S: Maintained
 F: docs/system/target-avr.rst
 F: docs/system/target-avr.rst
 F: gdb-xml/avr-cpu.xml
 F: gdb-xml/avr-cpu.xml
 F: target/avr/
 F: target/avr/
-F: tests/acceptance/machine_avr6.py
+F: tests/avocado/machine_avr6.py
 
 
 CRIS TCG CPUs
 CRIS TCG CPUs
 M: Edgar E. Iglesias <edgar.iglesias@gmail.com>
 M: Edgar E. Iglesias <edgar.iglesias@gmail.com>
@@ -657,7 +657,7 @@ S: Odd Fixes
 F: include/hw/arm/digic.h
 F: include/hw/arm/digic.h
 F: hw/*/digic*
 F: hw/*/digic*
 F: include/hw/*/digic*
 F: include/hw/*/digic*
-F: tests/acceptance/machine_arm_canona1100.py
+F: tests/avocado/machine_arm_canona1100.py
 F: docs/system/arm/digic.rst
 F: docs/system/arm/digic.rst
 
 
 Goldfish RTC
 Goldfish RTC
@@ -708,7 +708,7 @@ S: Maintained
 F: hw/arm/integratorcp.c
 F: hw/arm/integratorcp.c
 F: hw/misc/arm_integrator_debug.c
 F: hw/misc/arm_integrator_debug.c
 F: include/hw/misc/arm_integrator_debug.h
 F: include/hw/misc/arm_integrator_debug.h
-F: tests/acceptance/machine_arm_integratorcp.py
+F: tests/avocado/machine_arm_integratorcp.py
 F: docs/system/arm/integratorcp.rst
 F: docs/system/arm/integratorcp.rst
 
 
 MCIMX6UL EVK / i.MX6ul
 MCIMX6UL EVK / i.MX6ul
@@ -805,7 +805,7 @@ F: include/hw/display/blizzard.h
 F: include/hw/input/lm832x.h
 F: include/hw/input/lm832x.h
 F: include/hw/input/tsc2xxx.h
 F: include/hw/input/tsc2xxx.h
 F: include/hw/misc/cbus.h
 F: include/hw/misc/cbus.h
-F: tests/acceptance/machine_arm_n8x0.py
+F: tests/avocado/machine_arm_n8x0.py
 F: docs/system/arm/nseries.rst
 F: docs/system/arm/nseries.rst
 
 
 Palm
 Palm
@@ -1159,7 +1159,7 @@ M: Edgar E. Iglesias <edgar.iglesias@gmail.com>
 S: Maintained
 S: Maintained
 F: hw/microblaze/petalogix_s3adsp1800_mmu.c
 F: hw/microblaze/petalogix_s3adsp1800_mmu.c
 F: include/hw/char/xilinx_uartlite.h
 F: include/hw/char/xilinx_uartlite.h
-F: tests/acceptance/machine_microblaze.py
+F: tests/avocado/machine_microblaze.py
 
 
 petalogix_ml605
 petalogix_ml605
 M: Edgar E. Iglesias <edgar.iglesias@gmail.com>
 M: Edgar E. Iglesias <edgar.iglesias@gmail.com>
@@ -1192,8 +1192,8 @@ F: hw/acpi/piix4.c
 F: hw/mips/malta.c
 F: hw/mips/malta.c
 F: hw/mips/gt64xxx_pci.c
 F: hw/mips/gt64xxx_pci.c
 F: include/hw/southbridge/piix.h
 F: include/hw/southbridge/piix.h
-F: tests/acceptance/linux_ssh_mips_malta.py
-F: tests/acceptance/machine_mips_malta.py
+F: tests/avocado/linux_ssh_mips_malta.py
+F: tests/avocado/machine_mips_malta.py
 
 
 Mipssim
 Mipssim
 R: Aleksandar Rikalo <aleksandar.rikalo@syrmia.com>
 R: Aleksandar Rikalo <aleksandar.rikalo@syrmia.com>
@@ -1211,7 +1211,7 @@ F: hw/isa/vt82c686.c
 F: hw/pci-host/bonito.c
 F: hw/pci-host/bonito.c
 F: hw/usb/vt82c686-uhci-pci.c
 F: hw/usb/vt82c686-uhci-pci.c
 F: include/hw/isa/vt82c686.h
 F: include/hw/isa/vt82c686.h
-F: tests/acceptance/machine_mips_fuloong2e.py
+F: tests/avocado/machine_mips_fuloong2e.py
 
 
 Loongson-3 virtual platforms
 Loongson-3 virtual platforms
 M: Huacai Chen <chenhuacai@kernel.org>
 M: Huacai Chen <chenhuacai@kernel.org>
@@ -1221,7 +1221,7 @@ F: hw/intc/loongson_liointc.c
 F: hw/mips/loongson3_bootp.c
 F: hw/mips/loongson3_bootp.c
 F: hw/mips/loongson3_bootp.h
 F: hw/mips/loongson3_bootp.h
 F: hw/mips/loongson3_virt.c
 F: hw/mips/loongson3_virt.c
-F: tests/acceptance/machine_mips_loongson3v.py
+F: tests/avocado/machine_mips_loongson3v.py
 
 
 Boston
 Boston
 M: Paul Burton <paulburton@kernel.org>
 M: Paul Burton <paulburton@kernel.org>
@@ -1250,7 +1250,7 @@ Bamboo
 L: qemu-ppc@nongnu.org
 L: qemu-ppc@nongnu.org
 S: Orphan
 S: Orphan
 F: hw/ppc/ppc440_bamboo.c
 F: hw/ppc/ppc440_bamboo.c
-F: tests/acceptance/ppc_bamboo.py
+F: tests/avocado/ppc_bamboo.py
 
 
 e500
 e500
 L: qemu-ppc@nongnu.org
 L: qemu-ppc@nongnu.org
@@ -1271,7 +1271,7 @@ L: qemu-ppc@nongnu.org
 S: Orphan
 S: Orphan
 F: hw/ppc/mpc8544ds.c
 F: hw/ppc/mpc8544ds.c
 F: hw/ppc/mpc8544_guts.c
 F: hw/ppc/mpc8544_guts.c
-F: tests/acceptance/ppc_mpc8544ds.py
+F: tests/avocado/ppc_mpc8544ds.py
 
 
 New World (mac99)
 New World (mac99)
 M: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
 M: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
@@ -1318,7 +1318,7 @@ F: hw/dma/i82374.c
 F: hw/rtc/m48t59-isa.c
 F: hw/rtc/m48t59-isa.c
 F: include/hw/isa/pc87312.h
 F: include/hw/isa/pc87312.h
 F: include/hw/rtc/m48t59.h
 F: include/hw/rtc/m48t59.h
-F: tests/acceptance/ppc_prep_40p.py
+F: tests/avocado/ppc_prep_40p.py
 
 
 sPAPR
 sPAPR
 M: David Gibson <david@gibson.dropbear.id.au>
 M: David Gibson <david@gibson.dropbear.id.au>
@@ -1336,7 +1336,7 @@ F: tests/qtest/spapr*
 F: tests/qtest/libqos/*spapr*
 F: tests/qtest/libqos/*spapr*
 F: tests/qtest/rtas*
 F: tests/qtest/rtas*
 F: tests/qtest/libqos/rtas*
 F: tests/qtest/libqos/rtas*
-F: tests/acceptance/ppc_pseries.py
+F: tests/avocado/ppc_pseries.py
 
 
 PowerNV (Non-Virtualized)
 PowerNV (Non-Virtualized)
 M: Cédric Le Goater <clg@kaod.org>
 M: Cédric Le Goater <clg@kaod.org>
@@ -1356,7 +1356,7 @@ M: Edgar E. Iglesias <edgar.iglesias@gmail.com>
 L: qemu-ppc@nongnu.org
 L: qemu-ppc@nongnu.org
 S: Odd Fixes
 S: Odd Fixes
 F: hw/ppc/virtex_ml507.c
 F: hw/ppc/virtex_ml507.c
-F: tests/acceptance/ppc_virtex_ml507.py
+F: tests/avocado/ppc_virtex_ml507.py
 
 
 sam460ex
 sam460ex
 M: BALATON Zoltan <balaton@eik.bme.hu>
 M: BALATON Zoltan <balaton@eik.bme.hu>
@@ -1443,7 +1443,7 @@ R: Yoshinori Sato <ysato@users.sourceforge.jp>
 S: Orphan
 S: Orphan
 F: docs/system/target-rx.rst
 F: docs/system/target-rx.rst
 F: hw/rx/rx-gdbsim.c
 F: hw/rx/rx-gdbsim.c
-F: tests/acceptance/machine_rx_gdbsim.py
+F: tests/avocado/machine_rx_gdbsim.py
 
 
 SH4 Machines
 SH4 Machines
 ------------
 ------------
@@ -1497,7 +1497,7 @@ F: include/hw/pci-host/sabre.h
 F: hw/pci-bridge/simba.c
 F: hw/pci-bridge/simba.c
 F: include/hw/pci-bridge/simba.h
 F: include/hw/pci-bridge/simba.h
 F: pc-bios/openbios-sparc64
 F: pc-bios/openbios-sparc64
-F: tests/acceptance/machine_sparc64_sun4u.py
+F: tests/avocado/machine_sparc64_sun4u.py
 
 
 Sun4v
 Sun4v
 M: Artyom Tarasenko <atar4qemu@gmail.com>
 M: Artyom Tarasenko <atar4qemu@gmail.com>
@@ -1513,7 +1513,7 @@ S: Maintained
 F: hw/sparc/leon3.c
 F: hw/sparc/leon3.c
 F: hw/*/grlib*
 F: hw/*/grlib*
 F: include/hw/*/grlib*
 F: include/hw/*/grlib*
-F: tests/acceptance/machine_sparc_leon3.py
+F: tests/avocado/machine_sparc_leon3.py
 
 
 S390 Machines
 S390 Machines
 -------------
 -------------
@@ -1528,7 +1528,7 @@ F: include/hw/s390x/
 F: hw/watchdog/wdt_diag288.c
 F: hw/watchdog/wdt_diag288.c
 F: include/hw/watchdog/wdt_diag288.h
 F: include/hw/watchdog/wdt_diag288.h
 F: configs/devices/s390x-softmmu/default.mak
 F: configs/devices/s390x-softmmu/default.mak
-F: tests/acceptance/machine_s390_ccw_virtio.py
+F: tests/avocado/machine_s390_ccw_virtio.py
 T: git https://github.com/borntraeger/qemu.git s390-next
 T: git https://github.com/borntraeger/qemu.git s390-next
 L: qemu-s390x@nongnu.org
 L: qemu-s390x@nongnu.org
 
 
@@ -2112,7 +2112,7 @@ M: Alex Bennée <alex.bennee@linaro.org>
 S: Maintained
 S: Maintained
 F: hw/core/guest-loader.c
 F: hw/core/guest-loader.c
 F: docs/system/guest-loader.rst
 F: docs/system/guest-loader.rst
-F: tests/acceptance/boot_xen.py
+F: tests/avocado/boot_xen.py
 
 
 Intel Hexadecimal Object File Loader
 Intel Hexadecimal Object File Loader
 M: Su Hang <suhang16@mails.ucas.ac.cn>
 M: Su Hang <suhang16@mails.ucas.ac.cn>
@@ -2986,9 +2986,9 @@ F: net/filter-replay.c
 F: include/sysemu/replay.h
 F: include/sysemu/replay.h
 F: docs/replay.txt
 F: docs/replay.txt
 F: stubs/replay.c
 F: stubs/replay.c
-F: tests/acceptance/replay_kernel.py
-F: tests/acceptance/replay_linux.py
-F: tests/acceptance/reverse_debugging.py
+F: tests/avocado/replay_kernel.py
+F: tests/avocado/replay_linux.py
+F: tests/avocado/reverse_debugging.py
 F: qapi/replay.json
 F: qapi/replay.json
 
 
 IOVA Tree
 IOVA Tree
@@ -3105,7 +3105,7 @@ S: Maintained
 F: docs/devel/tcg-plugins.rst
 F: docs/devel/tcg-plugins.rst
 F: plugins/
 F: plugins/
 F: tests/plugin/
 F: tests/plugin/
-F: tests/acceptance/tcg_plugins.py
+F: tests/avocado/tcg_plugins.py
 F: contrib/plugins/
 F: contrib/plugins/
 
 
 AArch64 TCG target
 AArch64 TCG target
@@ -3494,14 +3494,14 @@ S: Maintained
 F: tests/tcg/Makefile
 F: tests/tcg/Makefile
 F: tests/tcg/Makefile.include
 F: tests/tcg/Makefile.include
 
 
-Acceptance (Integration) Testing with the Avocado framework
+Integration Testing with the Avocado framework
 W: https://trello.com/b/6Qi1pxVn/avocado-qemu
 W: https://trello.com/b/6Qi1pxVn/avocado-qemu
 R: Cleber Rosa <crosa@redhat.com>
 R: Cleber Rosa <crosa@redhat.com>
 R: Philippe Mathieu-Daudé <philmd@redhat.com>
 R: Philippe Mathieu-Daudé <philmd@redhat.com>
 R: Wainer dos Santos Moschetta <wainersm@redhat.com>
 R: Wainer dos Santos Moschetta <wainersm@redhat.com>
 R: Willian Rampazzo <willianr@redhat.com>
 R: Willian Rampazzo <willianr@redhat.com>
 S: Odd Fixes
 S: Odd Fixes
-F: tests/acceptance/
+F: tests/avocado/
 
 
 Documentation
 Documentation
 -------------
 -------------

+ 1 - 1
configure

@@ -3838,7 +3838,7 @@ LINKS="$LINKS pc-bios/s390-ccw/Makefile"
 LINKS="$LINKS roms/seabios/Makefile"
 LINKS="$LINKS roms/seabios/Makefile"
 LINKS="$LINKS pc-bios/qemu-icon.bmp"
 LINKS="$LINKS pc-bios/qemu-icon.bmp"
 LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
 LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
-LINKS="$LINKS tests/acceptance tests/data"
+LINKS="$LINKS tests/avocado tests/data"
 LINKS="$LINKS tests/qemu-iotests/check"
 LINKS="$LINKS tests/qemu-iotests/check"
 LINKS="$LINKS python"
 LINKS="$LINKS python"
 LINKS="$LINKS contrib/plugins/Makefile "
 LINKS="$LINKS contrib/plugins/Makefile "

+ 1 - 1
docs/devel/build-system.rst

@@ -416,7 +416,7 @@ number of dynamically created files listed later.
 
 
 ``tests/Makefile.include``
 ``tests/Makefile.include``
   Rules for external test harnesses. These include the TCG tests,
   Rules for external test harnesses. These include the TCG tests,
-  ``qemu-iotests`` and the Avocado-based acceptance tests.
+  ``qemu-iotests`` and the Avocado-based integration tests.
 
 
 ``tests/docker/Makefile.include``
 ``tests/docker/Makefile.include``
   Rules for Docker tests. Like tests/Makefile, this file is included
   Rules for Docker tests. Like tests/Makefile, this file is included

+ 1 - 1
docs/devel/ci-definitions.rst.inc

@@ -59,7 +59,7 @@ to system testing [5]_. Note that, in some cases, system testing may require
 interaction with third-party software, like operating system images, databases,
 interaction with third-party software, like operating system images, databases,
 networks, and so on.
 networks, and so on.
 
 
-On QEMU, system testing is represented by the 'check-acceptance' target from
+On QEMU, system testing is represented by the 'check-avocado' target from
 'make'.
 'make'.
 
 
 Flaky tests
 Flaky tests

+ 28 - 29
docs/devel/testing.rst

@@ -653,17 +653,16 @@ supported. To start the fuzzer, run
 Alternatively, some command different from "qemu-img info" can be tested, by
 Alternatively, some command different from "qemu-img info" can be tested, by
 changing the ``-c`` option.
 changing the ``-c`` option.
 
 
-Acceptance tests using the Avocado Framework
---------------------------------------------
+Integration tests using the Avocado Framework
+---------------------------------------------
 
 
-The ``tests/acceptance`` directory hosts functional tests, also known
-as acceptance level tests.  They're usually higher level tests, and
-may interact with external resources and with various guest operating
-systems.
+The ``tests/avocado`` directory hosts integration tests. They're usually
+higher level tests, and may interact with external resources and with
+various guest operating systems.
 
 
 These tests are written using the Avocado Testing Framework (which must
 These tests are written using the Avocado Testing Framework (which must
 be installed separately) in conjunction with a the ``avocado_qemu.Test``
 be installed separately) in conjunction with a the ``avocado_qemu.Test``
-class, implemented at ``tests/acceptance/avocado_qemu``.
+class, implemented at ``tests/avocado/avocado_qemu``.
 
 
 Tests based on ``avocado_qemu.Test`` can easily:
 Tests based on ``avocado_qemu.Test`` can easily:
 
 
@@ -695,11 +694,11 @@ Tests based on ``avocado_qemu.Test`` can easily:
 Running tests
 Running tests
 ~~~~~~~~~~~~~
 ~~~~~~~~~~~~~
 
 
-You can run the acceptance tests simply by executing:
+You can run the avocado tests simply by executing:
 
 
 .. code::
 .. code::
 
 
-  make check-acceptance
+  make check-avocado
 
 
 This involves the automatic creation of Python virtual environment
 This involves the automatic creation of Python virtual environment
 within the build tree (at ``tests/venv``) which will have all the
 within the build tree (at ``tests/venv``) which will have all the
@@ -714,12 +713,12 @@ specific version, they may be on packages named ``python3-venv`` and
 ``python3-pip``.
 ``python3-pip``.
 
 
 It is also possible to run tests based on tags using the
 It is also possible to run tests based on tags using the
-``make check-acceptance`` command and the ``AVOCADO_TAGS`` environment
+``make check-avocado`` command and the ``AVOCADO_TAGS`` environment
 variable:
 variable:
 
 
 .. code::
 .. code::
 
 
-   make check-acceptance AVOCADO_TAGS=quick
+   make check-avocado AVOCADO_TAGS=quick
 
 
 Note that tags separated with commas have an AND behavior, while tags
 Note that tags separated with commas have an AND behavior, while tags
 separated by spaces have an OR behavior. For more information on Avocado
 separated by spaces have an OR behavior. For more information on Avocado
@@ -728,31 +727,31 @@ tags, see:
  https://avocado-framework.readthedocs.io/en/latest/guides/user/chapters/tags.html
  https://avocado-framework.readthedocs.io/en/latest/guides/user/chapters/tags.html
 
 
 To run a single test file, a couple of them, or a test within a file
 To run a single test file, a couple of them, or a test within a file
-using the ``make check-acceptance`` command, set the ``AVOCADO_TESTS``
+using the ``make check-avocado`` command, set the ``AVOCADO_TESTS``
 environment variable with the test files or test names. To run all
 environment variable with the test files or test names. To run all
 tests from a single file, use:
 tests from a single file, use:
 
 
  .. code::
  .. code::
 
 
-  make check-acceptance AVOCADO_TESTS=$FILEPATH
+  make check-avocado AVOCADO_TESTS=$FILEPATH
 
 
 The same is valid to run tests from multiple test files:
 The same is valid to run tests from multiple test files:
 
 
  .. code::
  .. code::
 
 
-  make check-acceptance AVOCADO_TESTS='$FILEPATH1 $FILEPATH2'
+  make check-avocado AVOCADO_TESTS='$FILEPATH1 $FILEPATH2'
 
 
 To run a single test within a file, use:
 To run a single test within a file, use:
 
 
  .. code::
  .. code::
 
 
-  make check-acceptance AVOCADO_TESTS=$FILEPATH:$TESTCLASS.$TESTNAME
+  make check-avocado AVOCADO_TESTS=$FILEPATH:$TESTCLASS.$TESTNAME
 
 
 The same is valid to run single tests from multiple test files:
 The same is valid to run single tests from multiple test files:
 
 
  .. code::
  .. code::
 
 
-  make check-acceptance AVOCADO_TESTS='$FILEPATH1:$TESTCLASS1.$TESTNAME1 $FILEPATH2:$TESTCLASS2.$TESTNAME2'
+  make check-avocado AVOCADO_TESTS='$FILEPATH1:$TESTCLASS1.$TESTNAME1 $FILEPATH2:$TESTCLASS2.$TESTNAME2'
 
 
 The scripts installed inside the virtual environment may be used
 The scripts installed inside the virtual environment may be used
 without an "activation".  For instance, the Avocado test runner
 without an "activation".  For instance, the Avocado test runner
@@ -760,9 +759,9 @@ may be invoked by running:
 
 
  .. code::
  .. code::
 
 
-  tests/venv/bin/avocado run $OPTION1 $OPTION2 tests/acceptance/
+  tests/venv/bin/avocado run $OPTION1 $OPTION2 tests/avocado/
 
 
-Note that if ``make check-acceptance`` was not executed before, it is
+Note that if ``make check-avocado`` was not executed before, it is
 possible to create the Python virtual environment with the dependencies
 possible to create the Python virtual environment with the dependencies
 needed running:
 needed running:
 
 
@@ -775,20 +774,20 @@ a test file. To run tests from a single file within the build tree, use:
 
 
  .. code::
  .. code::
 
 
-  tests/venv/bin/avocado run tests/acceptance/$TESTFILE
+  tests/venv/bin/avocado run tests/avocado/$TESTFILE
 
 
 To run a single test within a test file, use:
 To run a single test within a test file, use:
 
 
  .. code::
  .. code::
 
 
-  tests/venv/bin/avocado run tests/acceptance/$TESTFILE:$TESTCLASS.$TESTNAME
+  tests/venv/bin/avocado run tests/avocado/$TESTFILE:$TESTCLASS.$TESTNAME
 
 
 Valid test names are visible in the output from any previous execution
 Valid test names are visible in the output from any previous execution
-of Avocado or ``make check-acceptance``, and can also be queried using:
+of Avocado or ``make check-avocado``, and can also be queried using:
 
 
  .. code::
  .. code::
 
 
-  tests/venv/bin/avocado list tests/acceptance
+  tests/venv/bin/avocado list tests/avocado
 
 
 Manual Installation
 Manual Installation
 ~~~~~~~~~~~~~~~~~~~
 ~~~~~~~~~~~~~~~~~~~
@@ -806,16 +805,16 @@ Alternatively, follow the instructions on this link:
 Overview
 Overview
 ~~~~~~~~
 ~~~~~~~~
 
 
-The ``tests/acceptance/avocado_qemu`` directory provides the
+The ``tests/avocado/avocado_qemu`` directory provides the
 ``avocado_qemu`` Python module, containing the ``avocado_qemu.Test``
 ``avocado_qemu`` Python module, containing the ``avocado_qemu.Test``
 class.  Here's a simple usage example:
 class.  Here's a simple usage example:
 
 
 .. code::
 .. code::
 
 
-  from avocado_qemu import Test
+  from avocado_qemu import QemuSystemTest
 
 
 
 
-  class Version(Test):
+  class Version(QemuSystemTest):
       """
       """
       :avocado: tags=quick
       :avocado: tags=quick
       """
       """
@@ -860,10 +859,10 @@ and hypothetical example follows:
 
 
 .. code::
 .. code::
 
 
-  from avocado_qemu import Test
+  from avocado_qemu import QemuSystemTest
 
 
 
 
-  class MultipleMachines(Test):
+  class MultipleMachines(QemuSystemTest):
       def test_multiple_machines(self):
       def test_multiple_machines(self):
           first_machine = self.get_vm()
           first_machine = self.get_vm()
           second_machine = self.get_vm()
           second_machine = self.get_vm()
@@ -913,7 +912,7 @@ like this:
           self.ssh_command('some_command_to_be_run_in_the_guest')
           self.ssh_command('some_command_to_be_run_in_the_guest')
 
 
 Please refer to tests that use ``avocado_qemu.LinuxTest`` under
 Please refer to tests that use ``avocado_qemu.LinuxTest`` under
-``tests/acceptance`` for more examples.
+``tests/avocado`` for more examples.
 
 
 QEMUMachine
 QEMUMachine
 ~~~~~~~~~~~
 ~~~~~~~~~~~
@@ -1204,7 +1203,7 @@ And remove any package you want with::
 
 
   pip uninstall <package_name>
   pip uninstall <package_name>
 
 
-If you've used ``make check-acceptance``, the Python virtual environment where
+If you've used ``make check-avocado``, the Python virtual environment where
 Avocado is installed will be cleaned up as part of ``make check-clean``.
 Avocado is installed will be cleaned up as part of ``make check-clean``.
 
 
 .. _checktcg-ref:
 .. _checktcg-ref:

+ 4 - 4
docs/system/arm/orangepi.rst

@@ -250,14 +250,14 @@ and set the following environment variables before booting:
 Optionally you may save the environment variables to SD card with 'saveenv'.
 Optionally you may save the environment variables to SD card with 'saveenv'.
 To continue booting simply give the 'boot' command and NetBSD boots.
 To continue booting simply give the 'boot' command and NetBSD boots.
 
 
-Orange Pi PC acceptance tests
-"""""""""""""""""""""""""""""
+Orange Pi PC integration tests
+""""""""""""""""""""""""""""""
 
 
-The Orange Pi PC machine has several acceptance tests included.
+The Orange Pi PC machine has several integration tests included.
 To run the whole set of tests, build QEMU from source and simply
 To run the whole set of tests, build QEMU from source and simply
 provide the following command:
 provide the following command:
 
 
 .. code-block:: bash
 .. code-block:: bash
 
 
   $ AVOCADO_ALLOW_LARGE_STORAGE=yes avocado --show=app,console run \
   $ AVOCADO_ALLOW_LARGE_STORAGE=yes avocado --show=app,console run \
-     -t machine:orangepi-pc tests/acceptance/boot_linux_console.py
+     -t machine:orangepi-pc tests/avocado/boot_linux_console.py

+ 1 - 1
python/qemu/machine/README.rst

@@ -2,7 +2,7 @@ qemu.machine package
 ====================
 ====================
 
 
 This package provides core utilities used for testing and debugging
 This package provides core utilities used for testing and debugging
-QEMU. It is used by the iotests, vm tests, acceptance tests, and several
+QEMU. It is used by the iotests, vm tests, avocado tests, and several
 other utilities in the ./scripts directory. It is not a fully-fledged
 other utilities in the ./scripts directory. It is not a fully-fledged
 SDK and it is subject to change at any time.
 SDK and it is subject to change at any time.
 
 

+ 1 - 1
python/qemu/qmp/README.rst

@@ -3,7 +3,7 @@ qemu.qmp package
 
 
 This package provides a library used for connecting to and communicating
 This package provides a library used for connecting to and communicating
 with QMP servers. It is used extensively by iotests, vm tests,
 with QMP servers. It is used extensively by iotests, vm tests,
-acceptance tests, and other utilities in the ./scripts directory. It is
+avocado tests, and other utilities in the ./scripts directory. It is
 not a fully-fledged SDK and is subject to change at any time.
 not a fully-fledged SDK and is subject to change at any time.
 
 
 See the documentation in ``__init__.py`` for more information.
 See the documentation in ``__init__.py`` for more information.

+ 1 - 1
python/qemu/utils/README.rst

@@ -2,6 +2,6 @@ qemu.utils package
 ==================
 ==================
 
 
 This package provides miscellaneous utilities used for testing and
 This package provides miscellaneous utilities used for testing and
-debugging QEMU. It is used primarily by the vm and acceptance tests.
+debugging QEMU. It is used primarily by the vm and avocado tests.
 
 
 See the documentation in ``__init__.py`` for more information.
 See the documentation in ``__init__.py`` for more information.

+ 14 - 7
tests/Makefile.include

@@ -16,7 +16,7 @@ ifneq ($(filter $(all-check-targets), check-softfloat),)
 	@echo " $(MAKE) check-tcg            Run TCG tests"
 	@echo " $(MAKE) check-tcg            Run TCG tests"
 	@echo " $(MAKE) check-softfloat      Run FPU emulation tests"
 	@echo " $(MAKE) check-softfloat      Run FPU emulation tests"
 endif
 endif
-	@echo " $(MAKE) check-acceptance     Run acceptance (functional) tests for currently configured targets"
+	@echo " $(MAKE) check-avocado        Run avocado (integration) tests for currently configured targets"
 	@echo
 	@echo
 	@echo " $(MAKE) check-report.tap     Generates an aggregated TAP test report"
 	@echo " $(MAKE) check-report.tap     Generates an aggregated TAP test report"
 	@echo " $(MAKE) check-venv           Creates a Python venv for tests"
 	@echo " $(MAKE) check-venv           Creates a Python venv for tests"
@@ -24,7 +24,7 @@ endif
 	@echo
 	@echo
 	@echo "The following are useful for CI builds"
 	@echo "The following are useful for CI builds"
 	@echo " $(MAKE) check-build          Build most test binaris"
 	@echo " $(MAKE) check-build          Build most test binaris"
-	@echo " $(MAKE) get-vm-images        Downloads all images used by acceptance tests, according to configured targets (~350 MB each, 1.5 GB max)"
+	@echo " $(MAKE) get-vm-images        Downloads all images used by avocado tests, according to configured targets (~350 MB each, 1.5 GB max)"
 	@echo
 	@echo
 	@echo
 	@echo
 	@echo "The variable SPEED can be set to control the gtester speed setting."
 	@echo "The variable SPEED can be set to control the gtester speed setting."
@@ -83,13 +83,13 @@ clean-tcg: $(CLEAN_TCG_TARGET_RULES)
 
 
 # Python venv for running tests
 # Python venv for running tests
 
 
-.PHONY: check-venv check-acceptance
+.PHONY: check-venv check-avocado check-acceptance check-acceptance-deprecated-warning
 
 
 TESTS_VENV_DIR=$(BUILD_DIR)/tests/venv
 TESTS_VENV_DIR=$(BUILD_DIR)/tests/venv
 TESTS_VENV_REQ=$(SRC_PATH)/tests/requirements.txt
 TESTS_VENV_REQ=$(SRC_PATH)/tests/requirements.txt
 TESTS_RESULTS_DIR=$(BUILD_DIR)/tests/results
 TESTS_RESULTS_DIR=$(BUILD_DIR)/tests/results
 ifndef AVOCADO_TESTS
 ifndef AVOCADO_TESTS
-	AVOCADO_TESTS=tests/acceptance
+	AVOCADO_TESTS=tests/avocado
 endif
 endif
 # Controls the output generated by Avocado when running tests.
 # Controls the output generated by Avocado when running tests.
 # Any number of command separated loggers are accepted.  For more
 # Any number of command separated loggers are accepted.  For more
@@ -127,12 +127,12 @@ get-vm-image-fedora-31-%: check-venv
 	$(call quiet-command, \
 	$(call quiet-command, \
              $(TESTS_VENV_DIR)/bin/python -m avocado vmimage get \
              $(TESTS_VENV_DIR)/bin/python -m avocado vmimage get \
              --distro=fedora --distro-version=31 --arch=$*, \
              --distro=fedora --distro-version=31 --arch=$*, \
-	"AVOCADO", "Downloading acceptance tests VM image for $*")
+	"AVOCADO", "Downloading avocado tests VM image for $*")
 
 
 # download all vm images, according to defined targets
 # download all vm images, according to defined targets
 get-vm-images: check-venv $(patsubst %,get-vm-image-fedora-31-%, $(FEDORA_31_DOWNLOAD))
 get-vm-images: check-venv $(patsubst %,get-vm-image-fedora-31-%, $(FEDORA_31_DOWNLOAD))
 
 
-check-acceptance: check-venv $(TESTS_RESULTS_DIR) get-vm-images
+check-avocado: check-venv $(TESTS_RESULTS_DIR) get-vm-images
 	$(call quiet-command, \
 	$(call quiet-command, \
             $(TESTS_VENV_DIR)/bin/python -m avocado \
             $(TESTS_VENV_DIR)/bin/python -m avocado \
             --show=$(AVOCADO_SHOW) run --job-results-dir=$(TESTS_RESULTS_DIR) \
             --show=$(AVOCADO_SHOW) run --job-results-dir=$(TESTS_RESULTS_DIR) \
@@ -140,7 +140,14 @@ check-acceptance: check-venv $(TESTS_RESULTS_DIR) get-vm-images
 			--filter-by-tags-include-empty-key) \
 			--filter-by-tags-include-empty-key) \
             $(AVOCADO_CMDLINE_TAGS) \
             $(AVOCADO_CMDLINE_TAGS) \
             $(if $(GITLAB_CI),,--failfast) $(AVOCADO_TESTS), \
             $(if $(GITLAB_CI),,--failfast) $(AVOCADO_TESTS), \
-            "AVOCADO", "tests/acceptance")
+            "AVOCADO", "tests/avocado")
+
+check-acceptance-deprecated-warning:
+	@echo
+	@echo "Note '$(MAKE) check-acceptance' is deprecated, use '$(MAKE) check-avocado' instead."
+	@echo
+
+check-acceptance: check-acceptance-deprecated-warning | check-avocado
 
 
 # Consolidated targets
 # Consolidated targets
 
 

+ 0 - 10
tests/acceptance/README.rst

@@ -1,10 +0,0 @@
-============================================
-Acceptance tests using the Avocado Framework
-============================================
-
-This directory contains functional tests, also known as acceptance
-level tests.  They're usually higher level, and may interact with
-external resources and with various guest operating systems.
-
-For more information, please refer to ``docs/devel/testing.rst``,
-section "Acceptance tests using the Avocado Framework".

+ 10 - 0
tests/avocado/README.rst

@@ -0,0 +1,10 @@
+=============================================
+Integration tests using the Avocado Framework
+=============================================
+
+This directory contains integration tests. They're usually higher
+level, and may interact with external resources and with various
+guest operating systems.
+
+For more information, please refer to ``docs/devel/testing.rst``,
+section "Integration tests using the Avocado Framework".

+ 122 - 41
tests/acceptance/avocado_qemu/__init__.py → tests/avocado/avocado_qemu/__init__.py

@@ -11,13 +11,14 @@
 import logging
 import logging
 import os
 import os
 import shutil
 import shutil
+import subprocess
 import sys
 import sys
 import tempfile
 import tempfile
 import time
 import time
 import uuid
 import uuid
 
 
 import avocado
 import avocado
-from avocado.utils import cloudinit, datadrainer, network, ssh, vmimage
+from avocado.utils import cloudinit, datadrainer, network, process, ssh, vmimage
 from avocado.utils.path import find_command
 from avocado.utils.path import find_command
 
 
 #: The QEMU build root directory.  It may also be the source directory
 #: The QEMU build root directory.  It may also be the source directory
@@ -27,7 +28,7 @@
 BUILD_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
 BUILD_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
 
 
 if os.path.islink(os.path.dirname(os.path.dirname(__file__))):
 if os.path.islink(os.path.dirname(os.path.dirname(__file__))):
-    # The link to the acceptance tests dir in the source code directory
+    # The link to the avocado tests dir in the source code directory
     lnk = os.path.dirname(os.path.dirname(__file__))
     lnk = os.path.dirname(os.path.dirname(__file__))
     #: The QEMU root source directory
     #: The QEMU root source directory
     SOURCE_DIR = os.path.dirname(os.path.dirname(os.readlink(lnk)))
     SOURCE_DIR = os.path.dirname(os.path.dirname(os.readlink(lnk)))
@@ -41,11 +42,67 @@
                         tcg_available)
                         tcg_available)
 
 
 
 
+def has_cmd(name, args=None):
+    """
+    This function is for use in a @avocado.skipUnless decorator, e.g.:
+
+        @skipUnless(*has_cmd('sudo -n', ('sudo', '-n', 'true')))
+        def test_something_that_needs_sudo(self):
+            ...
+    """
+
+    if args is None:
+        args = ('which', name)
+
+    try:
+        _, stderr, exitcode = run_cmd(args)
+    except Exception as e:
+        exitcode = -1
+        stderr = str(e)
+
+    if exitcode != 0:
+        cmd_line = ' '.join(args)
+        err = f'{name} required, but "{cmd_line}" failed: {stderr.strip()}'
+        return (False, err)
+    else:
+        return (True, '')
+
+def has_cmds(*cmds):
+    """
+    This function is for use in a @avocado.skipUnless decorator and
+    allows checking for the availability of multiple commands, e.g.:
+
+        @skipUnless(*has_cmds(('cmd1', ('cmd1', '--some-parameter')),
+                              'cmd2', 'cmd3'))
+        def test_something_that_needs_cmd1_and_cmd2(self):
+            ...
+    """
+
+    for cmd in cmds:
+        if isinstance(cmd, str):
+            cmd = (cmd,)
+
+        ok, errstr = has_cmd(*cmd)
+        if not ok:
+            return (False, errstr)
+
+    return (True, '')
+
+def run_cmd(args):
+    subp = subprocess.Popen(args,
+                            stdout=subprocess.PIPE,
+                            stderr=subprocess.PIPE,
+                            universal_newlines=True)
+    stdout, stderr = subp.communicate()
+    ret = subp.returncode
+
+    return (stdout, stderr, ret)
+
 def is_readable_executable_file(path):
 def is_readable_executable_file(path):
     return os.path.isfile(path) and os.access(path, os.R_OK | os.X_OK)
     return os.path.isfile(path) and os.access(path, os.R_OK | os.X_OK)
 
 
 
 
-def pick_default_qemu_bin(arch=None):
+def pick_default_qemu_bin(bin_prefix='qemu-system-', arch=None):
     """
     """
     Picks the path of a QEMU binary, starting either in the current working
     Picks the path of a QEMU binary, starting either in the current working
     directory or in the source tree root directory.
     directory or in the source tree root directory.
@@ -64,7 +121,7 @@ def pick_default_qemu_bin(arch=None):
     # qemu binary path does not match arch for powerpc, handle it
     # qemu binary path does not match arch for powerpc, handle it
     if 'ppc64le' in arch:
     if 'ppc64le' in arch:
         arch = 'ppc64'
         arch = 'ppc64'
-    qemu_bin_relative_path = "./qemu-system-%s" % arch
+    qemu_bin_relative_path = os.path.join(".", bin_prefix + arch)
     if is_readable_executable_file(qemu_bin_relative_path):
     if is_readable_executable_file(qemu_bin_relative_path):
         return qemu_bin_relative_path
         return qemu_bin_relative_path
 
 
@@ -119,7 +176,7 @@ def interrupt_interactive_console_until_pattern(test, success_message,
 
 
     :param test: an Avocado test containing a VM that will have its console
     :param test: an Avocado test containing a VM that will have its console
                  read and probed for a success or failure message
                  read and probed for a success or failure message
-    :type test: :class:`avocado_qemu.Test`
+    :type test: :class:`avocado_qemu.QemuSystemTest`
     :param success_message: if this message appears, test succeeds
     :param success_message: if this message appears, test succeeds
     :param failure_message: if this message appears, test fails
     :param failure_message: if this message appears, test fails
     :param interrupt_string: a string to send to the console before trying
     :param interrupt_string: a string to send to the console before trying
@@ -135,7 +192,7 @@ def wait_for_console_pattern(test, success_message, failure_message=None,
 
 
     :param test: an Avocado test containing a VM that will have its console
     :param test: an Avocado test containing a VM that will have its console
                  read and probed for a success or failure message
                  read and probed for a success or failure message
-    :type test: :class:`avocado_qemu.Test`
+    :type test: :class:`avocado_qemu.QemuSystemTest`
     :param success_message: if this message appears, test succeeds
     :param success_message: if this message appears, test succeeds
     :param failure_message: if this message appears, test fails
     :param failure_message: if this message appears, test fails
     """
     """
@@ -147,7 +204,7 @@ def exec_command(test, command):
     the content.
     the content.
 
 
     :param test: an Avocado test containing a VM.
     :param test: an Avocado test containing a VM.
-    :type test: :class:`avocado_qemu.Test`
+    :type test: :class:`avocado_qemu.QemuSystemTest`
     :param command: the command to send
     :param command: the command to send
     :type command: str
     :type command: str
     """
     """
@@ -162,14 +219,14 @@ def exec_command_and_wait_for_pattern(test, command,
 
 
     :param test: an Avocado test containing a VM that will have its console
     :param test: an Avocado test containing a VM that will have its console
                  read and probed for a success or failure message
                  read and probed for a success or failure message
-    :type test: :class:`avocado_qemu.Test`
+    :type test: :class:`avocado_qemu.QemuSystemTest`
     :param command: the command to send
     :param command: the command to send
     :param success_message: if this message appears, test succeeds
     :param success_message: if this message appears, test succeeds
     :param failure_message: if this message appears, test fails
     :param failure_message: if this message appears, test fails
     """
     """
     _console_interaction(test, success_message, failure_message, command + '\r')
     _console_interaction(test, success_message, failure_message, command + '\r')
 
 
-class Test(avocado.Test):
+class QemuBaseTest(avocado.Test):
     def _get_unique_tag_val(self, tag_name):
     def _get_unique_tag_val(self, tag_name):
         """
         """
         Gets a tag value, if unique for a key
         Gets a tag value, if unique for a key
@@ -179,6 +236,43 @@ def _get_unique_tag_val(self, tag_name):
             return vals.pop()
             return vals.pop()
         return None
         return None
 
 
+    def setUp(self, bin_prefix):
+        self.arch = self.params.get('arch',
+                                    default=self._get_unique_tag_val('arch'))
+
+        self.cpu = self.params.get('cpu',
+                                   default=self._get_unique_tag_val('cpu'))
+
+        default_qemu_bin = pick_default_qemu_bin(bin_prefix, arch=self.arch)
+        self.qemu_bin = self.params.get('qemu_bin',
+                                        default=default_qemu_bin)
+        if self.qemu_bin is None:
+            self.cancel("No QEMU binary defined or found in the build tree")
+
+    def fetch_asset(self, name,
+                    asset_hash=None, algorithm=None,
+                    locations=None, expire=None,
+                    find_only=False, cancel_on_missing=True):
+        return super().fetch_asset(name,
+                        asset_hash=asset_hash,
+                        algorithm=algorithm,
+                        locations=locations,
+                        expire=expire,
+                        find_only=find_only,
+                        cancel_on_missing=cancel_on_missing)
+
+
+class QemuSystemTest(QemuBaseTest):
+    """Facilitates system emulation tests."""
+
+    def setUp(self):
+        self._vms = {}
+
+        super().setUp('qemu-system-')
+
+        self.machine = self.params.get('machine',
+                                       default=self._get_unique_tag_val('machine'))
+
     def require_accelerator(self, accelerator):
     def require_accelerator(self, accelerator):
         """
         """
         Requires an accelerator to be available for the test to continue
         Requires an accelerator to be available for the test to continue
@@ -201,24 +295,6 @@ def require_accelerator(self, accelerator):
             self.cancel("%s accelerator does not seem to be "
             self.cancel("%s accelerator does not seem to be "
                         "available" % accelerator)
                         "available" % accelerator)
 
 
-    def setUp(self):
-        self._vms = {}
-
-        self.arch = self.params.get('arch',
-                                    default=self._get_unique_tag_val('arch'))
-
-        self.cpu = self.params.get('cpu',
-                                   default=self._get_unique_tag_val('cpu'))
-
-        self.machine = self.params.get('machine',
-                                       default=self._get_unique_tag_val('machine'))
-
-        default_qemu_bin = pick_default_qemu_bin(arch=self.arch)
-        self.qemu_bin = self.params.get('qemu_bin',
-                                        default=default_qemu_bin)
-        if self.qemu_bin is None:
-            self.cancel("No QEMU binary defined or found in the build tree")
-
     def _new_vm(self, name, *args):
     def _new_vm(self, name, *args):
         self._sd = tempfile.TemporaryDirectory(prefix="avo_qemu_sock_")
         self._sd = tempfile.TemporaryDirectory(prefix="avo_qemu_sock_")
         vm = QEMUMachine(self.qemu_bin, base_temp_dir=self.workdir,
         vm = QEMUMachine(self.qemu_bin, base_temp_dir=self.workdir,
@@ -272,17 +348,22 @@ def tearDown(self):
         self._sd = None
         self._sd = None
         super().tearDown()
         super().tearDown()
 
 
-    def fetch_asset(self, name,
-                    asset_hash=None, algorithm=None,
-                    locations=None, expire=None,
-                    find_only=False, cancel_on_missing=True):
-        return super().fetch_asset(name,
-                        asset_hash=asset_hash,
-                        algorithm=algorithm,
-                        locations=locations,
-                        expire=expire,
-                        find_only=find_only,
-                        cancel_on_missing=cancel_on_missing)
+
+class QemuUserTest(QemuBaseTest):
+    """Facilitates user-mode emulation tests."""
+
+    def setUp(self):
+        self._ldpath = []
+        super().setUp('qemu-')
+
+    def add_ldpath(self, ldpath):
+        self._ldpath.append(os.path.abspath(ldpath))
+
+    def run(self, bin_path, args=[]):
+        qemu_args = " ".join(["-L %s" % ldpath for ldpath in self._ldpath])
+        bin_args = " ".join(args)
+        return process.run("%s %s %s %s" % (self.qemu_bin, qemu_args,
+                                            bin_path, bin_args))
 
 
 
 
 class LinuxSSHMixIn:
 class LinuxSSHMixIn:
@@ -424,11 +505,11 @@ def default_kernel_params(self):
         return self._info.get('kernel_params', None)
         return self._info.get('kernel_params', None)
 
 
 
 
-class LinuxTest(LinuxSSHMixIn, Test):
+class LinuxTest(LinuxSSHMixIn, QemuSystemTest):
     """Facilitates having a cloud-image Linux based available.
     """Facilitates having a cloud-image Linux based available.
 
 
-    For tests that indend to interact with guests, this is a better choice
-    to start with than the more vanilla `Test` class.
+    For tests that indent to interact with guests, this is a better choice
+    to start with than the more vanilla `QemuSystemTest` class.
     """
     """
 
 
     timeout = 900
     timeout = 900

+ 0 - 0
tests/acceptance/boot_linux.py → tests/avocado/boot_linux.py


+ 2 - 9
tests/acceptance/boot_linux_console.py → tests/avocado/boot_linux_console.py

@@ -15,20 +15,13 @@
 
 
 from avocado import skip
 from avocado import skip
 from avocado import skipUnless
 from avocado import skipUnless
-from avocado_qemu import Test
+from avocado_qemu import QemuSystemTest
 from avocado_qemu import exec_command
 from avocado_qemu import exec_command
 from avocado_qemu import exec_command_and_wait_for_pattern
 from avocado_qemu import exec_command_and_wait_for_pattern
 from avocado_qemu import interrupt_interactive_console_until_pattern
 from avocado_qemu import interrupt_interactive_console_until_pattern
 from avocado_qemu import wait_for_console_pattern
 from avocado_qemu import wait_for_console_pattern
 from avocado.utils import process
 from avocado.utils import process
 from avocado.utils import archive
 from avocado.utils import archive
-from avocado.utils.path import find_command, CmdNotFoundError
-
-P7ZIP_AVAILABLE = True
-try:
-    find_command('7z')
-except CmdNotFoundError:
-    P7ZIP_AVAILABLE = False
 
 
 """
 """
 Round up to next power of 2
 Round up to next power of 2
@@ -46,7 +39,7 @@ def image_pow2ceil_expand(path):
             with open(path, 'ab+') as fd:
             with open(path, 'ab+') as fd:
                 fd.truncate(size_aligned)
                 fd.truncate(size_aligned)
 
 
-class LinuxKernelTest(Test):
+class LinuxKernelTest(QemuSystemTest):
     KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '
     KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '
 
 
     def wait_for_console_pattern(self, success_message, vm=None):
     def wait_for_console_pattern(self, success_message, vm=None):

+ 0 - 0
tests/acceptance/boot_xen.py → tests/avocado/boot_xen.py


+ 2 - 2
tests/acceptance/cpu_queries.py → tests/avocado/cpu_queries.py

@@ -8,9 +8,9 @@
 # This work is licensed under the terms of the GNU GPL, version 2 or
 # This work is licensed under the terms of the GNU GPL, version 2 or
 # later.  See the COPYING file in the top-level directory.
 # later.  See the COPYING file in the top-level directory.
 
 
-from avocado_qemu import Test
+from avocado_qemu import QemuSystemTest
 
 
-class QueryCPUModelExpansion(Test):
+class QueryCPUModelExpansion(QemuSystemTest):
     """
     """
     Run query-cpu-model-expansion for each CPU model, and validate results
     Run query-cpu-model-expansion for each CPU model, and validate results
     """
     """

+ 2 - 2
tests/acceptance/empty_cpu_model.py → tests/avocado/empty_cpu_model.py

@@ -7,9 +7,9 @@
 #
 #
 # This work is licensed under the terms of the GNU GPL, version 2 or
 # This work is licensed under the terms of the GNU GPL, version 2 or
 # later.  See the COPYING file in the top-level directory.
 # later.  See the COPYING file in the top-level directory.
-from avocado_qemu import Test
+from avocado_qemu import QemuSystemTest
 
 
-class EmptyCPUModel(Test):
+class EmptyCPUModel(QemuSystemTest):
     def test(self):
     def test(self):
         self.vm.add_args('-S', '-display', 'none', '-machine', 'none', '-cpu', '')
         self.vm.add_args('-S', '-display', 'none', '-machine', 'none', '-cpu', '')
         self.vm.set_qmp_monitor(enabled=False)
         self.vm.set_qmp_monitor(enabled=False)

+ 0 - 0
tests/acceptance/hotplug_cpu.py → tests/avocado/hotplug_cpu.py


+ 2 - 2
tests/acceptance/info_usernet.py → tests/avocado/info_usernet.py

@@ -8,12 +8,12 @@
 # This work is licensed under the terms of the GNU GPL, version 2 or
 # This work is licensed under the terms of the GNU GPL, version 2 or
 # later.  See the COPYING file in the top-level directory.
 # later.  See the COPYING file in the top-level directory.
 
 
-from avocado_qemu import Test
+from avocado_qemu import QemuSystemTest
 
 
 from qemu.utils import get_info_usernet_hostfwd_port
 from qemu.utils import get_info_usernet_hostfwd_port
 
 
 
 
-class InfoUsernet(Test):
+class InfoUsernet(QemuSystemTest):
 
 
     def test_hostfwd(self):
     def test_hostfwd(self):
         self.vm.add_args('-netdev', 'user,id=vnet,hostfwd=:127.0.0.1:0-:22')
         self.vm.add_args('-netdev', 'user,id=vnet,hostfwd=:127.0.0.1:0-:22')

+ 0 - 0
tests/acceptance/intel_iommu.py → tests/avocado/intel_iommu.py


+ 3 - 3
tests/acceptance/linux_initrd.py → tests/avocado/linux_initrd.py

@@ -1,4 +1,4 @@
-# Linux initrd acceptance test.
+# Linux initrd integration test.
 #
 #
 # Copyright (c) 2018 Red Hat, Inc.
 # Copyright (c) 2018 Red Hat, Inc.
 #
 #
@@ -12,11 +12,11 @@
 import logging
 import logging
 import tempfile
 import tempfile
 
 
-from avocado_qemu import Test
+from avocado_qemu import QemuSystemTest
 from avocado import skipIf
 from avocado import skipIf
 
 
 
 
-class LinuxInitrd(Test):
+class LinuxInitrd(QemuSystemTest):
     """
     """
     Checks QEMU evaluates correctly the initrd file passed as -initrd option.
     Checks QEMU evaluates correctly the initrd file passed as -initrd option.
 
 

+ 3 - 2
tests/acceptance/linux_ssh_mips_malta.py → tests/avocado/linux_ssh_mips_malta.py

@@ -12,7 +12,8 @@
 import time
 import time
 
 
 from avocado import skipUnless
 from avocado import skipUnless
-from avocado_qemu import Test, LinuxSSHMixIn
+from avocado_qemu import LinuxSSHMixIn
+from avocado_qemu import QemuSystemTest
 from avocado_qemu import wait_for_console_pattern
 from avocado_qemu import wait_for_console_pattern
 from avocado.utils import process
 from avocado.utils import process
 from avocado.utils import archive
 from avocado.utils import archive
@@ -21,7 +22,7 @@
 
 
 @skipUnless(os.getenv('AVOCADO_TIMEOUT_EXPECTED'), 'Test might timeout')
 @skipUnless(os.getenv('AVOCADO_TIMEOUT_EXPECTED'), 'Test might timeout')
 @skipUnless(ssh.SSH_CLIENT_BINARY, 'No SSH client available')
 @skipUnless(ssh.SSH_CLIENT_BINARY, 'No SSH client available')
-class LinuxSSH(Test, LinuxSSHMixIn):
+class LinuxSSH(QemuSystemTest, LinuxSSHMixIn):
 
 
     timeout = 150 # Not for 'configure --enable-debug --enable-debug-tcg'
     timeout = 150 # Not for 'configure --enable-debug --enable-debug-tcg'
 
 

+ 54 - 0
tests/avocado/load_bflt.py

@@ -0,0 +1,54 @@
+# Test the bFLT loader format
+#
+# Copyright (C) 2019 Philippe Mathieu-Daudé <f4bug@amsat.org>
+#
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+import os
+import bz2
+import subprocess
+
+from avocado import skipUnless
+from avocado_qemu import QemuUserTest
+from avocado_qemu import has_cmd
+
+
+class LoadBFLT(QemuUserTest):
+
+    def extract_cpio(self, cpio_path):
+        """
+        Extracts a cpio archive into the test workdir
+
+        :param cpio_path: path to the cpio archive
+        """
+        cwd = os.getcwd()
+        os.chdir(self.workdir)
+        with bz2.open(cpio_path, 'rb') as archive_cpio:
+            subprocess.run(['cpio', '-i'], input=archive_cpio.read(),
+                           stderr=subprocess.DEVNULL)
+        os.chdir(cwd)
+
+    @skipUnless(*has_cmd('cpio'))
+    @skipUnless(os.getenv('AVOCADO_ALLOW_UNTRUSTED_CODE'), 'untrusted code')
+    def test_stm32(self):
+        """
+        :avocado: tags=arch:arm
+        :avocado: tags=linux_user
+        :avocado: tags=quick
+        """
+        # See https://elinux.org/STM32#User_Space
+        rootfs_url = ('https://elinux.org/images/5/51/'
+                      'Stm32_mini_rootfs.cpio.bz2')
+        rootfs_hash = '9f065e6ba40cce7411ba757f924f30fcc57951e6'
+        rootfs_path_bz2 = self.fetch_asset(rootfs_url, asset_hash=rootfs_hash)
+        busybox_path = os.path.join(self.workdir, "/bin/busybox")
+
+        self.extract_cpio(rootfs_path_bz2)
+
+        res = self.run(busybox_path)
+        ver = 'BusyBox v1.24.0.git (2015-02-03 22:17:13 CET) multi-call binary.'
+        self.assertIn(ver, res.stdout_text)
+
+        res = self.run(busybox_path, ['uname', '-a'])
+        unm = 'armv7l GNU/Linux'
+        self.assertIn(unm, res.stdout_text)

+ 2 - 2
tests/acceptance/machine_arm_canona1100.py → tests/avocado/machine_arm_canona1100.py

@@ -8,11 +8,11 @@
 # This work is licensed under the terms of the GNU GPL, version 2 or
 # This work is licensed under the terms of the GNU GPL, version 2 or
 # later.  See the COPYING file in the top-level directory.
 # later.  See the COPYING file in the top-level directory.
 
 
-from avocado_qemu import Test
+from avocado_qemu import QemuSystemTest
 from avocado_qemu import wait_for_console_pattern
 from avocado_qemu import wait_for_console_pattern
 from avocado.utils import archive
 from avocado.utils import archive
 
 
-class CanonA1100Machine(Test):
+class CanonA1100Machine(QemuSystemTest):
     """Boots the barebox firmware and checks that the console is operational"""
     """Boots the barebox firmware and checks that the console is operational"""
 
 
     timeout = 90
     timeout = 90

+ 2 - 2
tests/acceptance/machine_arm_integratorcp.py → tests/avocado/machine_arm_integratorcp.py

@@ -12,7 +12,7 @@
 import logging
 import logging
 
 
 from avocado import skipUnless
 from avocado import skipUnless
-from avocado_qemu import Test
+from avocado_qemu import QemuSystemTest
 from avocado_qemu import wait_for_console_pattern
 from avocado_qemu import wait_for_console_pattern
 
 
 
 
@@ -29,7 +29,7 @@
     CV2_AVAILABLE = False
     CV2_AVAILABLE = False
 
 
 
 
-class IntegratorMachine(Test):
+class IntegratorMachine(QemuSystemTest):
 
 
     timeout = 90
     timeout = 90
 
 

+ 2 - 2
tests/acceptance/machine_arm_n8x0.py → tests/avocado/machine_arm_n8x0.py

@@ -11,10 +11,10 @@
 import os
 import os
 
 
 from avocado import skipUnless
 from avocado import skipUnless
-from avocado_qemu import Test
+from avocado_qemu import QemuSystemTest
 from avocado_qemu import wait_for_console_pattern
 from avocado_qemu import wait_for_console_pattern
 
 
-class N8x0Machine(Test):
+class N8x0Machine(QemuSystemTest):
     """Boots the Linux kernel and checks that the console is operational"""
     """Boots the Linux kernel and checks that the console is operational"""
 
 
     timeout = 90
     timeout = 90

+ 3 - 3
tests/acceptance/machine_avr6.py → tests/avocado/machine_avr6.py

@@ -1,5 +1,5 @@
 #
 #
-# QEMU AVR acceptance tests
+# QEMU AVR integration tests
 #
 #
 # Copyright (c) 2019-2020 Michael Rolnik <mrolnik@gmail.com>
 # Copyright (c) 2019-2020 Michael Rolnik <mrolnik@gmail.com>
 #
 #
@@ -19,9 +19,9 @@
 
 
 import time
 import time
 
 
-from avocado_qemu import Test
+from avocado_qemu import QemuSystemTest
 
 
-class AVR6Machine(Test):
+class AVR6Machine(QemuSystemTest):
     timeout = 5
     timeout = 5
 
 
     def test_freertos(self):
     def test_freertos(self):

+ 2 - 2
tests/acceptance/machine_m68k_nextcube.py → tests/avocado/machine_m68k_nextcube.py

@@ -8,7 +8,7 @@
 import os
 import os
 import time
 import time
 
 
-from avocado_qemu import Test
+from avocado_qemu import QemuSystemTest
 from avocado import skipUnless
 from avocado import skipUnless
 
 
 from tesseract_utils import tesseract_available, tesseract_ocr
 from tesseract_utils import tesseract_available, tesseract_ocr
@@ -20,7 +20,7 @@
     PIL_AVAILABLE = False
     PIL_AVAILABLE = False
 
 
 
 
-class NextCubeMachine(Test):
+class NextCubeMachine(QemuSystemTest):
     """
     """
     :avocado: tags=arch:m68k
     :avocado: tags=arch:m68k
     :avocado: tags=machine:next-cube
     :avocado: tags=machine:next-cube

+ 2 - 2
tests/acceptance/machine_microblaze.py → tests/avocado/machine_microblaze.py

@@ -5,11 +5,11 @@
 # This work is licensed under the terms of the GNU GPL, version 2 or
 # This work is licensed under the terms of the GNU GPL, version 2 or
 # later. See the COPYING file in the top-level directory.
 # later. See the COPYING file in the top-level directory.
 
 
-from avocado_qemu import Test
+from avocado_qemu import QemuSystemTest
 from avocado_qemu import wait_for_console_pattern
 from avocado_qemu import wait_for_console_pattern
 from avocado.utils import archive
 from avocado.utils import archive
 
 
-class MicroblazeMachine(Test):
+class MicroblazeMachine(QemuSystemTest):
 
 
     timeout = 90
     timeout = 90
 
 

+ 2 - 2
tests/acceptance/machine_mips_fuloong2e.py → tests/avocado/machine_mips_fuloong2e.py

@@ -10,10 +10,10 @@
 import os
 import os
 
 
 from avocado import skipUnless
 from avocado import skipUnless
-from avocado_qemu import Test
+from avocado_qemu import QemuSystemTest
 from avocado_qemu import wait_for_console_pattern
 from avocado_qemu import wait_for_console_pattern
 
 
-class MipsFuloong2e(Test):
+class MipsFuloong2e(QemuSystemTest):
 
 
     timeout = 60
     timeout = 60
 
 

+ 2 - 2
tests/acceptance/machine_mips_loongson3v.py → tests/avocado/machine_mips_loongson3v.py

@@ -11,10 +11,10 @@
 import time
 import time
 
 
 from avocado import skipUnless
 from avocado import skipUnless
-from avocado_qemu import Test
+from avocado_qemu import QemuSystemTest
 from avocado_qemu import wait_for_console_pattern
 from avocado_qemu import wait_for_console_pattern
 
 
-class MipsLoongson3v(Test):
+class MipsLoongson3v(QemuSystemTest):
     timeout = 60
     timeout = 60
 
 
     @skipUnless(os.getenv('AVOCADO_ALLOW_UNTRUSTED_CODE'), 'untrusted code')
     @skipUnless(os.getenv('AVOCADO_ALLOW_UNTRUSTED_CODE'), 'untrusted code')

+ 2 - 2
tests/acceptance/machine_mips_malta.py → tests/avocado/machine_mips_malta.py

@@ -12,7 +12,7 @@
 import logging
 import logging
 
 
 from avocado import skipUnless
 from avocado import skipUnless
-from avocado_qemu import Test
+from avocado_qemu import QemuSystemTest
 from avocado_qemu import wait_for_console_pattern
 from avocado_qemu import wait_for_console_pattern
 from avocado.utils import archive
 from avocado.utils import archive
 from avocado import skipIf
 from avocado import skipIf
@@ -33,7 +33,7 @@
 
 
 @skipUnless(NUMPY_AVAILABLE, 'Python NumPy not installed')
 @skipUnless(NUMPY_AVAILABLE, 'Python NumPy not installed')
 @skipUnless(CV2_AVAILABLE, 'Python OpenCV not installed')
 @skipUnless(CV2_AVAILABLE, 'Python OpenCV not installed')
-class MaltaMachineFramebuffer(Test):
+class MaltaMachineFramebuffer(QemuSystemTest):
 
 
     timeout = 30
     timeout = 30
 
 

+ 2 - 2
tests/acceptance/machine_rx_gdbsim.py → tests/avocado/machine_rx_gdbsim.py

@@ -11,13 +11,13 @@
 import os
 import os
 
 
 from avocado import skipIf
 from avocado import skipIf
-from avocado_qemu import Test
+from avocado_qemu import QemuSystemTest
 from avocado_qemu import exec_command_and_wait_for_pattern
 from avocado_qemu import exec_command_and_wait_for_pattern
 from avocado_qemu import wait_for_console_pattern
 from avocado_qemu import wait_for_console_pattern
 from avocado.utils import archive
 from avocado.utils import archive
 
 
 
 
-class RxGdbSimMachine(Test):
+class RxGdbSimMachine(QemuSystemTest):
 
 
     timeout = 30
     timeout = 30
     KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '
     KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '

+ 2 - 2
tests/acceptance/machine_s390_ccw_virtio.py → tests/avocado/machine_s390_ccw_virtio.py

@@ -13,12 +13,12 @@
 import tempfile
 import tempfile
 
 
 from avocado import skipIf
 from avocado import skipIf
-from avocado_qemu import Test
+from avocado_qemu import QemuSystemTest
 from avocado_qemu import exec_command_and_wait_for_pattern
 from avocado_qemu import exec_command_and_wait_for_pattern
 from avocado_qemu import wait_for_console_pattern
 from avocado_qemu import wait_for_console_pattern
 from avocado.utils import archive
 from avocado.utils import archive
 
 
-class S390CCWVirtioMachine(Test):
+class S390CCWVirtioMachine(QemuSystemTest):
     KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '
     KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '
 
 
     timeout = 120
     timeout = 120

+ 0 - 0
tests/acceptance/machine_sparc64_sun4u.py → tests/avocado/machine_sparc64_sun4u.py


+ 2 - 2
tests/acceptance/machine_sparc_leon3.py → tests/avocado/machine_sparc_leon3.py

@@ -5,12 +5,12 @@
 # This work is licensed under the terms of the GNU GPL, version 2 or
 # This work is licensed under the terms of the GNU GPL, version 2 or
 # later. See the COPYING file in the top-level directory.
 # later. See the COPYING file in the top-level directory.
 
 
-from avocado_qemu import Test
+from avocado_qemu import QemuSystemTest
 from avocado_qemu import wait_for_console_pattern
 from avocado_qemu import wait_for_console_pattern
 from avocado import skip
 from avocado import skip
 
 
 
 
-class Leon3Machine(Test):
+class Leon3Machine(QemuSystemTest):
 
 
     timeout = 60
     timeout = 60
 
 

+ 2 - 2
tests/acceptance/migration.py → tests/avocado/migration.py

@@ -11,7 +11,7 @@
 
 
 
 
 import tempfile
 import tempfile
-from avocado_qemu import Test
+from avocado_qemu import QemuSystemTest
 from avocado import skipUnless
 from avocado import skipUnless
 
 
 from avocado.utils import network
 from avocado.utils import network
@@ -19,7 +19,7 @@
 from avocado.utils.path import find_command
 from avocado.utils.path import find_command
 
 
 
 
-class Migration(Test):
+class Migration(QemuSystemTest):
     """
     """
     :avocado: tags=migration
     :avocado: tags=migration
     """
     """

+ 2 - 2
tests/acceptance/multiprocess.py → tests/avocado/multiprocess.py

@@ -7,12 +7,12 @@
 import os
 import os
 import socket
 import socket
 
 
-from avocado_qemu import Test
+from avocado_qemu import QemuSystemTest
 from avocado_qemu import wait_for_console_pattern
 from avocado_qemu import wait_for_console_pattern
 from avocado_qemu import exec_command
 from avocado_qemu import exec_command
 from avocado_qemu import exec_command_and_wait_for_pattern
 from avocado_qemu import exec_command_and_wait_for_pattern
 
 
-class Multiprocess(Test):
+class Multiprocess(QemuSystemTest):
     """
     """
     :avocado: tags=multiprocess
     :avocado: tags=multiprocess
     """
     """

+ 2 - 2
tests/acceptance/pc_cpu_hotplug_props.py → tests/avocado/pc_cpu_hotplug_props.py

@@ -20,9 +20,9 @@
 # License along with this library; if not, see <http://www.gnu.org/licenses/>.
 # License along with this library; if not, see <http://www.gnu.org/licenses/>.
 #
 #
 
 
-from avocado_qemu import Test
+from avocado_qemu import QemuSystemTest
 
 
-class OmittedCPUProps(Test):
+class OmittedCPUProps(QemuSystemTest):
     """
     """
     :avocado: tags=arch:x86_64
     :avocado: tags=arch:x86_64
     :avocado: tags=cpu:qemu64
     :avocado: tags=cpu:qemu64

+ 2 - 2
tests/acceptance/ppc_405.py → tests/avocado/ppc_405.py

@@ -6,11 +6,11 @@
 # later.  See the COPYING file in the top-level directory.
 # later.  See the COPYING file in the top-level directory.
 
 
 from avocado.utils import archive
 from avocado.utils import archive
-from avocado_qemu import Test
+from avocado_qemu import QemuSystemTest
 from avocado_qemu import wait_for_console_pattern
 from avocado_qemu import wait_for_console_pattern
 from avocado_qemu import exec_command_and_wait_for_pattern
 from avocado_qemu import exec_command_and_wait_for_pattern
 
 
-class Ppc405Machine(Test):
+class Ppc405Machine(QemuSystemTest):
 
 
     timeout = 90
     timeout = 90
 
 

+ 2 - 2
tests/acceptance/ppc_bamboo.py → tests/avocado/ppc_bamboo.py

@@ -6,11 +6,11 @@
 # later.  See the COPYING file in the top-level directory.
 # later.  See the COPYING file in the top-level directory.
 
 
 from avocado.utils import archive
 from avocado.utils import archive
-from avocado_qemu import Test
+from avocado_qemu import QemuSystemTest
 from avocado_qemu import wait_for_console_pattern
 from avocado_qemu import wait_for_console_pattern
 from avocado_qemu import exec_command_and_wait_for_pattern
 from avocado_qemu import exec_command_and_wait_for_pattern
 
 
-class BambooMachine(Test):
+class BambooMachine(QemuSystemTest):
 
 
     timeout = 90
     timeout = 90
 
 

+ 2 - 2
tests/acceptance/ppc_mpc8544ds.py → tests/avocado/ppc_mpc8544ds.py

@@ -6,10 +6,10 @@
 # later.  See the COPYING file in the top-level directory.
 # later.  See the COPYING file in the top-level directory.
 
 
 from avocado.utils import archive
 from avocado.utils import archive
-from avocado_qemu import Test
+from avocado_qemu import QemuSystemTest
 from avocado_qemu import wait_for_console_pattern
 from avocado_qemu import wait_for_console_pattern
 
 
-class Mpc8544dsMachine(Test):
+class Mpc8544dsMachine(QemuSystemTest):
 
 
     timeout = 90
     timeout = 90
     KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '
     KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '

+ 2 - 2
tests/acceptance/ppc_prep_40p.py → tests/avocado/ppc_prep_40p.py

@@ -8,11 +8,11 @@
 import os
 import os
 
 
 from avocado import skipUnless
 from avocado import skipUnless
-from avocado_qemu import Test
+from avocado_qemu import QemuSystemTest
 from avocado_qemu import wait_for_console_pattern
 from avocado_qemu import wait_for_console_pattern
 
 
 
 
-class IbmPrep40pMachine(Test):
+class IbmPrep40pMachine(QemuSystemTest):
 
 
     timeout = 60
     timeout = 60
 
 

+ 2 - 2
tests/acceptance/ppc_pseries.py → tests/avocado/ppc_pseries.py

@@ -6,10 +6,10 @@
 # later.  See the COPYING file in the top-level directory.
 # later.  See the COPYING file in the top-level directory.
 
 
 from avocado.utils import archive
 from avocado.utils import archive
-from avocado_qemu import Test
+from avocado_qemu import QemuSystemTest
 from avocado_qemu import wait_for_console_pattern
 from avocado_qemu import wait_for_console_pattern
 
 
-class pseriesMachine(Test):
+class pseriesMachine(QemuSystemTest):
 
 
     timeout = 90
     timeout = 90
     KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '
     KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '

+ 2 - 2
tests/acceptance/ppc_virtex_ml507.py → tests/avocado/ppc_virtex_ml507.py

@@ -6,10 +6,10 @@
 # later.  See the COPYING file in the top-level directory.
 # later.  See the COPYING file in the top-level directory.
 
 
 from avocado.utils import archive
 from avocado.utils import archive
-from avocado_qemu import Test
+from avocado_qemu import QemuSystemTest
 from avocado_qemu import wait_for_console_pattern
 from avocado_qemu import wait_for_console_pattern
 
 
-class VirtexMl507Machine(Test):
+class VirtexMl507Machine(QemuSystemTest):
 
 
     timeout = 90
     timeout = 90
     KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '
     KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '

+ 0 - 0
tests/acceptance/replay_kernel.py → tests/avocado/replay_kernel.py


+ 0 - 0
tests/acceptance/replay_linux.py → tests/avocado/replay_linux.py


+ 0 - 0
tests/acceptance/reverse_debugging.py → tests/avocado/reverse_debugging.py


+ 0 - 0
tests/acceptance/smmu.py → tests/avocado/smmu.py


+ 0 - 0
tests/acceptance/tcg_plugins.py → tests/avocado/tcg_plugins.py


+ 0 - 0
tests/acceptance/tesseract_utils.py → tests/avocado/tesseract_utils.py


+ 2 - 2
tests/acceptance/version.py → tests/avocado/version.py

@@ -9,10 +9,10 @@
 # later.  See the COPYING file in the top-level directory.
 # later.  See the COPYING file in the top-level directory.
 
 
 
 
-from avocado_qemu import Test
+from avocado_qemu import QemuSystemTest
 
 
 
 
-class Version(Test):
+class Version(QemuSystemTest):
     """
     """
     :avocado: tags=quick
     :avocado: tags=quick
     """
     """

+ 2 - 2
tests/acceptance/virtio-gpu.py → tests/avocado/virtio-gpu.py

@@ -4,8 +4,8 @@
 # later.  See the COPYING file in the top-level directory.
 # later.  See the COPYING file in the top-level directory.
 
 
 
 
-from avocado_qemu import Test
 from avocado_qemu import BUILD_DIR
 from avocado_qemu import BUILD_DIR
+from avocado_qemu import QemuSystemTest
 from avocado_qemu import wait_for_console_pattern
 from avocado_qemu import wait_for_console_pattern
 from avocado_qemu import exec_command_and_wait_for_pattern
 from avocado_qemu import exec_command_and_wait_for_pattern
 from avocado_qemu import is_readable_executable_file
 from avocado_qemu import is_readable_executable_file
@@ -27,7 +27,7 @@ def pick_default_vug_bin():
         return bld_dir_path
         return bld_dir_path
 
 
 
 
-class VirtioGPUx86(Test):
+class VirtioGPUx86(QemuSystemTest):
     """
     """
     :avocado: tags=virtio-gpu
     :avocado: tags=virtio-gpu
     :avocado: tags=arch:x86_64
     :avocado: tags=arch:x86_64

+ 2 - 2
tests/acceptance/virtio_check_params.py → tests/avocado/virtio_check_params.py

@@ -24,7 +24,7 @@
 
 
 sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
 sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
 from qemu.machine import QEMUMachine
 from qemu.machine import QEMUMachine
-from avocado_qemu import Test
+from avocado_qemu import QemuSystemTest
 from avocado import skip
 from avocado import skip
 
 
 #list of machine types and virtqueue properties to test
 #list of machine types and virtqueue properties to test
@@ -41,7 +41,7 @@
                                     'driver=null-co,id=drive0,if=none']}
                                     'driver=null-co,id=drive0,if=none']}
 
 
 
 
-class VirtioMaxSegSettingsCheck(Test):
+class VirtioMaxSegSettingsCheck(QemuSystemTest):
     @staticmethod
     @staticmethod
     def make_pattern(props):
     def make_pattern(props):
         pattern_items = ['{0} = \w+'.format(prop) for prop in props]
         pattern_items = ['{0} = \w+'.format(prop) for prop in props]

+ 2 - 2
tests/acceptance/virtio_version.py → tests/avocado/virtio_version.py

@@ -13,7 +13,7 @@
 
 
 sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
 sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', 'python'))
 from qemu.machine import QEMUMachine
 from qemu.machine import QEMUMachine
-from avocado_qemu import Test
+from avocado_qemu import QemuSystemTest
 
 
 # Virtio Device IDs:
 # Virtio Device IDs:
 VIRTIO_NET = 1
 VIRTIO_NET = 1
@@ -55,7 +55,7 @@ def get_pci_interfaces(vm, devtype):
     interfaces = ('pci-express-device', 'conventional-pci-device')
     interfaces = ('pci-express-device', 'conventional-pci-device')
     return [i for i in interfaces if devtype_implements(vm, devtype, i)]
     return [i for i in interfaces if devtype_implements(vm, devtype, i)]
 
 
-class VirtioVersionCheck(Test):
+class VirtioVersionCheck(QemuSystemTest):
     """
     """
     Check if virtio-version-specific device types result in the
     Check if virtio-version-specific device types result in the
     same device tree created by `disable-modern` and
     same device tree created by `disable-modern` and

+ 2 - 57
tests/acceptance/virtiofs_submounts.py → tests/avocado/virtiofs_submounts.py

@@ -6,67 +6,12 @@
 
 
 from avocado import skipUnless
 from avocado import skipUnless
 from avocado_qemu import LinuxTest, BUILD_DIR
 from avocado_qemu import LinuxTest, BUILD_DIR
+from avocado_qemu import has_cmds
+from avocado_qemu import run_cmd
 from avocado_qemu import wait_for_console_pattern
 from avocado_qemu import wait_for_console_pattern
 from avocado.utils import ssh
 from avocado.utils import ssh
 
 
 
 
-def run_cmd(args):
-    subp = subprocess.Popen(args,
-                            stdout=subprocess.PIPE,
-                            stderr=subprocess.PIPE,
-                            universal_newlines=True)
-    stdout, stderr = subp.communicate()
-    ret = subp.returncode
-
-    return (stdout, stderr, ret)
-
-def has_cmd(name, args=None):
-    """
-    This function is for use in a @avocado.skipUnless decorator, e.g.:
-
-        @skipUnless(*has_cmd('sudo -n', ('sudo', '-n', 'true')))
-        def test_something_that_needs_sudo(self):
-            ...
-    """
-
-    if args is None:
-        args = ('which', name)
-
-    try:
-        _, stderr, exitcode = run_cmd(args)
-    except Exception as e:
-        exitcode = -1
-        stderr = str(e)
-
-    if exitcode != 0:
-        cmd_line = ' '.join(args)
-        err = f'{name} required, but "{cmd_line}" failed: {stderr.strip()}'
-        return (False, err)
-    else:
-        return (True, '')
-
-def has_cmds(*cmds):
-    """
-    This function is for use in a @avocado.skipUnless decorator and
-    allows checking for the availability of multiple commands, e.g.:
-
-        @skipUnless(*has_cmds(('cmd1', ('cmd1', '--some-parameter')),
-                              'cmd2', 'cmd3'))
-        def test_something_that_needs_cmd1_and_cmd2(self):
-            ...
-    """
-
-    for cmd in cmds:
-        if isinstance(cmd, str):
-            cmd = (cmd,)
-
-        ok, errstr = has_cmd(*cmd)
-        if not ok:
-            return (False, errstr)
-
-    return (True, '')
-
-
 class VirtiofsSubmountsTest(LinuxTest):
 class VirtiofsSubmountsTest(LinuxTest):
     """
     """
     :avocado: tags=arch:x86_64
     :avocado: tags=arch:x86_64

+ 0 - 0
tests/acceptance/virtiofs_submounts.py.data/cleanup.sh → tests/avocado/virtiofs_submounts.py.data/cleanup.sh


+ 0 - 0
tests/acceptance/virtiofs_submounts.py.data/guest-cleanup.sh → tests/avocado/virtiofs_submounts.py.data/guest-cleanup.sh


+ 0 - 0
tests/acceptance/virtiofs_submounts.py.data/guest.sh → tests/avocado/virtiofs_submounts.py.data/guest.sh


+ 0 - 0
tests/acceptance/virtiofs_submounts.py.data/host.sh → tests/avocado/virtiofs_submounts.py.data/host.sh


+ 2 - 2
tests/acceptance/vnc.py → tests/avocado/vnc.py

@@ -8,10 +8,10 @@
 # This work is licensed under the terms of the GNU GPL, version 2 or
 # This work is licensed under the terms of the GNU GPL, version 2 or
 # later.  See the COPYING file in the top-level directory.
 # later.  See the COPYING file in the top-level directory.
 
 
-from avocado_qemu import Test
+from avocado_qemu import QemuSystemTest
 
 
 
 
-class Vnc(Test):
+class Vnc(QemuSystemTest):
     """
     """
     :avocado: tags=vnc,quick
     :avocado: tags=vnc,quick
     """
     """

+ 2 - 2
tests/acceptance/x86_cpu_model_versions.py → tests/avocado/x86_cpu_model_versions.py

@@ -24,7 +24,7 @@
 import avocado_qemu
 import avocado_qemu
 import re
 import re
 
 
-class X86CPUModelAliases(avocado_qemu.Test):
+class X86CPUModelAliases(avocado_qemu.QemuSystemTest):
     """
     """
     Validation of PC CPU model versions and CPU model aliases
     Validation of PC CPU model versions and CPU model aliases
 
 
@@ -239,7 +239,7 @@ def test_none_alias(self):
         self.validate_aliases(cpus)
         self.validate_aliases(cpus)
 
 
 
 
-class CascadelakeArchCapabilities(avocado_qemu.Test):
+class CascadelakeArchCapabilities(avocado_qemu.QemuSystemTest):
     """
     """
     Validation of Cascadelake arch-capabilities
     Validation of Cascadelake arch-capabilities