summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMagnus Ahltorp <map@kth.se>2016-02-12 16:07:20 +0100
committerLinus Nordberg <linus@nordu.net>2016-04-25 13:14:11 +0200
commit5eb9ac471fa1b635e70305ecdc57ac82f7af532d (patch)
tree7ba6ff24dc8fda39abbadb6eb130b4f90cb62868
parent27ebeff879126434740af3db63004cb4eb4b0021 (diff)
Allow all data sizes in permdbtest
-rw-r--r--c_src/Makefile18
-rw-r--r--c_src/permdbtest.c34
2 files changed, 42 insertions, 10 deletions
diff --git a/c_src/Makefile b/c_src/Makefile
index 644a8a9..deae883 100644
--- a/c_src/Makefile
+++ b/c_src/Makefile
@@ -55,5 +55,19 @@ permdb.so: $(permdbso_OBJS)
permdbtest: $(permdbtest_OBJS)
$(CC) $(permdbtest_OBJS) $(LDFLAGS) -o permdbtest
-permdb-valgrind:
- valgrind --leak-check=full ./permdbtest /tmp/permdb-valgrind-test 10000 2048 10000
+permdb-valgrind: permdbtest
+ rm -f /tmp/permdb-valgrind-test{,.idx}
+ touch /tmp/permdb-valgrind-test /tmp/permdb-valgrind-test.idx
+ valgrind --leak-check=full ./permdbtest /tmp/permdb-valgrind-test 10000 2048 1000
+ rm /tmp/permdb-valgrind-test.idx
+ valgrind --leak-check=full ./permdbtest /tmp/permdb-valgrind-test 10000 2048 1000
+ rm /tmp/permdb-valgrind-test /tmp/permdb-valgrind-test.idx
+ valgrind --leak-check=full ./permdbtest /tmp/permdb-valgrind-test 10000 2048 1000
+ valgrind --leak-check=full ./permdbtest /tmp/permdb-valgrind-test 10000 2048 1000
+ rm /tmp/permdb-valgrind-test /tmp/permdb-valgrind-test.idx
+ valgrind --leak-check=full ./permdbtest /tmp/permdb-valgrind-test 10 99 1
+ rm /tmp/permdb-valgrind-test.idx
+ valgrind --leak-check=full ./permdbtest /tmp/permdb-valgrind-test 10 99 1
+ rm /tmp/permdb-valgrind-test /tmp/permdb-valgrind-test.idx
+ valgrind --leak-check=full ./permdbtest /tmp/permdb-valgrind-test 10 99 1
+ valgrind --leak-check=full ./permdbtest /tmp/permdb-valgrind-test 10 99 1
diff --git a/c_src/permdbtest.c b/c_src/permdbtest.c
index 7fb17b7..e4b54c2 100644
--- a/c_src/permdbtest.c
+++ b/c_src/permdbtest.c
@@ -68,26 +68,28 @@ main(int argc, char *argv[])
void *testdata = gentestdata(nentries);
printf("inserting test data\n");
int written_since_fsync = 0;
- int datamultiplier = datasize / 32;
- if (datasize % 32 != 0) {
- printf("datasize %d not multiple of 32, truncating to %d\n", datasize, datamultiplier * 32);
- }
- datasize = datamultiplier * 32;
unsigned char *value = malloc(datasize);
for (long long i = 0; i < nentries; i++) {
unsigned char *key = testdata + i * 32 * 2;
- for (int j = 0; j < datamultiplier; j++) {
+ for (int j = 0; j < datasize / 32; j++) {
memcpy(value + j * 32, testdata + i * 32 * 2 + 32, 32);
}
+ if (datasize % 32 > 0) {
+ memcpy(value + (datasize / 32) * 32, testdata + i * 32 * 2 + 32, datasize % 32);
+ }
int result = addvalue(state, key, 32, value, datasize);
if (result < 0) {
- errx(1, "addvalue: %d\n", result);
+ free(testdata);
+ permdb_free(state);
+ errx(1, "addvalue: %d\n", result);
}
written_since_fsync += 1;
if (written_since_fsync >= nfsync) {
result = committree(state);
if (result < 0) {
+ free(testdata);
+ permdb_free(state);
errx(1, "committree: %d\n", result);
}
written_since_fsync = 0;
@@ -96,6 +98,8 @@ main(int argc, char *argv[])
free(value);
int result = committree(state);
if (result < 0) {
+ free(testdata);
+ permdb_free(state);
errx(1, "committree: %d\n", result);
}
written_since_fsync = 0;
@@ -106,13 +110,27 @@ main(int argc, char *argv[])
size_t datalen;
unsigned char *result = getvalue(state, key, 32, &datalen);
if (datalen != datasize) {
+ free(testdata);
+ permdb_free(state);
+ free(result);
errx(1, "getvalue returned datalen %zd\n", datalen);
}
- for (int j = 0; j < datamultiplier; j++) {
+ for (int j = 0; j < datasize / 32; j++) {
if (memcmp(result + j * 32, testdata + i * 32 * 2 + 32, 32)) {
+ free(testdata);
+ permdb_free(state);
+ free(result);
errx(1, "getvalue returned incorrect data\n");
}
}
+ if (datasize % 32 > 0) {
+ if (memcmp(result + (datasize / 32) * 32, testdata + i * 32 * 2 + 32, datasize % 32)) {
+ free(testdata);
+ permdb_free(state);
+ free(result);
+ errx(1, "getvalue returned incorrect data\n");
+ }
+ }
free(result);
}