]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
convert query_test
authorEvan Hunt <each@isc.org>
Wed, 24 Oct 2018 17:02:49 +0000 (10:02 -0700)
committerEvan Hunt <each@isc.org>
Thu, 15 Nov 2018 04:17:04 +0000 (20:17 -0800)
- also fixed a bug in openssldh_link.c that turned up in the process

lib/dns/openssldh_link.c
lib/ns/tests/Kyuafile
lib/ns/tests/Makefile.in
lib/ns/tests/query_test.c

index c8428718a93eaea2f68b4706456b59a9112490e3..3567d3d4472261dd72f9d898aaf4e3edefb4a753 100644 (file)
@@ -707,9 +707,16 @@ openssldh_parse(dst_key_t *key, isc_lex_t *lexer, dst_key_t *pub) {
 static void
 openssldh_cleanup(void) {
        BN_free(bn2);
+       bn2 = NULL;
+
        BN_free(bn768);
+       bn768 = NULL;
+
        BN_free(bn1024);
+       bn1024 = NULL;
+
        BN_free(bn1536);
+       bn1536 = NULL;
 }
 
 static dst_func_t openssldh_functions = {
index 5e1fd4b5366b5ebb9f33b838cda38c2bf687ccab..e36015abf6a3f796fbc7234e184368d808507598 100644 (file)
@@ -3,4 +3,4 @@ test_suite('bind9')
 
 atf_test_program{name='listenlist_test'}
 atf_test_program{name='notify_test'}
-atf_test_program{name='query_test'}
+tap_test_program{name='query_test'}
index 190b3bf353a14f8d863d21cbd1e2d7f9ed7e69fe..f37fb44362636b042a4c9ff78cbb8295c17755be 100644 (file)
@@ -55,9 +55,9 @@ notify_test@EXEEXT@: notify_test.@O@ nstest.@O@ ${NSDEPLIBS} ${ISCDEPLIBS} ${DNS
                                ${ISCLIBS} ${LIBS}
 
 query_test@EXEEXT@: query_test.@O@ nstest.@O@ ${NSDEPLIBS} ${ISCDEPLIBS} ${DNSDEPLIBS}
-       ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ \
-                       query_test.@O@ nstest.@O@ ${NSLIBS} ${DNSLIBS} \
-                               ${ISCLIBS} ${LIBS}
+       ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${CMOCKA_CFLAGS} \
+               ${LDFLAGS} -o $@ query_test.@O@ nstest.@O@ \
+               ${NSLIBS} ${DNSLIBS} ${ISCLIBS} ${LIBS} ${CMOCKA_LIBS}
 
 unit::
        sh ${top_builddir}/unit/unittest.sh
index 554893f6427dd01c343667dd5512429ea3916e1d..0261c81d898c29cbd702d569ed5b7c898caecd86 100644 (file)
@@ -9,25 +9,54 @@
  * information regarding copyright ownership.
  */
 
-/*! \file */
-
 #include <config.h>
 
+#if HAVE_CMOCKA
+
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+
 #include <inttypes.h>
 #include <stdbool.h>
+#include <stdlib.h>
+#include <string.h>
 
-#include <atf-c.h>
+#define UNIT_TESTING
+#include <cmocka.h>
 
 #include <dns/badcache.h>
 #include <dns/view.h>
 #include <isc/util.h>
 #include <ns/client.h>
 #include <ns/query.h>
+#include <isc/util.h>
 
 #include "../hooks.h"
 
 #include "nstest.h"
 
+static int
+_setup(void **state) {
+       isc_result_t result;
+
+       UNUSED(state);
+
+       result = ns_test_begin(NULL, true);
+       assert_int_equal(result, ISC_R_SUCCESS);
+
+       return (0);
+}
+
+static int
+_teardown(void **state) {
+       UNUSED(state);
+
+       ns_test_end();
+
+       return (0);
+}
+
 /*****
  ***** ns__query_sfcache() tests
  *****/
 typedef struct {
        const ns_test_id_t id;             /* libns test identifier */
        unsigned int qflags;               /* query flags */
-       bool cache_entry_present; /* whether a SERVFAIL cache entry
+       bool cache_entry_present;          /* whether a SERVFAIL cache entry
                                              matching the query should be
                                              present */
        uint32_t cache_entry_flags;        /* NS_FAILCACHE_* flags to set for
                                              the SERVFAIL cache entry */
-       bool servfail_expected;   /* whether a cached SERVFAIL is
+       bool servfail_expected;            /* whether a cached SERVFAIL is
                                              expected to be returned */
 } ns__query_sfcache_test_params_t;
 
@@ -51,7 +80,7 @@ typedef struct {
  * Perform a single ns__query_sfcache() check using given parameters.
  */
 static void
-ns__query_sfcache_test(const ns__query_sfcache_test_params_t *test) {
+run_sfcache_test(const ns__query_sfcache_test_params_t *test) {
        query_ctx_t *qctx = NULL;
        isc_result_t result;
 
@@ -83,7 +112,7 @@ ns__query_sfcache_test(const ns__query_sfcache_test_params_t *test) {
                };
 
                result = ns_test_qctx_create(&qctx_params, &qctx);
-               ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+               assert_int_equal(result, ISC_R_SUCCESS);
        }
 
        /*
@@ -96,7 +125,7 @@ ns__query_sfcache_test(const ns__query_sfcache_test_params_t *test) {
 
                isc_interval_set(&hour, 3600, 0);
                result = isc_time_nowplusinterval(&expire, &hour);
-               ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+               assert_int_equal(result, ISC_R_SUCCESS);
 
                dns_badcache_add(qctx->client->view->failcache, dns_rootname,
                                 dns_rdatatype_ns, true,
@@ -109,32 +138,30 @@ ns__query_sfcache_test(const ns__query_sfcache_test_params_t *test) {
        ns__query_sfcache(qctx);
 
        if (test->servfail_expected) {
-               ATF_CHECK_EQ_MSG(qctx->result, DNS_R_SERVFAIL,
-                                "test \"%s\" on line %d: "
+               if (qctx->result != DNS_R_SERVFAIL) {
+                       fail_msg("# test \"%s\" on line %d: "
                                 "expected SERVFAIL, got %s",
                                 test->id.description, test->id.lineno,
                                 isc_result_totext(qctx->result));
+               }
        } else {
-               ATF_CHECK_EQ_MSG(qctx->result, ISC_R_SUCCESS,
-                                "test \"%s\" on line %d: "
+               if (qctx->result != ISC_R_SUCCESS) {
+                       fail_msg("# test \"%s\" on line %d: "
                                 "expected success, got %s",
                                 test->id.description, test->id.lineno,
                                 isc_result_totext(qctx->result));
+               }
        }
 
        /*
         * Clean up.
         */
        ns_test_qctx_destroy(&qctx);
-
 }
 
-ATF_TC(ns__query_sfcache);
-ATF_TC_HEAD(ns__query_sfcache, tc) {
-       atf_tc_set_md_var(tc, "descr", "ns__query_sfcache()");
-}
-ATF_TC_BODY(ns__query_sfcache, tc) {
-       isc_result_t result;
+/* test ns__query_sfcache() */
+static void
+ns__query_sfcache_test(void **state) {
        size_t i;
 
        const ns__query_sfcache_test_params_t tests[] = {
@@ -207,16 +234,11 @@ ATF_TC_BODY(ns__query_sfcache, tc) {
                },
        };
 
-       UNUSED(tc);
-
-       result = ns_test_begin(NULL, true);
-       ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+       UNUSED(state);
 
        for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++) {
-               ns__query_sfcache_test(&tests[i]);
+               run_sfcache_test(&tests[i]);
        }
-
-       ns_test_end();
 }
 
 /*****
@@ -256,7 +278,7 @@ typedef struct {
  * Perform a single ns__query_start() check using given parameters.
  */
 static void
-ns__query_start_test(const ns__query_start_test_params_t *test) {
+run_start_test(const ns__query_start_test_params_t *test) {
        query_ctx_t *qctx = NULL;
        isc_result_t result;
 
@@ -293,7 +315,7 @@ ns__query_start_test(const ns__query_start_test_params_t *test) {
                        .with_cache = test->recursive_service,
                };
                result = ns_test_qctx_create(&qctx_params, &qctx);
-               ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+               assert_int_equal(result, ISC_R_SUCCESS);
        }
 
        /*
@@ -309,7 +331,7 @@ ns__query_start_test(const ns__query_start_test_params_t *test) {
                result = ns_test_serve_zone(test->auth_zone_origin,
                                            test->auth_zone_path,
                                            qctx->client->view);
-               ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+               assert_int_equal(result, ISC_R_SUCCESS);
        }
 
        /*
@@ -319,63 +341,70 @@ ns__query_start_test(const ns__query_start_test_params_t *test) {
 
        switch (test->expected_result) {
        case NS__QUERY_START_R_REFUSE:
-               ATF_CHECK_EQ_MSG(qctx->result, DNS_R_REFUSED,
-                                "test \"%s\" on line %d: "
+               if (qctx->result != DNS_R_REFUSED) {
+                       fail_msg("# test \"%s\" on line %d: "
                                 "expected REFUSED, got %s",
                                 test->id.description, test->id.lineno,
                                 isc_result_totext(qctx->result));
-               ATF_CHECK_EQ_MSG(qctx->zone, NULL,
-                                "test \"%s\" on line %d: "
+               }
+               if (qctx->zone != NULL) {
+                       fail_msg("# test \"%s\" on line %d: "
                                 "no zone was expected to be attached to "
                                 "query context, but some was",
                                 test->id.description, test->id.lineno);
-               ATF_CHECK_EQ_MSG(qctx->db, NULL,
-                                "test \"%s\" on line %d: "
+               }
+               if (qctx->db != NULL) {
+                       fail_msg("# test \"%s\" on line %d: "
                                 "no database was expected to be attached to "
                                 "query context, but some was",
                                 test->id.description, test->id.lineno);
+               }
                break;
        case NS__QUERY_START_R_CACHE:
-               ATF_CHECK_EQ_MSG(qctx->result, ISC_R_SUCCESS,
-                                "test \"%s\" on line %d: "
+               if (qctx->result != ISC_R_SUCCESS) {
+                       fail_msg("# test \"%s\" on line %d: "
                                 "expected success, got %s",
                                 test->id.description, test->id.lineno,
                                 isc_result_totext(qctx->result));
-               ATF_CHECK_EQ_MSG(qctx->zone, NULL,
-                                "test \"%s\" on line %d: "
+               }
+               if (qctx->zone != NULL) {
+                       fail_msg("# test \"%s\" on line %d: "
                                 "no zone was expected to be attached to "
                                 "query context, but some was",
                                 test->id.description, test->id.lineno);
-               ATF_CHECK_MSG((qctx->db != NULL &&
-                              qctx->db == qctx->client->view->cachedb),
-                             "test \"%s\" on line %d: "
-                             "cache database was expected to be attached to "
-                             "query context, but it was not",
-                             test->id.description, test->id.lineno);
+               }
+               if (qctx->db == NULL ||
+                   qctx->db != qctx->client->view->cachedb)
+               {
+                       fail_msg("# test \"%s\" on line %d: "
+                                "cache database was expected to be "
+                                "attached to query context, but it was not",
+                                test->id.description, test->id.lineno);
+               }
                break;
        case NS__QUERY_START_R_AUTH:
-               ATF_CHECK_EQ_MSG(qctx->result, ISC_R_SUCCESS,
-                                "test \"%s\" on line %d: "
+               if (qctx->result != ISC_R_SUCCESS) {
+                       fail_msg("# test \"%s\" on line %d: "
                                 "expected success, got %s",
                                 test->id.description, test->id.lineno,
                                 isc_result_totext(qctx->result));
-               ATF_CHECK_MSG(qctx->zone != NULL,
-                             "test \"%s\" on line %d: "
-                             "a zone was expected to be attached to query "
-                             "context, but it was not",
-                             test->id.description, test->id.lineno);
-               ATF_CHECK_MSG((qctx->db != NULL &&
-                              qctx->db != qctx->client->view->cachedb),
-                             "test \"%s\" on line %d: "
-                             "cache database was not expected to be attached "
-                             "to query context, but it is",
-                             test->id.description, test->id.lineno);
+               }
+               if (qctx->zone == NULL) {
+                       fail_msg("# test \"%s\" on line %d: "
+                                "a zone was expected to be attached to query "
+                                "context, but it was not",
+                                test->id.description, test->id.lineno);
+               }
+               if (qctx->db == qctx->client->view->cachedb) {
+                       fail_msg("# test \"%s\" on line %d: "
+                                "cache database was not expected to be "
+                                "attached to query context, but it is",
+                                test->id.description, test->id.lineno);
+               }
                break;
        case NS__QUERY_START_R_INVALID:
-               ATF_REQUIRE_MSG(false,
-                               "test \"%s\" on line %d has no expected "
-                               "result set",
-                               test->id.description, test->id.lineno);
+               fail_msg("# test \"%s\" on line %d has no expected result set",
+                        test->id.description, test->id.lineno);
                break;
        default:
                INSIST(0);
@@ -391,12 +420,9 @@ ns__query_start_test(const ns__query_start_test_params_t *test) {
        ns_test_qctx_destroy(&qctx);
 }
 
-ATF_TC(ns__query_start);
-ATF_TC_HEAD(ns__query_start, tc) {
-       atf_tc_set_md_var(tc, "descr", "ns__query_start()");
-}
-ATF_TC_BODY(ns__query_start, tc) {
-       isc_result_t result;
+/* test ns__query_start() */
+static void
+ns__query_start_test(void **state) {
        size_t i;
 
        const ns__query_start_test_params_t tests[] = {
@@ -557,24 +583,33 @@ ATF_TC_BODY(ns__query_start, tc) {
                },
        };
 
-       UNUSED(tc);
-
-       result = ns_test_begin(NULL, true);
-       ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+       UNUSED(state);
 
        for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++) {
-               ns__query_start_test(&tests[i]);
+               run_start_test(&tests[i]);
        }
+}
 
-       ns_test_end();
+int
+main(void) {
+       const struct CMUnitTest tests[] = {
+               cmocka_unit_test_setup_teardown(ns__query_sfcache_test,
+                                               _setup, _teardown),
+               cmocka_unit_test_setup_teardown(ns__query_start_test,
+                                               _setup, _teardown),
+       };
+
+       return (cmocka_run_group_tests(tests, NULL, NULL));
 }
 
-/*
- * Main
- */
-ATF_TP_ADD_TCS(tp) {
-       ATF_TP_ADD_TC(tp, ns__query_sfcache);
-       ATF_TP_ADD_TC(tp, ns__query_start);
+#else /* HAVE_CMOCKA */
 
-       return (atf_no_error());
+#include <stdio.h>
+
+int
+main(void) {
+       printf("1..0 # Skipped: cmocka not available\n");
+       return (0);
 }
+
+#endif