[libvirt] [PATCH V5 01.5/10] tests: test recent hash addition
Stefan Berger
stefanb at linux.vnet.ibm.com
Fri Nov 18 15:17:12 UTC 2011
On 11/17/2011 05:07 PM, Eric Blake wrote:
> 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;
> }
ACK
More information about the libvir-list
mailing list