From aaf7062206bda88fe5437419e1da8f246594c6d4 Mon Sep 17 00:00:00 2001 From: Lubos Slovak <lubos.slovak@nic.cz> Date: Mon, 22 Nov 2010 12:54:56 +0100 Subject: [PATCH] RDATA tests improved. Added test for rdata_get_item(). Test for set_items() now checks all return values. refs #117 --- CuteDNS.files | 1 + src/tests/dnslib/dnslib_rdata_tests.c | 138 ++++++++++++++++---------- 2 files changed, 85 insertions(+), 54 deletions(-) diff --git a/CuteDNS.files b/CuteDNS.files index c1a6b4428..9e32a47a8 100644 --- a/CuteDNS.files +++ b/CuteDNS.files @@ -66,5 +66,6 @@ src/dnslib/consts.h src/tests/dnslib/dnslib_dname_tests.c src/tests/dnslib/dnslib_rdata_tests.c src/tests/dnslib/dnslib_rrset_tests.c +src/tests/dnslib/dnslib_node_tests.c src/dnslib/descriptor.h src/dnslib/descriptor.c diff --git a/src/tests/dnslib/dnslib_rdata_tests.c b/src/tests/dnslib/dnslib_rdata_tests.c index 3eaf83346..d64dacbf6 100644 --- a/src/tests/dnslib/dnslib_rdata_tests.c +++ b/src/tests/dnslib/dnslib_rdata_tests.c @@ -54,6 +54,18 @@ unit_api dnslib_rdata_tests_api = { static uint8_t *RDATA_ITEM_PTR = (uint8_t *)0xDEADBEEF; +static dnslib_rdata_item_t TEST_RDATA_ITEMS[3] = { + {.dname = (dnslib_dname_t *)0xF00}, + {.raw_data = (uint8_t *)"some data"}, + {.raw_data = (uint8_t *)"other data"} +}; + +static const dnslib_rdata_t TEST_RDATA = { + TEST_RDATA_ITEMS, + 3, + NULL +}; + /*----------------------------------------------------------------------------*/ /*! * \brief Tests dnslib_rdata_new(). @@ -92,57 +104,6 @@ static int test_rdata_delete() { return 0; } -/*----------------------------------------------------------------------------*/ -/*! - * \brief Sets RDATA items within the given RDATA structure one-by-one. - * - * Sets the items to hold value RDATA_ITEM_PTR increased by the index of the - * item (i.e. + 0 for the first, + 1 for the second, etc.). - */ -//static void set_rdata( dnslib_rdata_t *rdata, int i ) -//{ -// assert(rdata != NULL); - -//// dnslib_rdata_item_t item; -//// item.raw_data = RDATA_ITEM_PTR; - -//// for (int j = 0; j < test_rdatas[i].items; ++j) { -//// dnslib_rdata_set_item(rdata, j, item); -//// ++item.raw_data; -//// } -//} - -/*----------------------------------------------------------------------------*/ -/*! - * \brief Sets RDATA items within the given RDATA structure all at once. - * - * Sets the items to hold value RDATA_ITEM_PTR increased by the index of the - * item (i.e. + 0 for the first, + 1 for the second, etc.). - * - * \retval > 0 if successful. - * \retval 0 if an error occured. - */ -//static int set_rdata_all( dnslib_rdata_t *rdata, int i ) -//{ -// assert(rdata != NULL); - -// dnslib_rdata_item_t *items = (dnslib_rdata_item_t *)malloc( -// test_rdatas[i].items * sizeof(dnslib_rdata_item_t)); - -// if (items == NULL) { -// diag("Allocation failed in set_rdata_all()."); -// return 0; -// } - -// for (int j = 0; j < test_rdatas[i].items; ++j) { -// items[j].raw_data = RDATA_ITEM_PTR + j; -// } - -// dnslib_rdata_set_items(rdata, items, test_rdatas[i].items); - -// return 1; -//} - /*----------------------------------------------------------------------------*/ static void generate_rdata( uint8_t *data, int size ) @@ -545,9 +506,33 @@ static int test_rdata_set_item() */ static int test_rdata_set_items() { - dnslib_rdata_t *rdata; + dnslib_rdata_t *rdata = NULL; + dnslib_rdata_item_t *item = (dnslib_rdata_item_t *)0xDEADBEEF; int errors = 0; + // check error return values + if (dnslib_rdata_set_items(rdata, NULL, 0) != 1) { + diag("Return value of dnslib_rdata_set_items() when rdata == NULL is" + "wrong"); + return 0; + } else { + rdata = dnslib_rdata_new(); + assert(rdata != NULL); + + if (dnslib_rdata_set_items(rdata, NULL, 0) != 1) { + diag("Return value of dnslib_rdata_set_items() when items == NULL" + "is wrong"); + dnslib_rdata_free(&rdata); + return 0; + } else if (dnslib_rdata_set_items(rdata, item, 0) != 1) { + diag("Return value of dnslib_rdata_set_items() when count == 0" + "is wrong"); + dnslib_rdata_free(&rdata); + return 0; + } + dnslib_rdata_free(&rdata); + } + // generate some random data uint8_t data[DNSLIB_MAX_RDATA_WIRE_SIZE]; generate_rdata(data, DNSLIB_MAX_RDATA_WIRE_SIZE); @@ -566,6 +551,45 @@ static int test_rdata_set_items() return (errors == 0); } +/*----------------------------------------------------------------------------*/ +/*! + * \brief Tests dnslib_rdata_get_item(). + * + * \retval > 0 on success. + * \retval 0 otherwise. + */ +static int test_rdata_get_item() +{ + const dnslib_rdata_t *rdata = &TEST_RDATA; + + if (dnslib_rdata_get_item(rdata, TEST_RDATA.count) != NULL) { + diag("dnslib_rdata_get_item() called with invalid position did not " + "return NULL"); + return 0; + } + + int errors = 0; + if ((dnslib_rdata_get_item(rdata, 0)->dname) != TEST_RDATA.items[0].dname) { + diag("RDATA item on position 0 is wrong: %p (should be %p)", + dnslib_rdata_get_item(rdata, 0), TEST_RDATA.items[0]); + ++errors; + } + if ((dnslib_rdata_get_item(rdata, 1)->raw_data) + != TEST_RDATA.items[1].raw_data) { + diag("RDATA item on position 0 is wrong: %p (should be %p)", + dnslib_rdata_get_item(rdata, 1), TEST_RDATA.items[1]); + ++errors; + } + if ((dnslib_rdata_get_item(rdata, 2)->raw_data) + != TEST_RDATA.items[2].raw_data) { + diag("RDATA item on position 0 is wrong: %p (should be %p)", + dnslib_rdata_get_item(rdata, 2), TEST_RDATA.items[2]); + ++errors; + } + + return (errors == 0); +} + /*----------------------------------------------------------------------------*/ static int test_rdata_wire_size() @@ -653,7 +677,7 @@ static int test_rdata_to_wire() /*----------------------------------------------------------------------------*/ -static const int DNSLIB_RDATA_TEST_COUNT = 7; +static const int DNSLIB_RDATA_TEST_COUNT = 8; /*! This helper routine should report number of * scheduled tests for given parameters. @@ -672,7 +696,7 @@ static int dnslib_rdata_tests_run(int argc, char *argv[]) res = test_rdata_create(0); ok(res, "rdata: create empty"); - skip(!res, 5); + skip(!res, 6); todo(); @@ -680,6 +704,10 @@ static int dnslib_rdata_tests_run(int argc, char *argv[]) endtodo; + ok(res = test_rdata_get_item(), "rdata: get item"); + + skip(!res, 4) + ok(res = test_rdata_set_items(), "rdata: set items all at once"); skip(!res, 3); @@ -696,6 +724,8 @@ static int dnslib_rdata_tests_run(int argc, char *argv[]) endskip; /* test_rdata_set_items() failed */ + endskip; /* test_rdata_get_item() failed */ + endskip; /* test_rdata_create() failed */ return 0; -- GitLab