diff --git a/testapp.c b/testapp.c index b670708..5a758b4 100644 --- a/testapp.c +++ b/testapp.c @@ -322,38 +322,45 @@ static enum test_return test_stats_prefix_record_set(void) { static enum test_return test_stats_prefix_dump(void) { int hashval = hash("abc", 3) % PREFIX_HASH_SIZE; char tmp[500]; - char *expected; + char *buf; + const char *expected; int keynum; int length; stats_prefix_clear(); - assert(strcmp("END\r\n", stats_prefix_dump(&length)) == 0); + assert(strcmp("END\r\n", (buf = stats_prefix_dump(&length))) == 0); assert(5 == length); stats_prefix_record_set("abc:123", 7); + free(buf); expected = "PREFIX abc get 0 hit 0 set 1 del 0\r\nEND\r\n"; - assert(strcmp(expected, stats_prefix_dump(&length)) == 0); + assert(strcmp(expected, (buf = stats_prefix_dump(&length))) == 0); assert(strlen(expected) == length); stats_prefix_record_get("abc:123", 7, false); + free(buf); expected = "PREFIX abc get 1 hit 0 set 1 del 0\r\nEND\r\n"; - assert(strcmp(expected, stats_prefix_dump(&length)) == 0); + assert(strcmp(expected, (buf = stats_prefix_dump(&length))) == 0); assert(strlen(expected) == length); stats_prefix_record_get("abc:123", 7, true); + free(buf); expected = "PREFIX abc get 2 hit 1 set 1 del 0\r\nEND\r\n"; - assert(strcmp(expected, stats_prefix_dump(&length)) == 0); + assert(strcmp(expected, (buf = stats_prefix_dump(&length))) == 0); assert(strlen(expected) == length); stats_prefix_record_delete("abc:123", 7); + free(buf); expected = "PREFIX abc get 2 hit 1 set 1 del 1\r\nEND\r\n"; - assert(strcmp(expected, stats_prefix_dump(&length)) == 0); + assert(strcmp(expected, (buf = stats_prefix_dump(&length))) == 0); assert(strlen(expected) == length); - /* The order of results might change if we switch hash functions. */ stats_prefix_record_delete("def:123", 7); - expected = "PREFIX abc get 2 hit 1 set 1 del 1\r\n" - "PREFIX def get 0 hit 0 set 0 del 1\r\n" - "END\r\n"; - assert(strcmp(expected, stats_prefix_dump(&length)) == 0); - assert(strlen(expected) == length); + free(buf); + /* NOTE: Prefixes can be dumped in any order, so we verify that + each expected line is present in the string. */ + buf = stats_prefix_dump(&length); + assert(strstr(buf, "PREFIX abc get 2 hit 1 set 1 del 1\r\n") != NULL); + assert(strstr(buf, "PREFIX def get 0 hit 0 set 0 del 1\r\n") != NULL); + assert(strstr(buf, "END\r\n") != NULL); + free(buf); /* Find a key that hashes to the same bucket as "abc" */ bool found_match = false; @@ -367,13 +374,16 @@ static enum test_return test_stats_prefix_dump(void) { } assert(found_match); stats_prefix_record_set(tmp, strlen(tmp)); - snprintf(tmp, sizeof(tmp), - "PREFIX %d get 0 hit 0 set 1 del 0\r\n" - "PREFIX abc get 2 hit 1 set 1 del 1\r\n" - "PREFIX def get 0 hit 0 set 0 del 1\r\n" - "END\r\n", keynum); - assert(strcmp(tmp, stats_prefix_dump(&length)) == 0); - assert(strlen(tmp) == length); + buf = stats_prefix_dump(&length); + assert(strstr(buf, "PREFIX abc get 2 hit 1 set 1 del 1\r\n") != NULL); + assert(strstr(buf, "PREFIX def get 0 hit 0 set 0 del 1\r\n") != NULL); + assert(strstr(buf, "END\r\n") != NULL); + snprintf(tmp, sizeof(tmp), "PREFIX %d get 0 hit 0 set 1 del 0\r\n", keynum); + assert(strstr(buf, tmp) != NULL); + free(buf); + + /* Marking the end of these tests */ + stats_prefix_clear(); return TEST_PASS; }