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