From c8b151f0aaea7c8c1958a2d54afeeaf04a65e944 Mon Sep 17 00:00:00 2001 From: Jan Kadlec <jan.kadlec@nic.cz> Date: Thu, 17 Jan 2013 19:24:28 +0100 Subject: [PATCH] Fixed references to testing data. + error fixes - Fixed compilation errors and warning. --- src/Makefile.am | 109 +++- src/libknot/rrset.c | 86 ++-- src/libknot/rrset.h | 11 +- src/tests/libknot/libknot/rrset_tests.c | 633 +++++++++++++----------- 4 files changed, 505 insertions(+), 334 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index 5974f16fd..00774cd32 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -123,14 +123,119 @@ knot_zcompile_SOURCES = \ zscanner/scanner_functions.c unittests_libknot_SOURCES = \ + libknot/rrset.c \ + libknot/rrset.h \ + common/slab/slab.c \ + zcompile/zcompile-error.c \ + zcompile/zcompile.c \ + zscanner/test/processing.h \ + zscanner/test/processing.c \ + libknot/util/utils.c \ + libknot/util/debug.c \ + libknot/util/debug.h \ + libknot/util/utils.h \ + libknot/util/tolower.h \ + libknot/util/tolower.c \ + libknot/util/wire.h \ + libknot/packet/packet.h \ + libknot/packet/packet.c \ + libknot/packet/query.h \ + libknot/packet/query.c \ + libknot/zone/zone.c \ + libknot/zone/zone-contents.c \ + libknot/zone/zone-tree.c \ + libknot/zone/zone-tree.h \ + libknot/zone/node.h \ + libknot/zone/zone.h \ + libknot/zone/zone-contents.h \ + libknot/zone/node.c \ + libknot/zone/dname-table.h \ + libknot/zone/dname-table.c \ + libknot/zone/zonedb.h \ + libknot/zone/zonedb.c \ + libknot/dname.c \ + libknot/dname.h \ + libknot/nsec3.h \ + libknot/nsec3.c \ + libknot/edns.h \ + libknot/edns.c \ + libknot/tsig.h \ + libknot/tsig.c \ + libknot/tsig-op.h \ + libknot/tsig-op.c \ + common/slab/slab.h \ + common/libtap/tap.c \ + common/libtap/tap.h \ + common/libtap/tap_unit.h \ + common/hattrie/ahtable.c \ + common/hattrie/ahtable.h \ + common/hattrie/hat-trie.c \ + common/hattrie/hat-trie.h \ + common/hattrie/murmurhash3.c \ + common/hattrie/murmurhash3.h \ + common/mempattern.h \ + common/mempattern.c \ + common/descriptor_new.h \ + common/descriptor_new.c \ + common/lists.c \ + common/base64.c \ + common/base64.h \ + common/lists.h \ + common/heap.h \ + common/heap.c \ + common/print.c \ + common/print.h \ + common/skip-list.c \ + common/base32hex.c \ + common/skip-list.h \ + common/general-tree.h \ + common/general-tree.c \ + common/tree.h \ + common/base32hex.h \ + common/evqueue.h \ + common/evqueue.c \ + common/evsched.h \ + common/evsched.c \ + common/acl.h \ + common/acl.c \ + common/sockaddr.h \ + common/sockaddr.c \ + common/crc.h \ + common/ref.h \ + common/ref.c \ + common/errors.h \ + common/errors.c \ + common/errcode.h \ + common/errcode.c \ + common/dSFMT.h \ + common/dSFMT-params.h \ + common/dSFMT-params521.h \ + common/dSFMT.c \ + common/prng.h \ + common/prng.c \ + common/fdset.h \ + common/fdset.c \ + common/fdset_poll.h \ + common/fdset_poll.c \ + common/fdset_kqueue.h \ + common/fdset_kqueue.c \ + common/fdset_epoll.h \ + common/fdset_epoll.c \ + common/log.c \ + common/log.h \ + zscanner/file_loader.h \ + zscanner/file_loader.c \ + zscanner/scanner.h \ + zscanner/scanner.c \ + zscanner/scanner_functions.h \ + zscanner/scanner_functions.c \ tests/libknot/libknot/rrset_tests.c \ tests/libknot/libknot/rrset_tests.h \ tests/libknot/unittests_libknot.c - knot_zcompile_LDADD = @LIBOBJS@ -unittests_libknot_LDADD = knot-zcompile.la @LIBOBJS@ +unittests_libknot_LDADD = @LIBOBJS@ # automake complains on % rules: # `%'-style pattern rules are a GNU make extension diff --git a/src/libknot/rrset.c b/src/libknot/rrset.c index ed3effff3..985510a54 100644 --- a/src/libknot/rrset.c +++ b/src/libknot/rrset.c @@ -355,7 +355,6 @@ void knot_rrset_set_owner(knot_rrset_t *rrset, knot_dname_t* owner) rrset->owner = owner; } } -int knot_dname_compare_non_canon(const knot_dname_t *d1, const knot_dname_t *d2) /*----------------------------------------------------------------------------*/ @@ -456,7 +455,6 @@ static int rrset_rdata_compare_one(const knot_rrset_t *rrset1, for (int i = 0; desc->block_types[i] != KNOT_RDATA_WF_END; i++) { if (descriptor_item_is_dname(desc->block_types[i])) { cmp = knot_dname_compare((knot_dname_t *)(r1 + offset), - n_canon (knot_dname_t *)(r2 + offset)); offset += sizeof(knot_dname_t *); } else if (descriptor_item_is_fixed(desc->block_types[i])) { @@ -1500,54 +1498,31 @@ const uint8_t *knot_rrset_rdata_nsec3_salt(const knot_rrset_t *rrset, return rrset_rdata_pointer(rrset, pos) + 4; } -const knot_dname_t *knot_rrset_next_dname(const knot_rrset_t *rrset, - const knot_dname_t *prev_dname) -{ - return (const knot_dname_t *)knot_rrset_get_next_dname(rrset, - (knot_dname_t *)prev_dname); -} - -knot_dname_t *knot_rrset_get_next_dname(const knot_rrset_t *rrset, - knot_dname_t *prev_dname) +static knot_dname_t **knot_rrset_rdata_get_next_dname_pointer( + const knot_rrset_t *rrset, + knot_dname_t **prev_dname, size_t pos) { if (rrset == NULL) { return NULL; } - for (uint16_t i = 0; i < rrset->rdata_count; i++) { - knot_dname_t **ret = - knot_rrset_rdata_get_next_dname_pointer(rrset, - &prev_dname, i); - if (ret != NULL) { - return *ret; - } - } - - return NULL; -} - -knot_dname_t **knot_rrset_get_next_dname_pointer(const knot_rrset_t *rrset, - knot_dname_t **prev_dname) -{ - if (rrset == NULL) { - return NULL; - } + printf("previous: %s %d %p\n", (prev_dname != NULL) ? knot_dname_to_str(*prev_dname) : "null", + pos, prev_dname); // Get descriptor const rdata_descriptor_t *desc = get_rdata_descriptor(rrset->type); int next = 0; + size_t offset = 0; + uint8_t *rdata = rrset_rdata_pointer(rrset, pos); if (prev_dname == NULL) { next = 1; } - - for (uint16_t pos = 0; pos < rrset->rdata_count; pos++) { - size_t offset = 0; - uint8_t *rdata = rrset_rdata_pointer(rrset, pos); // Cycle through blocks and find dnames for (int i = 0; desc->block_types[i] != KNOT_RDATA_WF_END; i++) { if (descriptor_item_is_dname(desc->block_types[i])) { if (next) { +// toto je imho spatne, ale who knows TODO assert(rdata + offset); return (knot_dname_t **)(rdata + offset); } @@ -1590,37 +1565,59 @@ knot_dname_t **knot_rrset_get_next_dname_pointer(const knot_rrset_t *rrset, */ offset += sizeof(knot_dname_t *); // now it does } - //TODO remainder matters too! - } } + return NULL; } -knot_dname_t **knot_rrset_rdata_get_next_dname_pointer( - const knot_rrset_t *rrset, - knot_dname_t **prev_dname, size_t pos) +const knot_dname_t *knot_rrset_next_dname(const knot_rrset_t *rrset, + const knot_dname_t *prev_dname) +{ + return (const knot_dname_t *)knot_rrset_get_next_dname(rrset, + (knot_dname_t *)prev_dname); +} + +knot_dname_t *knot_rrset_get_next_dname(const knot_rrset_t *rrset, + knot_dname_t *prev_dname) { if (rrset == NULL) { return NULL; } - printf("previous: %s %d %p\n", (prev_dname != NULL) ? knot_dname_to_str(*prev_dname) : "null", - pos, prev_dname); + for (uint16_t i = 0; i < rrset->rdata_count; i++) { + knot_dname_t **ret = + knot_rrset_rdata_get_next_dname_pointer(rrset, + &prev_dname, i); + if (ret != NULL) { + return *ret; + } + } + + return NULL; +} + +knot_dname_t **knot_rrset_get_next_dname_pointer(const knot_rrset_t *rrset, + knot_dname_t **prev_dname) +{ + if (rrset == NULL) { + return NULL; + } // Get descriptor const rdata_descriptor_t *desc = get_rdata_descriptor(rrset->type); int next = 0; - size_t offset = 0; - uint8_t *rdata = rrset_rdata_pointer(rrset, pos); if (prev_dname == NULL) { next = 1; } + + for (uint16_t pos = 0; pos < rrset->rdata_count; pos++) { + size_t offset = 0; + uint8_t *rdata = rrset_rdata_pointer(rrset, pos); // Cycle through blocks and find dnames for (int i = 0; desc->block_types[i] != KNOT_RDATA_WF_END; i++) { if (descriptor_item_is_dname(desc->block_types[i])) { if (next) { -// toto je imho spatne, ale who knows TODO assert(rdata + offset); return (knot_dname_t **)(rdata + offset); } @@ -1663,8 +1660,9 @@ knot_dname_t **knot_rrset_rdata_get_next_dname_pointer( */ offset += sizeof(knot_dname_t *); // now it does } + //TODO remainder matters too! + } } - return NULL; } diff --git a/src/libknot/rrset.h b/src/libknot/rrset.h index d223205d3..77be026b7 100644 --- a/src/libknot/rrset.h +++ b/src/libknot/rrset.h @@ -336,7 +336,7 @@ void knot_rrset_deep_free(knot_rrset_t **rrset, int free_owner, * \retval KNOT_EOK * \retval KNOT_EINVAL if the RRSets could not be merged, because their * Owner, Type, Class or TTL does not match. - * / + */ int knot_rrset_merge(void **r1, void **r2); @@ -402,15 +402,6 @@ const uint8_t *knot_rrset_rdata_nsec3param_salt(const knot_rrset_t *rrset); knot_dname_t *knot_rrset_get_next_dname(const knot_rrset_t *rrset, knot_dname_t *prev_dname); -const knot_dname_t *knot_rrset_rdata_next_dname(const knot_rrset_t *rrset, - const knot_dname_t *prev_dname, - size_t pos); - -knot_dname_t **knot_rrset_rdata_get_next_dname_pointer( - const knot_rrset_t *rrset, - knot_dname_t **prev_dname, size_t pos); - - knot_dname_t **knot_rrset_get_next_dname_pointer(const knot_rrset_t *rrset, knot_dname_t **prev_dname); diff --git a/src/tests/libknot/libknot/rrset_tests.c b/src/tests/libknot/libknot/rrset_tests.c index 3cfd00483..b0cf0f719 100644 --- a/src/tests/libknot/libknot/rrset_tests.c +++ b/src/tests/libknot/libknot/rrset_tests.c @@ -22,6 +22,7 @@ #include "common/errcode.h" #include "libknot/rrset.h" #include "libknot/util/wire.h" +#include "common/mempattern.h" static int knot_rrset_tests_count(int argc, char *argv[]); static int knot_rrset_tests_run(int argc, char *argv[]); @@ -39,9 +40,9 @@ unit_api rrset_tests_api = { */ enum rrset_test_const { - TEST_RRSET_COUNT = 6, - TEST_RDATA_COUNT = 6, - TEST_DNAME_COUNT = 8, + TEST_RRSET_COUNT = 13, + TEST_RDATA_COUNT = 10, + TEST_DNAME_COUNT = 11, TEST_RDATA_A_LESS = 0, TEST_RDATA_A_GT = 1, TEST_RDATA_NS_LESS = 2, @@ -74,18 +75,18 @@ enum rrset_test_const { TEST_DNAME_GREATER = 2 }; -static uint8_t *test_dname_strings[TEST_DNAME_COUNT] = { - (uint8_t *)"a.dname.com.", - (uint8_t *)"b.dname.com.", - (uint8_t *)"c.dname.com.", - (uint8_t *)"d.dname.com.", - (uint8_t *)"e.dname.com.", - (uint8_t *)"f.dname.com.", - (uint8_t *)"ns1.nic.cz.", - (uint8_t *)"ns2.nic.cz.", - (uint8_t *)"ns3.nic.cz.", - (uint8_t *)"ns4.nic.cz.", - (uint8_t *)"ns5.nic.cz." +static char *test_dname_strings[TEST_DNAME_COUNT] = { + "a.dname.com.", + "b.dname.com.", + "c.dname.com.", + "d.dname.com.", + "e.dname.com.", + "f.dname.com.", + "ns1.nic.cz.", + "ns2.nic.cz.", + "ns3.nic.cz.", + "ns4.nic.cz.", + "ns5.nic.cz." }; static knot_dname_t *test_dnames[TEST_DNAME_COUNT]; @@ -101,64 +102,60 @@ typedef struct test_rdata test_rdata_t; struct test_rrset { int owner_id; - knot_rrset_t *rrset; + knot_rrset_t rrset; uint8_t *header_wire; size_t header_wire_size; uint8_t *rdata_wire; size_t rdata_wire_size; size_t rr_count; - test_rdata_t *test_rdata[16]; + int test_rdata_indices[16]; + test_rdata_t **test_rdata; }; typedef struct test_rrset test_rrset_t; /* Artificial RDATA definitions: */ -test_rdata_t test_rdata_array[TEST_RDATA_COUNT] = { -/* A type: */ +static test_rdata_t test_rdata_array[TEST_RDATA_COUNT] = { [TEST_RDATA_A_LESS] = {(uint8_t *)"\x1\x1\x1\0", (uint8_t *)"\x1\x1\x1\1", 4, 4}, -/* A < previous */ [TEST_RDATA_A_GT] = {(uint8_t *)"\x1\x1\x1\1", (uint8_t *)"\x1\x1\x1\0", 4, 4}, -/* NS Domain names: (Will be filled dynamically) */ [TEST_RDATA_NS_LESS] = {NULL, NULL, sizeof(knot_dname_t *), 0}, [TEST_RDATA_NS_GT] = {NULL, NULL, sizeof(knot_dname_t *), 0}, -/* MX type: (raw data + DNAME) */ - [TEST_RDATA_MX_DNAME_LESS] = {"\x0\x1", NULL, sizeof(knot_dname_t *) + 2, 0}, - [TEST_RDATA_MX_DNAME_GT] = {"\x0\x1", NULL, sizeof(knot_dname_t *) + 2, 0}, - [TEST_RDATA_MX_BIN_LESS] = {"\x0\x1", NULL, sizeof(knot_dname_t *) + 2, 0}, - [TEST_RDATA_MX_BIN_GT] = {"\x0\x2", NULL, sizeof(knot_dname_t *) + 2, 0}, + [TEST_RDATA_MX_DNAME_LESS] = {(uint8_t *)"\x0\x1", NULL, sizeof(knot_dname_t *) + 2, 0}, + [TEST_RDATA_MX_DNAME_GT] = {(uint8_t *)"\x0\x1", NULL, sizeof(knot_dname_t *) + 2, 0}, + [TEST_RDATA_MX_BIN_LESS] = {(uint8_t *)"\x0\x1", NULL, sizeof(knot_dname_t *) + 2, 0}, + [TEST_RDATA_MX_BIN_GT] = {(uint8_t *)"\x0\x2", NULL, sizeof(knot_dname_t *) + 2, 0}, [TEST_RDATA_MINFO1] = {NULL, NULL, sizeof(knot_dname_t *) * 2, 0}, [TEST_RDATA_MINFO2] = {NULL, NULL, sizeof(knot_dname_t *) * 2, 0} }; -test_rrset_t test_rrset_array[TEST_RRSET_COUNT] = { +static test_rrset_t test_rrset_array[TEST_RRSET_COUNT] = { [TEST_RRSET_A_LESS] = {TEST_DNAME_GENERIC, {NULL, KNOT_RRTYPE_A, KNOT_CLASS_IN, 3600, NULL, NULL, 0, NULL}, - NULL, 0, NULL, 0, 1, {test_rdata_array[TEST_RDATA_A_LESS]}}, // A < + NULL, 0, NULL, 0, 1, {TEST_RDATA_A_LESS}, NULL}, [TEST_RRSET_A_GT] = {TEST_DNAME_GENERIC, {NULL, KNOT_RRTYPE_A, KNOT_CLASS_IN, 3600, NULL, NULL, 0, NULL}, - NULL, 0, NULL, 0, 1, {test_rdata_array[TEST_RDATA_A_GT]}}, // A > - [TEST_RRSET_NS_LESS] = {TEST_DNAME_GENERIC, {NULL, KNOT_RRTYPE_NS, KNOT_CLASS_IN, 3600, NULL, NULL, 0, NULL} - NULL, 0, NULL, 0, 1, {test_rdata_array[TEST_RDATA_NS_LESS]}}, // < - [TEST_RRSET_NS_GT] = {TEST_DNAME_GENERIC, {NULL, KNOT_RRTYPE_NS, KNOT_CLASS_IN, 3600, NULL, NULL, 0, NULL} - NULL, 0, NULL, 0, 1, {test_rdata_array[TEST_RDATA_NS_GT]}}, // < - [TEST_RRSET_MX_DNAME_LESS] = {TEST_DNAME_GENERIC, {NULL, KNOT_RRTYPE_MX, KNOT_CLASS_IN, 3600, NULL, NULL, 0, NULL} - NULL, 0, NULL, 0, 1, {test_rdata_array[TEST_RDATA_MX_DNAME_LESS]}}, // < - [TEST_RRSET_MX_DNAME_GT] = {TEST_DNAME_GENERIC, {NULL, KNOT_RRTYPE_MX, KNOT_CLASS_IN, 3600, NULL, NULL, 0, NULL} - NULL, 0, NULL, 0, 1, {test_rdata_array[TEST_RDATA_MX_DNAME_GT]}}, // < - [TEST_RRSET_MX_BIN_LESS] = {TEST_DNAME_GENERIC, {NULL, KNOT_RRTYPE_MX, KNOT_CLASS_IN, 3600, NULL, NULL, 0, NULL} - NULL, 0, NULL, 0, 1, {test_rdata_array[TEST_RDATA_MX_BIN_LESS]}}, // < - [TEST_RRSET_MX_BIN_GT] = {TEST_DNAME_GENERIC, {NULL, KNOT_RRTYPE_MX, KNOT_CLASS_IN, 3600, NULL, NULL, 0, NULL} - NULL, 0, NULL, 0, 1, {test_rdata_array[TEST_RDATA_MX_BIN_GT]}}, // < - [TEST_RRSET_MINFO] = {TEST_DNAME_GENERIC, {NULL, KNOT_RRTYPE_MINFO, KNOT_CLASS_IN, 3600, NULL, NULL, 0, NULL} - NULL, 0, NULL, 0, 1, {test_rdata_array[TEST_RDATA_MINFO1]}}, // < - [TEST_RRSET_MINFO_MULTIPLE] = {TEST_DNAME_GENERIC, {NULL, KNOT_RRTYPE_MINFO, KNOT_CLASS_IN, 3600, NULL, NULL, 0, NULL} - NULL, 0, NULL, 0, 2, {test_rdata_array[TEST_RDATA_MINFO1], test_rdata_array[TEST_RDATA_MINFO2]}}, // < + NULL, 0, NULL, 0, 1, {TEST_RDATA_A_GT}, NULL}, + [TEST_RRSET_NS_LESS] = {TEST_DNAME_GENERIC, {NULL, KNOT_RRTYPE_NS, KNOT_CLASS_IN, 3600, NULL, NULL, 0, NULL}, + NULL, 0, NULL, 0, 1, {TEST_RDATA_NS_LESS}, NULL}, + [TEST_RRSET_NS_GT] = {TEST_DNAME_GENERIC, {NULL, KNOT_RRTYPE_NS, KNOT_CLASS_IN, 3600, NULL, NULL, 0, NULL}, + NULL, 0, NULL, 0, 1, {TEST_RDATA_NS_GT}, NULL}, + [TEST_RRSET_MX_DNAME_LESS] = {TEST_DNAME_GENERIC, {NULL, KNOT_RRTYPE_MX, KNOT_CLASS_IN, 3600, NULL, NULL, 0, NULL}, + NULL, 0, NULL, 0, 1, {TEST_RDATA_MX_DNAME_LESS}, NULL}, + [TEST_RRSET_MX_DNAME_GT] = {TEST_DNAME_GENERIC, {NULL, KNOT_RRTYPE_MX, KNOT_CLASS_IN, 3600, NULL, NULL, 0, NULL}, + NULL, 0, NULL, 0, 1, {TEST_RDATA_MX_DNAME_GT}, NULL}, + [TEST_RRSET_MX_BIN_LESS] = {TEST_DNAME_GENERIC, {NULL, KNOT_RRTYPE_MX, KNOT_CLASS_IN, 3600, NULL, NULL, 0, NULL}, + NULL, 0, NULL, 0, 1, {TEST_RDATA_MX_BIN_LESS}, NULL}, + [TEST_RRSET_MX_BIN_GT] = {TEST_DNAME_GENERIC, {NULL, KNOT_RRTYPE_MX, KNOT_CLASS_IN, 3600, NULL, NULL, 0, NULL}, + NULL, 0, NULL, 0, 1, {TEST_RDATA_MX_BIN_GT}, NULL}, + [TEST_RRSET_MINFO] = {TEST_DNAME_GENERIC, {NULL, KNOT_RRTYPE_MINFO, KNOT_CLASS_IN, 3600, NULL, NULL, 0, NULL}, + NULL, 0, NULL, 0, 1, {TEST_RDATA_MINFO1}, NULL}, + [TEST_RRSET_MINFO_MULTIPLE] = {TEST_DNAME_GENERIC, {NULL, KNOT_RRTYPE_MINFO, KNOT_CLASS_IN, 3600, NULL, NULL, 0, NULL}, + NULL, 0, NULL, 0, 2, {TEST_RDATA_MINFO1, TEST_RDATA_MINFO2}, NULL}, [TEST_RRSET_MERGE_RESULT1] = {TEST_DNAME_GENERIC, {NULL, KNOT_RRTYPE_A, KNOT_CLASS_IN, 3600, NULL, NULL, 0, NULL}, - NULL, 0, NULL, 0, 2, {test_rdata_array[TEST_RDATA_A_LESS], test_rdata_array[TEST_RDATA_A_GT]}}, // A < + NULL, 0, NULL, 0, 2, {TEST_RDATA_A_LESS, TEST_RDATA_A_GT}, NULL}, [TEST_RRSET_OWNER_LESS] = {TEST_DNAME_LESS, {NULL, KNOT_RRTYPE_A, KNOT_CLASS_IN, 3600, NULL, NULL, 0, NULL}, - NULL, 0, NULL, 0, 1, {test_rdata_array[TEST_RDATA_A_LESS]}}, // A < + NULL, 0, NULL, 0, 1, {TEST_RDATA_A_LESS}, NULL}, [TEST_RRSET_OWNER_GT] = {TEST_DNAME_GREATER, {NULL, KNOT_RRTYPE_A, KNOT_CLASS_IN, 3600, NULL, NULL, 0, NULL}, - NULL, 0, NULL, 0, 1, {test_rdata_array[TEST_RDATA_A_LESS]}}, // A < - } + NULL, 0, NULL, 0, 1, {TEST_RDATA_A_LESS}, NULL} }; static void create_test_dnames() @@ -168,22 +165,32 @@ static void create_test_dnames() knot_dname_new_from_str(test_dname_strings[i], strlen(test_dname_strings[i]), NULL); - if (test_dnames[i] == NULL) { - diag("Failed to create test dname.\n"); - return -1; - } } } static void create_test_rdata() { /* NS, MX and MINFO types need init. */ - memcpy(test_rdata_array[TEST_RDATA_MX_1].rdata + 2, &test_dnames[0], + memcpy(test_rdata_array[TEST_RDATA_NS_LESS].rdata + 2, &test_dnames[0], + sizeof(knot_dname_t *)); + memcpy(test_rdata_array[TEST_RDATA_NS_GT].rdata + 2, &test_dnames[0], + sizeof(knot_dname_t *)); + memcpy(test_rdata_array[TEST_RDATA_MX_DNAME_LESS].rdata + 2, &test_dnames[0], sizeof(knot_dname_t *)); - memcpy(test_rdata_array[TEST_RDATA_MX_2].rdata + 2, &test_dnames[1], + memcpy(test_rdata_array[TEST_RDATA_MX_DNAME_GT].rdata + 2, &test_dnames[1], sizeof(knot_dname_t *)); - memcpy(test_rdata_array[TEST_RDATA_MX_3].rdata + 2, &test_dnames[2], + memcpy(test_rdata_array[TEST_RDATA_MX_BIN_LESS].rdata + 2, &test_dnames[2], sizeof(knot_dname_t *)); + memcpy(test_rdata_array[TEST_RDATA_MX_BIN_GT].rdata + 2, &test_dnames[2], + sizeof(knot_dname_t *)); + memcpy(test_rdata_array[TEST_RDATA_MINFO1].rdata, &test_dnames[0], + sizeof(knot_dname_t *)); + memcpy(test_rdata_array[TEST_RDATA_MINFO1].rdata + sizeof(knot_dname_t *), + &test_dnames[1], sizeof(knot_dname_t *)); + memcpy(test_rdata_array[TEST_RDATA_MINFO2].rdata, &test_dnames[2], + sizeof(knot_dname_t *)); + memcpy(test_rdata_array[TEST_RDATA_MINFO2].rdata + sizeof(knot_dname_t *), + &test_dnames[3], sizeof(knot_dname_t *)); } static void create_test_rrsets() @@ -191,28 +198,31 @@ static void create_test_rrsets() for (int i = 0; i < TEST_RRSET_COUNT; i++) { test_rrset_t test_rrset = test_rrset_array[i]; /* Assign owner. */ - test_rrset.rrset->owner = test_dnames[test_rrset.owner_id]; + test_rrset.rrset.owner = test_dnames[test_rrset.owner_id]; /* Create header wire. */ test_rrset.header_wire = - xmalloc(test_rrset.rrset->owner->size + 8 + 2); + xmalloc(test_rrset.rrset.owner->size + 8 + 2); /* Copy owner wire to header wire. */ - memcpy(test_rrset.header_wire, test_rrset.rrset->owner->name, - test_rrset.rrset->owner->size); + memcpy(test_rrset.header_wire, test_rrset.rrset.owner->name, + test_rrset.rrset.owner->size); /* Copy type to wire. */ - size_t offset = test_rrset.rrset->owner->size; + size_t offset = test_rrset.rrset.owner->size; knot_wire_write_u16(test_rrset.header_wire + offset, - test_rrset.rrset->type); + test_rrset.rrset.type); offset += sizeof(uint16_t); /* Copy class to wire. */ knot_wire_write_u16(test_rrset.header_wire + offset, - test_rrset.rrset->rclass); + test_rrset.rrset.rclass); offset += sizeof(uint16_t); /* Copy TTL to wire. */ knot_wire_write_u32(test_rrset.header_wire + offset, - test_rrset.rrset->TTL); + test_rrset.rrset.ttl); offset += sizeof(uint32_t); uint16_t rdlength = 0; + test_rrset.test_rdata = + xmalloc(sizeof(void *) * test_rrset.rr_count); for (int j = 0; j < test_rrset.rr_count; j++) { + test_rrset.test_rdata[j] = &test_rdata_array[j]; rdlength += test_rrset.test_rdata[j]->wire_size; } /* Copy RDLENGTH to wire. */ @@ -220,21 +230,21 @@ static void create_test_rrsets() rdlength); /* Assign RDATA (including indices). */ offset = 0; - test_rrset.rrset->rdata_indices = + test_rrset.rrset.rdata_indices = xmalloc(sizeof(uint32_t) * test_rrset.rr_count); for (int j = 0; j < test_rrset.rr_count; j++) { if (j > 0) { - test_rrset.rrset->rdata_indices[j - 1] = + test_rrset.rrset.rdata_indices[j - 1] = test_rrset.test_rdata[j]->size; } - memcpy(test_rrset.rrset->rdata + offset, + memcpy(test_rrset.rrset.rdata + offset, test_rrset.test_rdata[j]->rdata, test_rrset.test_rdata[j]->size); offset += test_rrset.test_rdata[j]->size; } /* Store sum of indices to the last index. */ - test_rrset.rrset->rdata_indices[test_rrset.rr_count - 1] = + test_rrset.rrset.rdata_indices[test_rrset.rr_count - 1] = offset; /* Store RDATA wire. */ offset = 0; @@ -254,7 +264,7 @@ static int check_rrset_values(const knot_rrset_t *rrset, { int errors = 0; - if (rrset->dname != dname) { + if (rrset->owner != dname) { diag("Wrong DNAME in the created RRSet.\n"); ++errors; } @@ -385,16 +395,16 @@ static int test_rrset_create_rdata() } /* Make sure that the data in the RRSet are the same. */ - ret = memcmp(rrset->rdata + test_rdata_array[0].size, data2, - test_rdata_array[1].rdata); + ret = memcmp(rrset->rdata + test_rdata_array[0].size, + test_rdata_array[1].rdata, test_rdata_array[1].size); if (ret) { diag("Wrong data inserted into RRSet.\n"); return 0; } /* Test that data of length 0 are not inserted. */ - void *ret = knot_rrset_create_rdata(rrset, 0); - if (ret != NULL) { + void *ret_ptr = knot_rrset_create_rdata(rrset, 0); + if (ret_ptr != NULL) { diag("Empty RDATA inserted.\n"); return 0; } @@ -402,14 +412,17 @@ static int test_rrset_create_rdata() return 1; } -static int test_rrset_rdata_item_size(const knot_rrset_t *rrset) +static int test_rrset_rdata_item_size() { - if (rrset_rdata_item_size(rrset, 0) != DATA1_LENGTH) { + /*!< \todo More thorough test. */ + knot_rrset_t *rrset = + &test_rrset_array[TEST_RRSET_MINFO_MULTIPLE].rrset; + if (rrset_rdata_item_size(rrset, 0) != sizeof(knot_dname_t *)) { diag("Wrong item length read from RRSet (first item).\n"); return 0; } - if (rrset_rdata_item_size(rrset, 1) != DATA2_LENGTH) { + if (rrset_rdata_item_size(rrset, 1) != sizeof(knot_dname_t *)) { diag("Wrong item length read from RRSet (last item).\n"); return 0; } @@ -417,104 +430,115 @@ static int test_rrset_rdata_item_size(const knot_rrset_t *rrset) return 1; } -static int test_rrset_get_rdata(const knot_rrset_t *rrset) +static int test_rrset_get_rdata() { - uint8_t *pointer = knot_rrset_get_rdata(rrset, 0); - if (pointer == NULL) { - diag("Could not ger RDATA from RRSet.\n"); - return 0; - } - - int ret = memcmp(pointer, RDATA_INIT_1, DATA1_LENGTH); - if (ret) { - diag("Got bad RDATA from RRSet.\n"); - return 0; - } - - pointer = knot_rrset_get_rdata(rrset, 1); - if (pointer == NULL) { - diag("Could not ger RDATA from RRSet.\n"); - return 0; - } - - ret = memcmp(pointer, RDATA_INIT_2, DATA2_LENGTH); - if (ret) { - diag("Got bad RDATA from RRSet.\n"); - return 0; - } +// uint8_t *pointer = knot_rrset_get_rdata(rrset, 0); +// if (pointer == NULL) { +// diag("Could not ger RDATA from RRSet.\n"); +// return 0; +// } + +// int ret = memcmp(pointer, RDATA_INIT_1, DATA1_LENGTH); +// if (ret) { +// diag("Got bad RDATA from RRSet.\n"); +// return 0; +// } + +// pointer = knot_rrset_get_rdata(rrset, 1); +// if (pointer == NULL) { +// diag("Could not ger RDATA from RRSet.\n"); +// return 0; +// } + +// ret = memcmp(pointer, RDATA_INIT_2, DATA2_LENGTH); +// if (ret) { +// diag("Got bad RDATA from RRSet.\n"); +// return 0; +// } return 1; } -static int test_rrset_shallow_copy(const knot_rrset_t *rrset) +static int test_rrset_shallow_copy() { - knot_rrset_t *rrset_copy = NULL; - - int ret = knot_rrset_shallow_copy(rrset, &rrset_copy); - if (ret != KNOT_EOK) { - diag("Could not copy RRSet.\n"); - return 0; - } + for (int i = 0; i < TEST_RRSET_COUNT; i++) { + knot_rrset_t *rrset_copy = NULL; + knot_rrset_t *rrset = &test_rrset_array[i].rrset; + int ret = knot_rrset_shallow_copy(rrset, + &rrset_copy); + if (ret != KNOT_EOK) { + knot_rrset_free(&rrset_copy); + diag("Could not copy RRSet.\n"); + return 0; + } - /* Check that created RRSet has the same as the old one. */ - int errors = check_rrset_values(rrset_copy, rrset->owner, rrset->type, - rrset->rclass, rrset->ttl, - rrset->rdata_count); - if (errors) { - return 0; - } + /* Check that created RRSet has the same as the old one. */ + int errors = check_rrset_values(rrset_copy, rrset->owner, rrset->type, + rrset->rclass, rrset->ttl, + rrset->rdata_count); + if (errors) { + knot_rrset_free(&rrset_copy); + return 0; + } - /* Check that created RRSet has the same RDATA. */ - if (rrset->rdata != rrset_copy->rdata) { - diag("RDATA in the new RRSet do not match.\n"); - return 0; - } + /* Check that created RRSet has the same RDATA. */ + if (rrset->rdata != rrset_copy->rdata) { + diag("RDATA in the new RRSet do not match.\n"); + knot_rrset_free(&rrset_copy); + return 0; + } - /* Check that RDATA indices are the same. */ - if (rrset->rdata_indices != rrset_copy->rdata_indices) { - diag("RDATA indices in the new RRSet do not match.\n"); - return 0; + /* Check that RDATA indices are the same. */ + if (rrset->rdata_indices != rrset_copy->rdata_indices) { + diag("RDATA indices in the new RRSet do not match.\n"); + knot_rrset_free(&rrset_copy); + return 0; + } } - knot_rrset_free(&rrset_copy); - return (errors == 0); + return 1; } -static int test_rrset_deep_copy(const knot_rrset_t *rrset) +static int test_rrset_deep_copy() { + for (int i = 0; i < TEST_RRSET_COUNT; i++) { + knot_rrset_t *rrset_copy = NULL; + knot_rrset_t *rrset = &test_rrset_array[i].rrset; + int ret = knot_rrset_deep_copy(rrset, &rrset_copy, 1); + if (ret != KNOT_EOK) { + diag("Could not copy RRSet.\n"); + return 0; + } - knot_rrset_t *rrset_copy = NULL; - - int ret = knot_rrset_deep_copy(rrset, &rrset_copy); - if (ret != KNOT_EOK) { - diag("Could not copy RRSet.\n"); - return 0; - } - - /* Check that created RRSet has the same as the old one. */ - int errors = check_rrset_values(rrset_copy, rrset->owner, rrset->type, - rrset->rclass, rrset->ttl, - rrset->rdata_count); - if (errors) { - return 0; - } + /* Check that created RRSet has the same as the old one. */ + int errors = check_rrset_values(rrset_copy, rrset->owner, rrset->type, + rrset->rclass, rrset->ttl, + rrset->rdata_count); + if (errors) { + knot_rrset_deep_free(&rrset_copy, 1, 1); + return 0; + } - /* Check that RDATA indices contain the same data. */ - ret = memcmp(rrset->rdata_indices, rrset_copy->rdata_indices, - rrset->rdata_count); - if (ret) { - diag("Copied RRSet has different RDATA indices.\n"); - return 0; - } + /* Check that RDATA indices contain the same data. */ + ret = memcmp(rrset->rdata_indices, rrset_copy->rdata_indices, + rrset->rdata_count); + if (ret) { + diag("Copied RRSet has different RDATA indices.\n"); + knot_rrset_deep_free(&rrset_copy, 1, 1); + return 0; + } - /* - * Go through RDATA and compare blocks. Cannot compare the whole thing - * since DNAMEs are copied as well and will have different address. - */ - ret = knot_rrset_compare_rdata(rrset, rrset_copy); - if (ret) { - diag("Copied RRSet has different RDATA.\n"); - return 0; + /* + * Go through RDATA and compare blocks. Cannot compare the whole thing + * since DNAMEs are copied as well and will have different address. + */ + ret = knot_rrset_compare_rdata(rrset, rrset_copy); + if (ret) { + diag("Copied RRSet has different RDATA.\n"); + knot_rrset_deep_free(&rrset_copy, 1, 1); + return 0; + } + knot_rrset_deep_free(&rrset_copy, 1, 1); } return 1; @@ -528,7 +552,7 @@ static int test_rrset_to_wire() for (int i = 0; i < TEST_RRSET_COUNT; i++) { wire_size = 65535; /* Convert to wire. */ - int ret = knot_rrset_to_wire(test_rrset_array[i].rrset, wire, + int ret = knot_rrset_to_wire(&test_rrset_array[i].rrset, wire, &wire_size, &rr_count); if (ret) { diag("Could not convert RRSet to wire.\n"); @@ -538,7 +562,7 @@ static int test_rrset_to_wire() /* Check that the header is OK. */ ret = memcmp(wire, test_rrset_array[i].header_wire, test_rrset_array[i].header_wire_size); - if (cmp) { + if (ret) { diag("Header of RRSet %d is wrongly converted.\n", i); return 0; @@ -546,9 +570,9 @@ static int test_rrset_to_wire() /* Check that the RDATA are OK. */ ret = memcmp(wire + test_rrset_array[i].header_wire_size, - test_rrset_array[i].rdata, - test_rrset_array[i].rdata_size); - if (cmp) { + test_rrset_array[i].rdata_wire, + test_rrset_array[i].rdata_wire_size); + if (ret) { diag("RDATA of RRSet %d are wrongly converted.\n", i); return 0; @@ -557,7 +581,7 @@ static int test_rrset_to_wire() /* Check that function does not crash if given small wire. */ wire_size = 5; // even header does not fit - ret = knot_rrset_to_wire(test_rrset_array[i].rrset, wire, + int ret = knot_rrset_to_wire(&test_rrset_array[0].rrset, wire, &wire_size, &rr_count); if (ret != KNOT_ESPACE) { diag("RRSet was converted to wire even though twe wire was" @@ -565,7 +589,7 @@ static int test_rrset_to_wire() return 0; } wire_size = 25; // even RDATA do not fit TODO check those values - ret = knot_rrset_to_wire(test_rrset_array[i].rrset, wire, + ret = knot_rrset_to_wire(&test_rrset_array[0].rrset, wire, &wire_size, &rr_count); if (ret != KNOT_ESPACE) { diag("RRSet was converted to wire even though twe wire was" @@ -578,13 +602,15 @@ static int test_rrset_to_wire() static int test_rrset_merge() { - knot_rrset_t *merge_to = - knot_rrset_deep_copy(test_rrset_array[0].rrset); - knot_rrset_t *merge_from = - knot_rrset_deep_copy(test_rrset_array[1].rrset); + knot_rrset_t *merge_to; + knot_rrset_deep_copy(&test_rrset_array[TEST_RRSET_MERGE_UNIQUE1].rrset, + &merge_to, 1); + knot_rrset_t *merge_from; + knot_rrset_deep_copy(&test_rrset_array[TEST_RRSET_MERGE_UNIQUE2].rrset, + &merge_from, 1); assert(merge_to); assert(merge_from); - int ret = knot_rrset_merge(&merge_to, &merge_from); + int ret = knot_rrset_merge((void **)&merge_to, (void **)&merge_from); if (ret) { diag("Could not merge RRSets.\n"); knot_rrset_deep_free(&merge_to, 1, 1); @@ -594,13 +620,15 @@ static int test_rrset_merge() //TODO check that merge operation does not cahgne second rr //TODO check that two RRSet that are not mergable will not merge - if (knot_rrset_compare(test_rrset_array[2].rrset, merge_from, + if (knot_rrset_compare(&test_rrset_array[TEST_RRSET_MERGE_UNIQUE2].rrset, + merge_from, KNOT_RRSET_COMPARE_WHOLE)) { diag("Merge corrupted second RRSet.\n"); return 0; } - if (merge_to->rdata_count != test_rrset_array[0].rrset->rdata_count + + if (merge_to->rdata_count != + test_rrset_array[TEST_RRSET_MERGE_UNIQUE1].rrset.rdata_count + merge_from->rdata_count) { diag("Not all RDATA were merged.\n"); knot_rrset_deep_free(&merge_to, 1, 1); @@ -610,7 +638,8 @@ static int test_rrset_merge() /* Check that the first RRSet now contains RDATA from the second. */ /* Indices first. */ - ret = memcmp(merge_to->rdata_indices, test_rrset_array[TODOmergnuty].rrset, + ret = memcmp(merge_to->rdata_indices, + test_rrset_array[TEST_RRSET_MERGE_RESULT1].rrset.rdata_indices, merge_to->rdata_count); if (ret) { diag("Merge operation corrupted the first RRSet's indices.\n"); @@ -620,8 +649,8 @@ static int test_rrset_merge() } /* Check actual RDATA. */ - ret = knot_rrset_compare_rdata(merge_to->rdata, - test_rrset_array[TODOmergnuty].rrset); + ret = knot_rrset_compare_rdata(merge_to, + &test_rrset_array[TEST_RRSET_MERGE_RESULT1].rrset); if (ret) { diag("Merged RDATA are wrong.\n"); knot_rrset_deep_free(&merge_to, 1, 1); @@ -638,24 +667,27 @@ static int test_rrset_merge() static int test_rrset_merge_no_dupl() { /* Test that merge of two identical RRSets results in no-op. */ - knot_rrset_t *merge_to = - knot_rrset_deep_copy(test_rrset_array[0].rrset); - knot_rrset_t *merge_from = - knot_rrset_deep_copy(test_rrset_array[0].rrset); - int ret = knot_rrset_merge_no_dupl(&merge_to, &merge_from); + knot_rrset_t *merge_to = NULL; + knot_rrset_deep_copy(&test_rrset_array[TEST_RRSET_MERGE_UNIQUE1].rrset, + &merge_to, 1); + knot_rrset_t *merge_from = NULL; + knot_rrset_deep_copy(&test_rrset_array[TEST_RRSET_MERGE_UNIQUE1].rrset, + &merge_from, 1); + int ret = knot_rrset_merge_no_dupl((void **)&merge_to, + (void **)&merge_from); if (ret != KNOT_EOK) { diag("Merge of identical RRSets failed.\n"); return 0; } - if (knot_rrset_compare(test_rrset_array[0].rrset, merge_to, - KNOT_RRSET_COMPARE_WHOLE)) { + if (knot_rrset_compare(&test_rrset_array[TEST_RRSET_MERGE_UNIQUE1].rrset, + merge_to, KNOT_RRSET_COMPARE_WHOLE)) { diag("Merge corrupted first RRSet.\n"); return 0; } - if (knot_rrset_compare(test_rrset_array[0].rrset, merge_from, - KNOT_RRSET_COMPARE_WHOLE)) { + if (knot_rrset_compare(&test_rrset_array[TEST_RRSET_MERGE_UNIQUE1].rrset, + merge_from, KNOT_RRSET_COMPARE_WHOLE)) { diag("Merge corrupted second RRSet.\n"); return 0; } @@ -664,24 +696,29 @@ static int test_rrset_merge_no_dupl() knot_rrset_deep_free(&merge_from, 1, 1); /* Merge normal, non-duplicated RRSets. */ - merge_to = knot_rrset_deep_copy(test_rrset_array[0].rrset); - merge_from = knot_rrset_deep_copy(test_rrset_array[1].rrset); + knot_rrset_deep_copy(&test_rrset_array[TEST_RRSET_MERGE_UNIQUE1].rrset, + &merge_to, 1); + knot_rrset_deep_copy(&test_rrset_array[TEST_RRSET_MERGE_UNIQUE2].rrset, + &merge_from, 1); assert(merge_to); assert(merge_from); - ret = knot_rrset_merge_no_dupl(&merge_to, &merge_from); + ret = knot_rrset_merge_no_dupl((void **)&merge_to, + (void **)&merge_from); if (ret != KNOT_EOK) { diag("Merge of identical RRSets failed.\n"); return 0; } - if (knot_rrset_compare(test_rrset_array[2].rrset, merge_from, + if (knot_rrset_compare(&test_rrset_array[TEST_RRSET_MERGE_UNIQUE2].rrset, + merge_from, KNOT_RRSET_COMPARE_WHOLE)) { diag("Merge corrupted second RRSet.\n"); return 0; } - if (knot_rrset_compare(test_rrset_array[2].rrset, merge_to, + if (knot_rrset_compare(&test_rrset_array[TEST_RRSET_MERGE_RESULT1].rrset, + merge_to, KNOT_RRSET_COMPARE_WHOLE)) { diag("Merge did not create correct RDATA.\n"); return 0; @@ -691,24 +728,28 @@ static int test_rrset_merge_no_dupl() knot_rrset_deep_free(&merge_from, 1, 1); /* Merge RRSets with both duplicated and unique RDATAs. */ - merge_to = knot_rrset_deep_copy(test_rrset_array[3].rrset); - merge_from = knot_rrset_deep_copy(test_rrset_array[4].rrset); + knot_rrset_deep_copy(&test_rrset_array[TEST_RRSET_MERGE_UNIQUE1].rrset, + &merge_to, 1); + knot_rrset_deep_copy(&test_rrset_array[TEST_RRSET_MERGE_RESULT1].rrset, + &merge_from, 1); assert(merge_to); assert(merge_from); - ret = knot_rrset_merge_no_dupl(&merge_to, &merge_from); + ret = knot_rrset_merge_no_dupl((void **)&merge_to, (void **)&merge_from); if (ret != KNOT_EOK) { diag("Merge of identical RRSets failed.\n"); return 0; } - if (knot_rrset_compare(test_rrset_array[2].rrset, merge_from, + if (knot_rrset_compare(&test_rrset_array[TEST_RRSET_MERGE_RESULT1].rrset, + merge_from, KNOT_RRSET_COMPARE_WHOLE)) { diag("Merge corrupted second RRSet.\n"); return 0; } - if (knot_rrset_compare(test_rrset_array[2].rrset, merge_to, + if (knot_rrset_compare(&test_rrset_array[TEST_RRSET_MERGE_RESULT1].rrset, + merge_to, KNOT_RRSET_COMPARE_WHOLE)) { diag("Merge did not create correct RDATA.\n"); return 0; @@ -716,147 +757,131 @@ static int test_rrset_merge_no_dupl() knot_rrset_deep_free(&merge_to, 1, 1); knot_rrset_deep_free(&merge_from, 1, 1); + + return 1; } static int test_rrset_compare_rdata() { /* Comparing different RDATA types should result in EINVAL. */ - knot_rrset_t *rrset1 = test_rrset_array[4234].rrset; - knot_rrset_t *rrset2 = test_rrset_array[4223].rrset; + knot_rrset_t *rrset1 = &test_rrset_array[TEST_RRSET_A_LESS].rrset; + knot_rrset_t *rrset2 = &test_rrset_array[TEST_RRSET_NS_GT].rrset; if (knot_rrset_compare_rdata(rrset1, rrset2) != KNOT_EINVAL) { diag("rrset_compare_rdata() did comparison when it " "shouldn't have.\n"); - knot_rrset_deep_free(rrset2, 1, 1); return 0; } /* Equal - raw data only. */ - rrset1 = test_rrset_array[2].rrset; - rrset2 = knot_rrset_deep_copy(test_rrset_array[2].rrset); + rrset1 = &test_rrset_array[TEST_RRSET_A_LESS].rrset; + knot_rrset_deep_copy(&test_rrset_array[TEST_RRSET_A_LESS].rrset, + &rrset2, 1); if (knot_rrset_compare_rdata(rrset1, rrset2) != 0) { diag("rrset_compare_rdata() returned wrong" "value, should be 0. (raw data)\n"); - knot_rrset_deep_free(rrset2, 1, 1); return 0; } - knot_rrset_deep_free(rrset1, 1, 1); - knot_rrset_deep_free(rrset2, 1, 1); + knot_rrset_deep_free(&rrset2, 1, 1); /* Equal - DNAME only. */ - rrset1 = test_rrset_array[3].rrset; - rrset2 = knot_rrset_deep_copy(test_rrset_array[3].rrset); + rrset1 = &test_rrset_array[TEST_RRSET_NS_LESS].rrset; + knot_rrset_deep_copy(&test_rrset_array[TEST_RRSET_NS_LESS].rrset, + &rrset2, 1); if (knot_rrset_compare_rdata(rrset1, rrset2) != 0) { diag("rrset_compare_rdata() returned wrong" "value, should be 0. (DNAME only)\n"); - knot_rrset_deep_free(rrset2, 1, 1); + knot_rrset_deep_free(&rrset2, 1, 1); return 0; } - knot_rrset_deep_free(rrset1, 1, 1); - knot_rrset_deep_free(rrset2, 1, 1); + knot_rrset_deep_free(&rrset2, 1, 1); /* Equal - combination. */ - rrset1 = test_rrset_array[4].rrset; - rrset2 = knot_rrset_deep_copy(test_rrset_array[4].rrset); + rrset1 = &test_rrset_array[TEST_RRSET_MX_BIN_LESS].rrset; + knot_rrset_deep_copy(&test_rrset_array[TEST_RRSET_MX_BIN_LESS].rrset, + &rrset2, 1); if (knot_rrset_compare_rdata(rrset1, rrset2) != 0) { diag("rrset_compare_rdata() returned wrong" "value, should be 0. (combination)\n"); - knot_rrset_deep_free(rrset2, 1, 1); + knot_rrset_deep_free(&rrset2, 1, 1); return 0; } - knot_rrset_deep_free(rrset1, 1, 1); - knot_rrset_deep_free(rrset2, 1, 1); + knot_rrset_deep_free(&rrset2, 1, 1); /* Smaller - raw data only. */ - rrset1 = test_rrset_array[42342].rrset; - rrset2 = test_rrset_array[23442].rrset; + rrset1 = &test_rrset_array[TEST_RRSET_A_LESS].rrset; + rrset2 = &test_rrset_array[TEST_RRSET_A_GT].rrset; if (knot_rrset_compare_rdata(rrset1, rrset2) >= 0) { diag("rrset_compare_rdata() returned wrong" "value, should be -1. (raw data only)\n"); - knot_rrset_deep_free(rrset2, 1, 1); return 0; } - knot_rrset_deep_free(rrset1, 1, 1); - knot_rrset_deep_free(rrset2, 1, 1); + /* Greater - raw data only. */ + if (knot_rrset_compare_rdata(rrset2, rrset1) <= 0) { + diag("rrset_compare_rdata() returned wrong" + "value, should be 1. (raw data only)\n"); + return 0; + } /* Smaller - DNAME only. */ - rrset1 = test_rrset_array[42342].rrset; - rrset2 = test_rrset_array[23442].rrset; + rrset1 = &test_rrset_array[TEST_RRSET_NS_LESS].rrset; + rrset2 = &test_rrset_array[TEST_RRSET_NS_GT].rrset; if (knot_rrset_compare_rdata(rrset1, rrset2) >= 0) { diag("rrset_compare_rdata() returned wrong" "value, should be -1. (DNAME only)\n"); - knot_rrset_deep_free(rrset2, 1, 1); return 0; } - knot_rrset_deep_free(rrset1, 1, 1); - knot_rrset_deep_free(rrset2, 1, 1); + /* Greater - DNAME only. */ + if (knot_rrset_compare_rdata(rrset2, rrset1) <= 0) { + diag("rrset_compare_rdata() returned wrong" + "value, should be 1. (DNAME only)\n"); + return 0; + } - /* Smaller - combination. */ - rrset1 = test_rrset_array[42342].rrset; - rrset2 = test_rrset_array[23442].rrset; + /* Smaller - combination, difference in binary part. */ + rrset1 = &test_rrset_array[TEST_RRSET_MX_BIN_LESS].rrset; + rrset2 = &test_rrset_array[TEST_RRSET_MX_BIN_GT].rrset; if (knot_rrset_compare_rdata(rrset1, rrset2) >= 0) { diag("rrset_compare_rdata() returned wrong" "value, should be -1. (combination)\n"); - knot_rrset_deep_free(rrset2, 1, 1); return 0; } - knot_rrset_deep_free(rrset1, 1, 1); - knot_rrset_deep_free(rrset2, 1, 1); - - /* Greater - raw data only. */ - rrset1 = test_rrset_array[42342].rrset; - rrset2 = test_rrset_array[23442].rrset; - - if (knot_rrset_compare_rdata(rrset1, rrset2) <= 0) { + /* Greater - combination, difference in binary part. */ + if (knot_rrset_compare_rdata(rrset2, rrset1) <= 0) { diag("rrset_compare_rdata() returned wrong" - "value, should be -1. (raw data only)\n"); - knot_rrset_deep_free(rrset2, 1, 1); + "value, should be 1. (combination)\n"); return 0; } - knot_rrset_deep_free(rrset1, 1, 1); - knot_rrset_deep_free(rrset2, 1, 1); - - /* Greater - DNAME only. */ - rrset1 = test_rrset_array[42342].rrset; - rrset2 = test_rrset_array[23442].rrset; + /* Smaller - combination, difference in DNAME part. */ + rrset1 = &test_rrset_array[TEST_RRSET_MX_DNAME_LESS].rrset; + rrset2 = &test_rrset_array[TEST_RRSET_MX_DNAME_GT].rrset; - if (knot_rrset_compare_rdata(rrset1, rrset2) <= 0) { + if (knot_rrset_compare_rdata(rrset1, rrset2) >= 0) { diag("rrset_compare_rdata() returned wrong" - "value, should be -1. (DNAME only)\n"); - knot_rrset_deep_free(rrset2, 1, 1); + "value, should be -1. (combination)\n"); return 0; } - knot_rrset_deep_free(rrset1, 1, 1); - knot_rrset_deep_free(rrset2, 1, 1); - - /* Greater - combination. */ - rrset1 = test_rrset_array[42342].rrset; - rrset2 = test_rrset_array[23442].rrset; - - if (knot_rrset_compare_rdata(rrset1, rrset2) <= 0) { + /* Greater - combination, difference in DNAME part. */ + if (knot_rrset_compare_rdata(rrset2, rrset1) <= 0) { diag("rrset_compare_rdata() returned wrong" - "value, should be -1. (combination)\n"); - knot_rrset_deep_free(rrset2, 1, 1); + "value, should be 1. (combination)\n"); return 0; } - knot_rrset_deep_free(rrset1, 1, 1); - knot_rrset_deep_free(rrset2, 1, 1); - return 1; } @@ -868,8 +893,10 @@ static int test_rrset_compare() */ /* Equal. */ - knot_rrset_t *rrset1 = test_rrset_array[0].rrset; - knot_rrset_t *rrset2 = knot_rrset_deep_copy(test_rrset_array[0].rrset); + knot_rrset_t *rrset1 = &test_rrset_array[TEST_RRSET_A_LESS].rrset; + knot_rrset_t *rrset2; + knot_rrset_deep_copy(&test_rrset_array[TEST_RRSET_A_LESS].rrset, + &rrset2, 1); if (knot_rrset_compare(rrset1, rrset2, KNOT_RRSET_COMPARE_HEADER) != 0) { @@ -881,19 +908,18 @@ static int test_rrset_compare() knot_rrset_deep_free(&rrset2, 1, 1); /* Less. */ - rrset1 = test_rrset_array[1].rrset; - rrset2 = test_rrset_array[0].rrset; + rrset1 = &test_rrset_array[TEST_RRSET_A_LESS].rrset; + rrset2 = &test_rrset_array[TEST_RRSET_NS_LESS].rrset; if (knot_rrset_compare(rrset1, rrset2, KNOT_RRSET_COMPARE_HEADER) >= 0) { diag("Wrong RRSet comparison, should be 0.\n"); - knot_rrset_deep_free(&rrset2, 1, 1); return 0; } /* Greater. */ - rrset1 = test_rrset_array[0].rrset; - rrset2 = test_rrset_array[1].rrset; + rrset1 = &test_rrset_array[TEST_RRSET_NS_LESS].rrset; + rrset2 = &test_rrset_array[TEST_RRSET_A_LESS].rrset; if (knot_rrset_compare(rrset1, rrset2, KNOT_RRSET_COMPARE_HEADER) <= 0) { @@ -901,28 +927,30 @@ static int test_rrset_compare() knot_rrset_deep_free(&rrset2, 1, 1); return 0; } + + return 1; } -static int test_rrset_rdata_get_next_dname() +static int test_rrset_get_next_dname() { /* There are few suitable RR types for this test - we'll use MINFO. */ - knot_rrset_t *rrset = test_rrset_array[TEST_RRSET_MINFO].rrset; + knot_rrset_t *rrset = &test_rrset_array[TEST_RRSET_MINFO].rrset; knot_dname_t *dname1 = NULL; knot_dname_t *dname2 = NULL; knot_dname_t *dname = NULL; - dname = knot_rrset_rdata_get_next_dname(rrset, dname, 0); + dname = knot_rrset_get_next_dname(rrset, dname); if (dname != dname1) { diag("Failed to extract correct first DNAME from RRSet.\n"); return 0; } - dname = knot_rrset_rdata_get_next_dname(rrset, dname, 0); + dname = knot_rrset_get_next_dname(rrset, dname); if (dname != dname2) { diag("Failed to extract correct second DNAME from RRSet.\n"); return 0; } - dname = knot_rrset_rdata_get_next_dname(rrset, dname, 0); + dname = knot_rrset_get_next_dname(rrset, dname); if (dname != NULL) { diag("Failed to return NULL after all DNAMEs " "have been extracted.\n"); @@ -931,7 +959,7 @@ static int test_rrset_rdata_get_next_dname() /* Test that RRSet with no DNAMEs in it returns NULL. */ dname = NULL; - dname = knot_rrset_rdata_get_next_dname(rrset, dname, 0); + dname = knot_rrset_get_next_dname(rrset, dname); if (dname != NULL) { diag("rrset_rdata_get_next_dname() found DNAME in RRSet with " "no DNAMEs.\n"); @@ -941,10 +969,10 @@ static int test_rrset_rdata_get_next_dname() return 1; } -static int test_rrset_next_dname() +static int test_rrset_next_dname_pointer() { /* Same test as in above, but we'll use multiple RRs within one SET. */ - knot_rrset_t *rrset = test_rrset_array[TEST_RRSET_MINFO_MULTIPLE].rrset; + knot_rrset_t *rrset = &test_rrset_array[TEST_RRSET_MINFO_MULTIPLE].rrset; knot_dname_t *extracted_dnames[4]; extracted_dnames[0] = test_dnames[0]; extracted_dnames[1] = test_dnames[1]; @@ -961,20 +989,21 @@ static int test_rrset_next_dname() } /* Try writes into DNAMEs you've gotten. */ - rrset = knot_rrset_deep_copy(test_rrset_array[MINFO_MULTIPLE_INDEX].rrset); + knot_rrset_deep_copy(&test_rrset_array[TEST_RRSET_MINFO_MULTIPLE].rrset, + &rrset, 1); dname = NULL; i = 4; while ((dname = knot_rrset_get_next_dname_pointer(rrset, dname))) { knot_dname_free(dname); - *dname == extracted_dnames[i]; + memcpy(dname, &test_dnames[i], sizeof(knot_dname_t *)); i++; } knot_dname_t *dname_read = NULL; i = 4; - while ((dname_read = knot_rrset_get_next_dname_pointer(rrset, - dname_read))) { - if (dname_read != extracted_dnames[i]) { + while ((dname_read = knot_rrset_get_next_dname(rrset, + dname_read))) { + if (dname_read != test_dnames[i]) { diag("Rewriting of DNAMEs in RDATA was " "not successful.\n"); knot_rrset_deep_free(&rrset, 1, 1); @@ -1008,9 +1037,57 @@ static int knot_rrset_tests_run(int argc, char *argv[]) create_test_rdata(); create_test_rrsets(); - res = test_rrset_create(); + res = test_rrset_new(); ok(res, "rrset: create"); res_final *= res; + + res = test_rrset_create_rdata(); + ok(res, "rrset: create_rdata"); + res_final *= res; + + res = test_rrset_get_rdata(); + ok(res, "rrset: get rdata"); + res_final *= res; + res = test_rrset_shallow_copy(); + ok(res, "rrset: shallow copy"); + res_final *= res; + + res = test_rrset_deep_copy(); + ok(res, "rrset: deep copy"); + res_final *= res; + + res = test_rrset_to_wire(); + ok(res, "rrset: to wire"); + res_final *= res; + + res = test_rrset_rdata_item_size(); + ok(res, "rrset: rdata_item_size"); + res_final *= res; + + res = test_rrset_merge(); + ok(res, "rrset: merge"); + res_final *= res; + + res = test_rrset_merge_no_dupl(); + ok(res, "rrset: merge no dupl"); + res_final *= res; + + res = test_rrset_compare_rdata(); + ok(res, "rrset: rdata_item_size"); + res_final *= res; + + res = test_rrset_compare(); + ok(res, "rrset: rdata_item_size"); + res_final *= res; + + res = test_rrset_get_next_dname(); + ok(res, "rrset: next dname"); + res_final *= res; + + res = test_rrset_next_dname_pointer(); + ok(res, "rrset: next dname pointer"); + res_final *= res; + return res_final; } -- GitLab