From nobody Mon Mar 23 23:24:10 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1773302383; cv=none; d=zohomail.com; s=zohoarc; b=WmeOwIywVMPB5qU42efb/fa0NYHzPDCzg58XnGF7/cp65NVyWeJvwbD7f6bqHCMCo5LFbpUUGkJEXHYyEcv3yjwJaXVnjhtG8qlq4T4JRWY1SCTxkCl4wL4PGvRHXcsXNGMh3MerDLFky5Dw4dyPoEyxH8eNvHJ/Q51VelJ4oRY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773302383; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=t8fg6K+/poJpGB99C7V2jMpeVqAdWhVxWkEA76FU4Mo=; b=iiwcNQkuyo2kkBqg/6+XdKgiKoxxnKmCJ8WOLOjThwjidcdAQ3MX363585AhM5jHLl1ydLRFkbGLlESheT8HeR0e0W8yrChbVkJqVTnElJDFt/taSG5vk/H0EdP9yRdGGV9B2h5S4ghP0R31FEul0Yt497Gmj7hf74d0kFjjP4A= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1773302383121580.1250139909108; Thu, 12 Mar 2026 00:59:43 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id E4B6441953; Thu, 12 Mar 2026 03:59:41 -0400 (EDT) Received: from [172.19.199.12] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id C680C41A99; Thu, 12 Mar 2026 03:57:30 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 309803F362; Thu, 12 Mar 2026 03:57:25 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 7495B3F950 for ; Thu, 12 Mar 2026 03:57:24 -0400 (EDT) Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-68-YJvoCArpOtW8u60HyIwShg-1; Thu, 12 Mar 2026 03:57:22 -0400 Received: from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.93]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id AF6B81945119 for ; Thu, 12 Mar 2026 07:57:21 +0000 (UTC) Received: from moe (unknown [10.43.3.236]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 18C151800759 for ; Thu, 12 Mar 2026 07:57:20 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HELO_MISC_IP,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1773302244; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=t8fg6K+/poJpGB99C7V2jMpeVqAdWhVxWkEA76FU4Mo=; b=SRymn3k9JLhBD1Xxf2CoaO04IUlDTdDeRjodnmpCDCFvtlUA6hOpy0gk/lXFOJI13j9ubR Gf0e3qcVmaPpbQCUzxIW4ZysDCr2oPu1CP+ZuUgi8bmWcdu0Iy6w390UAJT6fIOPns6Ggi GuVhz4gbjzDfz5Fc24y9m2NEJKgbBiI= X-MC-Unique: YJvoCArpOtW8u60HyIwShg-1 X-Mimecast-MFC-AGG-ID: YJvoCArpOtW8u60HyIwShg_1773302241 To: devel@lists.libvirt.org Subject: [PATCH 1/5] tests: Drop WITH_QEMU from qemu specific tests binaries/libraries Date: Thu, 12 Mar 2026 08:57:10 +0100 Message-ID: <4f51059e3130e00f2c60c9fbdff5360c3841b8d1.1773302208.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.93 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: _TOhMlND0wEM9t2l69YAhRUkr-WXlgrfHph5OgHgUqc_1773302241 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: TXNDPWIR66K3YTG2NBVLQYV6D2A4T4GY X-Message-ID-Hash: TXNDPWIR66K3YTG2NBVLQYV6D2A4T4GY X-MailFrom: mprivozn@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Michal Privoznik via Devel Reply-To: Michal Privoznik X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1773302385116158500 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Michal Privoznik Inside of tests/meson.build there is a section that builds QEMU related tests conditionally (for instance qemudomaincheckpointxml2xmltest). It makes no sense to have the same check inside source file. Or even provide alternative implementation for cases when building without QEMU (EXIT_AM_SKIP). When building without QEMU driver the test is not even compiled, so EXIT_AM_SKIP is dead code. Signed-off-by: Michal Privoznik Reviewed-by: Laine Stump --- tests/qemudomaincheckpointxml2xmltest.c | 31 ++----- tests/qemudomainsnapshotxml2xmltest.c | 29 ++---- tests/qemumemlocktest.c | 25 ++---- tests/qemuxmlconftest.c | 114 +++++++++++------------- tests/testutilsqemu.c | 43 +++++---- tests/testutilsqemu.h | 23 +++-- 6 files changed, 104 insertions(+), 161 deletions(-) diff --git a/tests/qemudomaincheckpointxml2xmltest.c b/tests/qemudomainchec= kpointxml2xmltest.c index 0e195dae8d..e6d9bf1a4f 100644 --- a/tests/qemudomaincheckpointxml2xmltest.c +++ b/tests/qemudomaincheckpointxml2xmltest.c @@ -9,15 +9,12 @@ #include =20 #include "testutils.h" +#include "internal.h" +#include "qemu/qemu_conf.h" +#include "checkpoint_conf.h" +#include "testutilsqemu.h" =20 -#ifdef WITH_QEMU - -# include "internal.h" -# include "qemu/qemu_conf.h" -# include "checkpoint_conf.h" -# include "testutilsqemu.h" - -# define VIR_FROM_THIS VIR_FROM_NONE +#define VIR_FROM_THIS VIR_FROM_NONE =20 static virQEMUDriver driver; =20 @@ -145,7 +142,7 @@ mymain(void) virDomainXMLOptionSetMomentPostParse(driver.xmlopt, testCheckpointPostParse); =20 -# define DO_TEST(prefix, name, inpath, outpath, time, flags) \ +#define DO_TEST(prefix, name, inpath, outpath, time, flags) \ do { \ const struct testInfo info =3D {abs_srcdir "/" inpath "/" name ".x= ml", \ abs_srcdir "/" outpath "/" name ".xm= l", \ @@ -155,17 +152,17 @@ mymain(void) ret =3D -1; \ } while (0) =20 -# define DO_TEST_INOUT(name, time, flags) \ +#define DO_TEST_INOUT(name, time, flags) \ DO_TEST("in->out", name, \ "qemudomaincheckpointxml2xmlin", \ "qemudomaincheckpointxml2xmlout", \ time, flags) -# define DO_TEST_OUT(name, flags) \ +#define DO_TEST_OUT(name, flags) \ DO_TEST("out->out", name, \ "qemudomaincheckpointxml2xmlout", \ "qemudomaincheckpointxml2xmlout", \ 0, flags | TEST_REDEFINE) -# define DO_TEST_INVALID(name) \ +#define DO_TEST_INVALID(name) \ DO_TEST("in->out", name, \ "qemudomaincheckpointxml2xmlin", \ "qemudomaincheckpointxml2xmlout", \ @@ -196,13 +193,3 @@ mymain(void) } =20 VIR_TEST_MAIN(mymain) - -#else - -int -main(void) -{ - return EXIT_AM_SKIP; -} - -#endif /* WITH_QEMU */ diff --git a/tests/qemudomainsnapshotxml2xmltest.c b/tests/qemudomainsnapsh= otxml2xmltest.c index 035c275b14..9b9168ac21 100644 --- a/tests/qemudomainsnapshotxml2xmltest.c +++ b/tests/qemudomainsnapshotxml2xmltest.c @@ -6,14 +6,11 @@ #include =20 #include "testutils.h" +#include "internal.h" +#include "qemu/qemu_conf.h" +#include "testutilsqemu.h" =20 -#ifdef WITH_QEMU - -# include "internal.h" -# include "qemu/qemu_conf.h" -# include "testutilsqemu.h" - -# define VIR_FROM_THIS VIR_FROM_NONE +#define VIR_FROM_THIS VIR_FROM_NONE =20 static virQEMUDriver driver; =20 @@ -123,7 +120,7 @@ mymain(void) virDomainXMLOptionSetMomentPostParse(driver.xmlopt, testSnapshotPostParse); =20 -# define DO_TEST(prefix, name, inpath, outpath, uuid, time, flags) \ +#define DO_TEST(prefix, name, inpath, outpath, uuid, time, flags) \ do { \ const struct testInfo info =3D {abs_srcdir "/" inpath "/" name ".x= ml", \ abs_srcdir "/" outpath "/" name ".xm= l", \ @@ -133,16 +130,16 @@ mymain(void) ret =3D -1; \ } while (0) =20 -# define DO_TEST_IN(name, uuid) DO_TEST("in->in", name, \ +#define DO_TEST_IN(name, uuid) DO_TEST("in->in", name, \ "qemudomainsnapshotxml2xmlin", \ "qemudomainsnapshotxml2xmlin", \ uuid, 0, 0) =20 -# define DO_TEST_OUT(name, uuid, internal) \ +#define DO_TEST_OUT(name, uuid, internal) \ DO_TEST("out->out", name, "qemudomainsnapshotxml2xmlout", \ "qemudomainsnapshotxml2xmlout", uuid, 0, internal | TEST_REDEF= INE) =20 -# define DO_TEST_INOUT(name, uuid, time, flags) \ +#define DO_TEST_INOUT(name, uuid, time, flags) \ DO_TEST("in->out", name, \ "qemudomainsnapshotxml2xmlin",\ "qemudomainsnapshotxml2xmlout",\ @@ -190,13 +187,3 @@ mymain(void) } =20 VIR_TEST_MAIN(mymain) - -#else - -int -main(void) -{ - return EXIT_AM_SKIP; -} - -#endif /* WITH_QEMU */ diff --git a/tests/qemumemlocktest.c b/tests/qemumemlocktest.c index a2888732f7..0f22594ad4 100644 --- a/tests/qemumemlocktest.c +++ b/tests/qemumemlocktest.c @@ -6,16 +6,13 @@ #include =20 #include "testutils.h" +#include "internal.h" +#include "conf/domain_conf.h" +#include "qemu/qemu_domain.h" =20 -#ifdef WITH_QEMU +#include "testutilsqemu.h" =20 -# include "internal.h" -# include "conf/domain_conf.h" -# include "qemu/qemu_domain.h" - -# include "testutilsqemu.h" - -# define VIR_FROM_THIS VIR_FROM_QEMU +#define VIR_FROM_THIS VIR_FROM_QEMU =20 static virQEMUDriver driver; =20 @@ -52,7 +49,7 @@ mymain(void) if (qemuTestDriverInit(&driver) < 0) return EXIT_FAILURE; =20 -# define DO_TEST(name, memlock) \ +#define DO_TEST(name, memlock) \ do { \ static struct testInfo info =3D { \ name, memlock \ @@ -127,13 +124,3 @@ mymain(void) VIR_TEST_MAIN_PRELOAD(mymain, VIR_TEST_MOCK("virpci"), VIR_TEST_MOCK("domaincaps")) - -#else - -int -main(void) -{ - return EXIT_AM_SKIP; -} - -#endif /* WITH_QEMU */ diff --git a/tests/qemuxmlconftest.c b/tests/qemuxmlconftest.c index 187f90c9dc..cf147e70d4 100644 --- a/tests/qemuxmlconftest.c +++ b/tests/qemuxmlconftest.c @@ -6,33 +6,30 @@ #include =20 #include "testutils.h" +#include "internal.h" +#include "viralloc.h" +#include "viridentity.h" +#include "qemu/qemu_block.h" +#include "qemu/qemu_capabilities.h" +#include "qemu/qemu_domain.h" +#include "qemu/qemu_migration.h" +#include "qemu/qemu_passt.h" +#include "qemu/qemu_process.h" +#include "qemu/qemu_slirp.h" +#include "qemu/qemu_virtiofs.h" +#include "qemu/qemu_vhost_user.h" +#include "datatypes.h" +#include "conf/storage_conf.h" +#include "virfilewrapper.h" +#include "configmake.h" +#include "testutilsqemuschema.h" =20 -#ifdef WITH_QEMU +#define LIBVIRT_QEMU_CAPSPRIV_H_ALLOW +#include "qemu/qemu_capspriv.h" =20 -# include "internal.h" -# include "viralloc.h" -# include "viridentity.h" -# include "qemu/qemu_block.h" -# include "qemu/qemu_capabilities.h" -# include "qemu/qemu_domain.h" -# include "qemu/qemu_migration.h" -# include "qemu/qemu_passt.h" -# include "qemu/qemu_process.h" -# include "qemu/qemu_slirp.h" -# include "qemu/qemu_virtiofs.h" -# include "qemu/qemu_vhost_user.h" -# include "datatypes.h" -# include "conf/storage_conf.h" -# include "virfilewrapper.h" -# include "configmake.h" -# include "testutilsqemuschema.h" +#include "testutilsqemu.h" =20 -# define LIBVIRT_QEMU_CAPSPRIV_H_ALLOW -# include "qemu/qemu_capspriv.h" - -# include "testutilsqemu.h" - -# define VIR_FROM_THIS VIR_FROM_QEMU +#define VIR_FROM_THIS VIR_FROM_QEMU =20 static virQEMUDriver driver; =20 @@ -95,7 +92,7 @@ static virSecretDriver fakeSecretDriver =3D { }; =20 =20 -# define STORAGE_POOL_XML_PATH "storagepoolxml2xmlout/" +#define STORAGE_POOL_XML_PATH "storagepoolxml2xmlout/" static const unsigned char fakeUUID[VIR_UUID_BUFLEN] =3D "fakeuuid"; =20 static virStoragePoolPtr @@ -743,7 +740,7 @@ testQemuConfXMLCommon(testQemuInfo *info, if (testInfoCheckDuplicate(info) < 0) goto cleanup; =20 -# if !WITH_NBDKIT +#if !WITH_NBDKIT /* when compiled without nbdkit support we want to skip the test after * marking it as used */ if (info->args.fakeNbdkitCaps) { @@ -751,7 +748,7 @@ testQemuConfXMLCommon(testQemuInfo *info, info->prepared =3D true; goto cleanup; } -# endif /* !WITH_NBDKIT */ +#endif /* !WITH_NBDKIT */ =20 if (info->arch !=3D VIR_ARCH_NONE && info->arch !=3D VIR_ARCH_X86_64) qemuTestSetHostArch(&driver, info->arch); @@ -1302,64 +1299,64 @@ mymain(void) * the test cases should be forked using DO_TEST_CAPS_VER with the appropr= iate * version. */ -# define DO_TEST_FULL(_name, _suffix, ...) \ +#define DO_TEST_FULL(_name, _suffix, ...) \ testRun(_name, _suffix, &ret, &testConf, __VA_ARGS__); =20 -# define DO_TEST_CAPS_INTERNAL(name, arch, ver, ...) \ +#define DO_TEST_CAPS_INTERNAL(name, arch, ver, ...) \ DO_TEST_FULL(name, "." arch "-" ver, \ ARG_CAPS_ARCH, arch, \ ARG_CAPS_VER, ver, \ __VA_ARGS__, \ ARG_END) =20 -# define DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, ...) \ +#define DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, ...) \ DO_TEST_CAPS_INTERNAL(name, arch, "latest", __VA_ARGS__) =20 -# define DO_TEST_CAPS_ARCH_VER_FULL(name, arch, ver, ...) \ +#define DO_TEST_CAPS_ARCH_VER_FULL(name, arch, ver, ...) \ DO_TEST_CAPS_INTERNAL(name, arch, ver, __VA_ARGS__) =20 -# define DO_TEST_CAPS_ARCH_LATEST(name, arch) \ +#define DO_TEST_CAPS_ARCH_LATEST(name, arch) \ DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, ARG_END) =20 -# define DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE(name, arch) \ +#define DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE(name, arch) \ DO_TEST_FULL(name, "." arch "-latest.abi-update", \ ARG_CAPS_ARCH, arch, \ ARG_CAPS_VER, "latest", \ ARG_PARSEFLAGS, VIR_DOMAIN_DEF_PARSE_ABI_UPDATE, \ ARG_END) =20 -# define DO_TEST_CAPS_ARCH_VER(name, arch, ver) \ +#define DO_TEST_CAPS_ARCH_VER(name, arch, ver) \ DO_TEST_CAPS_ARCH_VER_FULL(name, arch, ver, ARG_END) =20 -# define DO_TEST_CAPS_LATEST_NBDKIT(name, ...) \ +#define DO_TEST_CAPS_LATEST_NBDKIT(name, ...) \ DO_TEST_CAPS_ARCH_LATEST_FULL(name, "x86_64", ARG_NBDKIT_CAPS, __VA_AR= GS__, QEMU_NBDKIT_CAPS_LAST, ARG_END) =20 -# define DO_TEST_CAPS_LATEST(name) \ +#define DO_TEST_CAPS_LATEST(name) \ DO_TEST_CAPS_ARCH_LATEST(name, "x86_64") =20 -# define DO_TEST_CAPS_LATEST_ABI_UPDATE(name) \ +#define DO_TEST_CAPS_LATEST_ABI_UPDATE(name) \ DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE(name, "x86_64") =20 -# define DO_TEST_CAPS_VER(name, ver) \ +#define DO_TEST_CAPS_VER(name, ver) \ DO_TEST_CAPS_ARCH_VER(name, "x86_64", ver) =20 -# define DO_TEST_CAPS_LATEST_PPC64(name) \ +#define DO_TEST_CAPS_LATEST_PPC64(name) \ DO_TEST_CAPS_ARCH_LATEST(name, "ppc64") =20 -# define DO_TEST_CAPS_LATEST_PPC64_HOSTCPU(name, hostcpu) \ +#define DO_TEST_CAPS_LATEST_PPC64_HOSTCPU(name, hostcpu) \ DO_TEST_CAPS_ARCH_LATEST_FULL(name, "ppc64", \ ARG_CAPS_HOST_CPU_MODEL, hostcpu) =20 -# define DO_TEST_CAPS_LATEST_PPC64_HOSTCPU_FAILURE(name, hostcpu) \ +#define DO_TEST_CAPS_LATEST_PPC64_HOSTCPU_FAILURE(name, hostcpu) \ DO_TEST_CAPS_ARCH_LATEST_FULL(name, "ppc64", \ ARG_CAPS_HOST_CPU_MODEL, hostcpu, \ ARG_FLAGS, FLAG_EXPECT_FAILURE) =20 -# define DO_TEST_CAPS_ARCH_LATEST_FAILURE(name, arch) \ +#define DO_TEST_CAPS_ARCH_LATEST_FAILURE(name, arch) \ DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, \ ARG_FLAGS, FLAG_EXPECT_FAILURE) =20 -# define DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE_FAILURE(name, arch) \ +#define DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE_FAILURE(name, arch) \ DO_TEST_FULL(name, "." arch "-latest.abi-update", \ ARG_CAPS_ARCH, arch, \ ARG_CAPS_VER, "latest", \ @@ -1367,24 +1364,24 @@ mymain(void) ARG_FLAGS, FLAG_EXPECT_FAILURE, \ ARG_END) =20 -# define DO_TEST_CAPS_ARCH_VER_FAILURE(name, arch, ver) \ +#define DO_TEST_CAPS_ARCH_VER_FAILURE(name, arch, ver) \ DO_TEST_CAPS_ARCH_VER_FULL(name, arch, ver, \ ARG_FLAGS, FLAG_EXPECT_FAILURE) =20 -# define DO_TEST_CAPS_LATEST_FAILURE(name) \ +#define DO_TEST_CAPS_LATEST_FAILURE(name) \ DO_TEST_CAPS_ARCH_LATEST_FAILURE(name, "x86_64") =20 -# define DO_TEST_CAPS_LATEST_ABI_UPDATE_FAILURE(name) \ +#define DO_TEST_CAPS_LATEST_ABI_UPDATE_FAILURE(name) \ DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE_FAILURE(name, "x86_64") =20 -# define DO_TEST_CAPS_VER_FAILURE(name, ver) \ +#define DO_TEST_CAPS_VER_FAILURE(name, ver) \ DO_TEST_CAPS_ARCH_VER_FAILURE(name, "x86_64", ver) =20 -# define DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR(name, arch) \ +#define DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR(name, arch) \ DO_TEST_CAPS_ARCH_LATEST_FULL(name, arch, \ ARG_FLAGS, FLAG_EXPECT_PARSE_ERROR) =20 -# define DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE_PARSE_ERROR(name, arch) \ +#define DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE_PARSE_ERROR(name, arch) \ DO_TEST_FULL(name, "." arch "-latest.abi-update", \ ARG_CAPS_ARCH, arch, \ ARG_CAPS_VER, "latest", \ @@ -1392,20 +1389,20 @@ mymain(void) ARG_FLAGS, FLAG_EXPECT_PARSE_ERROR, \ ARG_END) =20 -# define DO_TEST_CAPS_ARCH_VER_PARSE_ERROR(name, arch, ver) \ +#define DO_TEST_CAPS_ARCH_VER_PARSE_ERROR(name, arch, ver) \ DO_TEST_CAPS_ARCH_VER_FULL(name, arch, ver, \ ARG_FLAGS, FLAG_EXPECT_PARSE_ERROR) =20 -# define DO_TEST_CAPS_LATEST_PARSE_ERROR(name) \ +#define DO_TEST_CAPS_LATEST_PARSE_ERROR(name) \ DO_TEST_CAPS_ARCH_LATEST_PARSE_ERROR(name, "x86_64") =20 -# define DO_TEST_CAPS_LATEST_ABI_UPDATE_PARSE_ERROR(name) \ +#define DO_TEST_CAPS_LATEST_ABI_UPDATE_PARSE_ERROR(name) \ DO_TEST_CAPS_ARCH_LATEST_ABI_UPDATE_PARSE_ERROR(name, "x86_64") =20 -# define DO_TEST_CAPS_VER_PARSE_ERROR(name, ver) \ +#define DO_TEST_CAPS_VER_PARSE_ERROR(name, ver) \ DO_TEST_CAPS_ARCH_VER_PARSE_ERROR(name, "x86_64", ver) =20 -# define DO_TEST_GIC(name, ver, gic) \ +#define DO_TEST_GIC(name, ver, gic) \ DO_TEST_CAPS_ARCH_VER_FULL(name, "aarch64", ver, ARG_GIC, gic, ARG_FLA= GS, FLAG_ALLOW_DUPLICATE_OUTPUT, ARG_END) =20 /* Unset or set all envvars here that are copied in qemudBuildCommandL= ine @@ -3418,12 +3415,3 @@ VIR_TEST_MAIN_PRELOAD(mymain, VIR_TEST_MOCK("virrandom"), VIR_TEST_MOCK("qemucpu"), VIR_TEST_MOCK("virnuma")) - -#else - -int main(void) -{ - return EXIT_AM_SKIP; -} - -#endif /* WITH_QEMU */ diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c index d7f2e55330..e00e52d2a8 100644 --- a/tests/testutilsqemu.c +++ b/tests/testutilsqemu.c @@ -1,23 +1,22 @@ #include -#ifdef WITH_QEMU =20 -# include "testutilsqemu.h" -# include "testutilsqemuschema.h" -# include "testutilshostcpus.h" -# include "testutils.h" -# include "viralloc.h" -# include "cpu_conf.h" -# include "qemu/qemu_domain.h" -# define LIBVIRT_QEMU_CAPSPRIV_H_ALLOW -# include "qemu/qemu_capspriv.h" -# include "virstring.h" -# include "virfilecache.h" -# include "virtpm.h" +#include +#include =20 -# include -# include +#include "testutilsqemu.h" +#include "testutilsqemuschema.h" +#include "testutilshostcpus.h" +#include "testutils.h" +#include "viralloc.h" +#include "cpu_conf.h" +#include "qemu/qemu_domain.h" +#define LIBVIRT_QEMU_CAPSPRIV_H_ALLOW +#include "qemu/qemu_capspriv.h" +#include "virstring.h" +#include "virfilecache.h" +#include "virtpm.h" =20 -# define VIR_FROM_THIS VIR_FROM_QEMU +#define VIR_FROM_THIS VIR_FROM_QEMU =20 static virCPUDef *cpuDefault; static virCPUDef *cpuHaswell; @@ -289,8 +288,8 @@ qemuTestCapsCacheInsert(virFileCache *cache, return 0; } =20 -# define STATEDIRTEMPLATE abs_builddir "/qemustatedir-XXXXXX" -# define CONFIGDIRTEMPLATE abs_builddir "/qemuconfigdir-XXXXXX" +#define STATEDIRTEMPLATE abs_builddir "/qemustatedir-XXXXXX" +#define CONFIGDIRTEMPLATE abs_builddir "/qemuconfigdir-XXXXXX" =20 int qemuTestDriverInit(virQEMUDriver *driver) { @@ -443,8 +442,8 @@ testQemuCapsSetGIC(virQEMUCaps *qemuCaps, =20 gicCapabilities =3D g_new0(virGICCapability, 2); =20 -# define IMPL_BOTH \ - VIR_GIC_IMPLEMENTATION_KERNEL|VIR_GIC_IMPLEMENTATION_EMULATED +#define IMPL_BOTH \ + VIR_GIC_IMPLEMENTATION_KERNEL|VIR_GIC_IMPLEMENTATION_EMULATED =20 if (gic & GIC_V2) { gicCapabilities[ngicCapabilities].version =3D VIR_GIC_VERSION_2; @@ -457,7 +456,7 @@ testQemuCapsSetGIC(virQEMUCaps *qemuCaps, ngicCapabilities++; } =20 -# undef IMPL_BOTH +#undef IMPL_BOTH =20 virQEMUCapsSetGICCapabilities(qemuCaps, gicCapabilities, ngicCapabilities); @@ -465,8 +464,6 @@ testQemuCapsSetGIC(virQEMUCaps *qemuCaps, return 0; } =20 -#endif - =20 struct testQemuCapsFile { unsigned long long ver; diff --git a/tests/testutilsqemu.h b/tests/testutilsqemu.h index a8e0fefa84..dbc8e2dbdf 100644 --- a/tests/testutilsqemu.h +++ b/tests/testutilsqemu.h @@ -16,19 +16,17 @@ =20 #pragma once =20 -#ifdef WITH_QEMU +#include "capabilities.h" +#include "virfilecache.h" +#include "domain_conf.h" +#include "qemu/qemu_capabilities.h" +#include "qemu/qemu_conf.h" =20 -# include "capabilities.h" -# include "virfilecache.h" -# include "domain_conf.h" -# include "qemu/qemu_capabilities.h" -# include "qemu/qemu_conf.h" - -# define TEST_QEMU_CAPS_PATH abs_srcdir "/qemucapabilitiesdata" -# define TEST_TPM_ENV_VAR "VIR_TEST_MOCK_FAKE_TPM_VERSION" -# define TPM_VER_1_2 "1.2" -# define TPM_VER_2_0 "2.0" -# define TEST_NBDKIT_PATH "/fakebindir/nbdkit" +#define TEST_QEMU_CAPS_PATH abs_srcdir "/qemucapabilitiesdata" +#define TEST_TPM_ENV_VAR "VIR_TEST_MOCK_FAKE_TPM_VERSION" +#define TPM_VER_1_2 "1.2" +#define TPM_VER_2_0 "2.0" +#define TEST_NBDKIT_PATH "/fakebindir/nbdkit" =20 enum { GIC_NONE =3D 0, @@ -187,4 +185,3 @@ testQemuInsertRealCaps(virFileCache *cache, GHashTable *capsCache, GHashTable *schemaCache, GHashTable **schema); -#endif --=20 2.52.0 From nobody Mon Mar 23 23:24:10 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1773302485; cv=none; d=zohomail.com; s=zohoarc; b=FboSvtk9MVtJyZL6hSKx9G8UUAj/gX5d8f5EyDaj0igkTvpiXWcmcdCK2SxH7RONc91qXUe6c8n9kG2rimLynIHjIF67xonKlJkfk2asJ7Xrul1Poi0Trw5mnF5J686772A7tH4NBWyeXPW4CxnrdRLG6L/O6NU6RWi+T/v7PQ4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773302485; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=lJLfFXFhHl7nKGcXTQW+2MF9JkGf7AAu92z74tCf8tE=; b=QlVh5qUNt6aJMbkIT2PNpseskHsSWhskE8P2r2rCW0ouHSrkb2F070hFhphIsVz828imHW6gbsd50teRfRKNbrPH81d18WTul3tbuGxnJk6BzpjjEurN0Njk/v1LmeLQXMUHvgWtWEdSmmlmDrePVM9TfpruyPelOJAskQhlpOs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1773302485275450.40269747099376; Thu, 12 Mar 2026 01:01:25 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 4EAEA418AC; Thu, 12 Mar 2026 04:01:24 -0400 (EDT) Received: from [172.19.199.12] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id E334741B47; Thu, 12 Mar 2026 03:57:34 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id C4A943F34D; Thu, 12 Mar 2026 03:57:26 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id C1E263F362 for ; Thu, 12 Mar 2026 03:57:25 -0400 (EDT) Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-41-0Sdd9QfeMg6SgLH_OSv4LQ-1; Thu, 12 Mar 2026 03:57:23 -0400 Received: from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.93]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id E734E195609D for ; Thu, 12 Mar 2026 07:57:22 +0000 (UTC) Received: from moe (unknown [10.43.3.236]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 21B55180066F for ; Thu, 12 Mar 2026 07:57:21 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HELO_MISC_IP,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1773302245; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=lJLfFXFhHl7nKGcXTQW+2MF9JkGf7AAu92z74tCf8tE=; b=Hdbv+kuOo/bn0nnF16rUrpJQrakuZAHxUk8uhdwF0ZQxLRf906XDUnpQYoX5lACpCyoCeE kkGfozPL5Hzrh8yZFHMnXHCkfkjnKuofObSvsQ+D88Iu+r8NwidbPW86hxK43EeowJhnkD NhmKzvb7ev/LTVVbXYevUVOxFizPjDA= X-MC-Unique: 0Sdd9QfeMg6SgLH_OSv4LQ-1 X-Mimecast-MFC-AGG-ID: 0Sdd9QfeMg6SgLH_OSv4LQ_1773302243 To: devel@lists.libvirt.org Subject: [PATCH 2/5] qemuxmlconftest: Separate fake drivers into a separate file Date: Thu, 12 Mar 2026 08:57:11 +0100 Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.93 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: KADYSiVRoQd1EEwZlW4iPwGfD4liiV6K31Ng0Y5lG0s_1773302243 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: HOVMGSLQLNFPYYKDSYS3IEMU5YFIMF6Q X-Message-ID-Hash: HOVMGSLQLNFPYYKDSYS3IEMU5YFIMF6Q X-MailFrom: mprivozn@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Michal Privoznik via Devel Reply-To: Michal Privoznik X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1773302485742158500 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Michal Privoznik One of the tests that qemuxmlconftest does is generate cmd line for given domain XML. This process might involve talking to other drivers (secret/storage/nwfilter/network). To produce predictable output the test comes with fake implementation of APIs of those drivers. Well, move that implementation into a separate file so that it can be reused by other tests (notably, qemuhotplugtest is going to use it). Signed-off-by: Michal Privoznik Reviewed-by: Laine Stump --- tests/meson.build | 5 +- tests/qemufakedrivers.c | 368 ++++++++++++++++++++++++++++++++++++++++ tests/qemufakedrivers.h | 19 +++ tests/qemuxmlconftest.c | 331 +----------------------------------- 4 files changed, 396 insertions(+), 327 deletions(-) create mode 100644 tests/qemufakedrivers.c create mode 100644 tests/qemufakedrivers.h diff --git a/tests/meson.build b/tests/meson.build index 847538d2e4..83aa0104bb 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -151,7 +151,10 @@ endif if conf.has('WITH_QEMU') test_utils_qemu_lib =3D static_library( 'test_utils_qemu', - [ 'testutilsqemu.c', 'testutilsqemuschema.c' ], + [ 'qemufakedrivers.c', + 'testutilsqemu.c', + 'testutilsqemuschema.c', + ], dependencies: [ tests_dep ], ) =20 diff --git a/tests/qemufakedrivers.c b/tests/qemufakedrivers.c new file mode 100644 index 0000000000..94ad5aeb0b --- /dev/null +++ b/tests/qemufakedrivers.c @@ -0,0 +1,368 @@ +/* + * SPDX-License-Identifier: LGPL-2.1-or-later + */ + +#include + +#include "qemufakedrivers.h" +#include "testutils.h" +#include "datatypes.h" +#include "storage_conf.h" + +#define VIR_FROM_THIS VIR_FROM_QEMU + +static unsigned char * +fakeSecretGetValue(virSecretPtr obj G_GNUC_UNUSED, + size_t *value_size, + unsigned int fakeflags G_GNUC_UNUSED) +{ + char *secret; + secret =3D g_strdup("AQCVn5hO6HzFAhAAq0NCv8jtJcIcE+HOBlMQ1A"); + *value_size =3D strlen(secret); + return (unsigned char *) secret; +} + + +static virSecretPtr +fakeSecretLookupByUsage(virConnectPtr conn, + int usageType, + const char *usageID) +{ + unsigned char uuid[VIR_UUID_BUFLEN]; + if (usageType =3D=3D VIR_SECRET_USAGE_TYPE_VOLUME) { + if (!STRPREFIX(usageID, "/storage/guest_disks/")) { + virReportError(VIR_ERR_INTERNAL_ERROR, + "test provided invalid volume storage prefix '%= s'", + usageID); + return NULL; + } + } else if (STRNEQ(usageID, "mycluster_myname") && + STRNEQ(usageID, "client.admin secret")) { + virReportError(VIR_ERR_INTERNAL_ERROR, + "test provided incorrect usage '%s'", usageID); + return NULL; + } + + if (virUUIDGenerate(uuid) < 0) + return NULL; + + return virGetSecret(conn, uuid, usageType, usageID); +} + + +static virSecretPtr +fakeSecretLookupByUUID(virConnectPtr conn, + const unsigned char *uuid) +{ + /* NB: This mocked value could be "tls" or "volume" depending on + * which test is being run, we'll leave at NONE (or 0) */ + return virGetSecret(conn, uuid, VIR_SECRET_USAGE_TYPE_NONE, ""); +} + + +static virSecretDriver fakeSecretDriver =3D { + .connectNumOfSecrets =3D NULL, + .connectListSecrets =3D NULL, + .secretLookupByUUID =3D fakeSecretLookupByUUID, + .secretLookupByUsage =3D fakeSecretLookupByUsage, + .secretDefineXML =3D NULL, + .secretGetXMLDesc =3D NULL, + .secretSetValue =3D NULL, + .secretGetValue =3D fakeSecretGetValue, + .secretUndefine =3D NULL, +}; + + +virSecretDriver * +testQemuGetFakeSecretDriver(void) +{ + return &fakeSecretDriver; +} + + +#define STORAGE_POOL_XML_PATH "storagepoolxml2xmlout/" +static const unsigned char fakeUUID[VIR_UUID_BUFLEN] =3D "fakeuuid"; + +static virStoragePoolPtr +fakeStoragePoolLookupByName(virConnectPtr conn, + const char *name) +{ + g_autofree char *xmlpath =3D NULL; + + if (STRNEQ(name, "inactive")) { + xmlpath =3D g_strdup_printf("%s/%s%s.xml", abs_srcdir, + STORAGE_POOL_XML_PATH, name); + + if (!virFileExists(xmlpath)) { + virReportError(VIR_ERR_NO_STORAGE_POOL, + "File '%s' not found", xmlpath); + return NULL; + } + } + + return virGetStoragePool(conn, name, fakeUUID, NULL, NULL); +} + + +static virStorageVolPtr +fakeStorageVolLookupByName(virStoragePoolPtr pool, + const char *name) +{ + g_auto(GStrv) volinfo =3D NULL; + + if (STREQ(pool->name, "inactive")) { + virReportError(VIR_ERR_OPERATION_INVALID, + "storage pool '%s' is not active", pool->name); + return NULL; + } + + if (STREQ(name, "nonexistent")) { + virReportError(VIR_ERR_NO_STORAGE_VOL, + "no storage vol with matching name '%s'", name); + return NULL; + } + + if (!(volinfo =3D g_strsplit(name, "+", 2))) + return NULL; + + if (!volinfo[1]) { + return virGetStorageVol(pool->conn, pool->name, name, "block", NUL= L, NULL); + } + + return virGetStorageVol(pool->conn, pool->name, volinfo[1], volinfo[0], + NULL, NULL); +} + + +static int +fakeStorageVolGetInfo(virStorageVolPtr vol, + virStorageVolInfoPtr info) +{ + memset(info, 0, sizeof(*info)); + + info->type =3D virStorageVolTypeFromString(vol->key); + + if (info->type < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + "Invalid volume type '%s'", vol->key); + return -1; + } + + return 0; +} + + +static char * +fakeStorageVolGetPath(virStorageVolPtr vol) +{ + return g_strdup_printf("/some/%s/device/%s", vol->key, vol->name); +} + + +static char * +fakeStoragePoolGetXMLDesc(virStoragePoolPtr pool, + unsigned int flags_unused G_GNUC_UNUSED) +{ + g_autofree char *xmlpath =3D NULL; + char *xmlbuf =3D NULL; + + if (STREQ(pool->name, "inactive")) { + virReportError(VIR_ERR_NO_STORAGE_POOL, NULL); + return NULL; + } + + xmlpath =3D g_strdup_printf("%s/%s%s.xml", abs_srcdir, STORAGE_POOL_XM= L_PATH, + pool->name); + + if (virTestLoadFile(xmlpath, &xmlbuf) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + "failed to load XML file '%s'", + xmlpath); + return NULL; + } + + return xmlbuf; +} + + +static int +fakeStoragePoolIsActive(virStoragePoolPtr pool) +{ + if (STREQ(pool->name, "inactive")) + return 0; + + return 1; +} + + +/* Test storage pool implementation + * + * These functions aid testing of storage pool related stuff when creating= a + * qemu command line. + * + * There are a few "magic" values to pass to these functions: + * + * 1) "inactive" as a pool name to create an inactive pool. All other name= s are + * interpreted as file names in storagepoolxml2xmlout/ and are used as the + * definition for the pool. If the file doesn't exist the pool doesn't exi= st. + * + * 2) "nonexistent" returns an error while looking up a volume. Otherwise + * pattern VOLUME_TYPE+VOLUME_PATH can be used to simulate a volume in a p= ool. + * This creates a fake path for this volume. If the '+' sign is omitted, b= lock + * type is assumed. + */ +static virStorageDriver fakeStorageDriver =3D { + .storagePoolLookupByName =3D fakeStoragePoolLookupByName, + .storageVolLookupByName =3D fakeStorageVolLookupByName, + .storagePoolGetXMLDesc =3D fakeStoragePoolGetXMLDesc, + .storageVolGetPath =3D fakeStorageVolGetPath, + .storageVolGetInfo =3D fakeStorageVolGetInfo, + .storagePoolIsActive =3D fakeStoragePoolIsActive, +}; + + +virStorageDriver * +testQemuGetFakeStorageDriver(void) +{ + return &fakeStorageDriver; +} + + +/* virNetDevOpenvswitchGetVhostuserIfname mocks a portdev name - handle th= at */ +static virNWFilterBindingPtr +fakeNWFilterBindingLookupByPortDev(virConnectPtr conn, + const char *portdev) +{ + if (STREQ(portdev, "vhost-user0")) + return virGetNWFilterBinding(conn, "fake_vnet0", "fakeFilterName"); + + virReportError(VIR_ERR_NO_NWFILTER_BINDING, + "no nwfilter binding for port dev '%s'", portdev); + return NULL; +} + + +static int +fakeNWFilterBindingDelete(virNWFilterBindingPtr binding G_GNUC_UNUSED) +{ + return 0; +} + + +static virNWFilterDriver fakeNWFilterDriver =3D { + .nwfilterBindingLookupByPortDev =3D fakeNWFilterBindingLookupByPortDev, + .nwfilterBindingDelete =3D fakeNWFilterBindingDelete, +}; + + +virNWFilterDriver * +testQemuGetFakeNWFilterDriver(void) +{ + return &fakeNWFilterDriver; +} + + +/* name of the fake network shall be constructed as: + * NETWORKXMLNAME;NETWORKPORTXMLNAME + * where: + * NETWORKXMLNAME resolves to abs_srcdir/networkxmlconfdata/NETWORKXMLNAM= E.xml + * NETWORKPORTXMLNAME resolves to abs_srcdir/virnetworkportxml2xmldata/NE= TWORKPORTXMLNAME.xml + */ +static virNetworkPtr +fakeNetworkLookupByName(virConnectPtr conn, + const char *name) +{ + unsigned char uuid[VIR_UUID_BUFLEN]; + g_autofree char *netname =3D g_strdup(name); + g_autofree char *path =3D NULL; + char *tmp; + + memset(uuid, 0, VIR_UUID_BUFLEN); + + if ((tmp =3D strchr(netname, ';'))) { + *tmp =3D '\0'; + } else { + virReportError(VIR_ERR_NO_NETWORK, + "Malformed fake network name '%s'. See fakeNetworkL= ookupByName.", + name); + return NULL; + } + + path =3D g_strdup_printf(abs_srcdir "/networkxmlconfdata/%s.xml", netn= ame); + + if (!virFileExists(path)) { + virReportError(VIR_ERR_NO_NETWORK, "fake network '%s' not found", = path); + return NULL; + } + + return virGetNetwork(conn, name, uuid); +} + + +static char * +fakeNetworkGetXMLDesc(virNetworkPtr network, + unsigned int noflags G_GNUC_UNUSED) +{ + g_autofree char *netname =3D g_strdup(network->name); + g_autofree char *path =3D NULL; + char *xml =3D NULL; + + *(strchr(netname, ';')) =3D '\0'; + + path =3D g_strdup_printf(abs_srcdir "/networkxmlconfdata/%s.xml", netn= ame); + + if (virFileReadAll(path, 4 * 1024, &xml) < 0) + return NULL; + + return xml; +} + + +static virNetworkPortPtr +fakeNetworkPortCreateXML(virNetworkPtr net, + const char *xmldesc G_GNUC_UNUSED, + unsigned int noflags G_GNUC_UNUSED) +{ + unsigned char uuid[VIR_UUID_BUFLEN]; + g_autofree char *portname =3D g_strdup(strchr(net->name, ';') + 1); + g_autofree char *path =3D g_strdup_printf(abs_srcdir "/virnetworkportx= ml2xmldata/%s.xml", portname); + + memset(uuid, 0, VIR_UUID_BUFLEN); + + if (!virFileExists(path)) { + virReportError(VIR_ERR_NO_NETWORK_PORT, "fake network port '%s' no= t found", path); + return NULL; + } + + return virGetNetworkPort(net, uuid); +} + + +static char * +fakeNetworkPortGetXMLDesc(virNetworkPortPtr port, + unsigned int noflags G_GNUC_UNUSED) +{ + g_autofree char *portname =3D g_strdup(strchr(port->net->name, ';') + = 1); + g_autofree char *path =3D g_strdup_printf(abs_srcdir "/virnetworkportx= ml2xmldata/%s.xml", portname); + char *xml =3D NULL; + + if (virFileReadAll(path, 4 * 1024, &xml) < 0) + return NULL; + + return xml; +} + + +static virNetworkDriver fakeNetworkDriver =3D { + .networkLookupByName =3D fakeNetworkLookupByName, + .networkGetXMLDesc =3D fakeNetworkGetXMLDesc, + .networkPortCreateXML =3D fakeNetworkPortCreateXML, + .networkPortGetXMLDesc =3D fakeNetworkPortGetXMLDesc, +}; + + +virNetworkDriver * +testQemuGetFakeNetworkDriver(void) +{ + return &fakeNetworkDriver; +} diff --git a/tests/qemufakedrivers.h b/tests/qemufakedrivers.h new file mode 100644 index 0000000000..172ae48451 --- /dev/null +++ b/tests/qemufakedrivers.h @@ -0,0 +1,19 @@ +/* + * SPDX-License-Identifier: LGPL-2.1-or-later + */ + +#pragma once + +#include "driver.h" + +virSecretDriver * +testQemuGetFakeSecretDriver(void); + +virStorageDriver * +testQemuGetFakeStorageDriver(void); + +virNWFilterDriver * +testQemuGetFakeNWFilterDriver(void); + +virNetworkDriver * +testQemuGetFakeNetworkDriver(void); diff --git a/tests/qemuxmlconftest.c b/tests/qemuxmlconftest.c index cf147e70d4..32eb42dd19 100644 --- a/tests/qemuxmlconftest.c +++ b/tests/qemuxmlconftest.c @@ -23,6 +23,7 @@ #include "virfilewrapper.h" #include "configmake.h" #include "testutilsqemuschema.h" +#include "qemufakedrivers.h" =20 #define LIBVIRT_QEMU_CAPSPRIV_H_ALLOW #include "qemu/qemu_capspriv.h" @@ -33,320 +34,6 @@ =20 static virQEMUDriver driver; =20 -static unsigned char * -fakeSecretGetValue(virSecretPtr obj G_GNUC_UNUSED, - size_t *value_size, - unsigned int fakeflags G_GNUC_UNUSED) -{ - char *secret; - secret =3D g_strdup("AQCVn5hO6HzFAhAAq0NCv8jtJcIcE+HOBlMQ1A"); - *value_size =3D strlen(secret); - return (unsigned char *) secret; -} - -static virSecretPtr -fakeSecretLookupByUsage(virConnectPtr conn, - int usageType, - const char *usageID) -{ - unsigned char uuid[VIR_UUID_BUFLEN]; - if (usageType =3D=3D VIR_SECRET_USAGE_TYPE_VOLUME) { - if (!STRPREFIX(usageID, "/storage/guest_disks/")) { - virReportError(VIR_ERR_INTERNAL_ERROR, - "test provided invalid volume storage prefix '%= s'", - usageID); - return NULL; - } - } else if (STRNEQ(usageID, "mycluster_myname") && - STRNEQ(usageID, "client.admin secret")) { - virReportError(VIR_ERR_INTERNAL_ERROR, - "test provided incorrect usage '%s'", usageID); - return NULL; - } - - if (virUUIDGenerate(uuid) < 0) - return NULL; - - return virGetSecret(conn, uuid, usageType, usageID); -} - -static virSecretPtr -fakeSecretLookupByUUID(virConnectPtr conn, - const unsigned char *uuid) -{ - /* NB: This mocked value could be "tls" or "volume" depending on - * which test is being run, we'll leave at NONE (or 0) */ - return virGetSecret(conn, uuid, VIR_SECRET_USAGE_TYPE_NONE, ""); -} - -static virSecretDriver fakeSecretDriver =3D { - .connectNumOfSecrets =3D NULL, - .connectListSecrets =3D NULL, - .secretLookupByUUID =3D fakeSecretLookupByUUID, - .secretLookupByUsage =3D fakeSecretLookupByUsage, - .secretDefineXML =3D NULL, - .secretGetXMLDesc =3D NULL, - .secretSetValue =3D NULL, - .secretGetValue =3D fakeSecretGetValue, - .secretUndefine =3D NULL, -}; - - -#define STORAGE_POOL_XML_PATH "storagepoolxml2xmlout/" -static const unsigned char fakeUUID[VIR_UUID_BUFLEN] =3D "fakeuuid"; - -static virStoragePoolPtr -fakeStoragePoolLookupByName(virConnectPtr conn, - const char *name) -{ - g_autofree char *xmlpath =3D NULL; - - if (STRNEQ(name, "inactive")) { - xmlpath =3D g_strdup_printf("%s/%s%s.xml", abs_srcdir, - STORAGE_POOL_XML_PATH, name); - - if (!virFileExists(xmlpath)) { - virReportError(VIR_ERR_NO_STORAGE_POOL, - "File '%s' not found", xmlpath); - return NULL; - } - } - - return virGetStoragePool(conn, name, fakeUUID, NULL, NULL); -} - - -static virStorageVolPtr -fakeStorageVolLookupByName(virStoragePoolPtr pool, - const char *name) -{ - g_auto(GStrv) volinfo =3D NULL; - - if (STREQ(pool->name, "inactive")) { - virReportError(VIR_ERR_OPERATION_INVALID, - "storage pool '%s' is not active", pool->name); - return NULL; - } - - if (STREQ(name, "nonexistent")) { - virReportError(VIR_ERR_NO_STORAGE_VOL, - "no storage vol with matching name '%s'", name); - return NULL; - } - - if (!(volinfo =3D g_strsplit(name, "+", 2))) - return NULL; - - if (!volinfo[1]) { - return virGetStorageVol(pool->conn, pool->name, name, "block", NUL= L, NULL); - } - - return virGetStorageVol(pool->conn, pool->name, volinfo[1], volinfo[0], - NULL, NULL); -} - -static int -fakeStorageVolGetInfo(virStorageVolPtr vol, - virStorageVolInfoPtr info) -{ - memset(info, 0, sizeof(*info)); - - info->type =3D virStorageVolTypeFromString(vol->key); - - if (info->type < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - "Invalid volume type '%s'", vol->key); - return -1; - } - - return 0; -} - - -static char * -fakeStorageVolGetPath(virStorageVolPtr vol) -{ - return g_strdup_printf("/some/%s/device/%s", vol->key, vol->name); -} - - -static char * -fakeStoragePoolGetXMLDesc(virStoragePoolPtr pool, - unsigned int flags_unused G_GNUC_UNUSED) -{ - g_autofree char *xmlpath =3D NULL; - char *xmlbuf =3D NULL; - - if (STREQ(pool->name, "inactive")) { - virReportError(VIR_ERR_NO_STORAGE_POOL, NULL); - return NULL; - } - - xmlpath =3D g_strdup_printf("%s/%s%s.xml", abs_srcdir, STORAGE_POOL_XM= L_PATH, - pool->name); - - if (virTestLoadFile(xmlpath, &xmlbuf) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - "failed to load XML file '%s'", - xmlpath); - return NULL; - } - - return xmlbuf; -} - -static int -fakeStoragePoolIsActive(virStoragePoolPtr pool) -{ - if (STREQ(pool->name, "inactive")) - return 0; - - return 1; -} - -/* Test storage pool implementation - * - * These functions aid testing of storage pool related stuff when creating= a - * qemu command line. - * - * There are a few "magic" values to pass to these functions: - * - * 1) "inactive" as a pool name to create an inactive pool. All other name= s are - * interpreted as file names in storagepoolxml2xmlout/ and are used as the - * definition for the pool. If the file doesn't exist the pool doesn't exi= st. - * - * 2) "nonexistent" returns an error while looking up a volume. Otherwise - * pattern VOLUME_TYPE+VOLUME_PATH can be used to simulate a volume in a p= ool. - * This creates a fake path for this volume. If the '+' sign is omitted, b= lock - * type is assumed. - */ -static virStorageDriver fakeStorageDriver =3D { - .storagePoolLookupByName =3D fakeStoragePoolLookupByName, - .storageVolLookupByName =3D fakeStorageVolLookupByName, - .storagePoolGetXMLDesc =3D fakeStoragePoolGetXMLDesc, - .storageVolGetPath =3D fakeStorageVolGetPath, - .storageVolGetInfo =3D fakeStorageVolGetInfo, - .storagePoolIsActive =3D fakeStoragePoolIsActive, -}; - - -/* virNetDevOpenvswitchGetVhostuserIfname mocks a portdev name - handle th= at */ -static virNWFilterBindingPtr -fakeNWFilterBindingLookupByPortDev(virConnectPtr conn, - const char *portdev) -{ - if (STREQ(portdev, "vhost-user0")) - return virGetNWFilterBinding(conn, "fake_vnet0", "fakeFilterName"); - - virReportError(VIR_ERR_NO_NWFILTER_BINDING, - "no nwfilter binding for port dev '%s'", portdev); - return NULL; -} - - -static int -fakeNWFilterBindingDelete(virNWFilterBindingPtr binding G_GNUC_UNUSED) -{ - return 0; -} - - -static virNWFilterDriver fakeNWFilterDriver =3D { - .nwfilterBindingLookupByPortDev =3D fakeNWFilterBindingLookupByPortDev, - .nwfilterBindingDelete =3D fakeNWFilterBindingDelete, -}; - - -/* name of the fake network shall be constructed as: - * NETWORKXMLNAME;NETWORKPORTXMLNAME - * where: - * NETWORKXMLNAME resolves to abs_srcdir/networkxmlconfdata/NETWORKXMLNAM= E.xml - * NETWORKPORTXMLNAME resolves to abs_srcdir/virnetworkportxml2xmldata/NE= TWORKPORTXMLNAME.xml - */ -static virNetworkPtr -fakeNetworkLookupByName(virConnectPtr conn, - const char *name) -{ - unsigned char uuid[VIR_UUID_BUFLEN]; - g_autofree char *netname =3D g_strdup(name); - g_autofree char *path =3D NULL; - char *tmp; - - memset(uuid, 0, VIR_UUID_BUFLEN); - - if ((tmp =3D strchr(netname, ';'))) { - *tmp =3D '\0'; - } else { - virReportError(VIR_ERR_NO_NETWORK, - "Malformed fake network name '%s'. See fakeNetworkL= ookupByName.", - name); - return NULL; - } - - path =3D g_strdup_printf(abs_srcdir "/networkxmlconfdata/%s.xml", netn= ame); - - if (!virFileExists(path)) { - virReportError(VIR_ERR_NO_NETWORK, "fake network '%s' not found", = path); - return NULL; - } - - return virGetNetwork(conn, name, uuid); -} - - -static char * -fakeNetworkGetXMLDesc(virNetworkPtr network, - unsigned int noflags G_GNUC_UNUSED) -{ - g_autofree char *netname =3D g_strdup(network->name); - g_autofree char *path =3D NULL; - char *xml =3D NULL; - - *(strchr(netname, ';')) =3D '\0'; - - path =3D g_strdup_printf(abs_srcdir "/networkxmlconfdata/%s.xml", netn= ame); - - if (virFileReadAll(path, 4 * 1024, &xml) < 0) - return NULL; - - return xml; -} - - -static virNetworkPortPtr -fakeNetworkPortCreateXML(virNetworkPtr net, - const char *xmldesc G_GNUC_UNUSED, - unsigned int noflags G_GNUC_UNUSED) -{ - unsigned char uuid[VIR_UUID_BUFLEN]; - g_autofree char *portname =3D g_strdup(strchr(net->name, ';') + 1); - g_autofree char *path =3D g_strdup_printf(abs_srcdir "/virnetworkportx= ml2xmldata/%s.xml", portname); - - memset(uuid, 0, VIR_UUID_BUFLEN); - - if (!virFileExists(path)) { - virReportError(VIR_ERR_NO_NETWORK_PORT, "fake network port '%s' no= t found", path); - return NULL; - } - - return virGetNetworkPort(net, uuid); -} - - -static char * -fakeNetworkPortGetXMLDesc(virNetworkPortPtr port, - unsigned int noflags G_GNUC_UNUSED) -{ - g_autofree char *portname =3D g_strdup(strchr(port->net->name, ';') + = 1); - g_autofree char *path =3D g_strdup_printf(abs_srcdir "/virnetworkportx= ml2xmldata/%s.xml", portname); - char *xml =3D NULL; - - if (virFileReadAll(path, 4 * 1024, &xml) < 0) - return NULL; - - return xml; -} - =20 static void testQemuPrepareHostdevPCI(virDomainHostdevDef *hostdev) @@ -418,14 +105,6 @@ testQemuPrepareHostdev(virDomainObj *vm) } =20 =20 -static virNetworkDriver fakeNetworkDriver =3D { - .networkLookupByName =3D fakeNetworkLookupByName, - .networkGetXMLDesc =3D fakeNetworkGetXMLDesc, - .networkPortCreateXML =3D fakeNetworkPortCreateXML, - .networkPortGetXMLDesc =3D fakeNetworkPortGetXMLDesc, -}; - - static void testUpdateQEMUCapsHostCPUModel(virQEMUCaps *qemuCaps, virArch hostArch) { @@ -1273,10 +952,10 @@ mymain(void) if (!(conn =3D virGetConnect())) return EXIT_FAILURE; =20 - conn->secretDriver =3D &fakeSecretDriver; - conn->storageDriver =3D &fakeStorageDriver; - conn->nwfilterDriver =3D &fakeNWFilterDriver; - conn->networkDriver =3D &fakeNetworkDriver; + conn->secretDriver =3D testQemuGetFakeSecretDriver(); + conn->storageDriver =3D testQemuGetFakeStorageDriver(); + conn->nwfilterDriver =3D testQemuGetFakeNWFilterDriver(); + conn->networkDriver =3D testQemuGetFakeNetworkDriver(); =20 virSetConnectInterface(conn); virSetConnectNetwork(conn); --=20 2.52.0 From nobody Mon Mar 23 23:24:10 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1773302523; cv=none; d=zohomail.com; s=zohoarc; b=agKQZtb5be1wivSgUVzzGKsAbyMxZsOkIawye/04au5AVC2PAJm7gqQnX9UnB9JM3gpu03OxZmB7p0Jw4/PwUuXJnxBa/w3NQCuDchFzCYC+O/WKmRPpyyJvoisGd3nQh4dyzVI02SfI1FF2QLrRSzgrkAeZ0ZQNqzkFLOO1Jas= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773302523; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=3T7yLJqwIARMe897aiwZYYo7a9Wn0/Ix9Y89EdQpVx8=; b=g4pgsM1mplh18p5yL3yCw9PcX3USxOyegnCFcrRAjRJbzCJbp+zO17c5S7UmbSdd7zcRYUD6woHD8Crm5YMzCptVQS/j2jo0gkTNEcSDnkxayUecrvxQzpzQqToPdHJMNC/B0od3XxuBeuAPsXHYkKa7rOLhFClNfyxQTnxaB2M= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1773302523113398.4129476674426; Thu, 12 Mar 2026 01:02:03 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 4A23040474; Thu, 12 Mar 2026 04:02:02 -0400 (EDT) Received: from [172.19.199.12] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 90BC941B90; Thu, 12 Mar 2026 03:57:36 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 7809041962; Thu, 12 Mar 2026 03:57:29 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id D63453F34D for ; Thu, 12 Mar 2026 03:57:26 -0400 (EDT) Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-478-YRkqBTY7NJ2T7zdcXFQ_NA-1; Thu, 12 Mar 2026 03:57:24 -0400 Received: from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.93]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id E4A191953991 for ; Thu, 12 Mar 2026 07:57:23 +0000 (UTC) Received: from moe (unknown [10.43.3.236]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 4F13C180049D for ; Thu, 12 Mar 2026 07:57:23 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HELO_MISC_IP,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1773302246; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=3T7yLJqwIARMe897aiwZYYo7a9Wn0/Ix9Y89EdQpVx8=; b=GQ6zhWcjtA+LxgMVv3/hphjQME2PwIf7oH7wc4ImITCoxT1R4qULyiKTlkkuz40m6ZCM0V hZfHkcCWkYshS+SIScIk+JDx1UTFWmWnN7q58XySzg4ajETabo0Kf/q3blKTX4rfoNCvmu 3lLtlDBQLUqDhGmeHvEzuBp49Ec0wtA= X-MC-Unique: YRkqBTY7NJ2T7zdcXFQ_NA-1 X-Mimecast-MFC-AGG-ID: YRkqBTY7NJ2T7zdcXFQ_NA_1773302244 To: devel@lists.libvirt.org Subject: [PATCH 3/5] virnetworkportxml2xmldata: Use different PCI address in plug-hostdev-pci.xml Date: Thu, 12 Mar 2026 08:57:12 +0100 Message-ID: <31776146cb1d29867b837cadc688d21cb984f487.1773302208.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.93 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: CeLAjbnFIZF8fi6PQO5SbfuML10BeyHgNnZlTOxmb8U_1773302244 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 4BJHP6SYWURM4CCVFFQNPTRXZSXH7YL6 X-Message-ID-Hash: 4BJHP6SYWURM4CCVFFQNPTRXZSXH7YL6 X-MailFrom: mprivozn@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Michal Privoznik via Devel Reply-To: Michal Privoznik X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1773302523852158500 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Michal Privoznik Inside of plug-hostdev-pci.xml there's a PCI address of an allocated PCI device for an . Currently, there's some made up address. But this specific file is going to be used from qemuhotplugtest soon and as such it needs an PCI address that virpcimock creates. Switch it to 0000:06:12.2. Signed-off-by: Michal Privoznik Reviewed-by: Laine Stump --- .../net-virtio-teaming-network.x86_64-latest.args | 2 +- tests/virnetworkportxml2xmldata/plug-hostdev-pci.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/qemuxmlconfdata/net-virtio-teaming-network.x86_64-latest= .args b/tests/qemuxmlconfdata/net-virtio-teaming-network.x86_64-latest.args index 0c07ec4c70..a3dada0f07 100644 --- a/tests/qemuxmlconfdata/net-virtio-teaming-network.x86_64-latest.args +++ b/tests/qemuxmlconfdata/net-virtio-teaming-network.x86_64-latest.args @@ -32,7 +32,7 @@ XDG_CONFIG_HOME=3D/var/lib/libvirt/qemu/domain--1-QEMUGue= st1/.config \ -netdev '{"type":"tap","fd":"102","vhost":true,"vhostfd":"44","id":"hostua= -backup0"}' \ -device '{"driver":"virtio-net-pci","failover":true,"netdev":"hostua-backu= p0","id":"ua-backup0","mac":"00:11:22:33:44:55","bus":"pci.0","addr":"0x2"}= ' \ -audiodev '{"id":"audio1","driver":"none"}' \ --device '{"driver":"vfio-pci","host":"0001:02:03.4","id":"hostdev0","failo= ver_pair_id":"ua-backup0","bus":"pci.0","addr":"0x3"}' \ +-device '{"driver":"vfio-pci","host":"0000:06:12.2","id":"hostdev0","failo= ver_pair_id":"ua-backup0","bus":"pci.0","addr":"0x3"}' \ -device '{"driver":"virtio-balloon-pci","id":"balloon0","bus":"pci.0","add= r":"0x4"}' \ -sandbox on,obsolete=3Ddeny,elevateprivileges=3Ddeny,spawn=3Ddeny,resource= control=3Ddeny \ -msg timestamp=3Don diff --git a/tests/virnetworkportxml2xmldata/plug-hostdev-pci.xml b/tests/v= irnetworkportxml2xmldata/plug-hostdev-pci.xml index 7354e1d48c..8b058d9244 100644 --- a/tests/virnetworkportxml2xmldata/plug-hostdev-pci.xml +++ b/tests/virnetworkportxml2xmldata/plug-hostdev-pci.xml @@ -6,6 +6,6 @@ -
+
--=20 2.52.0 From nobody Mon Mar 23 23:24:10 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1773302568; cv=none; d=zohomail.com; s=zohoarc; b=IBq+h9zCrm+fCx2hNGQCu8mAdv711HAmVXJgg1JsR67oIsTlvwDB5J4JDaByqwSUfIP/o7wUN11cRitVJZ/D/gazdWACHh99hgPTmXL/8G0sOD1xgLn6fKufoI9UmoKOehF+hzfSVINnmgLY099NlbHpgV1xi8erxinc5ErJr2o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773302568; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=7zRjASv+fOXaBcPDw/gAo158d0AnSn5aNcT8Xzo44sA=; b=EC/gGXeqSgQFq3rwThrhHA7jbwR9B41HKQHd33v0AH3qpp6Ea0IzHw19fDzGgeYHDjdfBqRx0oRoKH7pTbpZ+1hVI2s65pB+lWRauk8yXFayUOTkdpi5XWEkThAY6zn4ybLO79ZKtQL8NJzCzwIznSJY3+5lxeN83HKBsZJoHHM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1773302568131156.17673501270826; Thu, 12 Mar 2026 01:02:48 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 2525D418B1; Thu, 12 Mar 2026 04:02:47 -0400 (EDT) Received: from [172.19.199.12] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id A3C9141BE4; Thu, 12 Mar 2026 03:57:55 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id EF6C341B0C; Thu, 12 Mar 2026 03:57:50 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 02D1E3F950 for ; Thu, 12 Mar 2026 03:57:27 -0400 (EDT) Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-98-umkng8PcOJ-6lb3glKdq_A-1; Thu, 12 Mar 2026 03:57:25 -0400 Received: from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.93]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id E1F691956088 for ; Thu, 12 Mar 2026 07:57:24 +0000 (UTC) Received: from moe (unknown [10.43.3.236]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 4C2CE180066F for ; Thu, 12 Mar 2026 07:57:24 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HELO_MISC_IP,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1773302247; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=7zRjASv+fOXaBcPDw/gAo158d0AnSn5aNcT8Xzo44sA=; b=dz/kBBV3k0wTpLM+rZZ1rfWvSyMPUvljk8askITFwudbogTj0ZDhjySQjANPShQQD3QmkN aQtL/sYgOKeHM8yXbIiKphJ1K1pvYh2KBpMxshM75aTSXGKM9phBTBwahl7xKPDJxzW79u np/vg6ZP5r5O0uXOXtVoU9cCKDA2t/E= X-MC-Unique: umkng8PcOJ-6lb3glKdq_A-1 X-Mimecast-MFC-AGG-ID: umkng8PcOJ-6lb3glKdq_A_1773302245 To: devel@lists.libvirt.org Subject: [PATCH 4/5] qemuhotplugtest: Use fake drivers Date: Thu, 12 Mar 2026 08:57:13 +0100 Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.93 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: e_0T7HuxHirGQNMx4suD4Pyl_UhEguDYHQs6dLfuozk_1773302245 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: FHBXHUUXHPCFJMEYRXRCWHKQXD3TCXPB X-Message-ID-Hash: FHBXHUUXHPCFJMEYRXRCWHKQXD3TCXPB X-MailFrom: mprivozn@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Michal Privoznik via Devel Reply-To: Michal Privoznik X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1773302570277158500 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Michal Privoznik Hotplugging a device may require talking to other drivers (e.g. network), similar to when starting a domain anew (qemuxmlconftest). Register fake drivers for future benefit of the test. Signed-off-by: Michal Privoznik Reviewed-by: Laine Stump --- tests/qemuhotplugtest.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tests/qemuhotplugtest.c b/tests/qemuhotplugtest.c index 146e9e33c1..ae29f47c16 100644 --- a/tests/qemuhotplugtest.c +++ b/tests/qemuhotplugtest.c @@ -28,6 +28,7 @@ #include "testutilsqemuschema.h" #include "virhostdev.h" #include "virfile.h" +#include "qemufakedrivers.h" =20 #define LIBVIRT_QEMU_CAPSPRIV_H_ALLOW #include "qemu/qemu_capspriv.h" @@ -483,6 +484,7 @@ static int mymain(void) { int ret =3D 0; + g_autoptr(virConnect) conn =3D NULL; g_autoptr(virQEMUDriverConfig) cfg =3D NULL; g_autoptr(GHashTable) capsLatestFiles =3D testQemuGetLatestCaps(); g_autoptr(GHashTable) capsCache =3D virHashNew(virObjectUnref); @@ -499,6 +501,20 @@ mymain(void) =20 cfg =3D virQEMUDriverGetConfig(&driver); =20 + if (!(conn =3D virGetConnect())) + return EXIT_FAILURE; + + conn->secretDriver =3D testQemuGetFakeSecretDriver(); + conn->storageDriver =3D testQemuGetFakeStorageDriver(); + conn->nwfilterDriver =3D testQemuGetFakeNWFilterDriver(); + conn->networkDriver =3D testQemuGetFakeNetworkDriver(); + + virSetConnectInterface(conn); + virSetConnectNetwork(conn); + virSetConnectNWFilter(conn); + virSetConnectNodeDev(conn); + virSetConnectSecret(conn); + virSetConnectStorage(conn); virEventRegisterDefaultImpl(); =20 driver.lockManager =3D virLockManagerPluginNew("nop", "qemu", --=20 2.52.0 From nobody Mon Mar 23 23:24:10 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1773302605; cv=none; d=zohomail.com; s=zohoarc; b=abIuQrNTD3wSFPXXVS7g2tGAJ+Eku25CdmCveKQEmPU2+kmipqcu7SFgR7UvRVLTiThKrE6oJBawX/QwtOsPnzU13sDBOEUcFsrk5rZWJQ42MleY4r2dya4YX4jE6WXWl5TLSeVgQHhBfb3iLt4y+Ne44ka5PanrGQ9Li/lnOck= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773302605; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=CIRFlIn08VPrRiE+82ClC+syOKUhY50enuA8NzASAwM=; b=ZryOs8UHtZVAWuq0AvaOXhx941V09H544V36k423x6wpLPi115I2sZq7alZ/MPok9zy1Ch4bAeLv2vPj6o2tVms1QLu/i4Fs0LrTEaKiZJNzNs/aYsQsZ1ZW493zLkWPB9Hz++CxVEbg+CnI41YeWz8H+sSxWNDb6b36etfCL3E= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1773302605667424.5535437026283; Thu, 12 Mar 2026 01:03:25 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id BD88F3F95A; Thu, 12 Mar 2026 04:03:24 -0400 (EDT) Received: from [172.19.199.12] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id D495B41C7F; Thu, 12 Mar 2026 03:58:00 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 3173340474; Thu, 12 Mar 2026 03:57:56 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 4C665418DE for ; Thu, 12 Mar 2026 03:57:28 -0400 (EDT) Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-63-O7ghzdmgNZuxKHtScLkhJA-1; Thu, 12 Mar 2026 03:57:26 -0400 Received: from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.93]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id EA9C91800372 for ; Thu, 12 Mar 2026 07:57:25 +0000 (UTC) Received: from moe (unknown [10.43.3.236]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 55F6C180049D for ; Thu, 12 Mar 2026 07:57:25 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HELO_MISC_IP,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1773302247; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=CIRFlIn08VPrRiE+82ClC+syOKUhY50enuA8NzASAwM=; b=PXIpPMoLmSW/+2ErNhrAtPdW97seYhC93vYOJy/U1MUl2fl4E4x0n2qq+BYWfHlJPIkX3m /Nk2ooiMHjhSmYrIImw1Heo1N731HfOECecN2IJgWRj4GM3a970FxaqBCocUMjEUUy1LfJ Gj0PHykgzxjAMNEIOtEf0lon9bF/eE8= X-MC-Unique: O7ghzdmgNZuxKHtScLkhJA-1 X-Mimecast-MFC-AGG-ID: O7ghzdmgNZuxKHtScLkhJA_1773302246 To: devel@lists.libvirt.org Subject: [PATCH 5/5] qemuhotplug: Introduce interface-network-hostdev Date: Thu, 12 Mar 2026 08:57:14 +0100 Message-ID: <1d3ccf33263f9049bd6bcfb132b8e1fa0a9e25d6.1773302208.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.93 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: WX9VeZlgHqR21trn8xw6JM7WF-G8JN9mG6K2gaFfLs8_1773302246 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 25VUN3354ERBFQZN5HSWBC56YMKF3BX5 X-Message-ID-Hash: 25VUN3354ERBFQZN5HSWBC56YMKF3BX5 X-MailFrom: mprivozn@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Michal Privoznik via Devel Reply-To: Michal Privoznik X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1773302608538154100 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Michal Privoznik Inspired by commit of v12.1.0-37-g25662b3700. We already have a test case for , but what we are missing is where the network is of a . Apparently, we had a crasher there too. Signed-off-by: Michal Privoznik Reviewed-by: Laine Stump --- tests/qemuhotplugtest.c | 4 ++ .../qemuhotplug-interface-network-hostdev.xml | 4 ++ ...ug-base-live+interface-network-hostdev.xml | 63 +++++++++++++++++++ 3 files changed, 71 insertions(+) create mode 100644 tests/qemuhotplugtestdevices/qemuhotplug-interface-netw= ork-hostdev.xml create mode 100644 tests/qemuhotplugtestdomains/qemuhotplug-base-live+inte= rface-network-hostdev.xml diff --git a/tests/qemuhotplugtest.c b/tests/qemuhotplugtest.c index ae29f47c16..ea9d3243f8 100644 --- a/tests/qemuhotplugtest.c +++ b/tests/qemuhotplugtest.c @@ -724,6 +724,10 @@ mymain(void) "device_add", QMP_OK); DO_TEST_DETACH("x86_64", "base-live", "interface-hostdev", false, fals= e, "device_del", QMP_DEVICE_DELETED("hostdev0") QMP_OK); + DO_TEST_ATTACH("x86_64", "base-live", "interface-network-hostdev", fal= se, true, + "device_add", QMP_OK); + DO_TEST_DETACH("x86_64", "base-live", "interface-network-hostdev", fal= se, false, + "device_del", QMP_DEVICE_DELETED("hostdev0") QMP_OK); #endif DO_TEST_ATTACH("x86_64", "base-live", "interface-vdpa", false, true, "query-fdsets", "{\"return\":[{\"fdset-id\":99999}]}", diff --git a/tests/qemuhotplugtestdevices/qemuhotplug-interface-network-hos= tdev.xml b/tests/qemuhotplugtestdevices/qemuhotplug-interface-network-hostd= ev.xml new file mode 100644 index 0000000000..b4324126d8 --- /dev/null +++ b/tests/qemuhotplugtestdevices/qemuhotplug-interface-network-hostdev.xml @@ -0,0 +1,4 @@ + + + + diff --git a/tests/qemuhotplugtestdomains/qemuhotplug-base-live+interface-n= etwork-hostdev.xml b/tests/qemuhotplugtestdomains/qemuhotplug-base-live+int= erface-network-hostdev.xml new file mode 100644 index 0000000000..6775fdc3f3 --- /dev/null +++ b/tests/qemuhotplugtestdomains/qemuhotplug-base-live+interface-network-= hostdev.xml @@ -0,0 +1,63 @@ + + hotplug + d091ea82-29e6-2e34-3005-f02617b36e87 + 4194304 + 4194304 + 4 + + hvm + + + + + + + + + qemu64 + + + destroy + restart + restart + + /usr/bin/qemu-system-x86_64 + + +
+ + + +
+ + + +
+ + + + + + +
+ + + + + +
+ + +
+ + + + + + + +