xref: /illumos-gate/usr/src/cmd/bhyve/test/tests/mevent/testlib.c (revision d327dbeacda682ba3d4efc9b451baa429ba8830c)
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