1N/A/*
1N/A * Copyright (c) 2001-2002, 2004 Sendmail, Inc. and its suppliers.
1N/A * All rights reserved.
1N/A *
1N/A * By using this file, you agree to the terms and conditions set
1N/A * forth in the LICENSE file which can be found at the top level of
1N/A * the sendmail distribution.
1N/A */
1N/A
1N/A#pragma ident "%Z%%M% %I% %E% SMI"
1N/A
1N/A#include <sm/gen.h>
1N/ASM_RCSID("@(#)$Id: t-event.c,v 1.13 2005/06/14 23:07:20 ca Exp $")
1N/A
1N/A#include <stdio.h>
1N/A
1N/A#include <stdlib.h>
1N/A#include <unistd.h>
1N/A# include <sys/wait.h>
1N/A#if SM_CONF_SETITIMER
1N/A# include <sm/time.h>
1N/A#endif /* SM_CONF_SETITIMER */
1N/A
1N/A#include <sm/clock.h>
1N/A#include <sm/test.h>
1N/A
1N/Astatic void evcheck __P((int));
1N/Astatic void ev1 __P((int));
1N/A
1N/Astatic int check;
1N/A
1N/Astatic void
1N/Aevcheck(arg)
1N/A int arg;
1N/A{
1N/A SM_TEST(arg == 3);
1N/A SM_TEST(check == 0);
1N/A check++;
1N/A}
1N/A
1N/Astatic void
1N/Aev1(arg)
1N/A int arg;
1N/A{
1N/A SM_TEST(arg == 1);
1N/A}
1N/A
1N/A/* define as x if you want debug output */
1N/A#define DBG_OUT(x)
1N/A
1N/Aint
1N/Amain(argc, argv)
1N/A int argc;
1N/A char *argv[];
1N/A{
1N/A SM_EVENT *ev;
1N/A
1N/A sm_test_begin(argc, argv, "test event handling");
1N/A fprintf(stdout, "This test may hang. If there is no output within twelve seconds, abort it\nand recompile with -DSM_CONF_SETITIMER=%d\n",
1N/A SM_CONF_SETITIMER == 0 ? 1 : 0);
1N/A sleep(1);
1N/A SM_TEST(1 == 1);
1N/A DBG_OUT(fprintf(stdout, "We're back, test 1 seems to work.\n"));
1N/A ev = sm_seteventm(1000, ev1, 1);
1N/A sleep(1);
1N/A SM_TEST(2 == 2);
1N/A DBG_OUT(fprintf(stdout, "We're back, test 2 seems to work.\n"));
1N/A
1N/A /* schedule an event in 9s */
1N/A ev = sm_seteventm(9000, ev1, 2);
1N/A sleep(1);
1N/A
1N/A /* clear the event before it can fire */
1N/A sm_clrevent(ev);
1N/A SM_TEST(3 == 3);
1N/A DBG_OUT(fprintf(stdout, "We're back, test 3 seems to work.\n"));
1N/A
1N/A /* schedule an event in 1s */
1N/A check = 0;
1N/A ev = sm_seteventm(1000, evcheck, 3);
1N/A sleep(2);
1N/A
1N/A /* clear the event */
1N/A sm_clrevent(ev);
1N/A SM_TEST(4 == 4);
1N/A SM_TEST(check == 1);
1N/A DBG_OUT(fprintf(stdout, "We're back, test 4 seems to work.\n"));
1N/A
1N/A return sm_test_end();
1N/A}