From nobody Mon Apr 29 01:03:02 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zoho.com; dkim=fail spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 148990356748035.29946554628691; Sat, 18 Mar 2017 23:06:07 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 2A3F53DBDA; Sun, 19 Mar 2017 06:06:06 +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 041595DC1D; Sun, 19 Mar 2017 06:06:06 +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 02A651853D0F; Sun, 19 Mar 2017 06:06:01 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v2J65xLv015117 for ; Sun, 19 Mar 2017 02:05:59 -0400 Received: by smtp.corp.redhat.com (Postfix) id B397717B94; Sun, 19 Mar 2017 06:05:59 +0000 (UTC) Received: from mx1.redhat.com (ext-mx06.extmail.prod.ext.phx2.redhat.com [10.5.110.30]) by smtp.corp.redhat.com (Postfix) with ESMTPS id AA83F17C2D for ; Sun, 19 Mar 2017 06:05:58 +0000 (UTC) Received: from mail-lf0-f51.google.com (mail-lf0-f51.google.com [209.85.215.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 4804541A4C for ; Sun, 19 Mar 2017 06:05:56 +0000 (UTC) Received: by mail-lf0-f51.google.com with SMTP id z15so45459805lfd.1 for ; Sat, 18 Mar 2017 23:05:55 -0700 (PDT) Received: from kloomba.my.domain ([95.104.129.19]) by smtp.gmail.com with ESMTPSA id l2sm2288317lfe.69.2017.03.18.23.05.52 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 18 Mar 2017 23:05:52 -0700 (PDT) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 2A3F53DBDA Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 2A3F53DBDA Authentication-Results: mx1.redhat.com; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="BDXBxtD+" DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 4804541A4C Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=bogorodskiy@gmail.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 4804541A4C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=0cAXUv14duyw2sz8882v2XqMA7NN8IU07vElfjbjE9c=; b=BDXBxtD+Fq8XdyJLsdWCTcNXG3Y3+VQAA7QhY80twsQ3GCfkiTAKmNdSpb0ym/rhsH ulMJM/xt6t0SP9ILGCuLKzePvrQ+0Kpv+PPzmqic1ff9+0h5SOor5r8h3+Kphj4unSbQ xcutPqtQ+F6cV8voV/QgjjZJl1cWPUUUE/f5zZ6nCuwMDHroylv1jG6BWbVdcAoGC2QV SYGJsc0J8LvUoPsCGlIjyd1b99C/SIFSgfrst+c2n8qnFCMg7B255bemhTMC9EJVA+Of ejKlmNhQO9HZM3G+Fu4xkGW3JXYSbbsU1pm+yvdDFoELBKefcSU1G1o7yMqZ3RRjVU6f CoWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=0cAXUv14duyw2sz8882v2XqMA7NN8IU07vElfjbjE9c=; b=r3WhPaoy4qjTQzwGgYwA4Nf6QBXx3A0k0HDsZaHIBBpPlJC7fsg0m7g4XXixhI2bD6 5dTvoWHWacf1dFX8f7v7NV+haSevYP9F/FWSpL4IHOkro0p9W9SRUA2ycfSgn3MFf4Bu 8NgQbHS7s0y40U+iBnXGpBSQ1deYZOgYQnFCXUtg/avcarZWwrR/2FU+t/QNMtPLHBQR 7zarWrt/kSxJ6Egm85CUM7hAJz6duWTITnkn5redlIHbxWl2H0lkhvcH+CrEhWUKNyU2 hFaCYTU8XynbubTgMD3HAwEIPIxvL5WSLcVtawGmOjreUdVkgmgpJOmWARb+ZPRNFbJ3 ybbw== X-Gm-Message-State: AFeK/H0CNjrGRQDur6Sk7UDG6yjP/xNYvbE9sJSNCeZ3yIFM4TaIt7TWidl8VSNbixnxTw== X-Received: by 10.25.25.207 with SMTP id 198mr6149150lfz.1.1489903553687; Sat, 18 Mar 2017 23:05:53 -0700 (PDT) From: Roman Bogorodskiy To: libvir-list@redhat.com Date: Sun, 19 Mar 2017 10:05:46 +0400 Message-Id: <20170319060546.45178-1-bogorodskiy@gmail.com> X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Sun, 19 Mar 2017 06:05:57 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Sun, 19 Mar 2017 06:05:57 +0000 (UTC) for IP:'209.85.215.51' DOMAIN:'mail-lf0-f51.google.com' HELO:'mail-lf0-f51.google.com' FROM:'bogorodskiy@gmail.com' RCPT:'' X-RedHat-Spam-Score: 0.77 (BAYES_50, DCC_REPUT_00_12, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, RCVD_IN_SORBS_SPAM, SPF_PASS) 209.85.215.51 mail-lf0-f51.google.com 209.85.215.51 mail-lf0-f51.google.com X-Scanned-By: MIMEDefang 2.78 on 10.5.110.30 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: libvir-list@redhat.com Cc: Roman Bogorodskiy Subject: [libvirt] [PATCH] domaincapstest: add bhyve caps test 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: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Sun, 19 Mar 2017 06:06:06 +0000 (UTC) X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" * Extract filling bhyve capabilities from virBhyveDomainCapsBuild() into a new function virBhyveDomainCapsFill() to make testing easier by not having to mock firmware directory listing and hypervisor capabilities probing * Also, just presence of the firmware files is not sufficient to enable os.loader.supported, hypervisor should support UEFI boot too * Add tests to domaincapstest for the main caps possible flows: - when UEFI bootrom is supported - when video (fbus) is supported - neither of above is supported --- src/bhyve/bhyve_capabilities.c | 72 +++++++++++++++----= ---- src/bhyve/bhyve_capabilities.h | 3 + tests/Makefile.am | 4 ++ tests/domaincapsschemadata/bhyve_basic.x86_64.xml | 32 ++++++++++ tests/domaincapsschemadata/bhyve_fbuf.x86_64.xml | 49 +++++++++++++++ tests/domaincapsschemadata/bhyve_uefi.x86_64.xml | 41 +++++++++++++ tests/domaincapstest.c | 65 ++++++++++++++++++++ 7 files changed, 242 insertions(+), 24 deletions(-) create mode 100644 tests/domaincapsschemadata/bhyve_basic.x86_64.xml create mode 100644 tests/domaincapsschemadata/bhyve_fbuf.x86_64.xml create mode 100644 tests/domaincapsschemadata/bhyve_uefi.x86_64.xml diff --git a/src/bhyve/bhyve_capabilities.c b/src/bhyve/bhyve_capabilities.c index 4bf1d84fa..6f8be45c4 100644 --- a/src/bhyve/bhyve_capabilities.c +++ b/src/bhyve/bhyve_capabilities.c @@ -87,6 +87,44 @@ virBhyveCapsBuild(void) return NULL; } =20 +int +virBhyveDomainCapsFill(virDomainCapsPtr caps, + unsigned int bhyvecaps, + virDomainCapsStringValuesPtr firmwares) +{ + caps->disk.supported =3D true; + VIR_DOMAIN_CAPS_ENUM_SET(caps->disk.diskDevice, + VIR_DOMAIN_DISK_DEVICE_DISK, + VIR_DOMAIN_DISK_DEVICE_CDROM); + + VIR_DOMAIN_CAPS_ENUM_SET(caps->disk.bus, + VIR_DOMAIN_DISK_BUS_SATA, + VIR_DOMAIN_DISK_BUS_VIRTIO); + + caps->os.supported =3D true; + + if (bhyvecaps & BHYVE_CAP_LPC_BOOTROM) { + caps->os.loader.supported =3D true; + VIR_DOMAIN_CAPS_ENUM_SET(caps->os.loader.type, + VIR_DOMAIN_LOADER_TYPE_PFLASH); + VIR_DOMAIN_CAPS_ENUM_SET(caps->os.loader.readonly, + VIR_TRISTATE_BOOL_YES); + + caps->os.loader.values.values =3D firmwares->values; + caps->os.loader.values.nvalues =3D firmwares->nvalues; + } + + + if (bhyvecaps & BHYVE_CAP_FBUF) { + caps->graphics.supported =3D true; + caps->video.supported =3D true; + VIR_DOMAIN_CAPS_ENUM_SET(caps->graphics.type, VIR_DOMAIN_GRAPHICS_= TYPE_VNC); + VIR_DOMAIN_CAPS_ENUM_SET(caps->video.modelType, VIR_DOMAIN_VIDEO_T= YPE_GOP); + } + return 0; +} + + virDomainCapsPtr virBhyveDomainCapsBuild(bhyveConnPtr conn, const char *emulatorbin, @@ -101,6 +139,7 @@ virBhyveDomainCapsBuild(bhyveConnPtr conn, size_t firmwares_alloc =3D 0; virBhyveDriverConfigPtr cfg =3D virBhyveDriverGetConfig(conn); const char *firmware_dir =3D cfg->firmwareDir; + virDomainCapsStringValuesPtr firmwares =3D NULL; =20 if (!(caps =3D virDomainCapsNew(emulatorbin, machine, arch, virttype))) goto cleanup; @@ -111,46 +150,31 @@ virBhyveDomainCapsBuild(bhyveConnPtr conn, goto cleanup; } =20 - caps->os.supported =3D true; - caps->os.loader.supported =3D true; - VIR_DOMAIN_CAPS_ENUM_SET(caps->os.loader.type, - VIR_DOMAIN_LOADER_TYPE_PFLASH); - VIR_DOMAIN_CAPS_ENUM_SET(caps->os.loader.readonly, - VIR_TRISTATE_BOOL_YES); + if (VIR_ALLOC(firmwares) < 0) + goto cleanup; =20 if (virDirOpenIfExists(&dir, firmware_dir) > 0) { while ((virDirRead(dir, &entry, firmware_dir)) > 0) { - if (VIR_RESIZE_N(caps->os.loader.values.values, - firmwares_alloc, caps->os.loader.values.nvalues, 2) < 0) + if (VIR_RESIZE_N(firmwares->values, + firmwares_alloc, firmwares->nvalues, 1) < 0) goto cleanup; =20 if (virAsprintf( - &caps->os.loader.values.values[caps->os.loader.values.= nvalues], + &firmwares->values[firmwares->nvalues], "%s/%s", firmware_dir, entry->d_name) < 0) goto cleanup; =20 - caps->os.loader.values.nvalues++; + firmwares->nvalues++; } } else { VIR_WARN("Cannot open firmware directory %s", firmware_dir); } =20 - caps->disk.supported =3D true; - VIR_DOMAIN_CAPS_ENUM_SET(caps->disk.diskDevice, - VIR_DOMAIN_DISK_DEVICE_DISK, - VIR_DOMAIN_DISK_DEVICE_CDROM); - - VIR_DOMAIN_CAPS_ENUM_SET(caps->disk.bus, - VIR_DOMAIN_DISK_BUS_SATA, - VIR_DOMAIN_DISK_BUS_VIRTIO); + if (virBhyveDomainCapsFill(caps, bhyve_caps, firmwares) < 0) + goto cleanup; =20 - if (bhyve_caps & BHYVE_CAP_FBUF) { - caps->graphics.supported =3D true; - caps->video.supported =3D true; - VIR_DOMAIN_CAPS_ENUM_SET(caps->graphics.type, VIR_DOMAIN_GRAPHICS_= TYPE_VNC); - VIR_DOMAIN_CAPS_ENUM_SET(caps->video.modelType, VIR_DOMAIN_VIDEO_T= YPE_GOP); - } cleanup: + VIR_FREE(firmwares); VIR_DIR_CLOSE(dir); virObjectUnref(cfg); return caps; diff --git a/src/bhyve/bhyve_capabilities.h b/src/bhyve/bhyve_capabilities.h index 3db4f1b88..194061fde 100644 --- a/src/bhyve/bhyve_capabilities.h +++ b/src/bhyve/bhyve_capabilities.h @@ -28,6 +28,9 @@ # include "bhyve_utils.h" =20 virCapsPtr virBhyveCapsBuild(void); +int virBhyveDomainCapsFill(virDomainCapsPtr caps, + unsigned int bhyvecaps, + virDomainCapsStringValuesPtr firmwares); virDomainCapsPtr virBhyveDomainCapsBuild(bhyveConnPtr, const char *emulatorbin, const char *machine, diff --git a/tests/Makefile.am b/tests/Makefile.am index af69a3a84..d4eedaf17 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -964,6 +964,10 @@ domaincapstest_SOURCES +=3D testutilsxen.c testutilsxe= n.h domaincapstest_LDADD +=3D ../src/libvirt_driver_libxl_impl.la $(GNULIB_LIB= S) endif WITH_LIBXL =20 +if WITH_BHYVE +domaincapstest_LDADD +=3D ../src/libvirt_driver_bhyve_impl.la $(GNULIB_LIB= S) +endif WITH_BHYVE + virnetmessagetest_SOURCES =3D \ virnetmessagetest.c testutils.h testutils.c virnetmessagetest_CFLAGS =3D $(XDR_CFLAGS) $(AM_CFLAGS) diff --git a/tests/domaincapsschemadata/bhyve_basic.x86_64.xml b/tests/doma= incapsschemadata/bhyve_basic.x86_64.xml new file mode 100644 index 000000000..f6dfabed2 --- /dev/null +++ b/tests/domaincapsschemadata/bhyve_basic.x86_64.xml @@ -0,0 +1,32 @@ + + /usr/sbin/bhyve + bhyve + (null) + x86_64 + + + + + + + + + + + + disk + cdrom + + + virtio + sata + + + + + + + + diff --git a/tests/domaincapsschemadata/bhyve_fbuf.x86_64.xml b/tests/domai= ncapsschemadata/bhyve_fbuf.x86_64.xml new file mode 100644 index 000000000..6fec72c89 --- /dev/null +++ b/tests/domaincapsschemadata/bhyve_fbuf.x86_64.xml @@ -0,0 +1,49 @@ + + /usr/sbin/bhyve + bhyve + (null) + x86_64 + + + /foo/bar + /foo/baz + + pflash + + + yes + + + + + + + + + + + + disk + cdrom + + + virtio + sata + + + + + vnc + + + + + + + + + diff --git a/tests/domaincapsschemadata/bhyve_uefi.x86_64.xml b/tests/domai= ncapsschemadata/bhyve_uefi.x86_64.xml new file mode 100644 index 000000000..c0b5c161b --- /dev/null +++ b/tests/domaincapsschemadata/bhyve_uefi.x86_64.xml @@ -0,0 +1,41 @@ + + /usr/sbin/bhyve + bhyve + (null) + x86_64 + + + /foo/bar + /foo/baz + + pflash + + + yes + + + + + + + + + + + + disk + cdrom + + + virtio + sata + + + + + + + + diff --git a/tests/domaincapstest.c b/tests/domaincapstest.c index a4bc8d6d0..c61a5c05f 100644 --- a/tests/domaincapstest.c +++ b/tests/domaincapstest.c @@ -273,12 +273,37 @@ fillXenCaps(virDomainCapsPtr domCaps) } #endif /* WITH_LIBXL */ =20 +#ifdef WITH_BHYVE +# include "bhyve/bhyve_capabilities.h" + +static int +fillBhyveCaps(virDomainCapsPtr domCaps, unsigned int *bhyve_caps) +{ + virDomainCapsStringValuesPtr firmwares =3D NULL; + int ret =3D -1; + + if (VIR_ALLOC(firmwares) < 0) + return -1; + + if (fillStringValues(firmwares, "/foo/bar", "/foo/baz", NULL) < 0) + goto cleanup; + + if (virBhyveDomainCapsFill(domCaps, *bhyve_caps, firmwares) < 0) + goto cleanup; + + ret =3D 0; + cleanup: + VIR_FREE(firmwares); + return ret; +} +#endif /* WITH_BHYVE */ =20 enum testCapsType { CAPS_NONE, CAPS_ALL, CAPS_QEMU, CAPS_LIBXL, + CAPS_BHYVE, }; =20 struct testData { @@ -333,6 +358,12 @@ test_virDomainCapsFormat(const void *opaque) goto cleanup; #endif break; + case CAPS_BHYVE: +#if WITH_BHYVE + if (fillBhyveCaps(domCaps, data->capsOpaque) < 0) + goto cleanup; +#endif + break; } =20 if (!(domCapsXML =3D virDomainCapsFormat(domCaps))) @@ -354,6 +385,10 @@ mymain(void) { int ret =3D 0; =20 +#if WITH_BHYVE + unsigned int bhyve_caps =3D 0; +#endif + #if WITH_QEMU virQEMUDriverConfigPtr cfg =3D virQEMUDriverConfigNew(false); =20 @@ -419,6 +454,26 @@ mymain(void) DO_TEST("full", "/bin/emulatorbin", "my-machine-type", "x86_64", VIR_DOMAIN_VIRT_KVM, CAPS_ALL); =20 +#define DO_TEST_BHYVE(Name, Emulator, BhyveCaps, Type) \ + do { \ + char *name =3D NULL; \ + if (virAsprintf(&name, "bhyve_%s.x86_64", Name) < 0) { \ + ret =3D -1; \ + break; \ + } \ + struct testData data =3D { \ + .name =3D name, \ + .emulator =3D Emulator, \ + .arch =3D "x86_64", \ + .type =3D Type, \ + .capsType =3D CAPS_BHYVE, \ + .capsOpaque =3D BhyveCaps, \ + }; \ + if (virTestRun(name, test_virDomainCapsFormat, &data) < 0) \ + ret =3D -1; \ + VIR_FREE(name); \ + } while (0) + #if WITH_QEMU =20 DO_TEST_QEMU("1.7.0", "caps_1.7.0", @@ -488,6 +543,16 @@ mymain(void) =20 #endif /* WITH_LIBXL */ =20 +#if WITH_BHYVE + DO_TEST_BHYVE("basic", "/usr/sbin/bhyve", &bhyve_caps, VIR_DOMAIN_VIRT= _BHYVE); + + bhyve_caps |=3D BHYVE_CAP_LPC_BOOTROM; + DO_TEST_BHYVE("uefi", "/usr/sbin/bhyve", &bhyve_caps, VIR_DOMAIN_VIRT_= BHYVE); + + bhyve_caps |=3D BHYVE_CAP_FBUF; + DO_TEST_BHYVE("fbuf", "/usr/sbin/bhyve", &bhyve_caps, VIR_DOMAIN_VIRT_= BHYVE); +#endif /* WITH_BHYVE */ + return ret; } =20 --=20 2.11.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list