14c87aefeSPatrick Mooney /*
24c87aefeSPatrick Mooney  * This file and its contents are supplied under the terms of the
34c87aefeSPatrick Mooney  * Common Development and Distribution License ("CDDL"), version 1.0.
44c87aefeSPatrick Mooney  * You may only use this file in accordance with the terms of version
54c87aefeSPatrick Mooney  * 1.0 of the CDDL.
64c87aefeSPatrick Mooney  *
74c87aefeSPatrick Mooney  * A full copy of the text of the CDDL should have accompanied this
84c87aefeSPatrick Mooney  * source.  A copy of the CDDL is also available via the Internet at
94c87aefeSPatrick Mooney  * http://www.illumos.org/license/CDDL.
104c87aefeSPatrick Mooney  */
114c87aefeSPatrick Mooney 
124c87aefeSPatrick Mooney /*
134c87aefeSPatrick Mooney  * Copyright 2018 Joyent, Inc.
144c87aefeSPatrick Mooney  */
154c87aefeSPatrick Mooney 
164c87aefeSPatrick Mooney #include <pthread.h>
174c87aefeSPatrick Mooney #include <signal.h>
184c87aefeSPatrick Mooney #include <strings.h>
194c87aefeSPatrick Mooney #include <unistd.h>
204c87aefeSPatrick Mooney 
214c87aefeSPatrick Mooney #include "testlib.h"
224c87aefeSPatrick Mooney #include "mevent.h"
234c87aefeSPatrick Mooney 
244c87aefeSPatrick Mooney const char *testlib_prog;
254c87aefeSPatrick Mooney boolean_t testlib_verbose;
264c87aefeSPatrick Mooney 
274c87aefeSPatrick Mooney static void
timed_out(int signo)284c87aefeSPatrick Mooney timed_out(int signo)
294c87aefeSPatrick Mooney {
304c87aefeSPatrick Mooney 	ASSERT_INT_EQ(("timeout signal"), signo, SIGALRM);
314c87aefeSPatrick Mooney 
324c87aefeSPatrick Mooney 	FAIL(("Timed out"));
334c87aefeSPatrick Mooney }
344c87aefeSPatrick Mooney 
354c87aefeSPatrick Mooney void
start_test(const char * argv0,uint32_t timeout)364c87aefeSPatrick Mooney start_test(const char *argv0, uint32_t timeout)
374c87aefeSPatrick Mooney {
384c87aefeSPatrick Mooney 	char *val;
394c87aefeSPatrick Mooney 
404c87aefeSPatrick Mooney 	testlib_prog = strrchr(argv0, '/');
414c87aefeSPatrick Mooney 	if (testlib_prog == NULL) {
424c87aefeSPatrick Mooney 		testlib_prog = argv0;
434c87aefeSPatrick Mooney 	} else {
444c87aefeSPatrick Mooney 		testlib_prog++;
454c87aefeSPatrick Mooney 	}
464c87aefeSPatrick Mooney 
474c87aefeSPatrick Mooney 	testlib_verbose = ((val = getenv("TEST_VERBOSE")) != NULL) &&
484c87aefeSPatrick Mooney 	    val[0] != '\0';
494c87aefeSPatrick Mooney 
504c87aefeSPatrick Mooney 	signal(SIGALRM, timed_out);
514c87aefeSPatrick Mooney 	alarm(timeout);
524c87aefeSPatrick Mooney }
534c87aefeSPatrick Mooney 
544c87aefeSPatrick Mooney /* ARGSUSED */
554c87aefeSPatrick Mooney static void *
event_thread(void * arg)564c87aefeSPatrick Mooney event_thread(void *arg)
574c87aefeSPatrick Mooney {
584c87aefeSPatrick Mooney 	mevent_dispatch();
594c87aefeSPatrick Mooney 	return (NULL);
604c87aefeSPatrick Mooney }
614c87aefeSPatrick Mooney 
624c87aefeSPatrick Mooney void
start_event_thread(void)634c87aefeSPatrick Mooney start_event_thread(void)
644c87aefeSPatrick Mooney {
654c87aefeSPatrick Mooney 	pthread_t tid;
664c87aefeSPatrick Mooney 
674c87aefeSPatrick Mooney 	if (pthread_create(&tid, NULL, event_thread, NULL) != 0) {
684c87aefeSPatrick Mooney 		FAIL_ERRNO("pthread_create");
694c87aefeSPatrick Mooney 	}
704c87aefeSPatrick Mooney }
71