[libvirt] [PATCH 3/3] qemu: add unit tests for the capabilities xml

Michal Privoznik mprivozn at redhat.com
Wed Mar 26 12:48:28 UTC 2014


On 17.03.2014 16:19, Francesco Romani wrote:
> the test is loosely inspired from qemucapabilitiestest
> and qemuxml2xmltest.
>
> Added a new test instead of extending an existing one because
> the feature being tested don't really fits nicely in any
> existing place.
> ---
>   tests/Makefile.am                                  |  10 +-
>   tests/qemucaps2xmldata/all_1.6.0-1.caps            | 142 ++++++++++++++
>   tests/qemucaps2xmldata/all_1.6.0-1.xml             |  31 ++++
>   tests/qemucaps2xmldata/nodisksnapshot_1.6.0-1.caps | 141 ++++++++++++++
>   tests/qemucaps2xmldata/nodisksnapshot_1.6.0-1.xml  |  31 ++++
>   tests/qemucaps2xmltest.c                           | 206 +++++++++++++++++++++
>   6 files changed, 560 insertions(+), 1 deletion(-)
>   create mode 100644 tests/qemucaps2xmldata/all_1.6.0-1.caps
>   create mode 100644 tests/qemucaps2xmldata/all_1.6.0-1.xml
>   create mode 100644 tests/qemucaps2xmldata/nodisksnapshot_1.6.0-1.caps
>   create mode 100644 tests/qemucaps2xmldata/nodisksnapshot_1.6.0-1.xml
>   create mode 100644 tests/qemucaps2xmltest.c
>

> diff --git a/tests/qemucaps2xmltest.c b/tests/qemucaps2xmltest.c
> new file mode 100644
> index 0000000..c447af7
> --- /dev/null
> +++ b/tests/qemucaps2xmltest.c
> @@ -0,0 +1,206 @@
> +/*
> + * Copyright (C) 2014 Red Hat, Inc.
> + *
> + * This library is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2.1 of the License, or (at your option) any later version.
> + *
> + * This library is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with this library.  If not, see
> + * <http://www.gnu.org/licenses/>.
> + *
> + */

I'm adding Authors line here among with your name.

> +
> +#include <config.h>
> +
> +#include "testutils.h"
> +#include "qemu/qemu_capabilities.h"
> +
> +
> +#define VIR_FROM_THIS VIR_FROM_NONE
> +
> +
> +static int
> +testCompareXMLToXML(const char *inxmldata, const char *outxmldata)
> +{
> +    int ret = 0;
> +
> +    if (STRNEQ(outxmldata, inxmldata)) {
> +        virtTestDifference(stderr, outxmldata, inxmldata);
> +        ret = -1;
> +    }
> +
> +    return ret;
> +}

While this works, I'm changing it to match the pattern used in the rest 
of the code.

> +
> +
> +typedef struct _testQemuData testQemuData;
> +typedef testQemuData *testQemuDataPtr;
> +struct _testQemuData {
> +    const char *base;
> +    virArch guestarch;
> +};
> +
> +static virQEMUCapsPtr
> +testQemuGetCaps(char *caps)
> +{
> +    virQEMUCapsPtr qemuCaps = NULL;
> +    xmlDocPtr xml;
> +    xmlXPathContextPtr ctxt = NULL;
> +    ssize_t i, n;
> +    xmlNodePtr *nodes = NULL;
> +
> +    if (!(xml = virXMLParseStringCtxt(caps, "(test caps)", &ctxt)))
> +        goto error;
> +
> +    if ((n = virXPathNodeSet("/qemuCaps/flag", ctxt, &nodes)) < 0) {
> +        fprintf(stderr, "failed to parse qemu capabilities flags");
> +        goto error;
> +    }
> +
> +    if (n > 0) {

There's no need for this. I mean, if there's no /qemuCaps/flag the 
virXPathNodeSet() returns 0 which may be handy if we want to test empty 
capabilities.

> +        if (!(qemuCaps = virQEMUCapsNew()))
> +            goto error;
> +
> +        for (i = 0; i < n; i++) {
> +            char *str = virXMLPropString(nodes[i], "name");
> +            if (str) {
> +                int flag = virQEMUCapsTypeFromString(str);
> +                if (flag < 0) {
> +                    fprintf(stderr, "Unknown qemu capabilities flag %s", str);
> +                    VIR_FREE(str);
> +                    goto error;
> +                }
> +                VIR_FREE(str);
> +                virQEMUCapsSet(qemuCaps, flag);
> +            }
> +        }
> +    }
> +
> +    VIR_FREE(nodes);
> +    xmlFreeDoc(xml);
> +    xmlXPathFreeContext(ctxt);
> +    return qemuCaps;
> +
> +error:
> +    VIR_FREE(nodes);
> +    virObjectUnref(qemuCaps);
> +    xmlFreeDoc(xml);
> +    xmlXPathFreeContext(ctxt);
> +    return NULL;
> +}

Michal




More information about the libvir-list mailing list