From nobody Sun Feb 8 22:57:54 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) client-ip=170.10.133.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1644422635; cv=none; d=zohomail.com; s=zohoarc; b=XMHdKq40Pbi0sIR0TtqefPfEJn3fhy4J/PjCOJguA1YL39a1qBXkn4AveKUeUWerZafB3WS27cy61NBJr2yJJzLc++oitjTqzqiMiEJ7cVZxtzLs26ubO4/QsNribvh/LUKC4ocIM0ZSUe4mYbhxhE3F2SpkUo0ootcWHEkFuTQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1644422635; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=y5WULjSSHogpq4Q1KikEguQPD/eAdHQS3Fi6WLvDdjs=; b=fkRAw4pnsTXJDSWDzW6lZcEduXc9ZsS2FPXiYmpWQrSKnucAmmlc/nuziyO5ahCmCEKpeMs0FXgngaGk1iRNqueZlbEnuLIaenp7jF4ZEQ6+w0pt9UkHtfpMuUfrxjma8JLeRCmXZiIqKmxjFJ26w6JS9wiHWHcm5/hwVqOONxE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.zohomail.com with SMTPS id 164442263575256.6777906871572; Wed, 9 Feb 2022 08:03:55 -0800 (PST) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-304-6IrhDRTTPBKk95UIAHg6tg-1; Wed, 09 Feb 2022 11:03:51 -0500 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 8FB62196633B; Wed, 9 Feb 2022 16:03:11 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 6AF3F753C8; Wed, 9 Feb 2022 16:03:11 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 36EE11818462; Wed, 9 Feb 2022 16:03:11 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 219G2tUp012443 for ; Wed, 9 Feb 2022 11:02:55 -0500 Received: by smtp.corp.redhat.com (Postfix) id D6DB37DE40; Wed, 9 Feb 2022 16:02:55 +0000 (UTC) Received: from speedmetal.redhat.com (unknown [10.40.208.41]) by smtp.corp.redhat.com (Postfix) with ESMTP id 450F87DE4B for ; Wed, 9 Feb 2022 16:02:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1644422635; h=from:from:sender:sender: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:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=y5WULjSSHogpq4Q1KikEguQPD/eAdHQS3Fi6WLvDdjs=; b=CtnSn4e7tt+7JYYZaeXy6RMeV39siR2pIQ1QRcwR9CTmVnlRDJWM9MfuyxsRBMzczJaa+x f+KMBRepW7NyQiY037ovuXjfe668eY2i6CBoDDhgypE1XXIgFhOYqeGTzI3zgcbqV9BFHc zH8nUWFoa1v1sjgarKGtwx1MXz/4X5Q= X-MC-Unique: 6IrhDRTTPBKk95UIAHg6tg-1 From: Peter Krempa To: libvir-list@redhat.com Subject: [PATCH 21/27] tests: Move testPrepareHostBackendChardevOne into test utils Date: Wed, 9 Feb 2022 17:02:13 +0100 Message-Id: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1644422651589100003 Content-Type: text/plain; charset="utf-8" Move the function doing the fake setup of chardev backend for FD passing into the collection of qemu test helpers so that it can be used in qemumonitorjsontest. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- tests/qemuxml2argvtest.c | 93 +--------------------------------- tests/testutilsqemu.c | 106 +++++++++++++++++++++++++++++++++++++++ tests/testutilsqemu.h | 3 ++ 3 files changed, 111 insertions(+), 91 deletions(-) diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index d4e518e3a1..1e1d9ee9a1 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -378,95 +378,6 @@ testCheckExclusiveFlags(int flags) } -static int -testPrepareHostBackendChardevOne(virDomainDeviceDef *dev, - virDomainChrSourceDef *chardev, - void *opaque) -{ - virDomainObj *vm =3D opaque; - qemuDomainObjPrivate *priv =3D vm->privateData; - qemuDomainChrSourcePrivate *charpriv =3D QEMU_DOMAIN_CHR_SOURCE_PRIVAT= E(chardev); - int fakesourcefd =3D -1; - const char *devalias =3D NULL; - bool usefdset =3D true; - - if (dev) { - virDomainDeviceInfo *info =3D virDomainDeviceGetInfo(dev); - devalias =3D info->alias; - - /* vhost-user disk doesn't use FD passing */ - if (dev->type =3D=3D VIR_DOMAIN_DEVICE_DISK) - return 0; - - if (dev->type =3D=3D VIR_DOMAIN_DEVICE_NET) { - /* due to a historical bug in qemu we don't use FD passtrhough= for - * vhost-sockets for network devices */ - return 0; - } - - /* TPMs FD passing setup is special and handled separately */ - if (dev->type =3D=3D VIR_DOMAIN_DEVICE_TPM) - return 0; - } else { - devalias =3D "monitor"; - } - - switch ((virDomainChrType) chardev->type) { - case VIR_DOMAIN_CHR_TYPE_NULL: - case VIR_DOMAIN_CHR_TYPE_VC: - case VIR_DOMAIN_CHR_TYPE_PTY: - case VIR_DOMAIN_CHR_TYPE_DEV: - case VIR_DOMAIN_CHR_TYPE_PIPE: - case VIR_DOMAIN_CHR_TYPE_STDIO: - case VIR_DOMAIN_CHR_TYPE_UDP: - case VIR_DOMAIN_CHR_TYPE_TCP: - case VIR_DOMAIN_CHR_TYPE_SPICEVMC: - case VIR_DOMAIN_CHR_TYPE_SPICEPORT: - break; - - case VIR_DOMAIN_CHR_TYPE_FILE: - fakesourcefd =3D 1750; - break; - - case VIR_DOMAIN_CHR_TYPE_UNIX: - if (chardev->data.nix.listen && - virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_CHARDEV_FD_PASS_COMMA= NDLINE)) - fakesourcefd =3D 1729; - - usefdset =3D false; - break; - - case VIR_DOMAIN_CHR_TYPE_NMDM: - case VIR_DOMAIN_CHR_TYPE_LAST: - break; - } - - if (fakesourcefd !=3D -1) { - if (fcntl(fakesourcefd, F_GETFD) !=3D -1) - abort(); - - charpriv->sourcefd =3D qemuFDPassNew(devalias, priv, usefdset); - - if (qemuFDPassAddFD(charpriv->sourcefd, &fakesourcefd, "-source") = < 0) - return -1; - } - - if (chardev->logfile) { - int fd =3D 1751; - - if (fcntl(fd, F_GETFD) !=3D -1) - abort(); - - charpriv->logfd =3D qemuFDPassNew(devalias, priv, true); - - if (qemuFDPassAddFD(charpriv->logfd, &fd, "-log") < 0) - return -1; - } - - return 0; -} - - static virCommand * testCompareXMLToArgvCreateArgs(virQEMUDriver *drv, virDomainObj *vm, @@ -483,11 +394,11 @@ testCompareXMLToArgvCreateArgs(virQEMUDriver *drv, return NULL; if (qemuDomainDeviceBackendChardevForeach(vm->def, - testPrepareHostBackendCharde= vOne, + testQemuPrepareHostBackendCh= ardevOne, vm) < 0) return NULL; - if (testPrepareHostBackendChardevOne(NULL, priv->monConfig, vm) < 0) + if (testQemuPrepareHostBackendChardevOne(NULL, priv->monConfig, vm) < = 0) return NULL; for (i =3D 0; i < vm->def->ndisks; i++) { diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c index 646ef415d1..c156a89413 100644 --- a/tests/testutilsqemu.c +++ b/tests/testutilsqemu.c @@ -13,6 +13,9 @@ # include "virstring.h" # include "virfilecache.h" +# include +# include + # define VIR_FROM_THIS VIR_FROM_QEMU virCPUDef *cpuDefault; @@ -979,3 +982,106 @@ testQemuInfoClear(struct testQemuInfo *info) virObjectUnref(info->qemuCaps); g_clear_pointer(&info->args.fakeCaps, virObjectUnref); } + + +/** + * testQemuPrepareHostBackendChardevOne: + * @dev: device definition object + * @chardev: chardev source object + * @opaque: Caller is expected to pass pointer to virDomainObj or NULL + * + * This helper sets up a chardev source backend for FD passing with fake + * file descriptros. It's expected to be used as callback for + * 'qemuDomainDeviceBackendChardevForeach', thus the VM object is passed v= ia + * @opaque. Callers may pass NULL if the test scope is limited. + */ +int +testQemuPrepareHostBackendChardevOne(virDomainDeviceDef *dev, + virDomainChrSourceDef *chardev, + void *opaque) +{ + virDomainObj *vm =3D opaque; + qemuDomainObjPrivate *priv =3D NULL; + qemuDomainChrSourcePrivate *charpriv =3D QEMU_DOMAIN_CHR_SOURCE_PRIVAT= E(chardev); + int fakesourcefd =3D -1; + const char *devalias =3D NULL; + bool usefdset =3D true; + + if (vm) + priv =3D vm->privateData; + + if (dev) { + virDomainDeviceInfo *info =3D virDomainDeviceGetInfo(dev); + devalias =3D info->alias; + + /* vhost-user disk doesn't use FD passing */ + if (dev->type =3D=3D VIR_DOMAIN_DEVICE_DISK) + return 0; + + if (dev->type =3D=3D VIR_DOMAIN_DEVICE_NET) { + /* due to a historical bug in qemu we don't use FD passtrhough= for + * vhost-sockets for network devices */ + return 0; + } + + /* TPMs FD passing setup is special and handled separately */ + if (dev->type =3D=3D VIR_DOMAIN_DEVICE_TPM) + return 0; + } else { + devalias =3D "monitor"; + } + + switch ((virDomainChrType) chardev->type) { + case VIR_DOMAIN_CHR_TYPE_NULL: + case VIR_DOMAIN_CHR_TYPE_VC: + case VIR_DOMAIN_CHR_TYPE_PTY: + case VIR_DOMAIN_CHR_TYPE_DEV: + case VIR_DOMAIN_CHR_TYPE_PIPE: + case VIR_DOMAIN_CHR_TYPE_STDIO: + case VIR_DOMAIN_CHR_TYPE_UDP: + case VIR_DOMAIN_CHR_TYPE_TCP: + case VIR_DOMAIN_CHR_TYPE_SPICEVMC: + case VIR_DOMAIN_CHR_TYPE_SPICEPORT: + break; + + case VIR_DOMAIN_CHR_TYPE_FILE: + fakesourcefd =3D 1750; + break; + + case VIR_DOMAIN_CHR_TYPE_UNIX: + if (chardev->data.nix.listen && + virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_CHARDEV_FD_PASS_COMMA= NDLINE)) + fakesourcefd =3D 1729; + + usefdset =3D false; + break; + + case VIR_DOMAIN_CHR_TYPE_NMDM: + case VIR_DOMAIN_CHR_TYPE_LAST: + break; + } + + if (fakesourcefd !=3D -1) { + if (fcntl(fakesourcefd, F_GETFD) !=3D -1) + abort(); + + charpriv->sourcefd =3D qemuFDPassNew(devalias, priv, usefdset); + + if (qemuFDPassAddFD(charpriv->sourcefd, &fakesourcefd, "-source") = < 0) + return -1; + } + + if (chardev->logfile) { + int fd =3D 1751; + + if (fcntl(fd, F_GETFD) !=3D -1) + abort(); + + charpriv->logfd =3D qemuFDPassNew(devalias, priv, true); + + if (qemuFDPassAddFD(charpriv->logfd, &fd, "-log") < 0) + return -1; + } + + return 0; +} diff --git a/tests/testutilsqemu.h b/tests/testutilsqemu.h index 51139e6a97..187f9b7cd3 100644 --- a/tests/testutilsqemu.h +++ b/tests/testutilsqemu.h @@ -143,4 +143,7 @@ void testQemuInfoSetArgs(struct testQemuInfo *info, int testQemuInfoInitArgs(struct testQemuInfo *info); void testQemuInfoClear(struct testQemuInfo *info); +int testQemuPrepareHostBackendChardevOne(virDomainDeviceDef *dev, + virDomainChrSourceDef *chardev, + void *opaque); #endif --=20 2.34.1