t-event.c revision 98121
1/* 2 * Copyright (c) 2001-2002 Sendmail, Inc. and its suppliers. 3 * All rights reserved. 4 * 5 * By using this file, you agree to the terms and conditions set 6 * forth in the LICENSE file which can be found at the top level of 7 * the sendmail distribution. 8 */ 9 10#include <sm/gen.h> 11SM_RCSID("@(#)$Id: t-event.c,v 1.11 2002/04/25 01:50:25 ca Exp $") 12 13#include <stdio.h> 14 15#include <stdlib.h> 16#include <unistd.h> 17# include <sys/wait.h> 18#if SM_CONF_SETITIMER 19# include <sys/time.h> 20#endif /* SM_CONF_SETITIMER */ 21 22#include <sm/clock.h> 23#include <sm/test.h> 24 25int check; 26 27void 28evcheck(arg) 29 int arg; 30{ 31 SM_TEST(arg == 3); 32 SM_TEST(check == 0); 33 check++; 34} 35 36void 37ev1(arg) 38 int arg; 39{ 40 SM_TEST(arg == 1); 41} 42 43/* define as x if you want debug output */ 44#define DBG_OUT(x) 45 46int 47main(argc, argv) 48 int argc; 49 char *argv[]; 50{ 51 SM_EVENT *ev; 52 53 sm_test_begin(argc, argv, "test event handling"); 54 fprintf(stdout, "This test may hang. If there is no output within twelve seconds, abort it\nand recompile with -DSM_CONF_SETITIMER=%d\n", 55 SM_CONF_SETITIMER == 0 ? 1 : 0); 56 sleep(1); 57 SM_TEST(1 == 1); 58 DBG_OUT(fprintf(stdout, "We're back, test 1 seems to work.\n")); 59 ev = sm_seteventm(1000, ev1, 1); 60 sleep(1); 61 SM_TEST(2 == 2); 62 DBG_OUT(fprintf(stdout, "We're back, test 2 seems to work.\n")); 63 64 /* schedule an event in 9s */ 65 ev = sm_seteventm(9000, ev1, 2); 66 sleep(1); 67 68 /* clear the event before it can fire */ 69 sm_clrevent(ev); 70 SM_TEST(3 == 3); 71 DBG_OUT(fprintf(stdout, "We're back, test 3 seems to work.\n")); 72 73 /* schedule an event in 1s */ 74 check = 0; 75 ev = sm_seteventm(1000, evcheck, 3); 76 sleep(2); 77 78 /* clear the event */ 79 sm_clrevent(ev); 80 SM_TEST(4 == 4); 81 SM_TEST(check == 1); 82 DBG_OUT(fprintf(stdout, "We're back, test 4 seems to work.\n")); 83 84 return sm_test_end(); 85} 86