diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/compat/nanomsg/CMakeLists.txt | 10 | ||||
| -rw-r--r-- | src/compat/nanomsg/compat_tcp_test.c (renamed from src/compat/nanomsg/compat_tcp.c) | 100 | ||||
| -rw-r--r-- | src/compat/nanomsg/compat_testutil.h | 32 | ||||
| -rw-r--r-- | src/protocol/reqrep0/xreq_test.c | 8 | ||||
| -rw-r--r-- | src/protocol/survey0/xsurvey_test.c | 16 |
5 files changed, 93 insertions, 73 deletions
diff --git a/src/compat/nanomsg/CMakeLists.txt b/src/compat/nanomsg/CMakeLists.txt index 2292d1a8..b2d99c3c 100644 --- a/src/compat/nanomsg/CMakeLists.txt +++ b/src/compat/nanomsg/CMakeLists.txt @@ -1,6 +1,5 @@ # -# Copyright 2018 Capitar IT Group BV <info@capitar.com> -# Copyright 2018 Staysail Systems, Inc. <info@staysail.tech> +# Copyright 2020 Staysail Systems, Inc. <info@staysail.tech> # # This software is supplied under the terms of the MIT License, a # copy of which should be located in the distribution where this @@ -8,8 +7,9 @@ # found online at https://opensource.org/licenses/MIT. # -set(COMPAT_SOURCES compat/nanomsg/nn.c) +#set(COMPAT_SOURCES compat/nanomsg/nn.c) +nng_sources(nn.c) -set(NNG_SRCS ${NNG_SRCS} ${COMPAT_SOURCES} PARENT_SCOPE) +#set(NNG_SRCS ${NNG_SRCS} ${COMPAT_SOURCES} PARENT_SCOPE) -nng_test(compat_tcp)
\ No newline at end of file +nng_test(compat_tcp_test)
\ No newline at end of file diff --git a/src/compat/nanomsg/compat_tcp.c b/src/compat/nanomsg/compat_tcp_test.c index 6e0c2185..8fb7f7b6 100644 --- a/src/compat/nanomsg/compat_tcp.c +++ b/src/compat/nanomsg/compat_tcp_test.c @@ -1,5 +1,5 @@ /* - Copyright 2019 Garrett D'Amore <garrett@damore.org> + Copyright 2020 Staysail Systems, Inc. <info@staysail.tech> Copyright (c) 2012 Martin Sustrik All rights reserved. Copyright 2016 Franklin "Snaipe" Mathieu <franklinmathieu@gmail.com> @@ -28,7 +28,6 @@ #include <nng/compat/nanomsg/nn.h> #include <nng/compat/nanomsg/pair.h> -#include <nng/compat/nanomsg/pubsub.h> #include <nng/compat/nanomsg/tcp.h> #include "compat_testutil.h" @@ -40,9 +39,8 @@ void test_bind_and_close(void) { int sb; - char addr[32]; - uint16_t port = testutil_next_port(); - (void) snprintf(addr, sizeof(addr), "tcp://127.0.0.1:%u", port); + char addr[64]; + testutil_scratch_addr("tcp", sizeof (addr), addr); TEST_CHECK((sb = nn_socket(AF_SP, NN_PAIR)) >= 0); TEST_CHECK(nn_bind(sb, addr) >= 0); @@ -53,30 +51,27 @@ void test_connect_and_close(void) { int sc; - char addr[32]; - uint16_t port = testutil_next_port(); - (void) snprintf(addr, sizeof(addr), "tcp://127.0.0.1:%u", port); + char addr[64]; + testutil_scratch_addr("tcp", sizeof (addr), addr); - TEST_CHECK((sc = nn_socket(AF_SP, NN_PAIR)) >= 0); - TEST_CHECK(nn_connect(sc, addr) >= 0); - TEST_CHECK(nn_close(sc) == 0); + TEST_NN_PASS((sc = nn_socket(AF_SP, NN_PAIR)) >= 0); + TEST_NN_PASS(nn_connect(sc, addr)); + TEST_NN_PASS(nn_close(sc)); } void test_bind_and_connect(void) { - int sb, sc; - char addr[32]; - uint16_t port = testutil_next_port(); - (void) snprintf(addr, sizeof(addr), "tcp://127.0.0.1:%u", port); + int sb, sc, p1, p2; + char addr[64]; + + testutil_scratch_addr("tcp", sizeof (addr), addr); TEST_CHECK((sb = nn_socket(AF_SP, NN_PAIR)) >= 0); TEST_CHECK((sc = nn_socket(AF_SP, NN_PAIR)) >= 0); TEST_CHECK(sb != sc); - TEST_CHECK(nn_bind(sb, addr) >= 0); - TEST_CHECK(nn_connect(sc, addr) >= 0); - testutil_sleep(200); + TEST_NN_MARRY_EX(sb, sc, addr, p1, p2); TEST_CHECK(nn_close(sb) == 0); TEST_CHECK(nn_close(sc) == 0); @@ -128,18 +123,17 @@ test_no_delay(void) void test_ping_pong(void) { - int sb, sc; - char addr[32]; - uint16_t port = testutil_next_port(); - (void) snprintf(addr, sizeof(addr), "tcp://127.0.0.1:%u", port); + int sb, sc, p1, p2; + char addr[64]; - TEST_CHECK((sb = nn_socket(AF_SP, NN_PAIR)) >= 0); - TEST_CHECK((sc = nn_socket(AF_SP, NN_PAIR)) >= 0); - TEST_CHECK(sb != sc); - TEST_CHECK(nn_bind(sb, addr) >= 0); - TEST_CHECK(nn_connect(sc, addr) >= 0); + testutil_scratch_addr("tcp", sizeof(addr), addr); - testutil_sleep(200); + TEST_NN_PASS((sb = nn_socket(AF_SP, NN_PAIR))); + TEST_NN_PASS((sc = nn_socket(AF_SP, NN_PAIR))); + TEST_CHECK(sb != sc); + TEST_NN_MARRY_EX(sc, sb, addr, p1, p2); + TEST_CHECK(p1 >= 0); + TEST_CHECK(p2 >= 0); /* Ping-pong test. */ for (int i = 0; i != 100; ++i) { @@ -166,18 +160,16 @@ test_ping_pong(void) void test_batch(void) { - int sb, sc; - char addr[32]; - uint16_t port = testutil_next_port(); + int sb, sc, p1, p2; + char addr[64]; int opt; size_t sz; - (void) snprintf(addr, sizeof(addr), "tcp://127.0.0.1:%u", port); - TEST_CHECK((sb = nn_socket(AF_SP, NN_PAIR)) >= 0); - TEST_CHECK((sc = nn_socket(AF_SP, NN_PAIR)) >= 0); + testutil_scratch_addr("tcp", sizeof(addr), addr); + + TEST_NN_PASS((sb = nn_socket(AF_SP, NN_PAIR))); + TEST_NN_PASS((sc = nn_socket(AF_SP, NN_PAIR))); TEST_CHECK(sb != sc); - TEST_CHECK(nn_bind(sb, addr) >= 0); - TEST_CHECK(nn_connect(sc, addr) >= 0); opt = 1000; sz = sizeof(opt); TEST_NN_PASS(nn_setsockopt(sb, NN_SOL_SOCKET, NN_RCVTIMEO, &opt, sz)); @@ -185,7 +177,9 @@ test_batch(void) TEST_NN_PASS(nn_setsockopt(sc, NN_SOL_SOCKET, NN_RCVTIMEO, &opt, sz)); TEST_NN_PASS(nn_setsockopt(sc, NN_SOL_SOCKET, NN_SNDTIMEO, &opt, sz)); - testutil_sleep(200); + TEST_NN_MARRY_EX(sc, sb, addr, p1, p2); + TEST_CHECK(p1 >= 0); + TEST_CHECK(p2 >= 0); // We can send 10 of these, because TCP buffers a reasonable amount. // Pushing say 100 of them may run into TCP buffering limitations. @@ -209,20 +203,19 @@ test_batch(void) void test_pair_reject(void) { - int sb, sc, sd; + int sb, sc, sd, p1, p2; char addr[32]; - uint16_t port = testutil_next_port(); - (void) snprintf(addr, sizeof(addr), "tcp://127.0.0.1:%u", port); + + testutil_scratch_addr("tcp", sizeof(addr), addr); TEST_CHECK((sb = nn_socket(AF_SP, NN_PAIR)) >= 0); TEST_CHECK((sc = nn_socket(AF_SP, NN_PAIR)) >= 0); TEST_CHECK((sd = nn_socket(AF_SP, NN_PAIR)) >= 0); TEST_CHECK(sb != sc); - TEST_CHECK(nn_bind(sb, addr) >= 0); - TEST_CHECK(nn_connect(sc, addr) >= 0); - testutil_sleep(100); - TEST_CHECK(nn_connect(sd, addr) >= 0); + TEST_NN_MARRY_EX(sc, sb, addr, p1, p2); + + TEST_CHECK(nn_connect(sd, addr) >= 0); testutil_sleep(200); TEST_CHECK(nn_close(sb) == 0); @@ -234,9 +227,9 @@ void test_addr_in_use(void) { int sb, sc; - char addr[32]; - uint16_t port = testutil_next_port(); - (void) snprintf(addr, sizeof(addr), "tcp://127.0.0.1:%u", port); + char addr[64]; + + testutil_scratch_addr("tcp", sizeof(addr), addr); TEST_CHECK((sb = nn_socket(AF_SP, NN_PAIR)) >= 0); TEST_CHECK((sc = nn_socket(AF_SP, NN_PAIR)) >= 0); @@ -251,14 +244,14 @@ test_addr_in_use(void) void test_max_recv_size(void) { - int sb, sc; + int sb, sc, p1, p2; int opt; int n; size_t sz; - char addr[32]; + char addr[64]; char buf[64]; - uint16_t port = testutil_next_port(); - (void) snprintf(addr, sizeof(addr), "tcp://127.0.0.1:%u", port); + + testutil_scratch_addr("tcp", sizeof(addr), addr); TEST_CHECK((sb = nn_socket(AF_SP, NN_PAIR)) >= 0); TEST_CHECK((sc = nn_socket(AF_SP, NN_PAIR)) >= 0); @@ -286,10 +279,7 @@ test_max_recv_size(void) TEST_CHECK(opt == 4); TEST_CHECK(sz == sizeof(opt)); - TEST_CHECK(nn_bind(sb, addr) >= 0); - TEST_CHECK(nn_connect(sc, addr) >= 0); - - testutil_sleep(200); + TEST_NN_MARRY_EX(sc, sb, addr, p1, p2); TEST_NN_PASS(nn_send(sc, "ABC", 4, 0)); TEST_NN_PASS(nn_send(sc, "012345", 6, 0)); diff --git a/src/compat/nanomsg/compat_testutil.h b/src/compat/nanomsg/compat_testutil.h index afd75c34..113d6672 100644 --- a/src/compat/nanomsg/compat_testutil.h +++ b/src/compat/nanomsg/compat_testutil.h @@ -1,5 +1,5 @@ // -// Copyright 2019 Staysail Systems, Inc. <info@staysail.tech> +// Copyright 2020 Staysail Systems, Inc. <info@staysail.tech> // // This software is supplied under the terms of the MIT License, a // copy of which should be located in the distribution where this @@ -41,6 +41,36 @@ extern "C" { expect, nng_strerror(err_), result_); \ } while (0) +// These macros use some details of the socket and pipe which are not public. +// We do that to facilitate testing. Don't rely on this equivalence in your +// own application code. + +#define TEST_NN_MARRY(s1, s2) \ + do { \ + int rv_; \ + nng_socket s1_, s2_; \ + s1_.id = s1; \ + s2_.id = s2; \ + \ + TEST_CHECK_(testutil_marry(s1_, s2_) == 0, "marry %s", \ + nng_strerror(rv_)); \ + } while (0) + +#define TEST_NN_MARRY_EX(s1, s2, url, p1, p2) \ + do { \ + int rv_; \ + nng_socket s1_, s2_; \ + nng_pipe p1_, p2_; \ + s1_.id = s1; \ + s2_.id = s2; \ + rv_ = testutil_marry_ex(s1_, s2_, url, &p1_, &p2_); \ + TEST_CHECK_(rv_ == 0, "marry %s", nng_strerror(rv_)); \ + p1 = p1_.id; \ + p2 = p2_.id; \ + TEST_CHECK(p1 >= 0); \ + TEST_CHECK(p2 >= 0); \ + } while (0) + #ifdef __cplusplus }; #endif diff --git a/src/protocol/reqrep0/xreq_test.c b/src/protocol/reqrep0/xreq_test.c index e474a0ac..57ad7f0a 100644 --- a/src/protocol/reqrep0/xreq_test.c +++ b/src/protocol/reqrep0/xreq_test.c @@ -234,7 +234,7 @@ test_xreq_recv_header(void) TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_SENDTIMEO, 1000)); TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(testutil_marry_ex(req, rep, &p1, &p2)); + TEST_NNG_PASS(testutil_marry_ex(req, rep, NULL, &p1, &p2)); // Simulate a few hops. TEST_NNG_PASS(nng_msg_alloc(&m, 0)); @@ -276,7 +276,7 @@ test_xreq_close_during_recv(void) TEST_NNG_PASS(nng_setopt_int(req, NNG_OPT_RECVBUF, 5)); TEST_NNG_PASS(nng_setopt_int(rep, NNG_OPT_SENDBUF, 20)); - TEST_NNG_PASS(testutil_marry_ex(req, rep, &p1, &p2)); + TEST_NNG_PASS(testutil_marry_ex(req, rep, NULL, &p1, &p2)); TEST_CHECK(nng_pipe_id(p1) > 0); TEST_CHECK(nng_pipe_id(p2) > 0); @@ -307,7 +307,7 @@ test_xreq_close_pipe_during_send(void) TEST_NNG_PASS(nng_setopt_int(rep, NNG_OPT_RECVBUF, 5)); TEST_NNG_PASS(nng_setopt_int(req, NNG_OPT_SENDBUF, 20)); - TEST_NNG_PASS(testutil_marry_ex(req, rep, &p1, &p2)); + TEST_NNG_PASS(testutil_marry_ex(req, rep, NULL, &p1, &p2)); TEST_CHECK(nng_pipe_id(p1) > 0); TEST_CHECK(nng_pipe_id(p2) > 0); @@ -329,7 +329,7 @@ test_xreq_ttl_option(void) nng_socket rep; int v; bool b; - size_t sz = sizeof(v); + size_t sz; const char *opt = NNG_OPT_MAXTTL; TEST_NNG_PASS(nng_req0_open_raw(&rep)); diff --git a/src/protocol/survey0/xsurvey_test.c b/src/protocol/survey0/xsurvey_test.c index b0123145..ff096de4 100644 --- a/src/protocol/survey0/xsurvey_test.c +++ b/src/protocol/survey0/xsurvey_test.c @@ -227,7 +227,7 @@ test_xsurvey_recv_header(void) nng_socket resp; nng_socket surv; nng_msg * m; - nng_pipe p1, p2; + nng_pipe p; uint32_t id; TEST_NNG_PASS(nng_respondent0_open_raw(&resp)); @@ -237,11 +237,11 @@ test_xsurvey_recv_header(void) TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_SENDTIMEO, 1000)); TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(testutil_marry_ex(surv, resp, &p1, &p2)); + TEST_NNG_PASS(testutil_marry_ex(surv, resp, NULL, NULL, &p)); // Simulate a few hops. TEST_NNG_PASS(nng_msg_alloc(&m, 0)); - TEST_NNG_PASS(nng_msg_header_append_u32(m, nng_pipe_id(p2))); + TEST_NNG_PASS(nng_msg_header_append_u32(m, nng_pipe_id(p))); TEST_NNG_PASS(nng_msg_header_append_u32(m, 0x2)); TEST_NNG_PASS(nng_msg_header_append_u32(m, 0x1)); TEST_NNG_PASS(nng_msg_header_append_u32(m, 0x80000123u)); @@ -279,7 +279,7 @@ test_xsurvey_close_during_recv(void) TEST_NNG_PASS(nng_setopt_int(surv, NNG_OPT_RECVBUF, 1)); TEST_NNG_PASS(nng_setopt_int(resp, NNG_OPT_SENDBUF, 20)); - TEST_NNG_PASS(testutil_marry_ex(surv, resp, &p1, &p2)); + TEST_NNG_PASS(testutil_marry_ex(surv, resp, NULL, &p1, &p2)); TEST_CHECK(nng_pipe_id(p1) > 0); TEST_CHECK(nng_pipe_id(p2) > 0); @@ -310,7 +310,7 @@ test_xsurvey_close_pipe_during_send(void) TEST_NNG_PASS(nng_setopt_int(resp, NNG_OPT_RECVBUF, 5)); TEST_NNG_PASS(nng_setopt_int(surv, NNG_OPT_SENDBUF, 20)); - TEST_NNG_PASS(testutil_marry_ex(surv, resp, &p1, &p2)); + TEST_NNG_PASS(testutil_marry_ex(surv, resp, NULL, &p1, &p2)); TEST_CHECK(nng_pipe_id(p1) > 0); TEST_CHECK(nng_pipe_id(p2) > 0); @@ -332,7 +332,7 @@ test_xsurvey_ttl_option(void) nng_socket s; int v; bool b; - size_t sz = sizeof(v); + size_t sz; const char *opt = NNG_OPT_MAXTTL; TEST_NNG_PASS(nng_surveyor0_open_raw(&s)); @@ -403,7 +403,7 @@ TEST_LIST = { { "xsurvey close during recv", test_xsurvey_close_during_recv }, { "xsurvey close pipe during send", test_xsurvey_close_pipe_during_send }, - { "xsurvey ttl option", test_xsurvey_ttl_option }, - { "xsurvey broadcast", test_xsurvey_broadcast }, + { "xsurvey ttl option", test_xsurvey_ttl_option }, + { "xsurvey broadcast", test_xsurvey_broadcast }, { NULL, NULL }, }; |
