Skip to content

Commit

Permalink
Delete unused parts of zipmap (#973)
Browse files Browse the repository at this point in the history
Deletes zipmapSet, zipmapGet, etc. Only keep iterator and validate
integrity, what we use when loading an old RDB file.

Adjust unit tests to not use zipmapSet, etc.

Solves a build failure where when compiling with fortify source.

---------

Signed-off-by: Viktor Söderqvist <viktor.soderqvist@est.tech>
  • Loading branch information
zuiderkwast authored and madolson committed Sep 2, 2024
1 parent 2364341 commit 55e8ddb
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 327 deletions.
5 changes: 2 additions & 3 deletions src/unit/test_files.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,7 @@ int test_BenchmarkziplistValidateIntegrity(int argc, char **argv, int flags);
int test_BenchmarkziplistCompareWithString(int argc, char **argv, int flags);
int test_BenchmarkziplistCompareWithNumber(int argc, char **argv, int flags);
int test_ziplistStress__ziplistCascadeUpdate(int argc, char **argv, int flags);
int test_zipmapLookUpLargeKey(int argc, char *argv[], int flags);
int test_zipmapPerformDirectLookup(int argc, char *argv[], int flags);
int test_zipmapIterateWithLargeKey(int argc, char *argv[], int flags);
int test_zipmapIterateThroughElements(int argc, char *argv[], int flags);
int test_zmallocInitialUsedMemory(int argc, char **argv, int flags);
int test_zmallocAllocReallocCallocAndFree(int argc, char **argv, int flags);
Expand All @@ -86,7 +85,7 @@ unitTest __test_sds_c[] = {{"test_sds", test_sds}, {"test_typesAndAllocSize", te
unitTest __test_sha1_c[] = {{"test_sha1", test_sha1}, {NULL, NULL}};
unitTest __test_util_c[] = {{"test_string2ll", test_string2ll}, {"test_string2l", test_string2l}, {"test_ll2string", test_ll2string}, {"test_ld2string", test_ld2string}, {"test_fixedpoint_d2string", test_fixedpoint_d2string}, {"test_version2num", test_version2num}, {"test_reclaimFilePageCache", test_reclaimFilePageCache}, {NULL, NULL}};
unitTest __test_ziplist_c[] = {{"test_ziplistCreateIntList", test_ziplistCreateIntList}, {"test_ziplistPop", test_ziplistPop}, {"test_ziplistGetElementAtIndex3", test_ziplistGetElementAtIndex3}, {"test_ziplistGetElementOutOfRange", test_ziplistGetElementOutOfRange}, {"test_ziplistGetLastElement", test_ziplistGetLastElement}, {"test_ziplistGetFirstElement", test_ziplistGetFirstElement}, {"test_ziplistGetElementOutOfRangeReverse", test_ziplistGetElementOutOfRangeReverse}, {"test_ziplistIterateThroughFullList", test_ziplistIterateThroughFullList}, {"test_ziplistIterateThroughListFrom1ToEnd", test_ziplistIterateThroughListFrom1ToEnd}, {"test_ziplistIterateThroughListFrom2ToEnd", test_ziplistIterateThroughListFrom2ToEnd}, {"test_ziplistIterateThroughStartOutOfRange", test_ziplistIterateThroughStartOutOfRange}, {"test_ziplistIterateBackToFront", test_ziplistIterateBackToFront}, {"test_ziplistIterateBackToFrontDeletingAllItems", test_ziplistIterateBackToFrontDeletingAllItems}, {"test_ziplistDeleteInclusiveRange0To0", test_ziplistDeleteInclusiveRange0To0}, {"test_ziplistDeleteInclusiveRange0To1", test_ziplistDeleteInclusiveRange0To1}, {"test_ziplistDeleteInclusiveRange1To2", test_ziplistDeleteInclusiveRange1To2}, {"test_ziplistDeleteWithStartIndexOutOfRange", test_ziplistDeleteWithStartIndexOutOfRange}, {"test_ziplistDeleteWithNumOverflow", test_ziplistDeleteWithNumOverflow}, {"test_ziplistDeleteFooWhileIterating", test_ziplistDeleteFooWhileIterating}, {"test_ziplistReplaceWithSameSize", test_ziplistReplaceWithSameSize}, {"test_ziplistReplaceWithDifferentSize", test_ziplistReplaceWithDifferentSize}, {"test_ziplistRegressionTestForOver255ByteStrings", test_ziplistRegressionTestForOver255ByteStrings}, {"test_ziplistRegressionTestDeleteNextToLastEntries", test_ziplistRegressionTestDeleteNextToLastEntries}, {"test_ziplistCreateLongListAndCheckIndices", test_ziplistCreateLongListAndCheckIndices}, {"test_ziplistCompareStringWithZiplistEntries", test_ziplistCompareStringWithZiplistEntries}, {"test_ziplistMergeTest", test_ziplistMergeTest}, {"test_ziplistStressWithRandomPayloadsOfDifferentEncoding", test_ziplistStressWithRandomPayloadsOfDifferentEncoding}, {"test_ziplistCascadeUpdateEdgeCases", test_ziplistCascadeUpdateEdgeCases}, {"test_ziplistInsertEdgeCase", test_ziplistInsertEdgeCase}, {"test_ziplistStressWithVariableSize", test_ziplistStressWithVariableSize}, {"test_BenchmarkziplistFind", test_BenchmarkziplistFind}, {"test_BenchmarkziplistIndex", test_BenchmarkziplistIndex}, {"test_BenchmarkziplistValidateIntegrity", test_BenchmarkziplistValidateIntegrity}, {"test_BenchmarkziplistCompareWithString", test_BenchmarkziplistCompareWithString}, {"test_BenchmarkziplistCompareWithNumber", test_BenchmarkziplistCompareWithNumber}, {"test_ziplistStress__ziplistCascadeUpdate", test_ziplistStress__ziplistCascadeUpdate}, {NULL, NULL}};
unitTest __test_zipmap_c[] = {{"test_zipmapLookUpLargeKey", test_zipmapLookUpLargeKey}, {"test_zipmapPerformDirectLookup", test_zipmapPerformDirectLookup}, {"test_zipmapIterateThroughElements", test_zipmapIterateThroughElements}, {NULL, NULL}};
unitTest __test_zipmap_c[] = {{"test_zipmapIterateWithLargeKey", test_zipmapIterateWithLargeKey}, {"test_zipmapIterateThroughElements", test_zipmapIterateThroughElements}, {NULL, NULL}};
unitTest __test_zmalloc_c[] = {{"test_zmallocInitialUsedMemory", test_zmallocInitialUsedMemory}, {"test_zmallocAllocReallocCallocAndFree", test_zmallocAllocReallocCallocAndFree}, {"test_zmallocAllocZeroByteAndFree", test_zmallocAllocZeroByteAndFree}, {NULL, NULL}};

struct unitTestSuite {
Expand Down
181 changes: 72 additions & 109 deletions src/unit/test_zipmap.c
Original file line number Diff line number Diff line change
@@ -1,129 +1,93 @@
#include "../zipmap.c"
#include "test_help.h"

static void zipmapRepr(unsigned char *p) {
unsigned int l;

p++;
while (1) {
if (p[0] == ZIPMAP_END) {
break;
} else {
unsigned char e;

l = zipmapDecodeLength(p);
p += zipmapEncodeLength(NULL, l);
if (l != 0 && fwrite(p, l, 1, stdout) == 0) perror("fwrite");
p += l;

l = zipmapDecodeLength(p);
p += zipmapEncodeLength(NULL, l);
e = *p++;
if (l != 0 && fwrite(p, l, 1, stdout) == 0) perror("fwrite");
p += l + e;
if (e) {
while (e--);
}
}
}
}

int test_zipmapLookUpLargeKey(int argc, char *argv[], int flags) {
unsigned char *zm;
UNUSED(argc);
UNUSED(argv);
UNUSED(flags);
zm = zipmapNew();

zm = zipmapSet(zm, (unsigned char *)"name", 4, (unsigned char *)"foo", 3, NULL);
zm = zipmapSet(zm, (unsigned char *)"surname", 7, (unsigned char *)"foo", 3, NULL);
zm = zipmapSet(zm, (unsigned char *)"age", 3, (unsigned char *)"foo", 3, NULL);
zipmapRepr(zm);

zm = zipmapSet(zm, (unsigned char *)"hello", 5, (unsigned char *)"world!", 6, NULL);
zm = zipmapSet(zm, (unsigned char *)"foo", 3, (unsigned char *)"bar", 3, NULL);
zm = zipmapSet(zm, (unsigned char *)"foo", 3, (unsigned char *)"!", 1, NULL);
zipmapRepr(zm);
zm = zipmapSet(zm, (unsigned char *)"foo", 3, (unsigned char *)"12345", 5, NULL);
zipmapRepr(zm);
zm = zipmapSet(zm, (unsigned char *)"new", 3, (unsigned char *)"xx", 2, NULL);
zm = zipmapSet(zm, (unsigned char *)"noval", 5, (unsigned char *)"", 0, NULL);
zipmapRepr(zm);
zm = zipmapDel(zm, (unsigned char *)"new", 3, NULL);
zipmapRepr(zm);

unsigned char buf[512];
unsigned char *value;
unsigned int vlen, i;
for (i = 0; i < 512; i++) buf[i] = 'a';
zm = zipmapSet(zm, buf, 512, (unsigned char *)"long", 4, NULL);
if (zipmapGet(zm, buf, 512, &value, &vlen)) {
TEST_ASSERT(4 == vlen);
TEST_ASSERT(strncmp("long", (const char *)value, vlen) == 0);
}
zfree(zm);
int test_zipmapIterateWithLargeKey(int argc, char *argv[], int flags) {
return 0;
}

int test_zipmapPerformDirectLookup(int argc, char *argv[], int flags) {
unsigned char *zm;
UNUSED(argc);
UNUSED(argv);
UNUSED(flags);
zm = zipmapNew();

zm = zipmapSet(zm, (unsigned char *)"name", 4, (unsigned char *)"foo", 3, NULL);
zm = zipmapSet(zm, (unsigned char *)"surname", 7, (unsigned char *)"foo", 3, NULL);
zm = zipmapSet(zm, (unsigned char *)"age", 3, (unsigned char *)"foo", 3, NULL);
zipmapRepr(zm);

zm = zipmapSet(zm, (unsigned char *)"hello", 5, (unsigned char *)"world!", 6, NULL);
zm = zipmapSet(zm, (unsigned char *)"foo", 3, (unsigned char *)"bar", 3, NULL);
zm = zipmapSet(zm, (unsigned char *)"foo", 3, (unsigned char *)"!", 1, NULL);
zipmapRepr(zm);
zm = zipmapSet(zm, (unsigned char *)"foo", 3, (unsigned char *)"12345", 5, NULL);
zipmapRepr(zm);
zm = zipmapSet(zm, (unsigned char *)"new", 3, (unsigned char *)"xx", 2, NULL);
zm = zipmapSet(zm, (unsigned char *)"noval", 5, (unsigned char *)"", 0, NULL);
zipmapRepr(zm);
zm = zipmapDel(zm, (unsigned char *)"new", 3, NULL);
zipmapRepr(zm);
unsigned char *value;
unsigned int vlen;
char zm[] = "\x04"
"\x04"
"name"
"\x03\x00"
"foo"
"\x07"
"surname"
"\x03\x00"
"foo"
"noval"
"\x00\x00"
"\xfe\x00\x02\x00\x00"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"\x04\x00"
"long"
"\xff";
TEST_ASSERT(zipmapValidateIntegrity((unsigned char *)zm, sizeof zm - 1, 1));

unsigned char *p = zipmapRewind((unsigned char *)zm);
unsigned char *key, *value;
unsigned int klen, vlen;
char buf[512];
memset(buf, 'a', 512);
char *expected_key[] = {"name", "surname", "noval", buf};
char *expected_value[] = {"foo", "foo", NULL, "long"};
unsigned int expected_klen[] = {4, 7, 5, 512};
unsigned int expected_vlen[] = {3, 3, 0, 4};
int iter = 0;

if (zipmapGet(zm, (unsigned char *)"foo", 3, &value, &vlen)) {
TEST_ASSERT(5 == vlen);
TEST_ASSERT(!strncmp("12345", (const char *)value, vlen));
while ((p = zipmapNext(p, &key, &klen, &value, &vlen)) != NULL) {
char *tmp = expected_key[iter];
TEST_ASSERT(klen == expected_klen[iter]);
TEST_ASSERT(strncmp((const char *)tmp, (const char *)key, klen) == 0);
tmp = expected_value[iter];
TEST_ASSERT(vlen == expected_vlen[iter]);
TEST_ASSERT(strncmp((const char *)tmp, (const char *)value, vlen) == 0);
iter++;
}
zfree(zm);
return 0;
}

int test_zipmapIterateThroughElements(int argc, char *argv[], int flags) {
unsigned char *zm;
UNUSED(argc);
UNUSED(argv);
UNUSED(flags);
zm = zipmapNew();

zm = zipmapSet(zm, (unsigned char *)"name", 4, (unsigned char *)"foo", 3, NULL);
zm = zipmapSet(zm, (unsigned char *)"surname", 7, (unsigned char *)"foo", 3, NULL);
zm = zipmapSet(zm, (unsigned char *)"age", 3, (unsigned char *)"foo", 3, NULL);
zipmapRepr(zm);

zm = zipmapSet(zm, (unsigned char *)"hello", 5, (unsigned char *)"world!", 6, NULL);
zm = zipmapSet(zm, (unsigned char *)"foo", 3, (unsigned char *)"bar", 3, NULL);
zm = zipmapSet(zm, (unsigned char *)"foo", 3, (unsigned char *)"!", 1, NULL);
zipmapRepr(zm);
zm = zipmapSet(zm, (unsigned char *)"foo", 3, (unsigned char *)"12345", 5, NULL);
zipmapRepr(zm);
zm = zipmapSet(zm, (unsigned char *)"new", 3, (unsigned char *)"xx", 2, NULL);
zm = zipmapSet(zm, (unsigned char *)"noval", 5, (unsigned char *)"", 0, NULL);
zipmapRepr(zm);
zm = zipmapDel(zm, (unsigned char *)"new", 3, NULL);
zipmapRepr(zm);

unsigned char *i = zipmapRewind(zm);
char zm[] = "\x06"
"\x04"
"name"
"\x03\x00"
"foo"
"\x07"
"surname"
"\x03\x00"
"foo"
"\x03"
"age"
"\x03\x00"
"foo"
"\x05"
"hello"
"\x06\x00"
"world!"
"\x03"
"foo"
"\x05\x00"
"12345"
"\x05"
"noval"
"\x00\x00"
"\xff";
TEST_ASSERT(zipmapValidateIntegrity((unsigned char *)zm, sizeof zm - 1, 1));

unsigned char *i = zipmapRewind((unsigned char *)zm);
unsigned char *key, *value;
unsigned int klen, vlen;
char *expected_key[] = {"name", "surname", "age", "hello", "foo", "noval"};
Expand All @@ -141,6 +105,5 @@ int test_zipmapIterateThroughElements(int argc, char *argv[], int flags) {
TEST_ASSERT(strncmp((const char *)tmp, (const char *)value, vlen) == 0);
iter++;
}
zfree(zm);
return 0;
}
Loading

0 comments on commit 55e8ddb

Please sign in to comment.