]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
migrate t_timers to lib/isc/tests/timer_test
authorEvan Hunt <each@isc.org>
Tue, 27 Feb 2018 22:29:49 +0000 (14:29 -0800)
committerEvan Hunt <each@isc.org>
Fri, 9 Mar 2018 22:12:49 +0000 (14:12 -0800)
30 files changed:
bin/tests/.gitignore
bin/tests/Makefile.in
bin/tests/timers/Makefile.in [deleted file]
bin/tests/timers/t_timers.c [deleted file]
bin/tests/timers/win32/t_timers.vcxproj.filters.in [deleted file]
bin/tests/timers/win32/t_timers.vcxproj.in [deleted file]
bin/tests/timers/win32/t_timers.vcxproj.user [deleted file]
configure
configure.in
lib/isc/tests/Atffile
lib/isc/tests/Makefile.in
lib/isc/tests/atomic_test.c
lib/isc/tests/buffer_test.c
lib/isc/tests/counter_test.c
lib/isc/tests/isctest.c
lib/isc/tests/isctest.h
lib/isc/tests/mem_test.c
lib/isc/tests/parse_test.c
lib/isc/tests/pool_test.c
lib/isc/tests/queue_test.c
lib/isc/tests/radix_test.c
lib/isc/tests/sockaddr_test.c
lib/isc/tests/socket_test.c
lib/isc/tests/symtab_test.c
lib/isc/tests/task_test.c
lib/isc/tests/taskpool_test.c
lib/isc/tests/timer_test.c [new file with mode: 0644]
util/copyrights
win32utils/Configure
win32utils/bind9.sln.in

index 4849f5b4decaac603d128feb2260e901b629a81c..81a0a73486fe6edaee0764778f93c92c53972030 100644 (file)
@@ -16,5 +16,4 @@ keycreate
 keydelete
 gssapi_krb
 t_tasks
-t_timers
 makejournal
index 1f0c73fd93229d14e1004ff0be16d7bc98efb59c..92757c7579da414ae7867bcc912b4b6f9240d19c 100644 (file)
@@ -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 (file)
index 0f2acf1..0000000
+++ /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 (file)
index 9de8a2a..0000000
+++ /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 <config.h>
-
-#include <stdlib.h>
-
-#include <isc/condition.h>
-#include <isc/mem.h>
-#include <isc/platform.h>
-#include <isc/task.h>
-#include <isc/time.h>
-#include <isc/timer.h>
-#include <isc/util.h>
-
-#include <tests/t_api.h>
-
-#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 (file)
index f98be97..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup>
-    <Filter Include="Source Files">
-      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
-      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
-    </Filter>
-    <Filter Include="Header Files">
-      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
-      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
-    </Filter>
-    <Filter Include="Resource Files">
-      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
-      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
-    </Filter>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="..\t_timers.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-  </ItemGroup>
-</Project>
\ 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 (file)
index 511a21a..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|@PLATFORM@">
-      <Configuration>Debug</Configuration>
-      <Platform>@PLATFORM@</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|@PLATFORM@">
-      <Configuration>Release</Configuration>
-      <Platform>@PLATFORM@</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{4E6F5A7C-89AA-4259-99DB-F89DAE418B3F}</ProjectGuid>
-    <Keyword>Win32Proj</Keyword>
-    <RootNamespace>t_timers</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|@PLATFORM@'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|@PLATFORM@'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>MultiByte</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|@PLATFORM@'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|@PLATFORM@'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|@PLATFORM@'">
-    <LinkIncremental>true</LinkIncremental>
-    <OutDir>..\..\..\..\Build\$(Configuration)\</OutDir>
-    <IntDir>.\$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|@PLATFORM@'">
-    <LinkIncremental>false</LinkIncremental>
-    <OutDir>..\..\..\..\Build\$(Configuration)\</OutDir>
-    <IntDir>.\$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|@PLATFORM@'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <PrecompiledHeaderOutputFile>.\$(Configuration)\$(TargetName).pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\$(Configuration)\</AssemblerListingLocation>
-      <ObjectFileName>.\$(Configuration)\</ObjectFileName>
-      <ProgramDataBaseFileName>$(OutDir)$(TargetName).pdb</ProgramDataBaseFileName>
-      <BrowseInformation>true</BrowseInformation>
-      <AdditionalIncludeDirectories>.\;..\..\..\..\;@LIBXML2_INC@..\..\..\..\lib\isc\win32;..\..\..\..\lib\isc\win32\include;..\..\..\..\lib\isc\include;..\..\..\..\lib\tests\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <CompileAs>CompileAsC</CompileAs>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <OutputFile>..\..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile>
-      <AdditionalLibraryDirectories>..\..\..\..\lib\isc\win32\$(Configuration);..\..\..\..\lib\tests\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <AdditionalDependencies>@LIBXML2_LIB@libisc.lib;libtests.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|@PLATFORM@'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>@INTRINSIC@</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
-      <WholeProgramOptimization>false</WholeProgramOptimization>
-      <StringPooling>true</StringPooling>
-      <PrecompiledHeaderOutputFile>.\$(Configuration)\$(TargetName).pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\$(Configuration)\</AssemblerListingLocation>
-      <ObjectFileName>.\$(Configuration)\</ObjectFileName>
-      <ProgramDataBaseFileName>$(OutDir)$(TargetName).pdb</ProgramDataBaseFileName>
-      <AdditionalIncludeDirectories>.\;..\..\..\..\;@LIBXML2_INC@..\..\..\..\lib\isc\win32;..\..\..\..\lib\isc\win32\include;..\..\..\..\lib\isc\include;..\..\..\..\lib\tests\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <CompileAs>CompileAsC</CompileAs>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>false</GenerateDebugInformation>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-      <OutputFile>..\..\..\..\Build\$(Configuration)\$(TargetName)$(TargetExt)</OutputFile>
-      <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
-      <AdditionalLibraryDirectories>..\..\..\..\lib\isc\win32\$(Configuration);..\..\..\..\lib\tests\win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <AdditionalDependencies>@LIBXML2_LIB@libisc.lib;libtests.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\t_timers.c" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
diff --git a/bin/tests/timers/win32/t_timers.vcxproj.user b/bin/tests/timers/win32/t_timers.vcxproj.user
deleted file mode 100644 (file)
index 695b5c7..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
-</Project>
\ No newline at end of file
index d9f6b8e3969083ac90789ac9215b5b584580a05f..cd299e8bc722202ffdfeb4cebca16a3925ea0c40 100755 (executable)
--- 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" ;;
index 7c63b5fc5d3564cdefbee8098a6b95696d7fbea7..860933e5f7e09bb326d7c108a56f2763f35fbc1b 100644 (file)
@@ -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
index 5ed35d264b44644b986becaad83296b18de09eb3..b1cbfe50f79d273d8d38f69e2c8f7d6da71140ab 100644 (file)
@@ -28,4 +28,5 @@ tp: socket_test
 tp: symtab_test
 tp: task_test
 tp: taskpool_test
+tp: timer_test
 tp: time_test
index 7e8ca30b75e2c31eeae759e891db16b75d27ad8b..ff22d2246252ebc0892ad35984bbf1e13fe503b1 100644 (file)
@@ -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
 
index 3777073a78955fbbc55dd865450edf6173757fe8..9bb6cc943bf126f941c0131f36afda01cb6dfe07 100644 (file)
@@ -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));
index 0c17eb63afa12f0449127ca956bf1410a2a968c7..9fead36a0ee7bb5ec1aa194a6acb4ace0a676fc1 100644 (file)
@@ -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);
 
        /*
index d24557241cdf79512da8edbdb79bbf06e2f4d0e4..f2a5bcd03182a8fb6b54a8f9fe7e1e4fc4468798 100644 (file)
@@ -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);
index 29c50d7e44fa86ad6f71f45157b68bab695f8269..bb1a6245b224cc45327c6d61e72810b1ff594177 100644 (file)
@@ -9,12 +9,11 @@
  * information regarding copyright ownership.
  */
 
-/* $Id$ */
-
 /*! \file */
 
 #include <config.h>
 
+#include <stdlib.h>
 #include <time.h>
 
 #include <isc/app.h>
@@ -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);
 
index caf1c3c7492f4a2ad85a4e15e423e9045ead60ba..b596993ccb650599f093b66f3e0406b15c14ab33 100644 (file)
@@ -9,8 +9,6 @@
  * information regarding copyright ownership.
  */
 
-/* $Id$ */
-
 /*! \file */
 
 #include <config.h>
@@ -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);
index 218299ef65a66813ad78529c51aaa7e93327b30b..60aa07e2f7490e8c44ce2182f74fdc003dcb4c29 100644 (file)
@@ -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,
index 7f7f4ad3302aa1509703cf36952102e500a9c8ae..9409dd0e90b57a220056f76b6e6541ac5e7357a3 100644 (file)
@@ -9,8 +9,6 @@
  * information regarding copyright ownership.
  */
 
-/* $Id$ */
-
 /*! \file */
 
 #include <config.h>
@@ -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);
index 45ad3dee20a82ed5d776fc952081105fc62f2809..0d24779920aa2abc1053656a28b16da8dd5790ca 100644 (file)
@@ -9,8 +9,6 @@
  * information regarding copyright ownership.
  */
 
-/* $Id$ */
-
 /*! \file */
 
 #include <config.h>
@@ -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);
index 388aa873b110f48b7119f04b587c569896cecd67..36bdb9fa5044c6756f5fa729d384d7bf7aeb88d0 100644 (file)
@@ -9,8 +9,6 @@
  * information regarding copyright ownership.
  */
 
-/* $Id$ */
-
 /*! \file */
 
 #include <config.h>
@@ -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));
index a89e6cc2939c8efd4b973a06f560ac5710512cbd..6ca730dff5146d2a5eef26ca6962938ee0a9cac7 100644 (file)
@@ -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);
index 772f6c97865cb07e40d83583f578bb774b173289..59b7275211b20957e80f9d8284f56741e0a44af4 100644 (file)
@@ -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");
index 750ad2d703b192e9098b2abfe01e9caad83c9b9e..06a8b5ea4204ceb40d127db6f8f7a978fbc00da6 100644 (file)
@@ -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);
index db412136ab8412595282d08078ecb0c416b92216..41b7bd6308ae1d7daf0a54837c463f5c1b9b2256 100644 (file)
@@ -9,8 +9,6 @@
  * information regarding copyright ownership.
  */
 
-/* $Id$ */
-
 /*! \file */
 
 #include <config.h>
@@ -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);
index 029009e0e90ebc9daa264251207e94b38e8537c5..f70a4d3fa2b538c99fd3bb645977388a1e349625 100644 (file)
@@ -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
index e019468d035511ddb6d66e2ff21bad3b433b8903..e89da377f56aa29b388bd5d71cb817559d4ce1b0 100644 (file)
@@ -9,8 +9,6 @@
  * information regarding copyright ownership.
  */
 
-/* $Id$ */
-
 /*! \file */
 
 #include <config.h>
@@ -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 (file)
index 0000000..0355ab9
--- /dev/null
@@ -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 <config.h>
+
+#include <atf-c.h>
+
+#include <unistd.h>
+
+#include <isc/condition.h>
+#include <isc/mem.h>
+#include <isc/platform.h>
+#include <isc/task.h>
+#include <isc/time.h>
+#include <isc/timer.h>
+#include <isc/util.h>
+#include <isc/util.h>
+
+#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());
+}
index f246609e06f16ac1c05c27d71f8b8dcec888c74f..78a1b069cd69eb979c5b63bcabdce904466e2dc5 100644 (file)
 ./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
index a290bfdb569d3bee45d97435ed706c788619b1cd..8ae8d289403b8940c0190f2aabb2b5ea3388a0b5 100644 (file)
@@ -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",
index 7dd0765ffb21d305776bd89b0d20ca0ebf42df31..09adb1f7d17e5cf883fdeaf31b6a7320b5645aa0 100644 (file)
@@ -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}"