[libvirt] [PATCH] 3/3 Add netcf XML validation and input and output tests

Daniel P. Berrange berrange at redhat.com
Wed Jul 15 10:24:59 UTC 2009


On Wed, Jul 15, 2009 at 11:20:00AM +0200, Daniel Veillard wrote:
>   Basic stuff similar to other tests, first we verify the input tests
> all conform to the provided schemas, then for each test we parse and
> reserialize verifying the output is identical.

ACK, good stuff.

> 
> Daniel
> 
> -- 
> Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
> daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
> http://veillard.com/ | virtualization library  http://libvirt.org/

> diff --git a/tests/.gitignore b/tests/.gitignore
> index 7a4d44f..466ec13 100644
> --- a/tests/.gitignore
> +++ b/tests/.gitignore
> @@ -14,6 +14,7 @@ qemuxml2argvtest
>  qemuargv2xmltest
>  qemuhelptest
>  nodedevxml2xmltest
> +interfacexml2xmltest
>  nodeinfotest
>  statstest
>  qparamtest
> diff --git a/tests/Makefile.am b/tests/Makefile.am
> index f8bde34..efd7c6e 100644
> --- a/tests/Makefile.am
> +++ b/tests/Makefile.am
> @@ -82,8 +82,11 @@ endif
>  
>  noinst_PROGRAMS += nodedevxml2xmltest
>  
> +noinst_PROGRAMS += interfacexml2xmltest
> +
>  test_scripts = \
>  	capabilityschematest \
> +	interfaceschematest \
>  	networkschematest \
>  	storagepoolschematest \
>  	storagevolschematest \
> @@ -141,6 +144,8 @@ endif
>  
>  TESTS += nodedevxml2xmltest
>  
> +TESTS += interfacexml2xmltest
> +
>  path_add = $$abs_top_builddir/src$(PATH_SEPARATOR)$$abs_top_builddir/qemud
>  
>  # NB, automake < 1.10 does not provide the real
> @@ -219,6 +224,11 @@ nodedevxml2xmltest_SOURCES = \
>  	testutils.c testutils.h
>  nodedevxml2xmltest_LDADD = $(LDADDS)
>  
> +interfacexml2xmltest_SOURCES = \
> +	interfacexml2xmltest.c \
> +	testutils.c testutils.h
> +interfacexml2xmltest_LDADD = $(LDADDS)
> +
>  virshtest_SOURCES = \
>  	virshtest.c \
>  	testutils.c testutils.h
> diff --git a/tests/interfaceschematest b/tests/interfaceschematest
> new file mode 100755
> index 0000000..3e4105c
> --- /dev/null
> +++ b/tests/interfaceschematest
> @@ -0,0 +1,33 @@
> +#!/bin/sh
> +
> +test -z "$srcdir" && srcdir=`pwd`
> +test -z "$abs_srcdir" && abs_srcdir=`pwd`
> +
> +DIRS="interfaceschemadata"
> +
> +n=0
> +f=0
> +for dir in $DIRS
> +do
> +  XML=`find $abs_srcdir/$dir -name '*.xml'` || exit 1
> +
> +  for xml in $XML
> +  do
> +    n=`expr $n + 1`
> +    printf "%4d) %.60s  " $n $(basename $(dirname $xml))"/"$(basename $xml)
> +    result=`xmllint --relaxng $srcdir/../docs/schemas/interface.rng --noout $xml 2>&1`
> +    ret=$?
> +    if test $ret = 0; then
> +        echo "OK"
> +    else
> +        echo "FAILED"
> +        echo $result
> +        f=`expr $f + 1`
> +    fi
> +  done
> +done
> +echo "Validated $n files, $f failed"
> +
> +ret=0
> +test $f != 0 && ret=255
> +exit $ret
> diff --git a/tests/interfacexml2xmltest.c b/tests/interfacexml2xmltest.c
> new file mode 100644
> index 0000000..6e6c5e8
> --- /dev/null
> +++ b/tests/interfacexml2xmltest.c
> @@ -0,0 +1,97 @@
> +#include <config.h>
> +
> +#include <stdio.h>
> +#include <stdlib.h>
> +#include <unistd.h>
> +#include <string.h>
> +
> +#include <sys/types.h>
> +#include <fcntl.h>
> +
> +#include "internal.h"
> +#include "testutils.h"
> +#include "interface_conf.h"
> +#include "testutilsqemu.h"
> +
> +static char *progname;
> +static char *abs_srcdir;
> +
> +#define MAX_FILE 4096
> +
> +
> +static int testCompareXMLToXMLFiles(const char *xml) {
> +    char xmlData[MAX_FILE];
> +    char *xmlPtr = &(xmlData[0]);
> +    char *actual = NULL;
> +    int ret = -1;
> +    virInterfaceDefPtr dev = NULL;
> +
> +    if (virtTestLoadFile(xml, &xmlPtr, MAX_FILE) < 0)
> +        goto fail;
> +
> +    if (!(dev = virInterfaceDefParseString(NULL, xmlData)))
> +        goto fail;
> +
> +    if (!(actual = virInterfaceDefFormat(NULL, dev)))
> +        goto fail;
> +
> +    if (STRNEQ(xmlData, actual)) {
> +        virtTestDifference(stderr, xmlData, actual);
> +        goto fail;
> +    }
> +
> +    ret = 0;
> +
> + fail:
> +    if (ret != 0)
> +        fprintf(stderr, "expected: -------\n%s", actual);


BTW, you don't need this fprintf when using virtTestDifference.
If you set VIR_TEST_DEBUG=2 then it will print out the full
XML being compared automatically :-)

Daniel
-- 
|: Red Hat, Engineering, London   -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org  -o-  http://virt-manager.org  -o-  http://ovirt.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-  F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|




More information about the libvir-list mailing list