1*d327dbeaSPatrick Mooney /*
2*d327dbeaSPatrick Mooney * This file and its contents are supplied under the terms of the
3*d327dbeaSPatrick Mooney * Common Development and Distribution License ("CDDL"), version 1.0.
4*d327dbeaSPatrick Mooney * You may only use this file in accordance with the terms of version
5*d327dbeaSPatrick Mooney * 1.0 of the CDDL.
6*d327dbeaSPatrick Mooney *
7*d327dbeaSPatrick Mooney * A full copy of the text of the CDDL should have accompanied this
8*d327dbeaSPatrick Mooney * source. A copy of the CDDL is also available via the Internet at
9*d327dbeaSPatrick Mooney * http://www.illumos.org/license/CDDL.
10*d327dbeaSPatrick Mooney */
11*d327dbeaSPatrick Mooney
12*d327dbeaSPatrick Mooney /*
13*d327dbeaSPatrick Mooney * Copyright 2018 Joyent, Inc.
14*d327dbeaSPatrick Mooney */
15*d327dbeaSPatrick Mooney
16*d327dbeaSPatrick Mooney #include <pthread.h>
17*d327dbeaSPatrick Mooney #include <signal.h>
18*d327dbeaSPatrick Mooney #include <strings.h>
19*d327dbeaSPatrick Mooney #include <unistd.h>
20*d327dbeaSPatrick Mooney
21*d327dbeaSPatrick Mooney #include "testlib.h"
22*d327dbeaSPatrick Mooney #include "mevent.h"
23*d327dbeaSPatrick Mooney
24*d327dbeaSPatrick Mooney const char *testlib_prog;
25*d327dbeaSPatrick Mooney boolean_t testlib_verbose;
26*d327dbeaSPatrick Mooney
27*d327dbeaSPatrick Mooney static void
timed_out(int signo)28*d327dbeaSPatrick Mooney timed_out(int signo)
29*d327dbeaSPatrick Mooney {
30*d327dbeaSPatrick Mooney ASSERT_INT_EQ(("timeout signal"), signo, SIGALRM);
31*d327dbeaSPatrick Mooney
32*d327dbeaSPatrick Mooney FAIL(("Timed out"));
33*d327dbeaSPatrick Mooney }
34*d327dbeaSPatrick Mooney
35*d327dbeaSPatrick Mooney void
start_test(const char * argv0,uint32_t timeout)36*d327dbeaSPatrick Mooney start_test(const char *argv0, uint32_t timeout)
37*d327dbeaSPatrick Mooney {
38*d327dbeaSPatrick Mooney char *val;
39*d327dbeaSPatrick Mooney
40*d327dbeaSPatrick Mooney testlib_prog = strrchr(argv0, '/');
41*d327dbeaSPatrick Mooney if (testlib_prog == NULL) {
42*d327dbeaSPatrick Mooney testlib_prog = argv0;
43*d327dbeaSPatrick Mooney } else {
44*d327dbeaSPatrick Mooney testlib_prog++;
45*d327dbeaSPatrick Mooney }
46*d327dbeaSPatrick Mooney
47*d327dbeaSPatrick Mooney testlib_verbose = ((val = getenv("TEST_VERBOSE")) != NULL) &&
48*d327dbeaSPatrick Mooney val[0] != '\0';
49*d327dbeaSPatrick Mooney
50*d327dbeaSPatrick Mooney signal(SIGALRM, timed_out);
51*d327dbeaSPatrick Mooney alarm(timeout);
52*d327dbeaSPatrick Mooney }
53*d327dbeaSPatrick Mooney
54*d327dbeaSPatrick Mooney /* ARGSUSED */
55*d327dbeaSPatrick Mooney static void *
event_thread(void * arg)56*d327dbeaSPatrick Mooney event_thread(void *arg)
57*d327dbeaSPatrick Mooney {
58*d327dbeaSPatrick Mooney mevent_dispatch();
59*d327dbeaSPatrick Mooney return (NULL);
60*d327dbeaSPatrick Mooney }
61*d327dbeaSPatrick Mooney
62*d327dbeaSPatrick Mooney void
start_event_thread(void)63*d327dbeaSPatrick Mooney start_event_thread(void)
64*d327dbeaSPatrick Mooney {
65*d327dbeaSPatrick Mooney pthread_t tid;
66*d327dbeaSPatrick Mooney
67*d327dbeaSPatrick Mooney if (pthread_create(&tid, NULL, event_thread, NULL) != 0) {
68*d327dbeaSPatrick Mooney FAIL_ERRNO("pthread_create");
69*d327dbeaSPatrick Mooney }
70*d327dbeaSPatrick Mooney }
71