On Wed, Jun 10, 2009 at 09:02:41PM +0100, Mark McLoughlin wrote:
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 621a0be..3d98d69 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -61,7 +61,7 @@ noinst_PROGRAMS += xml2sexprtest sexpr2xmltest \
reconnect xmconfigtest xencapstest
endif
if WITH_QEMU
-noinst_PROGRAMS += qemuxml2argvtest qemuxml2xmltest qemuargv2xmltest
+noinst_PROGRAMS += qemuxml2argvtest qemuxml2xmltest qemuargv2xmltest qemuhelptest
endif
if WITH_SECDRIVER_SELINUX
@@ -119,7 +119,7 @@ endif
endif
if WITH_QEMU
-TESTS += qemuxml2argvtest qemuxml2xmltest qemuargv2xmltest
+TESTS += qemuxml2argvtest qemuxml2xmltest qemuargv2xmltest qemuhelptest
endif
The test program is only built if WITH_QEMU is defined, so ...
diff --git a/tests/qemuhelptest.c b/tests/qemuhelptest.c
new file mode 100644
index 0000000..836010f
--- /dev/null
+++ b/tests/qemuhelptest.c
@@ -0,0 +1,107 @@
+#include <config.h>
+
+#ifdef WITH_QEMU
....this source file conditional is redundant.
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "testutils.h"
+#include "qemu_conf.h"
+
+#define MAX_HELP_OUTPUT_SIZE 1024*64
+
+struct testInfo {
+ const char *name;
+ unsigned flags;
+ unsigned version;
+ unsigned is_kvm;
+ unsigned kvm_version;
+};
+
+static char *progname;
+static char *abs_srcdir;
+
+static int testHelpStrParsing(const void *data)
+{
+ const struct testInfo *info = data;
+ char path[PATH_MAX];
+ char helpStr[MAX_HELP_OUTPUT_SIZE];
+ char *help = &(helpStr[0]);
+ unsigned flags, version, is_kvm, kvm_version;
+
+ snprintf(path, PATH_MAX, "%s/qemuhelpdata/%s", abs_srcdir,
info->name);
+
+ if (virtTestLoadFile(path, &help, MAX_HELP_OUTPUT_SIZE) < 0)
+ return -1;
+
+ if (qemudParseHelpStr(help, &flags, &version, &is_kvm, &kvm_version)
== -1)
+ return -1;
+
+ if (flags != info->flags) {
+ fprintf(stderr, "Computed flags do not match: got 0x%x, expected
0x%x\n",
+ flags, info->flags);
+ return -1;
+ }
+
+ if (version != info->version) {
+ fprintf(stderr, "Parsed versions do not match: got %u, expected
%u\n",
+ version, info->version);
+ return -1;
+ }
+
+ if (is_kvm != info->is_kvm) {
+ fprintf(stderr, "Parsed is_kvm flag does not match: got %u, expected
%u\n",
+ is_kvm, info->is_kvm);
+ return -1;
+ }
+
+ if (kvm_version != kvm_version) {
+ fprintf(stderr, "Parsed KVM versions do not match: got %u, expected
%u\n",
+ version, kvm_version);
+ return -1;
+ }
+
+ return 0;
+}
+
+static int
+mymain(int argc, char **argv)
+{
+ int ret = 0;
+ char cwd[PATH_MAX];
+
+ progname = argv[0];
+
+ if (argc > 1) {
+ fprintf(stderr, "Usage: %s\n", progname);
+ return (EXIT_FAILURE);
+ }
+
+ abs_srcdir = getenv("abs_srcdir");
+ if (!abs_srcdir)
+ abs_srcdir = getcwd(cwd, sizeof(cwd));
+
+#define DO_TEST(name, flags, version, is_kvm, kvm_version) \
+ do { \
+ const struct testInfo info = { name, flags, version, is_kvm, kvm_version }; \
+ if (virtTestRun("QEMU Help String Parsing " name,
\
+ 1, testHelpStrParsing, &info) < 0)
\
+ ret = -1; \
+ } while (0)
+
+ DO_TEST("qemu-0.9.1", 0x002f, 9001, 0, 0);
+ DO_TEST("kvm-74", 0x233e, 9001, 1, 74);
+ DO_TEST("qemu-0.10.5", 0x1c6f, 10005, 0, 0);
+ DO_TEST("qemu-kvm-0.10.5", 0x3d7e, 10005, 1, 0);
+ DO_TEST("kvm-86", 0x3d7e, 10050, 1, 0);
+
+ return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
+}
+
+VIRT_TEST_MAIN(mymain)
+
+#else
+
+int main (void) { return (77); /* means 'test skipped' for automake */ }
+
+#endif /* WITH_QEMU */
And can kill this dummy main() too
Regards,
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 :|