1*4c87aefeSPatrick Mooney /*
2*4c87aefeSPatrick Mooney  * This file and its contents are supplied under the terms of the
3*4c87aefeSPatrick Mooney  * Common Development and Distribution License ("CDDL"), version 1.0.
4*4c87aefeSPatrick Mooney  * You may only use this file in accordance with the terms of version
5*4c87aefeSPatrick Mooney  * 1.0 of the CDDL.
6*4c87aefeSPatrick Mooney  *
7*4c87aefeSPatrick Mooney  * A full copy of the text of the CDDL should have accompanied this
8*4c87aefeSPatrick Mooney  * source.  A copy of the CDDL is also available via the Internet at
9*4c87aefeSPatrick Mooney  * http://www.illumos.org/license/CDDL.
10*4c87aefeSPatrick Mooney  */
11*4c87aefeSPatrick Mooney 
12*4c87aefeSPatrick Mooney /*
13*4c87aefeSPatrick Mooney  * Copyright 2018 Joyent, Inc.
14*4c87aefeSPatrick Mooney  */
15*4c87aefeSPatrick Mooney 
16*4c87aefeSPatrick Mooney #ifndef _TESTLIB_H_
17*4c87aefeSPatrick Mooney #define	_TESTLIB_H_
18*4c87aefeSPatrick Mooney 
19*4c87aefeSPatrick Mooney #include <assert.h>
20*4c87aefeSPatrick Mooney #include <errno.h>
21*4c87aefeSPatrick Mooney #include <signal.h>
22*4c87aefeSPatrick Mooney #include <stdio.h>
23*4c87aefeSPatrick Mooney #include <stdlib.h>
24*4c87aefeSPatrick Mooney #include <strings.h>
25*4c87aefeSPatrick Mooney 
26*4c87aefeSPatrick Mooney #include <sys/types.h>
27*4c87aefeSPatrick Mooney #include <sys/stat.h>
28*4c87aefeSPatrick Mooney 
29*4c87aefeSPatrick Mooney #include "mevent.h"
30*4c87aefeSPatrick Mooney 
31*4c87aefeSPatrick Mooney #define	EXIT_PASS 0
32*4c87aefeSPatrick Mooney #define	EXIT_FAIL 1
33*4c87aefeSPatrick Mooney 
34*4c87aefeSPatrick Mooney #define	VERBOSE(msg)							\
35*4c87aefeSPatrick Mooney 	if (testlib_verbose) {						\
36*4c87aefeSPatrick Mooney 		(void) printf("VERBOSE %s: %s:%d %s: ", testlib_prog,	\
37*4c87aefeSPatrick Mooney 		    __FILE__, __LINE__, __func__);			\
38*4c87aefeSPatrick Mooney 		(void) printf msg;					\
39*4c87aefeSPatrick Mooney 		(void) printf("\n");					\
40*4c87aefeSPatrick Mooney 	}
41*4c87aefeSPatrick Mooney 
42*4c87aefeSPatrick Mooney #define	FAIL_PROLOGUE() \
43*4c87aefeSPatrick Mooney 	(void) printf("FAIL %s: %s:%d: ", testlib_prog, __FILE__, __LINE__)
44*4c87aefeSPatrick Mooney 
45*4c87aefeSPatrick Mooney #define	FAIL(msg)							\
46*4c87aefeSPatrick Mooney 	{								\
47*4c87aefeSPatrick Mooney 		FAIL_PROLOGUE();					\
48*4c87aefeSPatrick Mooney 		(void) printf msg;					\
49*4c87aefeSPatrick Mooney 		(void) printf("\n");					\
50*4c87aefeSPatrick Mooney 		exit(EXIT_FAIL);					\
51*4c87aefeSPatrick Mooney 	}
52*4c87aefeSPatrick Mooney 
53*4c87aefeSPatrick Mooney #define	FAIL_ERRNO(msg) FAIL((msg ": %s", strerror(errno)))
54*4c87aefeSPatrick Mooney 
55*4c87aefeSPatrick Mooney #define	PASS()								\
56*4c87aefeSPatrick Mooney 	{								\
57*4c87aefeSPatrick Mooney 		(void) printf("PASS %s\n", testlib_prog);		\
58*4c87aefeSPatrick Mooney 		exit(EXIT_PASS);					\
59*4c87aefeSPatrick Mooney 	}
60*4c87aefeSPatrick Mooney 
61*4c87aefeSPatrick Mooney #define	ASSERT_CMP(msg, got, cmp, exp, nfmt)				\
62*4c87aefeSPatrick Mooney 	if (!(got cmp exp)) {						\
63*4c87aefeSPatrick Mooney 		FAIL_PROLOGUE();					\
64*4c87aefeSPatrick Mooney 		(void) printf msg;					\
65*4c87aefeSPatrick Mooney 		(void) printf(": %s=" nfmt " %s %s=" nfmt "\n",		\
66*4c87aefeSPatrick Mooney 		    #got, got, #cmp, #exp, exp);			\
67*4c87aefeSPatrick Mooney 		exit(EXIT_FAIL);					\
68*4c87aefeSPatrick Mooney 	}
69*4c87aefeSPatrick Mooney 
70*4c87aefeSPatrick Mooney #define	ASSERT_CHAR_EQ(msg, got, exp)	ASSERT_CMP(msg, got, ==, exp, "%c")
71*4c87aefeSPatrick Mooney #define	ASSERT_INT_EQ(msg, got, exp)	ASSERT_CMP(msg, got, ==, exp, "%d")
72*4c87aefeSPatrick Mooney #define	ASSERT_INT_NEQ(msg, got, exp)	ASSERT_CMP(msg, got, !=, exp, "%d")
73*4c87aefeSPatrick Mooney #define	ASSERT_INT64_EQ(msg, got, exp)	ASSERT_CMP(msg, got, ==, exp, "%ld")
74*4c87aefeSPatrick Mooney #define	ASSERT_PTR_EQ(msg, got, exp)	ASSERT_CMP(msg, got, ==, exp, "%p")
75*4c87aefeSPatrick Mooney #define	ASSERT_PTR_NEQ(msg, got, exp)	ASSERT_CMP(msg, got, !=, exp, "%p")
76*4c87aefeSPatrick Mooney 
77*4c87aefeSPatrick Mooney #define	ASSERT_STR_EQ(msg, got, exp)					\
78*4c87aefeSPatrick Mooney 	if (strcmp(got, exp) != 0) {					\
79*4c87aefeSPatrick Mooney 		FAIL_PROLOGUE();					\
80*4c87aefeSPatrick Mooney 		(void) printf msg;					\
81*4c87aefeSPatrick Mooney 		(void) printf(": %s='%s' != %s='%s'\n",			\
82*4c87aefeSPatrick Mooney 		    #got, got, #exp, exp);				\
83*4c87aefeSPatrick Mooney 		exit(EXIT_FAIL);					\
84*4c87aefeSPatrick Mooney 	}
85*4c87aefeSPatrick Mooney 
86*4c87aefeSPatrick Mooney extern const char	*testlib_prog;
87*4c87aefeSPatrick Mooney extern boolean_t	testlib_verbose;
88*4c87aefeSPatrick Mooney 
89*4c87aefeSPatrick Mooney extern void start_test(const char *, uint32_t);
90*4c87aefeSPatrick Mooney extern void start_event_thread(void);
91*4c87aefeSPatrick Mooney extern void test_mevent_count_lists(int *, int *, int *);
92*4c87aefeSPatrick Mooney 
93*4c87aefeSPatrick Mooney #endif /* _TESTLIB_H_ */