1/*
2 * Copyright (c) 2001-2002, 2004 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#pragma ident	"%Z%%M%	%I%	%E% SMI"
11
12#include <sm/gen.h>
13SM_RCSID("@(#)$Id: t-event.c,v 1.13 2005/06/14 23:07:20 ca Exp $")
14
15#include <stdio.h>
16
17#include <stdlib.h>
18#include <unistd.h>
19# include <sys/wait.h>
20#if SM_CONF_SETITIMER
21# include <sm/time.h>
22#endif /* SM_CONF_SETITIMER */
23
24#include <sm/clock.h>
25#include <sm/test.h>
26
27static void	evcheck __P((int));
28static void	ev1 __P((int));
29
30static int check;
31
32static void
33evcheck(arg)
34	int arg;
35{
36	SM_TEST(arg == 3);
37	SM_TEST(check == 0);
38	check++;
39}
40
41static void
42ev1(arg)
43	int arg;
44{
45	SM_TEST(arg == 1);
46}
47
48/* define as x if you want debug output */
49#define DBG_OUT(x)
50
51int
52main(argc, argv)
53	int argc;
54	char *argv[];
55{
56	SM_EVENT *ev;
57
58	sm_test_begin(argc, argv, "test event handling");
59	fprintf(stdout, "This test may hang. If there is no output within twelve seconds, abort it\nand recompile with -DSM_CONF_SETITIMER=%d\n",
60		SM_CONF_SETITIMER == 0 ? 1 : 0);
61	sleep(1);
62	SM_TEST(1 == 1);
63	DBG_OUT(fprintf(stdout, "We're back, test 1 seems to work.\n"));
64	ev = sm_seteventm(1000, ev1, 1);
65	sleep(1);
66	SM_TEST(2 == 2);
67	DBG_OUT(fprintf(stdout, "We're back, test 2 seems to work.\n"));
68
69	/* schedule an event in 9s */
70	ev = sm_seteventm(9000, ev1, 2);
71	sleep(1);
72
73	/* clear the event before it can fire */
74	sm_clrevent(ev);
75	SM_TEST(3 == 3);
76	DBG_OUT(fprintf(stdout, "We're back, test 3 seems to work.\n"));
77
78	/* schedule an event in 1s */
79	check = 0;
80	ev = sm_seteventm(1000, evcheck, 3);
81	sleep(2);
82
83	/* clear the event */
84	sm_clrevent(ev);
85	SM_TEST(4 == 4);
86	SM_TEST(check == 1);
87	DBG_OUT(fprintf(stdout, "We're back, test 4 seems to work.\n"));
88
89	return sm_test_end();
90}
91