aboutsummaryrefslogtreecommitdiff
path: root/tests/compat_testutil.h
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2018-02-14 14:50:04 -0800
committerGarrett D'Amore <garrett@damore.org>2018-02-14 18:28:36 -0800
commit45bc175ef9278c175d2fc3a0678b49b18e74c449 (patch)
treeb1838778ee898112f28b35178364068c6f48c9b4 /tests/compat_testutil.h
parent8f93750ed2a6aaa1749eb689ddf119280f9aac7a (diff)
downloadnng-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.h213
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