]> xenbits.xensource.com Git - libvirt.git/commitdiff
tests/domaincaps: Make test matrix programmatic
authorAndrea Bolognani <abologna@redhat.com>
Tue, 22 Oct 2019 15:16:26 +0000 (17:16 +0200)
committerAndrea Bolognani <abologna@redhat.com>
Thu, 24 Oct 2019 15:21:26 +0000 (17:21 +0200)
For each QEMU version there are usually several different,
architecture-dependedn scenarios that we're interested in testing;
however, since the test matrix has to be explicitly created by
calling DO_TEST_QEMU() multiple times with different arguments, we
end up with spotty coverage.

Fix this by implementing the arch-specific rules in code, which
result in the full coverage for a (version, arch) combo being
automatically achieved with a single call to DO_TEST_QEMU().

Unsurprisingly, this change results in a bunch of extra output
files being created.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
18 files changed:
tests/domaincapsdata/qemu_1.7.0-q35.x86_64.xml [new file with mode: 0644]
tests/domaincapsdata/qemu_1.7.0-tcg.x86_64.xml [new file with mode: 0644]
tests/domaincapsdata/qemu_2.12.0-q35.x86_64.xml [new file with mode: 0644]
tests/domaincapsdata/qemu_2.12.0-tcg.x86_64.xml [new file with mode: 0644]
tests/domaincapsdata/qemu_2.12.0.aarch64.xml [new file with mode: 0644]
tests/domaincapsdata/qemu_2.6.0-q35.x86_64.xml [new file with mode: 0644]
tests/domaincapsdata/qemu_2.6.0-tcg.x86_64.xml [new file with mode: 0644]
tests/domaincapsdata/qemu_2.8.0-q35.x86_64.xml [new file with mode: 0644]
tests/domaincapsdata/qemu_3.1.0-q35.x86_64.xml [new file with mode: 0644]
tests/domaincapsdata/qemu_3.1.0-tcg.x86_64.xml [new file with mode: 0644]
tests/domaincapsdata/qemu_4.0.0-q35.x86_64.xml [new file with mode: 0644]
tests/domaincapsdata/qemu_4.0.0-tcg.x86_64.xml [new file with mode: 0644]
tests/domaincapsdata/qemu_4.1.0-q35.x86_64.xml [new file with mode: 0644]
tests/domaincapsdata/qemu_4.1.0-tcg.x86_64.xml [new file with mode: 0644]
tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml [new file with mode: 0644]
tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml [new file with mode: 0644]
tests/domaincapsdata/qemu_4.2.0-virt.aarch64.xml [new file with mode: 0644]
tests/domaincapstest.c

diff --git a/tests/domaincapsdata/qemu_1.7.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_1.7.0-q35.x86_64.xml
new file mode 100644 (file)
index 0000000..79b753f
--- /dev/null
@@ -0,0 +1,134 @@
+<domainCapabilities>
+  <path>/usr/bin/qemu-system-x86_64</path>
+  <domain>kvm</domain>
+  <machine>pc-q35-1.7</machine>
+  <arch>x86_64</arch>
+  <vcpu max='255'/>
+  <iothreads supported='no'/>
+  <os supported='yes'>
+    <enum name='firmware'>
+      <value>bios</value>
+      <value>efi</value>
+    </enum>
+    <loader supported='yes'>
+      <value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
+      <value>/usr/share/AAVMF/AAVMF32_CODE.fd</value>
+      <value>/usr/share/OVMF/OVMF_CODE.fd</value>
+      <enum name='type'>
+        <value>rom</value>
+        <value>pflash</value>
+      </enum>
+      <enum name='readonly'>
+        <value>yes</value>
+        <value>no</value>
+      </enum>
+      <enum name='secure'>
+        <value>yes</value>
+        <value>no</value>
+      </enum>
+    </loader>
+  </os>
+  <cpu>
+    <mode name='host-passthrough' supported='yes'/>
+    <mode name='host-model' supported='yes'>
+      <model fallback='allow'>Broadwell</model>
+    </mode>
+    <mode name='custom' supported='yes'>
+      <model usable='unknown'>Opteron_G5</model>
+      <model usable='unknown'>Opteron_G4</model>
+      <model usable='unknown'>Opteron_G3</model>
+      <model usable='unknown'>Opteron_G2</model>
+      <model usable='unknown'>Opteron_G1</model>
+      <model usable='unknown'>Haswell</model>
+      <model usable='unknown'>SandyBridge</model>
+      <model usable='unknown'>Westmere</model>
+      <model usable='unknown'>Nehalem</model>
+      <model usable='unknown'>Penryn</model>
+      <model usable='unknown'>Conroe</model>
+      <model usable='unknown'>n270</model>
+      <model usable='unknown'>athlon</model>
+      <model usable='unknown'>pentium3</model>
+      <model usable='unknown'>pentium2</model>
+      <model usable='unknown'>pentium</model>
+      <model usable='unknown'>486</model>
+      <model usable='unknown'>coreduo</model>
+      <model usable='unknown'>kvm32</model>
+      <model usable='unknown'>qemu32</model>
+      <model usable='unknown'>kvm64</model>
+      <model usable='unknown'>core2duo</model>
+      <model usable='unknown'>phenom</model>
+      <model usable='unknown'>qemu64</model>
+    </mode>
+  </cpu>
+  <devices>
+    <disk supported='yes'>
+      <enum name='diskDevice'>
+        <value>disk</value>
+        <value>cdrom</value>
+        <value>floppy</value>
+        <value>lun</value>
+      </enum>
+      <enum name='bus'>
+        <value>fdc</value>
+        <value>scsi</value>
+        <value>virtio</value>
+        <value>usb</value>
+        <value>sata</value>
+      </enum>
+      <enum name='model'>
+        <value>virtio</value>
+      </enum>
+    </disk>
+    <graphics supported='yes'>
+      <enum name='type'>
+        <value>sdl</value>
+        <value>vnc</value>
+        <value>spice</value>
+      </enum>
+    </graphics>
+    <video supported='yes'>
+      <enum name='modelType'>
+        <value>vga</value>
+        <value>cirrus</value>
+        <value>vmvga</value>
+        <value>qxl</value>
+      </enum>
+    </video>
+    <hostdev supported='yes'>
+      <enum name='mode'>
+        <value>subsystem</value>
+      </enum>
+      <enum name='startupPolicy'>
+        <value>default</value>
+        <value>mandatory</value>
+        <value>requisite</value>
+        <value>optional</value>
+      </enum>
+      <enum name='subsysType'>
+        <value>usb</value>
+        <value>pci</value>
+        <value>scsi</value>
+      </enum>
+      <enum name='capsType'/>
+      <enum name='pciBackend'>
+        <value>default</value>
+        <value>vfio</value>
+      </enum>
+    </hostdev>
+    <rng supported='yes'>
+      <enum name='model'>
+        <value>virtio</value>
+      </enum>
+      <enum name='backendModel'>
+        <value>random</value>
+        <value>egd</value>
+      </enum>
+    </rng>
+  </devices>
+  <features>
+    <gic supported='no'/>
+    <vmcoreinfo supported='no'/>
+    <genid supported='no'/>
+    <sev supported='no'/>
+  </features>
+</domainCapabilities>
diff --git a/tests/domaincapsdata/qemu_1.7.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_1.7.0-tcg.x86_64.xml
new file mode 100644 (file)
index 0000000..5b61c5b
--- /dev/null
@@ -0,0 +1,134 @@
+<domainCapabilities>
+  <path>/usr/bin/qemu-system-x86_64</path>
+  <domain>qemu</domain>
+  <machine>pc-i440fx-1.7</machine>
+  <arch>x86_64</arch>
+  <vcpu max='255'/>
+  <iothreads supported='no'/>
+  <os supported='yes'>
+    <enum name='firmware'>
+      <value>bios</value>
+      <value>efi</value>
+    </enum>
+    <loader supported='yes'>
+      <value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
+      <value>/usr/share/AAVMF/AAVMF32_CODE.fd</value>
+      <value>/usr/share/OVMF/OVMF_CODE.fd</value>
+      <enum name='type'>
+        <value>rom</value>
+        <value>pflash</value>
+      </enum>
+      <enum name='readonly'>
+        <value>yes</value>
+        <value>no</value>
+      </enum>
+      <enum name='secure'>
+        <value>no</value>
+      </enum>
+    </loader>
+  </os>
+  <cpu>
+    <mode name='host-passthrough' supported='no'/>
+    <mode name='host-model' supported='yes'>
+      <model fallback='allow'>Broadwell</model>
+    </mode>
+    <mode name='custom' supported='yes'>
+      <model usable='unknown'>Opteron_G5</model>
+      <model usable='unknown'>Opteron_G4</model>
+      <model usable='unknown'>Opteron_G3</model>
+      <model usable='unknown'>Opteron_G2</model>
+      <model usable='unknown'>Opteron_G1</model>
+      <model usable='unknown'>Haswell</model>
+      <model usable='unknown'>SandyBridge</model>
+      <model usable='unknown'>Westmere</model>
+      <model usable='unknown'>Nehalem</model>
+      <model usable='unknown'>Penryn</model>
+      <model usable='unknown'>Conroe</model>
+      <model usable='unknown'>n270</model>
+      <model usable='unknown'>athlon</model>
+      <model usable='unknown'>pentium3</model>
+      <model usable='unknown'>pentium2</model>
+      <model usable='unknown'>pentium</model>
+      <model usable='unknown'>486</model>
+      <model usable='unknown'>coreduo</model>
+      <model usable='unknown'>kvm32</model>
+      <model usable='unknown'>qemu32</model>
+      <model usable='unknown'>kvm64</model>
+      <model usable='unknown'>core2duo</model>
+      <model usable='unknown'>phenom</model>
+      <model usable='unknown'>qemu64</model>
+    </mode>
+  </cpu>
+  <devices>
+    <disk supported='yes'>
+      <enum name='diskDevice'>
+        <value>disk</value>
+        <value>cdrom</value>
+        <value>floppy</value>
+        <value>lun</value>
+      </enum>
+      <enum name='bus'>
+        <value>ide</value>
+        <value>fdc</value>
+        <value>scsi</value>
+        <value>virtio</value>
+        <value>usb</value>
+        <value>sata</value>
+      </enum>
+      <enum name='model'>
+        <value>virtio</value>
+      </enum>
+    </disk>
+    <graphics supported='yes'>
+      <enum name='type'>
+        <value>sdl</value>
+        <value>vnc</value>
+        <value>spice</value>
+      </enum>
+    </graphics>
+    <video supported='yes'>
+      <enum name='modelType'>
+        <value>vga</value>
+        <value>cirrus</value>
+        <value>vmvga</value>
+        <value>qxl</value>
+      </enum>
+    </video>
+    <hostdev supported='yes'>
+      <enum name='mode'>
+        <value>subsystem</value>
+      </enum>
+      <enum name='startupPolicy'>
+        <value>default</value>
+        <value>mandatory</value>
+        <value>requisite</value>
+        <value>optional</value>
+      </enum>
+      <enum name='subsysType'>
+        <value>usb</value>
+        <value>pci</value>
+        <value>scsi</value>
+      </enum>
+      <enum name='capsType'/>
+      <enum name='pciBackend'>
+        <value>default</value>
+        <value>vfio</value>
+      </enum>
+    </hostdev>
+    <rng supported='yes'>
+      <enum name='model'>
+        <value>virtio</value>
+      </enum>
+      <enum name='backendModel'>
+        <value>random</value>
+        <value>egd</value>
+      </enum>
+    </rng>
+  </devices>
+  <features>
+    <gic supported='no'/>
+    <vmcoreinfo supported='no'/>
+    <genid supported='no'/>
+    <sev supported='no'/>
+  </features>
+</domainCapabilities>
diff --git a/tests/domaincapsdata/qemu_2.12.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_2.12.0-q35.x86_64.xml
new file mode 100644 (file)
index 0000000..584eaa0
--- /dev/null
@@ -0,0 +1,172 @@
+<domainCapabilities>
+  <path>/usr/bin/qemu-system-x86_64</path>
+  <domain>kvm</domain>
+  <machine>pc-q35-2.12</machine>
+  <arch>x86_64</arch>
+  <vcpu max='288'/>
+  <iothreads supported='yes'/>
+  <os supported='yes'>
+    <enum name='firmware'>
+      <value>bios</value>
+      <value>efi</value>
+    </enum>
+    <loader supported='yes'>
+      <value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
+      <value>/usr/share/AAVMF/AAVMF32_CODE.fd</value>
+      <value>/usr/share/OVMF/OVMF_CODE.fd</value>
+      <enum name='type'>
+        <value>rom</value>
+        <value>pflash</value>
+      </enum>
+      <enum name='readonly'>
+        <value>yes</value>
+        <value>no</value>
+      </enum>
+      <enum name='secure'>
+        <value>yes</value>
+        <value>no</value>
+      </enum>
+    </loader>
+  </os>
+  <cpu>
+    <mode name='host-passthrough' supported='yes'/>
+    <mode name='host-model' supported='yes'>
+      <model fallback='forbid'>Haswell-noTSX</model>
+      <vendor>Intel</vendor>
+      <feature policy='require' name='vme'/>
+      <feature policy='require' name='ss'/>
+      <feature policy='require' name='f16c'/>
+      <feature policy='require' name='rdrand'/>
+      <feature policy='require' name='hypervisor'/>
+      <feature policy='require' name='arat'/>
+      <feature policy='require' name='tsc_adjust'/>
+      <feature policy='require' name='xsaveopt'/>
+      <feature policy='require' name='pdpe1gb'/>
+      <feature policy='require' name='abm'/>
+      <feature policy='require' name='invtsc'/>
+    </mode>
+    <mode name='custom' supported='yes'>
+      <model usable='yes'>qemu64</model>
+      <model usable='yes'>qemu32</model>
+      <model usable='no'>phenom</model>
+      <model usable='yes'>pentium3</model>
+      <model usable='yes'>pentium2</model>
+      <model usable='yes'>pentium</model>
+      <model usable='yes'>n270</model>
+      <model usable='yes'>kvm64</model>
+      <model usable='yes'>kvm32</model>
+      <model usable='yes'>coreduo</model>
+      <model usable='yes'>core2duo</model>
+      <model usable='no'>athlon</model>
+      <model usable='yes'>Westmere</model>
+      <model usable='no'>Westmere-IBRS</model>
+      <model usable='no'>Skylake-Server</model>
+      <model usable='no'>Skylake-Server-IBRS</model>
+      <model usable='no'>Skylake-Client</model>
+      <model usable='no'>Skylake-Client-IBRS</model>
+      <model usable='yes'>SandyBridge</model>
+      <model usable='no'>SandyBridge-IBRS</model>
+      <model usable='yes'>Penryn</model>
+      <model usable='no'>Opteron_G5</model>
+      <model usable='no'>Opteron_G4</model>
+      <model usable='no'>Opteron_G3</model>
+      <model usable='yes'>Opteron_G2</model>
+      <model usable='yes'>Opteron_G1</model>
+      <model usable='yes'>Nehalem</model>
+      <model usable='no'>Nehalem-IBRS</model>
+      <model usable='yes'>IvyBridge</model>
+      <model usable='no'>IvyBridge-IBRS</model>
+      <model usable='no'>Haswell</model>
+      <model usable='yes'>Haswell-noTSX</model>
+      <model usable='no'>Haswell-noTSX-IBRS</model>
+      <model usable='no'>Haswell-IBRS</model>
+      <model usable='no'>EPYC</model>
+      <model usable='no'>EPYC-IBPB</model>
+      <model usable='yes'>Conroe</model>
+      <model usable='no'>Broadwell</model>
+      <model usable='no'>Broadwell-noTSX</model>
+      <model usable='no'>Broadwell-noTSX-IBRS</model>
+      <model usable='no'>Broadwell-IBRS</model>
+      <model usable='yes'>486</model>
+    </mode>
+  </cpu>
+  <devices>
+    <disk supported='yes'>
+      <enum name='diskDevice'>
+        <value>disk</value>
+        <value>cdrom</value>
+        <value>floppy</value>
+        <value>lun</value>
+      </enum>
+      <enum name='bus'>
+        <value>fdc</value>
+        <value>scsi</value>
+        <value>virtio</value>
+        <value>usb</value>
+        <value>sata</value>
+      </enum>
+      <enum name='model'>
+        <value>virtio</value>
+        <value>virtio-transitional</value>
+        <value>virtio-non-transitional</value>
+      </enum>
+    </disk>
+    <graphics supported='yes'>
+      <enum name='type'>
+        <value>sdl</value>
+        <value>vnc</value>
+        <value>spice</value>
+      </enum>
+    </graphics>
+    <video supported='yes'>
+      <enum name='modelType'>
+        <value>vga</value>
+        <value>cirrus</value>
+        <value>vmvga</value>
+        <value>qxl</value>
+        <value>virtio</value>
+      </enum>
+    </video>
+    <hostdev supported='yes'>
+      <enum name='mode'>
+        <value>subsystem</value>
+      </enum>
+      <enum name='startupPolicy'>
+        <value>default</value>
+        <value>mandatory</value>
+        <value>requisite</value>
+        <value>optional</value>
+      </enum>
+      <enum name='subsysType'>
+        <value>usb</value>
+        <value>pci</value>
+        <value>scsi</value>
+      </enum>
+      <enum name='capsType'/>
+      <enum name='pciBackend'>
+        <value>default</value>
+        <value>vfio</value>
+      </enum>
+    </hostdev>
+    <rng supported='yes'>
+      <enum name='model'>
+        <value>virtio</value>
+        <value>virtio-transitional</value>
+        <value>virtio-non-transitional</value>
+      </enum>
+      <enum name='backendModel'>
+        <value>random</value>
+        <value>egd</value>
+      </enum>
+    </rng>
+  </devices>
+  <features>
+    <gic supported='no'/>
+    <vmcoreinfo supported='yes'/>
+    <genid supported='yes'/>
+    <sev supported='yes'>
+      <cbitpos>47</cbitpos>
+      <reducedPhysBits>1</reducedPhysBits>
+    </sev>
+  </features>
+</domainCapabilities>
diff --git a/tests/domaincapsdata/qemu_2.12.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_2.12.0-tcg.x86_64.xml
new file mode 100644 (file)
index 0000000..2fbd83d
--- /dev/null
@@ -0,0 +1,186 @@
+<domainCapabilities>
+  <path>/usr/bin/qemu-system-x86_64</path>
+  <domain>qemu</domain>
+  <machine>pc-i440fx-2.12</machine>
+  <arch>x86_64</arch>
+  <vcpu max='255'/>
+  <iothreads supported='yes'/>
+  <os supported='yes'>
+    <enum name='firmware'>
+      <value>bios</value>
+      <value>efi</value>
+    </enum>
+    <loader supported='yes'>
+      <value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
+      <value>/usr/share/AAVMF/AAVMF32_CODE.fd</value>
+      <value>/usr/share/OVMF/OVMF_CODE.fd</value>
+      <enum name='type'>
+        <value>rom</value>
+        <value>pflash</value>
+      </enum>
+      <enum name='readonly'>
+        <value>yes</value>
+        <value>no</value>
+      </enum>
+      <enum name='secure'>
+        <value>no</value>
+      </enum>
+    </loader>
+  </os>
+  <cpu>
+    <mode name='host-passthrough' supported='no'/>
+    <mode name='host-model' supported='yes'>
+      <model fallback='forbid'>EPYC</model>
+      <vendor>AMD</vendor>
+      <feature policy='require' name='acpi'/>
+      <feature policy='require' name='ss'/>
+      <feature policy='require' name='hypervisor'/>
+      <feature policy='require' name='erms'/>
+      <feature policy='require' name='mpx'/>
+      <feature policy='require' name='pcommit'/>
+      <feature policy='require' name='clwb'/>
+      <feature policy='require' name='pku'/>
+      <feature policy='require' name='ospke'/>
+      <feature policy='require' name='la57'/>
+      <feature policy='require' name='3dnowext'/>
+      <feature policy='require' name='3dnow'/>
+      <feature policy='disable' name='vme'/>
+      <feature policy='disable' name='fma'/>
+      <feature policy='disable' name='avx'/>
+      <feature policy='disable' name='f16c'/>
+      <feature policy='disable' name='rdrand'/>
+      <feature policy='disable' name='avx2'/>
+      <feature policy='disable' name='rdseed'/>
+      <feature policy='disable' name='sha-ni'/>
+      <feature policy='disable' name='xsavec'/>
+      <feature policy='disable' name='fxsr_opt'/>
+      <feature policy='disable' name='misalignsse'/>
+      <feature policy='disable' name='3dnowprefetch'/>
+      <feature policy='disable' name='osvw'/>
+    </mode>
+    <mode name='custom' supported='yes'>
+      <model usable='yes'>qemu64</model>
+      <model usable='yes'>qemu32</model>
+      <model usable='no'>phenom</model>
+      <model usable='yes'>pentium3</model>
+      <model usable='yes'>pentium2</model>
+      <model usable='yes'>pentium</model>
+      <model usable='yes'>n270</model>
+      <model usable='yes'>kvm64</model>
+      <model usable='yes'>kvm32</model>
+      <model usable='yes'>coreduo</model>
+      <model usable='yes'>core2duo</model>
+      <model usable='yes'>athlon</model>
+      <model usable='yes'>Westmere</model>
+      <model usable='no'>Westmere-IBRS</model>
+      <model usable='no'>Skylake-Server</model>
+      <model usable='no'>Skylake-Server-IBRS</model>
+      <model usable='no'>Skylake-Client</model>
+      <model usable='no'>Skylake-Client-IBRS</model>
+      <model usable='no'>SandyBridge</model>
+      <model usable='no'>SandyBridge-IBRS</model>
+      <model usable='yes'>Penryn</model>
+      <model usable='no'>Opteron_G5</model>
+      <model usable='no'>Opteron_G4</model>
+      <model usable='no'>Opteron_G3</model>
+      <model usable='yes'>Opteron_G2</model>
+      <model usable='yes'>Opteron_G1</model>
+      <model usable='yes'>Nehalem</model>
+      <model usable='no'>Nehalem-IBRS</model>
+      <model usable='no'>IvyBridge</model>
+      <model usable='no'>IvyBridge-IBRS</model>
+      <model usable='no'>Haswell</model>
+      <model usable='no'>Haswell-noTSX</model>
+      <model usable='no'>Haswell-noTSX-IBRS</model>
+      <model usable='no'>Haswell-IBRS</model>
+      <model usable='no'>EPYC</model>
+      <model usable='no'>EPYC-IBPB</model>
+      <model usable='yes'>Conroe</model>
+      <model usable='no'>Broadwell</model>
+      <model usable='no'>Broadwell-noTSX</model>
+      <model usable='no'>Broadwell-noTSX-IBRS</model>
+      <model usable='no'>Broadwell-IBRS</model>
+      <model usable='yes'>486</model>
+    </mode>
+  </cpu>
+  <devices>
+    <disk supported='yes'>
+      <enum name='diskDevice'>
+        <value>disk</value>
+        <value>cdrom</value>
+        <value>floppy</value>
+        <value>lun</value>
+      </enum>
+      <enum name='bus'>
+        <value>ide</value>
+        <value>fdc</value>
+        <value>scsi</value>
+        <value>virtio</value>
+        <value>usb</value>
+        <value>sata</value>
+      </enum>
+      <enum name='model'>
+        <value>virtio</value>
+        <value>virtio-transitional</value>
+        <value>virtio-non-transitional</value>
+      </enum>
+    </disk>
+    <graphics supported='yes'>
+      <enum name='type'>
+        <value>sdl</value>
+        <value>vnc</value>
+        <value>spice</value>
+      </enum>
+    </graphics>
+    <video supported='yes'>
+      <enum name='modelType'>
+        <value>vga</value>
+        <value>cirrus</value>
+        <value>vmvga</value>
+        <value>qxl</value>
+        <value>virtio</value>
+      </enum>
+    </video>
+    <hostdev supported='yes'>
+      <enum name='mode'>
+        <value>subsystem</value>
+      </enum>
+      <enum name='startupPolicy'>
+        <value>default</value>
+        <value>mandatory</value>
+        <value>requisite</value>
+        <value>optional</value>
+      </enum>
+      <enum name='subsysType'>
+        <value>usb</value>
+        <value>pci</value>
+        <value>scsi</value>
+      </enum>
+      <enum name='capsType'/>
+      <enum name='pciBackend'>
+        <value>default</value>
+        <value>vfio</value>
+      </enum>
+    </hostdev>
+    <rng supported='yes'>
+      <enum name='model'>
+        <value>virtio</value>
+        <value>virtio-transitional</value>
+        <value>virtio-non-transitional</value>
+      </enum>
+      <enum name='backendModel'>
+        <value>random</value>
+        <value>egd</value>
+      </enum>
+    </rng>
+  </devices>
+  <features>
+    <gic supported='no'/>
+    <vmcoreinfo supported='yes'/>
+    <genid supported='yes'/>
+    <sev supported='yes'>
+      <cbitpos>47</cbitpos>
+      <reducedPhysBits>1</reducedPhysBits>
+    </sev>
+  </features>
+</domainCapabilities>
diff --git a/tests/domaincapsdata/qemu_2.12.0.aarch64.xml b/tests/domaincapsdata/qemu_2.12.0.aarch64.xml
new file mode 100644 (file)
index 0000000..ebf499d
--- /dev/null
@@ -0,0 +1,138 @@
+<domainCapabilities>
+  <path>/usr/bin/qemu-system-aarch64</path>
+  <domain>kvm</domain>
+  <machine>integratorcp</machine>
+  <arch>aarch64</arch>
+  <vcpu max='1'/>
+  <iothreads supported='yes'/>
+  <os supported='yes'>
+    <enum name='firmware'/>
+    <loader supported='yes'>
+      <value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
+      <value>/usr/share/AAVMF/AAVMF32_CODE.fd</value>
+      <value>/usr/share/OVMF/OVMF_CODE.fd</value>
+      <enum name='type'>
+        <value>rom</value>
+        <value>pflash</value>
+      </enum>
+      <enum name='readonly'>
+        <value>yes</value>
+        <value>no</value>
+      </enum>
+      <enum name='secure'>
+        <value>no</value>
+      </enum>
+    </loader>
+  </os>
+  <cpu>
+    <mode name='host-passthrough' supported='yes'/>
+    <mode name='host-model' supported='no'/>
+    <mode name='custom' supported='yes'>
+      <model usable='unknown'>pxa262</model>
+      <model usable='unknown'>pxa270-a0</model>
+      <model usable='unknown'>arm1136</model>
+      <model usable='unknown'>cortex-a15</model>
+      <model usable='unknown'>pxa260</model>
+      <model usable='unknown'>arm1136-r2</model>
+      <model usable='unknown'>pxa261</model>
+      <model usable='unknown'>pxa255</model>
+      <model usable='unknown'>cortex-m33</model>
+      <model usable='unknown'>arm926</model>
+      <model usable='unknown'>arm11mpcore</model>
+      <model usable='unknown'>pxa250</model>
+      <model usable='unknown'>ti925t</model>
+      <model usable='unknown'>cortex-a57</model>
+      <model usable='unknown'>sa1110</model>
+      <model usable='unknown'>arm1176</model>
+      <model usable='unknown'>cortex-a53</model>
+      <model usable='unknown'>sa1100</model>
+      <model usable='unknown'>pxa270-c5</model>
+      <model usable='unknown'>cortex-a9</model>
+      <model usable='unknown'>cortex-a8</model>
+      <model usable='unknown'>cortex-a7</model>
+      <model usable='unknown'>pxa270-c0</model>
+      <model usable='unknown'>arm1026</model>
+      <model usable='unknown'>pxa270-b1</model>
+      <model usable='unknown'>cortex-m3</model>
+      <model usable='unknown'>max</model>
+      <model usable='unknown'>cortex-m4</model>
+      <model usable='unknown'>pxa270-b0</model>
+      <model usable='unknown'>arm946</model>
+      <model usable='unknown'>cortex-r5</model>
+      <model usable='unknown'>pxa270-a1</model>
+      <model usable='unknown'>pxa270</model>
+    </mode>
+  </cpu>
+  <devices>
+    <disk supported='yes'>
+      <enum name='diskDevice'>
+        <value>disk</value>
+        <value>cdrom</value>
+        <value>floppy</value>
+        <value>lun</value>
+      </enum>
+      <enum name='bus'>
+        <value>fdc</value>
+        <value>scsi</value>
+        <value>virtio</value>
+        <value>usb</value>
+        <value>sata</value>
+      </enum>
+      <enum name='model'>
+        <value>virtio</value>
+        <value>virtio-transitional</value>
+        <value>virtio-non-transitional</value>
+      </enum>
+    </disk>
+    <graphics supported='yes'>
+      <enum name='type'>
+        <value>sdl</value>
+        <value>vnc</value>
+      </enum>
+    </graphics>
+    <video supported='yes'>
+      <enum name='modelType'>
+        <value>vga</value>
+        <value>virtio</value>
+      </enum>
+    </video>
+    <hostdev supported='yes'>
+      <enum name='mode'>
+        <value>subsystem</value>
+      </enum>
+      <enum name='startupPolicy'>
+        <value>default</value>
+        <value>mandatory</value>
+        <value>requisite</value>
+        <value>optional</value>
+      </enum>
+      <enum name='subsysType'>
+        <value>usb</value>
+        <value>pci</value>
+        <value>scsi</value>
+      </enum>
+      <enum name='capsType'/>
+      <enum name='pciBackend'>
+        <value>default</value>
+        <value>vfio</value>
+      </enum>
+    </hostdev>
+    <rng supported='yes'>
+      <enum name='model'>
+        <value>virtio</value>
+        <value>virtio-transitional</value>
+        <value>virtio-non-transitional</value>
+      </enum>
+      <enum name='backendModel'>
+        <value>random</value>
+        <value>egd</value>
+      </enum>
+    </rng>
+  </devices>
+  <features>
+    <gic supported='no'/>
+    <vmcoreinfo supported='yes'/>
+    <genid supported='no'/>
+    <sev supported='no'/>
+  </features>
+</domainCapabilities>
diff --git a/tests/domaincapsdata/qemu_2.6.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_2.6.0-q35.x86_64.xml
new file mode 100644 (file)
index 0000000..e2d734f
--- /dev/null
@@ -0,0 +1,143 @@
+<domainCapabilities>
+  <path>/usr/bin/qemu-system-x86_64</path>
+  <domain>kvm</domain>
+  <machine>pc-q35-2.6</machine>
+  <arch>x86_64</arch>
+  <vcpu max='255'/>
+  <iothreads supported='yes'/>
+  <os supported='yes'>
+    <enum name='firmware'>
+      <value>bios</value>
+      <value>efi</value>
+    </enum>
+    <loader supported='yes'>
+      <value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
+      <value>/usr/share/AAVMF/AAVMF32_CODE.fd</value>
+      <value>/usr/share/OVMF/OVMF_CODE.fd</value>
+      <enum name='type'>
+        <value>rom</value>
+        <value>pflash</value>
+      </enum>
+      <enum name='readonly'>
+        <value>yes</value>
+        <value>no</value>
+      </enum>
+      <enum name='secure'>
+        <value>yes</value>
+        <value>no</value>
+      </enum>
+    </loader>
+  </os>
+  <cpu>
+    <mode name='host-passthrough' supported='yes'/>
+    <mode name='host-model' supported='yes'>
+      <model fallback='allow'>Broadwell</model>
+    </mode>
+    <mode name='custom' supported='yes'>
+      <model usable='unknown'>Opteron_G5</model>
+      <model usable='unknown'>Opteron_G4</model>
+      <model usable='unknown'>Opteron_G3</model>
+      <model usable='unknown'>Opteron_G2</model>
+      <model usable='unknown'>Opteron_G1</model>
+      <model usable='unknown'>Broadwell</model>
+      <model usable='unknown'>Broadwell-noTSX</model>
+      <model usable='unknown'>Haswell</model>
+      <model usable='unknown'>Haswell-noTSX</model>
+      <model usable='unknown'>IvyBridge</model>
+      <model usable='unknown'>SandyBridge</model>
+      <model usable='unknown'>Westmere</model>
+      <model usable='unknown'>Nehalem</model>
+      <model usable='unknown'>Penryn</model>
+      <model usable='unknown'>Conroe</model>
+      <model usable='unknown'>n270</model>
+      <model usable='unknown'>athlon</model>
+      <model usable='unknown'>pentium3</model>
+      <model usable='unknown'>pentium2</model>
+      <model usable='unknown'>pentium</model>
+      <model usable='unknown'>486</model>
+      <model usable='unknown'>coreduo</model>
+      <model usable='unknown'>kvm32</model>
+      <model usable='unknown'>qemu32</model>
+      <model usable='unknown'>kvm64</model>
+      <model usable='unknown'>core2duo</model>
+      <model usable='unknown'>phenom</model>
+      <model usable='unknown'>qemu64</model>
+    </mode>
+  </cpu>
+  <devices>
+    <disk supported='yes'>
+      <enum name='diskDevice'>
+        <value>disk</value>
+        <value>cdrom</value>
+        <value>floppy</value>
+        <value>lun</value>
+      </enum>
+      <enum name='bus'>
+        <value>fdc</value>
+        <value>scsi</value>
+        <value>virtio</value>
+        <value>usb</value>
+        <value>sata</value>
+      </enum>
+      <enum name='model'>
+        <value>virtio</value>
+        <value>virtio-transitional</value>
+        <value>virtio-non-transitional</value>
+      </enum>
+    </disk>
+    <graphics supported='yes'>
+      <enum name='type'>
+        <value>sdl</value>
+        <value>vnc</value>
+        <value>spice</value>
+      </enum>
+    </graphics>
+    <video supported='yes'>
+      <enum name='modelType'>
+        <value>vga</value>
+        <value>cirrus</value>
+        <value>vmvga</value>
+        <value>qxl</value>
+        <value>virtio</value>
+      </enum>
+    </video>
+    <hostdev supported='yes'>
+      <enum name='mode'>
+        <value>subsystem</value>
+      </enum>
+      <enum name='startupPolicy'>
+        <value>default</value>
+        <value>mandatory</value>
+        <value>requisite</value>
+        <value>optional</value>
+      </enum>
+      <enum name='subsysType'>
+        <value>usb</value>
+        <value>pci</value>
+        <value>scsi</value>
+      </enum>
+      <enum name='capsType'/>
+      <enum name='pciBackend'>
+        <value>default</value>
+        <value>vfio</value>
+      </enum>
+    </hostdev>
+    <rng supported='yes'>
+      <enum name='model'>
+        <value>virtio</value>
+        <value>virtio-transitional</value>
+        <value>virtio-non-transitional</value>
+      </enum>
+      <enum name='backendModel'>
+        <value>random</value>
+        <value>egd</value>
+      </enum>
+    </rng>
+  </devices>
+  <features>
+    <gic supported='no'/>
+    <vmcoreinfo supported='no'/>
+    <genid supported='no'/>
+    <sev supported='no'/>
+  </features>
+</domainCapabilities>
diff --git a/tests/domaincapsdata/qemu_2.6.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_2.6.0-tcg.x86_64.xml
new file mode 100644 (file)
index 0000000..d054bb0
--- /dev/null
@@ -0,0 +1,143 @@
+<domainCapabilities>
+  <path>/usr/bin/qemu-system-x86_64</path>
+  <domain>qemu</domain>
+  <machine>pc-i440fx-2.6</machine>
+  <arch>x86_64</arch>
+  <vcpu max='255'/>
+  <iothreads supported='yes'/>
+  <os supported='yes'>
+    <enum name='firmware'>
+      <value>bios</value>
+      <value>efi</value>
+    </enum>
+    <loader supported='yes'>
+      <value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
+      <value>/usr/share/AAVMF/AAVMF32_CODE.fd</value>
+      <value>/usr/share/OVMF/OVMF_CODE.fd</value>
+      <enum name='type'>
+        <value>rom</value>
+        <value>pflash</value>
+      </enum>
+      <enum name='readonly'>
+        <value>yes</value>
+        <value>no</value>
+      </enum>
+      <enum name='secure'>
+        <value>no</value>
+      </enum>
+    </loader>
+  </os>
+  <cpu>
+    <mode name='host-passthrough' supported='no'/>
+    <mode name='host-model' supported='yes'>
+      <model fallback='allow'>Broadwell</model>
+    </mode>
+    <mode name='custom' supported='yes'>
+      <model usable='unknown'>Opteron_G5</model>
+      <model usable='unknown'>Opteron_G4</model>
+      <model usable='unknown'>Opteron_G3</model>
+      <model usable='unknown'>Opteron_G2</model>
+      <model usable='unknown'>Opteron_G1</model>
+      <model usable='unknown'>Broadwell</model>
+      <model usable='unknown'>Broadwell-noTSX</model>
+      <model usable='unknown'>Haswell</model>
+      <model usable='unknown'>Haswell-noTSX</model>
+      <model usable='unknown'>IvyBridge</model>
+      <model usable='unknown'>SandyBridge</model>
+      <model usable='unknown'>Westmere</model>
+      <model usable='unknown'>Nehalem</model>
+      <model usable='unknown'>Penryn</model>
+      <model usable='unknown'>Conroe</model>
+      <model usable='unknown'>n270</model>
+      <model usable='unknown'>athlon</model>
+      <model usable='unknown'>pentium3</model>
+      <model usable='unknown'>pentium2</model>
+      <model usable='unknown'>pentium</model>
+      <model usable='unknown'>486</model>
+      <model usable='unknown'>coreduo</model>
+      <model usable='unknown'>kvm32</model>
+      <model usable='unknown'>qemu32</model>
+      <model usable='unknown'>kvm64</model>
+      <model usable='unknown'>core2duo</model>
+      <model usable='unknown'>phenom</model>
+      <model usable='unknown'>qemu64</model>
+    </mode>
+  </cpu>
+  <devices>
+    <disk supported='yes'>
+      <enum name='diskDevice'>
+        <value>disk</value>
+        <value>cdrom</value>
+        <value>floppy</value>
+        <value>lun</value>
+      </enum>
+      <enum name='bus'>
+        <value>ide</value>
+        <value>fdc</value>
+        <value>scsi</value>
+        <value>virtio</value>
+        <value>usb</value>
+        <value>sata</value>
+      </enum>
+      <enum name='model'>
+        <value>virtio</value>
+        <value>virtio-transitional</value>
+        <value>virtio-non-transitional</value>
+      </enum>
+    </disk>
+    <graphics supported='yes'>
+      <enum name='type'>
+        <value>sdl</value>
+        <value>vnc</value>
+        <value>spice</value>
+      </enum>
+    </graphics>
+    <video supported='yes'>
+      <enum name='modelType'>
+        <value>vga</value>
+        <value>cirrus</value>
+        <value>vmvga</value>
+        <value>qxl</value>
+        <value>virtio</value>
+      </enum>
+    </video>
+    <hostdev supported='yes'>
+      <enum name='mode'>
+        <value>subsystem</value>
+      </enum>
+      <enum name='startupPolicy'>
+        <value>default</value>
+        <value>mandatory</value>
+        <value>requisite</value>
+        <value>optional</value>
+      </enum>
+      <enum name='subsysType'>
+        <value>usb</value>
+        <value>pci</value>
+        <value>scsi</value>
+      </enum>
+      <enum name='capsType'/>
+      <enum name='pciBackend'>
+        <value>default</value>
+        <value>vfio</value>
+      </enum>
+    </hostdev>
+    <rng supported='yes'>
+      <enum name='model'>
+        <value>virtio</value>
+        <value>virtio-transitional</value>
+        <value>virtio-non-transitional</value>
+      </enum>
+      <enum name='backendModel'>
+        <value>random</value>
+        <value>egd</value>
+      </enum>
+    </rng>
+  </devices>
+  <features>
+    <gic supported='no'/>
+    <vmcoreinfo supported='no'/>
+    <genid supported='no'/>
+    <sev supported='no'/>
+  </features>
+</domainCapabilities>
diff --git a/tests/domaincapsdata/qemu_2.8.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_2.8.0-q35.x86_64.xml
new file mode 100644 (file)
index 0000000..e1f014d
--- /dev/null
@@ -0,0 +1,144 @@
+<domainCapabilities>
+  <path>/usr/bin/qemu-system-x86_64</path>
+  <domain>kvm</domain>
+  <machine>pc-q35-2.8</machine>
+  <arch>x86_64</arch>
+  <vcpu max='288'/>
+  <iothreads supported='yes'/>
+  <os supported='yes'>
+    <enum name='firmware'>
+      <value>bios</value>
+      <value>efi</value>
+    </enum>
+    <loader supported='yes'>
+      <value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
+      <value>/usr/share/AAVMF/AAVMF32_CODE.fd</value>
+      <value>/usr/share/OVMF/OVMF_CODE.fd</value>
+      <enum name='type'>
+        <value>rom</value>
+        <value>pflash</value>
+      </enum>
+      <enum name='readonly'>
+        <value>yes</value>
+        <value>no</value>
+      </enum>
+      <enum name='secure'>
+        <value>yes</value>
+        <value>no</value>
+      </enum>
+    </loader>
+  </os>
+  <cpu>
+    <mode name='host-passthrough' supported='yes'/>
+    <mode name='host-model' supported='yes'>
+      <model fallback='allow'>Broadwell</model>
+    </mode>
+    <mode name='custom' supported='yes'>
+      <model usable='yes'>qemu64</model>
+      <model usable='yes'>qemu32</model>
+      <model usable='no'>phenom</model>
+      <model usable='yes'>pentium3</model>
+      <model usable='yes'>pentium2</model>
+      <model usable='yes'>pentium</model>
+      <model usable='yes'>n270</model>
+      <model usable='yes'>kvm64</model>
+      <model usable='yes'>kvm32</model>
+      <model usable='yes'>coreduo</model>
+      <model usable='yes'>core2duo</model>
+      <model usable='no'>athlon</model>
+      <model usable='yes'>Westmere</model>
+      <model usable='yes'>Skylake-Client</model>
+      <model usable='yes'>SandyBridge</model>
+      <model usable='yes'>Penryn</model>
+      <model usable='no'>Opteron_G5</model>
+      <model usable='no'>Opteron_G4</model>
+      <model usable='no'>Opteron_G3</model>
+      <model usable='yes'>Opteron_G2</model>
+      <model usable='yes'>Opteron_G1</model>
+      <model usable='yes'>Nehalem</model>
+      <model usable='yes'>IvyBridge</model>
+      <model usable='yes'>Haswell</model>
+      <model usable='yes'>Haswell-noTSX</model>
+      <model usable='yes'>Conroe</model>
+      <model usable='yes'>Broadwell</model>
+      <model usable='yes'>Broadwell-noTSX</model>
+      <model usable='yes'>486</model>
+    </mode>
+  </cpu>
+  <devices>
+    <disk supported='yes'>
+      <enum name='diskDevice'>
+        <value>disk</value>
+        <value>cdrom</value>
+        <value>floppy</value>
+        <value>lun</value>
+      </enum>
+      <enum name='bus'>
+        <value>fdc</value>
+        <value>scsi</value>
+        <value>virtio</value>
+        <value>usb</value>
+        <value>sata</value>
+      </enum>
+      <enum name='model'>
+        <value>virtio</value>
+        <value>virtio-transitional</value>
+        <value>virtio-non-transitional</value>
+      </enum>
+    </disk>
+    <graphics supported='yes'>
+      <enum name='type'>
+        <value>sdl</value>
+        <value>vnc</value>
+        <value>spice</value>
+      </enum>
+    </graphics>
+    <video supported='yes'>
+      <enum name='modelType'>
+        <value>vga</value>
+        <value>cirrus</value>
+        <value>vmvga</value>
+        <value>qxl</value>
+        <value>virtio</value>
+      </enum>
+    </video>
+    <hostdev supported='yes'>
+      <enum name='mode'>
+        <value>subsystem</value>
+      </enum>
+      <enum name='startupPolicy'>
+        <value>default</value>
+        <value>mandatory</value>
+        <value>requisite</value>
+        <value>optional</value>
+      </enum>
+      <enum name='subsysType'>
+        <value>usb</value>
+        <value>pci</value>
+        <value>scsi</value>
+      </enum>
+      <enum name='capsType'/>
+      <enum name='pciBackend'>
+        <value>default</value>
+        <value>vfio</value>
+      </enum>
+    </hostdev>
+    <rng supported='yes'>
+      <enum name='model'>
+        <value>virtio</value>
+        <value>virtio-transitional</value>
+        <value>virtio-non-transitional</value>
+      </enum>
+      <enum name='backendModel'>
+        <value>random</value>
+        <value>egd</value>
+      </enum>
+    </rng>
+  </devices>
+  <features>
+    <gic supported='no'/>
+    <vmcoreinfo supported='no'/>
+    <genid supported='no'/>
+    <sev supported='no'/>
+  </features>
+</domainCapabilities>
diff --git a/tests/domaincapsdata/qemu_3.1.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_3.1.0-q35.x86_64.xml
new file mode 100644 (file)
index 0000000..595476b
--- /dev/null
@@ -0,0 +1,172 @@
+<domainCapabilities>
+  <path>/usr/bin/qemu-system-x86_64</path>
+  <domain>kvm</domain>
+  <machine>pc-q35-3.1</machine>
+  <arch>x86_64</arch>
+  <vcpu max='288'/>
+  <iothreads supported='yes'/>
+  <os supported='yes'>
+    <enum name='firmware'>
+      <value>bios</value>
+      <value>efi</value>
+    </enum>
+    <loader supported='yes'>
+      <value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
+      <value>/usr/share/AAVMF/AAVMF32_CODE.fd</value>
+      <value>/usr/share/OVMF/OVMF_CODE.fd</value>
+      <enum name='type'>
+        <value>rom</value>
+        <value>pflash</value>
+      </enum>
+      <enum name='readonly'>
+        <value>yes</value>
+        <value>no</value>
+      </enum>
+      <enum name='secure'>
+        <value>yes</value>
+        <value>no</value>
+      </enum>
+    </loader>
+  </os>
+  <cpu>
+    <mode name='host-passthrough' supported='yes'/>
+    <mode name='host-model' supported='yes'>
+      <model fallback='forbid'>Skylake-Client-IBRS</model>
+      <vendor>Intel</vendor>
+      <feature policy='require' name='ss'/>
+      <feature policy='require' name='vmx'/>
+      <feature policy='require' name='hypervisor'/>
+      <feature policy='require' name='tsc_adjust'/>
+      <feature policy='require' name='clflushopt'/>
+      <feature policy='require' name='umip'/>
+      <feature policy='require' name='arch-capabilities'/>
+      <feature policy='require' name='xsaves'/>
+      <feature policy='require' name='pdpe1gb'/>
+      <feature policy='require' name='invtsc'/>
+    </mode>
+    <mode name='custom' supported='yes'>
+      <model usable='yes'>qemu64</model>
+      <model usable='yes'>qemu32</model>
+      <model usable='no'>phenom</model>
+      <model usable='yes'>pentium3</model>
+      <model usable='yes'>pentium2</model>
+      <model usable='yes'>pentium</model>
+      <model usable='yes'>n270</model>
+      <model usable='yes'>kvm64</model>
+      <model usable='yes'>kvm32</model>
+      <model usable='yes'>coreduo</model>
+      <model usable='yes'>core2duo</model>
+      <model usable='no'>athlon</model>
+      <model usable='yes'>Westmere-IBRS</model>
+      <model usable='yes'>Westmere</model>
+      <model usable='no'>Skylake-Server-IBRS</model>
+      <model usable='no'>Skylake-Server</model>
+      <model usable='yes'>Skylake-Client-IBRS</model>
+      <model usable='yes'>Skylake-Client</model>
+      <model usable='yes'>SandyBridge-IBRS</model>
+      <model usable='yes'>SandyBridge</model>
+      <model usable='yes'>Penryn</model>
+      <model usable='no'>Opteron_G5</model>
+      <model usable='no'>Opteron_G4</model>
+      <model usable='no'>Opteron_G3</model>
+      <model usable='yes'>Opteron_G2</model>
+      <model usable='yes'>Opteron_G1</model>
+      <model usable='yes'>Nehalem-IBRS</model>
+      <model usable='yes'>Nehalem</model>
+      <model usable='yes'>IvyBridge-IBRS</model>
+      <model usable='yes'>IvyBridge</model>
+      <model usable='no'>Icelake-Server</model>
+      <model usable='no'>Icelake-Client</model>
+      <model usable='yes'>Haswell-noTSX-IBRS</model>
+      <model usable='yes'>Haswell-noTSX</model>
+      <model usable='yes'>Haswell-IBRS</model>
+      <model usable='yes'>Haswell</model>
+      <model usable='no'>EPYC-IBPB</model>
+      <model usable='no'>EPYC</model>
+      <model usable='yes'>Conroe</model>
+      <model usable='no'>Cascadelake-Server</model>
+      <model usable='yes'>Broadwell-noTSX-IBRS</model>
+      <model usable='yes'>Broadwell-noTSX</model>
+      <model usable='yes'>Broadwell-IBRS</model>
+      <model usable='yes'>Broadwell</model>
+      <model usable='yes'>486</model>
+    </mode>
+  </cpu>
+  <devices>
+    <disk supported='yes'>
+      <enum name='diskDevice'>
+        <value>disk</value>
+        <value>cdrom</value>
+        <value>floppy</value>
+        <value>lun</value>
+      </enum>
+      <enum name='bus'>
+        <value>fdc</value>
+        <value>scsi</value>
+        <value>virtio</value>
+        <value>usb</value>
+        <value>sata</value>
+      </enum>
+      <enum name='model'>
+        <value>virtio</value>
+        <value>virtio-transitional</value>
+        <value>virtio-non-transitional</value>
+      </enum>
+    </disk>
+    <graphics supported='yes'>
+      <enum name='type'>
+        <value>sdl</value>
+        <value>vnc</value>
+        <value>spice</value>
+      </enum>
+    </graphics>
+    <video supported='yes'>
+      <enum name='modelType'>
+        <value>vga</value>
+        <value>cirrus</value>
+        <value>vmvga</value>
+        <value>qxl</value>
+        <value>virtio</value>
+        <value>bochs</value>
+      </enum>
+    </video>
+    <hostdev supported='yes'>
+      <enum name='mode'>
+        <value>subsystem</value>
+      </enum>
+      <enum name='startupPolicy'>
+        <value>default</value>
+        <value>mandatory</value>
+        <value>requisite</value>
+        <value>optional</value>
+      </enum>
+      <enum name='subsysType'>
+        <value>usb</value>
+        <value>pci</value>
+        <value>scsi</value>
+      </enum>
+      <enum name='capsType'/>
+      <enum name='pciBackend'>
+        <value>default</value>
+        <value>vfio</value>
+      </enum>
+    </hostdev>
+    <rng supported='yes'>
+      <enum name='model'>
+        <value>virtio</value>
+        <value>virtio-transitional</value>
+        <value>virtio-non-transitional</value>
+      </enum>
+      <enum name='backendModel'>
+        <value>random</value>
+        <value>egd</value>
+      </enum>
+    </rng>
+  </devices>
+  <features>
+    <gic supported='no'/>
+    <vmcoreinfo supported='yes'/>
+    <genid supported='yes'/>
+    <sev supported='no'/>
+  </features>
+</domainCapabilities>
diff --git a/tests/domaincapsdata/qemu_3.1.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_3.1.0-tcg.x86_64.xml
new file mode 100644 (file)
index 0000000..82d31b3
--- /dev/null
@@ -0,0 +1,187 @@
+<domainCapabilities>
+  <path>/usr/bin/qemu-system-x86_64</path>
+  <domain>qemu</domain>
+  <machine>pc-i440fx-3.1</machine>
+  <arch>x86_64</arch>
+  <vcpu max='255'/>
+  <iothreads supported='yes'/>
+  <os supported='yes'>
+    <enum name='firmware'>
+      <value>bios</value>
+      <value>efi</value>
+    </enum>
+    <loader supported='yes'>
+      <value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
+      <value>/usr/share/AAVMF/AAVMF32_CODE.fd</value>
+      <value>/usr/share/OVMF/OVMF_CODE.fd</value>
+      <enum name='type'>
+        <value>rom</value>
+        <value>pflash</value>
+      </enum>
+      <enum name='readonly'>
+        <value>yes</value>
+        <value>no</value>
+      </enum>
+      <enum name='secure'>
+        <value>no</value>
+      </enum>
+    </loader>
+  </os>
+  <cpu>
+    <mode name='host-passthrough' supported='no'/>
+    <mode name='host-model' supported='yes'>
+      <model fallback='forbid'>EPYC</model>
+      <vendor>AMD</vendor>
+      <feature policy='require' name='acpi'/>
+      <feature policy='require' name='ss'/>
+      <feature policy='require' name='hypervisor'/>
+      <feature policy='require' name='erms'/>
+      <feature policy='require' name='mpx'/>
+      <feature policy='require' name='pcommit'/>
+      <feature policy='require' name='clwb'/>
+      <feature policy='require' name='pku'/>
+      <feature policy='require' name='la57'/>
+      <feature policy='require' name='3dnowext'/>
+      <feature policy='require' name='3dnow'/>
+      <feature policy='disable' name='vme'/>
+      <feature policy='disable' name='fma'/>
+      <feature policy='disable' name='avx'/>
+      <feature policy='disable' name='f16c'/>
+      <feature policy='disable' name='rdrand'/>
+      <feature policy='disable' name='avx2'/>
+      <feature policy='disable' name='rdseed'/>
+      <feature policy='disable' name='sha-ni'/>
+      <feature policy='disable' name='xsavec'/>
+      <feature policy='disable' name='fxsr_opt'/>
+      <feature policy='disable' name='misalignsse'/>
+      <feature policy='disable' name='3dnowprefetch'/>
+      <feature policy='disable' name='osvw'/>
+      <feature policy='disable' name='topoext'/>
+    </mode>
+    <mode name='custom' supported='yes'>
+      <model usable='yes'>qemu64</model>
+      <model usable='yes'>qemu32</model>
+      <model usable='no'>phenom</model>
+      <model usable='yes'>pentium3</model>
+      <model usable='yes'>pentium2</model>
+      <model usable='yes'>pentium</model>
+      <model usable='yes'>n270</model>
+      <model usable='yes'>kvm64</model>
+      <model usable='yes'>kvm32</model>
+      <model usable='yes'>coreduo</model>
+      <model usable='yes'>core2duo</model>
+      <model usable='yes'>athlon</model>
+      <model usable='no'>Westmere-IBRS</model>
+      <model usable='yes'>Westmere</model>
+      <model usable='no'>Skylake-Server-IBRS</model>
+      <model usable='no'>Skylake-Server</model>
+      <model usable='no'>Skylake-Client-IBRS</model>
+      <model usable='no'>Skylake-Client</model>
+      <model usable='no'>SandyBridge-IBRS</model>
+      <model usable='no'>SandyBridge</model>
+      <model usable='yes'>Penryn</model>
+      <model usable='no'>Opteron_G5</model>
+      <model usable='no'>Opteron_G4</model>
+      <model usable='no'>Opteron_G3</model>
+      <model usable='yes'>Opteron_G2</model>
+      <model usable='yes'>Opteron_G1</model>
+      <model usable='no'>Nehalem-IBRS</model>
+      <model usable='yes'>Nehalem</model>
+      <model usable='no'>IvyBridge-IBRS</model>
+      <model usable='no'>IvyBridge</model>
+      <model usable='no'>Icelake-Server</model>
+      <model usable='no'>Icelake-Client</model>
+      <model usable='no'>Haswell-noTSX-IBRS</model>
+      <model usable='no'>Haswell-noTSX</model>
+      <model usable='no'>Haswell-IBRS</model>
+      <model usable='no'>Haswell</model>
+      <model usable='no'>EPYC-IBPB</model>
+      <model usable='no'>EPYC</model>
+      <model usable='yes'>Conroe</model>
+      <model usable='no'>Cascadelake-Server</model>
+      <model usable='no'>Broadwell-noTSX-IBRS</model>
+      <model usable='no'>Broadwell-noTSX</model>
+      <model usable='no'>Broadwell-IBRS</model>
+      <model usable='no'>Broadwell</model>
+      <model usable='yes'>486</model>
+    </mode>
+  </cpu>
+  <devices>
+    <disk supported='yes'>
+      <enum name='diskDevice'>
+        <value>disk</value>
+        <value>cdrom</value>
+        <value>floppy</value>
+        <value>lun</value>
+      </enum>
+      <enum name='bus'>
+        <value>ide</value>
+        <value>fdc</value>
+        <value>scsi</value>
+        <value>virtio</value>
+        <value>usb</value>
+        <value>sata</value>
+      </enum>
+      <enum name='model'>
+        <value>virtio</value>
+        <value>virtio-transitional</value>
+        <value>virtio-non-transitional</value>
+      </enum>
+    </disk>
+    <graphics supported='yes'>
+      <enum name='type'>
+        <value>sdl</value>
+        <value>vnc</value>
+        <value>spice</value>
+      </enum>
+    </graphics>
+    <video supported='yes'>
+      <enum name='modelType'>
+        <value>vga</value>
+        <value>cirrus</value>
+        <value>vmvga</value>
+        <value>qxl</value>
+        <value>virtio</value>
+        <value>bochs</value>
+      </enum>
+    </video>
+    <hostdev supported='yes'>
+      <enum name='mode'>
+        <value>subsystem</value>
+      </enum>
+      <enum name='startupPolicy'>
+        <value>default</value>
+        <value>mandatory</value>
+        <value>requisite</value>
+        <value>optional</value>
+      </enum>
+      <enum name='subsysType'>
+        <value>usb</value>
+        <value>pci</value>
+        <value>scsi</value>
+      </enum>
+      <enum name='capsType'/>
+      <enum name='pciBackend'>
+        <value>default</value>
+        <value>vfio</value>
+      </enum>
+    </hostdev>
+    <rng supported='yes'>
+      <enum name='model'>
+        <value>virtio</value>
+        <value>virtio-transitional</value>
+        <value>virtio-non-transitional</value>
+      </enum>
+      <enum name='backendModel'>
+        <value>random</value>
+        <value>egd</value>
+      </enum>
+    </rng>
+  </devices>
+  <features>
+    <gic supported='no'/>
+    <vmcoreinfo supported='yes'/>
+    <genid supported='yes'/>
+    <sev supported='no'/>
+  </features>
+</domainCapabilities>
diff --git a/tests/domaincapsdata/qemu_4.0.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_4.0.0-q35.x86_64.xml
new file mode 100644 (file)
index 0000000..aba5bdf
--- /dev/null
@@ -0,0 +1,172 @@
+<domainCapabilities>
+  <path>/usr/bin/qemu-system-x86_64</path>
+  <domain>kvm</domain>
+  <machine>pc-q35-4.0</machine>
+  <arch>x86_64</arch>
+  <vcpu max='288'/>
+  <iothreads supported='yes'/>
+  <os supported='yes'>
+    <enum name='firmware'>
+      <value>bios</value>
+      <value>efi</value>
+    </enum>
+    <loader supported='yes'>
+      <value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
+      <value>/usr/share/AAVMF/AAVMF32_CODE.fd</value>
+      <value>/usr/share/OVMF/OVMF_CODE.fd</value>
+      <enum name='type'>
+        <value>rom</value>
+        <value>pflash</value>
+      </enum>
+      <enum name='readonly'>
+        <value>yes</value>
+        <value>no</value>
+      </enum>
+      <enum name='secure'>
+        <value>yes</value>
+        <value>no</value>
+      </enum>
+    </loader>
+  </os>
+  <cpu>
+    <mode name='host-passthrough' supported='yes'/>
+    <mode name='host-model' supported='yes'>
+      <model fallback='forbid'>Skylake-Client-IBRS</model>
+      <vendor>Intel</vendor>
+      <feature policy='require' name='ss'/>
+      <feature policy='require' name='vmx'/>
+      <feature policy='require' name='hypervisor'/>
+      <feature policy='require' name='tsc_adjust'/>
+      <feature policy='require' name='clflushopt'/>
+      <feature policy='require' name='umip'/>
+      <feature policy='require' name='ssbd'/>
+      <feature policy='require' name='xsaves'/>
+      <feature policy='require' name='pdpe1gb'/>
+      <feature policy='require' name='invtsc'/>
+    </mode>
+    <mode name='custom' supported='yes'>
+      <model usable='yes'>qemu64</model>
+      <model usable='yes'>qemu32</model>
+      <model usable='no'>phenom</model>
+      <model usable='yes'>pentium3</model>
+      <model usable='yes'>pentium2</model>
+      <model usable='yes'>pentium</model>
+      <model usable='yes'>n270</model>
+      <model usable='yes'>kvm64</model>
+      <model usable='yes'>kvm32</model>
+      <model usable='yes'>coreduo</model>
+      <model usable='yes'>core2duo</model>
+      <model usable='no'>athlon</model>
+      <model usable='yes'>Westmere-IBRS</model>
+      <model usable='yes'>Westmere</model>
+      <model usable='no'>Skylake-Server-IBRS</model>
+      <model usable='no'>Skylake-Server</model>
+      <model usable='yes'>Skylake-Client-IBRS</model>
+      <model usable='yes'>Skylake-Client</model>
+      <model usable='yes'>SandyBridge-IBRS</model>
+      <model usable='yes'>SandyBridge</model>
+      <model usable='yes'>Penryn</model>
+      <model usable='no'>Opteron_G5</model>
+      <model usable='no'>Opteron_G4</model>
+      <model usable='no'>Opteron_G3</model>
+      <model usable='yes'>Opteron_G2</model>
+      <model usable='yes'>Opteron_G1</model>
+      <model usable='yes'>Nehalem-IBRS</model>
+      <model usable='yes'>Nehalem</model>
+      <model usable='yes'>IvyBridge-IBRS</model>
+      <model usable='yes'>IvyBridge</model>
+      <model usable='no'>Icelake-Server</model>
+      <model usable='no'>Icelake-Client</model>
+      <model usable='yes'>Haswell-noTSX-IBRS</model>
+      <model usable='yes'>Haswell-noTSX</model>
+      <model usable='yes'>Haswell-IBRS</model>
+      <model usable='yes'>Haswell</model>
+      <model usable='no'>EPYC-IBPB</model>
+      <model usable='no'>EPYC</model>
+      <model usable='yes'>Conroe</model>
+      <model usable='no'>Cascadelake-Server</model>
+      <model usable='yes'>Broadwell-noTSX-IBRS</model>
+      <model usable='yes'>Broadwell-noTSX</model>
+      <model usable='yes'>Broadwell-IBRS</model>
+      <model usable='yes'>Broadwell</model>
+      <model usable='yes'>486</model>
+    </mode>
+  </cpu>
+  <devices>
+    <disk supported='yes'>
+      <enum name='diskDevice'>
+        <value>disk</value>
+        <value>cdrom</value>
+        <value>floppy</value>
+        <value>lun</value>
+      </enum>
+      <enum name='bus'>
+        <value>fdc</value>
+        <value>scsi</value>
+        <value>virtio</value>
+        <value>usb</value>
+        <value>sata</value>
+      </enum>
+      <enum name='model'>
+        <value>virtio</value>
+        <value>virtio-transitional</value>
+        <value>virtio-non-transitional</value>
+      </enum>
+    </disk>
+    <graphics supported='yes'>
+      <enum name='type'>
+        <value>sdl</value>
+        <value>vnc</value>
+        <value>spice</value>
+      </enum>
+    </graphics>
+    <video supported='yes'>
+      <enum name='modelType'>
+        <value>vga</value>
+        <value>cirrus</value>
+        <value>vmvga</value>
+        <value>qxl</value>
+        <value>virtio</value>
+        <value>bochs</value>
+      </enum>
+    </video>
+    <hostdev supported='yes'>
+      <enum name='mode'>
+        <value>subsystem</value>
+      </enum>
+      <enum name='startupPolicy'>
+        <value>default</value>
+        <value>mandatory</value>
+        <value>requisite</value>
+        <value>optional</value>
+      </enum>
+      <enum name='subsysType'>
+        <value>usb</value>
+        <value>pci</value>
+        <value>scsi</value>
+      </enum>
+      <enum name='capsType'/>
+      <enum name='pciBackend'>
+        <value>default</value>
+        <value>vfio</value>
+      </enum>
+    </hostdev>
+    <rng supported='yes'>
+      <enum name='model'>
+        <value>virtio</value>
+        <value>virtio-transitional</value>
+        <value>virtio-non-transitional</value>
+      </enum>
+      <enum name='backendModel'>
+        <value>random</value>
+        <value>egd</value>
+      </enum>
+    </rng>
+  </devices>
+  <features>
+    <gic supported='no'/>
+    <vmcoreinfo supported='yes'/>
+    <genid supported='yes'/>
+    <sev supported='no'/>
+  </features>
+</domainCapabilities>
diff --git a/tests/domaincapsdata/qemu_4.0.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_4.0.0-tcg.x86_64.xml
new file mode 100644 (file)
index 0000000..3630653
--- /dev/null
@@ -0,0 +1,187 @@
+<domainCapabilities>
+  <path>/usr/bin/qemu-system-x86_64</path>
+  <domain>qemu</domain>
+  <machine>pc-i440fx-4.0</machine>
+  <arch>x86_64</arch>
+  <vcpu max='255'/>
+  <iothreads supported='yes'/>
+  <os supported='yes'>
+    <enum name='firmware'>
+      <value>bios</value>
+      <value>efi</value>
+    </enum>
+    <loader supported='yes'>
+      <value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
+      <value>/usr/share/AAVMF/AAVMF32_CODE.fd</value>
+      <value>/usr/share/OVMF/OVMF_CODE.fd</value>
+      <enum name='type'>
+        <value>rom</value>
+        <value>pflash</value>
+      </enum>
+      <enum name='readonly'>
+        <value>yes</value>
+        <value>no</value>
+      </enum>
+      <enum name='secure'>
+        <value>no</value>
+      </enum>
+    </loader>
+  </os>
+  <cpu>
+    <mode name='host-passthrough' supported='no'/>
+    <mode name='host-model' supported='yes'>
+      <model fallback='forbid'>EPYC</model>
+      <vendor>AMD</vendor>
+      <feature policy='require' name='acpi'/>
+      <feature policy='require' name='ss'/>
+      <feature policy='require' name='hypervisor'/>
+      <feature policy='require' name='erms'/>
+      <feature policy='require' name='mpx'/>
+      <feature policy='require' name='pcommit'/>
+      <feature policy='require' name='clwb'/>
+      <feature policy='require' name='pku'/>
+      <feature policy='require' name='la57'/>
+      <feature policy='require' name='3dnowext'/>
+      <feature policy='require' name='3dnow'/>
+      <feature policy='disable' name='vme'/>
+      <feature policy='disable' name='fma'/>
+      <feature policy='disable' name='avx'/>
+      <feature policy='disable' name='f16c'/>
+      <feature policy='disable' name='rdrand'/>
+      <feature policy='disable' name='avx2'/>
+      <feature policy='disable' name='rdseed'/>
+      <feature policy='disable' name='sha-ni'/>
+      <feature policy='disable' name='xsavec'/>
+      <feature policy='disable' name='fxsr_opt'/>
+      <feature policy='disable' name='misalignsse'/>
+      <feature policy='disable' name='3dnowprefetch'/>
+      <feature policy='disable' name='osvw'/>
+      <feature policy='disable' name='topoext'/>
+    </mode>
+    <mode name='custom' supported='yes'>
+      <model usable='yes'>qemu64</model>
+      <model usable='yes'>qemu32</model>
+      <model usable='no'>phenom</model>
+      <model usable='yes'>pentium3</model>
+      <model usable='yes'>pentium2</model>
+      <model usable='yes'>pentium</model>
+      <model usable='yes'>n270</model>
+      <model usable='yes'>kvm64</model>
+      <model usable='yes'>kvm32</model>
+      <model usable='yes'>coreduo</model>
+      <model usable='yes'>core2duo</model>
+      <model usable='yes'>athlon</model>
+      <model usable='no'>Westmere-IBRS</model>
+      <model usable='yes'>Westmere</model>
+      <model usable='no'>Skylake-Server-IBRS</model>
+      <model usable='no'>Skylake-Server</model>
+      <model usable='no'>Skylake-Client-IBRS</model>
+      <model usable='no'>Skylake-Client</model>
+      <model usable='no'>SandyBridge-IBRS</model>
+      <model usable='no'>SandyBridge</model>
+      <model usable='yes'>Penryn</model>
+      <model usable='no'>Opteron_G5</model>
+      <model usable='no'>Opteron_G4</model>
+      <model usable='no'>Opteron_G3</model>
+      <model usable='yes'>Opteron_G2</model>
+      <model usable='yes'>Opteron_G1</model>
+      <model usable='no'>Nehalem-IBRS</model>
+      <model usable='yes'>Nehalem</model>
+      <model usable='no'>IvyBridge-IBRS</model>
+      <model usable='no'>IvyBridge</model>
+      <model usable='no'>Icelake-Server</model>
+      <model usable='no'>Icelake-Client</model>
+      <model usable='no'>Haswell-noTSX-IBRS</model>
+      <model usable='no'>Haswell-noTSX</model>
+      <model usable='no'>Haswell-IBRS</model>
+      <model usable='no'>Haswell</model>
+      <model usable='no'>EPYC-IBPB</model>
+      <model usable='no'>EPYC</model>
+      <model usable='yes'>Conroe</model>
+      <model usable='no'>Cascadelake-Server</model>
+      <model usable='no'>Broadwell-noTSX-IBRS</model>
+      <model usable='no'>Broadwell-noTSX</model>
+      <model usable='no'>Broadwell-IBRS</model>
+      <model usable='no'>Broadwell</model>
+      <model usable='yes'>486</model>
+    </mode>
+  </cpu>
+  <devices>
+    <disk supported='yes'>
+      <enum name='diskDevice'>
+        <value>disk</value>
+        <value>cdrom</value>
+        <value>floppy</value>
+        <value>lun</value>
+      </enum>
+      <enum name='bus'>
+        <value>ide</value>
+        <value>fdc</value>
+        <value>scsi</value>
+        <value>virtio</value>
+        <value>usb</value>
+        <value>sata</value>
+      </enum>
+      <enum name='model'>
+        <value>virtio</value>
+        <value>virtio-transitional</value>
+        <value>virtio-non-transitional</value>
+      </enum>
+    </disk>
+    <graphics supported='yes'>
+      <enum name='type'>
+        <value>sdl</value>
+        <value>vnc</value>
+        <value>spice</value>
+      </enum>
+    </graphics>
+    <video supported='yes'>
+      <enum name='modelType'>
+        <value>vga</value>
+        <value>cirrus</value>
+        <value>vmvga</value>
+        <value>qxl</value>
+        <value>virtio</value>
+        <value>bochs</value>
+      </enum>
+    </video>
+    <hostdev supported='yes'>
+      <enum name='mode'>
+        <value>subsystem</value>
+      </enum>
+      <enum name='startupPolicy'>
+        <value>default</value>
+        <value>mandatory</value>
+        <value>requisite</value>
+        <value>optional</value>
+      </enum>
+      <enum name='subsysType'>
+        <value>usb</value>
+        <value>pci</value>
+        <value>scsi</value>
+      </enum>
+      <enum name='capsType'/>
+      <enum name='pciBackend'>
+        <value>default</value>
+        <value>vfio</value>
+      </enum>
+    </hostdev>
+    <rng supported='yes'>
+      <enum name='model'>
+        <value>virtio</value>
+        <value>virtio-transitional</value>
+        <value>virtio-non-transitional</value>
+      </enum>
+      <enum name='backendModel'>
+        <value>random</value>
+        <value>egd</value>
+      </enum>
+    </rng>
+  </devices>
+  <features>
+    <gic supported='no'/>
+    <vmcoreinfo supported='yes'/>
+    <genid supported='yes'/>
+    <sev supported='no'/>
+  </features>
+</domainCapabilities>
diff --git a/tests/domaincapsdata/qemu_4.1.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_4.1.0-q35.x86_64.xml
new file mode 100644 (file)
index 0000000..481aba2
--- /dev/null
@@ -0,0 +1,176 @@
+<domainCapabilities>
+  <path>/usr/bin/qemu-system-x86_64</path>
+  <domain>kvm</domain>
+  <machine>pc-q35-4.1</machine>
+  <arch>x86_64</arch>
+  <vcpu max='288'/>
+  <iothreads supported='yes'/>
+  <os supported='yes'>
+    <enum name='firmware'>
+      <value>bios</value>
+      <value>efi</value>
+    </enum>
+    <loader supported='yes'>
+      <value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
+      <value>/usr/share/AAVMF/AAVMF32_CODE.fd</value>
+      <value>/usr/share/OVMF/OVMF_CODE.fd</value>
+      <enum name='type'>
+        <value>rom</value>
+        <value>pflash</value>
+      </enum>
+      <enum name='readonly'>
+        <value>yes</value>
+        <value>no</value>
+      </enum>
+      <enum name='secure'>
+        <value>yes</value>
+        <value>no</value>
+      </enum>
+    </loader>
+  </os>
+  <cpu>
+    <mode name='host-passthrough' supported='yes'/>
+    <mode name='host-model' supported='yes'>
+      <model fallback='forbid'>Skylake-Client-IBRS</model>
+      <vendor>Intel</vendor>
+      <feature policy='require' name='ss'/>
+      <feature policy='require' name='vmx'/>
+      <feature policy='require' name='hypervisor'/>
+      <feature policy='require' name='tsc_adjust'/>
+      <feature policy='require' name='clflushopt'/>
+      <feature policy='require' name='umip'/>
+      <feature policy='require' name='md-clear'/>
+      <feature policy='require' name='stibp'/>
+      <feature policy='require' name='arch-capabilities'/>
+      <feature policy='require' name='ssbd'/>
+      <feature policy='require' name='xsaves'/>
+      <feature policy='require' name='pdpe1gb'/>
+      <feature policy='require' name='invtsc'/>
+      <feature policy='require' name='skip-l1dfl-vmentry'/>
+    </mode>
+    <mode name='custom' supported='yes'>
+      <model usable='yes'>qemu64</model>
+      <model usable='yes'>qemu32</model>
+      <model usable='no'>phenom</model>
+      <model usable='yes'>pentium3</model>
+      <model usable='yes'>pentium2</model>
+      <model usable='yes'>pentium</model>
+      <model usable='yes'>n270</model>
+      <model usable='yes'>kvm64</model>
+      <model usable='yes'>kvm32</model>
+      <model usable='yes'>coreduo</model>
+      <model usable='yes'>core2duo</model>
+      <model usable='no'>athlon</model>
+      <model usable='yes'>Westmere-IBRS</model>
+      <model usable='yes'>Westmere</model>
+      <model usable='no'>Skylake-Server-IBRS</model>
+      <model usable='no'>Skylake-Server</model>
+      <model usable='yes'>Skylake-Client-IBRS</model>
+      <model usable='yes'>Skylake-Client</model>
+      <model usable='yes'>SandyBridge-IBRS</model>
+      <model usable='yes'>SandyBridge</model>
+      <model usable='yes'>Penryn</model>
+      <model usable='no'>Opteron_G5</model>
+      <model usable='no'>Opteron_G4</model>
+      <model usable='no'>Opteron_G3</model>
+      <model usable='yes'>Opteron_G2</model>
+      <model usable='yes'>Opteron_G1</model>
+      <model usable='yes'>Nehalem-IBRS</model>
+      <model usable='yes'>Nehalem</model>
+      <model usable='yes'>IvyBridge-IBRS</model>
+      <model usable='yes'>IvyBridge</model>
+      <model usable='no'>Icelake-Server</model>
+      <model usable='no'>Icelake-Client</model>
+      <model usable='yes'>Haswell-noTSX-IBRS</model>
+      <model usable='yes'>Haswell-noTSX</model>
+      <model usable='yes'>Haswell-IBRS</model>
+      <model usable='yes'>Haswell</model>
+      <model usable='no'>EPYC-IBPB</model>
+      <model usable='no'>EPYC</model>
+      <model usable='yes'>Conroe</model>
+      <model usable='no'>Cascadelake-Server</model>
+      <model usable='yes'>Broadwell-noTSX-IBRS</model>
+      <model usable='yes'>Broadwell-noTSX</model>
+      <model usable='yes'>Broadwell-IBRS</model>
+      <model usable='yes'>Broadwell</model>
+      <model usable='yes'>486</model>
+    </mode>
+  </cpu>
+  <devices>
+    <disk supported='yes'>
+      <enum name='diskDevice'>
+        <value>disk</value>
+        <value>cdrom</value>
+        <value>floppy</value>
+        <value>lun</value>
+      </enum>
+      <enum name='bus'>
+        <value>fdc</value>
+        <value>scsi</value>
+        <value>virtio</value>
+        <value>usb</value>
+        <value>sata</value>
+      </enum>
+      <enum name='model'>
+        <value>virtio</value>
+        <value>virtio-transitional</value>
+        <value>virtio-non-transitional</value>
+      </enum>
+    </disk>
+    <graphics supported='yes'>
+      <enum name='type'>
+        <value>sdl</value>
+        <value>vnc</value>
+        <value>spice</value>
+      </enum>
+    </graphics>
+    <video supported='yes'>
+      <enum name='modelType'>
+        <value>vga</value>
+        <value>cirrus</value>
+        <value>vmvga</value>
+        <value>qxl</value>
+        <value>virtio</value>
+        <value>bochs</value>
+      </enum>
+    </video>
+    <hostdev supported='yes'>
+      <enum name='mode'>
+        <value>subsystem</value>
+      </enum>
+      <enum name='startupPolicy'>
+        <value>default</value>
+        <value>mandatory</value>
+        <value>requisite</value>
+        <value>optional</value>
+      </enum>
+      <enum name='subsysType'>
+        <value>usb</value>
+        <value>pci</value>
+        <value>scsi</value>
+      </enum>
+      <enum name='capsType'/>
+      <enum name='pciBackend'>
+        <value>default</value>
+        <value>vfio</value>
+      </enum>
+    </hostdev>
+    <rng supported='yes'>
+      <enum name='model'>
+        <value>virtio</value>
+        <value>virtio-transitional</value>
+        <value>virtio-non-transitional</value>
+      </enum>
+      <enum name='backendModel'>
+        <value>random</value>
+        <value>egd</value>
+      </enum>
+    </rng>
+  </devices>
+  <features>
+    <gic supported='no'/>
+    <vmcoreinfo supported='yes'/>
+    <genid supported='yes'/>
+    <sev supported='no'/>
+  </features>
+</domainCapabilities>
diff --git a/tests/domaincapsdata/qemu_4.1.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_4.1.0-tcg.x86_64.xml
new file mode 100644 (file)
index 0000000..a740950
--- /dev/null
@@ -0,0 +1,187 @@
+<domainCapabilities>
+  <path>/usr/bin/qemu-system-x86_64</path>
+  <domain>qemu</domain>
+  <machine>pc-i440fx-4.1</machine>
+  <arch>x86_64</arch>
+  <vcpu max='255'/>
+  <iothreads supported='yes'/>
+  <os supported='yes'>
+    <enum name='firmware'>
+      <value>bios</value>
+      <value>efi</value>
+    </enum>
+    <loader supported='yes'>
+      <value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
+      <value>/usr/share/AAVMF/AAVMF32_CODE.fd</value>
+      <value>/usr/share/OVMF/OVMF_CODE.fd</value>
+      <enum name='type'>
+        <value>rom</value>
+        <value>pflash</value>
+      </enum>
+      <enum name='readonly'>
+        <value>yes</value>
+        <value>no</value>
+      </enum>
+      <enum name='secure'>
+        <value>no</value>
+      </enum>
+    </loader>
+  </os>
+  <cpu>
+    <mode name='host-passthrough' supported='no'/>
+    <mode name='host-model' supported='yes'>
+      <model fallback='forbid'>EPYC-IBPB</model>
+      <vendor>AMD</vendor>
+      <feature policy='require' name='acpi'/>
+      <feature policy='require' name='ss'/>
+      <feature policy='require' name='hypervisor'/>
+      <feature policy='require' name='erms'/>
+      <feature policy='require' name='mpx'/>
+      <feature policy='require' name='pcommit'/>
+      <feature policy='require' name='clwb'/>
+      <feature policy='require' name='pku'/>
+      <feature policy='require' name='la57'/>
+      <feature policy='require' name='3dnowext'/>
+      <feature policy='require' name='3dnow'/>
+      <feature policy='disable' name='vme'/>
+      <feature policy='disable' name='fma'/>
+      <feature policy='disable' name='avx'/>
+      <feature policy='disable' name='f16c'/>
+      <feature policy='disable' name='avx2'/>
+      <feature policy='disable' name='rdseed'/>
+      <feature policy='disable' name='sha-ni'/>
+      <feature policy='disable' name='xsavec'/>
+      <feature policy='disable' name='fxsr_opt'/>
+      <feature policy='disable' name='misalignsse'/>
+      <feature policy='disable' name='3dnowprefetch'/>
+      <feature policy='disable' name='osvw'/>
+      <feature policy='disable' name='topoext'/>
+      <feature policy='disable' name='ibpb'/>
+    </mode>
+    <mode name='custom' supported='yes'>
+      <model usable='yes'>qemu64</model>
+      <model usable='yes'>qemu32</model>
+      <model usable='no'>phenom</model>
+      <model usable='yes'>pentium3</model>
+      <model usable='yes'>pentium2</model>
+      <model usable='yes'>pentium</model>
+      <model usable='yes'>n270</model>
+      <model usable='yes'>kvm64</model>
+      <model usable='yes'>kvm32</model>
+      <model usable='yes'>coreduo</model>
+      <model usable='yes'>core2duo</model>
+      <model usable='yes'>athlon</model>
+      <model usable='no'>Westmere-IBRS</model>
+      <model usable='no'>Westmere</model>
+      <model usable='no'>Skylake-Server-IBRS</model>
+      <model usable='no'>Skylake-Server</model>
+      <model usable='no'>Skylake-Client-IBRS</model>
+      <model usable='no'>Skylake-Client</model>
+      <model usable='no'>SandyBridge-IBRS</model>
+      <model usable='no'>SandyBridge</model>
+      <model usable='yes'>Penryn</model>
+      <model usable='no'>Opteron_G5</model>
+      <model usable='no'>Opteron_G4</model>
+      <model usable='no'>Opteron_G3</model>
+      <model usable='yes'>Opteron_G2</model>
+      <model usable='yes'>Opteron_G1</model>
+      <model usable='no'>Nehalem-IBRS</model>
+      <model usable='no'>Nehalem</model>
+      <model usable='no'>IvyBridge-IBRS</model>
+      <model usable='no'>IvyBridge</model>
+      <model usable='no'>Icelake-Server</model>
+      <model usable='no'>Icelake-Client</model>
+      <model usable='no'>Haswell-noTSX-IBRS</model>
+      <model usable='no'>Haswell-noTSX</model>
+      <model usable='no'>Haswell-IBRS</model>
+      <model usable='no'>Haswell</model>
+      <model usable='no'>EPYC-IBPB</model>
+      <model usable='no'>EPYC</model>
+      <model usable='yes'>Conroe</model>
+      <model usable='no'>Cascadelake-Server</model>
+      <model usable='no'>Broadwell-noTSX-IBRS</model>
+      <model usable='no'>Broadwell-noTSX</model>
+      <model usable='no'>Broadwell-IBRS</model>
+      <model usable='no'>Broadwell</model>
+      <model usable='yes'>486</model>
+    </mode>
+  </cpu>
+  <devices>
+    <disk supported='yes'>
+      <enum name='diskDevice'>
+        <value>disk</value>
+        <value>cdrom</value>
+        <value>floppy</value>
+        <value>lun</value>
+      </enum>
+      <enum name='bus'>
+        <value>ide</value>
+        <value>fdc</value>
+        <value>scsi</value>
+        <value>virtio</value>
+        <value>usb</value>
+        <value>sata</value>
+      </enum>
+      <enum name='model'>
+        <value>virtio</value>
+        <value>virtio-transitional</value>
+        <value>virtio-non-transitional</value>
+      </enum>
+    </disk>
+    <graphics supported='yes'>
+      <enum name='type'>
+        <value>sdl</value>
+        <value>vnc</value>
+        <value>spice</value>
+      </enum>
+    </graphics>
+    <video supported='yes'>
+      <enum name='modelType'>
+        <value>vga</value>
+        <value>cirrus</value>
+        <value>vmvga</value>
+        <value>qxl</value>
+        <value>virtio</value>
+        <value>bochs</value>
+      </enum>
+    </video>
+    <hostdev supported='yes'>
+      <enum name='mode'>
+        <value>subsystem</value>
+      </enum>
+      <enum name='startupPolicy'>
+        <value>default</value>
+        <value>mandatory</value>
+        <value>requisite</value>
+        <value>optional</value>
+      </enum>
+      <enum name='subsysType'>
+        <value>usb</value>
+        <value>pci</value>
+        <value>scsi</value>
+      </enum>
+      <enum name='capsType'/>
+      <enum name='pciBackend'>
+        <value>default</value>
+        <value>vfio</value>
+      </enum>
+    </hostdev>
+    <rng supported='yes'>
+      <enum name='model'>
+        <value>virtio</value>
+        <value>virtio-transitional</value>
+        <value>virtio-non-transitional</value>
+      </enum>
+      <enum name='backendModel'>
+        <value>random</value>
+        <value>egd</value>
+      </enum>
+    </rng>
+  </devices>
+  <features>
+    <gic supported='no'/>
+    <vmcoreinfo supported='yes'/>
+    <genid supported='yes'/>
+    <sev supported='no'/>
+  </features>
+</domainCapabilities>
diff --git a/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml
new file mode 100644 (file)
index 0000000..8f6c6d3
--- /dev/null
@@ -0,0 +1,176 @@
+<domainCapabilities>
+  <path>/usr/bin/qemu-system-x86_64</path>
+  <domain>kvm</domain>
+  <machine>pc-q35-4.2</machine>
+  <arch>x86_64</arch>
+  <vcpu max='288'/>
+  <iothreads supported='yes'/>
+  <os supported='yes'>
+    <enum name='firmware'>
+      <value>bios</value>
+      <value>efi</value>
+    </enum>
+    <loader supported='yes'>
+      <value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
+      <value>/usr/share/AAVMF/AAVMF32_CODE.fd</value>
+      <value>/usr/share/OVMF/OVMF_CODE.fd</value>
+      <enum name='type'>
+        <value>rom</value>
+        <value>pflash</value>
+      </enum>
+      <enum name='readonly'>
+        <value>yes</value>
+        <value>no</value>
+      </enum>
+      <enum name='secure'>
+        <value>yes</value>
+        <value>no</value>
+      </enum>
+    </loader>
+  </os>
+  <cpu>
+    <mode name='host-passthrough' supported='yes'/>
+    <mode name='host-model' supported='yes'>
+      <model fallback='forbid'>Skylake-Client-IBRS</model>
+      <vendor>Intel</vendor>
+      <feature policy='require' name='ss'/>
+      <feature policy='require' name='vmx'/>
+      <feature policy='require' name='hypervisor'/>
+      <feature policy='require' name='tsc_adjust'/>
+      <feature policy='require' name='clflushopt'/>
+      <feature policy='require' name='umip'/>
+      <feature policy='require' name='md-clear'/>
+      <feature policy='require' name='stibp'/>
+      <feature policy='require' name='arch-capabilities'/>
+      <feature policy='require' name='ssbd'/>
+      <feature policy='require' name='xsaves'/>
+      <feature policy='require' name='pdpe1gb'/>
+      <feature policy='require' name='invtsc'/>
+      <feature policy='require' name='skip-l1dfl-vmentry'/>
+    </mode>
+    <mode name='custom' supported='yes'>
+      <model usable='yes'>qemu64</model>
+      <model usable='yes'>qemu32</model>
+      <model usable='no'>phenom</model>
+      <model usable='yes'>pentium3</model>
+      <model usable='yes'>pentium2</model>
+      <model usable='yes'>pentium</model>
+      <model usable='yes'>n270</model>
+      <model usable='yes'>kvm64</model>
+      <model usable='yes'>kvm32</model>
+      <model usable='yes'>coreduo</model>
+      <model usable='yes'>core2duo</model>
+      <model usable='no'>athlon</model>
+      <model usable='yes'>Westmere-IBRS</model>
+      <model usable='yes'>Westmere</model>
+      <model usable='no'>Skylake-Server-IBRS</model>
+      <model usable='no'>Skylake-Server</model>
+      <model usable='yes'>Skylake-Client-IBRS</model>
+      <model usable='yes'>Skylake-Client</model>
+      <model usable='yes'>SandyBridge-IBRS</model>
+      <model usable='yes'>SandyBridge</model>
+      <model usable='yes'>Penryn</model>
+      <model usable='no'>Opteron_G5</model>
+      <model usable='no'>Opteron_G4</model>
+      <model usable='no'>Opteron_G3</model>
+      <model usable='yes'>Opteron_G2</model>
+      <model usable='yes'>Opteron_G1</model>
+      <model usable='yes'>Nehalem-IBRS</model>
+      <model usable='yes'>Nehalem</model>
+      <model usable='yes'>IvyBridge-IBRS</model>
+      <model usable='yes'>IvyBridge</model>
+      <model usable='no'>Icelake-Server</model>
+      <model usable='no'>Icelake-Client</model>
+      <model usable='yes'>Haswell-noTSX-IBRS</model>
+      <model usable='yes'>Haswell-noTSX</model>
+      <model usable='yes'>Haswell-IBRS</model>
+      <model usable='yes'>Haswell</model>
+      <model usable='no'>EPYC-IBPB</model>
+      <model usable='no'>EPYC</model>
+      <model usable='yes'>Conroe</model>
+      <model usable='no'>Cascadelake-Server</model>
+      <model usable='yes'>Broadwell-noTSX-IBRS</model>
+      <model usable='yes'>Broadwell-noTSX</model>
+      <model usable='yes'>Broadwell-IBRS</model>
+      <model usable='yes'>Broadwell</model>
+      <model usable='yes'>486</model>
+    </mode>
+  </cpu>
+  <devices>
+    <disk supported='yes'>
+      <enum name='diskDevice'>
+        <value>disk</value>
+        <value>cdrom</value>
+        <value>floppy</value>
+        <value>lun</value>
+      </enum>
+      <enum name='bus'>
+        <value>fdc</value>
+        <value>scsi</value>
+        <value>virtio</value>
+        <value>usb</value>
+        <value>sata</value>
+      </enum>
+      <enum name='model'>
+        <value>virtio</value>
+        <value>virtio-transitional</value>
+        <value>virtio-non-transitional</value>
+      </enum>
+    </disk>
+    <graphics supported='yes'>
+      <enum name='type'>
+        <value>sdl</value>
+        <value>vnc</value>
+        <value>spice</value>
+      </enum>
+    </graphics>
+    <video supported='yes'>
+      <enum name='modelType'>
+        <value>vga</value>
+        <value>cirrus</value>
+        <value>vmvga</value>
+        <value>qxl</value>
+        <value>virtio</value>
+        <value>bochs</value>
+      </enum>
+    </video>
+    <hostdev supported='yes'>
+      <enum name='mode'>
+        <value>subsystem</value>
+      </enum>
+      <enum name='startupPolicy'>
+        <value>default</value>
+        <value>mandatory</value>
+        <value>requisite</value>
+        <value>optional</value>
+      </enum>
+      <enum name='subsysType'>
+        <value>usb</value>
+        <value>pci</value>
+        <value>scsi</value>
+      </enum>
+      <enum name='capsType'/>
+      <enum name='pciBackend'>
+        <value>default</value>
+        <value>vfio</value>
+      </enum>
+    </hostdev>
+    <rng supported='yes'>
+      <enum name='model'>
+        <value>virtio</value>
+        <value>virtio-transitional</value>
+        <value>virtio-non-transitional</value>
+      </enum>
+      <enum name='backendModel'>
+        <value>random</value>
+        <value>egd</value>
+      </enum>
+    </rng>
+  </devices>
+  <features>
+    <gic supported='no'/>
+    <vmcoreinfo supported='yes'/>
+    <genid supported='yes'/>
+    <sev supported='no'/>
+  </features>
+</domainCapabilities>
diff --git a/tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml
new file mode 100644 (file)
index 0000000..520d4ff
--- /dev/null
@@ -0,0 +1,187 @@
+<domainCapabilities>
+  <path>/usr/bin/qemu-system-x86_64</path>
+  <domain>qemu</domain>
+  <machine>pc-i440fx-4.2</machine>
+  <arch>x86_64</arch>
+  <vcpu max='255'/>
+  <iothreads supported='yes'/>
+  <os supported='yes'>
+    <enum name='firmware'>
+      <value>bios</value>
+      <value>efi</value>
+    </enum>
+    <loader supported='yes'>
+      <value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
+      <value>/usr/share/AAVMF/AAVMF32_CODE.fd</value>
+      <value>/usr/share/OVMF/OVMF_CODE.fd</value>
+      <enum name='type'>
+        <value>rom</value>
+        <value>pflash</value>
+      </enum>
+      <enum name='readonly'>
+        <value>yes</value>
+        <value>no</value>
+      </enum>
+      <enum name='secure'>
+        <value>no</value>
+      </enum>
+    </loader>
+  </os>
+  <cpu>
+    <mode name='host-passthrough' supported='no'/>
+    <mode name='host-model' supported='yes'>
+      <model fallback='forbid'>EPYC-IBPB</model>
+      <vendor>AMD</vendor>
+      <feature policy='require' name='acpi'/>
+      <feature policy='require' name='ss'/>
+      <feature policy='require' name='hypervisor'/>
+      <feature policy='require' name='erms'/>
+      <feature policy='require' name='mpx'/>
+      <feature policy='require' name='pcommit'/>
+      <feature policy='require' name='clwb'/>
+      <feature policy='require' name='pku'/>
+      <feature policy='require' name='la57'/>
+      <feature policy='require' name='3dnowext'/>
+      <feature policy='require' name='3dnow'/>
+      <feature policy='disable' name='vme'/>
+      <feature policy='disable' name='fma'/>
+      <feature policy='disable' name='avx'/>
+      <feature policy='disable' name='f16c'/>
+      <feature policy='disable' name='avx2'/>
+      <feature policy='disable' name='rdseed'/>
+      <feature policy='disable' name='sha-ni'/>
+      <feature policy='disable' name='xsavec'/>
+      <feature policy='disable' name='fxsr_opt'/>
+      <feature policy='disable' name='misalignsse'/>
+      <feature policy='disable' name='3dnowprefetch'/>
+      <feature policy='disable' name='osvw'/>
+      <feature policy='disable' name='topoext'/>
+      <feature policy='disable' name='ibpb'/>
+    </mode>
+    <mode name='custom' supported='yes'>
+      <model usable='yes'>qemu64</model>
+      <model usable='yes'>qemu32</model>
+      <model usable='no'>phenom</model>
+      <model usable='yes'>pentium3</model>
+      <model usable='yes'>pentium2</model>
+      <model usable='yes'>pentium</model>
+      <model usable='yes'>n270</model>
+      <model usable='yes'>kvm64</model>
+      <model usable='yes'>kvm32</model>
+      <model usable='yes'>coreduo</model>
+      <model usable='yes'>core2duo</model>
+      <model usable='yes'>athlon</model>
+      <model usable='no'>Westmere-IBRS</model>
+      <model usable='no'>Westmere</model>
+      <model usable='no'>Skylake-Server-IBRS</model>
+      <model usable='no'>Skylake-Server</model>
+      <model usable='no'>Skylake-Client-IBRS</model>
+      <model usable='no'>Skylake-Client</model>
+      <model usable='no'>SandyBridge-IBRS</model>
+      <model usable='no'>SandyBridge</model>
+      <model usable='yes'>Penryn</model>
+      <model usable='no'>Opteron_G5</model>
+      <model usable='no'>Opteron_G4</model>
+      <model usable='no'>Opteron_G3</model>
+      <model usable='yes'>Opteron_G2</model>
+      <model usable='yes'>Opteron_G1</model>
+      <model usable='no'>Nehalem-IBRS</model>
+      <model usable='no'>Nehalem</model>
+      <model usable='no'>IvyBridge-IBRS</model>
+      <model usable='no'>IvyBridge</model>
+      <model usable='no'>Icelake-Server</model>
+      <model usable='no'>Icelake-Client</model>
+      <model usable='no'>Haswell-noTSX-IBRS</model>
+      <model usable='no'>Haswell-noTSX</model>
+      <model usable='no'>Haswell-IBRS</model>
+      <model usable='no'>Haswell</model>
+      <model usable='no'>EPYC-IBPB</model>
+      <model usable='no'>EPYC</model>
+      <model usable='yes'>Conroe</model>
+      <model usable='no'>Cascadelake-Server</model>
+      <model usable='no'>Broadwell-noTSX-IBRS</model>
+      <model usable='no'>Broadwell-noTSX</model>
+      <model usable='no'>Broadwell-IBRS</model>
+      <model usable='no'>Broadwell</model>
+      <model usable='yes'>486</model>
+    </mode>
+  </cpu>
+  <devices>
+    <disk supported='yes'>
+      <enum name='diskDevice'>
+        <value>disk</value>
+        <value>cdrom</value>
+        <value>floppy</value>
+        <value>lun</value>
+      </enum>
+      <enum name='bus'>
+        <value>ide</value>
+        <value>fdc</value>
+        <value>scsi</value>
+        <value>virtio</value>
+        <value>usb</value>
+        <value>sata</value>
+      </enum>
+      <enum name='model'>
+        <value>virtio</value>
+        <value>virtio-transitional</value>
+        <value>virtio-non-transitional</value>
+      </enum>
+    </disk>
+    <graphics supported='yes'>
+      <enum name='type'>
+        <value>sdl</value>
+        <value>vnc</value>
+        <value>spice</value>
+      </enum>
+    </graphics>
+    <video supported='yes'>
+      <enum name='modelType'>
+        <value>vga</value>
+        <value>cirrus</value>
+        <value>vmvga</value>
+        <value>qxl</value>
+        <value>virtio</value>
+        <value>bochs</value>
+      </enum>
+    </video>
+    <hostdev supported='yes'>
+      <enum name='mode'>
+        <value>subsystem</value>
+      </enum>
+      <enum name='startupPolicy'>
+        <value>default</value>
+        <value>mandatory</value>
+        <value>requisite</value>
+        <value>optional</value>
+      </enum>
+      <enum name='subsysType'>
+        <value>usb</value>
+        <value>pci</value>
+        <value>scsi</value>
+      </enum>
+      <enum name='capsType'/>
+      <enum name='pciBackend'>
+        <value>default</value>
+        <value>vfio</value>
+      </enum>
+    </hostdev>
+    <rng supported='yes'>
+      <enum name='model'>
+        <value>virtio</value>
+        <value>virtio-transitional</value>
+        <value>virtio-non-transitional</value>
+      </enum>
+      <enum name='backendModel'>
+        <value>random</value>
+        <value>egd</value>
+      </enum>
+    </rng>
+  </devices>
+  <features>
+    <gic supported='no'/>
+    <vmcoreinfo supported='yes'/>
+    <genid supported='yes'/>
+    <sev supported='no'/>
+  </features>
+</domainCapabilities>
diff --git a/tests/domaincapsdata/qemu_4.2.0-virt.aarch64.xml b/tests/domaincapsdata/qemu_4.2.0-virt.aarch64.xml
new file mode 100644 (file)
index 0000000..abd1e39
--- /dev/null
@@ -0,0 +1,150 @@
+<domainCapabilities>
+  <path>/usr/bin/qemu-system-aarch64</path>
+  <domain>kvm</domain>
+  <machine>virt-4.2</machine>
+  <arch>aarch64</arch>
+  <vcpu max='512'/>
+  <iothreads supported='yes'/>
+  <os supported='yes'>
+    <enum name='firmware'>
+      <value>efi</value>
+    </enum>
+    <loader supported='yes'>
+      <value>/usr/share/AAVMF/AAVMF_CODE.fd</value>
+      <value>/usr/share/AAVMF/AAVMF32_CODE.fd</value>
+      <value>/usr/share/OVMF/OVMF_CODE.fd</value>
+      <enum name='type'>
+        <value>rom</value>
+        <value>pflash</value>
+      </enum>
+      <enum name='readonly'>
+        <value>yes</value>
+        <value>no</value>
+      </enum>
+      <enum name='secure'>
+        <value>no</value>
+      </enum>
+    </loader>
+  </os>
+  <cpu>
+    <mode name='host-passthrough' supported='yes'/>
+    <mode name='host-model' supported='no'/>
+    <mode name='custom' supported='yes'>
+      <model usable='unknown'>pxa262</model>
+      <model usable='unknown'>pxa270-a0</model>
+      <model usable='unknown'>arm1136</model>
+      <model usable='unknown'>cortex-a15</model>
+      <model usable='unknown'>pxa260</model>
+      <model usable='unknown'>arm1136-r2</model>
+      <model usable='unknown'>pxa261</model>
+      <model usable='unknown'>pxa255</model>
+      <model usable='unknown'>cortex-a72</model>
+      <model usable='unknown'>cortex-m33</model>
+      <model usable='unknown'>arm926</model>
+      <model usable='unknown'>cortex-r5f</model>
+      <model usable='unknown'>arm11mpcore</model>
+      <model usable='unknown'>pxa250</model>
+      <model usable='unknown'>ti925t</model>
+      <model usable='unknown'>cortex-a57</model>
+      <model usable='unknown'>sa1110</model>
+      <model usable='unknown'>arm1176</model>
+      <model usable='unknown'>cortex-a53</model>
+      <model usable='unknown'>sa1100</model>
+      <model usable='unknown'>pxa270-c5</model>
+      <model usable='unknown'>cortex-a9</model>
+      <model usable='unknown'>cortex-a8</model>
+      <model usable='unknown'>cortex-a7</model>
+      <model usable='unknown'>pxa270-c0</model>
+      <model usable='unknown'>arm1026</model>
+      <model usable='unknown'>pxa270-b1</model>
+      <model usable='unknown'>cortex-m3</model>
+      <model usable='unknown'>max</model>
+      <model usable='unknown'>cortex-m4</model>
+      <model usable='unknown'>pxa270-b0</model>
+      <model usable='unknown'>cortex-m0</model>
+      <model usable='unknown'>cortex-r5</model>
+      <model usable='unknown'>arm946</model>
+      <model usable='unknown'>pxa270-a1</model>
+      <model usable='unknown'>pxa270</model>
+    </mode>
+  </cpu>
+  <devices>
+    <disk supported='yes'>
+      <enum name='diskDevice'>
+        <value>disk</value>
+        <value>cdrom</value>
+        <value>floppy</value>
+        <value>lun</value>
+      </enum>
+      <enum name='bus'>
+        <value>fdc</value>
+        <value>scsi</value>
+        <value>virtio</value>
+        <value>usb</value>
+        <value>sata</value>
+      </enum>
+      <enum name='model'>
+        <value>virtio</value>
+        <value>virtio-transitional</value>
+        <value>virtio-non-transitional</value>
+      </enum>
+    </disk>
+    <graphics supported='yes'>
+      <enum name='type'>
+        <value>sdl</value>
+        <value>vnc</value>
+      </enum>
+    </graphics>
+    <video supported='yes'>
+      <enum name='modelType'>
+        <value>vga</value>
+        <value>cirrus</value>
+        <value>vmvga</value>
+        <value>virtio</value>
+        <value>bochs</value>
+      </enum>
+    </video>
+    <hostdev supported='yes'>
+      <enum name='mode'>
+        <value>subsystem</value>
+      </enum>
+      <enum name='startupPolicy'>
+        <value>default</value>
+        <value>mandatory</value>
+        <value>requisite</value>
+        <value>optional</value>
+      </enum>
+      <enum name='subsysType'>
+        <value>usb</value>
+        <value>pci</value>
+        <value>scsi</value>
+      </enum>
+      <enum name='capsType'/>
+      <enum name='pciBackend'>
+        <value>default</value>
+        <value>vfio</value>
+      </enum>
+    </hostdev>
+    <rng supported='yes'>
+      <enum name='model'>
+        <value>virtio</value>
+        <value>virtio-transitional</value>
+        <value>virtio-non-transitional</value>
+      </enum>
+      <enum name='backendModel'>
+        <value>random</value>
+        <value>egd</value>
+      </enum>
+    </rng>
+  </devices>
+  <features>
+    <gic supported='yes'>
+      <enum name='version'>
+        <value>3</value>
+      </enum>
+    </gic>
+    <vmcoreinfo supported='yes'/>
+    <genid supported='no'/>
+    <sev supported='no'/>
+  </features>
+</domainCapabilities>
index e3329ef1ffdc90d2069f26c087b2d4cf2b3589a1..4476423228b88e2610ec54dc34be0b57a9de1beb 100644 (file)
@@ -267,11 +267,11 @@ test_virDomainCapsFormat(const void *opaque)
 }
 
 static int
-doTestQemu(const char *version,
-           const char *machine,
-           const char *arch,
-           virDomainVirtType type,
-           void *opaque)
+doTestQemuInternal(const char *version,
+                   const char *machine,
+                   const char *arch,
+                   virDomainVirtType type,
+                   void *opaque)
 {
     g_autofree char *name = NULL;
     g_autofree char *capsName = NULL;
@@ -302,6 +302,50 @@ doTestQemu(const char *version,
     return 0;
 }
 
+static int
+doTestQemu(const char *version,
+           const char *arch,
+           void *opaque)
+{
+    if (STREQ(arch, "x86_64")) {
+        /* For x86_64 we test three combinations:
+         *
+         *   - KVM with default machine
+         *   - KVM with Q35 machine
+         *   - TCG with default machine
+         */
+        if (doTestQemuInternal(version, NULL, arch,
+                               VIR_DOMAIN_VIRT_KVM, opaque) < 0 ||
+            doTestQemuInternal(version, "q35", arch,
+                               VIR_DOMAIN_VIRT_KVM, opaque) < 0 ||
+            doTestQemuInternal(version, NULL, arch,
+                               VIR_DOMAIN_VIRT_QEMU, opaque) < 0) {
+            return -1;
+        }
+    } else if (STREQ(arch, "aarch64")) {
+        /* For aarch64 we test two combinations:
+         *
+         *   - KVM with default machine
+         *   - KVM with virt machine
+         */
+        if (doTestQemuInternal(version, NULL, arch,
+                               VIR_DOMAIN_VIRT_KVM, opaque) < 0 ||
+            doTestQemuInternal(version, "virt", arch,
+                               VIR_DOMAIN_VIRT_KVM, opaque) < 0) {
+            return -1;
+        }
+    } else if (STRPREFIX(arch, "riscv")) {
+        /* Unfortunately we have to skip RISC-V at the moment */
+        return 0;
+    } else {
+        if (doTestQemuInternal(version, NULL, arch,
+                               VIR_DOMAIN_VIRT_KVM, opaque) < 0)
+            return -1;
+    }
+
+    return 0;
+}
+
 static int
 mymain(void)
 {
@@ -332,9 +376,9 @@ mymain(void)
             ret = -1; \
     } while (0)
 
-#define DO_TEST_QEMU(Version, Machine, Arch, Type) \
+#define DO_TEST_QEMU(Version, Arch) \
     do { \
-        if (doTestQemu(Version, Machine, Arch, Type, cfg) < 0) \
+        if (doTestQemu(Version, Arch, cfg) < 0) \
             ret = -1; \
     } while (0)
 
@@ -384,40 +428,36 @@ mymain(void)
     virFileWrapperAddPrefix("/home/user/.config/qemu/firmware",
                             abs_srcdir "/qemufirmwaredata/home/user/.config/qemu/firmware");
 
-    DO_TEST_QEMU("1.7.0", NULL, "x86_64", VIR_DOMAIN_VIRT_KVM);
+    DO_TEST_QEMU("1.7.0", "x86_64");
 
-    DO_TEST_QEMU("2.6.0", NULL, "x86_64", VIR_DOMAIN_VIRT_KVM);
-    DO_TEST_QEMU("2.6.0", NULL, "aarch64", VIR_DOMAIN_VIRT_KVM);
-    DO_TEST_QEMU("2.6.0", "virt", "aarch64", VIR_DOMAIN_VIRT_KVM);
-    DO_TEST_QEMU("2.6.0", NULL, "ppc64", VIR_DOMAIN_VIRT_KVM);
+    DO_TEST_QEMU("2.6.0", "x86_64");
+    DO_TEST_QEMU("2.6.0", "aarch64");
+    DO_TEST_QEMU("2.6.0", "ppc64");
 
-    DO_TEST_QEMU("2.7.0", NULL, "s390x", VIR_DOMAIN_VIRT_KVM);
+    DO_TEST_QEMU("2.7.0", "s390x");
 
-    DO_TEST_QEMU("2.8.0", NULL, "x86_64", VIR_DOMAIN_VIRT_KVM);
-    DO_TEST_QEMU("2.8.0", NULL, "x86_64", VIR_DOMAIN_VIRT_QEMU);
-    DO_TEST_QEMU("2.8.0", NULL, "s390x", VIR_DOMAIN_VIRT_KVM);
+    DO_TEST_QEMU("2.8.0", "x86_64");
+    DO_TEST_QEMU("2.8.0", "s390x");
 
-    DO_TEST_QEMU("2.9.0", NULL, "x86_64", VIR_DOMAIN_VIRT_KVM);
-    DO_TEST_QEMU("2.9.0", "q35", "x86_64", VIR_DOMAIN_VIRT_KVM);
-    DO_TEST_QEMU("2.9.0", NULL, "x86_64", VIR_DOMAIN_VIRT_QEMU);
+    DO_TEST_QEMU("2.9.0", "x86_64");
 
-    DO_TEST_QEMU("2.12.0", NULL, "x86_64", VIR_DOMAIN_VIRT_KVM);
-    DO_TEST_QEMU("2.12.0", "virt", "aarch64", VIR_DOMAIN_VIRT_KVM);
-    DO_TEST_QEMU("2.12.0", NULL, "ppc64", VIR_DOMAIN_VIRT_KVM);
-    DO_TEST_QEMU("2.12.0", NULL, "s390x", VIR_DOMAIN_VIRT_KVM);
+    DO_TEST_QEMU("2.12.0", "x86_64");
+    DO_TEST_QEMU("2.12.0", "aarch64");
+    DO_TEST_QEMU("2.12.0", "ppc64");
+    DO_TEST_QEMU("2.12.0", "s390x");
 
-    DO_TEST_QEMU("3.0.0", NULL, "s390x", VIR_DOMAIN_VIRT_KVM);
+    DO_TEST_QEMU("3.0.0", "s390x");
 
-    DO_TEST_QEMU("3.1.0", NULL, "x86_64", VIR_DOMAIN_VIRT_KVM);
+    DO_TEST_QEMU("3.1.0", "x86_64");
 
-    DO_TEST_QEMU("4.0.0", NULL, "x86_64", VIR_DOMAIN_VIRT_KVM);
-    DO_TEST_QEMU("4.0.0", NULL, "s390x", VIR_DOMAIN_VIRT_KVM);
+    DO_TEST_QEMU("4.0.0", "x86_64");
+    DO_TEST_QEMU("4.0.0", "s390x");
 
-    DO_TEST_QEMU("4.1.0", NULL, "x86_64", VIR_DOMAIN_VIRT_KVM);
+    DO_TEST_QEMU("4.1.0", "x86_64");
 
-    DO_TEST_QEMU("4.2.0", NULL, "x86_64", VIR_DOMAIN_VIRT_KVM);
-    DO_TEST_QEMU("4.2.0", NULL, "ppc64", VIR_DOMAIN_VIRT_KVM);
-    DO_TEST_QEMU("4.2.0", NULL, "aarch64", VIR_DOMAIN_VIRT_KVM);
+    DO_TEST_QEMU("4.2.0", "x86_64");
+    DO_TEST_QEMU("4.2.0", "ppc64");
+    DO_TEST_QEMU("4.2.0", "aarch64");
 
     virObjectUnref(cfg);