From 27067fbd6a84fe531c1f2e9c612e1bd32dbb6535 Mon Sep 17 00:00:00 2001
From: Libor Peltan <libor.peltan@nic.cz>
Date: Tue, 13 Dec 2016 15:13:30 +0100
Subject: [PATCH] journal: unit test: valgrind (not squashable)

---
 tests/journal_lmdb.c | 109 +++++++++++++++++++++++++++----------------
 1 file changed, 69 insertions(+), 40 deletions(-)

diff --git a/tests/journal_lmdb.c b/tests/journal_lmdb.c
index b2ee468994..c9c0b64618 100644
--- a/tests/journal_lmdb.c
+++ b/tests/journal_lmdb.c
@@ -52,6 +52,11 @@ static void set_conf(int zonefile_sync, size_t journal_usage)
 	assert(ret == KNOT_EOK);
 }
 
+static void unset_conf(void)
+{
+	conf_update(NULL, CONF_UPD_FNONE);
+}
+
 /*! \brief Generate random string with given length. */
 static int randstr(char* dst, size_t len)
 {
@@ -290,7 +295,7 @@ static void test_store_load(void)
 	ok(ret == KNOT_EOK, "journal check (%d)", ret);
 
 	changesets_free(&l);
-	changeset_free(m_ch);
+	changesets_free(&k);
 	/* Flush the journal. */
 	ret = journal_flush(j);
 	ok(ret == KNOT_EOK, "journal: first and simple flush (%d)", ret);
@@ -303,14 +308,14 @@ static void test_store_load(void)
 	ret = KNOT_EOK;
 	uint32_t serial = 1;
 	for (; ret == KNOT_EOK; ++serial) {
-		m_ch = changeset_new(apex);
-		init_random_changeset(m_ch, serial, serial + 1, 128, apex);
-		ret = journal_store_changeset(j, m_ch);
+		changeset_t *m_ch2 = changeset_new(apex);
+		init_random_changeset(m_ch2, serial, serial + 1, 128, apex);
+		ret = journal_store_changeset(j, m_ch2);
 		if (ret != KNOT_EOK) {
-			changeset_free(m_ch);
+			changeset_free(m_ch2);
 			break;
 		}
-		add_tail(&k, &m_ch->n);
+		add_tail(&k, &m_ch2->n);
 	}
 	ok(ret == KNOT_EBUSY, "journal: overfill with changesets (%d inserted) (%d should= %d)", serial, ret, KNOT_EBUSY);
 	ret = journal_check(j, KNOT_JOURNAL_CHECK_INFO);
@@ -348,7 +353,7 @@ static void test_store_load(void)
 	changeset_init(&ch, apex);
 	init_random_changeset(&ch, serial, serial + 1, 128, apex);
 	ret = journal_store_changeset(j, &ch);
-		changeset_clear(&ch);
+	changeset_clear(&ch);
 	ok(ret == KNOT_EOK, "journal: store after flush (%d)", ret);
 	ret = journal_check(j, KNOT_JOURNAL_CHECK_INFO);
 	ok(ret == KNOT_EOK, "journal check (%d)", ret);
@@ -368,9 +373,9 @@ static void test_store_load(void)
 	/* Fill the journal using a list. */
 	uint32_t m_serial = 1;
 	for (; m_serial < serial / 2; ++m_serial) {
-		m_ch = changeset_new(apex);
-		init_random_changeset(m_ch, m_serial, m_serial + 1, 128, apex);
-		add_tail(&l, &m_ch->n);
+		changeset_t *m_ch7 = changeset_new(apex);
+		init_random_changeset(m_ch7, m_serial, m_serial + 1, 128, apex);
+		add_tail(&l, &m_ch7->n);
 	}
 	ret = journal_store_changesets(j, &l);
 	ok(ret == KNOT_EOK, "journal: fill with changesets using a list (%d inserted)", m_serial);
@@ -401,42 +406,31 @@ static void test_store_load(void)
 	 * remove changesets 0->1 and 1->2. */
 	assert(EMPTY_LIST(k));
 	assert(EMPTY_LIST(l));
-	m_ch = changeset_new(apex);
-	init_random_changeset(m_ch, 0, 1, 128, apex);
-	assert(journal_store_changeset(j, m_ch) == KNOT_EOK);
-	changeset_set_soa_serials(m_ch, 1, 2, apex);
-	assert(journal_store_changeset(j, m_ch) == KNOT_EOK);
-	changeset_set_soa_serials(m_ch, 2, 2147483647, apex);
-	fprintf(stderr, "ksize=%zu\n", list_size(&k));
-	add_tail(&k, &m_ch->n);
-	fprintf(stderr, "ksize=%zu\n", list_size(&k));
-	assert(journal_store_changeset(j, m_ch) == KNOT_EOK);
-	m_ch = changeset_new(apex);
-	init_random_changeset(m_ch, 2147483647, 4294967294, 128, apex);
-	add_tail(&k, &m_ch->n);
-	fprintf(stderr, "ksize=%zu\n", list_size(&k));
-	assert(journal_store_changeset(j, m_ch) == KNOT_EOK);
-	m_ch = changeset_new(apex);
-	init_random_changeset(m_ch, 4294967294, 1, 128, apex);
-	add_tail(&k, &m_ch->n);
-	fprintf(stderr, "ksize=%zu\n", list_size(&k));
-	assert(journal_store_changeset(j, m_ch) == KNOT_EBUSY);
-	fprintf(stderr, "ksize=%zu\n", list_size(&k));
+	changeset_t *m_ch3 = changeset_new(apex);
+	init_random_changeset(m_ch3, 0, 1, 128, apex);
+	assert(journal_store_changeset(j, m_ch3) == KNOT_EOK);
+	changeset_set_soa_serials(m_ch3, 1, 2, apex);
+	assert(journal_store_changeset(j, m_ch3) == KNOT_EOK);
+	changeset_set_soa_serials(m_ch3, 2, 2147483647, apex);
+	add_tail(&k, &m_ch3->n);
+	assert(journal_store_changeset(j, m_ch3) == KNOT_EOK);
+	changeset_t *m_ch4 = changeset_new(apex);
+	init_random_changeset(m_ch4, 2147483647, 4294967294, 128, apex);
+	add_tail(&k, &m_ch4->n);
+	assert(journal_store_changeset(j, m_ch4) == KNOT_EOK);
+	changeset_t *m_ch5 = changeset_new(apex);
+	init_random_changeset(m_ch5, 4294967294, 1, 128, apex);
+	add_tail(&k, &m_ch5->n);
+	assert(journal_store_changeset(j, m_ch5) == KNOT_EBUSY);
 	assert(journal_flush(j) == KNOT_EOK);
-	fprintf(stderr, "ksize=%zu\n", list_size(&k));
-	assert(journal_store_changeset(j, m_ch) == KNOT_EOK);
-	fprintf(stderr, "ksize=%zu\n", list_size(&k));
+	assert(journal_store_changeset(j, m_ch5) == KNOT_EOK);
 	assert(journal_flush(j) == KNOT_EOK);
-	fprintf(stderr, "ksize=%zu\n", list_size(&k));
 	ret = journal_load_changesets(j, &l, 0);
 	assert(EMPTY_LIST(l));
-	fprintf(stderr, "ksize=%zu\n", list_size(&k));
 	ret2 = journal_load_changesets(j, &l, 1);
 	assert(EMPTY_LIST(l));
-	fprintf(stderr, "ksize=%zu\n", list_size(&k));
 	int ret3 = journal_load_changesets(j, &l, 2);
 	fprintf(stderr, "ret=%d ret2=%d ret3=%d\n", ret, ret2, ret3);
-	fprintf(stderr, "ksize=%zu\n", list_size(&k));
 	ok(ret == KNOT_ENOENT && ret2 == KNOT_ENOENT && ret3 == KNOT_EOK &&
 	   changesets_list_eq(&l, &k), "journal: serial collision");
 	ret = journal_check(j, KNOT_JOURNAL_CHECK_INFO);
@@ -445,16 +439,24 @@ static void test_store_load(void)
 	/* Cleanup. */
 	changesets_free(&l);
 	changesets_free(&k);
+
+	//changeset_free(m_ch);
+
+
 	init_list(&l);
 	init_list(&k);
+
+	unset_conf();
 }
 
 const uint8_t * rdA = (const uint8_t *) "\x01\x02\x03\x04", * rdB = (const uint8_t *) "\x01\x02\x03\x05", * rdC = (const uint8_t *) "\x01\x02\x03\x06";
 
-static knot_rrset_t * tm_rrset(const knot_dname_t * owner, const uint8_t * rdata)
+// frees owner
+static knot_rrset_t * tm_rrset(knot_dname_t * owner, const uint8_t * rdata)
 {
 	knot_rrset_t * rrs = knot_rrset_new(owner, KNOT_RRTYPE_A, KNOT_CLASS_IN, NULL);
 	knot_rrset_add_rdata(rrs, rdata, 4, 3600, NULL);
+	free(owner);
 	return rrs;
 }
 
@@ -472,6 +474,15 @@ static knot_rrset_t * tm_rrs(const knot_dname_t * apex, int x)
 	static knot_rrset_t * rrsA = NULL;
 	static knot_rrset_t * rrsB = NULL;
 	static knot_rrset_t * rrsC = NULL;
+
+	if (apex == NULL) {
+		knot_rrset_free(&rrsA, NULL);
+		knot_rrset_free(&rrsB, NULL);
+		knot_rrset_free(&rrsC, NULL);
+		rrsA = rrsB = rrsC = NULL;
+		return NULL;
+	}
+
 	if (rrsA == NULL) rrsA = tm_rrset(tm_owner("aaaaaaaaaaaaaaaaa", apex), rdA);
 	if (rrsB == NULL) rrsB = tm_rrset(tm_owner("bbbbbbbbbbbbbbbbb", apex), rdB);
 	if (rrsC == NULL) rrsC = tm_rrset(tm_owner("ccccccccccccccccc", apex), rdC);
@@ -492,6 +503,8 @@ int tm_rrcnt(const changeset_t * ch, int flg)
 
 	knot_rrset_t rri;
 	while (rri = changeset_iter_next(&it), !knot_rrset_empty(&rri)) i++;
+
+	changeset_iter_clear(&it);
 	return i;
 }
 
@@ -499,7 +512,15 @@ static changeset_t * tm_chs(const knot_dname_t * apex, int x)
 {
 	static changeset_t * chsI = NULL, * chsX = NULL, * chsY = NULL;
 	static uint32_t serial = 0;
-	//int err;
+
+	if (apex == NULL) {
+		changeset_free(chsI);
+		changeset_free(chsX);
+		changeset_free(chsY);
+		chsI = chsX = chsY = NULL;
+		return NULL;
+	}
+
 //#define tm_chs_check(what) if ((err = (what)) != KNOT_EOK) printf("error: %s returned %d\n", #what, err)
 #define tm_chs_check(what) (what)
 
@@ -575,13 +596,19 @@ static void test_merge(void)
 	init_list(&l);
 	ret = journal_load_changesets(j, &l, (uint32_t) (i - 3));
 	ok(list_size(&l) == 4, "journal: read short history of merged/unmerged changesets");
+	changesets_free(&l);
 
 	ret = drop_journal(j, NULL);
 	assert(ret == KNOT_EOK);
 
 	// disallow merge
+	unset_conf();
 	set_conf(1000, 512 * 1024);
 	ok(!journal_merge_allowed(j), "journal: merge disallowed");
+
+	tm_rrs(NULL, 0);
+	tm_chs(NULL, 0);
+	unset_conf();
 }
 
 static void test_stress_base(journal_t *j, size_t update_size, size_t file_size)
@@ -626,6 +653,8 @@ static void test_stress_base(journal_t *j, size_t update_size, size_t file_size)
 	}
 
 	changeset_clear(&ch);
+
+	unset_conf();
 }
 
 
-- 
GitLab