From 8866594c252501cb8dabc220b2eaf4e020c12d21 Mon Sep 17 00:00:00 2001
From: nanli <nanli@redhat.com>
Date: Thu, 19 Dec 2024 16:08:56 +0800
Subject: [PATCH] add case for virt-xml-validate for virsh domcap    
 xxxx-17141:validate libvirt XML files against a virsh domcap schema
 Signed-off-by: nanli <nanli@redhat.com>

---
 .../tests/cfg/virt_cmd/virt_xml_validate.cfg    |  3 +++
 libvirt/tests/src/virt_cmd/virt_xml_validate.py | 17 ++++++++++++++++-
 2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/libvirt/tests/cfg/virt_cmd/virt_xml_validate.cfg b/libvirt/tests/cfg/virt_cmd/virt_xml_validate.cfg
index 45a5228c81..491960ddc9 100644
--- a/libvirt/tests/cfg/virt_cmd/virt_xml_validate.cfg
+++ b/libvirt/tests/cfg/virt_cmd/virt_xml_validate.cfg
@@ -28,3 +28,6 @@
             secret_volume = "/var/lib/libvirt/images/virt_xml_validate.secret"
         - interface:
             schema = "interface"
+        - domcapabilities:
+            func_supported_since_libvirt_ver = (10, 10, 0)
+            schema = "domcapabilities"
diff --git a/libvirt/tests/src/virt_cmd/virt_xml_validate.py b/libvirt/tests/src/virt_cmd/virt_xml_validate.py
index f05e14eaee..d46667b5f2 100644
--- a/libvirt/tests/src/virt_cmd/virt_xml_validate.py
+++ b/libvirt/tests/src/virt_cmd/virt_xml_validate.py
@@ -8,6 +8,7 @@
 
 from virttest import virsh
 from virttest import data_dir
+from virttest import libvirt_version
 from virttest.utils_libvirt import libvirt_secret
 from virttest.utils_test import libvirt
 
@@ -183,6 +184,16 @@ def interface_validate(test, file=None, **virsh_dargs):
         test.error(str(e))
 
 
+def domcap_validate(file=None, **virsh_dargs):
+    """
+    Prepare schema domcapabilities.
+    :param file: domcapabilities output file
+    :param virsh_dargs: virsh debug args.
+    """
+    cmd_result = virsh.domcapabilities(options="> %s" % file, **virsh_dargs)
+    libvirt.check_exit_status(cmd_result)
+
+
 def run(test, params, env):
     """
     Test for virt-xml-validate
@@ -203,7 +214,7 @@ def run(test, params, env):
 
     valid_schemas = ['domain', 'domainsnapshot', 'network', 'storagepool',
                      'storagevol', 'nodedev', 'capability',
-                     'nwfilter', 'secret', 'interface']
+                     'nwfilter', 'secret', 'interface', 'domcapabilities']
     if schema not in valid_schemas:
         test.fail("invalid %s specified" % schema)
 
@@ -230,6 +241,10 @@ def run(test, params, env):
         secret_validate(test, secret_volume, file=output_path, **virsh_dargs)
     elif schema == "interface":
         interface_validate(test, file=output_path, **virsh_dargs)
+    elif schema == "domcapabilities":
+        libvirt_version.is_libvirt_feature_supported(params)
+        domcap_validate(file=output_path, **virsh_dargs)
+        schema = ""
     else:
         # domain
         virsh.dumpxml(vm_name, to_file=output_path)