xref: /minix3/minix/tests/common-socket.h (revision ad920fc485da86e45a88f73a98077b92da1288a3)
1294d1590SErik van der Kouwe #define DEBUG 0
2294d1590SErik van der Kouwe 
3294d1590SErik van der Kouwe /* buffer for send/recv */
4294d1590SErik van der Kouwe #define BUFSIZE (128)
5294d1590SErik van der Kouwe 
6294d1590SErik van der Kouwe /* macro to display information about a failed test and increment the errct */
7294d1590SErik van der Kouwe void test_fail_fl(char *msg, char *file, int line);
8294d1590SErik van der Kouwe #define test_fail(msg)	test_fail_fl(msg, __FILE__, __LINE__)
9294d1590SErik van der Kouwe 
10294d1590SErik van der Kouwe #if DEBUG == 1
11294d1590SErik van der Kouwe /* macros to display debugging information */
12294d1590SErik van der Kouwe void debug_fl(char *msg, char *file, int line);
13294d1590SErik van der Kouwe #define debug(msg) debug_fl(msg, __FILE__, __LINE__)
14294d1590SErik van der Kouwe #else
15294d1590SErik van der Kouwe #define debug(msg)
16294d1590SErik van der Kouwe #endif
17294d1590SErik van der Kouwe 
18294d1590SErik van der Kouwe #define SOCKET(sd,domain,type,protocol)					\
19294d1590SErik van der Kouwe 	do {								\
20294d1590SErik van der Kouwe 		errno = 0;						\
21294d1590SErik van der Kouwe 		sd = socket(domain, type, protocol);			\
22294d1590SErik van der Kouwe 		if (sd == -1) {						\
23294d1590SErik van der Kouwe 		test_fail("sd = socket(domain, type, protocol) failed");\
24294d1590SErik van der Kouwe 		}							\
25294d1590SErik van der Kouwe 	} while (0)
26294d1590SErik van der Kouwe 
27294d1590SErik van der Kouwe #define UNLINK(path)						\
28294d1590SErik van der Kouwe 	do {							\
29294d1590SErik van der Kouwe 		int rc;						\
30294d1590SErik van der Kouwe 		errno = 0;					\
31294d1590SErik van der Kouwe 		rc = unlink(path);				\
32294d1590SErik van der Kouwe 		if (rc == -1 && errno != ENOENT) {		\
33294d1590SErik van der Kouwe 			test_fail("unlink(path) failed");	\
34294d1590SErik van der Kouwe 		}						\
35294d1590SErik van der Kouwe 	} while(0)
36294d1590SErik van der Kouwe 
37294d1590SErik van der Kouwe #define SYMLINK(oldpath,newpath)					\
38294d1590SErik van der Kouwe 	do {								\
39294d1590SErik van der Kouwe 		int rc;							\
40294d1590SErik van der Kouwe 		errno = 0;						\
41294d1590SErik van der Kouwe 		rc = symlink(oldpath,newpath);				\
42294d1590SErik van der Kouwe 		if (rc == -1) {						\
43294d1590SErik van der Kouwe 			test_fail("symlink(oldpath,newpath) failed");	\
44294d1590SErik van der Kouwe 		}							\
45294d1590SErik van der Kouwe 	} while(0)
46294d1590SErik van der Kouwe 
47294d1590SErik van der Kouwe #define CLOSE(sd)					\
48294d1590SErik van der Kouwe 	do {						\
49294d1590SErik van der Kouwe 		int rc;					\
50294d1590SErik van der Kouwe 		errno = 0;				\
51294d1590SErik van der Kouwe 		rc = close(sd);				\
52294d1590SErik van der Kouwe 		if (rc == -1) {				\
53294d1590SErik van der Kouwe 			test_fail("close(sd) failed");	\
54294d1590SErik van der Kouwe 		}					\
55294d1590SErik van der Kouwe 	} while (0)
56294d1590SErik van der Kouwe 
57294d1590SErik van der Kouwe extern int server_ready;
58294d1590SErik van der Kouwe void test_xfer_sighdlr(int sig);
59294d1590SErik van der Kouwe 
60294d1590SErik van der Kouwe struct socket_test_info {
61294d1590SErik van der Kouwe 	const struct sockaddr *clientaddr;
62294d1590SErik van der Kouwe 	socklen_t clientaddrlen;
63294d1590SErik van der Kouwe 	const struct sockaddr *clientaddr2;
64294d1590SErik van der Kouwe 	socklen_t clientaddr2len;
65294d1590SErik van der Kouwe 	const struct sockaddr *clientaddrsym;
66294d1590SErik van der Kouwe 	socklen_t clientaddrsymlen;
67294d1590SErik van der Kouwe 	int domain;
68294d1590SErik van der Kouwe 	int expected_rcvbuf;
69294d1590SErik van der Kouwe 	int expected_sndbuf;
70294d1590SErik van der Kouwe 	const struct sockaddr *serveraddr;
71294d1590SErik van der Kouwe 	socklen_t serveraddrlen;
72294d1590SErik van der Kouwe 	const struct sockaddr *serveraddr2;
73294d1590SErik van der Kouwe 	socklen_t serveraddr2len;
74294d1590SErik van der Kouwe 	int type;
75294d1590SErik van der Kouwe 	const int *types;
76294d1590SErik van der Kouwe 	size_t typecount;
77294d1590SErik van der Kouwe 
78294d1590SErik van der Kouwe 	int ignore_accept_delay; /* success from accept after aborted connect */
79294d1590SErik van der Kouwe 	int ignore_connect_delay; /* nb connect not instant */
80294d1590SErik van der Kouwe 	int ignore_connect_unaccepted; /* connect succeeds without accept */
81294d1590SErik van der Kouwe 	int ignore_select_delay; /* select delay reflecting other side nb op */
82294d1590SErik van der Kouwe 	int ignore_send_waiting; /* can send while waiting for nb recv */
83294d1590SErik van der Kouwe 	int ignore_write_conn_reset; /* write does not guarantee ECONNRESET */
84294d1590SErik van der Kouwe 
85294d1590SErik van der Kouwe 	void (* callback_check_sockaddr)(const struct sockaddr *sockaddr,
86294d1590SErik van der Kouwe 		socklen_t sockaddrlen, const char *callname, int addridx);
87294d1590SErik van der Kouwe 	void (* callback_cleanup)(void);
88294d1590SErik van der Kouwe 	void (* callback_xfer_peercred)(int sd); /* can be NULL */
89294d1590SErik van der Kouwe 	void (* callback_xfer_prepclient)(void); /* can be NULL */
90*27852ebeSDavid van Moolenbroek 	void (* callback_set_listen_opt)(int sd); /* can be NULL */
91294d1590SErik van der Kouwe };
92294d1590SErik van der Kouwe 
93294d1590SErik van der Kouwe void test_abort_client_server(const struct socket_test_info *info,
94294d1590SErik van der Kouwe 	int abort_type);
95294d1590SErik van der Kouwe void test_bind(const struct socket_test_info *info);
96294d1590SErik van der Kouwe void test_close(const struct socket_test_info *info);
97294d1590SErik van der Kouwe void test_connect_close(const struct socket_test_info *info);
98294d1590SErik van der Kouwe void test_connect_nb(const struct socket_test_info *info);
99294d1590SErik van der Kouwe void test_dup(const struct socket_test_info *info);
100294d1590SErik van der Kouwe void test_dup2(const struct socket_test_info *info);
101294d1590SErik van der Kouwe void test_getsockname(const struct socket_test_info *info);
102294d1590SErik van der Kouwe void test_intr(const struct socket_test_info *info);
103294d1590SErik van der Kouwe void test_listen(const struct socket_test_info *info);
104294d1590SErik van der Kouwe void test_listen_close(const struct socket_test_info *info);
105294d1590SErik van der Kouwe void test_listen_close_nb(const struct socket_test_info *info);
106294d1590SErik van der Kouwe void test_msg_dgram(const struct socket_test_info *info);
107294d1590SErik van der Kouwe void test_nonblock(const struct socket_test_info *info);
108294d1590SErik van der Kouwe void test_read(const struct socket_test_info *info);
109294d1590SErik van der Kouwe void test_shutdown(const struct socket_test_info *info);
110294d1590SErik van der Kouwe void test_simple_client_server(const struct socket_test_info *info, int type);
111294d1590SErik van der Kouwe void test_sockopts(const struct socket_test_info *info);
112294d1590SErik van der Kouwe void test_socket(const struct socket_test_info *info);
113294d1590SErik van der Kouwe void test_write(const struct socket_test_info *info);
114294d1590SErik van der Kouwe void test_xfer(const struct socket_test_info *info);
115