From ff07929977d74bde42e27e8c5cecaed515d09bd6 Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Thu, 25 Oct 2018 20:30:46 -0700 Subject: [PATCH] convert zt_test (cherry picked from commit 0a4f6122debaa4f255ebf68da0b9f6725b226b01) --- lib/dns/tests/Kyuafile | 2 +- lib/dns/tests/Makefile.in | 9 +- lib/dns/tests/zt_test.c | 193 +++++++++++++++++++++----------------- 3 files changed, 110 insertions(+), 94 deletions(-) diff --git a/lib/dns/tests/Kyuafile b/lib/dns/tests/Kyuafile index b0c574e2da..e61f7e1d17 100644 --- a/lib/dns/tests/Kyuafile +++ b/lib/dns/tests/Kyuafile @@ -32,4 +32,4 @@ atf_test_program{name='time_test'} atf_test_program{name='tsig_test'} atf_test_program{name='update_test'} atf_test_program{name='zonemgr_test'} -atf_test_program{name='zt_test'} +tap_test_program{name='zt_test'} diff --git a/lib/dns/tests/Makefile.in b/lib/dns/tests/Makefile.in index 94117248a9..3ed36da0b4 100644 --- a/lib/dns/tests/Makefile.in +++ b/lib/dns/tests/Makefile.in @@ -263,11 +263,10 @@ zonemgr_test@EXEEXT@: zonemgr_test.@O@ dnstest.@O@ ${ISCDEPLIBS} ${DNSDEPLIBS} zonemgr_test.@O@ dnstest.@O@ ${DNSLIBS} \ ${ISCLIBS} ${LIBS} -zt_test@EXEEXT@: zt_test.@O@ dnstest.@O@ \ - ${ISCDEPLIBS} ${DNSDEPLIBS} - ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ \ - zt_test.@O@ dnstest.@O@ ${DNSLIBS} \ - ${ISCLIBS} ${LIBS} +zt_test@EXEEXT@: zt_test.@O@ dnstest.@O@ ${ISCDEPLIBS} ${DNSDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${CMOCKA_CFLAGS} \ + ${LDFLAGS} -o $@ zt_test.@O@ dnstest.@O@ \ + ${DNSLIBS} ${ISCLIBS} ${LIBS} ${CMOCKA_LIBS} unit:: sh ${top_builddir}/unit/unittest.sh diff --git a/lib/dns/tests/zt_test.c b/lib/dns/tests/zt_test.c index d2756c2b29..d454047e61 100644 --- a/lib/dns/tests/zt_test.c +++ b/lib/dns/tests/zt_test.c @@ -9,20 +9,28 @@ * information regarding copyright ownership. */ -/*! \file */ - #include -#include +#if HAVE_CMOCKA + +#include +#include +#include #include +#include +#include #include +#define UNIT_TESTING +#include + #include #include #include #include #include +#include #include #include @@ -38,9 +46,27 @@ struct args { bool arg3; }; -/* - * Helper functions - */ +static int +_setup(void **state) { + isc_result_t result; + + UNUSED(state); + + result = dns_test_begin(NULL, true); + assert_int_equal(result, ISC_R_SUCCESS); + + return (0); +} + +static int +_teardown(void **state) { + UNUSED(state); + + dns_test_end(); + + return (0); +} + static isc_result_t count_zone(dns_zone_t *zone, void *uap) { int *nzones = (int *)uap; @@ -94,55 +120,43 @@ start_zone_asyncload(isc_task_t *task, isc_event_t *event) { isc_event_free(&event); } -/* - * Individual unit tests - */ -ATF_TC(apply); -ATF_TC_HEAD(apply, tc) { - atf_tc_set_md_var(tc, "descr", "apply a function to a zone table"); -} -ATF_TC_BODY(apply, tc) { +/* apply a function to a zone table */ +static void +apply(void **state) { isc_result_t result; dns_zone_t *zone = NULL; dns_view_t *view = NULL; int nzones = 0; - UNUSED(tc); - - result = dns_test_begin(NULL, true); - ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + UNUSED(state); result = dns_test_makezone("foo", &zone, NULL, true); - ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + assert_int_equal(result, ISC_R_SUCCESS); view = dns_zone_getview(zone); - ATF_REQUIRE(view->zonetable != NULL); + assert_non_null(view->zonetable); - ATF_CHECK_EQ(0, nzones); + assert_int_equal(nzones, 0); result = dns_zt_apply(view->zonetable, false, count_zone, &nzones); - ATF_CHECK_EQ(result, ISC_R_SUCCESS); - ATF_CHECK_EQ(1, nzones); + assert_int_equal(result, ISC_R_SUCCESS); + assert_int_equal(nzones, 1); /* These steps are necessary so the zone can be detached properly */ result = dns_test_setupzonemgr(); - ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + assert_int_equal(result, ISC_R_SUCCESS); result = dns_test_managezone(zone); - ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + assert_int_equal(result, ISC_R_SUCCESS); dns_test_releasezone(zone); dns_test_closezonemgr(); /* The view was left attached in dns_test_makezone() */ dns_view_detach(&view); dns_zone_detach(&zone); - - dns_test_end(); } -ATF_TC(asyncload_zone); -ATF_TC_HEAD(asyncload_zone, tc) { - atf_tc_set_md_var(tc, "descr", "asynchronous zone load"); -} -ATF_TC_BODY(asyncload_zone, tc) { +/* asynchronous zone load */ +static void +asyncload_zone(void **state) { isc_result_t result; int n; dns_zone_t *zone = NULL; @@ -154,28 +168,25 @@ ATF_TC_BODY(asyncload_zone, tc) { int i = 0; struct args args; - UNUSED(tc); - - result = dns_test_begin(NULL, true); - ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + UNUSED(state); result = dns_test_makezone("foo", &zone, NULL, true); - ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + assert_int_equal(result, ISC_R_SUCCESS); result = dns_test_setupzonemgr(); - ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + assert_int_equal(result, ISC_R_SUCCESS); result = dns_test_managezone(zone); - ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + assert_int_equal(result, ISC_R_SUCCESS); view = dns_zone_getview(zone); - ATF_REQUIRE(view->zonetable != NULL); + assert_non_null(view->zonetable); - ATF_CHECK(!dns__zone_loadpending(zone)); - ATF_CHECK(!done); + assert_false(dns__zone_loadpending(zone)); + assert_false(done); zonefile = fopen("./zone.data", "wb"); - ATF_CHECK(zonefile != NULL); + assert_non_null(zonefile); origfile = fopen("./testdata/zt/zone1.db", "r+b"); - ATF_CHECK(origfile != NULL); + assert_non_null(origfile); n = fread(buf, 1, 4096, origfile); fclose(origfile); fwrite(buf, 1, n, zonefile); @@ -191,10 +202,10 @@ ATF_TC_BODY(asyncload_zone, tc) { isc_app_run(); while (dns__zone_loadpending(zone) && i++ < 5000) dns_test_nap(1000); - ATF_CHECK(done); + assert_true(done); /* The zone should now be loaded; test it */ result = dns_zone_getdb(zone, &db); - ATF_CHECK_EQ(result, ISC_R_SUCCESS); + assert_int_equal(result, ISC_R_SUCCESS); dns_db_detach(&db); /* * Add something to zone file, reload zone with newonly - it should @@ -213,10 +224,10 @@ ATF_TC_BODY(asyncload_zone, tc) { while (dns__zone_loadpending(zone) && i++ < 5000) dns_test_nap(1000); - ATF_CHECK(done); + assert_true(done); /* The zone should now be loaded; test it */ result = dns_zone_getdb(zone, &db); - ATF_CHECK_EQ(result, ISC_R_SUCCESS); + assert_int_equal(result, ISC_R_SUCCESS); dns_db_detach(&db); /* Now reload it without newonly - it should be reloaded */ @@ -229,12 +240,12 @@ ATF_TC_BODY(asyncload_zone, tc) { while (dns__zone_loadpending(zone) && i++ < 5000) dns_test_nap(1000); - ATF_CHECK(done); + assert_true(done); /* The zone should now be loaded; test it */ result = dns_zone_getdb(zone, &db); - ATF_CHECK_EQ(result, ISC_R_SUCCESS); + assert_int_equal(result, ISC_R_SUCCESS); - ATF_CHECK(db != NULL); + assert_non_null(db); if (db != NULL) dns_db_detach(&db); @@ -243,15 +254,11 @@ ATF_TC_BODY(asyncload_zone, tc) { dns_zone_detach(&zone); dns_view_detach(&view); - - dns_test_end(); } -ATF_TC(asyncload_zt); -ATF_TC_HEAD(asyncload_zt, tc) { - atf_tc_set_md_var(tc, "descr", "asynchronous zone table load"); -} -ATF_TC_BODY(asyncload_zt, tc) { +/* asynchronous zone table load */ +static void +asyncload_zt(void **state) { isc_result_t result; dns_zone_t *zone1 = NULL, *zone2 = NULL, *zone3 = NULL; dns_view_t *view; @@ -261,40 +268,37 @@ ATF_TC_BODY(asyncload_zt, tc) { int i = 0; struct args args; - UNUSED(tc); - - result = dns_test_begin(NULL, true); - ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + UNUSED(state); result = dns_test_makezone("foo", &zone1, NULL, true); - ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + assert_int_equal(result, ISC_R_SUCCESS); dns_zone_setfile(zone1, "testdata/zt/zone1.db"); view = dns_zone_getview(zone1); result = dns_test_makezone("bar", &zone2, view, false); - ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + assert_int_equal(result, ISC_R_SUCCESS); dns_zone_setfile(zone2, "testdata/zt/zone1.db"); /* This one will fail to load */ result = dns_test_makezone("fake", &zone3, view, false); - ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + assert_int_equal(result, ISC_R_SUCCESS); dns_zone_setfile(zone3, "testdata/zt/nonexistent.db"); zt = view->zonetable; - ATF_REQUIRE(zt != NULL); + assert_non_null(zt); result = dns_test_setupzonemgr(); - ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + assert_int_equal(result, ISC_R_SUCCESS); result = dns_test_managezone(zone1); - ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + assert_int_equal(result, ISC_R_SUCCESS); result = dns_test_managezone(zone2); - ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + assert_int_equal(result, ISC_R_SUCCESS); result = dns_test_managezone(zone3); - ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + assert_int_equal(result, ISC_R_SUCCESS); - ATF_CHECK(!dns__zone_loadpending(zone1)); - ATF_CHECK(!dns__zone_loadpending(zone2)); - ATF_CHECK(!done); + assert_false(dns__zone_loadpending(zone1)); + assert_false(dns__zone_loadpending(zone2)); + assert_false(done); args.arg1 = zt; args.arg2 = &done; @@ -303,18 +307,18 @@ ATF_TC_BODY(asyncload_zt, tc) { isc_app_run(); while (!done && i++ < 5000) dns_test_nap(1000); - ATF_CHECK(done); + assert_true(done); /* Both zones should now be loaded; test them */ result = dns_zone_getdb(zone1, &db); - ATF_CHECK_EQ(result, ISC_R_SUCCESS); - ATF_CHECK(db != NULL); + assert_int_equal(result, ISC_R_SUCCESS); + assert_non_null(db); if (db != NULL) dns_db_detach(&db); result = dns_zone_getdb(zone2, &db); - ATF_CHECK_EQ(result, ISC_R_SUCCESS); - ATF_CHECK(db != NULL); + assert_int_equal(result, ISC_R_SUCCESS); + assert_non_null(db); if (db != NULL) dns_db_detach(&db); @@ -327,16 +331,29 @@ ATF_TC_BODY(asyncload_zt, tc) { dns_zone_detach(&zone2); dns_zone_detach(&zone3); dns_view_detach(&view); - - dns_test_end(); } -/* - * Main - */ -ATF_TP_ADD_TCS(tp) { - ATF_TP_ADD_TC(tp, apply); - ATF_TP_ADD_TC(tp, asyncload_zone); - ATF_TP_ADD_TC(tp, asyncload_zt); - return (atf_no_error()); +int +main(void) { + const struct CMUnitTest tests[] = { + cmocka_unit_test_setup_teardown(apply, _setup, _teardown), + cmocka_unit_test_setup_teardown(asyncload_zone, + _setup, _teardown), + cmocka_unit_test_setup_teardown(asyncload_zt, + _setup, _teardown), + }; + + return (cmocka_run_group_tests(tests, NULL, NULL)); } + +#else /* HAVE_CMOCKA */ + +#include + +int +main(void) { + printf("1..0 # Skipped: cmocka not available\n"); + return (0); +} + +#endif