[libvirt] [PATCH V5 01.5/10] tests: test recent hash addition

Eric Blake eblake at redhat.com
Thu Nov 17 22:07:20 UTC 2011


Excercise the new hash API, to ensure we avoid regressions.

* tests/hashtest.c (testHashGetItems): New test.
---

> I'd still feel a bit better if we had coverage for the new function in
> tests/hashtest.c, but I'll let that slide to another patch;

On second thought, writing a test now wasn't too hard.

 tests/hashtest.c |   86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 86 insertions(+), 0 deletions(-)

diff --git a/tests/hashtest.c b/tests/hashtest.c
index f02b3a9..898a95d 100644
--- a/tests/hashtest.c
+++ b/tests/hashtest.c
@@ -9,6 +9,7 @@
 #include "hash.h"
 #include "hashdata.h"
 #include "testutils.h"
+#include "memory.h"


 #define testError(...)                                          \
@@ -491,6 +492,90 @@ cleanup:


 static int
+testHashGetItemsCompKey(const virHashKeyValuePairPtr a,
+                        const virHashKeyValuePairPtr b)
+{
+    return strcmp (a->key, b->key);
+}
+
+static int
+testHashGetItemsCompValue(const virHashKeyValuePairPtr a,
+                          const virHashKeyValuePairPtr b)
+{
+    return strcmp (a->value, b->value);
+}
+
+static int
+testHashGetItems(const void *data ATTRIBUTE_UNUSED)
+{
+    virHashTablePtr hash;
+    virHashKeyValuePairPtr array = NULL;
+    int ret = -1;
+    char keya[] = "a";
+    char keyb[] = "b";
+    char keyc[] = "c";
+    char value1[] = "1";
+    char value2[] = "2";
+    char value3[] = "3";
+
+    if (!(hash = virHashCreate(0, NULL)) ||
+        virHashAddEntry(hash, keya, value3) < 0 ||
+        virHashAddEntry(hash, keyc, value1) < 0 ||
+        virHashAddEntry(hash, keyb, value2) < 0) {
+        if (virTestGetVerbose()) {
+            testError("\nfailed to create hash");
+        }
+        goto cleanup;
+    }
+
+    if (!(array = virHashGetItems(hash, NULL)) ||
+        array[3].key || array[3].value) {
+        if (virTestGetVerbose()) {
+            testError("\nfailed to get items with NULL sort");
+        }
+        goto cleanup;
+    }
+    VIR_FREE(array);
+
+    if (!(array = virHashGetItems(hash, testHashGetItemsCompKey)) ||
+        STRNEQ(array[0].key, "a") ||
+        STRNEQ(array[0].value, "3") ||
+        STRNEQ(array[1].key, "b") ||
+        STRNEQ(array[1].value, "2") ||
+        STRNEQ(array[2].key, "c") ||
+        STRNEQ(array[2].value, "1") ||
+        array[3].key || array[3].value) {
+        if (virTestGetVerbose()) {
+            testError("\nfailed to get items with key sort");
+        }
+        goto cleanup;
+    }
+    VIR_FREE(array);
+
+    if (!(array = virHashGetItems(hash, testHashGetItemsCompValue)) ||
+        STRNEQ(array[0].key, "c") ||
+        STRNEQ(array[0].value, "1") ||
+        STRNEQ(array[1].key, "b") ||
+        STRNEQ(array[1].value, "2") ||
+        STRNEQ(array[2].key, "a") ||
+        STRNEQ(array[2].value, "3") ||
+        array[3].key || array[3].value) {
+        if (virTestGetVerbose()) {
+            testError("\nfailed to get items with value sort");
+        }
+        goto cleanup;
+    }
+
+    ret = 0;
+
+cleanup:
+    VIR_FREE(array);
+    virHashFree(hash);
+    return ret;
+}
+
+
+static int
 mymain(void)
 {
     int ret = 0;
@@ -526,6 +611,7 @@ mymain(void)
     DO_TEST("Forbidden ops in ForEach", ForEach);
     DO_TEST("RemoveSet", RemoveSet);
     DO_TEST("Search", Search);
+    DO_TEST("GetItems", GetItems);

     return (ret == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
 }
-- 
1.7.7.1




More information about the libvir-list mailing list