[libvirt] [PATCH 05/11] tests: qemuxml2xml: Format status XML header dynamically
Michal Privoznik
mprivozn at redhat.com
Fri Jul 8 16:31:52 UTC 2016
On 07.07.2016 15:41, Peter Krempa wrote:
> Status XML tests were done by prepending a constant string to an
> existing XML. With the planned changes the header will depend on data
> present in the definition rather than just on the data that was parsed.
>
> The first dynamic element in the header will be the vcpu thread list.
> Reuse and rename qemuXML2XMLPreFormatCallback for gathering the relevant
> data when checking the active XML parsing and formating and pass the
> bitmap to a newly crated header generator.
> ---
> tests/qemuxml2xmltest.c | 72 +++++++++++++++++++++++++++++++++++++++++--------
> 1 file changed, 61 insertions(+), 11 deletions(-)
>
> diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
> index ae328c2..a672fbb 100644
> --- a/tests/qemuxml2xmltest.c
> +++ b/tests/qemuxml2xmltest.c
> @@ -33,13 +33,21 @@ struct testInfo {
> char *outActiveName;
> char *outInactiveName;
>
> + virBitmapPtr activeVcpus;
> +
> virQEMUCapsPtr qemuCaps;
> };
>
> static int
> -qemuXML2XMLPreFormatCallback(virDomainDefPtr def ATTRIBUTE_UNUSED,
> - const void *opaque ATTRIBUTE_UNUSED)
> +qemuXML2XMLActivePreFormatCallback(virDomainDefPtr def,
> + const void *opaque)
> {
> + struct testInfo *info = (struct testInfo *) opaque;
> +
> + /* store vCPU bitmap so that the status XML can be created faithfully */
> + if (!info->activeVcpus)
> + info->activeVcpus = virDomainDefGetOnlineVcpumap(def);
This won't fly, @info is never cleared, in particular, its @activeVcpus is never set so it will contain some garbage that's on the stack when we get here:
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff1d76824 in virBitmapNextSetBit (bitmap=0x432bc0 <_start>, pos=0) at util/virbitmap.c:930
930 bits = bitmap->map[nl] & ~((1UL << nb) - 1);
(gdb) bt
#0 0x00007ffff1d76824 in virBitmapNextSetBit (bitmap=0x432bc0 <_start>, pos=0) at util/virbitmap.c:930
#1 0x0000000000432e1e in testGetStatuXMLPrefixVcpus (buf=0x7fffffffd560, data=0x7fffffffd680) at qemuxml2xmltest.c:115
#2 0x0000000000432ecb in testGetStatusXMLPrefix (data=0x7fffffffd680) at qemuxml2xmltest.c:131
#3 0x0000000000433003 in testCompareStatusXMLToXMLFiles (opaque=0x7fffffffd680) at qemuxml2xmltest.c:160
#4 0x0000000000447a52 in virTestRun (title=0x55d07e "QEMU XML-2-XML-status minimal", body=0x432f14 <testCompareStatusXMLToXMLFiles>, data=0x7fffffffd680) at testutils.c:179
#5 0x000000000043375f in mymain () at qemuxml2xmltest.c:360
#6 0x0000000000449447 in virTestMain (argc=1, argv=0x7fffffffd8e8, func=0x43361c <mymain>) at testutils.c:969
#7 0x0000000000446973 in main (argc=1, argv=0x7fffffffd8e8) at qemuxml2xmltest.c:891
ACK with this squashed in:
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
index a672fbb..eb392f4 100644
--- a/tests/qemuxml2xmltest.c
+++ b/tests/qemuxml2xmltest.c
@@ -311,6 +311,8 @@ mymain(void)
struct testInfo info;
virQEMUDriverConfigPtr cfg = NULL;
+ memset(&info, 0, sizeof(info));
+
if (qemuTestDriverInit(&driver) < 0)
return EXIT_FAILURE;
Michal
More information about the libvir-list
mailing list