phunix/minix/tests/common-socket.h
David van Moolenbroek ad920fc485 tests: adapt existing tests to new LWIP service
Change-Id: Id744e9d3fbe19733557011f8803593cf3768c35d
2017-04-30 13:16:10 +00:00

115 lines
3.7 KiB
C

#define DEBUG 0
/* buffer for send/recv */
#define BUFSIZE (128)
/* macro to display information about a failed test and increment the errct */
void test_fail_fl(char *msg, char *file, int line);
#define test_fail(msg) test_fail_fl(msg, __FILE__, __LINE__)
#if DEBUG == 1
/* macros to display debugging information */
void debug_fl(char *msg, char *file, int line);
#define debug(msg) debug_fl(msg, __FILE__, __LINE__)
#else
#define debug(msg)
#endif
#define SOCKET(sd,domain,type,protocol) \
do { \
errno = 0; \
sd = socket(domain, type, protocol); \
if (sd == -1) { \
test_fail("sd = socket(domain, type, protocol) failed");\
} \
} while (0)
#define UNLINK(path) \
do { \
int rc; \
errno = 0; \
rc = unlink(path); \
if (rc == -1 && errno != ENOENT) { \
test_fail("unlink(path) failed"); \
} \
} while(0)
#define SYMLINK(oldpath,newpath) \
do { \
int rc; \
errno = 0; \
rc = symlink(oldpath,newpath); \
if (rc == -1) { \
test_fail("symlink(oldpath,newpath) failed"); \
} \
} while(0)
#define CLOSE(sd) \
do { \
int rc; \
errno = 0; \
rc = close(sd); \
if (rc == -1) { \
test_fail("close(sd) failed"); \
} \
} while (0)
extern int server_ready;
void test_xfer_sighdlr(int sig);
struct socket_test_info {
const struct sockaddr *clientaddr;
socklen_t clientaddrlen;
const struct sockaddr *clientaddr2;
socklen_t clientaddr2len;
const struct sockaddr *clientaddrsym;
socklen_t clientaddrsymlen;
int domain;
int expected_rcvbuf;
int expected_sndbuf;
const struct sockaddr *serveraddr;
socklen_t serveraddrlen;
const struct sockaddr *serveraddr2;
socklen_t serveraddr2len;
int type;
const int *types;
size_t typecount;
int ignore_accept_delay; /* success from accept after aborted connect */
int ignore_connect_delay; /* nb connect not instant */
int ignore_connect_unaccepted; /* connect succeeds without accept */
int ignore_select_delay; /* select delay reflecting other side nb op */
int ignore_send_waiting; /* can send while waiting for nb recv */
int ignore_write_conn_reset; /* write does not guarantee ECONNRESET */
void (* callback_check_sockaddr)(const struct sockaddr *sockaddr,
socklen_t sockaddrlen, const char *callname, int addridx);
void (* callback_cleanup)(void);
void (* callback_xfer_peercred)(int sd); /* can be NULL */
void (* callback_xfer_prepclient)(void); /* can be NULL */
void (* callback_set_listen_opt)(int sd); /* can be NULL */
};
void test_abort_client_server(const struct socket_test_info *info,
int abort_type);
void test_bind(const struct socket_test_info *info);
void test_close(const struct socket_test_info *info);
void test_connect_close(const struct socket_test_info *info);
void test_connect_nb(const struct socket_test_info *info);
void test_dup(const struct socket_test_info *info);
void test_dup2(const struct socket_test_info *info);
void test_getsockname(const struct socket_test_info *info);
void test_intr(const struct socket_test_info *info);
void test_listen(const struct socket_test_info *info);
void test_listen_close(const struct socket_test_info *info);
void test_listen_close_nb(const struct socket_test_info *info);
void test_msg_dgram(const struct socket_test_info *info);
void test_nonblock(const struct socket_test_info *info);
void test_read(const struct socket_test_info *info);
void test_shutdown(const struct socket_test_info *info);
void test_simple_client_server(const struct socket_test_info *info, int type);
void test_sockopts(const struct socket_test_info *info);
void test_socket(const struct socket_test_info *info);
void test_write(const struct socket_test_info *info);
void test_xfer(const struct socket_test_info *info);