diff options
| author | Garrett D'Amore <garrett@damore.org> | 2018-02-14 14:50:04 -0800 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2018-02-14 18:28:36 -0800 |
| commit | 45bc175ef9278c175d2fc3a0678b49b18e74c449 (patch) | |
| tree | b1838778ee898112f28b35178364068c6f48c9b4 /tests/compat_testutil.h | |
| parent | 8f93750ed2a6aaa1749eb689ddf119280f9aac7a (diff) | |
| download | nng-45bc175ef9278c175d2fc3a0678b49b18e74c449.tar.gz nng-45bc175ef9278c175d2fc3a0678b49b18e74c449.tar.bz2 nng-45bc175ef9278c175d2fc3a0678b49b18e74c449.zip | |
fixes #234 Investigate enabling more verbose compiler warnings
We enabled verbose compiler warnings, and found a lot of issues.
Some of these were even real bugs. As a bonus, we actually save
some initialization steps in the compat layer, and avoid passing
some variables we don't need.
Diffstat (limited to 'tests/compat_testutil.h')
| -rw-r--r-- | tests/compat_testutil.h | 213 |
1 files changed, 23 insertions, 190 deletions
diff --git a/tests/compat_testutil.h b/tests/compat_testutil.h index 00e7cb0b..745f5621 100644 --- a/tests/compat_testutil.h +++ b/tests/compat_testutil.h @@ -2,6 +2,8 @@ Copyright (c) 2013 Insollo Entertainment, LLC. All rights reserved. Copyright 2017 Garrett D'Amore <garrett@damore.org> Copyright 2016 Franklin "Snaipe" Mathieu <franklinmathieu@gmail.com> + Copyright 2018 Staysail Systems, Inc. <info@staysail.tech> + Copyright 2018 Capitar IT Group BV <info@capitar.com> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), @@ -40,15 +42,25 @@ #define errno_assert assert #define alloc_assert(x) assert(x != NULL) -static int test_socket_impl(char *file, int line, int family, int protocol); -static int test_connect_impl(char *file, int line, int sock, char *address); -static int test_bind_impl(char *file, int line, int sock, char *address); -static void test_close_impl(char *file, int line, int sock); -static void test_send_impl(char *file, int line, int sock, char *data); -static void test_recv_impl(char *file, int line, int sock, char *data); -static void test_drop_impl(char *file, int line, int sock, int err); -static int test_setsockopt_impl(char *file, int line, int sock, int level, - int option, const void *optval, size_t optlen); +#if defined __GNUC__ || defined __llvm__ || defined __clang__ +#define NN_UNUSED __attribute__((unused)) +#else +#define NN_UNUSED +#endif + +extern int test_socket_impl(char *file, int line, int family, int protocol); +extern int test_connect_impl(char *file, int line, int sock, char *address); +extern int test_bind_impl(char *file, int line, int sock, char *address); +extern void test_close_impl(char *file, int line, int sock); +extern void test_send_impl(char *file, int line, int sock, char *data); +extern void test_recv_impl(char *file, int line, int sock, char *data); +extern void test_drop_impl(char *file, int line, int sock, int err); +extern int test_setsockopt_impl(char *file, int line, int sock, int level, + int option, const void *optval, size_t optlen); +extern int get_test_port(int argc, const char *argv[]); +extern void test_addr_from(char *out, const char *proto, const char *ip, + int port); +extern void nn_sleep(int); #define test_socket(f, p) test_socket_impl(__FILE__, __LINE__, (f), (p)) #define test_connect(s, a) test_connect_impl(__FILE__, __LINE__, (s), (a)) @@ -60,190 +72,11 @@ static int test_setsockopt_impl(char *file, int line, int sock, int level, #define test_setsockopt(s, l, o, v, z) \ test_setsockopt_impl(__FILE__, __LINE__, (s), (l), (o), (v), (z)) -#define NN_UNUSED - -static int -test_socket_impl(char *file, int line, int family, int protocol) -{ - int sock; - - sock = nn_socket(family, protocol); - if (sock == -1) { - fprintf(stderr, "Failed create socket: %s [%d] (%s:%d)\n", - nn_err_strerror(errno), (int) errno, file, line); - nn_err_abort(); - } - - return sock; -} - -static int -test_connect_impl(char *file, int line, int sock, char *address) -{ - int rc; - - rc = nn_connect(sock, address); - if (rc < 0) { - fprintf(stderr, "Failed connect to \"%s\": %s [%d] (%s:%d)\n", - address, nn_err_strerror(errno), (int) errno, file, line); - nn_err_abort(); - } - return rc; -} - -static int -test_bind_impl(char *file, int line, int sock, char *address) -{ - int rc; - - rc = nn_bind(sock, address); - if (rc < 0) { - fprintf(stderr, "Failed bind to \"%s\": %s [%d] (%s:%d)\n", - address, nn_err_strerror(errno), (int) errno, file, line); - nn_err_abort(); - } - return rc; -} - -static int -test_setsockopt_impl(char *file, int line, int sock, int level, int option, - const void *optval, size_t optlen) -{ - int rc; - - rc = nn_setsockopt(sock, level, option, optval, optlen); - if (rc < 0) { - fprintf(stderr, "Failed set option \"%d\": %s [%d] (%s:%d)\n", - option, nn_err_strerror(errno), (int) errno, file, line); - nn_err_abort(); - } - return rc; -} - -static void -test_close_impl(char *file, int line, int sock) -{ - int rc; - - rc = nn_close(sock); - if ((rc != 0) && (errno != EBADF && errno != ETERM)) { - fprintf(stderr, "Failed to close socket: %s [%d] (%s:%d)\n", - nn_err_strerror(errno), (int) errno, file, line); - nn_err_abort(); - } -} - -static void -test_send_impl(char *file, int line, int sock, char *data) -{ - size_t data_len; - int rc; - - data_len = strlen(data); - - rc = nn_send(sock, data, data_len, 0); - if (rc < 0) { - fprintf(stderr, "Failed to send: %s [%d] (%s:%d)\n", - nn_err_strerror(errno), (int) errno, file, line); - nn_err_abort(); - } - if (rc != (int) data_len) { - fprintf(stderr, - "Data to send is truncated: %d != %d (%s:%d)\n", rc, - (int) data_len, file, line); - nn_err_abort(); - } -} - -static void -test_recv_impl(char *file, int line, int sock, char *data) -{ - size_t data_len; - int rc; - char * buf; - - data_len = strlen(data); - /* We allocate plus one byte so that we are sure that message received - has correct length and not truncated */ - buf = malloc(data_len + 1); - alloc_assert(buf); - - rc = nn_recv(sock, buf, data_len + 1, 0); - if (rc < 0) { - fprintf(stderr, "Failed to recv: %s [%d] (%s:%d)\n", - nn_err_strerror(errno), (int) errno, file, line); - nn_err_abort(); - } - if (rc != (int) data_len) { - fprintf(stderr, - "Received data has wrong length: %d != %d (%s:%d)\n", rc, - (int) data_len, file, line); - nn_err_abort(); - } - if (memcmp(data, buf, data_len) != 0) { - /* We don't print the data as it may have binary garbage */ - fprintf( - stderr, "Received data is wrong (%s:%d)\n", file, line); - nn_err_abort(); - } - - free(buf); -} - -static void -test_drop_impl(char *file, int line, int sock, int err) -{ - int rc; - char buf[1024]; - - rc = nn_recv(sock, buf, sizeof(buf), 0); - if (rc < 0 && err != errno) { - fprintf(stderr, - "Got wrong err to recv: %s [%d != %d] (%s:%d)\n", - nn_err_strerror(errno), (int) errno, err, file, line); - nn_err_abort(); - } else if (rc >= 0) { - fprintf(stderr, "Did not drop message: [%d bytes] (%s:%d)\n", - rc, file, line); - nn_err_abort(); - } -} - -static int -get_test_port(int argc, const char *argv[]) -{ - return atoi(argc < 2 ? "5555" : argv[1]); -} - -static void -test_addr_from(char *out, const char *proto, const char *ip, int port) -{ - sprintf(out, "%s://%s:%d", proto, ip, port); -} - -void -nn_sleep(int32_t msec) -{ - void nng_msleep(int32_t); - nng_msleep(msec); -} - struct nn_thread { void *thr; }; -int -nn_thread_init(struct nn_thread *thr, void (*func)(void *), void *arg) -{ - int nng_thread_create(void **, void (*)(void *), void *); - return (nng_thread_create(&thr->thr, func, arg)); -} - -void -nn_thread_term(struct nn_thread *thr) -{ - void nng_thread_destroy(void *); - nng_thread_destroy(thr->thr); -} +extern int nn_thread_init(struct nn_thread *, void (*)(void *), void *); +extern void nn_thread_term(struct nn_thread *); #endif // TESTUTIL_H_INCLUDED |
