[libvirt] [PATCH] tests: Add a general util test

Matthias Bolte matthias.bolte at googlemail.com
Fri Jul 1 17:59:55 UTC 2011


Move non-esx specific tests from esxutilstest there and add a
test for virParseVersionString.
---
 tests/.gitignore     |    1 +
 tests/Makefile.am    |    8 ++-
 tests/esxutilstest.c |   70 --------------------
 tests/utiltest.c     |  178 ++++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 186 insertions(+), 71 deletions(-)
 create mode 100644 tests/utiltest.c

diff --git a/tests/.gitignore b/tests/.gitignore
index 7f26dd7..32457ab 100644
--- a/tests/.gitignore
+++ b/tests/.gitignore
@@ -30,6 +30,7 @@ sockettest
 statstest
 storagepoolxml2xmltest
 storagevolxml2xmltest
+utiltest
 virbuftest
 virnetmessagetest
 virnetsockettest
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 4bea18e..30b2d95 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -84,7 +84,8 @@ EXTRA_DIST =		\
 check_PROGRAMS = virshtest conftest sockettest \
 	nodeinfotest qparamtest virbuftest \
 	commandtest commandhelper seclabeltest \
-	hashtest virnetmessagetest virnetsockettest ssh
+	hashtest virnetmessagetest virnetsockettest ssh \
+	utiltest
 
 # This is a fake SSH we use from virnetsockettest
 ssh_SOURCES = ssh.c
@@ -202,6 +203,7 @@ TESTS = virshtest \
 	hashtest \
 	virnetmessagetest \
 	virnetsockettest \
+	utiltest \
 	$(test_scripts)
 
 if HAVE_YAJL
@@ -460,6 +462,10 @@ jsontest_SOURCES = \
 	jsontest.c testutils.h testutils.c
 jsontest_LDADD = $(LDADDS)
 
+utiltest_SOURCES = \
+	utiltest.c testutils.h testutils.c
+utiltest_LDADD = $(LDADDS)
+
 if WITH_LIBVIRTD
 eventtest_SOURCES = \
 	eventtest.c testutils.h testutils.c
diff --git a/tests/esxutilstest.c b/tests/esxutilstest.c
index 51c1e34..2097648 100644
--- a/tests/esxutilstest.c
+++ b/tests/esxutilstest.c
@@ -24,74 +24,6 @@ testQuietError(void *userData ATTRIBUTE_UNUSED,
 
 
 
-static const char* names[] = {
-    "sda",  "sdb",  "sdc",  "sdd",  "sde",  "sdf",  "sdg",  "sdh",  "sdi",  "sdj",  "sdk",  "sdl",  "sdm",  "sdn",  "sdo",  "sdp",  "sdq",  "sdr",  "sds",  "sdt",  "sdu",  "sdv",  "sdw",  "sdx",  "sdy",  "sdz",
-    "sdaa", "sdab", "sdac", "sdad", "sdae", "sdaf", "sdag", "sdah", "sdai", "sdaj", "sdak", "sdal", "sdam", "sdan", "sdao", "sdap", "sdaq", "sdar", "sdas", "sdat", "sdau", "sdav", "sdaw", "sdax", "sday", "sdaz",
-    "sdba", "sdbb", "sdbc", "sdbd", "sdbe", "sdbf", "sdbg", "sdbh", "sdbi", "sdbj", "sdbk", "sdbl", "sdbm", "sdbn", "sdbo", "sdbp", "sdbq", "sdbr", "sdbs", "sdbt", "sdbu", "sdbv", "sdbw", "sdbx", "sdby", "sdbz",
-    "sdca", "sdcb", "sdcc", "sdcd", "sdce", "sdcf", "sdcg", "sdch", "sdci", "sdcj", "sdck", "sdcl", "sdcm", "sdcn", "sdco", "sdcp", "sdcq", "sdcr", "sdcs", "sdct", "sdcu", "sdcv", "sdcw", "sdcx", "sdcy", "sdcz",
-    "sdda", "sddb", "sddc", "sddd", "sdde", "sddf", "sddg", "sddh", "sddi", "sddj", "sddk", "sddl", "sddm", "sddn", "sddo", "sddp", "sddq", "sddr", "sdds", "sddt", "sddu", "sddv", "sddw", "sddx", "sddy", "sddz",
-    "sdea", "sdeb", "sdec", "sded", "sdee", "sdef", "sdeg", "sdeh", "sdei", "sdej", "sdek", "sdel", "sdem", "sden", "sdeo", "sdep", "sdeq", "sder", "sdes", "sdet", "sdeu", "sdev", "sdew", "sdex", "sdey", "sdez",
-    "sdfa", "sdfb", "sdfc", "sdfd", "sdfe", "sdff", "sdfg", "sdfh", "sdfi", "sdfj", "sdfk", "sdfl", "sdfm", "sdfn", "sdfo", "sdfp", "sdfq", "sdfr", "sdfs", "sdft", "sdfu", "sdfv", "sdfw", "sdfx", "sdfy", "sdfz",
-    "sdga", "sdgb", "sdgc", "sdgd", "sdge", "sdgf", "sdgg", "sdgh", "sdgi", "sdgj", "sdgk", "sdgl", "sdgm", "sdgn", "sdgo", "sdgp", "sdgq", "sdgr", "sdgs", "sdgt", "sdgu", "sdgv", "sdgw", "sdgx", "sdgy", "sdgz",
-    "sdha", "sdhb", "sdhc", "sdhd", "sdhe", "sdhf", "sdhg", "sdhh", "sdhi", "sdhj", "sdhk", "sdhl", "sdhm", "sdhn", "sdho", "sdhp", "sdhq", "sdhr", "sdhs", "sdht", "sdhu", "sdhv", "sdhw", "sdhx", "sdhy", "sdhz",
-    "sdia", "sdib", "sdic", "sdid", "sdie", "sdif", "sdig", "sdih", "sdii", "sdij", "sdik", "sdil", "sdim", "sdin", "sdio", "sdip", "sdiq", "sdir", "sdis", "sdit", "sdiu", "sdiv", "sdiw", "sdix", "sdiy", "sdiz"
-};
-
-static int
-testIndexToDiskName(const void *data ATTRIBUTE_UNUSED)
-{
-    int i;
-    char *name = NULL;
-
-    for (i = 0; i < ARRAY_CARDINALITY(names); ++i) {
-        VIR_FREE(name);
-
-        name = virIndexToDiskName(i, "sd");
-
-        if (STRNEQ(names[i], name)) {
-            virtTestDifference(stderr, names[i], name);
-            VIR_FREE(name);
-
-            return -1;
-        }
-    }
-
-    VIR_FREE(name);
-
-    return 0;
-}
-
-static int
-testDiskNameToIndex(const void *data ATTRIBUTE_UNUSED)
-{
-    int i, k;
-    char *name = NULL;
-
-    for (i = 0; i < 100000; ++i) {
-        VIR_FREE(name);
-
-        name = virIndexToDiskName(i, "sd");
-        k = virDiskNameToIndex(name);
-
-        if (k != i) {
-            if (virTestGetDebug() > 0) {
-                fprintf(stderr, "\nExpect [%d]\n", i);
-                fprintf(stderr, "Actual [%d]\n", k);
-            }
-
-            VIR_FREE(name);
-
-            return -1;
-        }
-    }
-
-    VIR_FREE(name);
-
-    return 0;
-}
-
-
-
 struct testPath {
     const char *datastorePath;
     int result;
@@ -336,8 +268,6 @@ mymain(void)
             }                                                                 \
         } while (0)
 
-    DO_TEST(IndexToDiskName);
-    DO_TEST(DiskNameToIndex);
     DO_TEST(ParseDatastorePath);
     DO_TEST(ConvertDateTimeToCalendarTime);
     DO_TEST(EscapeDatastoreItem);
diff --git a/tests/utiltest.c b/tests/utiltest.c
new file mode 100644
index 0000000..1b26b72
--- /dev/null
+++ b/tests/utiltest.c
@@ -0,0 +1,178 @@
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "internal.h"
+#include "memory.h"
+#include "testutils.h"
+#include "util.h"
+
+
+static void
+testQuietError(void *userData ATTRIBUTE_UNUSED,
+               virErrorPtr error ATTRIBUTE_UNUSED)
+{
+    /* nothing */
+}
+
+
+
+static const char* diskNames[] = {
+    "sda",  "sdb",  "sdc",  "sdd",  "sde",  "sdf",  "sdg",  "sdh",  "sdi",  "sdj",  "sdk",  "sdl",  "sdm",  "sdn",  "sdo",  "sdp",  "sdq",  "sdr",  "sds",  "sdt",  "sdu",  "sdv",  "sdw",  "sdx",  "sdy",  "sdz",
+    "sdaa", "sdab", "sdac", "sdad", "sdae", "sdaf", "sdag", "sdah", "sdai", "sdaj", "sdak", "sdal", "sdam", "sdan", "sdao", "sdap", "sdaq", "sdar", "sdas", "sdat", "sdau", "sdav", "sdaw", "sdax", "sday", "sdaz",
+    "sdba", "sdbb", "sdbc", "sdbd", "sdbe", "sdbf", "sdbg", "sdbh", "sdbi", "sdbj", "sdbk", "sdbl", "sdbm", "sdbn", "sdbo", "sdbp", "sdbq", "sdbr", "sdbs", "sdbt", "sdbu", "sdbv", "sdbw", "sdbx", "sdby", "sdbz",
+    "sdca", "sdcb", "sdcc", "sdcd", "sdce", "sdcf", "sdcg", "sdch", "sdci", "sdcj", "sdck", "sdcl", "sdcm", "sdcn", "sdco", "sdcp", "sdcq", "sdcr", "sdcs", "sdct", "sdcu", "sdcv", "sdcw", "sdcx", "sdcy", "sdcz",
+    "sdda", "sddb", "sddc", "sddd", "sdde", "sddf", "sddg", "sddh", "sddi", "sddj", "sddk", "sddl", "sddm", "sddn", "sddo", "sddp", "sddq", "sddr", "sdds", "sddt", "sddu", "sddv", "sddw", "sddx", "sddy", "sddz",
+    "sdea", "sdeb", "sdec", "sded", "sdee", "sdef", "sdeg", "sdeh", "sdei", "sdej", "sdek", "sdel", "sdem", "sden", "sdeo", "sdep", "sdeq", "sder", "sdes", "sdet", "sdeu", "sdev", "sdew", "sdex", "sdey", "sdez",
+    "sdfa", "sdfb", "sdfc", "sdfd", "sdfe", "sdff", "sdfg", "sdfh", "sdfi", "sdfj", "sdfk", "sdfl", "sdfm", "sdfn", "sdfo", "sdfp", "sdfq", "sdfr", "sdfs", "sdft", "sdfu", "sdfv", "sdfw", "sdfx", "sdfy", "sdfz",
+    "sdga", "sdgb", "sdgc", "sdgd", "sdge", "sdgf", "sdgg", "sdgh", "sdgi", "sdgj", "sdgk", "sdgl", "sdgm", "sdgn", "sdgo", "sdgp", "sdgq", "sdgr", "sdgs", "sdgt", "sdgu", "sdgv", "sdgw", "sdgx", "sdgy", "sdgz",
+    "sdha", "sdhb", "sdhc", "sdhd", "sdhe", "sdhf", "sdhg", "sdhh", "sdhi", "sdhj", "sdhk", "sdhl", "sdhm", "sdhn", "sdho", "sdhp", "sdhq", "sdhr", "sdhs", "sdht", "sdhu", "sdhv", "sdhw", "sdhx", "sdhy", "sdhz",
+    "sdia", "sdib", "sdic", "sdid", "sdie", "sdif", "sdig", "sdih", "sdii", "sdij", "sdik", "sdil", "sdim", "sdin", "sdio", "sdip", "sdiq", "sdir", "sdis", "sdit", "sdiu", "sdiv", "sdiw", "sdix", "sdiy", "sdiz"
+};
+
+static int
+testIndexToDiskName(const void *data ATTRIBUTE_UNUSED)
+{
+    int i;
+    char *diskName = NULL;
+
+    for (i = 0; i < ARRAY_CARDINALITY(diskNames); ++i) {
+        VIR_FREE(diskName);
+
+        diskName = virIndexToDiskName(i, "sd");
+
+        if (STRNEQ(diskNames[i], diskName)) {
+            virtTestDifference(stderr, diskNames[i], diskName);
+            VIR_FREE(diskName);
+
+            return -1;
+        }
+    }
+
+    VIR_FREE(diskName);
+
+    return 0;
+}
+
+
+
+static int
+testDiskNameToIndex(const void *data ATTRIBUTE_UNUSED)
+{
+    int i, k;
+    char *diskName = NULL;
+
+    for (i = 0; i < 100000; ++i) {
+        VIR_FREE(diskName);
+
+        diskName = virIndexToDiskName(i, "sd");
+        k = virDiskNameToIndex(diskName);
+
+        if (k != i) {
+            if (virTestGetDebug() > 0) {
+                fprintf(stderr, "\nExpect [%d]\n", i);
+                fprintf(stderr, "Actual [%d]\n", k);
+            }
+
+            VIR_FREE(diskName);
+
+            return -1;
+        }
+    }
+
+    VIR_FREE(diskName);
+
+    return 0;
+}
+
+
+
+struct testVersionString
+{
+    const char *string;
+    bool allowMissing;
+    int result;
+    unsigned long version;
+};
+
+static struct testVersionString versions[] = {
+    { "2.6.38-8-generic", false,  0, 1000000 * 2 + 1000 * 6 + 38 },
+    { "3.0-1-virtual",    true,   0, 1000000 * 3 + 1000 * 0 + 0 },
+    { "5",                true,   0, 1000000 * 5 + 1000 * 0 + 0 },
+    { "4.1.0",            false,  0, 1000000 * 4 + 1000 * 1 + 0 },
+    { "12.345.678",       false,  0, 1000000 * 12 + 1000 * 345 + 678 },
+    { "1.234.5678",       false, -1, 0 },
+    { "1.2345.678",       false, -1, 0 },
+    { "12345.6.78",       false, -1, 0 },
+    { "123456789",        true,  -1, 0 },
+    { "3.0-2-virtual",    false, -1, 0 },
+    { "no-number-here",   false, -1, 0 },
+};
+
+static int
+testParseVersionString(const void *data ATTRIBUTE_UNUSED)
+{
+    int i, result;
+    unsigned long version;
+
+    for (i = 0; i < ARRAY_CARDINALITY(versions); ++i) {
+        result = virParseVersionString(versions[i].string, &version,
+                                       versions[i].allowMissing);
+
+        if (result != versions[i].result) {
+            if (virTestGetDebug() > 0) {
+                fprintf(stderr, "\nVersion string [%s]\n", versions[i].string);
+                fprintf(stderr, "Expect result [%d]\n", versions[i].result);
+                fprintf(stderr, "Actual result [%d]\n", result);
+            }
+
+            return -1;
+        }
+
+        if (result < 0) {
+            continue;
+        }
+
+        if (version != versions[i].version) {
+            if (virTestGetDebug() > 0) {
+                fprintf(stderr, "\nVersion string [%s]\n", versions[i].string);
+                fprintf(stderr, "Expect version [%lu]\n", versions[i].version);
+                fprintf(stderr, "Actual version [%lu]\n", version);
+            }
+
+            return -1;
+        }
+    }
+
+    return 0;
+}
+
+
+
+
+static int
+mymain(void)
+{
+    int result = 0;
+
+    virSetErrorFunc(NULL, testQuietError);
+
+    #define DO_TEST(_name)                                                    \
+        do {                                                                  \
+            if (virtTestRun("Util "#_name, 1, test##_name,                    \
+                            NULL) < 0) {                                      \
+                result = -1;                                                  \
+            }                                                                 \
+        } while (0)
+
+    DO_TEST(IndexToDiskName);
+    DO_TEST(DiskNameToIndex);
+    DO_TEST(ParseVersionString);
+
+    return result == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
+}
+
+VIRT_TEST_MAIN(mymain)
-- 
1.7.4.1




More information about the libvir-list mailing list