From: Evan Hunt Date: Tue, 27 Feb 2018 22:29:49 +0000 (-0800) Subject: migrate t_timers to lib/isc/tests/timer_test X-Git-Tag: v9.13.0~101^2~10 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e2b8699df9643c90ed196900fd80174430ada5a2;p=thirdparty%2Fbind9.git migrate t_timers to lib/isc/tests/timer_test --- diff --git a/bin/tests/.gitignore b/bin/tests/.gitignore index 4849f5b4dec..81a0a73486f 100644 --- a/bin/tests/.gitignore +++ b/bin/tests/.gitignore @@ -16,5 +16,4 @@ keycreate keydelete gssapi_krb t_tasks -t_timers makejournal diff --git a/bin/tests/Makefile.in b/bin/tests/Makefile.in index 1f0c73fd932..92757c7579d 100644 --- a/bin/tests/Makefile.in +++ b/bin/tests/Makefile.in @@ -32,8 +32,8 @@ ISCCFGDEPLIBS = ../../lib/isccfg/libisccfg.@A@ LIBS = @LIBS@ -SUBDIR = db dst names \ - rbt resolver tasks timers system @PKCS11_TOOLS@ optional +SUBDIR = db dst names rbt resolver tasks system \ + @PKCS11_TOOLS@ optional TESTDIRS = system diff --git a/bin/tests/timers/Makefile.in b/bin/tests/timers/Makefile.in deleted file mode 100644 index 0f2acf16446..00000000000 --- a/bin/tests/timers/Makefile.in +++ /dev/null @@ -1,47 +0,0 @@ -# Copyright (C) Internet Systems Consortium, Inc. ("ISC") -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# -# See the COPYRIGHT file distributed with this work for additional -# information regarding copyright ownership. - -srcdir = @srcdir@ -VPATH = @srcdir@ -top_srcdir = @top_srcdir@ - -@BIND9_MAKE_INCLUDES@ - -CINCLUDES = ${TEST_INCLUDES} ${ISC_INCLUDES} - -CDEFINES = -CWARNINGS = - -ISCLIBS = ../../../lib/isc/libisc.@A@ @ISC_OPENSSL_LIBS@ - -ISCDEPLIBS = ../../../lib/isc/libisc.@A@ - -DEPLIBS = ${ISCDEPLIBS} - -LIBS = ${ISCLIBS} @LIBS@ - -TLIB = ../../../lib/tests/libt_api.@A@ - -TARGETS = t_timers@EXEEXT@ - -SRCS = t_timers.c - -@BIND9_MAKE_RULES@ - -t_timers@EXEEXT@: t_timers.@O@ ${DEPLIBS} ${TLIB} - ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ t_timers.@O@ ${TLIB} ${LIBS} - -test: t_timers@EXEEXT@ - -@./t_timers@EXEEXT@ -c @top_srcdir@/t_config -b @srcdir@ -q 60 -a - -testhelp: - @./t_timers@EXEEXT@ -h - -clean distclean:: - rm -f ${TARGETS} diff --git a/bin/tests/timers/t_timers.c b/bin/tests/timers/t_timers.c deleted file mode 100644 index 9de8a2a6623..00000000000 --- a/bin/tests/timers/t_timers.c +++ /dev/null @@ -1,1127 +0,0 @@ -/* - * Copyright (C) Internet Systems Consortium, Inc. ("ISC") - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * See the COPYRIGHT file distributed with this work for additional - * information regarding copyright ownership. - */ - -/* $Id: t_timers.c,v 1.33 2011/03/14 14:13:10 fdupont Exp $ */ - -#include - -#include - -#include -#include -#include -#include -#include -#include -#include - -#include - -#ifdef ISC_PLATFORM_USETHREADS -isc_boolean_t threaded = ISC_TRUE; -#else -isc_boolean_t threaded = ISC_FALSE; -#endif - -#define Tx_FUDGE_SECONDS 0 /* in absence of clock_getres() */ -#define Tx_FUDGE_NANOSECONDS 500000000 /* in absence of clock_getres() */ - -static isc_time_t Tx_endtime; -static isc_time_t Tx_lasttime; -static int Tx_eventcnt; -static int Tx_nevents; -static isc_mutex_t Tx_mx; -static isc_condition_t Tx_cv; -static int Tx_nfails; -static int Tx_nprobs; -static isc_timer_t *Tx_timer; -static int Tx_seconds; -static int Tx_nanoseconds; - -static void -require_threads(void) { - t_info("This test requires threads\n"); - t_result(T_THREADONLY); - return; -} - -static void -tx_sde(isc_task_t *task, isc_event_t *event) { - isc_result_t isc_result; - - UNUSED(task); - UNUSED(event); - - /* - * Signal shutdown processing complete. - */ - isc_result = isc_mutex_lock(&Tx_mx); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_mutex_lock failed %s\n", - isc_result_totext(isc_result)); - ++Tx_nprobs; - } - - isc_result = isc_condition_signal(&Tx_cv); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_condition_signal failed %s\n", - isc_result_totext(isc_result)); - ++Tx_nprobs; - } - - isc_result = isc_mutex_unlock(&Tx_mx); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_mutex_unlock failed %s\n", - isc_result_totext(isc_result)); - ++Tx_nprobs; - } - - isc_event_free(&event); -} - -static void -tx_te(isc_task_t *task, isc_event_t *event) { - isc_result_t isc_result; - isc_time_t now; - isc_time_t base; - isc_time_t ulim; - isc_time_t llim; - isc_interval_t interval; - isc_eventtype_t expected_event_type; - - ++Tx_eventcnt; - - t_info("tick %d\n", Tx_eventcnt); - - expected_event_type = ISC_TIMEREVENT_LIFE; - if ((isc_timertype_t) event->ev_arg == isc_timertype_ticker) - expected_event_type = ISC_TIMEREVENT_TICK; - - if (event->ev_type != expected_event_type) { - t_info("expected event type %d, got %d\n", - expected_event_type, (int) event->ev_type); - ++Tx_nfails; - } - - isc_result = isc_time_now(&now); - if (isc_result == ISC_R_SUCCESS) { - isc_interval_set(&interval, Tx_seconds, Tx_nanoseconds); - isc_result = isc_time_add(&Tx_lasttime, &interval, &base); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_time_add failed %s\n", - isc_result_totext(isc_result)); - ++Tx_nprobs; - } - } else { - t_info("isc_time_now failed %s\n", - isc_result_totext(isc_result)); - ++Tx_nprobs; - } - - if (isc_result == ISC_R_SUCCESS) { - isc_interval_set(&interval, - Tx_FUDGE_SECONDS, Tx_FUDGE_NANOSECONDS); - isc_result = isc_time_add(&base, &interval, &ulim); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_time_add failed %s\n", - isc_result_totext(isc_result)); - ++Tx_nprobs; - } - } - - if (isc_result == ISC_R_SUCCESS) { - isc_result = isc_time_subtract(&base, &interval, &llim); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_time_subtract failed %s\n", - isc_result_totext(isc_result)); - ++Tx_nprobs; - } - } - - if (isc_result == ISC_R_SUCCESS) { - if (isc_time_compare(&llim, &now) > 0) { - t_info("timer range error: early by " - "%lu microseconds\n", - (unsigned long)isc_time_microdiff(&base, &now)); - ++Tx_nfails; - } else if (isc_time_compare(&ulim, &now) < 0) { - t_info("timer range error: late by " - "%lu microseconds\n", - (unsigned long)isc_time_microdiff(&now, &base)); - ++Tx_nfails; - } - Tx_lasttime = now; - } - - if (Tx_eventcnt == Tx_nevents) { - isc_result = isc_time_now(&Tx_endtime); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_time_now failed %s\n", - isc_result_totext(isc_result)); - ++Tx_nprobs; - } - isc_timer_detach(&Tx_timer); - isc_task_shutdown(task); - } - - isc_event_free(&event); -} - -static void -t_timers_x(isc_timertype_t timertype, isc_time_t *expires, - isc_interval_t *interval, - void (*action)(isc_task_t *, isc_event_t *)) -{ - char *p; - isc_mem_t *mctx; - isc_taskmgr_t *tmgr; - isc_task_t *task; - unsigned int workers; - isc_result_t isc_result; - isc_timermgr_t *timermgr; - - Tx_eventcnt = 0; - isc_time_settoepoch(&Tx_endtime); - - workers = 2; - p = t_getenv("ISC_TASK_WORKERS"); - if (p != NULL) - workers = atoi(p); - - mctx = NULL; - isc_result = isc_mem_create(0, 0, &mctx); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_mem_create failed %s\n", - isc_result_totext(isc_result)); - ++Tx_nprobs; - return; - } - - isc_result = isc_mutex_init(&Tx_mx); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_mutex_init failed %s\n", - isc_result_totext(isc_result)); - isc_mem_destroy(&mctx); - ++Tx_nprobs; - return; - } - - isc_result = isc_condition_init(&Tx_cv); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_condition_init failed %s\n", - isc_result_totext(isc_result)); - DESTROYLOCK(&Tx_mx); - isc_mem_destroy(&mctx); - ++Tx_nprobs; - return; - } - - tmgr = NULL; - isc_result = isc_taskmgr_create(mctx, workers, 0, &tmgr); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_taskmgr_create failed %s\n", - isc_result_totext(isc_result)); - DESTROYLOCK(&Tx_mx); - (void) isc_condition_destroy(&Tx_cv); - isc_mem_destroy(&mctx); - ++Tx_nprobs; - return; - } - - timermgr = NULL; - isc_result = isc_timermgr_create(mctx, &timermgr); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_timermgr_create failed %s\n", - isc_result_totext(isc_result)); - isc_taskmgr_destroy(&tmgr); - DESTROYLOCK(&Tx_mx); - (void) isc_condition_destroy(&Tx_cv); - isc_mem_destroy(&mctx); - ++Tx_nprobs; - return; - } - - isc_result = isc_mutex_lock(&Tx_mx); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_mutex_lock failed %s\n", - isc_result_totext(isc_result)); - isc_timermgr_destroy(&timermgr); - isc_taskmgr_destroy(&tmgr); - DESTROYLOCK(&Tx_mx); - (void) isc_condition_destroy(&Tx_cv); - isc_mem_destroy(&mctx); - ++Tx_nprobs; - return; - } - - task = NULL; - isc_result = isc_task_create(tmgr, 0, &task); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_task_create failed %s\n", - isc_result_totext(isc_result)); - isc_timermgr_destroy(&timermgr); - isc_taskmgr_destroy(&tmgr); - DESTROYLOCK(&Tx_mx); - (void) isc_condition_destroy(&Tx_cv); - isc_mem_destroy(&mctx); - ++Tx_nprobs; - return; - } - - isc_result = isc_task_onshutdown(task, tx_sde, NULL); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_task_onshutdown failed %s\n", - isc_result_totext(isc_result)); - isc_timermgr_destroy(&timermgr); - isc_task_destroy(&task); - isc_taskmgr_destroy(&tmgr); - DESTROYLOCK(&Tx_mx); - (void) isc_condition_destroy(&Tx_cv); - isc_mem_destroy(&mctx); - ++Tx_nprobs; - return; - } - - isc_result = isc_time_now(&Tx_lasttime); - if (isc_result != ISC_R_SUCCESS) { - isc_timermgr_destroy(&timermgr); - isc_task_destroy(&task); - isc_taskmgr_destroy(&tmgr); - DESTROYLOCK(&Tx_mx); - (void) isc_condition_destroy(&Tx_cv); - isc_mem_destroy(&mctx); - ++Tx_nprobs; - return; - } - - Tx_timer = NULL; - isc_result = isc_timer_create(timermgr, timertype, expires, interval, - task, action, (void *)timertype, - &Tx_timer); - - if (isc_result != ISC_R_SUCCESS) { - isc_timermgr_destroy(&timermgr); - isc_task_destroy(&task); - isc_taskmgr_destroy(&tmgr); - DESTROYLOCK(&Tx_mx); - (void) isc_condition_destroy(&Tx_cv); - isc_mem_destroy(&mctx); - ++Tx_nprobs; - return; - } - - /* - * Wait for shutdown processing to complete. - */ - while (Tx_eventcnt != Tx_nevents) { - isc_result = isc_condition_wait(&Tx_cv, &Tx_mx); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_condition_waituntil failed %s\n", - isc_result_totext(isc_result)); - ++Tx_nprobs; - } - } - - isc_result = isc_mutex_unlock(&Tx_mx); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_mutex_unlock failed %s\n", - isc_result_totext(isc_result)); - ++Tx_nprobs; - } - - isc_task_detach(&task); - isc_taskmgr_destroy(&tmgr); - isc_timermgr_destroy(&timermgr); - DESTROYLOCK(&Tx_mx); - (void) isc_condition_destroy(&Tx_cv); - isc_mem_destroy(&mctx); - -} - -#define T1_SECONDS 2 -#define T1_NANOSECONDS 500000000 - -static const char *a1 = - "When type is isc_timertype_ticker, a call to isc_timer_create() " - "creates a timer that posts an ISC_TIMEREVENT_TICK event to the " - "specified task every 'interval' seconds and returns ISC_R_SUCCESS."; - -static void -t1(void) { - int result; - isc_time_t expires; - isc_interval_t interval; - - t_assert("isc_timer_create", 1, T_REQUIRED, "%s", a1); - - if (threaded) { - Tx_nfails = 0; - Tx_nprobs = 0; - Tx_nevents = 12; - Tx_seconds = T1_SECONDS; - Tx_nanoseconds = T1_NANOSECONDS; - isc_interval_set(&interval, Tx_seconds, Tx_nanoseconds); - isc_time_settoepoch(&expires); - - t_timers_x(isc_timertype_ticker, &expires, &interval, tx_te); - - result = T_UNRESOLVED; - - if ((Tx_nfails == 0) && (Tx_nprobs == 0)) - result = T_PASS; - else if (Tx_nfails) - result = T_FAIL; - - t_result(result); - } else - require_threads(); -} - -#define T2_SECONDS 5 -#define T2_NANOSECONDS 300000000; - -static const char *a2 = - "When type is isc_timertype_once, a call to isc_timer_create() " - "creates a timer that posts an ISC_TIMEEVENT_LIFE event to the " - "specified task when the current time reaches or exceeds the time " - "specified by 'expires'."; - -static void -t2(void) { - int result; - int isc_result; - isc_time_t expires; - isc_interval_t interval; - - t_assert("isc_timer_create", 2, T_REQUIRED, "%s", a2); - - if (threaded) { - Tx_nfails = 0; - Tx_nprobs = 0; - Tx_nevents = 1; - Tx_seconds = T2_SECONDS; - Tx_nanoseconds = T2_NANOSECONDS; - isc_interval_set(&interval, Tx_seconds, Tx_nanoseconds); - - isc_result = isc_time_nowplusinterval(&expires, &interval); - if (isc_result == ISC_R_SUCCESS) { - - isc_interval_set(&interval, 0, 0); - t_timers_x(isc_timertype_once, &expires, &interval, - tx_te); - - } else { - t_info("isc_time_nowplusinterval failed %s\n", - isc_result_totext(isc_result)); - } - - result = T_UNRESOLVED; - - if ((Tx_nfails == 0) && (Tx_nprobs == 0)) - result = T_PASS; - else if (Tx_nfails) - result = T_FAIL; - - t_result(result); - } else - require_threads(); -} - -static void -t3_te(isc_task_t *task, isc_event_t *event) { - isc_result_t isc_result; - isc_time_t now; - isc_time_t base; - isc_time_t ulim; - isc_time_t llim; - isc_interval_t interval; - - ++Tx_eventcnt; - - t_info("tick %d\n", Tx_eventcnt); - - isc_result = isc_time_now(&now); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_time_now failed %s\n", - isc_result_totext(isc_result)); - ++Tx_nprobs; - } - - if (isc_result == ISC_R_SUCCESS) { - isc_interval_set(&interval, Tx_seconds, Tx_nanoseconds); - isc_result = isc_time_add(&Tx_lasttime, &interval, &base); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_time_add failed %s\n", - isc_result_totext(isc_result)); - ++Tx_nprobs; - } - } - - if (isc_result == ISC_R_SUCCESS) { - isc_interval_set(&interval, - Tx_FUDGE_SECONDS, Tx_FUDGE_NANOSECONDS); - isc_result = isc_time_add(&base, &interval, &ulim); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_time_add failed %s\n", - isc_result_totext(isc_result)); - ++Tx_nprobs; - } - } - - if (isc_result == ISC_R_SUCCESS) { - isc_result = isc_time_subtract(&base, &interval, &llim); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_time_subtract failed %s\n", - isc_result_totext(isc_result)); - ++Tx_nprobs; - } - } - - if (isc_result == ISC_R_SUCCESS) { - if (isc_time_compare(&llim, &now) > 0) { - t_info("timer range error: early by " - "%lu microseconds\n", - (unsigned long)isc_time_microdiff(&base, &now)); - ++Tx_nfails; - } else if (isc_time_compare(&ulim, &now) < 0) { - t_info("timer range error: late by " - "%lu microseconds\n", - (unsigned long)isc_time_microdiff(&now, &base)); - ++Tx_nfails; - } - Tx_lasttime = now; - } - - if (event->ev_type != ISC_TIMEREVENT_IDLE) { - t_info("received event type %d, expected type %d\n", - event->ev_type, ISC_TIMEREVENT_IDLE); - ++Tx_nfails; - } - - isc_timer_detach(&Tx_timer); - isc_task_shutdown(task); - isc_event_free(&event); -} - -#define T3_SECONDS 4 -#define T3_NANOSECONDS 400000000 - -static const char *a3 = - "When type is isc_timertype_once, a call to isc_timer_create() " - "creates a timer that posts an ISC_TIMEEVENT_IDLE event to the " - "specified task when the timer has been idle for 'interval' seconds."; - -static void -t3(void) { - int result; - int isc_result; - isc_time_t expires; - isc_interval_t interval; - - t_assert("isc_timer_create", 3, T_REQUIRED, "%s", a3); - - if (threaded) { - Tx_nfails = 0; - Tx_nprobs = 0; - Tx_nevents = 1; - Tx_seconds = T3_SECONDS; - Tx_nanoseconds = T3_NANOSECONDS; - - isc_interval_set(&interval, Tx_seconds + 1, Tx_nanoseconds); - - isc_result = isc_time_nowplusinterval(&expires, &interval); - if (isc_result == ISC_R_SUCCESS) { - isc_interval_set(&interval, Tx_seconds, - Tx_nanoseconds); - t_timers_x(isc_timertype_once, &expires, &interval, - t3_te); - } else { - t_info("isc_time_nowplusinterval failed %s\n", - isc_result_totext(isc_result)); - ++Tx_nprobs; - } - - result = T_UNRESOLVED; - - if ((Tx_nfails == 0) && (Tx_nprobs == 0)) - result = T_PASS; - else if (Tx_nfails) - result = T_FAIL; - - t_result(result); - } else - require_threads(); -} - -#define T4_SECONDS 2 -#define T4_NANOSECONDS 500000000 - -static void -t4_te(isc_task_t *task, isc_event_t *event) { - - isc_result_t isc_result; - isc_time_t now; - isc_time_t base; - isc_time_t ulim; - isc_time_t llim; - isc_time_t expires; - isc_interval_t interval; - - ++Tx_eventcnt; - - t_info("tick %d\n", Tx_eventcnt); - - /* - * Check expired time. - */ - - isc_result = isc_time_now(&now); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_time_now failed %s\n", - isc_result_totext(isc_result)); - ++Tx_nprobs; - } - - if (isc_result == ISC_R_SUCCESS) { - isc_interval_set(&interval, Tx_seconds, Tx_nanoseconds); - isc_result = isc_time_add(&Tx_lasttime, &interval, &base); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_time_add failed %s\n", - isc_result_totext(isc_result)); - ++Tx_nprobs; - } - } - - if (isc_result == ISC_R_SUCCESS) { - isc_interval_set(&interval, - Tx_FUDGE_SECONDS, Tx_FUDGE_NANOSECONDS); - isc_result = isc_time_add(&base, &interval, &ulim); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_time_add failed %s\n", - isc_result_totext(isc_result)); - ++Tx_nprobs; - } - } - - if (isc_result == ISC_R_SUCCESS) { - isc_result = isc_time_subtract(&base, &interval, &llim); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_time_subtract failed %s\n", - isc_result_totext(isc_result)); - ++Tx_nprobs; - } - } - - if (isc_result == ISC_R_SUCCESS) { - if (isc_time_compare(&llim, &now) > 0) { - t_info("timer range error: early by " - "%lu microseconds\n", - (unsigned long)isc_time_microdiff(&base, &now)); - ++Tx_nfails; - } else if (isc_time_compare(&ulim, &now) < 0) { - t_info("timer range error: late by " - "%lu microseconds\n", - (unsigned long)isc_time_microdiff(&now, &base)); - ++Tx_nfails; - } - Tx_lasttime = now; - } - - if (Tx_eventcnt < 3) { - if (event->ev_type != ISC_TIMEREVENT_TICK) { - t_info("received event type %d, expected type %d\n", - event->ev_type, ISC_TIMEREVENT_IDLE); - ++Tx_nfails; - } - if (Tx_eventcnt == 2) { - isc_interval_set(&interval, T4_SECONDS, - T4_NANOSECONDS); - isc_result = isc_time_nowplusinterval(&expires, - &interval); - if (isc_result == ISC_R_SUCCESS) { - isc_interval_set(&interval, 0, 0); - isc_result = - isc_timer_reset(Tx_timer, - isc_timertype_once, - &expires, &interval, - ISC_FALSE); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_timer_reset failed %s\n", - isc_result_totext(isc_result)); - ++Tx_nfails; - } - } else { - t_info("isc_time_nowplusinterval failed %s\n", - isc_result_totext(isc_result)); - ++Tx_nprobs; - } - } - } else { - if (event->ev_type != ISC_TIMEREVENT_LIFE) { - t_info("received event type %d, expected type %d\n", - event->ev_type, ISC_TIMEREVENT_IDLE); - ++Tx_nfails; - } - - isc_timer_detach(&Tx_timer); - isc_task_shutdown(task); - } - - isc_event_free(&event); -} - -static const char *a4 = - "A call to isc_timer_reset() changes the timer's type, expires and " - "interval values to the given values."; - -static void -t4(void) { - int result; - isc_time_t expires; - isc_interval_t interval; - - t_assert("isc_timer_reset", 4, T_REQUIRED, "%s", a4); - - if (threaded) { - Tx_nfails = 0; - Tx_nprobs = 0; - Tx_nevents = 3; - Tx_seconds = T4_SECONDS; - Tx_nanoseconds = T4_NANOSECONDS; - - isc_interval_set(&interval, T4_SECONDS, T4_NANOSECONDS); - isc_time_settoepoch(&expires); - t_timers_x(isc_timertype_ticker, &expires, &interval, t4_te); - - result = T_UNRESOLVED; - - if ((Tx_nfails == 0) && (Tx_nprobs == 0)) - result = T_PASS; - else if (Tx_nfails) - result = T_FAIL; - - t_result(result); - } else - require_threads(); -} - -#define T5_NTICKS 4 -#define T5_SECONDS 3 - -static int T5_startflag; -static int T5_shutdownflag; -static int T5_eventcnt; -static isc_mutex_t T5_mx; -static isc_condition_t T5_cv; -static int T5_nfails; -static int T5_nprobs; -static isc_timer_t *T5_tickertimer; -static isc_timer_t *T5_oncetimer; -static isc_task_t *T5_task1; -static isc_task_t *T5_task2; - -/* - * T5_task1 blocks on T5_mx while events accumulate - * in it's queue, until signaled by T5_task2. - */ - -static void -t5_start_event(isc_task_t *task, isc_event_t *event) { - isc_result_t isc_result; - - UNUSED(task); - - t_info("t5_start_event\n"); - - isc_result = isc_mutex_lock(&T5_mx); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_mutex_lock failed %s\n", - isc_result_totext(isc_result)); - ++T5_nprobs; - } - - while (! T5_startflag) { - (void) isc_condition_wait(&T5_cv, &T5_mx); - } - - isc_result = isc_mutex_unlock(&T5_mx); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_mutex_unlock failed %s\n", - isc_result_totext(isc_result)); - ++T5_nprobs; - } - isc_event_free(&event); -} - -static void -t5_tick_event(isc_task_t *task, isc_event_t *event) { - isc_result_t isc_result; - isc_time_t expires; - isc_interval_t interval; - - UNUSED(task); - - ++T5_eventcnt; - t_info("t5_tick_event %d\n", T5_eventcnt); - - /* - * On the first tick, purge all remaining tick events - * and then shut down the task. - */ - if (T5_eventcnt == 1) { - isc_time_settoepoch(&expires); - isc_interval_set(&interval, T5_SECONDS, 0); - isc_result = isc_timer_reset(T5_tickertimer, - isc_timertype_ticker, &expires, - &interval, ISC_TRUE); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_timer_reset failed %s\n", - isc_result_totext(isc_result)); - ++T5_nfails; - } - isc_task_shutdown(task); - } - isc_event_free(&event); -} - -static void -t5_once_event(isc_task_t *task, isc_event_t *event) { - - isc_result_t isc_result; - - t_info("t5_once_event\n"); - - /* - * Allow task1 to start processing events. - */ - isc_result = isc_mutex_lock(&T5_mx); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_mutex_lock failed %s\n", - isc_result_totext(isc_result)); - ++T5_nprobs; - } - - T5_startflag = 1; - - isc_result = isc_condition_broadcast(&T5_cv); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_condition_broadcast failed %s\n", - isc_result_totext(isc_result)); - ++T5_nprobs; - } - - isc_result = isc_mutex_unlock(&T5_mx); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_mutex_unlock failed %s\n", - isc_result_totext(isc_result)); - ++T5_nprobs; - } - - isc_event_free(&event); - isc_task_shutdown(task); -} - -static void -t5_shutdown_event(isc_task_t *task, isc_event_t *event) { - - isc_result_t isc_result; - - UNUSED(task); - UNUSED(event); - - t_info("t5_shutdown_event\n"); - - /* - * Signal shutdown processing complete. - */ - isc_result = isc_mutex_lock(&T5_mx); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_mutex_lock failed %s\n", - isc_result_totext(isc_result)); - ++T5_nprobs; - } - - T5_shutdownflag = 1; - - isc_result = isc_condition_signal(&T5_cv); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_condition_signal failed %s\n", - isc_result_totext(isc_result)); - ++T5_nprobs; - } - - isc_result = isc_mutex_unlock(&T5_mx); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_mutex_unlock failed %s\n", - isc_result_totext(isc_result)); - ++T5_nprobs; - } - isc_event_free(&event); -} - -static int -t_timers5(void) { - char *p; - int result; - isc_mem_t *mctx; - isc_taskmgr_t *tmgr; - unsigned int workers; - isc_result_t isc_result; - isc_timermgr_t *timermgr; - isc_event_t *event; - isc_time_t expires; - isc_interval_t interval; - - T5_startflag = 0; - T5_shutdownflag = 0; - T5_eventcnt = 0; - - workers = 2; - p = t_getenv("ISC_TASK_WORKERS"); - if (p != NULL) - workers = atoi(p); - - mctx = NULL; - isc_result = isc_mem_create(0, 0, &mctx); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_mem_create failed %s\n", - isc_result_totext(isc_result)); - return(T_UNRESOLVED); - } - - isc_result = isc_mutex_init(&T5_mx); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_mutex_init failed %s\n", - isc_result_totext(isc_result)); - isc_mem_destroy(&mctx); - return(T_UNRESOLVED); - } - - isc_result = isc_condition_init(&T5_cv); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_condition_init failed %s\n", - isc_result_totext(isc_result)); - DESTROYLOCK(&T5_mx); - isc_mem_destroy(&mctx); - return(T_UNRESOLVED); - } - - tmgr = NULL; - isc_result = isc_taskmgr_create(mctx, workers, 0, &tmgr); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_taskmgr_create failed %s\n", - isc_result_totext(isc_result)); - DESTROYLOCK(&T5_mx); - (void) isc_condition_destroy(&T5_cv); - isc_mem_destroy(&mctx); - return(T_UNRESOLVED); - } - - timermgr = NULL; - isc_result = isc_timermgr_create(mctx, &timermgr); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_timermgr_create failed %s\n", - isc_result_totext(isc_result)); - isc_taskmgr_destroy(&tmgr); - DESTROYLOCK(&T5_mx); - (void) isc_condition_destroy(&T5_cv); - isc_mem_destroy(&mctx); - return(T_UNRESOLVED); - } - - T5_task1 = NULL; - isc_result = isc_task_create(tmgr, 0, &T5_task1); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_task_create failed %s\n", - isc_result_totext(isc_result)); - isc_timermgr_destroy(&timermgr); - isc_taskmgr_destroy(&tmgr); - DESTROYLOCK(&T5_mx); - (void) isc_condition_destroy(&T5_cv); - isc_mem_destroy(&mctx); - return(T_UNRESOLVED); - } - - isc_result = isc_task_onshutdown(T5_task1, t5_shutdown_event, NULL); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_task_onshutdown failed %s\n", - isc_result_totext(isc_result)); - isc_timermgr_destroy(&timermgr); - isc_task_destroy(&T5_task1); - isc_taskmgr_destroy(&tmgr); - DESTROYLOCK(&T5_mx); - (void) isc_condition_destroy(&T5_cv); - isc_mem_destroy(&mctx); - return(T_UNRESOLVED); - } - - T5_task2 = NULL; - isc_result = isc_task_create(tmgr, 0, &T5_task2); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_task_create failed %s\n", - isc_result_totext(isc_result)); - isc_timermgr_destroy(&timermgr); - isc_task_destroy(&T5_task1); - isc_taskmgr_destroy(&tmgr); - DESTROYLOCK(&T5_mx); - (void) isc_condition_destroy(&T5_cv); - isc_mem_destroy(&mctx); - return(T_UNRESOLVED); - } - - isc_result = isc_mutex_lock(&T5_mx); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_mutex_lock failed %s\n", - isc_result_totext(isc_result)); - isc_timermgr_destroy(&timermgr); - isc_taskmgr_destroy(&tmgr); - DESTROYLOCK(&T5_mx); - (void) isc_condition_destroy(&T5_cv); - isc_mem_destroy(&mctx); - return(T_UNRESOLVED); - } - - event = isc_event_allocate(mctx, (void *)1 , (isc_eventtype_t)1, - t5_start_event, NULL, sizeof(*event)); - isc_task_send(T5_task1, &event); - - isc_time_settoepoch(&expires); - isc_interval_set(&interval, T5_SECONDS, 0); - - T5_tickertimer = NULL; - isc_result = isc_timer_create(timermgr, isc_timertype_ticker, - &expires, &interval, T5_task1, - t5_tick_event, NULL, &T5_tickertimer); - - if (isc_result != ISC_R_SUCCESS) { - isc_timermgr_destroy(&timermgr); - (void) isc_condition_signal(&T5_cv); - (void) isc_mutex_unlock(&T5_mx); - isc_task_destroy(&T5_task1); - isc_task_destroy(&T5_task2); - isc_taskmgr_destroy(&tmgr); - DESTROYLOCK(&T5_mx); - (void) isc_condition_destroy(&T5_cv); - isc_mem_destroy(&mctx); - return(T_UNRESOLVED); - } - - T5_oncetimer = NULL; - isc_interval_set(&interval, (T5_SECONDS * T5_NTICKS) + 2, 0); - isc_result = isc_time_nowplusinterval(&expires, &interval); - if (isc_result != ISC_R_SUCCESS) { - isc_timer_detach(&T5_tickertimer); - isc_timermgr_destroy(&timermgr); - (void)isc_condition_signal(&T5_cv); - (void)isc_mutex_unlock(&T5_mx); - isc_task_destroy(&T5_task1); - isc_task_destroy(&T5_task2); - isc_taskmgr_destroy(&tmgr); - DESTROYLOCK(&T5_mx); - (void) isc_condition_destroy(&T5_cv); - isc_mem_destroy(&mctx); - return(T_UNRESOLVED); - } - - isc_interval_set(&interval, 0, 0); - isc_result = isc_timer_create(timermgr, isc_timertype_once, - &expires, &interval, T5_task2, - t5_once_event, NULL, &T5_oncetimer); - - if (isc_result != ISC_R_SUCCESS) { - isc_timer_detach(&T5_tickertimer); - isc_timermgr_destroy(&timermgr); - (void) isc_condition_signal(&T5_cv); - (void) isc_mutex_unlock(&T5_mx); - isc_task_destroy(&T5_task1); - isc_task_destroy(&T5_task2); - isc_taskmgr_destroy(&tmgr); - DESTROYLOCK(&T5_mx); - (void) isc_condition_destroy(&T5_cv); - isc_mem_destroy(&mctx); - ++T5_nprobs; - return(T_UNRESOLVED); - } - - /* - * Wait for shutdown processing to complete. - */ - while (! T5_shutdownflag) { - isc_result = isc_condition_wait(&T5_cv, &T5_mx); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_condition_waituntil failed %s\n", - isc_result_totext(isc_result)); - ++T5_nprobs; - } - } - - isc_result = isc_mutex_unlock(&T5_mx); - if (isc_result != ISC_R_SUCCESS) { - t_info("isc_mutex_unlock failed %s\n", - isc_result_totext(isc_result)); - ++T5_nprobs; - } - - if (T5_eventcnt != 1) { - t_info("processed %d events\n", T5_eventcnt); - ++T5_nfails; - } - - isc_timer_detach(&T5_tickertimer); - isc_timer_detach(&T5_oncetimer); - isc_timermgr_destroy(&timermgr); - isc_task_destroy(&T5_task1); - isc_task_destroy(&T5_task2); - isc_taskmgr_destroy(&tmgr); - DESTROYLOCK(&T5_mx); - (void) isc_condition_destroy(&T5_cv); - isc_mem_destroy(&mctx); - - result = T_UNRESOLVED; - - if ((T5_nfails == 0) && (T5_nprobs == 0)) - result = T_PASS; - else if (T5_nfails) - result = T_FAIL; - - return (result); -} - -static const char *a5 = - "When 'purge' is TRUE, a call to isc_timer_reset() purges any pending " - "events from 'timer' from the task's event queue."; - -static void -t5(void) { - t_assert("isc_timer_reset", 5, T_REQUIRED, "%s", a5); - - if (threaded) - t_result(t_timers5()); - else - require_threads(); -} - -testspec_t T_testlist[] = { - { (PFV) t1, "timer_create" }, - { (PFV) t2, "timer_create" }, - { (PFV) t3, "timer_create" }, - { (PFV) t4, "timer_reset" }, - { (PFV) t5, "timer_reset" }, - { (PFV) NULL, NULL } -}; - -#ifdef WIN32 -int -main(int argc, char **argv) { - t_settests(T_testlist); - return (t_main(argc, argv)); -} -#endif diff --git a/bin/tests/timers/win32/t_timers.vcxproj.filters.in b/bin/tests/timers/win32/t_timers.vcxproj.filters.in deleted file mode 100644 index f98be97e4a4..00000000000 --- a/bin/tests/timers/win32/t_timers.vcxproj.filters.in +++ /dev/null @@ -1,22 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - - Source Files - - - \ No newline at end of file diff --git a/bin/tests/timers/win32/t_timers.vcxproj.in b/bin/tests/timers/win32/t_timers.vcxproj.in deleted file mode 100644 index 511a21ad321..00000000000 --- a/bin/tests/timers/win32/t_timers.vcxproj.in +++ /dev/null @@ -1,110 +0,0 @@ - - - - - Debug - @PLATFORM@ - - - Release - @PLATFORM@ - - - - {4E6F5A7C-89AA-4259-99DB-F89DAE418B3F} - Win32Proj - t_timers - - - - Application - true - MultiByte - - - Application - false - true - MultiByte - - - - - - - - - - - - - true - ..\..\..\..\Build\$(Configuration)\ - .\$(Configuration)\ - - - false - ..\..\..\..\Build\$(Configuration)\ - .\$(Configuration)\ - - - - - - Level3 - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - .\$(Configuration)\$(TargetName).pch - .\$(Configuration)\ - .\$(Configuration)\ - $(OutDir)$(TargetName).pdb - true - .\;..\..\..\..\;@LIBXML2_INC@..\..\..\..\lib\isc\win32;..\..\..\..\lib\isc\win32\include;..\..\..\..\lib\isc\include;..\..\..\..\lib\tests\include;%(AdditionalIncludeDirectories) - CompileAsC - - - Console - true - ..\..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt) - ..\..\..\..\lib\isc\win32\$(Configuration);..\..\..\..\lib\tests\win32\$(Configuration);%(AdditionalLibraryDirectories) - @LIBXML2_LIB@libisc.lib;libtests.lib;ws2_32.lib;%(AdditionalDependencies) - - - - - Level3 - - - MaxSpeed - true - @INTRINSIC@ - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - OnlyExplicitInline - false - true - .\$(Configuration)\$(TargetName).pch - .\$(Configuration)\ - .\$(Configuration)\ - $(OutDir)$(TargetName).pdb - .\;..\..\..\..\;@LIBXML2_INC@..\..\..\..\lib\isc\win32;..\..\..\..\lib\isc\win32\include;..\..\..\..\lib\isc\include;..\..\..\..\lib\tests\include;%(AdditionalIncludeDirectories) - CompileAsC - - - Console - false - true - true - ..\..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt) - Default - ..\..\..\..\lib\isc\win32\$(Configuration);..\..\..\..\lib\tests\win32\$(Configuration);%(AdditionalLibraryDirectories) - @LIBXML2_LIB@libisc.lib;libtests.lib;ws2_32.lib;%(AdditionalDependencies) - - - - - - - - - diff --git a/bin/tests/timers/win32/t_timers.vcxproj.user b/bin/tests/timers/win32/t_timers.vcxproj.user deleted file mode 100644 index 695b5c78b91..00000000000 --- a/bin/tests/timers/win32/t_timers.vcxproj.user +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/configure b/configure index d9f6b8e3969..cd299e8bc72 100755 --- a/configure +++ b/configure @@ -24157,7 +24157,7 @@ ac_config_commands="$ac_config_commands chmod" # elsewhere if there's a good reason for doing so. # -ac_config_files="$ac_config_files make/Makefile make/mkdep Makefile bin/Makefile bin/check/Makefile bin/confgen/Makefile bin/confgen/unix/Makefile bin/delv/Makefile bin/dig/Makefile bin/dnssec/Makefile bin/named/Makefile bin/named/unix/Makefile bin/nsupdate/Makefile bin/pkcs11/Makefile bin/python/Makefile bin/python/isc/Makefile bin/python/isc/utils.py bin/python/isc/tests/Makefile bin/python/dnssec-checkds.py bin/python/dnssec-coverage.py bin/python/dnssec-keymgr.py bin/python/isc/__init__.py bin/python/isc/checkds.py bin/python/isc/coverage.py bin/python/isc/dnskey.py bin/python/isc/eventlist.py bin/python/isc/keydict.py bin/python/isc/keyevent.py bin/python/isc/keymgr.py bin/python/isc/keyseries.py bin/python/isc/keyzone.py bin/python/isc/policy.py bin/python/isc/rndc.py bin/python/isc/tests/dnskey_test.py bin/python/isc/tests/policy_test.py bin/rndc/Makefile bin/tests/Makefile bin/tests/db/Makefile bin/tests/dst/Makefile bin/tests/dst/Kdh.+002+18602.key bin/tests/dst/Kdh.+002+18602.private bin/tests/dst/Kdh.+002+48957.key bin/tests/dst/Kdh.+002+48957.private bin/tests/dst/Ktest.+001+00002.key bin/tests/dst/Ktest.+001+54622.key bin/tests/dst/Ktest.+001+54622.private bin/tests/dst/Ktest.+003+23616.key bin/tests/dst/Ktest.+003+23616.private bin/tests/dst/Ktest.+003+49667.key bin/tests/dst/dst_2_data bin/tests/dst/t2_data_1 bin/tests/dst/t2_data_2 bin/tests/dst/t2_dsasig bin/tests/dst/t2_rsasig bin/tests/headerdep_test.sh bin/tests/names/Makefile bin/tests/optional/Makefile bin/tests/pkcs11/Makefile bin/tests/pkcs11/benchmarks/Makefile bin/tests/rbt/Makefile bin/tests/resolver/Makefile bin/tests/system/Makefile bin/tests/system/conf.sh bin/tests/system/dlz/prereq.sh bin/tests/system/dlzexternal/Makefile bin/tests/system/dlzexternal/ns1/dlzs.conf bin/tests/system/dyndb/Makefile bin/tests/system/dyndb/driver/Makefile bin/tests/system/inline/checkdsa.sh bin/tests/system/pipelined/Makefile bin/tests/system/rndc/Makefile bin/tests/system/rpz/Makefile bin/tests/system/rsabigexponent/Makefile bin/tests/system/tkey/Makefile bin/tests/tasks/Makefile bin/tests/timers/Makefile bin/tests/virtual-time/Makefile bin/tests/virtual-time/conf.sh bin/tools/Makefile contrib/scripts/check-secure-delegation.pl contrib/scripts/zone-edit.sh doc/Makefile doc/arm/Makefile doc/arm/noteversion.xml doc/arm/pkgversion.xml doc/arm/releaseinfo.xml doc/doxygen/Doxyfile doc/doxygen/Makefile doc/doxygen/doxygen-input-filter doc/misc/Makefile doc/tex/Makefile doc/tex/armstyle.sty doc/xsl/Makefile doc/xsl/isc-docbook-chunk.xsl doc/xsl/isc-docbook-html.xsl doc/xsl/isc-manpage.xsl doc/xsl/isc-notes-html.xsl isc-config.sh lib/Makefile lib/bind9/Makefile lib/bind9/include/Makefile lib/bind9/include/bind9/Makefile lib/dns/Makefile lib/dns/include/Makefile lib/dns/include/dns/Makefile lib/dns/include/dst/Makefile lib/dns/tests/Makefile lib/irs/Makefile lib/irs/include/Makefile lib/irs/include/irs/Makefile lib/irs/include/irs/netdb.h lib/irs/include/irs/platform.h lib/irs/tests/Makefile lib/isc/$arch/Makefile lib/isc/$arch/include/Makefile lib/isc/$arch/include/isc/Makefile lib/isc/$thread_dir/Makefile lib/isc/$thread_dir/include/Makefile lib/isc/$thread_dir/include/isc/Makefile lib/isc/Makefile lib/isc/include/Makefile lib/isc/include/isc/Makefile lib/isc/include/isc/platform.h lib/isc/include/pk11/Makefile lib/isc/include/pkcs11/Makefile lib/isc/tests/Makefile lib/isc/nls/Makefile lib/isc/unix/Makefile lib/isc/unix/include/Makefile lib/isc/unix/include/isc/Makefile lib/isc/unix/include/pkcs11/Makefile lib/isccc/Makefile lib/isccc/include/Makefile lib/isccc/include/isccc/Makefile lib/isccfg/Makefile lib/isccfg/include/Makefile lib/isccfg/include/isccfg/Makefile lib/isccfg/tests/Makefile lib/ns/Makefile lib/ns/include/Makefile lib/ns/include/ns/Makefile lib/ns/tests/Makefile lib/tests/Makefile lib/tests/include/Makefile lib/tests/include/tests/Makefile lib/samples/Makefile lib/samples/Makefile-postinstall unit/Makefile unit/unittest.sh" +ac_config_files="$ac_config_files make/Makefile make/mkdep Makefile bin/Makefile bin/check/Makefile bin/confgen/Makefile bin/confgen/unix/Makefile bin/delv/Makefile bin/dig/Makefile bin/dnssec/Makefile bin/named/Makefile bin/named/unix/Makefile bin/nsupdate/Makefile bin/pkcs11/Makefile bin/python/Makefile bin/python/isc/Makefile bin/python/isc/utils.py bin/python/isc/tests/Makefile bin/python/dnssec-checkds.py bin/python/dnssec-coverage.py bin/python/dnssec-keymgr.py bin/python/isc/__init__.py bin/python/isc/checkds.py bin/python/isc/coverage.py bin/python/isc/dnskey.py bin/python/isc/eventlist.py bin/python/isc/keydict.py bin/python/isc/keyevent.py bin/python/isc/keymgr.py bin/python/isc/keyseries.py bin/python/isc/keyzone.py bin/python/isc/policy.py bin/python/isc/rndc.py bin/python/isc/tests/dnskey_test.py bin/python/isc/tests/policy_test.py bin/rndc/Makefile bin/tests/Makefile bin/tests/db/Makefile bin/tests/dst/Makefile bin/tests/dst/Kdh.+002+18602.key bin/tests/dst/Kdh.+002+18602.private bin/tests/dst/Kdh.+002+48957.key bin/tests/dst/Kdh.+002+48957.private bin/tests/dst/Ktest.+001+00002.key bin/tests/dst/Ktest.+001+54622.key bin/tests/dst/Ktest.+001+54622.private bin/tests/dst/Ktest.+003+23616.key bin/tests/dst/Ktest.+003+23616.private bin/tests/dst/Ktest.+003+49667.key bin/tests/dst/dst_2_data bin/tests/dst/t2_data_1 bin/tests/dst/t2_data_2 bin/tests/dst/t2_dsasig bin/tests/dst/t2_rsasig bin/tests/headerdep_test.sh bin/tests/names/Makefile bin/tests/optional/Makefile bin/tests/pkcs11/Makefile bin/tests/pkcs11/benchmarks/Makefile bin/tests/rbt/Makefile bin/tests/resolver/Makefile bin/tests/system/Makefile bin/tests/system/conf.sh bin/tests/system/dlz/prereq.sh bin/tests/system/dlzexternal/Makefile bin/tests/system/dlzexternal/ns1/dlzs.conf bin/tests/system/dyndb/Makefile bin/tests/system/dyndb/driver/Makefile bin/tests/system/inline/checkdsa.sh bin/tests/system/pipelined/Makefile bin/tests/system/rndc/Makefile bin/tests/system/rpz/Makefile bin/tests/system/rsabigexponent/Makefile bin/tests/system/tkey/Makefile bin/tests/tasks/Makefile bin/tests/virtual-time/Makefile bin/tests/virtual-time/conf.sh bin/tools/Makefile contrib/scripts/check-secure-delegation.pl contrib/scripts/zone-edit.sh doc/Makefile doc/arm/Makefile doc/arm/noteversion.xml doc/arm/pkgversion.xml doc/arm/releaseinfo.xml doc/doxygen/Doxyfile doc/doxygen/Makefile doc/doxygen/doxygen-input-filter doc/misc/Makefile doc/tex/Makefile doc/tex/armstyle.sty doc/xsl/Makefile doc/xsl/isc-docbook-chunk.xsl doc/xsl/isc-docbook-html.xsl doc/xsl/isc-manpage.xsl doc/xsl/isc-notes-html.xsl isc-config.sh lib/Makefile lib/bind9/Makefile lib/bind9/include/Makefile lib/bind9/include/bind9/Makefile lib/dns/Makefile lib/dns/include/Makefile lib/dns/include/dns/Makefile lib/dns/include/dst/Makefile lib/dns/tests/Makefile lib/irs/Makefile lib/irs/include/Makefile lib/irs/include/irs/Makefile lib/irs/include/irs/netdb.h lib/irs/include/irs/platform.h lib/irs/tests/Makefile lib/isc/$arch/Makefile lib/isc/$arch/include/Makefile lib/isc/$arch/include/isc/Makefile lib/isc/$thread_dir/Makefile lib/isc/$thread_dir/include/Makefile lib/isc/$thread_dir/include/isc/Makefile lib/isc/Makefile lib/isc/include/Makefile lib/isc/include/isc/Makefile lib/isc/include/isc/platform.h lib/isc/include/pk11/Makefile lib/isc/include/pkcs11/Makefile lib/isc/tests/Makefile lib/isc/nls/Makefile lib/isc/unix/Makefile lib/isc/unix/include/Makefile lib/isc/unix/include/isc/Makefile lib/isc/unix/include/pkcs11/Makefile lib/isccc/Makefile lib/isccc/include/Makefile lib/isccc/include/isccc/Makefile lib/isccfg/Makefile lib/isccfg/include/Makefile lib/isccfg/include/isccfg/Makefile lib/isccfg/tests/Makefile lib/ns/Makefile lib/ns/include/Makefile lib/ns/include/ns/Makefile lib/ns/tests/Makefile lib/tests/Makefile lib/tests/include/Makefile lib/tests/include/tests/Makefile lib/samples/Makefile lib/samples/Makefile-postinstall unit/Makefile unit/unittest.sh" # @@ -25234,7 +25234,6 @@ do "bin/tests/system/rsabigexponent/Makefile") CONFIG_FILES="$CONFIG_FILES bin/tests/system/rsabigexponent/Makefile" ;; "bin/tests/system/tkey/Makefile") CONFIG_FILES="$CONFIG_FILES bin/tests/system/tkey/Makefile" ;; "bin/tests/tasks/Makefile") CONFIG_FILES="$CONFIG_FILES bin/tests/tasks/Makefile" ;; - "bin/tests/timers/Makefile") CONFIG_FILES="$CONFIG_FILES bin/tests/timers/Makefile" ;; "bin/tests/virtual-time/Makefile") CONFIG_FILES="$CONFIG_FILES bin/tests/virtual-time/Makefile" ;; "bin/tests/virtual-time/conf.sh") CONFIG_FILES="$CONFIG_FILES bin/tests/virtual-time/conf.sh" ;; "bin/tools/Makefile") CONFIG_FILES="$CONFIG_FILES bin/tools/Makefile" ;; diff --git a/configure.in b/configure.in index 7c63b5fc5d3..860933e5f7e 100644 --- a/configure.in +++ b/configure.in @@ -5351,7 +5351,6 @@ AC_CONFIG_FILES([ bin/tests/system/rsabigexponent/Makefile bin/tests/system/tkey/Makefile bin/tests/tasks/Makefile - bin/tests/timers/Makefile bin/tests/virtual-time/Makefile bin/tests/virtual-time/conf.sh bin/tools/Makefile diff --git a/lib/isc/tests/Atffile b/lib/isc/tests/Atffile index 5ed35d264b4..b1cbfe50f79 100644 --- a/lib/isc/tests/Atffile +++ b/lib/isc/tests/Atffile @@ -28,4 +28,5 @@ tp: socket_test tp: symtab_test tp: task_test tp: taskpool_test +tp: timer_test tp: time_test diff --git a/lib/isc/tests/Makefile.in b/lib/isc/tests/Makefile.in index 7e8ca30b75e..ff22d224625 100644 --- a/lib/isc/tests/Makefile.in +++ b/lib/isc/tests/Makefile.in @@ -35,7 +35,7 @@ SRCS = isctest.c aes_test.c atomic_test.c buffer_test.c \ print_test.c queue_test.c radix_test.c random_test.c \ regex_test.c result_test.c safe_test.c sockaddr_test.c \ socket_test.c socket_test.c symtab_test.c task_test.c \ - taskpool_test.c time_test.c + taskpool_test.c time_test.c timer_test.c SUBDIRS = TARGETS = aes_test@EXEEXT@ atomic_test@EXEEXT@ buffer_test@EXEEXT@ \ @@ -47,7 +47,7 @@ TARGETS = aes_test@EXEEXT@ atomic_test@EXEEXT@ buffer_test@EXEEXT@ \ random_test@EXEEXT@ regex_test@EXEEXT@ result_test@EXEEXT@ \ safe_test@EXEEXT@ sockaddr_test@EXEEXT@ socket_test@EXEEXT@ \ socket_test@EXEEXT@ symtab_test@EXEEXT@ task_test@EXEEXT@ \ - taskpool_test@EXEEXT@ time_test@EXEEXT@ + taskpool_test@EXEEXT@ time_test@EXEEXT@ timer_test@EXEEXT@ @BIND9_MAKE_RULES@ @@ -165,6 +165,10 @@ time_test@EXEEXT@: time_test.@O@ ${ISCDEPLIBS} ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ \ time_test.@O@ ${ISCLIBS} ${LIBS} +timer_test@EXEEXT@: timer_test.@O@ isctest.@O@ ${ISCDEPLIBS} + ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ \ + timer_test.@O@ isctest.@O@ ${ISCLIBS} ${LIBS} + unit:: sh ${top_builddir}/unit/unittest.sh diff --git a/lib/isc/tests/atomic_test.c b/lib/isc/tests/atomic_test.c index 3777073a789..9bb6cc943bf 100644 --- a/lib/isc/tests/atomic_test.c +++ b/lib/isc/tests/atomic_test.c @@ -64,7 +64,7 @@ ATF_TC_BODY(atomic_xadd, tc) { UNUSED(tc); - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); memset(counters, 0, sizeof(counters)); @@ -126,7 +126,7 @@ ATF_TC_BODY(atomic_xaddq, tc) { UNUSED(tc); - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); memset(counters, 0, sizeof(counters)); @@ -196,7 +196,7 @@ ATF_TC_BODY(atomic_store, tc) { UNUSED(tc); - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); memset(counters, 0, sizeof(counters)); @@ -273,7 +273,7 @@ ATF_TC_BODY(atomic_storeq, tc) { UNUSED(tc); - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); memset(counters, 0, sizeof(counters)); diff --git a/lib/isc/tests/buffer_test.c b/lib/isc/tests/buffer_test.c index 0c17eb63afa..9fead36a0ee 100644 --- a/lib/isc/tests/buffer_test.c +++ b/lib/isc/tests/buffer_test.c @@ -31,7 +31,7 @@ ATF_TC_BODY(isc_buffer_reserve, tc) { isc_result_t result; isc_buffer_t *b; - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); b = NULL; @@ -105,7 +105,7 @@ ATF_TC_BODY(isc_buffer_reallocate, tc) { isc_result_t result; isc_buffer_t *b; - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); b = NULL; @@ -142,7 +142,7 @@ ATF_TC_BODY(isc_buffer_dynamic, tc) { size_t last_length = 10; int i; - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); b = NULL; @@ -205,7 +205,7 @@ ATF_TC_BODY(isc_buffer_printf, tc) { isc_buffer_t *b, sb; char buf[8]; - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); /* diff --git a/lib/isc/tests/counter_test.c b/lib/isc/tests/counter_test.c index d24557241cd..f2a5bcd0318 100644 --- a/lib/isc/tests/counter_test.c +++ b/lib/isc/tests/counter_test.c @@ -28,7 +28,7 @@ ATF_TC_BODY(isc_counter, tc) { isc_counter_t *counter = NULL; int i; - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); result = isc_counter_create(mctx, 0, &counter); diff --git a/lib/isc/tests/isctest.c b/lib/isc/tests/isctest.c index 29c50d7e44f..bb1a6245b22 100644 --- a/lib/isc/tests/isctest.c +++ b/lib/isc/tests/isctest.c @@ -9,12 +9,11 @@ * information regarding copyright ownership. */ -/* $Id$ */ - /*! \file */ #include +#include #include #include @@ -70,15 +69,24 @@ cleanup_managers(void) { } static isc_result_t -create_managers(void) { +create_managers(unsigned int workers) { isc_result_t result; + char *p; + + if (workers == 0) { #ifdef ISC_PLATFORM_USETHREADS - ncpus = isc_os_ncpus(); + workers = isc_os_ncpus(); #else - ncpus = 1; + workers = 1; #endif + } + + p = getenv("ISC_TASK_WORKERS"); + if (p != NULL) { + workers = atoi(p); + } - CHECK(isc_taskmgr_create(mctx, ncpus, 0, &taskmgr)); + CHECK(isc_taskmgr_create(mctx, workers, 0, &taskmgr)); CHECK(isc_task_create(taskmgr, 0, &maintask)); isc_taskmgr_setexcltask(taskmgr, maintask); @@ -92,7 +100,9 @@ create_managers(void) { } isc_result_t -isc_test_begin(FILE *logfile, isc_boolean_t start_managers) { +isc_test_begin(FILE *logfile, isc_boolean_t start_managers, + unsigned int workers) +{ isc_result_t result; isc_mem_debugging |= ISC_MEM_DEBUGRECORD; @@ -127,8 +137,9 @@ isc_test_begin(FILE *logfile, isc_boolean_t start_managers) { ncpus = 1; #endif - if (start_managers) - CHECK(create_managers()); + if (start_managers) { + CHECK(create_managers(workers)); + } return (ISC_R_SUCCESS); diff --git a/lib/isc/tests/isctest.h b/lib/isc/tests/isctest.h index caf1c3c7492..b596993ccb6 100644 --- a/lib/isc/tests/isctest.h +++ b/lib/isc/tests/isctest.h @@ -9,8 +9,6 @@ * information regarding copyright ownership. */ -/* $Id$ */ - /*! \file */ #include @@ -43,7 +41,18 @@ extern isc_socketmgr_t *socketmgr; extern int ncpus; isc_result_t -isc_test_begin(FILE *logfile, isc_boolean_t start_managers); +isc_test_begin(FILE *logfile, isc_boolean_t start_managers, + unsigned int workers); +/*%< + * Begin test, logging to 'logfile' or default if not specified. + * + * If 'start_managers' is set, start a task manager, timer manager, + * and socket manager. + * + * If 'workers' is zero, use the number of CPUs on the system as a default; + * otherwise, set up the task manager with the specified number of worker + * threads. The environment variable ISC_TASK_WORKERS overrides this value. + */ void isc_test_end(void); diff --git a/lib/isc/tests/mem_test.c b/lib/isc/tests/mem_test.c index 218299ef65a..60aa07e2f74 100644 --- a/lib/isc/tests/mem_test.c +++ b/lib/isc/tests/mem_test.c @@ -60,7 +60,7 @@ ATF_TC_BODY(isc_mem, tc) { unsigned int i, j; int rval; - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); result = isc_mem_create(0, 0, &localmctx); @@ -152,7 +152,7 @@ ATF_TC_BODY(isc_mem_total, tc) { ssize_t diff; int i; - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); /* Local alloc, free */ @@ -219,7 +219,7 @@ ATF_TC_BODY(isc_mem_inuse, tc) { ssize_t diff; void *ptr; - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); mctx2 = NULL; @@ -264,7 +264,7 @@ ATF_TC_BODY(isc_mem_noflags, tc) { result = isc_stdio_open("mem.output", "w", &f); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); result = isc_mem_createx2(0, 0, default_memalloc, default_memfree, @@ -316,7 +316,7 @@ ATF_TC_BODY(isc_mem_recordflag, tc) { result = isc_stdio_open("mem.output", "w", &f); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); - result = isc_test_begin(NULL, ISC_FALSE); + result = isc_test_begin(NULL, ISC_FALSE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); result = isc_mem_createx2(0, 0, default_memalloc, default_memfree, @@ -366,7 +366,7 @@ ATF_TC_BODY(isc_mem_traceflag, tc) { f = freopen("mem.output", "w", stderr); ATF_REQUIRE(f != NULL); - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); result = isc_mem_createx2(0, 0, default_memalloc, default_memfree, diff --git a/lib/isc/tests/parse_test.c b/lib/isc/tests/parse_test.c index 7f7f4ad3302..9409dd0e90b 100644 --- a/lib/isc/tests/parse_test.c +++ b/lib/isc/tests/parse_test.c @@ -9,8 +9,6 @@ * information regarding copyright ownership. */ -/* $Id$ */ - /*! \file */ #include @@ -38,7 +36,7 @@ ATF_TC_BODY(parse_overflow, tc) { isc_uint32_t output; UNUSED(tc); - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); result = isc_parse_uint32(&output, "1234567890", 10); diff --git a/lib/isc/tests/pool_test.c b/lib/isc/tests/pool_test.c index 45ad3dee20a..0d24779920a 100644 --- a/lib/isc/tests/pool_test.c +++ b/lib/isc/tests/pool_test.c @@ -9,8 +9,6 @@ * information regarding copyright ownership. */ -/* $Id$ */ - /*! \file */ #include @@ -60,7 +58,7 @@ ATF_TC_BODY(create_pool, tc) { UNUSED(tc); - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); result = isc_pool_create(mctx, 8, poolfree, poolinit, taskmgr, &pool); @@ -84,7 +82,7 @@ ATF_TC_BODY(expand_pool, tc) { UNUSED(tc); - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); result = isc_pool_create(mctx, 10, poolfree, poolinit, taskmgr, &pool1); @@ -138,7 +136,7 @@ ATF_TC_BODY(get_objects, tc) { UNUSED(tc); - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); result = isc_pool_create(mctx, 2, poolfree, poolinit, taskmgr, &pool); diff --git a/lib/isc/tests/queue_test.c b/lib/isc/tests/queue_test.c index 388aa873b11..36bdb9fa504 100644 --- a/lib/isc/tests/queue_test.c +++ b/lib/isc/tests/queue_test.c @@ -9,8 +9,6 @@ * information regarding copyright ownership. */ -/* $Id$ */ - /*! \file */ #include @@ -63,7 +61,7 @@ ATF_TC_BODY(queue_valid, tc) { item_init(&four, 4); item_init(&five, 5); - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); ATF_CHECK(ISC_QUEUE_EMPTY(queue)); diff --git a/lib/isc/tests/radix_test.c b/lib/isc/tests/radix_test.c index a89e6cc2939..6ca730dff51 100644 --- a/lib/isc/tests/radix_test.c +++ b/lib/isc/tests/radix_test.c @@ -38,7 +38,7 @@ ATF_TC_BODY(isc_radix_search, tc) { UNUSED(tc); - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); result = isc_radix_create(mctx, &radix, 32); diff --git a/lib/isc/tests/sockaddr_test.c b/lib/isc/tests/sockaddr_test.c index 772f6c97865..59b7275211b 100644 --- a/lib/isc/tests/sockaddr_test.c +++ b/lib/isc/tests/sockaddr_test.c @@ -41,7 +41,7 @@ ATF_TC_BODY(sockaddr_hash, tc) { UNUSED(tc); - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); in.s_addr = inet_addr("127.0.0.1"); diff --git a/lib/isc/tests/socket_test.c b/lib/isc/tests/socket_test.c index 750ad2d703b..06a8b5ea420 100644 --- a/lib/isc/tests/socket_test.c +++ b/lib/isc/tests/socket_test.c @@ -157,7 +157,7 @@ ATF_TC_BODY(udp_sendto, tc) { UNUSED(tc); - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); in.s_addr = inet_addr("127.0.0.1"); @@ -232,7 +232,7 @@ ATF_TC_BODY(udp_dup, tc) { UNUSED(tc); - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); in.s_addr = inet_addr("127.0.0.1"); @@ -334,7 +334,7 @@ ATF_TC_BODY(udp_dscp_v4, tc) { UNUSED(tc); - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); in.s_addr = inet_addr("127.0.0.1"); @@ -439,7 +439,7 @@ ATF_TC_BODY(udp_dscp_v6, tc) { UNUSED(tc); - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); n = inet_pton(AF_INET6, "::1", &in6.s6_addr); @@ -544,7 +544,7 @@ ATF_TC_BODY(tcp_dscp_v4, tc) { UNUSED(tc); - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); in.s_addr = inet_addr("127.0.0.1"); @@ -644,7 +644,7 @@ ATF_TC_BODY(tcp_dscp_v6, tc) { UNUSED(tc); - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); n = inet_pton(AF_INET6, "::1", &in6.s6_addr); diff --git a/lib/isc/tests/symtab_test.c b/lib/isc/tests/symtab_test.c index db412136ab8..41b7bd6308a 100644 --- a/lib/isc/tests/symtab_test.c +++ b/lib/isc/tests/symtab_test.c @@ -9,8 +9,6 @@ * information regarding copyright ownership. */ -/* $Id$ */ - /*! \file */ #include @@ -50,7 +48,7 @@ ATF_TC_BODY(symtab_grow, tc) { UNUSED(tc); - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); result = isc_symtab_create(mctx, 3, undefine, NULL, ISC_FALSE, &st); diff --git a/lib/isc/tests/task_test.c b/lib/isc/tests/task_test.c index 029009e0e90..f70a4d3fa2b 100644 --- a/lib/isc/tests/task_test.c +++ b/lib/isc/tests/task_test.c @@ -71,7 +71,7 @@ ATF_TC_BODY(create_task, tc) { UNUSED(tc); - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); result = isc_task_create(taskmgr, 0, &task); @@ -102,7 +102,7 @@ ATF_TC_BODY(all_events, tc) { result = isc_mutex_init(&set_lock); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); result = isc_task_create(taskmgr, 0, &task); @@ -158,7 +158,7 @@ ATF_TC_BODY(privileged_events, tc) { result = isc_mutex_init(&set_lock); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); #ifdef ISC_PLATFORM_USETHREADS @@ -287,7 +287,7 @@ ATF_TC_BODY(privilege_drop, tc) { result = isc_mutex_init(&set_lock); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); #ifdef ISC_PLATFORM_USETHREADS diff --git a/lib/isc/tests/taskpool_test.c b/lib/isc/tests/taskpool_test.c index e019468d035..e89da377f56 100644 --- a/lib/isc/tests/taskpool_test.c +++ b/lib/isc/tests/taskpool_test.c @@ -9,8 +9,6 @@ * information regarding copyright ownership. */ -/* $Id$ */ - /*! \file */ #include @@ -39,7 +37,7 @@ ATF_TC_BODY(create_pool, tc) { UNUSED(tc); - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); result = isc_taskpool_create(taskmgr, mctx, 8, 2, &pool); @@ -63,7 +61,7 @@ ATF_TC_BODY(expand_pool, tc) { UNUSED(tc); - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); result = isc_taskpool_create(taskmgr, mctx, 10, 2, &pool1); @@ -116,7 +114,7 @@ ATF_TC_BODY(get_tasks, tc) { UNUSED(tc); - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); result = isc_taskpool_create(taskmgr, mctx, 2, 2, &pool); @@ -155,7 +153,7 @@ ATF_TC_BODY(set_privilege, tc) { UNUSED(tc); - result = isc_test_begin(NULL, ISC_TRUE); + result = isc_test_begin(NULL, ISC_TRUE, 0); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); result = isc_taskpool_create(taskmgr, mctx, 2, 2, &pool); diff --git a/lib/isc/tests/timer_test.c b/lib/isc/tests/timer_test.c new file mode 100644 index 00000000000..0355ab9ae39 --- /dev/null +++ b/lib/isc/tests/timer_test.c @@ -0,0 +1,575 @@ +/* + * Copyright (C) Internet Systems Consortium, Inc. ("ISC") + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * See the COPYRIGHT file distributed with this work for additional + * information regarding copyright ownership. + */ + +/*! \file */ + +#include + +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "isctest.h" + +/* + * Helper functions + */ +#define FUDGE_SECONDS 0 /* in absence of clock_getres() */ +#define FUDGE_NANOSECONDS 500000000 /* in absence of clock_getres() */ + +static isc_timer_t *timer = NULL; +static isc_condition_t cv; +static isc_mutex_t mx; +static isc_time_t endtime; +static isc_time_t lasttime; +static int seconds; +static int nanoseconds; +static int eventcnt; +static int nevents; + +static void +shutdown(isc_task_t *task, isc_event_t *event) { + isc_result_t result; + + UNUSED(task); + + /* + * Signal shutdown processing complete. + */ + result = isc_mutex_lock(&mx); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + result = isc_condition_signal(&cv); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + result = isc_mutex_unlock(&mx); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + isc_event_free(&event); +} + +static void +setup_test(isc_timertype_t timertype, isc_time_t *expires, + isc_interval_t *interval, + void (*action)(isc_task_t *, isc_event_t *)) +{ + isc_result_t result; + isc_task_t *task = NULL; + isc_time_settoepoch(&endtime); + eventcnt = 0; + + result = isc_mutex_init(&mx); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + result = isc_condition_init(&cv); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + LOCK(&mx); + + result = isc_task_create(taskmgr, 0, &task); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + result = isc_task_onshutdown(task, shutdown, NULL); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + result = isc_time_now(&lasttime); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + result = isc_timer_create(timermgr, timertype, expires, interval, + task, action, (void *)timertype, + &timer); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + /* + * Wait for shutdown processing to complete. + */ + while (eventcnt != nevents) { + result = isc_condition_wait(&cv, &mx); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + } + + UNLOCK(&mx); + + isc_task_detach(&task); + DESTROYLOCK(&mx); + (void) isc_condition_destroy(&cv); +} + +static void +ticktock(isc_task_t *task, isc_event_t *event) { + isc_result_t result; + isc_time_t now; + isc_time_t base; + isc_time_t ulim; + isc_time_t llim; + isc_interval_t interval; + isc_eventtype_t expected_event_type; + + ++eventcnt; + + printf("tick %d\n", eventcnt); + + expected_event_type = ISC_TIMEREVENT_LIFE; + if ((isc_timertype_t) event->ev_arg == isc_timertype_ticker) { + expected_event_type = ISC_TIMEREVENT_TICK; + } + + if (event->ev_type != expected_event_type) { + printf("expected event type %d, got %d\n", + expected_event_type, (int) event->ev_type); + } + + result = isc_time_now(&now); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + isc_interval_set(&interval, seconds, nanoseconds); + result = isc_time_add(&lasttime, &interval, &base); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + isc_interval_set(&interval, FUDGE_SECONDS, FUDGE_NANOSECONDS); + result = isc_time_add(&base, &interval, &ulim); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + result = isc_time_subtract(&base, &interval, &llim); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + ATF_CHECK(isc_time_compare(&llim, &now) <= 0); + ATF_CHECK(isc_time_compare(&ulim, &now) >= 0); + lasttime = now; + + if (eventcnt == nevents) { + result = isc_time_now(&endtime); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + isc_timer_detach(&timer); + isc_task_shutdown(task); + } + + isc_event_free(&event); +} + +/* + * Individual unit tests + */ + +ATF_TC(ticker); +ATF_TC_HEAD(ticker, tc) { + atf_tc_set_md_var(tc, "descr", "timer type ticker"); +} +ATF_TC_BODY(ticker, tc) { + isc_result_t result; + isc_time_t expires; + isc_interval_t interval; + + UNUSED(tc); + + nevents = 12; + seconds = 0; + nanoseconds = 500000000; + + result = isc_test_begin(NULL, ISC_TRUE, 2); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + isc_interval_set(&interval, seconds, nanoseconds); + isc_time_settoepoch(&expires); + + setup_test(isc_timertype_ticker, &expires, &interval, ticktock); + + isc_test_end(); +} + +ATF_TC(once_life); +ATF_TC_HEAD(once_life, tc) { + atf_tc_set_md_var(tc, "descr", "timer type once reaches lifetime"); +} +ATF_TC_BODY(once_life, tc) { + isc_result_t result; + isc_time_t expires; + isc_interval_t interval; + + UNUSED(tc); + + nevents = 1; + seconds = 1; + nanoseconds = 100000000; + + result = isc_test_begin(NULL, ISC_TRUE, 2); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + isc_interval_set(&interval, seconds, nanoseconds); + result = isc_time_nowplusinterval(&expires, &interval); + ATF_CHECK_EQ(result, ISC_R_SUCCESS); + + isc_interval_set(&interval, 0, 0); + + setup_test(isc_timertype_once, &expires, &interval, ticktock); + + isc_test_end(); +} + + +static void +test_idle(isc_task_t *task, isc_event_t *event) { + isc_result_t result; + isc_time_t now; + isc_time_t base; + isc_time_t ulim; + isc_time_t llim; + isc_interval_t interval; + + ++eventcnt; + + printf("tick %d\n", eventcnt); + + result = isc_time_now(&now); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + isc_interval_set(&interval, seconds, nanoseconds); + result = isc_time_add(&lasttime, &interval, &base); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + isc_interval_set(&interval, FUDGE_SECONDS, FUDGE_NANOSECONDS); + result = isc_time_add(&base, &interval, &ulim); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + result = isc_time_subtract(&base, &interval, &llim); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + ATF_CHECK(isc_time_compare(&llim, &now) <= 0); + ATF_CHECK(isc_time_compare(&ulim, &now) >= 0); + lasttime = now; + + ATF_CHECK_EQ(event->ev_type, ISC_TIMEREVENT_IDLE); + + isc_timer_detach(&timer); + isc_task_shutdown(task); + isc_event_free(&event); +} + +ATF_TC(once_idle); +ATF_TC_HEAD(once_idle, tc) { + atf_tc_set_md_var(tc, "descr", "timer type once idles out"); +} +ATF_TC_BODY(once_idle, tc) { + isc_result_t result; + isc_time_t expires; + isc_interval_t interval; + + UNUSED(tc); + + nevents = 1; + seconds = 1; + nanoseconds = 200000000; + + result = isc_test_begin(NULL, ISC_TRUE, 2); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + isc_interval_set(&interval, seconds + 1, nanoseconds); + result = isc_time_nowplusinterval(&expires, &interval); + ATF_CHECK_EQ(result, ISC_R_SUCCESS); + + isc_interval_set(&interval, seconds, nanoseconds); + + setup_test(isc_timertype_once, &expires, &interval, test_idle); + + isc_test_end(); +} + +static void +test_reset(isc_task_t *task, isc_event_t *event) { + isc_result_t result; + isc_time_t now; + isc_time_t base; + isc_time_t ulim; + isc_time_t llim; + isc_time_t expires; + isc_interval_t interval; + + ++eventcnt; + + printf("tick %d\n", eventcnt); + + /* + * Check expired time. + */ + + result = isc_time_now(&now); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + isc_interval_set(&interval, seconds, nanoseconds); + result = isc_time_add(&lasttime, &interval, &base); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + isc_interval_set(&interval, FUDGE_SECONDS, FUDGE_NANOSECONDS); + result = isc_time_add(&base, &interval, &ulim); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + result = isc_time_subtract(&base, &interval, &llim); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + ATF_CHECK(isc_time_compare(&llim, &now) <= 0); + ATF_CHECK(isc_time_compare(&ulim, &now) >= 0); + lasttime = now; + + if (eventcnt < 3) { + ATF_CHECK_EQ(event->ev_type, ISC_TIMEREVENT_TICK); + + if (eventcnt == 2) { + isc_interval_set(&interval, seconds, nanoseconds); + result = isc_time_nowplusinterval(&expires, &interval); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + isc_interval_set(&interval, 0, 0); + result = isc_timer_reset(timer, isc_timertype_once, + &expires, &interval, + ISC_FALSE); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + } + } else { + ATF_CHECK_EQ(event->ev_type, ISC_TIMEREVENT_LIFE); + + isc_timer_detach(&timer); + isc_task_shutdown(task); + } + + isc_event_free(&event); +} + +ATF_TC(reset); +ATF_TC_HEAD(reset, tc) { + atf_tc_set_md_var(tc, "descr", "timer reset"); +} +ATF_TC_BODY(reset, tc) { + isc_result_t result; + isc_time_t expires; + isc_interval_t interval; + + UNUSED(tc); + + result = isc_test_begin(NULL, ISC_TRUE, 2); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + nevents = 3; + seconds = 0; + nanoseconds = 750000000; + + isc_interval_set(&interval, seconds, nanoseconds); + isc_time_settoepoch(&expires); + + setup_test(isc_timertype_ticker, &expires, &interval, test_reset); + + isc_test_end(); +} + +static int startflag; +static int shutdownflag; +static isc_timer_t *tickertimer = NULL; +static isc_timer_t *oncetimer = NULL; +static isc_task_t *task1 = NULL; +static isc_task_t *task2 = NULL; + +/* + * task1 blocks on mx while events accumulate + * in its queue, until signaled by task2. + */ + +static void +start_event(isc_task_t *task, isc_event_t *event) { + UNUSED(task); + + printf("start_event\n"); + + LOCK(&mx); + while (! startflag) { + (void) isc_condition_wait(&cv, &mx); + } + UNLOCK(&mx); + + isc_event_free(&event); +} + +static void +tick_event(isc_task_t *task, isc_event_t *event) { + isc_result_t result; + isc_time_t expires; + isc_interval_t interval; + + UNUSED(task); + + ++eventcnt; + printf("tick_event %d\n", eventcnt); + + /* + * On the first tick, purge all remaining tick events + * and then shut down the task. + */ + if (eventcnt == 1) { + isc_time_settoepoch(&expires); + isc_interval_set(&interval, seconds, 0); + result = isc_timer_reset(tickertimer, isc_timertype_ticker, + &expires, &interval, ISC_TRUE); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + isc_task_shutdown(task); + } + + isc_event_free(&event); +} + +static void +once_event(isc_task_t *task, isc_event_t *event) { + isc_result_t result; + + printf("once_event\n"); + + /* + * Allow task1 to start processing events. + */ + LOCK(&mx); + startflag = 1; + + result = isc_condition_broadcast(&cv); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + UNLOCK(&mx); + + isc_event_free(&event); + isc_task_shutdown(task); +} + +static void +shutdown_purge(isc_task_t *task, isc_event_t *event) { + isc_result_t result; + + UNUSED(task); + UNUSED(event); + + printf("shutdown_event\n"); + + /* + * Signal shutdown processing complete. + */ + LOCK(&mx); + shutdownflag = 1; + + result = isc_condition_signal(&cv); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + UNLOCK(&mx); + + isc_event_free(&event); +} + +ATF_TC(purge); +ATF_TC_HEAD(purge, tc) { + atf_tc_set_md_var(tc, "descr", "timer events purged"); +} +ATF_TC_BODY(purge, tc) { + isc_result_t result; + isc_event_t *event = NULL; + isc_time_t expires; + isc_interval_t interval; + + UNUSED(tc); + + result = isc_test_begin(NULL, ISC_TRUE, 2); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + startflag = 0; + shutdownflag = 0; + eventcnt = 0; + seconds = 1; + nanoseconds = 0; + + result = isc_mutex_init(&mx); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + result = isc_condition_init(&cv); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + result = isc_task_create(taskmgr, 0, &task1); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + result = isc_task_onshutdown(task1, shutdown_purge, NULL); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + result = isc_task_create(taskmgr, 0, &task2); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + LOCK(&mx); + + event = isc_event_allocate(mctx, (void *)1 , (isc_eventtype_t)1, + start_event, NULL, sizeof(*event)); + ATF_REQUIRE(event != NULL); + isc_task_send(task1, &event); + + isc_time_settoepoch(&expires); + isc_interval_set(&interval, seconds, 0); + + tickertimer = NULL; + result = isc_timer_create(timermgr, isc_timertype_ticker, + &expires, &interval, task1, + tick_event, NULL, &tickertimer); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + oncetimer = NULL; + + isc_interval_set(&interval, (seconds * 2) + 1, 0); + result = isc_time_nowplusinterval(&expires, &interval); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + isc_interval_set(&interval, 0, 0); + result = isc_timer_create(timermgr, isc_timertype_once, + &expires, &interval, task2, + once_event, NULL, &oncetimer); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + + /* + * Wait for shutdown processing to complete. + */ + while (! shutdownflag) { + result = isc_condition_wait(&cv, &mx); + ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); + } + + UNLOCK(&mx); + + ATF_CHECK_EQ(eventcnt, 1); + + isc_timer_detach(&tickertimer); + isc_timer_detach(&oncetimer); + isc_task_destroy(&task1); + isc_task_destroy(&task2); + DESTROYLOCK(&mx); + + isc_test_end(); +} + +/* + * Main + */ +ATF_TP_ADD_TCS(tp) { +#ifdef ISC_PLATFORM_USETHREADS + ATF_TP_ADD_TC(tp, ticker); + ATF_TP_ADD_TC(tp, once_life); + ATF_TP_ADD_TC(tp, once_idle); + ATF_TP_ADD_TC(tp, reset); + ATF_TP_ADD_TC(tp, purge); +#endif + + return (atf_no_error()); +} diff --git a/util/copyrights b/util/copyrights index f246609e06f..78a1b069cd6 100644 --- a/util/copyrights +++ b/util/copyrights @@ -2470,11 +2470,6 @@ ./bin/tests/tasks/win32/t_tasks.vcxproj.in X 2013,2015,2016,2017,2018 ./bin/tests/tasks/win32/t_tasks.vcxproj.user X 2013,2015,2018 ./bin/tests/timer_test.c C 1998,1999,2000,2001,2004,2007,2013,2014,2015,2016,2018 -./bin/tests/timers/Makefile.in MAKE 1999,2000,2001,2002,2004,2007,2009,2012,2014,2016,2017,2018 -./bin/tests/timers/t_timers.c C 1999,2000,2001,2004,2007,2008,2009,2011,2013,2016,2018 -./bin/tests/timers/win32/t_timers.vcxproj.filters.in X 2013,2015,2018 -./bin/tests/timers/win32/t_timers.vcxproj.in X 2013,2015,2016,2017,2018 -./bin/tests/timers/win32/t_timers.vcxproj.user X 2013,2018 ./bin/tests/virtual-time/Makefile.in MAKE 2010,2012,2016,2018 ./bin/tests/virtual-time/README TXT.BRIEF 2010,2016,2018 ./bin/tests/virtual-time/autosign-ksk/clean.sh SH 2010,2012,2015,2016,2018 diff --git a/win32utils/Configure b/win32utils/Configure index a290bfdb569..8ae8d289403 100644 --- a/win32utils/Configure +++ b/win32utils/Configure @@ -140,8 +140,6 @@ my @projectlist = ("..\\bin\\check\\win32\\checkconf.vcxproj", "..\\bin\\tests\\system\\win32\\pipequeries.vcxproj.filters", "..\\bin\\tests\\tasks\\win32\\t_tasks.vcxproj", "..\\bin\\tests\\tasks\\win32\\t_tasks.vcxproj.filters", - "..\\bin\\tests\\timers\\win32\\t_timers.vcxproj", - "..\\bin\\tests\\timers\\win32\\t_timers.vcxproj.filters", "..\\bin\\tests\\win32\\backtrace_test.vcxproj", "..\\bin\\tests\\win32\\backtrace_test.vcxproj.filters", "..\\bin\\tests\\win32\\inter_test.vcxproj", diff --git a/win32utils/bind9.sln.in b/win32utils/bind9.sln.in index 7dd0765ffb2..09adb1f7d17 100644 --- a/win32utils/bind9.sln.in +++ b/win32utils/bind9.sln.in @@ -546,12 +546,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "t_tasks", "..\bin\tests\tas {F6F08940-7597-4FEE-9CE0-E09A009C45A3} = {F6F08940-7597-4FEE-9CE0-E09A009C45A3} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "t_timers", "..\bin\tests\timers\win32\t_timers.vcxproj", "{4E6F5A7C-89AA-4259-99DB-F89DAE418B3F}" - ProjectSection(ProjectDependencies) = postProject - {3840E563-D180-4761-AA9C-E6155F02EAFF} = {3840E563-D180-4761-AA9C-E6155F02EAFF} - {F6F08940-7597-4FEE-9CE0-E09A009C45A3} = {F6F08940-7597-4FEE-9CE0-E09A009C45A3} - EndProjectSection -EndProject @END TESTS @IF XTESTS Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "backtrace_test", "..\bin\tests\win32\backtrace_test.vcxproj", "{14751171-C40E-40EE-A2F0-37FFC3CCD4A2}"