diff options
| author | Garrett D'Amore <garrett@damore.org> | 2020-11-16 20:44:29 -0800 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2020-11-18 21:05:16 -0800 |
| commit | b826bfc171d90f8bde7bd672c0ac14201b8b2742 (patch) | |
| tree | 5c416487f24104e6305a797af31c5e8b1aab99d1 /src/transport | |
| parent | cda4885676f009e2e7f2ad5e6c52743efc8b8924 (diff) | |
| download | nng-b826bfc171d90f8bde7bd672c0ac14201b8b2742.tar.gz nng-b826bfc171d90f8bde7bd672c0ac14201b8b2742.tar.bz2 nng-b826bfc171d90f8bde7bd672c0ac14201b8b2742.zip | |
Work for test refactoring.
There are a few major areas in this change.
* CMake options are now located in a common cmake/NNGOptions.cmake
file. This should make it easier for folks to figure out what
the options are, and how they are used.
* Tests are now scoped with their directory name, which should
avoid possible name collisions with test names.
* A number of tests have been either moved or incorporated into
the newer testutil/acutest framework. We are moving away from
my old c-convey framework to something easier to debug.
* We use CMake directories a bit more extensively leading to a much
cleaner CMake structure. It's not complete, but a big step in the
right direction, and a preview of future work.
* Tests are now run with verbose flags, so we get more test results
in the CI/CD logs.
Diffstat (limited to 'src/transport')
| -rw-r--r-- | src/transport/CMakeLists.txt | 19 | ||||
| -rw-r--r-- | src/transport/inproc/CMakeLists.txt | 5 | ||||
| -rw-r--r-- | src/transport/ipc/CMakeLists.txt | 3 | ||||
| -rw-r--r-- | src/transport/ipc/ipc_test.c | 50 | ||||
| -rw-r--r-- | src/transport/tcp/CMakeLists.txt | 8 | ||||
| -rw-r--r-- | src/transport/tcp/tcp_test.c | 304 | ||||
| -rw-r--r-- | src/transport/tls/CMakeLists.txt | 3 | ||||
| -rw-r--r-- | src/transport/ws/CMakeLists.txt | 12 | ||||
| -rw-r--r-- | src/transport/ws/ws_test.c | 42 | ||||
| -rw-r--r-- | src/transport/zerotier/CMakeLists.txt | 2 |
10 files changed, 397 insertions, 51 deletions
diff --git a/src/transport/CMakeLists.txt b/src/transport/CMakeLists.txt new file mode 100644 index 00000000..add8a9c9 --- /dev/null +++ b/src/transport/CMakeLists.txt @@ -0,0 +1,19 @@ +# +# Copyright 2020 Staysail Systems, Inc. <info@staystail.tech> +# +# This software is supplied under the terms of the MIT License, a +# copy of which should be located in the distribution where this +# file was obtained (LICENSE.txt). A copy of the license may also be +# found online at https://opensource.org/licenses/MIT. +# + +# Transports. +nng_directory(transport) + +add_subdirectory(inproc) +add_subdirectory(ipc) +add_subdirectory(tcp) +add_subdirectory(tls) +add_subdirectory(ws) +add_subdirectory(zerotier) + diff --git a/src/transport/inproc/CMakeLists.txt b/src/transport/inproc/CMakeLists.txt index e440fe31..317686bb 100644 --- a/src/transport/inproc/CMakeLists.txt +++ b/src/transport/inproc/CMakeLists.txt @@ -1,5 +1,5 @@ # -# Copyright 2019 Staysail Systems, Inc. <info@staysail.tech> +# Copyright 2020 Staysail Systems, Inc. <info@staysail.tech> # Copyright 2018 Capitar IT Group BV <info@capitar.com> # # This software is supplied under the terms of the MIT License, a @@ -9,8 +9,7 @@ # # inproc protocol -option (NNG_TRANSPORT_INPROC "Enable inproc transport." ON) -mark_as_advanced(NNG_TRANSPORT_INPROC) +nng_directory(inproc) nng_sources_if(NNG_TRANSPORT_INPROC inproc.c) nng_headers_if(NNG_TRANSPORT_INPROC nng/transport/inproc/inproc.h) diff --git a/src/transport/ipc/CMakeLists.txt b/src/transport/ipc/CMakeLists.txt index 00e81d54..c9927f75 100644 --- a/src/transport/ipc/CMakeLists.txt +++ b/src/transport/ipc/CMakeLists.txt @@ -9,8 +9,7 @@ # # ipc protocol -option (NNG_TRANSPORT_IPC "Enable IPC transport." ON) -mark_as_advanced(NNG_TRANSPORT_IPC) +nng_directory(ipc) nng_sources_if(NNG_TRANSPORT_IPC ipc.c) nng_headers_if(NNG_TRANSPORT_IPC nng/transport/ipc/ipc.h) diff --git a/src/transport/ipc/ipc_test.c b/src/transport/ipc/ipc_test.c index 7bf3d2ec..3240b21d 100644 --- a/src/transport/ipc/ipc_test.c +++ b/src/transport/ipc/ipc_test.c @@ -1,5 +1,6 @@ // // Copyright 2020 Staysail Systems, Inc. <info@staysail.tech> +// Copyright 2018 Cody Piersall <cody.piersall@gmail.com> // // This software is supplied under the terms of the MIT License, a // copy of which should be located in the distribution where this @@ -107,27 +108,24 @@ test_ipc_listener_perms(void) TEST_NNG_PASS(nng_listener_create(&l, s, addr)); #ifdef _WIN32 - TEST_NNG_FAIL( - nng_listener_setopt_int(l, NNG_OPT_IPC_PERMISSIONS, 0444), + TEST_NNG_FAIL(nng_listener_set_int(l, NNG_OPT_IPC_PERMISSIONS, 0444), NNG_ENOTSUP); #else path = &addr[strlen("ipc://")]; // Attempt to set invalid permissions fails. TEST_NNG_FAIL( - nng_listener_setopt_int(l, NNG_OPT_IPC_PERMISSIONS, S_IFREG), + nng_listener_set_int(l, NNG_OPT_IPC_PERMISSIONS, S_IFREG), NNG_EINVAL); - TEST_NNG_PASS( - nng_listener_setopt_int(l, NNG_OPT_IPC_PERMISSIONS, 0444)); + TEST_NNG_PASS(nng_listener_set_int(l, NNG_OPT_IPC_PERMISSIONS, 0444)); TEST_NNG_PASS(nng_listener_start(l, 0)); TEST_CHECK(stat(path, &st) == 0); TEST_CHECK((st.st_mode & 0777) == 0444); // Now that it's running, we cannot set it. TEST_NNG_FAIL( - nng_listener_setopt_int(l, NNG_OPT_IPC_PERMISSIONS, 0644), - NNG_EBUSY); + nng_listener_set_int(l, NNG_OPT_IPC_PERMISSIONS, 0644), NNG_EBUSY); #endif TEST_NNG_PASS(nng_close(s)); @@ -146,19 +144,19 @@ test_ipc_listener_properties(void) TEST_NNG_PASS(nng_pair0_open(&s)); TEST_NNG_PASS(nng_listen(s, addr, &l, 0)); - TEST_NNG_PASS(nng_listener_getopt_sockaddr(l, NNG_OPT_LOCADDR, &sa)); + TEST_NNG_PASS(nng_listener_get_addr(l, NNG_OPT_LOCADDR, &sa)); TEST_CHECK(sa.s_ipc.sa_family == NNG_AF_IPC); TEST_STREQUAL(sa.s_ipc.sa_path, addr + strlen("ipc://")); - TEST_NNG_FAIL(nng_listener_setopt(l, NNG_OPT_LOCADDR, &sa, sizeof(sa)), + TEST_NNG_FAIL(nng_listener_set(l, NNG_OPT_LOCADDR, &sa, sizeof(sa)), NNG_EREADONLY); z = 8192; - TEST_NNG_PASS(nng_listener_setopt_size(l, NNG_OPT_RECVMAXSZ, z)); + TEST_NNG_PASS(nng_listener_set_size(l, NNG_OPT_RECVMAXSZ, z)); z = 0; - TEST_NNG_PASS(nng_listener_getopt_size(l, NNG_OPT_RECVMAXSZ, &z)); + TEST_NNG_PASS(nng_listener_get_size(l, NNG_OPT_RECVMAXSZ, &z)); TEST_CHECK(z == 8192); TEST_NNG_FAIL( - nng_listener_setopt_bool(l, NNG_OPT_RAW, true), NNG_ENOTSUP); + nng_listener_set_bool(l, NNG_OPT_RAW, true), NNG_ENOTSUP); TEST_NNG_PASS(nng_close(s)); } @@ -242,10 +240,10 @@ test_abstract_auto_bind(void) TEST_NNG_PASS(nng_pair0_open(&s1)); TEST_NNG_PASS(nng_pair0_open(&s2)); - TEST_NNG_PASS(nng_setopt_ms(s1, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(s2, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(s1, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(s2, NNG_OPT_RECVTIMEO, 1000)); + TEST_NNG_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, 1000)); + TEST_NNG_PASS(nng_socket_set_ms(s2, NNG_OPT_SENDTIMEO, 1000)); + TEST_NNG_PASS(nng_socket_set_ms(s1, NNG_OPT_RECVTIMEO, 1000)); + TEST_NNG_PASS(nng_socket_set_ms(s2, NNG_OPT_RECVTIMEO, 1000)); TEST_NNG_PASS(nng_listen(s1, addr, &l, 0)); TEST_NNG_PASS(nng_listener_get_addr(l, NNG_OPT_LOCADDR, &sa)); @@ -287,8 +285,8 @@ test_abstract_too_long(void) TEST_ASSERT(strlen(addr) == 255); TEST_NNG_PASS(nng_pair0_open(&s1)); - TEST_NNG_PASS(nng_setopt_ms(s1, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(s1, NNG_OPT_RECVTIMEO, 1000)); + TEST_NNG_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, 1000)); + TEST_NNG_PASS(nng_socket_set_ms(s1, NNG_OPT_RECVTIMEO, 1000)); TEST_NNG_FAIL(nng_listen(s1, addr, NULL, 0), NNG_EADDRINVAL); TEST_NNG_FAIL( nng_dial(s1, addr, NULL, NNG_FLAG_NONBLOCK), NNG_EADDRINVAL); @@ -317,10 +315,10 @@ test_abstract_null(void) TEST_NNG_PASS(nng_pair0_open(&s1)); TEST_NNG_PASS(nng_pair0_open(&s2)); - TEST_NNG_PASS(nng_setopt_ms(s1, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(s2, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(s1, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(s2, NNG_OPT_RECVTIMEO, 1000)); + TEST_NNG_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, 1000)); + TEST_NNG_PASS(nng_socket_set_ms(s2, NNG_OPT_SENDTIMEO, 1000)); + TEST_NNG_PASS(nng_socket_set_ms(s1, NNG_OPT_RECVTIMEO, 1000)); + TEST_NNG_PASS(nng_socket_set_ms(s2, NNG_OPT_RECVTIMEO, 1000)); TEST_NNG_PASS(nng_listen(s1, addr, &l, 0)); TEST_NNG_PASS(nng_listener_get_addr(l, NNG_OPT_LOCADDR, &sa)); @@ -372,10 +370,10 @@ test_unix_alias(void) TEST_NNG_PASS(nng_pair0_open(&s1)); TEST_NNG_PASS(nng_pair0_open(&s2)); - TEST_NNG_PASS(nng_setopt_ms(s1, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(s2, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(s1, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(s2, NNG_OPT_RECVTIMEO, 1000)); + TEST_NNG_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, 1000)); + TEST_NNG_PASS(nng_socket_set_ms(s2, NNG_OPT_SENDTIMEO, 1000)); + TEST_NNG_PASS(nng_socket_set_ms(s1, NNG_OPT_RECVTIMEO, 1000)); + TEST_NNG_PASS(nng_socket_set_ms(s2, NNG_OPT_RECVTIMEO, 1000)); TEST_NNG_PASS(nng_listen(s1, addr1, NULL, 0)); TEST_NNG_PASS(nng_dial(s2, addr2, NULL, 0)); diff --git a/src/transport/tcp/CMakeLists.txt b/src/transport/tcp/CMakeLists.txt index f3daa0a4..d6022329 100644 --- a/src/transport/tcp/CMakeLists.txt +++ b/src/transport/tcp/CMakeLists.txt @@ -1,5 +1,5 @@ # -# Copyright 2019 Staysail Systems, Inc. <info@staysail.tech> +# Copyright 2020 Staysail Systems, Inc. <info@staysail.tech> # Copyright 2018 Capitar IT Group BV <info@capitar.com> # # This software is supplied under the terms of the MIT License, a @@ -9,9 +9,9 @@ # # TCP protocol -option (NNG_TRANSPORT_TCP "Enable TCP transport." ON) -mark_as_advanced(NNG_TRANSPORT_TCP) +nng_directory(tcp) nng_sources_if(NNG_TRANSPORT_TCP tcp.c) nng_headers_if(NNG_TRANSPORT_TCP nng/transport/tcp/tcp.h) -nng_defines_if(NNG_TRANSPORT_TCP NNG_TRANSPORT_TCP)
\ No newline at end of file +nng_defines_if(NNG_TRANSPORT_TCP NNG_TRANSPORT_TCP) +nng_test(tcp_test)
\ No newline at end of file diff --git a/src/transport/tcp/tcp_test.c b/src/transport/tcp/tcp_test.c new file mode 100644 index 00000000..88b77ab4 --- /dev/null +++ b/src/transport/tcp/tcp_test.c @@ -0,0 +1,304 @@ +// +// Copyright 2020 Staysail Systems, Inc. <info@staysail.tech> +// Copyright 2018 Capitar IT Group BV <info@capitar.com> +// Copyright 2018 Devolutions <info@devolutions.net> +// Copyright 2018 Cody Piersall <cody.piersall@gmail.com> +// +// This software is supplied under the terms of the MIT License, a +// copy of which should be located in the distribution where this +// file was obtained (LICENSE.txt). A copy of the license may also be +// found online at https://opensource.org/licenses/MIT. +// + +#include <nng/nng.h> +#include <nng/protocol/pair0/pair.h> +#include <nng/supplemental/util/platform.h> + +#include <acutest.h> +#include <testutil.h> + +// TCP tests. + +static void +test_tcp_wild_card_connect_fail(void) +{ + nng_socket s; + char addr[NNG_MAXADDRLEN]; + + TEST_NNG_PASS(nng_pair0_open(&s)); + (void) snprintf( + addr, sizeof(addr), "tcp://*:%u", testutil_next_port()); + TEST_NNG_FAIL(nng_dial(s, addr, NULL, 0), NNG_EADDRINVAL); + TEST_NNG_PASS(nng_close(s)); +} + +void +test_tcp_wild_card_bind(void) +{ + nng_socket s1; + nng_socket s2; + char addr[NNG_MAXADDRLEN]; + uint16_t port; + + port = testutil_next_port(); + + TEST_NNG_PASS(nng_pair0_open(&s1)); + TEST_NNG_PASS(nng_pair0_open(&s2)); + (void) snprintf(addr, sizeof(addr), "tcp4://*:%u", port); + TEST_NNG_PASS(nng_listen(s1, addr, NULL, 0)); + // reset port back one + (void) snprintf(addr, sizeof(addr), "tcp://127.0.0.1:%u", port); + TEST_NNG_PASS(nng_dial(s2, addr, NULL, 0)); + TEST_NNG_PASS(nng_close(s2)); + TEST_NNG_PASS(nng_close(s1)); +} + +void +test_tcp_local_address_connect(void) +{ + + nng_socket s1; + nng_socket s2; + char addr[NNG_MAXADDRLEN]; + uint16_t port; + + TEST_NNG_PASS(nng_pair0_open(&s1)); + TEST_NNG_PASS(nng_pair0_open(&s2)); + port = testutil_next_port(); + (void) snprintf(addr, sizeof(addr), "tcp://127.0.0.1:%u", port); + TEST_NNG_PASS(nng_listen(s1, addr, NULL, 0)); + // reset port back one + (void) snprintf( + addr, sizeof(addr), "tcp://127.0.0.1;127.0.0.1:%u", port); + TEST_NNG_PASS(nng_dial(s2, addr, NULL, 0)); + TEST_NNG_PASS(nng_close(s2)); + TEST_NNG_PASS(nng_close(s1)); +} + +void +test_tcp_port_zero_bind(void) +{ + nng_socket s1; + nng_socket s2; + nng_sockaddr sa; + nng_listener l; + char * addr; + + TEST_NNG_PASS(nng_pair0_open(&s1)); + TEST_NNG_PASS(nng_pair_open(&s2)); + TEST_NNG_PASS(nng_listen(s1, "tcp://127.0.0.1:0", &l, 0)); + TEST_NNG_PASS(nng_listener_get_string(l, NNG_OPT_URL, &addr)); + TEST_CHECK(memcmp(addr, "tcp://", 6) == 0); + TEST_NNG_PASS(nng_listener_get_addr(l, NNG_OPT_LOCADDR, &sa)); + TEST_CHECK(sa.s_in.sa_family == NNG_AF_INET); + TEST_CHECK(sa.s_in.sa_port != 0); + TEST_CHECK(sa.s_in.sa_addr = testutil_htonl(0x7f000001)); + TEST_NNG_PASS(nng_dial(s2, addr, NULL, 0)); + nng_strfree(addr); + TEST_NNG_PASS(nng_close(s2)); + TEST_NNG_PASS(nng_close(s1)); +} + +void +test_tcp_bad_local_interface(void) +{ + nng_socket s1; + + TEST_NNG_PASS(nng_pair0_open(&s1)); + TEST_NNG_FAIL(nng_dial(s1, "tcp://bogus1;127.0.0.1:80", NULL, 0), + NNG_EADDRINVAL); + TEST_NNG_PASS(nng_close(s1)); +} + +void +test_tcp_non_local_address(void) +{ + nng_socket s1; + + TEST_NNG_PASS(nng_pair0_open(&s1)); + TEST_NNG_FAIL(nng_dial(s1, "tcp://8.8.8.8;127.0.0.1:80", NULL, 0), + NNG_EADDRINVAL); + TEST_NNG_PASS(nng_close(s1)); +} + +void +test_tcp_malformed_address(void) +{ + nng_socket s1; + + TEST_NNG_PASS(nng_pair0_open(&s1)); + TEST_NNG_FAIL( + nng_dial(s1, "tcp://127.0.0.1", NULL, 0), NNG_EADDRINVAL); + TEST_NNG_FAIL( + nng_dial(s1, "tcp://127.0.0.1.32", NULL, 0), NNG_EADDRINVAL); + TEST_NNG_FAIL( + nng_dial(s1, "tcp://127.0.x.1.32", NULL, 0), NNG_EADDRINVAL); + TEST_NNG_FAIL( + nng_listen(s1, "tcp://127.0.0.1.32", NULL, 0), NNG_EADDRINVAL); + TEST_NNG_FAIL( + nng_listen(s1, "tcp://127.0.x.1.32", NULL, 0), NNG_EADDRINVAL); + TEST_NNG_PASS(nng_close(s1)); +} + +void +test_tcp_no_delay_option(void) +{ + nng_socket s; + nng_dialer d; + nng_listener l; + bool v; + int x; + char addr[64]; + + testutil_scratch_addr("tcp", sizeof(addr), addr); + + TEST_NNG_PASS(nng_pair0_open(&s)); +#ifndef NNG_ELIDE_DEPRECATED + TEST_NNG_PASS(nng_socket_get_bool(s, NNG_OPT_TCP_NODELAY, &v)); + TEST_CHECK(v == true); +#endif + TEST_NNG_PASS(nng_dialer_create(&d, s, addr)); + TEST_NNG_PASS(nng_dialer_get_bool(d, NNG_OPT_TCP_NODELAY, &v)); + TEST_CHECK(v == true); + TEST_NNG_PASS(nng_dialer_set_bool(d, NNG_OPT_TCP_NODELAY, false)); + TEST_NNG_PASS(nng_dialer_get_bool(d, NNG_OPT_TCP_NODELAY, &v)); + TEST_CHECK(v == false); + TEST_NNG_FAIL( + nng_dialer_get_int(d, NNG_OPT_TCP_NODELAY, &x), NNG_EBADTYPE); + x = 0; + TEST_NNG_FAIL( + nng_dialer_set_int(d, NNG_OPT_TCP_NODELAY, x), NNG_EBADTYPE); + // This assumes sizeof (bool) != sizeof (int) + if (sizeof(bool) != sizeof(int)) { + TEST_NNG_FAIL( + nng_dialer_set(d, NNG_OPT_TCP_NODELAY, &x, sizeof(x)), + NNG_EINVAL); + } + + TEST_NNG_PASS(nng_listener_create(&l, s, addr)); + TEST_NNG_PASS(nng_listener_get_bool(l, NNG_OPT_TCP_NODELAY, &v)); + TEST_CHECK(v == true); + x = 0; + TEST_NNG_FAIL( + nng_listener_set_int(l, NNG_OPT_TCP_NODELAY, x), NNG_EBADTYPE); + // This assumes sizeof (bool) != sizeof (int) + TEST_NNG_FAIL(nng_listener_set(l, NNG_OPT_TCP_NODELAY, &x, sizeof(x)), + NNG_EINVAL); + + TEST_NNG_PASS(nng_dialer_close(d)); + TEST_NNG_PASS(nng_listener_close(l)); + + // Make sure socket wide defaults apply. +#ifndef NNG_ELIDE_DEPRECATED + TEST_NNG_PASS(nng_socket_set_bool(s, NNG_OPT_TCP_NODELAY, true)); + v = false; + TEST_NNG_PASS(nng_socket_get_bool(s, NNG_OPT_TCP_NODELAY, &v)); + TEST_CHECK(v == true); + TEST_NNG_PASS(nng_socket_set_bool(s, NNG_OPT_TCP_NODELAY, false)); + TEST_NNG_PASS(nng_dialer_create(&d, s, addr)); + TEST_NNG_PASS(nng_dialer_get_bool(d, NNG_OPT_TCP_NODELAY, &v)); + TEST_CHECK(v == false); +#endif + TEST_NNG_PASS(nng_close(s)); +} + +void +test_tcp_keep_alive_option(void) +{ + nng_socket s; + nng_dialer d; + nng_listener l; + bool v; + int x; + char addr[64]; + + testutil_scratch_addr("tcp", sizeof(addr), addr); + TEST_NNG_PASS(nng_pair0_open(&s)); +#ifndef NNG_ELIDE_DEPRECATED + TEST_NNG_PASS(nng_socket_get_bool(s, NNG_OPT_TCP_KEEPALIVE, &v)); + TEST_CHECK(v == false); +#endif + TEST_NNG_PASS(nng_dialer_create(&d, s, addr)); + TEST_NNG_PASS(nng_dialer_get_bool(d, NNG_OPT_TCP_KEEPALIVE, &v)); + TEST_CHECK(v == false); + TEST_NNG_PASS(nng_dialer_set_bool(d, NNG_OPT_TCP_KEEPALIVE, true)); + TEST_NNG_PASS(nng_dialer_get_bool(d, NNG_OPT_TCP_KEEPALIVE, &v)); + TEST_CHECK(v == true); + TEST_NNG_FAIL( + nng_dialer_get_int(d, NNG_OPT_TCP_KEEPALIVE, &x), NNG_EBADTYPE); + x = 1; + TEST_NNG_FAIL( + nng_dialer_set_int(d, NNG_OPT_TCP_KEEPALIVE, x), NNG_EBADTYPE); + + TEST_NNG_PASS(nng_listener_create(&l, s, addr)); + TEST_NNG_PASS(nng_listener_get_bool(l, NNG_OPT_TCP_KEEPALIVE, &v)); + TEST_CHECK(v == false); + x = 1; + TEST_NNG_FAIL( + nng_listener_set_int(l, NNG_OPT_TCP_KEEPALIVE, x), NNG_EBADTYPE); + + TEST_NNG_PASS(nng_dialer_close(d)); + TEST_NNG_PASS(nng_listener_close(l)); + + // Make sure socket wide defaults apply. +#ifndef NNG_ELIDE_DEPRECATED + TEST_NNG_PASS(nng_socket_set_bool(s, NNG_OPT_TCP_KEEPALIVE, false)); + v = true; + TEST_NNG_PASS(nng_socket_get_bool(s, NNG_OPT_TCP_KEEPALIVE, &v)); + TEST_CHECK(v == false); + TEST_NNG_PASS(nng_socket_set_bool(s, NNG_OPT_TCP_KEEPALIVE, true)); + TEST_NNG_PASS(nng_dialer_create(&d, s, addr)); + TEST_NNG_PASS(nng_dialer_get_bool(d, NNG_OPT_TCP_KEEPALIVE, &v)); + TEST_CHECK(v == true); +#endif + TEST_NNG_PASS(nng_close(s)); +} + +void +test_tcp_recv_max(void) +{ + char msg[256]; + char buf[256]; + nng_socket s0; + nng_socket s1; + nng_listener l; + size_t sz; + char addr[64]; + + testutil_scratch_addr("tcp", sizeof(addr), addr); + + TEST_NNG_PASS(nng_pair0_open(&s0)); + TEST_NNG_PASS(nng_socket_set_ms(s0, NNG_OPT_RECVTIMEO, 100)); + TEST_NNG_PASS(nng_socket_set_size(s0, NNG_OPT_RECVMAXSZ, 200)); + TEST_NNG_PASS(nng_listener_create(&l, s0, addr)); + TEST_NNG_PASS(nng_socket_get_size(s0, NNG_OPT_RECVMAXSZ, &sz)); + TEST_CHECK(sz == 200); + TEST_NNG_PASS(nng_listener_set_size(l, NNG_OPT_RECVMAXSZ, 100)); + TEST_NNG_PASS(nng_listener_start(l, 0)); + + TEST_NNG_PASS(nng_pair0_open(&s1)); + TEST_NNG_PASS(nng_dial(s1, addr, NULL, 0)); + TEST_NNG_PASS(nng_send(s1, msg, 95, 0)); + TEST_NNG_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, 100)); + TEST_NNG_PASS(nng_recv(s0, buf, &sz, 0)); + TEST_CHECK(sz == 95); + TEST_NNG_PASS(nng_send(s1, msg, 150, 0)); + TEST_NNG_FAIL(nng_recv(s0, buf, &sz, 0), NNG_ETIMEDOUT); + TEST_NNG_PASS(nng_close(s0)); + TEST_NNG_PASS(nng_close(s1)); +} + +TEST_LIST = { + + { "tcp wild card connect fail", test_tcp_wild_card_connect_fail }, + { "tcp wild card bind", test_tcp_wild_card_bind }, + { "tcp port zero bind", test_tcp_port_zero_bind }, + { "tcp local address connect", test_tcp_local_address_connect }, + { "tcp bad local interface", test_tcp_bad_local_interface }, + { "tcp non-local address", test_tcp_non_local_address }, + { "tcp malformed address", test_tcp_malformed_address }, + { "tcp no delay option", test_tcp_no_delay_option }, + { "tcp keep alive option", test_tcp_keep_alive_option }, + { "tcp recv max", test_tcp_recv_max }, + { NULL, NULL }, +};
\ No newline at end of file diff --git a/src/transport/tls/CMakeLists.txt b/src/transport/tls/CMakeLists.txt index d77a67cd..82f24c79 100644 --- a/src/transport/tls/CMakeLists.txt +++ b/src/transport/tls/CMakeLists.txt @@ -9,8 +9,7 @@ # # TLS transport -option (NNG_TRANSPORT_TLS "Enable TLS transport." ON) -mark_as_advanced(NNG_TRANSPORT_TLS) +nng_directory(tls) nng_sources_if(NNG_TRANSPORT_TLS tls.c) nng_headers_if(NNG_TRANSPORT_TLS nng/transport/tls/tls.h) diff --git a/src/transport/ws/CMakeLists.txt b/src/transport/ws/CMakeLists.txt index 8d8b5965..6e409b43 100644 --- a/src/transport/ws/CMakeLists.txt +++ b/src/transport/ws/CMakeLists.txt @@ -9,19 +9,9 @@ # # WebSocket transport -option (NNG_TRANSPORT_WS "Enable WebSocket transport." ON) -mark_as_advanced(NNG_TRANSPORT_WS) - -CMAKE_DEPENDENT_OPTION(NNG_TRANSPORT_WSS "Enable WSS transport" ON - "NNG_ENABLE_TLS" OFF) -mark_as_advanced(NNG_TRANSPORT_WSS) +nng_directory(ws) if (NNG_TRANSPORT_WS OR NNG_TRANSPORT_WSS) - # Make sure things we *MUST* have are enabled. - set(NNG_SUPP_WEBSOCKET ON PARENT_SCOPE) - set(NNG_SUPP_HTTP ON PARENT_SCOPE) - set(NNG_SUPP_BASE64 ON PARENT_SCOPE) - set(NNG_SUPP_SHA1 ON PARENT_SCOPE) set(WS_ON ON) endif() diff --git a/src/transport/ws/ws_test.c b/src/transport/ws/ws_test.c index 3a6e7fdf..f8f122a1 100644 --- a/src/transport/ws/ws_test.c +++ b/src/transport/ws/ws_test.c @@ -1,5 +1,6 @@ // // Copyright 2020 Staysail Systems, Inc. <info@staysail.tech> +// Copyright 2018 Cody Piersall <cody.piersall@gmail.com> // // This software is supplied under the terms of the MIT License, a // copy of which should be located in the distribution where this @@ -60,18 +61,18 @@ test_wild_card_port(void) TEST_NNG_PASS(nng_pair0_open(&s6)); TEST_NNG_PASS(nng_listen(s1, "ws://127.0.0.1:0/one", &l1, 0)); TEST_NNG_PASS( - nng_listener_getopt_int(l1, NNG_OPT_TCP_BOUND_PORT, &port1)); + nng_listener_get_int(l1, NNG_OPT_TCP_BOUND_PORT, &port1)); TEST_CHECK(port1 != 0); snprintf(ws_url, sizeof(ws_url), "ws4://127.0.0.1:%d/two", port1); TEST_NNG_PASS(nng_listen(s2, ws_url, &l2, 0)); TEST_NNG_PASS( - nng_listener_getopt_int(l2, NNG_OPT_TCP_BOUND_PORT, &port2)); + nng_listener_get_int(l2, NNG_OPT_TCP_BOUND_PORT, &port2)); TEST_CHECK(port1 != 0); TEST_CHECK(port1 == port2); // Now try a different wild card port. TEST_NNG_PASS(nng_listen(s3, "ws4://127.0.0.1:0/three", &l3, 0)); TEST_NNG_PASS( - nng_listener_getopt_int(l3, NNG_OPT_TCP_BOUND_PORT, &port3)); + nng_listener_get_int(l3, NNG_OPT_TCP_BOUND_PORT, &port3)); TEST_CHECK(port3 != 0); TEST_CHECK(port3 != port1); @@ -141,10 +142,45 @@ test_empty_host(void) TEST_NNG_PASS(nng_close(s2)); } +void +test_ws_recv_max(void) +{ + char msg[256]; + char buf[256]; + nng_socket s0; + nng_socket s1; + nng_listener l; + size_t sz; + char addr[64]; + + testutil_scratch_addr("ws", sizeof(addr), addr); + + TEST_NNG_PASS(nng_pair0_open(&s0)); + TEST_NNG_PASS(nng_socket_set_ms(s0, NNG_OPT_RECVTIMEO, 100)); + TEST_NNG_PASS(nng_socket_set_size(s0, NNG_OPT_RECVMAXSZ, 200)); + TEST_NNG_PASS(nng_listener_create(&l, s0, addr)); + TEST_NNG_PASS(nng_socket_get_size(s0, NNG_OPT_RECVMAXSZ, &sz)); + TEST_CHECK(sz == 200); + TEST_NNG_PASS(nng_listener_set_size(l, NNG_OPT_RECVMAXSZ, 100)); + TEST_NNG_PASS(nng_listener_start(l, 0)); + + TEST_NNG_PASS(nng_pair0_open(&s1)); + TEST_NNG_PASS(nng_dial(s1, addr, NULL, 0)); + TEST_NNG_PASS(nng_send(s1, msg, 95, 0)); + TEST_NNG_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, 100)); + TEST_NNG_PASS(nng_recv(s0, buf, &sz, 0)); + TEST_CHECK(sz == 95); + TEST_NNG_PASS(nng_send(s1, msg, 150, 0)); + TEST_NNG_FAIL(nng_recv(s0, buf, &sz, 0), NNG_ETIMEDOUT); + TEST_NNG_PASS(nng_close(s0)); + TEST_NNG_PASS(nng_close(s1)); +} + TEST_LIST = { { "ws url path filters", test_ws_url_path_filters }, { "ws wild card port", test_wild_card_port }, { "ws wild card host", test_wild_card_host }, { "ws empty host", test_empty_host }, + { "ws recv max", test_ws_recv_max }, { NULL, NULL }, };
\ No newline at end of file diff --git a/src/transport/zerotier/CMakeLists.txt b/src/transport/zerotier/CMakeLists.txt index 167a98c0..903b7f56 100644 --- a/src/transport/zerotier/CMakeLists.txt +++ b/src/transport/zerotier/CMakeLists.txt @@ -13,6 +13,8 @@ option (NNG_TRANSPORT_ZEROTIER "Enable ZeroTier transport (requires libzerotiercore)." OFF) mark_as_advanced(NNG_TRANSPORT_ZEROTIER) +nng_directory(zerotier) + if (NNG_TRANSPORT_ZEROTIER) # NB: As we wind up linking libzerotiercore.a into the application, |
