diff options
| author | Garrett D'Amore <garrett@damore.org> | 2020-11-21 22:11:21 -0800 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2020-11-23 22:20:12 -0800 |
| commit | d1218d7309475193b53911667911c4f59a1a7752 (patch) | |
| tree | 6ea796998fb60d2cb8afa704faa77fe7fddd644c /src | |
| parent | b826bfc171d90f8bde7bd672c0ac14201b8b2742 (diff) | |
| download | nng-d1218d7309475193b53911667911c4f59a1a7752.tar.gz nng-d1218d7309475193b53911667911c4f59a1a7752.tar.bz2 nng-d1218d7309475193b53911667911c4f59a1a7752.zip | |
New NUTS test framework (NNG Unit Test Support).
This is based on testutil/acutest, but is cleaner and fixes some
short-comings. We will be adding more support for additional
common paradigms to better facilitate transport tests.
While here we added some more test cases, and fixed a possible
symbol collision in the the stats framework (due to Linux use
of a macro definition of "si_value" in a standard OS header).
Test coverage may regress slightly as we are no longer using
some of the legacy APIs.
Diffstat (limited to 'src')
41 files changed, 6972 insertions, 4646 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5e0170a3..9a06bb9b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -30,6 +30,8 @@ add_subdirectory(supplemental/tls) add_subdirectory(supplemental/util) add_subdirectory(supplemental/websocket) +add_subdirectory(testing) + # When building shared libraries we prefer to suppress default symbol # visibility, so that only the symbols that should be exposed in the # resulting library are. This is the default with Windows. diff --git a/src/compat/nanomsg/compat_tcp_test.c b/src/compat/nanomsg/compat_tcp_test.c index 24b42a01..ae4193b7 100644 --- a/src/compat/nanomsg/compat_tcp_test.c +++ b/src/compat/nanomsg/compat_tcp_test.c @@ -32,28 +32,28 @@ #include "compat_testutil.h" -#include <acutest.h> -#include <testutil.h> +#include <nuts.h> void test_bind_and_close(void) { - int sb; - char addr[64]; - testutil_scratch_addr("tcp", sizeof (addr), addr); + int sb; + char *addr; - TEST_CHECK((sb = nn_socket(AF_SP, NN_PAIR)) >= 0); - TEST_CHECK(nn_bind(sb, addr) >= 0); - TEST_CHECK(nn_close(sb) == 0); + NUTS_ADDR(addr, "tcp"); + + NUTS_TRUE((sb = nn_socket(AF_SP, NN_PAIR)) >= 0); + NUTS_TRUE(nn_bind(sb, addr) >= 0); + NUTS_TRUE(nn_close(sb) == 0); } void test_connect_and_close(void) { - int sc; - char addr[64]; - testutil_scratch_addr("tcp", sizeof (addr), addr); + int sc; + char *addr; + NUTS_ADDR(addr, "tcp"); TEST_NN_PASS((sc = nn_socket(AF_SP, NN_PAIR)) >= 0); TEST_NN_PASS(nn_connect(sc, addr)); TEST_NN_PASS(nn_close(sc)); @@ -62,26 +62,25 @@ test_connect_and_close(void) void test_bind_and_connect(void) { - int sb, sc, p1, p2; - char addr[64]; - - testutil_scratch_addr("tcp", sizeof (addr), addr); + int sb, sc, p1, p2; + char *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); + NUTS_ADDR(addr, "tcp"); + NUTS_TRUE((sb = nn_socket(AF_SP, NN_PAIR)) >= 0); + NUTS_TRUE((sc = nn_socket(AF_SP, NN_PAIR)) >= 0); + NUTS_TRUE(sb != sc); TEST_NN_MARRY_EX(sb, sc, addr, p1, p2); - TEST_CHECK(nn_close(sb) == 0); - TEST_CHECK(nn_close(sc) == 0); + TEST_NN_PASS(nn_close(sb)); + TEST_NN_PASS(nn_close(sc)); } void test_bad_addresses(void) { int s; - TEST_CHECK((s = nn_socket(AF_SP, NN_PAIR)) >= 0); + NUTS_TRUE((s = nn_socket(AF_SP, NN_PAIR)) >= 0); TEST_NN_FAIL(nn_connect(s, "tcp://*:"), EINVAL); TEST_NN_FAIL(nn_connect(s, "tcp://*:1000000"), EINVAL); @@ -100,12 +99,12 @@ test_no_delay(void) int s; int opt; size_t sz; - TEST_CHECK((s = nn_socket(AF_SP, NN_PAIR)) >= 0); + NUTS_TRUE((s = nn_socket(AF_SP, NN_PAIR)) >= 0); sz = sizeof(opt); TEST_NN_PASS(nn_getsockopt(s, NN_TCP, NN_TCP_NODELAY, &opt, &sz)); - TEST_CHECK(sz == sizeof(opt)); - TEST_CHECK(opt == 0); + NUTS_TRUE(sz == sizeof(opt)); + NUTS_TRUE(opt == 0); opt = 2; TEST_NN_FAIL( nn_setsockopt(s, NN_TCP, NN_TCP_NODELAY, &opt, sz), EINVAL); @@ -115,25 +114,24 @@ test_no_delay(void) opt = 3; TEST_NN_PASS(nn_getsockopt(s, NN_TCP, NN_TCP_NODELAY, &opt, &sz)); - TEST_CHECK(sz == sizeof(opt)); - TEST_CHECK(opt == 1); + NUTS_TRUE(sz == sizeof(opt)); + NUTS_TRUE(opt == 1); TEST_NN_PASS(nn_close(s)); } void test_ping_pong(void) { - int sb, sc, p1, p2; - char addr[64]; - - testutil_scratch_addr("tcp", sizeof(addr), addr); + int sb, sc, p1, p2; + char *addr; + NUTS_ADDR(addr, "tcp"); TEST_NN_PASS((sb = nn_socket(AF_SP, NN_PAIR))); TEST_NN_PASS((sc = nn_socket(AF_SP, NN_PAIR))); - TEST_CHECK(sb != sc); + NUTS_TRUE(sb != sc); TEST_NN_MARRY_EX(sc, sb, addr, p1, p2); - TEST_CHECK(p1 >= 0); - TEST_CHECK(p2 >= 0); + NUTS_TRUE(p1 >= 0); + NUTS_TRUE(p2 >= 0); /* Ping-pong test. */ for (int i = 0; i != 100; ++i) { @@ -142,75 +140,74 @@ test_ping_pong(void) int n; TEST_NN_PASS(nn_send(sc, "ABC", 3, 0)); TEST_NN_PASS(n = nn_recv(sb, buf, 4, 0)); - TEST_CHECK(n == 3); - TEST_CHECK(memcmp(buf, "ABC", 3) == 0); + NUTS_TRUE(n == 3); + NUTS_TRUE(memcmp(buf, "ABC", 3) == 0); TEST_NN_PASS(nn_send(sb, "DEF", 3, 0)); TEST_NN_PASS(n = nn_recv(sc, buf, 4, 0)); - TEST_CHECK(n == 3); - TEST_CHECK(memcmp(buf, "DEF", 3) == 0); + NUTS_TRUE(n == 3); + NUTS_TRUE(memcmp(buf, "DEF", 3) == 0); } - TEST_CHECK(nn_close(sb) == 0); - TEST_CHECK(nn_close(sc) == 0); + TEST_NN_PASS(nn_close(sb)); + TEST_NN_PASS(nn_close(sc)); } void test_pair_reject(void) { - int sb, sc, sd, p1, p2; - char addr[32]; + int sb, sc, sd, p1, p2; + char *addr; - testutil_scratch_addr("tcp", sizeof(addr), addr); + NUTS_ADDR(addr, "tcp"); - 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); + NUTS_TRUE((sb = nn_socket(AF_SP, NN_PAIR)) >= 0); + NUTS_TRUE((sc = nn_socket(AF_SP, NN_PAIR)) >= 0); + NUTS_TRUE((sd = nn_socket(AF_SP, NN_PAIR)) >= 0); + NUTS_TRUE(sb != sc); TEST_NN_MARRY_EX(sc, sb, addr, p1, p2); - TEST_CHECK(nn_connect(sd, addr) >= 0); - testutil_sleep(200); + NUTS_TRUE(nn_connect(sd, addr) >= 0); + NUTS_SLEEP(200); - TEST_CHECK(nn_close(sb) == 0); - TEST_CHECK(nn_close(sc) == 0); - TEST_CHECK(nn_close(sd) == 0); + TEST_NN_PASS(nn_close(sb)); + TEST_NN_PASS(nn_close(sc)); + TEST_NN_PASS(nn_close(sd)); } void test_addr_in_use(void) { - int sb, sc; - char addr[64]; - - testutil_scratch_addr("tcp", sizeof(addr), addr); + int sb, sc; + char *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); + NUTS_ADDR(addr, "tcp"); + NUTS_TRUE((sb = nn_socket(AF_SP, NN_PAIR)) >= 0); + NUTS_TRUE((sc = nn_socket(AF_SP, NN_PAIR)) >= 0); + NUTS_TRUE(sb != sc); TEST_NN_PASS(nn_bind(sb, addr)); TEST_NN_FAIL(nn_bind(sc, addr), EADDRINUSE); - TEST_CHECK(nn_close(sb) == 0); - TEST_CHECK(nn_close(sc) == 0); + TEST_NN_PASS(nn_close(sb)); + TEST_NN_PASS(nn_close(sc)); } void test_max_recv_size(void) { - int sb, sc, p1, p2; - int opt; - int n; - size_t sz; - char addr[64]; - char buf[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); + int sb, sc, p1, p2; + int opt; + int n; + size_t sz; + char buf[64]; + char *addr; + + NUTS_ADDR(addr, "tcp"); + + NUTS_TRUE((sb = nn_socket(AF_SP, NN_PAIR)) >= 0); + NUTS_TRUE((sc = nn_socket(AF_SP, NN_PAIR)) >= 0); + NUTS_TRUE(sb != sc); opt = 100; sz = sizeof(opt); TEST_NN_PASS(nn_setsockopt(sb, NN_SOL_SOCKET, NN_RCVTIMEO, &opt, sz)); @@ -231,8 +228,8 @@ test_max_recv_size(void) opt = -5; TEST_NN_PASS( nn_getsockopt(sb, NN_SOL_SOCKET, NN_RCVMAXSIZE, &opt, &sz)); - TEST_CHECK(opt == 4); - TEST_CHECK(sz == sizeof(opt)); + NUTS_TRUE(opt == 4); + NUTS_TRUE(sz == sizeof(opt)); TEST_NN_MARRY_EX(sc, sb, addr, p1, p2); @@ -240,8 +237,8 @@ test_max_recv_size(void) TEST_NN_PASS(nn_send(sc, "012345", 6, 0)); TEST_NN_PASS(n = nn_recv(sb, buf, sizeof(buf), 0)); - TEST_CHECK(n == 4); - TEST_CHECK(strcmp(buf, "ABC") == 0); + NUTS_TRUE(n == 4); + NUTS_TRUE(strcmp(buf, "ABC") == 0); TEST_NN_FAIL(nn_recv(sb, buf, sizeof(buf), 0), ETIMEDOUT); diff --git a/src/compat/nanomsg/compat_testutil.h b/src/compat/nanomsg/compat_testutil.h index 113d6672..e0612adb 100644 --- a/src/compat/nanomsg/compat_testutil.h +++ b/src/compat/nanomsg/compat_testutil.h @@ -45,30 +45,26 @@ extern "C" { // 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_)); \ +#define TEST_NN_MARRY(s1, s2) \ + do { \ + nng_socket s1_, s2_; \ + s1_.id = s1; \ + s2_.id = s2; \ + \ + NUTS_MARRY(s1_, s2_); \ } 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); \ +#define TEST_NN_MARRY_EX(s1, s2, url, p1, p2) \ + do { \ + nng_socket s1_, s2_; \ + nng_pipe p1_, p2_; \ + s1_.id = s1; \ + s2_.id = s2; \ + NUTS_MARRY_EX(s1_, s2_, url, &p1_, &p2_); \ + p1 = p1_.id; \ + p2 = p2_.id; \ + NUTS_TRUE(p1 >= 0); \ + NUTS_TRUE(p2 >= 0); \ } while (0) #ifdef __cplusplus diff --git a/src/core/aio_test.c b/src/core/aio_test.c index 787b6149..3dab4b04 100644 --- a/src/core/aio_test.c +++ b/src/core/aio_test.c @@ -10,12 +10,7 @@ #include <string.h> -#include <nng/nng.h> -#include <nng/protocol/pair1/pair.h> -#include <nng/supplemental/util/platform.h> - -#include "acutest.h" -#include "testutil.h" +#include <nuts.h> static void cb_done(void *p) @@ -43,16 +38,16 @@ test_sleep(void) nng_time end = 0; nng_aio *aio; - TEST_NNG_PASS(nng_aio_alloc(&aio, sleep_done, &end)); + NUTS_PASS(nng_aio_alloc(&aio, sleep_done, &end)); start = nng_clock(); nng_sleep_aio(200, aio); nng_aio_wait(aio); - TEST_NNG_PASS(nng_aio_result(aio)); - TEST_CHECK(end != 0); - TEST_CHECK((end - start) >= 200); - TEST_CHECK((end - start) <= 1000); - TEST_CHECK((nng_clock() - start) >= 200); - TEST_CHECK((nng_clock() - start) <= 1000); + NUTS_PASS(nng_aio_result(aio)); + NUTS_TRUE(end != 0); + NUTS_TRUE((end - start) >= 200); + NUTS_TRUE((end - start) <= 1000); + NUTS_TRUE((nng_clock() - start) >= 200); + NUTS_TRUE((nng_clock() - start) <= 1000); nng_aio_free(aio); } @@ -63,17 +58,17 @@ test_sleep_timeout(void) nng_time end = 0; nng_aio *aio; - TEST_CHECK(nng_aio_alloc(&aio, sleep_done, &end) == 0); + NUTS_TRUE(nng_aio_alloc(&aio, sleep_done, &end) == 0); nng_aio_set_timeout(aio, 100); start = nng_clock(); nng_sleep_aio(2000, aio); nng_aio_wait(aio); - TEST_NNG_FAIL(nng_aio_result(aio), NNG_ETIMEDOUT); - TEST_CHECK(end != 0); - TEST_CHECK((end - start) >= 100); - TEST_CHECK((end - start) <= 1000); - TEST_CHECK((nng_clock() - start) >= 100); - TEST_CHECK((nng_clock() - start) <= 1000); + NUTS_FAIL(nng_aio_result(aio), NNG_ETIMEDOUT); + NUTS_TRUE(end != 0); + NUTS_TRUE((end - start) >= 100); + NUTS_TRUE((end - start) <= 1000); + NUTS_TRUE((nng_clock() - start) >= 100); + NUTS_TRUE((nng_clock() - start) <= 1000); nng_aio_free(aio); } @@ -83,8 +78,8 @@ test_insane_nio(void) nng_aio *aio; nng_iov iov; - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); - TEST_NNG_FAIL(nng_aio_set_iov(aio, 1024, &iov), NNG_EINVAL); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_FAIL(nng_aio_set_iov(aio, 1024, &iov), NNG_EINVAL); nng_aio_free(aio); } @@ -94,12 +89,12 @@ test_provider_cancel(void) nng_aio *aio; int rv = 0; // We fake an empty provider that does not do anything. - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); - TEST_CHECK(nng_aio_begin(aio) == true); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_TRUE(nng_aio_begin(aio) == true); nng_aio_defer(aio, cancel, &rv); nng_aio_cancel(aio); nng_aio_wait(aio); - TEST_CHECK(rv == NNG_ECANCELED); + NUTS_TRUE(rv == NNG_ECANCELED); nng_aio_free(aio); } @@ -110,18 +105,18 @@ test_consumer_cancel(void) nng_socket s1; int done = 0; - TEST_CHECK(nng_pair1_open(&s1) == 0); - TEST_CHECK(nng_aio_alloc(&a, cb_done, &done) == 0); + NUTS_TRUE(nng_pair1_open(&s1) == 0); + NUTS_TRUE(nng_aio_alloc(&a, cb_done, &done) == 0); nng_aio_set_timeout(a, NNG_DURATION_INFINITE); nng_recv_aio(s1, a); nng_aio_cancel(a); nng_aio_wait(a); - TEST_CHECK(done == 1); - TEST_CHECK(nng_aio_result(a) == NNG_ECANCELED); + NUTS_TRUE(done == 1); + NUTS_TRUE(nng_aio_result(a) == NNG_ECANCELED); nng_aio_free(a); - TEST_CHECK(nng_close(s1) == 0); + NUTS_TRUE(nng_close(s1) == 0); } void @@ -136,20 +131,20 @@ test_traffic(void) nng_msg * m; char * addr = "inproc://traffic"; - TEST_NNG_PASS(nng_pair1_open(&s1)); - TEST_NNG_PASS(nng_pair1_open(&s2)); + NUTS_PASS(nng_pair1_open(&s1)); + NUTS_PASS(nng_pair1_open(&s2)); - TEST_NNG_PASS(nng_listen(s1, addr, NULL, 0)); - TEST_NNG_PASS(nng_dial(s2, addr, NULL, 0)); + NUTS_PASS(nng_listen(s1, addr, NULL, 0)); + NUTS_PASS(nng_dial(s2, addr, NULL, 0)); - TEST_NNG_PASS(nng_aio_alloc(&rx_aio, cb_done, &rx_done)); - TEST_NNG_PASS(nng_aio_alloc(&tx_aio, cb_done, &tx_done)); + NUTS_PASS(nng_aio_alloc(&rx_aio, cb_done, &rx_done)); + NUTS_PASS(nng_aio_alloc(&tx_aio, cb_done, &tx_done)); nng_aio_set_timeout(rx_aio, 1000); nng_aio_set_timeout(tx_aio, 1000); - TEST_NNG_PASS(nng_msg_alloc(&m, 0)); - TEST_NNG_PASS(nng_msg_append(m, "hello", strlen("hello"))); + NUTS_PASS(nng_msg_alloc(&m, 0)); + NUTS_PASS(nng_msg_append(m, "hello", strlen("hello"))); nng_recv_aio(s2, rx_aio); @@ -159,22 +154,22 @@ test_traffic(void) nng_aio_wait(tx_aio); nng_aio_wait(rx_aio); - TEST_NNG_PASS(nng_aio_result(rx_aio)); - TEST_NNG_PASS(nng_aio_result(tx_aio)); + NUTS_PASS(nng_aio_result(rx_aio)); + NUTS_PASS(nng_aio_result(tx_aio)); - TEST_CHECK((m = nng_aio_get_msg(rx_aio)) != NULL); - TEST_CHECK(nng_msg_len(m) == strlen("hello")); - TEST_CHECK(memcmp(nng_msg_body(m), "hello", strlen("hello")) == 0); + NUTS_TRUE((m = nng_aio_get_msg(rx_aio)) != NULL); + NUTS_TRUE(nng_msg_len(m) == strlen("hello")); + NUTS_TRUE(memcmp(nng_msg_body(m), "hello", strlen("hello")) == 0); nng_msg_free(m); - TEST_CHECK(rx_done == 1); - TEST_CHECK(tx_done == 1); + NUTS_TRUE(rx_done == 1); + NUTS_TRUE(tx_done == 1); nng_aio_free(rx_aio); nng_aio_free(tx_aio); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(s2)); + NUTS_PASS(nng_close(s1)); + NUTS_PASS(nng_close(s2)); } void @@ -184,15 +179,15 @@ test_explicit_timeout(void) nng_aio * a; int done = 0; - TEST_NNG_PASS(nng_pair1_open(&s)); - TEST_NNG_PASS(nng_aio_alloc(&a, cb_done, &done)); + NUTS_PASS(nng_pair1_open(&s)); + NUTS_PASS(nng_aio_alloc(&a, cb_done, &done)); nng_aio_set_timeout(a, 40); nng_recv_aio(s, a); nng_aio_wait(a); - TEST_CHECK(done == 1); - TEST_NNG_FAIL(nng_aio_result(a), NNG_ETIMEDOUT); + NUTS_TRUE(done == 1); + NUTS_FAIL(nng_aio_result(a), NNG_ETIMEDOUT); nng_aio_free(a); - TEST_NNG_PASS(nng_close(s)); + NUTS_PASS(nng_close(s)); } void @@ -202,15 +197,15 @@ test_inherited_timeout(void) nng_aio * a; int done = 0; - TEST_NNG_PASS(nng_pair1_open(&s)); - TEST_NNG_PASS(nng_aio_alloc(&a, cb_done, &done)); - TEST_NNG_PASS(nng_socket_set_ms(s, NNG_OPT_RECVTIMEO, 40)); + NUTS_PASS(nng_pair1_open(&s)); + NUTS_PASS(nng_aio_alloc(&a, cb_done, &done)); + NUTS_PASS(nng_socket_set_ms(s, NNG_OPT_RECVTIMEO, 40)); nng_recv_aio(s, a); nng_aio_wait(a); - TEST_CHECK(done == 1); - TEST_NNG_FAIL(nng_aio_result(a), NNG_ETIMEDOUT); + NUTS_TRUE(done == 1); + NUTS_FAIL(nng_aio_result(a), NNG_ETIMEDOUT); nng_aio_free(a); - TEST_NNG_PASS(nng_close(s)); + NUTS_PASS(nng_close(s)); } void @@ -220,18 +215,18 @@ test_zero_timeout(void) nng_aio * a; int done = 0; - TEST_NNG_PASS(nng_pair1_open(&s)); - TEST_NNG_PASS(nng_aio_alloc(&a, cb_done, &done)); + NUTS_PASS(nng_pair1_open(&s)); + NUTS_PASS(nng_aio_alloc(&a, cb_done, &done)); nng_aio_set_timeout(a, NNG_DURATION_ZERO); nng_recv_aio(s, a); nng_aio_wait(a); - TEST_CHECK(done == 1); - TEST_NNG_FAIL(nng_aio_result(a), NNG_ETIMEDOUT); + NUTS_TRUE(done == 1); + NUTS_FAIL(nng_aio_result(a), NNG_ETIMEDOUT); nng_aio_free(a); - TEST_NNG_PASS(nng_close(s)); + NUTS_PASS(nng_close(s)); } -TEST_LIST = { +NUTS_TESTS = { { "sleep", test_sleep }, { "sleep timeout", test_sleep_timeout }, { "insane nio", test_insane_nio }, diff --git a/src/core/buf_size_test.c b/src/core/buf_size_test.c index 172cb1f0..b8757991 100644 --- a/src/core/buf_size_test.c +++ b/src/core/buf_size_test.c @@ -8,16 +8,11 @@ // found online at https://opensource.org/licenses/MIT. // -#include <nng/nng.h> -#include <nng/protocol/pair1/pair.h> -#include <nng/supplemental/util/platform.h> +#include <nuts.h> #include <nng/compat/nanomsg/nn.h> -#include "acutest.h" -#include "testutil.h" - -void + void test_buffer_options(void) { nng_socket s1; @@ -31,38 +26,37 @@ test_buffer_options(void) NULL, }; - TEST_CHECK(nng_pair1_open(&s1) == 0); + NUTS_PASS(nng_pair1_open(&s1)); for (int i = 0; (opt = cases[i]) != NULL; i++) { - TEST_CASE(opt); + NUTS_CASE(opt); // Can't receive a size into zero bytes. sz = 0; - TEST_NNG_FAIL(nng_socket_get(s1, opt, &val, &sz), NNG_EINVAL); + NUTS_FAIL(nng_socket_get(s1, opt, &val, &sz), NNG_EINVAL); // Can set a valid size - TEST_NNG_PASS(nng_socket_set_int(s1, opt, 1234)); - TEST_NNG_PASS(nng_socket_get_int(s1, opt, &val)); - TEST_CHECK(val == 1234); + NUTS_PASS(nng_socket_set_int(s1, opt, 1234)); + NUTS_PASS(nng_socket_get_int(s1, opt, &val)); + NUTS_TRUE(val == 1234); val = 0; sz = sizeof(val); - TEST_NNG_PASS(nng_socket_get(s1, opt, &val, &sz)); - TEST_CHECK(val == 1234); - TEST_CHECK(sz == sizeof(val)); + NUTS_PASS(nng_socket_get(s1, opt, &val, &sz)); + NUTS_TRUE(val == 1234); + NUTS_TRUE(sz == sizeof(val)); // Can't set a negative size - TEST_NNG_FAIL(nng_socket_set_int(s1, opt, -5), NNG_EINVAL); + NUTS_FAIL(nng_socket_set_int(s1, opt, -5), NNG_EINVAL); // Can't pass a buf too small for size sz = sizeof(val) - 1; val = 1; - TEST_NNG_FAIL(nng_socket_set(s1, opt, &val, sz), NNG_EINVAL); + NUTS_FAIL(nng_socket_set(s1, opt, &val, sz), NNG_EINVAL); // Buffer sizes are limited to sane levels - TEST_NNG_FAIL( - nng_socket_set_int(s1, opt, 0x100000), NNG_EINVAL); + NUTS_FAIL(nng_socket_set_int(s1, opt, 0x100000), NNG_EINVAL); } - TEST_CHECK(nng_close(s1) == 0); + NUTS_PASS(nng_close(s1)); } void @@ -81,38 +75,38 @@ test_buffer_legacy(void) NN_SNDBUF, }; - TEST_CHECK(nng_pair1_open(&s1) == 0); + NUTS_PASS(nng_pair1_open(&s1)); for (int i = 0; (opt = cases[i]) != NULL; i++) { int cnt; int os = (int) s1.id; size_t sz; int nno = legacy[i]; - TEST_CASE(opt); + NUTS_CASE(opt); sz = sizeof(cnt); - TEST_NNG_PASS(nng_socket_set_int(s1, opt, 10)); - TEST_CHECK( + NUTS_PASS(nng_socket_set_int(s1, opt, 10)); + NUTS_TRUE( nn_getsockopt(os, NN_SOL_SOCKET, nno, &cnt, &sz) == 0); - TEST_CHECK(cnt == 10240); // 1k multiple + NUTS_TRUE(cnt == 10240); // 1k multiple cnt = 1; - TEST_CHECK( + NUTS_TRUE( nn_setsockopt(os, NN_SOL_SOCKET, nno, &cnt, sz) == 0); - TEST_CHECK( + NUTS_TRUE( nn_getsockopt(os, NN_SOL_SOCKET, nno, &cnt, &sz) == 0); - TEST_CHECK(cnt == 1024); // round up! - TEST_NNG_PASS(nng_socket_get_int(s1, opt, &cnt)); - TEST_CHECK(cnt == 1); + NUTS_TRUE(cnt == 1024); // round up! + NUTS_PASS(nng_socket_get_int(s1, opt, &cnt)); + NUTS_TRUE(cnt == 1); - TEST_CHECK( + NUTS_TRUE( nn_setsockopt(os, NN_SOL_SOCKET, nno, &cnt, 100) == -1); - TEST_CHECK(nn_errno() == EINVAL); + NUTS_TRUE(nn_errno() == EINVAL); } - TEST_NNG_PASS(nng_close(s1)); + NUTS_PASS(nng_close(s1)); } -TEST_LIST = { +NUTS_TESTS = { { "buffer options", test_buffer_options }, { "buffer legacy", test_buffer_legacy }, { NULL, NULL }, diff --git a/src/core/errors_test.c b/src/core/errors_test.c index 4e50467c..52d820fe 100644 --- a/src/core/errors_test.c +++ b/src/core/errors_test.c @@ -10,35 +10,31 @@ #include <errno.h> #include <string.h> -#include <nng/nng.h> - -#include <acutest.h> -#include <testutil.h> +#include <nuts.h> static void test_known_errors(void) { - - TEST_STREQUAL(nng_strerror(NNG_ECLOSED), "Object closed"); - TEST_STREQUAL(nng_strerror(NNG_ETIMEDOUT), "Timed out"); + NUTS_MATCH(nng_strerror(NNG_ECLOSED), "Object closed"); + NUTS_MATCH(nng_strerror(NNG_ETIMEDOUT), "Timed out"); } static void test_unknown_errors(void) { for (unsigned i = 1; i < 0x1000000; i = i * 2 + 100) { - TEST_CHECK(nng_strerror(i) != NULL); + NUTS_TRUE(nng_strerror(i) != NULL); } } static void test_system_errors(void) { - TEST_STREQUAL(nng_strerror(NNG_ESYSERR + ENOENT), strerror(ENOENT)); - TEST_STREQUAL(nng_strerror(NNG_ESYSERR + EINVAL), strerror(EINVAL)); + NUTS_MATCH(nng_strerror(NNG_ESYSERR + ENOENT), strerror(ENOENT)); + NUTS_MATCH(nng_strerror(NNG_ESYSERR + EINVAL), strerror(EINVAL)); } -TEST_LIST = { +NUTS_TESTS = { { "known errors", test_known_errors }, { "unknown errors", test_unknown_errors }, { "system errors", test_system_errors }, diff --git a/src/core/id_test.c b/src/core/id_test.c index 8312b5cc..51872e69 100644 --- a/src/core/id_test.c +++ b/src/core/id_test.c @@ -7,8 +7,7 @@ // found online at https://opensource.org/licenses/MIT. // -#include "acutest.h" -#include "testutil.h" +#include <nuts.h> #include "idhash.h" @@ -22,16 +21,16 @@ test_basic(void) nni_id_map_init(&m, 0, 0, false); // insert it - TEST_NNG_PASS(nni_id_set(&m, 5, five)); + NUTS_PASS(nni_id_set(&m, 5, five)); // retrieve it - TEST_CHECK(nni_id_get(&m, 5) == five); + NUTS_TRUE(nni_id_get(&m, 5) == five); // change it - TEST_NNG_PASS(nni_id_set(&m, 5, four)); - TEST_CHECK(nni_id_get(&m, 5) == four); + NUTS_PASS(nni_id_set(&m, 5, four)); + NUTS_TRUE(nni_id_get(&m, 5) == four); // delete - TEST_NNG_PASS(nni_id_remove(&m, 5)); + NUTS_PASS(nni_id_remove(&m, 5)); nni_id_map_fini(&m); } @@ -44,17 +43,17 @@ test_random(void) for (i = 0; i < 2; i++) { nni_id_map m; nni_id_map_init(&m, 0, 0, true); - TEST_NNG_PASS(nni_id_alloc(&m, &id, &id)); + NUTS_PASS(nni_id_alloc(&m, &id, &id)); nni_id_map_fini(&m); - TEST_CHECK(id != 0); + NUTS_TRUE(id != 0); if (id != 1) { break; } // one chance in 4 billion, but try again } - TEST_CHECK(id != 1); - TEST_CHECK(i < 2); + NUTS_TRUE(id != 1); + NUTS_TRUE(i < 2); } void @@ -67,14 +66,14 @@ test_collision(void) nni_id_map_init(&m, 0, 0, false); // Carefully crafted -- 13 % 8 == 5. - TEST_NNG_PASS(nni_id_set(&m, 5, five)); - TEST_NNG_PASS(nni_id_set(&m, 13, four)); - TEST_CHECK(nni_id_get(&m, 5) == five); - TEST_CHECK(nni_id_get(&m, 13) == four); + NUTS_PASS(nni_id_set(&m, 5, five)); + NUTS_PASS(nni_id_set(&m, 13, four)); + NUTS_TRUE(nni_id_get(&m, 5) == five); + NUTS_TRUE(nni_id_get(&m, 13) == four); // Delete the intermediate - TEST_NNG_PASS(nni_id_remove(&m, 5)); - TEST_CHECK(nni_id_get(&m, 13) == four); + NUTS_PASS(nni_id_remove(&m, 5)); + NUTS_TRUE(nni_id_get(&m, 13) == four); nni_id_map_fini(&m); } @@ -85,9 +84,9 @@ test_empty(void) nni_id_map m; nni_id_map_init(&m, 0, 0, false); - TEST_CHECK(nni_id_get(&m, 42) == NULL); - TEST_NNG_FAIL(nni_id_remove(&m, 42), NNG_ENOENT); - TEST_NNG_FAIL(nni_id_remove(&m, 1), NNG_ENOENT); + NUTS_TRUE(nni_id_get(&m, 42) == NULL); + NUTS_FAIL(nni_id_remove(&m, 42), NNG_ENOENT); + NUTS_FAIL(nni_id_remove(&m, 1), NNG_ENOENT); nni_id_map_fini(&m); } @@ -98,10 +97,10 @@ test_not_found(void) uint32_t id; nni_id_map_init(&m, 0, 0, false); - TEST_NNG_PASS(nni_id_alloc(&m, &id, &id)); - TEST_NNG_FAIL(nni_id_remove(&m, 42), NNG_ENOENT); - TEST_NNG_FAIL(nni_id_remove(&m, 2), NNG_ENOENT); - TEST_NNG_PASS(nni_id_remove(&m, id)); + NUTS_PASS(nni_id_alloc(&m, &id, &id)); + NUTS_FAIL(nni_id_remove(&m, 42), NNG_ENOENT); + NUTS_FAIL(nni_id_remove(&m, 2), NNG_ENOENT); + NUTS_PASS(nni_id_remove(&m, id)); nni_id_map_fini(&m); } @@ -121,13 +120,13 @@ test_resize(void) for (i = 0; i < 1024; i++) { if ((rv = nni_id_set(&m, i, &expect[i])) != 0) { - TEST_NNG_PASS(rv); + NUTS_PASS(rv); } } for (i = 0; i < 1024; i++) { if ((rv = nni_id_remove(&m, i)) != 0) { - TEST_NNG_PASS(rv); + NUTS_PASS(rv); } } nni_id_map_fini(&m); @@ -143,24 +142,24 @@ test_dynamic(void) nni_id_map_init(&m, 10, 13, false); // We can fill the table. - TEST_NNG_PASS(nni_id_alloc(&m, &id, &expect[0])); - TEST_CHECK(id == 10); - TEST_NNG_PASS(nni_id_alloc(&m, &id, &expect[1])); - TEST_CHECK(id == 11); - TEST_NNG_PASS(nni_id_alloc(&m, &id, &expect[2])); - TEST_CHECK(id == 12); - TEST_NNG_PASS(nni_id_alloc(&m, &id, &expect[3])); - TEST_CHECK(id == 13); + NUTS_PASS(nni_id_alloc(&m, &id, &expect[0])); + NUTS_TRUE(id == 10); + NUTS_PASS(nni_id_alloc(&m, &id, &expect[1])); + NUTS_TRUE(id == 11); + NUTS_PASS(nni_id_alloc(&m, &id, &expect[2])); + NUTS_TRUE(id == 12); + NUTS_PASS(nni_id_alloc(&m, &id, &expect[3])); + NUTS_TRUE(id == 13); // Adding another fails. - TEST_NNG_FAIL(nni_id_alloc(&m, &id, &expect[4]), NNG_ENOMEM); + NUTS_FAIL(nni_id_alloc(&m, &id, &expect[4]), NNG_ENOMEM); // Delete one. - TEST_NNG_PASS(nni_id_remove(&m, 11)); + NUTS_PASS(nni_id_remove(&m, 11)); // And now we can allocate one. - TEST_NNG_PASS(nni_id_alloc(&m, &id, &expect[4])); - TEST_CHECK(id == 11); + NUTS_PASS(nni_id_alloc(&m, &id, &expect[4])); + NUTS_TRUE(id == 11); nni_id_map_fini(&m); } @@ -174,10 +173,10 @@ test_set_out_of_range(void) nni_id_map_init(&m, 10, 13, false); // We can insert outside the range forcibly. - TEST_NNG_PASS(nni_id_set(&m, 1, &x)); - TEST_NNG_PASS(nni_id_set(&m, 100, &x)); - TEST_NNG_PASS(nni_id_alloc(&m, &id, &x)); - TEST_CHECK(id == 10); + NUTS_PASS(nni_id_set(&m, 1, &x)); + NUTS_PASS(nni_id_set(&m, 100, &x)); + NUTS_PASS(nni_id_alloc(&m, &id, &x)); + NUTS_TRUE(id == 10); nni_id_map_fini(&m); } @@ -207,7 +206,7 @@ test_stress(void) x = &values[rand() % NUM_VALUES]; values[v] = x; if ((rv = nni_id_set(&m, v, x)) != 0) { - TEST_NNG_PASS(rv); + NUTS_PASS(rv); goto out; } break; @@ -216,13 +215,13 @@ test_stress(void) rv = nni_id_remove(&m, v); if (values[v] == NULL) { if (rv != NNG_ENOENT) { - TEST_NNG_FAIL(rv, NNG_ENOENT); + NUTS_FAIL(rv, NNG_ENOENT); goto out; } } else { values[v] = NULL; if (rv != 0) { - TEST_NNG_PASS(rv); + NUTS_PASS(rv); goto out; } } @@ -230,20 +229,20 @@ test_stress(void) case 2: x = nni_id_get(&m, v); if (x != values[v]) { - TEST_CHECK(x == values[v]); + NUTS_TRUE(x == values[v]); goto out; } break; } } out: - TEST_CHECK(i == STRESS_LOAD); + NUTS_TRUE(i == STRESS_LOAD); // Post stress check. for (i = 0; i < NUM_VALUES; i++) { x = nni_id_get(&m, i); if (x != values[i]) { - TEST_CHECK(x == values[i]); + NUTS_TRUE(x == values[i]); break; } @@ -251,17 +250,17 @@ out: // to fail. Otherwise there will be too many errors reported. rv = nni_id_remove(&m, i); if ((x == NULL) && (rv != NNG_ENOENT)) { - TEST_NNG_FAIL(rv, NNG_ENOENT); + NUTS_FAIL(rv, NNG_ENOENT); } else if ((x != NULL) && (rv != 0)) { - TEST_NNG_PASS(rv); + NUTS_PASS(rv); } } - TEST_CHECK(i == NUM_VALUES); + NUTS_TRUE(i == NUM_VALUES); nni_id_map_fini(&m); } -TEST_LIST = { +NUTS_TESTS = { { "basic", test_basic }, { "random", test_random }, { "collision", test_collision }, diff --git a/src/core/reconnect_test.c b/src/core/reconnect_test.c index 669261c9..308a3f78 100644 --- a/src/core/reconnect_test.c +++ b/src/core/reconnect_test.c @@ -10,101 +10,95 @@ #include <string.h> -#include <nng/nng.h> -#include <nng/protocol/pipeline0/pull.h> -#include <nng/protocol/pipeline0/push.h> -#include <nng/supplemental/util/platform.h> - -#include "acutest.h" -#include "testutil.h" +#include <nuts.h> void test_dial_before_listen(void) { - nng_socket push; - nng_socket pull; - char addr[64]; + nng_socket s1; + nng_socket s2; + char *addr; - testutil_scratch_addr("inproc", sizeof(addr), addr); + NUTS_OPEN(s1); + NUTS_OPEN(s2); - TEST_NNG_PASS(nng_push0_open(&push)); - TEST_NNG_PASS(nng_pull0_open(&pull)); + NUTS_ADDR(addr, "inproc"); - TEST_NNG_PASS(nng_socket_set_ms(pull, NNG_OPT_RECONNMINT, 10)); - TEST_NNG_PASS(nng_socket_set_ms(pull, NNG_OPT_RECONNMAXT, 10)); + NUTS_PASS(nng_socket_set_ms(s2, NNG_OPT_RECONNMINT, 10)); + NUTS_PASS(nng_socket_set_ms(s2, NNG_OPT_RECONNMAXT, 10)); - TEST_NNG_PASS(nng_dial(pull, addr, NULL, NNG_FLAG_NONBLOCK)); - testutil_sleep(100); - TEST_NNG_PASS(nng_listen(push, addr, NULL, 0)); + NUTS_PASS(nng_dial(s2, addr, NULL, NNG_FLAG_NONBLOCK)); + NUTS_SLEEP(100); + NUTS_PASS(nng_listen(s1, addr, NULL, 0)); - TEST_NNG_SEND_STR(push, "hello"); - TEST_NNG_RECV_STR(pull, "hello"); + NUTS_SEND(s1, "hello"); + NUTS_RECV(s2, "hello"); - TEST_NNG_PASS(nng_close(push)); - TEST_NNG_PASS(nng_close(pull)); + NUTS_CLOSE(s1); + NUTS_CLOSE(s2); } void test_reconnect(void) { - nng_socket push; - nng_socket pull; + nng_socket s1; + nng_socket s2; nng_listener l; - char addr[64]; + char *addr; - testutil_scratch_addr("inproc", sizeof(addr), addr); + NUTS_OPEN(s1); + NUTS_OPEN(s2); - TEST_NNG_PASS(nng_push0_open(&push)); - TEST_NNG_PASS(nng_pull0_open(&pull)); + NUTS_ADDR(addr, "inproc"); - TEST_NNG_PASS(nng_socket_set_ms(pull, NNG_OPT_RECONNMINT, 10)); - TEST_NNG_PASS(nng_socket_set_ms(pull, NNG_OPT_RECONNMAXT, 10)); + NUTS_PASS(nng_socket_set_ms(s2, NNG_OPT_RECONNMINT, 10)); + NUTS_PASS(nng_socket_set_ms(s2, NNG_OPT_RECONNMAXT, 10)); - TEST_NNG_PASS(nng_dial(pull, addr, NULL, NNG_FLAG_NONBLOCK)); - testutil_sleep(100); - TEST_NNG_PASS(nng_listen(push, addr, &l, 0)); + NUTS_PASS(nng_dial(s2, addr, NULL, NNG_FLAG_NONBLOCK)); + NUTS_SLEEP(100); + NUTS_PASS(nng_listen(s1, addr, &l, 0)); - TEST_NNG_SEND_STR(push, "hello"); - TEST_NNG_RECV_STR(pull, "hello"); + NUTS_SEND(s1, "hello"); + NUTS_RECV(s2, "hello"); // Close the listener - TEST_NNG_PASS(nng_listener_close(l)); + NUTS_PASS(nng_listener_close(l)); - TEST_NNG_PASS(nng_listen(push, addr, &l, 0)); - TEST_NNG_SEND_STR(push, "again"); - TEST_NNG_RECV_STR(pull, "again"); + NUTS_PASS(nng_listen(s1, addr, &l, 0)); + NUTS_SEND(s1, "again"); + NUTS_RECV(s2, "again"); - TEST_NNG_PASS(nng_close(push)); - TEST_NNG_PASS(nng_close(pull)); + NUTS_CLOSE(s1); + NUTS_CLOSE(s2); } void test_reconnect_pipe(void) { - nng_socket push; - nng_socket pull; + nng_socket s1; + nng_socket s2; nng_listener l; nng_msg * msg; - char addr[64]; + char * addr; - testutil_scratch_addr("inproc", sizeof(addr), addr); + NUTS_OPEN(s1); + NUTS_OPEN(s2); - TEST_NNG_PASS(nng_push0_open(&push)); - TEST_NNG_PASS(nng_pull0_open(&pull)); + NUTS_ADDR(addr, "inproc"); - TEST_NNG_PASS(nng_socket_set_ms(pull, NNG_OPT_RECONNMINT, 10)); - TEST_NNG_PASS(nng_socket_set_ms(pull, NNG_OPT_RECONNMAXT, 10)); + NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_RECONNMINT, 10)); + NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_RECONNMAXT, 10)); - TEST_NNG_PASS(nng_dial(pull, addr, NULL, NNG_FLAG_NONBLOCK)); - testutil_sleep(100); - TEST_NNG_PASS(nng_listen(push, addr, &l, 0)); + NUTS_PASS(nng_dial(s1, addr, NULL, NNG_FLAG_NONBLOCK)); + NUTS_SLEEP(100); + NUTS_PASS(nng_listen(s2, addr, &l, 0)); - TEST_NNG_SEND_STR(push, "hello"); + NUTS_SEND(s2, "hello"); - TEST_NNG_PASS(nng_recvmsg(pull, &msg, 0)); - TEST_CHECK(msg != NULL); - TEST_CHECK(nng_msg_len(msg) == 6); - TEST_CHECK(strcmp(nng_msg_body(msg), "hello") == 0); + NUTS_PASS(nng_recvmsg(s1, &msg, 0)); + NUTS_TRUE(msg != NULL); + NUTS_TRUE(nng_msg_len(msg) == 6); + NUTS_MATCH(nng_msg_body(msg), "hello"); nng_pipe_close(nng_msg_get_pipe(msg)); nng_msg_free(msg); @@ -112,53 +106,54 @@ test_reconnect_pipe(void) // receiver, the receiver might not have got the update. If we // send too soon, then the message gets routed to the sender pipe // that is about to close. - testutil_sleep(100); + NUTS_SLEEP(100); - // Reconnect should happen more ore less immediately. - TEST_NNG_SEND_STR(push, "again"); - TEST_NNG_RECV_STR(pull, "again"); + // Reconnect should happen more or less immediately. + NUTS_SEND(s2, "again"); + NUTS_RECV(s1, "again"); - TEST_NNG_PASS(nng_close(push)); - TEST_NNG_PASS(nng_close(pull)); + NUTS_CLOSE(s1); + NUTS_CLOSE(s2); } void test_reconnect_back_off_zero(void) { - nng_socket push; - nng_socket pull; - nng_time start; - char addr[64]; - testutil_scratch_addr("inproc", sizeof(addr), addr); + nng_socket s1; + nng_socket s2; + uint64_t start; + char * addr; + + NUTS_OPEN(s1); + NUTS_OPEN(s2); - TEST_NNG_PASS(nng_push0_open(&push)); - TEST_NNG_PASS(nng_pull0_open(&pull)); + NUTS_ADDR(addr, "inproc"); // redial every 10 ms. - TEST_NNG_PASS(nng_socket_set_ms(push, NNG_OPT_RECONNMAXT, 0)); - TEST_NNG_PASS(nng_socket_set_ms(push, NNG_OPT_RECONNMINT, 10)); - TEST_NNG_PASS(nng_dial(push, addr, NULL, NNG_FLAG_NONBLOCK)); + NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_RECONNMAXT, 0)); + NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_RECONNMINT, 10)); + NUTS_PASS(nng_dial(s1, addr, NULL, NNG_FLAG_NONBLOCK)); // Start up the dialer first. It should keep retrying every 10 ms. // Wait 500 milliseconds. This gives a chance for an exponential // back-off to increase to a longer time. It should by this point // be well over 100 and probably closer to 200 ms. - nng_msleep(500); + NUTS_SLEEP(500); - start = nng_clock(); - TEST_NNG_PASS(nng_listen(pull, addr, NULL, 0)); + NUTS_CLOCK(start); + NUTS_PASS(nng_listen(s2, addr, NULL, 0)); - TEST_NNG_SEND_STR(push, "hello"); - TEST_NNG_RECV_STR(pull, "hello"); + NUTS_SEND(s1, "hello"); + NUTS_RECV(s2, "hello"); - TEST_CHECK(nng_clock() - start < 100); + NUTS_BEFORE(start + 100); - TEST_NNG_PASS(nng_close(push)); - TEST_NNG_PASS(nng_close(pull)); + NUTS_CLOSE(s1); + NUTS_CLOSE(s2); } -TEST_LIST = { +NUTS_TESTS = { { "dial before listen", test_dial_before_listen }, { "reconnect", test_reconnect }, { "reconnect back-off zero", test_reconnect_back_off_zero }, diff --git a/src/core/sock_test.c b/src/core/sock_test.c index ab557632..9edfbf53 100644 --- a/src/core/sock_test.c +++ b/src/core/sock_test.c @@ -8,14 +8,7 @@ // found online at https://opensource.org/licenses/MIT. // -#include <string.h> - -#include <nng/nng.h> -#include <nng/protocol/pair1/pair.h> -#include <nng/supplemental/util/platform.h> - -#include "acutest.h" -#include "testutil.h" +#include <nuts.h> void test_recv_timeout(void) @@ -24,14 +17,14 @@ test_recv_timeout(void) uint64_t now; nng_msg * msg = NULL; - TEST_NNG_PASS(nng_pair_open(&s1)); - TEST_NNG_PASS(nng_socket_set_ms(s1, NNG_OPT_RECVTIMEO, 10)); - now = testutil_clock(); - TEST_NNG_FAIL(nng_recvmsg(s1, &msg, 0), NNG_ETIMEDOUT); - TEST_CHECK(msg == NULL); - TEST_CHECK(testutil_clock() >= (now + 9)); - TEST_CHECK(testutil_clock() < (now + 500)); - TEST_NNG_PASS(nng_close(s1)); + NUTS_OPEN(s1); + NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_RECVTIMEO, 10)); + NUTS_CLOCK(now); + NUTS_FAIL(nng_recvmsg(s1, &msg, 0), NNG_ETIMEDOUT); + NUTS_TRUE(msg == NULL); + NUTS_BEFORE(now + 500); + NUTS_AFTER(now + 9); + NUTS_CLOSE(s1); } void @@ -41,13 +34,13 @@ test_recv_nonblock(void) uint64_t now; nng_msg * msg = NULL; - TEST_NNG_PASS(nng_pair1_open(&s1)); - TEST_NNG_PASS(nng_socket_set_ms(s1, NNG_OPT_RECVTIMEO, 10)); - now = testutil_clock(); - TEST_NNG_FAIL(nng_recvmsg(s1, &msg, NNG_FLAG_NONBLOCK), NNG_EAGAIN); - TEST_CHECK(msg == NULL); - TEST_CHECK(testutil_clock() < (now + 500)); - TEST_NNG_PASS(nng_close(s1)); + NUTS_OPEN(s1); + NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_RECVTIMEO, 10)); + NUTS_CLOCK(now); + NUTS_FAIL(nng_recvmsg(s1, &msg, NNG_FLAG_NONBLOCK), NNG_EAGAIN); + NUTS_TRUE(msg == NULL); + NUTS_BEFORE(now + 500); + NUTS_CLOSE(s1); } void @@ -57,15 +50,15 @@ test_send_timeout(void) uint64_t now; nng_msg * msg; - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); - TEST_NNG_PASS(nng_pair_open(&s1)); - TEST_NNG_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, 100)); - now = testutil_clock(); - TEST_NNG_FAIL(nng_sendmsg(s1, msg, 0), NNG_ETIMEDOUT); - TEST_CHECK(testutil_clock() >= (now + 9)); - TEST_CHECK(testutil_clock() < (now + 500)); + NUTS_OPEN(s1); + NUTS_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, 100)); + NUTS_CLOCK(now); + NUTS_FAIL(nng_sendmsg(s1, msg, 0), NNG_ETIMEDOUT); + NUTS_BEFORE(now + 500); + NUTS_AFTER(now + 9); nng_msg_free(msg); - TEST_NNG_PASS(nng_close(s1)); + NUTS_CLOSE(s1); } void @@ -75,26 +68,24 @@ test_send_nonblock(void) uint64_t now; nng_msg * msg; - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); - TEST_NNG_PASS(nng_pair1_open(&s1)); - TEST_NNG_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, 500)); - now = testutil_clock(); - TEST_NNG_FAIL(nng_sendmsg(s1, msg, NNG_FLAG_NONBLOCK), NNG_EAGAIN); - TEST_CHECK(testutil_clock() < (now + 100)); - TEST_NNG_PASS(nng_close(s1)); + NUTS_OPEN(s1); + NUTS_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, 500)); + NUTS_CLOCK(now); + NUTS_FAIL(nng_sendmsg(s1, msg, NNG_FLAG_NONBLOCK), NNG_EAGAIN); + NUTS_BEFORE(now + 100); nng_msg_free(msg); + NUTS_CLOSE(s1); } void test_readonly_options(void) { nng_socket s1; - TEST_NNG_PASS(nng_pair1_open(&s1)); - TEST_NNG_FAIL( - nng_socket_set_int(s1, NNG_OPT_RECVFD, 0), NNG_EREADONLY); - TEST_NNG_FAIL( - nng_socket_set_int(s1, NNG_OPT_SENDFD, 0), NNG_EREADONLY); - TEST_NNG_PASS(nng_close(s1)); + NUTS_OPEN(s1); + NUTS_FAIL(nng_socket_set_int(s1, NNG_OPT_RECVFD, 0), NNG_EREADONLY); + NUTS_FAIL(nng_socket_set_int(s1, NNG_OPT_SENDFD, 0), NNG_EREADONLY); + NUTS_CLOSE(s1); } void @@ -102,14 +93,14 @@ test_socket_base(void) { nng_socket s1 = NNG_SOCKET_INITIALIZER; - TEST_CHECK(nng_socket_id(s1) < 0); - TEST_NNG_PASS(nng_pair1_open(&s1)); - TEST_CHECK(nng_socket_id(s1) > 0); + NUTS_TRUE(nng_socket_id(s1) < 0); + NUTS_PASS(nng_pair1_open(&s1)); + NUTS_TRUE(nng_socket_id(s1) > 0); // Cannot set bogus options - TEST_NNG_FAIL(nng_socket_set_bool(s1, "BAD_OPT", false), NNG_ENOTSUP); + NUTS_FAIL(nng_socket_set_bool(s1, "BAD_OPT", false), NNG_ENOTSUP); - TEST_NNG_PASS(nng_close(s1)); + NUTS_CLOSE(s1); } void @@ -123,34 +114,33 @@ test_socket_name(void) size_t sz; sz = sizeof(name); - TEST_NNG_PASS(nng_pair_open(&s1)); - TEST_NNG_PASS(nng_socket_get(s1, NNG_OPT_SOCKNAME, name, &sz)); - TEST_CHECK(sz > 0 && sz < 64); - TEST_CHECK(sz == strlen(name) + 1); + NUTS_OPEN(s1); + NUTS_PASS(nng_socket_get(s1, NNG_OPT_SOCKNAME, name, &sz)); + NUTS_TRUE(sz > 0 && sz < 64); + NUTS_TRUE(sz == strlen(name) + 1); id = strtol(name, &end, 10); - TEST_CHECK(id == (long) s1.id); - TEST_CHECK(end != NULL && *end == '\0'); + NUTS_TRUE(id == (long) s1.id); + NUTS_TRUE(end != NULL && *end == '\0'); - TEST_NNG_PASS(nng_socket_set(s1, NNG_OPT_SOCKNAME, "hello", 6)); + NUTS_PASS(nng_socket_set(s1, NNG_OPT_SOCKNAME, "hello", 6)); sz = sizeof(name); - TEST_NNG_PASS(nng_socket_get(s1, NNG_OPT_SOCKNAME, name, &sz)); - TEST_CHECK(sz == 6); - TEST_STREQUAL(name, "hello"); + NUTS_PASS(nng_socket_get(s1, NNG_OPT_SOCKNAME, name, &sz)); + NUTS_TRUE(sz == 6); + NUTS_MATCH(name, "hello"); memset(name, 'A', 64); name[64] = '\0'; // strings must be NULL terminated - TEST_NNG_FAIL( - nng_socket_set(s1, NNG_OPT_SOCKNAME, name, 5), NNG_EINVAL); + NUTS_FAIL(nng_socket_set(s1, NNG_OPT_SOCKNAME, name, 5), NNG_EINVAL); - TEST_NNG_PASS(nng_socket_get_string(s1, NNG_OPT_SOCKNAME, &str)); - TEST_ASSERT(str != NULL); - TEST_CHECK(strlen(str) == 5); - TEST_STREQUAL(str, "hello"); + NUTS_PASS(nng_socket_get_string(s1, NNG_OPT_SOCKNAME, &str)); + NUTS_ASSERT(str != NULL); + NUTS_TRUE(strlen(str) == 5); + NUTS_MATCH(str, "hello"); nng_strfree(str); - TEST_NNG_PASS(nng_close(s1)); + NUTS_CLOSE(s1); } void @@ -161,22 +151,20 @@ test_socket_name_oversize(void) size_t sz = sizeof(name); memset(name, 'A', sz); - TEST_NNG_PASS(nng_pair_open(&s1)); + NUTS_OPEN(s1); - TEST_NNG_FAIL( - nng_socket_set(s1, NNG_OPT_SOCKNAME, name, sz), NNG_EINVAL); + NUTS_FAIL(nng_socket_set(s1, NNG_OPT_SOCKNAME, name, sz), NNG_EINVAL); name[sz - 1] = '\0'; - TEST_NNG_FAIL( - nng_socket_set(s1, NNG_OPT_SOCKNAME, name, sz), NNG_EINVAL); + NUTS_FAIL(nng_socket_set(s1, NNG_OPT_SOCKNAME, name, sz), NNG_EINVAL); strcpy(name, "hello"); - TEST_NNG_PASS(nng_socket_set(s1, NNG_OPT_SOCKNAME, name, sz)); + NUTS_PASS(nng_socket_set(s1, NNG_OPT_SOCKNAME, name, sz)); sz = sizeof(name); memset(name, 'B', sz); - TEST_NNG_PASS(nng_getopt(s1, NNG_OPT_SOCKNAME, name, &sz)); - TEST_CHECK(sz == 6); - TEST_STREQUAL(name, "hello"); - TEST_NNG_PASS(nng_close(s1)); + NUTS_PASS(nng_getopt(s1, NNG_OPT_SOCKNAME, name, &sz)); + NUTS_TRUE(sz == 6); + NUTS_MATCH(name, "hello"); + NUTS_CLOSE(s1); } void @@ -190,33 +178,33 @@ test_send_recv(void) char * buf; char * a = "inproc://t1"; - TEST_NNG_PASS(nng_pair1_open(&s1)); - TEST_NNG_PASS(nng_pair1_open(&s2)); + NUTS_OPEN(s1); + NUTS_OPEN(s2); - TEST_NNG_PASS(nng_socket_set_int(s1, NNG_OPT_RECVBUF, 1)); - TEST_NNG_PASS(nng_socket_get_int(s1, NNG_OPT_RECVBUF, &len)); - TEST_CHECK(len == 1); + NUTS_PASS(nng_socket_set_int(s1, NNG_OPT_RECVBUF, 1)); + NUTS_PASS(nng_socket_get_int(s1, NNG_OPT_RECVBUF, &len)); + NUTS_TRUE(len == 1); - TEST_NNG_PASS(nng_socket_set_int(s1, NNG_OPT_SENDBUF, 1)); - TEST_NNG_PASS(nng_socket_set_int(s2, NNG_OPT_SENDBUF, 1)); + NUTS_PASS(nng_socket_set_int(s1, NNG_OPT_SENDBUF, 1)); + NUTS_PASS(nng_socket_set_int(s2, NNG_OPT_SENDBUF, 1)); - TEST_NNG_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, to)); - TEST_NNG_PASS(nng_socket_set_ms(s1, NNG_OPT_RECVTIMEO, to)); - TEST_NNG_PASS(nng_socket_set_ms(s2, NNG_OPT_SENDTIMEO, to)); - TEST_NNG_PASS(nng_socket_set_ms(s2, NNG_OPT_RECVTIMEO, to)); + NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, to)); + NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_RECVTIMEO, to)); + NUTS_PASS(nng_socket_set_ms(s2, NNG_OPT_SENDTIMEO, to)); + NUTS_PASS(nng_socket_set_ms(s2, NNG_OPT_RECVTIMEO, to)); - TEST_NNG_PASS(nng_listen(s1, a, NULL, 0)); - TEST_NNG_PASS(nng_dial(s2, a, NULL, 0)); + NUTS_PASS(nng_listen(s1, a, NULL, 0)); + NUTS_PASS(nng_dial(s2, a, NULL, 0)); - TEST_NNG_PASS(nng_send(s1, "abc", 4, 0)); - TEST_NNG_PASS(nng_recv(s2, &buf, &sz, NNG_FLAG_ALLOC)); - TEST_CHECK(buf != NULL); - TEST_CHECK(sz == 4); - TEST_CHECK(memcmp(buf, "abc", 4) == 0); + NUTS_PASS(nng_send(s1, "abc", 4, 0)); + NUTS_PASS(nng_recv(s2, &buf, &sz, NNG_FLAG_ALLOC)); + NUTS_TRUE(buf != NULL); + NUTS_TRUE(sz == 4); + NUTS_TRUE(memcmp(buf, "abc", 4) == 0); nng_free(buf, sz); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(s2)); + NUTS_CLOSE(s1); + NUTS_CLOSE(s2); } void @@ -230,32 +218,32 @@ test_send_recv_zero_length(void) char * buf; char * a = "inproc://send-recv-zero-length"; - TEST_NNG_PASS(nng_pair1_open(&s1)); - TEST_NNG_PASS(nng_pair1_open(&s2)); + NUTS_OPEN(s1); + NUTS_OPEN(s2); - TEST_NNG_PASS(nng_socket_set_int(s1, NNG_OPT_RECVBUF, 1)); - TEST_NNG_PASS(nng_getopt_int(s1, NNG_OPT_RECVBUF, &len)); - TEST_CHECK(len == 1); + NUTS_PASS(nng_socket_set_int(s1, NNG_OPT_RECVBUF, 1)); + NUTS_PASS(nng_getopt_int(s1, NNG_OPT_RECVBUF, &len)); + NUTS_TRUE(len == 1); - TEST_NNG_PASS(nng_socket_set_int(s1, NNG_OPT_SENDBUF, 1)); - TEST_NNG_PASS(nng_socket_set_int(s2, NNG_OPT_SENDBUF, 1)); + NUTS_PASS(nng_socket_set_int(s1, NNG_OPT_SENDBUF, 1)); + NUTS_PASS(nng_socket_set_int(s2, NNG_OPT_SENDBUF, 1)); - TEST_NNG_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, to)); - TEST_NNG_PASS(nng_socket_set_ms(s1, NNG_OPT_RECVTIMEO, to)); - TEST_NNG_PASS(nng_socket_set_ms(s2, NNG_OPT_SENDTIMEO, to)); - TEST_NNG_PASS(nng_socket_set_ms(s2, NNG_OPT_RECVTIMEO, to)); + NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, to)); + NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_RECVTIMEO, to)); + NUTS_PASS(nng_socket_set_ms(s2, NNG_OPT_SENDTIMEO, to)); + NUTS_PASS(nng_socket_set_ms(s2, NNG_OPT_RECVTIMEO, to)); - TEST_NNG_PASS(nng_listen(s1, a, NULL, 0)); - TEST_NNG_PASS(nng_dial(s2, a, NULL, 0)); + NUTS_PASS(nng_listen(s1, a, NULL, 0)); + NUTS_PASS(nng_dial(s2, a, NULL, 0)); - TEST_NNG_PASS(nng_send(s1, "", 0, 0)); - TEST_NNG_PASS(nng_recv(s2, &buf, &sz, NNG_FLAG_ALLOC)); - TEST_CHECK(buf == NULL); - TEST_CHECK(sz == 0); + NUTS_PASS(nng_send(s1, "", 0, 0)); + NUTS_PASS(nng_recv(s2, &buf, &sz, NNG_FLAG_ALLOC)); + NUTS_TRUE(buf == NULL); + NUTS_TRUE(sz == 0); nng_free(buf, sz); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(s2)); + NUTS_CLOSE(s1); + NUTS_CLOSE(s2); } void @@ -263,9 +251,9 @@ test_connection_refused(void) { nng_socket s1; - TEST_NNG_PASS(nng_pair1_open(&s1)); - TEST_NNG_FAIL(nng_dial(s1, "inproc://no", NULL, 0), NNG_ECONNREFUSED); - TEST_NNG_PASS(nng_close(s1)); + NUTS_OPEN(s1); + NUTS_FAIL(nng_dial(s1, "inproc://no", NULL, 0), NNG_ECONNREFUSED); + NUTS_CLOSE(s1); } void @@ -277,23 +265,23 @@ test_late_connection(void) nng_socket s2; char * a = "inproc://asy"; - TEST_NNG_PASS(nng_pair1_open(&s1)); - TEST_NNG_PASS(nng_pair1_open(&s2)); + NUTS_OPEN(s1); + NUTS_OPEN(s2); - TEST_NNG_PASS(nng_socket_set_ms(s1, NNG_OPT_RECONNMINT, 10)); - TEST_NNG_PASS(nng_socket_set_ms(s1, NNG_OPT_RECONNMAXT, 10)); + NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_RECONNMINT, 10)); + NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_RECONNMAXT, 10)); - TEST_NNG_PASS(nng_dial(s1, a, NULL, NNG_FLAG_NONBLOCK)); - TEST_NNG_PASS(nng_listen(s2, a, NULL, 0)); + NUTS_PASS(nng_dial(s1, a, NULL, NNG_FLAG_NONBLOCK)); + NUTS_PASS(nng_listen(s2, a, NULL, 0)); nng_msleep(100); - TEST_NNG_PASS(nng_send(s1, "abc", 4, 0)); - TEST_NNG_PASS(nng_recv(s2, &buf, &sz, NNG_FLAG_ALLOC)); - TEST_CHECK(sz == 4); - TEST_CHECK(memcmp(buf, "abc", 4) == 0); + NUTS_PASS(nng_send(s1, "abc", 4, 0)); + NUTS_PASS(nng_recv(s2, &buf, &sz, NNG_FLAG_ALLOC)); + NUTS_TRUE(sz == 4); + NUTS_TRUE(memcmp(buf, "abc", 4) == 0); nng_free(buf, sz); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(s2)); + NUTS_CLOSE(s1); + NUTS_CLOSE(s2); } void @@ -305,26 +293,26 @@ test_address_busy(void) nng_socket s1; nng_socket s2; - TEST_NNG_PASS(nng_pair1_open(&s1)); - TEST_NNG_PASS(nng_pair1_open(&s2)); + NUTS_OPEN(s1); + NUTS_OPEN(s2); - TEST_CHECK(nng_listener_id(l) < 0); - TEST_NNG_PASS(nng_listen(s1, a, &l, 0)); - TEST_CHECK(nng_listener_id(l) > 0); + NUTS_TRUE(nng_listener_id(l) < 0); + NUTS_PASS(nng_listen(s1, a, &l, 0)); + NUTS_TRUE(nng_listener_id(l) > 0); // Cannot start another one. - TEST_NNG_FAIL(nng_listen(s1, a, NULL, 0), NNG_EADDRINUSE); + NUTS_FAIL(nng_listen(s1, a, NULL, 0), NNG_EADDRINUSE); // We can't restart it -- it's already running - TEST_NNG_FAIL(nng_listener_start(l, 0), NNG_ESTATE); + NUTS_FAIL(nng_listener_start(l, 0), NNG_ESTATE); // We can connect to it. - TEST_CHECK(nng_dialer_id(d) < 0); - TEST_NNG_PASS(nng_dial(s2, a, &d, 0)); - TEST_CHECK(nng_dialer_id(d) > 0); + NUTS_TRUE(nng_dialer_id(d) < 0); + NUTS_PASS(nng_dial(s2, a, &d, 0)); + NUTS_TRUE(nng_dialer_id(d) > 0); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(s2)); + NUTS_CLOSE(s1); + NUTS_CLOSE(s2); } void @@ -338,29 +326,29 @@ test_endpoint_types(void) char * a = "inproc://mumble..."; bool b; - TEST_NNG_PASS(nng_pair1_open(&s1)); + NUTS_OPEN(s1); - TEST_CHECK(nng_dialer_id(d) < 0); - TEST_NNG_PASS(nng_dialer_create(&d, s1, a)); - TEST_CHECK(nng_dialer_id(d) > 0); + NUTS_TRUE(nng_dialer_id(d) < 0); + NUTS_PASS(nng_dialer_create(&d, s1, a)); + NUTS_TRUE(nng_dialer_id(d) > 0); // Forge a listener l2.id = nng_dialer_id(d); - TEST_NNG_FAIL(nng_listener_get_bool(l2, NNG_OPT_RAW, &b), NNG_ENOENT); - TEST_NNG_FAIL(nng_listener_close(l2), NNG_ENOENT); - TEST_NNG_PASS(nng_dialer_close(d)); + NUTS_FAIL(nng_listener_get_bool(l2, NNG_OPT_RAW, &b), NNG_ENOENT); + NUTS_FAIL(nng_listener_close(l2), NNG_ENOENT); + NUTS_PASS(nng_dialer_close(d)); - TEST_CHECK(nng_listener_id(l) < 0); - TEST_NNG_PASS(nng_listener_create(&l, s1, a)); - TEST_CHECK(nng_listener_id(l) > 0); + NUTS_TRUE(nng_listener_id(l) < 0); + NUTS_PASS(nng_listener_create(&l, s1, a)); + NUTS_TRUE(nng_listener_id(l) > 0); // Forge a dialer d2.id = nng_listener_id(l); - TEST_NNG_FAIL(nng_dialer_get_bool(d2, NNG_OPT_RAW, &b), NNG_ENOENT); - TEST_NNG_FAIL(nng_dialer_close(d2), NNG_ENOENT); - TEST_NNG_PASS(nng_listener_close(l)); + NUTS_FAIL(nng_dialer_get_bool(d2, NNG_OPT_RAW, &b), NNG_ENOENT); + NUTS_FAIL(nng_dialer_close(d2), NNG_ENOENT); + NUTS_PASS(nng_listener_close(l)); - TEST_NNG_PASS(nng_close(s1)); + NUTS_CLOSE(s1); } void @@ -368,10 +356,10 @@ test_bad_url(void) { nng_socket s1; - TEST_NNG_PASS(nng_pair1_open(&s1)); - TEST_NNG_FAIL(nng_dial(s1, "bogus://1", NULL, 0), NNG_ENOTSUP); - TEST_NNG_FAIL(nng_listen(s1, "bogus://2", NULL, 0), NNG_ENOTSUP); - TEST_NNG_PASS(nng_close(s1)); + NUTS_OPEN(s1); + NUTS_FAIL(nng_dial(s1, "bogus://1", NULL, 0), NNG_ENOTSUP); + NUTS_FAIL(nng_listen(s1, "bogus://2", NULL, 0), NNG_ENOTSUP); + NUTS_CLOSE(s1); } void @@ -383,25 +371,24 @@ test_url_option(void) nng_dialer d; size_t sz; - TEST_NNG_PASS(nng_pair1_open(&s1)); + NUTS_OPEN(s1); // Listener - TEST_NNG_PASS(nng_listener_create(&l, s1, "inproc://url1")); + NUTS_PASS(nng_listener_create(&l, s1, "inproc://url1")); memset(url, 0, sizeof(url)); sz = sizeof(url); - TEST_NNG_PASS(nng_listener_get(l, NNG_OPT_URL, url, &sz)); - TEST_STREQUAL(url, "inproc://url1"); - TEST_NNG_FAIL( - nng_listener_set(l, NNG_OPT_URL, url, sz), NNG_EREADONLY); + NUTS_PASS(nng_listener_get(l, NNG_OPT_URL, url, &sz)); + NUTS_MATCH(url, "inproc://url1"); + NUTS_FAIL(nng_listener_set(l, NNG_OPT_URL, url, sz), NNG_EREADONLY); sz = sizeof(url); // Dialer - TEST_NNG_PASS(nng_dialer_create(&d, s1, "inproc://url2")); - TEST_NNG_PASS(nng_dialer_get(d, NNG_OPT_URL, url, &sz)); - TEST_STREQUAL(url, "inproc://url2"); - TEST_NNG_FAIL(nng_dialer_set(d, NNG_OPT_URL, url, sz), NNG_EREADONLY); + NUTS_PASS(nng_dialer_create(&d, s1, "inproc://url2")); + NUTS_PASS(nng_dialer_get(d, NNG_OPT_URL, url, &sz)); + NUTS_MATCH(url, "inproc://url2"); + NUTS_FAIL(nng_dialer_set(d, NNG_OPT_URL, url, sz), NNG_EREADONLY); - TEST_NNG_PASS(nng_close(s1)); + NUTS_CLOSE(s1); } void @@ -411,56 +398,53 @@ test_listener_options(void) nng_listener l; size_t sz; - TEST_NNG_PASS(nng_pair1_open(&s1)); + NUTS_OPEN(s1); #ifndef NNG_ELIDE_DEPRECATED // Create a listener with the specified options - TEST_NNG_PASS(nng_socket_set_size(s1, NNG_OPT_RECVMAXSZ, 543)); - TEST_NNG_PASS(nng_listener_create(&l, s1, "inproc://listener_opts")); - TEST_NNG_PASS(nng_listener_get_size(l, NNG_OPT_RECVMAXSZ, &sz)); - TEST_CHECK(sz == 543); + NUTS_PASS(nng_socket_set_size(s1, NNG_OPT_RECVMAXSZ, 543)); + NUTS_PASS(nng_listener_create(&l, s1, "inproc://listener_opts")); + NUTS_PASS(nng_listener_get_size(l, NNG_OPT_RECVMAXSZ, &sz)); + NUTS_TRUE(sz == 543); // Verify endpoint overrides - TEST_NNG_PASS(nng_listener_set_size(l, NNG_OPT_RECVMAXSZ, 678)); - TEST_NNG_PASS(nng_listener_get_size(l, NNG_OPT_RECVMAXSZ, &sz)); - TEST_CHECK(sz == 678); - TEST_NNG_PASS(nng_socket_get_size(s1, NNG_OPT_RECVMAXSZ, &sz)); - TEST_CHECK(sz == 543); + NUTS_PASS(nng_listener_set_size(l, NNG_OPT_RECVMAXSZ, 678)); + NUTS_PASS(nng_listener_get_size(l, NNG_OPT_RECVMAXSZ, &sz)); + NUTS_TRUE(sz == 678); + NUTS_PASS(nng_socket_get_size(s1, NNG_OPT_RECVMAXSZ, &sz)); + NUTS_TRUE(sz == 543); // And socket overrides again - TEST_NNG_PASS(nng_socket_set_size(s1, NNG_OPT_RECVMAXSZ, 911)); - TEST_NNG_PASS(nng_listener_get_size(l, NNG_OPT_RECVMAXSZ, &sz)); - TEST_CHECK(sz == 911); + NUTS_PASS(nng_socket_set_size(s1, NNG_OPT_RECVMAXSZ, 911)); + NUTS_PASS(nng_listener_get_size(l, NNG_OPT_RECVMAXSZ, &sz)); + NUTS_TRUE(sz == 911); #else - TEST_NNG_PASS(nng_listener_create(&l, s1, "inproc://listener_opts")); - TEST_NNG_PASS(nng_listener_set_size(l, NNG_OPT_RECVMAXSZ, 678)); - TEST_NNG_PASS(nng_listener_get_size(l, NNG_OPT_RECVMAXSZ, &sz)); - TEST_CHECK(sz == 678); + NUTS_PASS(nng_listener_create(&l, s1, "inproc://listener_opts")); + NUTS_PASS(nng_listener_set_size(l, NNG_OPT_RECVMAXSZ, 678)); + NUTS_PASS(nng_listener_get_size(l, NNG_OPT_RECVMAXSZ, &sz)); + NUTS_TRUE(sz == 678); #endif // Cannot set invalid options - TEST_NNG_FAIL(nng_listener_set_size(l, "BAD_OPT", 1), NNG_ENOTSUP); - TEST_NNG_FAIL( + NUTS_FAIL(nng_listener_set_size(l, "BAD_OPT", 1), NNG_ENOTSUP); + NUTS_FAIL( nng_listener_set_bool(l, NNG_OPT_RECVMAXSZ, true), NNG_EBADTYPE); - TEST_NNG_FAIL( - nng_listener_set(l, NNG_OPT_RECVMAXSZ, &sz, 1), NNG_EINVAL); + NUTS_FAIL(nng_listener_set(l, NNG_OPT_RECVMAXSZ, &sz, 1), NNG_EINVAL); // Cannot set inappropriate options - TEST_NNG_FAIL( + NUTS_FAIL( nng_listener_set_string(l, NNG_OPT_SOCKNAME, "1"), NNG_ENOTSUP); - TEST_NNG_FAIL( - nng_listener_set_bool(l, NNG_OPT_RAW, true), NNG_ENOTSUP); - TEST_NNG_FAIL( - nng_listener_set_ms(l, NNG_OPT_RECONNMINT, 1), NNG_ENOTSUP); - TEST_NNG_FAIL(nng_listener_set_string(l, NNG_OPT_SOCKNAME, "bogus"), + NUTS_FAIL(nng_listener_set_bool(l, NNG_OPT_RAW, true), NNG_ENOTSUP); + NUTS_FAIL(nng_listener_set_ms(l, NNG_OPT_RECONNMINT, 1), NNG_ENOTSUP); + NUTS_FAIL(nng_listener_set_string(l, NNG_OPT_SOCKNAME, "bogus"), NNG_ENOTSUP); // Read only options - TEST_NNG_FAIL(nng_listener_set_string(l, NNG_OPT_URL, "inproc://junk"), + NUTS_FAIL(nng_listener_set_string(l, NNG_OPT_URL, "inproc://junk"), NNG_EREADONLY); - TEST_NNG_PASS(nng_close(s1)); + NUTS_CLOSE(s1); } void @@ -470,54 +454,53 @@ test_dialer_options(void) nng_dialer d; size_t sz; - TEST_NNG_PASS(nng_pair1_open(&s1)); + NUTS_OPEN(s1); #ifndef NNG_ELIDE_DEPRECATED // NOTE: This test will fail if eliding deprecated behavior. // Create a dialer with the specified options - TEST_NNG_PASS(nng_socket_set_size(s1, NNG_OPT_RECVMAXSZ, 543)); - TEST_NNG_PASS(nng_dialer_create(&d, s1, "inproc://dialer_opts")); - TEST_NNG_PASS(nng_dialer_get_size(d, NNG_OPT_RECVMAXSZ, &sz)); - TEST_CHECK(sz == 543); + NUTS_PASS(nng_socket_set_size(s1, NNG_OPT_RECVMAXSZ, 543)); + NUTS_PASS(nng_dialer_create(&d, s1, "inproc://dialer_opts")); + NUTS_PASS(nng_dialer_get_size(d, NNG_OPT_RECVMAXSZ, &sz)); + NUTS_TRUE(sz == 543); // Verify endpoint overrides - TEST_NNG_PASS(nng_dialer_set_size(d, NNG_OPT_RECVMAXSZ, 678)); - TEST_NNG_PASS(nng_dialer_get_size(d, NNG_OPT_RECVMAXSZ, &sz)); - TEST_CHECK(sz == 678); - TEST_NNG_PASS(nng_socket_get_size(s1, NNG_OPT_RECVMAXSZ, &sz)); - TEST_CHECK(sz == 543); + NUTS_PASS(nng_dialer_set_size(d, NNG_OPT_RECVMAXSZ, 678)); + NUTS_PASS(nng_dialer_get_size(d, NNG_OPT_RECVMAXSZ, &sz)); + NUTS_TRUE(sz == 678); + NUTS_PASS(nng_socket_get_size(s1, NNG_OPT_RECVMAXSZ, &sz)); + NUTS_TRUE(sz == 543); // And socket overrides again - TEST_NNG_PASS(nng_socket_set_size(s1, NNG_OPT_RECVMAXSZ, 911)); - TEST_NNG_PASS(nng_dialer_get_size(d, NNG_OPT_RECVMAXSZ, &sz)); - TEST_CHECK(sz == 911); + NUTS_PASS(nng_socket_set_size(s1, NNG_OPT_RECVMAXSZ, 911)); + NUTS_PASS(nng_dialer_get_size(d, NNG_OPT_RECVMAXSZ, &sz)); + NUTS_TRUE(sz == 911); #else - TEST_NNG_PASS(nng_dialer_create(&d, s1, "inproc://dialer_opts")); - TEST_NNG_PASS(nng_dialer_set_size(d, NNG_OPT_RECVMAXSZ, 678)); - TEST_NNG_PASS(nng_dialer_get_size(d, NNG_OPT_RECVMAXSZ, &sz)); - TEST_CHECK(sz == 678); + NUTS_PASS(nng_dialer_create(&d, s1, "inproc://dialer_opts")); + NUTS_PASS(nng_dialer_set_size(d, NNG_OPT_RECVMAXSZ, 678)); + NUTS_PASS(nng_dialer_get_size(d, NNG_OPT_RECVMAXSZ, &sz)); + NUTS_TRUE(sz == 678); #endif // Cannot set invalid options - TEST_NNG_FAIL(nng_dialer_set_size(d, "BAD_OPT", 1), NNG_ENOTSUP); - TEST_NNG_FAIL( + NUTS_FAIL(nng_dialer_set_size(d, "BAD_OPT", 1), NNG_ENOTSUP); + NUTS_FAIL( nng_dialer_set_bool(d, NNG_OPT_RECVMAXSZ, true), NNG_EBADTYPE); - TEST_NNG_FAIL( - nng_dialer_set(d, NNG_OPT_RECVMAXSZ, &sz, 1), NNG_EINVAL); + NUTS_FAIL(nng_dialer_set(d, NNG_OPT_RECVMAXSZ, &sz, 1), NNG_EINVAL); // Cannot set inappropriate options - TEST_NNG_FAIL( + NUTS_FAIL( nng_dialer_set_string(d, NNG_OPT_SOCKNAME, "1"), NNG_ENOTSUP); - TEST_NNG_FAIL(nng_dialer_set_bool(d, NNG_OPT_RAW, true), NNG_ENOTSUP); - TEST_NNG_FAIL(nng_dialer_set_ms(d, NNG_OPT_SENDTIMEO, 1), NNG_ENOTSUP); - TEST_NNG_FAIL( + NUTS_FAIL(nng_dialer_set_bool(d, NNG_OPT_RAW, true), NNG_ENOTSUP); + NUTS_FAIL(nng_dialer_set_ms(d, NNG_OPT_SENDTIMEO, 1), NNG_ENOTSUP); + NUTS_FAIL( nng_dialer_set_string(d, NNG_OPT_SOCKNAME, "bogus"), NNG_ENOTSUP); // Read only options - TEST_NNG_FAIL(nng_dialer_set_string(d, NNG_OPT_URL, "inproc://junk"), + NUTS_FAIL(nng_dialer_set_string(d, NNG_OPT_URL, "inproc://junk"), NNG_EREADONLY); - TEST_NNG_PASS(nng_close(s1)); + NUTS_CLOSE(s1); } void @@ -532,25 +515,20 @@ test_endpoint_absent_options(void) d.id = 1999; l.id = 1999; - TEST_NNG_FAIL( - nng_dialer_set_size(d, NNG_OPT_RECVMAXSZ, 10), NNG_ENOENT); - TEST_NNG_FAIL( - nng_listener_set_size(l, NNG_OPT_RECVMAXSZ, 10), NNG_ENOENT); + NUTS_FAIL(nng_dialer_set_size(d, NNG_OPT_RECVMAXSZ, 10), NNG_ENOENT); + NUTS_FAIL(nng_listener_set_size(l, NNG_OPT_RECVMAXSZ, 10), NNG_ENOENT); - TEST_NNG_FAIL(nng_dialer_get_bool(d, NNG_OPT_RAW, &b), NNG_ENOENT); - TEST_NNG_FAIL(nng_listener_get_bool(l, NNG_OPT_RAW, &b), NNG_ENOENT); + NUTS_FAIL(nng_dialer_get_bool(d, NNG_OPT_RAW, &b), NNG_ENOENT); + NUTS_FAIL(nng_listener_get_bool(l, NNG_OPT_RAW, &b), NNG_ENOENT); - TEST_NNG_FAIL( - nng_dialer_get_size(d, NNG_OPT_RECVMAXSZ, &s), NNG_ENOENT); - TEST_NNG_FAIL( - nng_listener_get_size(l, NNG_OPT_RECVMAXSZ, &s), NNG_ENOENT); + NUTS_FAIL(nng_dialer_get_size(d, NNG_OPT_RECVMAXSZ, &s), NNG_ENOENT); + NUTS_FAIL(nng_listener_get_size(l, NNG_OPT_RECVMAXSZ, &s), NNG_ENOENT); - TEST_NNG_FAIL(nng_dialer_get_int(d, NNG_OPT_RAW, &i), NNG_ENOENT); - TEST_NNG_FAIL(nng_listener_get_int(l, NNG_OPT_RAW, &i), NNG_ENOENT); + NUTS_FAIL(nng_dialer_get_int(d, NNG_OPT_RAW, &i), NNG_ENOENT); + NUTS_FAIL(nng_listener_get_int(l, NNG_OPT_RAW, &i), NNG_ENOENT); - TEST_NNG_FAIL(nng_dialer_get_ms(d, NNG_OPT_RECVTIMEO, &t), NNG_ENOENT); - TEST_NNG_FAIL( - nng_listener_get_ms(l, NNG_OPT_SENDTIMEO, &t), NNG_ENOENT); + NUTS_FAIL(nng_dialer_get_ms(d, NNG_OPT_RECVTIMEO, &t), NNG_ENOENT); + NUTS_FAIL(nng_listener_get_ms(l, NNG_OPT_SENDTIMEO, &t), NNG_ENOENT); } void @@ -568,44 +546,40 @@ test_timeout_options(void) NULL, }; - TEST_NNG_PASS(nng_pair1_open(&s1)); + NUTS_OPEN(s1); for (int i = 0; cases[i] != NULL; i++) { bool b; TEST_CASE(cases[i]); // Can't receive a duration into zero bytes. sz = 0; - TEST_NNG_FAIL( - nng_socket_get(s1, cases[i], &to, &sz), NNG_EINVAL); + NUTS_FAIL(nng_socket_get(s1, cases[i], &to, &sz), NNG_EINVAL); // Type mismatches - TEST_NNG_FAIL( - nng_socket_get_bool(s1, cases[i], &b), NNG_EBADTYPE); + NUTS_FAIL(nng_socket_get_bool(s1, cases[i], &b), NNG_EBADTYPE); sz = 1; - TEST_NNG_FAIL( - nng_socket_get(s1, cases[i], &b, &sz), NNG_EINVAL); + NUTS_FAIL(nng_socket_get(s1, cases[i], &b, &sz), NNG_EINVAL); // Can set a valid duration - TEST_NNG_PASS(nng_socket_set_ms(s1, cases[i], 1234)); - TEST_NNG_PASS(nng_socket_get_ms(s1, cases[i], &to)); - TEST_CHECK(to == 1234); + NUTS_PASS(nng_socket_set_ms(s1, cases[i], 1234)); + NUTS_PASS(nng_socket_get_ms(s1, cases[i], &to)); + NUTS_TRUE(to == 1234); to = 0; sz = sizeof(to); - TEST_NNG_PASS(nng_socket_get(s1, cases[i], &to, &sz)); - TEST_CHECK(to == 1234); - TEST_CHECK(sz == sizeof(to)); + NUTS_PASS(nng_socket_get(s1, cases[i], &to, &sz)); + NUTS_TRUE(to == 1234); + NUTS_TRUE(sz == sizeof(to)); // Can't set a negative duration - TEST_NNG_FAIL(nng_socket_set_ms(s1, cases[i], -5), NNG_EINVAL); + NUTS_FAIL(nng_socket_set_ms(s1, cases[i], -5), NNG_EINVAL); // Can't pass a buf too small for duration sz = sizeof(to) - 1; to = 1; - TEST_NNG_FAIL( - nng_socket_set(s1, cases[i], &to, sz), NNG_EINVAL); + NUTS_FAIL(nng_socket_set(s1, cases[i], &to, sz), NNG_EINVAL); } - TEST_NNG_PASS(nng_close(s1)); + NUTS_CLOSE(s1); } void @@ -621,44 +595,44 @@ test_size_options(void) NULL, }; - TEST_NNG_PASS(nng_pair1_open(&s1)); + NUTS_OPEN(s1); for (int i = 0; (opt = cases[i]) != NULL; i++) { TEST_CASE(opt); // Can't receive a size into zero bytes. sz = 0; - TEST_NNG_FAIL(nng_socket_get(s1, opt, &val, &sz), NNG_EINVAL); + NUTS_FAIL(nng_socket_get(s1, opt, &val, &sz), NNG_EINVAL); // Can set a valid duration - TEST_NNG_PASS(nng_socket_set_size(s1, opt, 1234)); - TEST_NNG_PASS(nng_socket_get_size(s1, opt, &val)); - TEST_CHECK(val == 1234); + NUTS_PASS(nng_socket_set_size(s1, opt, 1234)); + NUTS_PASS(nng_socket_get_size(s1, opt, &val)); + NUTS_TRUE(val == 1234); val = 0; sz = sizeof(val); - TEST_NNG_PASS(nng_socket_get(s1, opt, &val, &sz)); - TEST_CHECK(val == 1234); - TEST_CHECK(sz == sizeof(val)); + NUTS_PASS(nng_socket_get(s1, opt, &val, &sz)); + NUTS_TRUE(val == 1234); + NUTS_TRUE(sz == sizeof(val)); // Can't pass a buf too small for size sz = sizeof(val) - 1; val = 1; - TEST_NNG_FAIL(nng_socket_set(s1, opt, &val, sz), NNG_EINVAL); + NUTS_FAIL(nng_socket_set(s1, opt, &val, sz), NNG_EINVAL); // We limit the limit to 4GB. Clear it if you want to // ship more than 4GB at a time. #if defined(_WIN64) || defined(_LP64) val = 0x10000u; val <<= 30u; - TEST_NNG_FAIL(nng_socket_set_size(s1, opt, val), NNG_EINVAL); - TEST_NNG_PASS(nng_socket_get_size(s1, opt, &val)); - TEST_CHECK(val == 1234); + NUTS_FAIL(nng_socket_set_size(s1, opt, val), NNG_EINVAL); + NUTS_PASS(nng_socket_get_size(s1, opt, &val)); + NUTS_TRUE(val == 1234); #endif } - TEST_NNG_PASS(nng_close(s1)); + NUTS_CLOSE(s1); } -TEST_LIST = { +NUTS_TESTS = { { "recv timeout", test_recv_timeout }, { "recv non-block", test_recv_nonblock }, { "send timeout", test_send_timeout }, diff --git a/src/core/stats.c b/src/core/stats.c index 85e7d030..e4765078 100644 --- a/src/core/stats.c +++ b/src/core/stats.c @@ -79,8 +79,8 @@ stat_unregister(nni_stat_item *item) } if ((item->si_info->si_alloc) && (item->si_info->si_type == NNG_STAT_STRING)) { - nni_strfree(item->si_value.sv_string); - item->si_value.sv_string = NULL; + nni_strfree(item->si_u.sv_string); + item->si_u.sv_string = NULL; } nni_list_node_remove(&item->si_node); } @@ -116,9 +116,9 @@ nni_stat_inc(nni_stat_item *item, uint64_t inc) { #ifdef NNG_ENABLE_STATS if (item->si_info->si_atomic) { - nni_atomic_add64(&item->si_value.sv_atomic, inc); + nni_atomic_add64(&item->si_u.sv_atomic, inc); } else { - item->si_value.sv_number += inc; + item->si_u.sv_number += inc; } #else NNI_ARG_UNUSED(item); @@ -132,9 +132,9 @@ nni_stat_dec(nni_stat_item *item, uint64_t inc) #ifdef NNG_ENABLE_STATS if (item->si_info->si_atomic) { - nni_atomic_sub64(&item->si_value.sv_atomic, inc); + nni_atomic_sub64(&item->si_u.sv_atomic, inc); } else { - item->si_value.sv_number -= inc; + item->si_u.sv_number -= inc; } #else NNI_ARG_UNUSED(item); @@ -147,7 +147,7 @@ nni_stat_set_id(nni_stat_item *item, int id) { #ifdef NNG_ENABLE_STATS // IDs don't change, so just set it. - item->si_value.sv_id = id; + item->si_u.sv_id = id; #else NNI_ARG_UNUSED(item); NNI_ARG_UNUSED(id); @@ -159,7 +159,7 @@ nni_stat_set_bool(nni_stat_item *item, bool b) { #ifdef NNG_ENABLE_STATS // bool is atomic by definitions. - item->si_value.sv_bool = b; + item->si_u.sv_bool = b; #else NNI_ARG_UNUSED(item); NNI_ARG_UNUSED(b); @@ -171,7 +171,7 @@ nni_stat_set_string(nni_stat_item *item, const char *s) { #ifdef NNG_ENABLE_STATS const nni_stat_info *info = item->si_info; - char * old = item->si_value.sv_string; + char * old = item->si_u.sv_string; nni_mtx_lock(&stats_val_lock); if ((s != NULL) && (old != NULL) && (strcmp(s, old) == 0)) { @@ -182,12 +182,12 @@ nni_stat_set_string(nni_stat_item *item, const char *s) if (!info->si_alloc) { // no allocation, just set it. - item->si_value.sv_string = (char *) s; + item->si_u.sv_string = (char *) s; nni_mtx_unlock(&stats_val_lock); return; } - item->si_value.sv_string = nni_strdup(s); + item->si_u.sv_string = nni_strdup(s); nni_mtx_unlock(&stats_val_lock); nni_strfree(old); @@ -202,9 +202,9 @@ nni_stat_set_value(nni_stat_item *item, uint64_t v) { #ifdef NNG_ENABLE_STATS if (item->si_info->si_atomic) { - nni_atomic_set64(&item->si_value.sv_atomic, v); + nni_atomic_set64(&item->si_u.sv_atomic, v); } else { - item->si_value.sv_number = v; + item->si_u.sv_number = v; } #else NNI_ARG_UNUSED(item); @@ -272,24 +272,24 @@ stat_update(nni_stat *stat) switch (info->si_type) { case NNG_STAT_SCOPE: case NNG_STAT_ID: - stat->s_val.sv_id = item->si_value.sv_id; + stat->s_val.sv_id = item->si_u.sv_id; break; case NNG_STAT_BOOLEAN: - stat->s_val.sv_bool = item->si_value.sv_bool; + stat->s_val.sv_bool = item->si_u.sv_bool; break; case NNG_STAT_COUNTER: case NNG_STAT_LEVEL: if (info->si_atomic) { stat->s_val.sv_value = nni_atomic_get64( - (nni_atomic_u64 *) &item->si_value.sv_atomic); + (nni_atomic_u64 *) &item->si_u.sv_atomic); } else { - stat->s_val.sv_value = item->si_value.sv_number; + stat->s_val.sv_value = item->si_u.sv_number; } break; case NNG_STAT_STRING: nni_mtx_lock(&stats_val_lock); old = stat->s_val.sv_string; - str = item->si_value.sv_string; + str = item->si_u.sv_string; // If we have to allocate a new string, do so. But // only do it if new string is different. diff --git a/src/core/stats.h b/src/core/stats.h index 950df78f..de1879ca 100644 --- a/src/core/stats.h +++ b/src/core/stats.h @@ -14,7 +14,7 @@ #include "core/defs.h" // Statistics support. This is inspired in part by the Solaris -// kstats framework, but we've simplified and tuned it for our use. +// kernel stats framework, but we've simplified and tuned it for our use. // // Collection of the stats will be done in two steps. First we // will walk the list of stats, with the chain held, allocating @@ -45,7 +45,7 @@ struct nni_stat_item { char * sv_string; bool sv_bool; int sv_id; - } si_value; + } si_u; }; struct nni_stat_info { diff --git a/src/core/url_test.c b/src/core/url_test.c index 847b7df3..6504ff6c 100644 --- a/src/core/url_test.c +++ b/src/core/url_test.c @@ -1,5 +1,5 @@ // -// Copyright 2018 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 @@ -8,33 +8,26 @@ // found online at https://opensource.org/licenses/MIT. // - -#include "acutest.h" - +#include "nng_impl.h" +#include <nuts.h> #include <string.h> -#include <nng/nng.h> - -#include "core/url.h" - -#include "testutil.h" - void test_url_host(void) { nng_url *url; - TEST_NNG_PASS(nng_url_parse(&url, "http://www.google.com")); - TEST_ASSERT(url != NULL); - TEST_CHECK(strcmp(url->u_scheme, "http") == 0); - TEST_CHECK(strcmp(url->u_host, "www.google.com") == 0); - TEST_CHECK(strcmp(url->u_hostname, "www.google.com") == 0); - TEST_CHECK(strcmp(url->u_port, "80") == 0); - TEST_CHECK(strcmp(url->u_path, "") == 0); - TEST_CHECK(strcmp(url->u_requri, "") == 0); - TEST_CHECK(url->u_query == NULL); - TEST_CHECK(url->u_fragment == NULL); - TEST_CHECK(url->u_userinfo == NULL); + NUTS_PASS(nng_url_parse(&url, "http://www.google.com")); + NUTS_ASSERT(url != NULL); + NUTS_TRUE(strcmp(url->u_scheme, "http") == 0); + NUTS_TRUE(strcmp(url->u_host, "www.google.com") == 0); + NUTS_TRUE(strcmp(url->u_hostname, "www.google.com") == 0); + NUTS_TRUE(strcmp(url->u_port, "80") == 0); + NUTS_TRUE(strcmp(url->u_path, "") == 0); + NUTS_TRUE(strcmp(url->u_requri, "") == 0); + NUTS_TRUE(url->u_query == NULL); + NUTS_TRUE(url->u_fragment == NULL); + NUTS_TRUE(url->u_userinfo == NULL); nng_url_free(url); } @@ -42,17 +35,17 @@ void test_url_host_port(void) { nng_url *url; - TEST_NNG_PASS(nng_url_parse(&url, "http://www.google.com:1234")); - TEST_ASSERT(url != NULL); - TEST_CHECK(strcmp(url->u_scheme, "http") == 0); - TEST_CHECK(strcmp(url->u_host, "www.google.com:1234") == 0); - TEST_CHECK(strcmp(url->u_hostname, "www.google.com") == 0); - TEST_CHECK(strcmp(url->u_port, "1234") == 0); - TEST_CHECK(strcmp(url->u_path, "") == 0); - TEST_CHECK(strcmp(url->u_requri, "") == 0); - TEST_CHECK(url->u_query == NULL); - TEST_CHECK(url->u_fragment == NULL); - TEST_CHECK(url->u_userinfo == NULL); + NUTS_PASS(nng_url_parse(&url, "http://www.google.com:1234")); + NUTS_ASSERT(url != NULL); + NUTS_TRUE(strcmp(url->u_scheme, "http") == 0); + NUTS_TRUE(strcmp(url->u_host, "www.google.com:1234") == 0); + NUTS_TRUE(strcmp(url->u_hostname, "www.google.com") == 0); + NUTS_TRUE(strcmp(url->u_port, "1234") == 0); + NUTS_TRUE(strcmp(url->u_path, "") == 0); + NUTS_TRUE(strcmp(url->u_requri, "") == 0); + NUTS_TRUE(url->u_query == NULL); + NUTS_TRUE(url->u_fragment == NULL); + NUTS_TRUE(url->u_userinfo == NULL); nng_url_free(url); } @@ -61,18 +54,18 @@ test_url_host_port_path(void) { nng_url *url; - TEST_NNG_PASS( + NUTS_PASS( nng_url_parse(&url, "http://www.google.com:1234/somewhere")); - TEST_ASSERT(url != NULL); - TEST_CHECK(strcmp(url->u_scheme, "http") == 0); - TEST_CHECK(strcmp(url->u_host, "www.google.com:1234") == 0); - TEST_CHECK(strcmp(url->u_hostname, "www.google.com") == 0); - TEST_CHECK(strcmp(url->u_port, "1234") == 0); - TEST_CHECK(strcmp(url->u_path, "/somewhere") == 0); - TEST_CHECK(strcmp(url->u_requri, "/somewhere") == 0); - TEST_CHECK(url->u_userinfo == NULL); - TEST_CHECK(url->u_query == NULL); - TEST_CHECK(url->u_fragment == NULL); + NUTS_ASSERT(url != NULL); + NUTS_TRUE(strcmp(url->u_scheme, "http") == 0); + NUTS_TRUE(strcmp(url->u_host, "www.google.com:1234") == 0); + NUTS_TRUE(strcmp(url->u_hostname, "www.google.com") == 0); + NUTS_TRUE(strcmp(url->u_port, "1234") == 0); + NUTS_TRUE(strcmp(url->u_path, "/somewhere") == 0); + NUTS_TRUE(strcmp(url->u_requri, "/somewhere") == 0); + NUTS_TRUE(url->u_userinfo == NULL); + NUTS_TRUE(url->u_query == NULL); + NUTS_TRUE(url->u_fragment == NULL); nng_url_free(url); } @@ -80,18 +73,18 @@ void test_url_user_info(void) { nng_url *url; - TEST_NNG_PASS(nng_url_parse( + NUTS_PASS(nng_url_parse( &url, "http://garrett@www.google.com:1234/somewhere")); - TEST_ASSERT(url != NULL); - TEST_STREQUAL(url->u_scheme, "http"); - TEST_STREQUAL(url->u_userinfo, "garrett"); - TEST_STREQUAL(url->u_host, "www.google.com:1234"); - TEST_STREQUAL(url->u_hostname, "www.google.com"); - TEST_STREQUAL(url->u_port, "1234"); - TEST_STREQUAL(url->u_path, "/somewhere"); - TEST_STREQUAL(url->u_requri, "/somewhere"); - TEST_NULL(url->u_query); - TEST_NULL(url->u_fragment); + NUTS_ASSERT(url != NULL); + NUTS_MATCH(url->u_scheme, "http"); + NUTS_MATCH(url->u_userinfo, "garrett"); + NUTS_MATCH(url->u_host, "www.google.com:1234"); + NUTS_MATCH(url->u_hostname, "www.google.com"); + NUTS_MATCH(url->u_port, "1234"); + NUTS_MATCH(url->u_path, "/somewhere"); + NUTS_MATCH(url->u_requri, "/somewhere"); + NUTS_NULL(url->u_query); + NUTS_NULL(url->u_fragment); nng_url_free(url); } @@ -99,18 +92,18 @@ void test_url_path_query_param(void) { nng_url *url; - TEST_NNG_PASS( + NUTS_PASS( nng_url_parse(&url, "http://www.google.com/somewhere?result=yes")); - TEST_ASSERT(url != NULL); - TEST_STREQUAL(url->u_scheme, "http"); - TEST_STREQUAL(url->u_host, "www.google.com"); - TEST_STREQUAL(url->u_hostname, "www.google.com"); - TEST_STREQUAL(url->u_port, "80"); - TEST_STREQUAL(url->u_path, "/somewhere"); - TEST_STREQUAL(url->u_query, "result=yes"); - TEST_STREQUAL(url->u_requri, "/somewhere?result=yes"); - TEST_NULL(url->u_userinfo); - TEST_NULL(url->u_fragment); + NUTS_ASSERT(url != NULL); + NUTS_MATCH(url->u_scheme, "http"); + NUTS_MATCH(url->u_host, "www.google.com"); + NUTS_MATCH(url->u_hostname, "www.google.com"); + NUTS_MATCH(url->u_port, "80"); + NUTS_MATCH(url->u_path, "/somewhere"); + NUTS_MATCH(url->u_query, "result=yes"); + NUTS_MATCH(url->u_requri, "/somewhere?result=yes"); + NUTS_NULL(url->u_userinfo); + NUTS_NULL(url->u_fragment); nng_url_free(url); } @@ -118,19 +111,19 @@ void test_url_query_param_anchor(void) { nng_url *url; - TEST_NNG_PASS(nng_url_parse(&url, + NUTS_PASS(nng_url_parse(&url, "http://www.google.com/" "somewhere?result=yes#chapter1")); - TEST_ASSERT(url != NULL); - TEST_STREQUAL(url->u_scheme, "http"); - TEST_STREQUAL(url->u_host, "www.google.com"); - TEST_STREQUAL(url->u_hostname, "www.google.com"); - TEST_STREQUAL(url->u_port, "80"); - TEST_STREQUAL(url->u_path, "/somewhere"); - TEST_STREQUAL(url->u_query, "result=yes"); - TEST_STREQUAL(url->u_fragment, "chapter1"); - TEST_STREQUAL(url->u_requri, "/somewhere?result=yes#chapter1"); - TEST_NULL(url->u_userinfo); + NUTS_ASSERT(url != NULL); + NUTS_MATCH(url->u_scheme, "http"); + NUTS_MATCH(url->u_host, "www.google.com"); + NUTS_MATCH(url->u_hostname, "www.google.com"); + NUTS_MATCH(url->u_port, "80"); + NUTS_MATCH(url->u_path, "/somewhere"); + NUTS_MATCH(url->u_query, "result=yes"); + NUTS_MATCH(url->u_fragment, "chapter1"); + NUTS_MATCH(url->u_requri, "/somewhere?result=yes#chapter1"); + NUTS_NULL(url->u_userinfo); nng_url_free(url); } @@ -138,18 +131,18 @@ void test_url_path_anchor(void) { nng_url *url; - TEST_NNG_PASS( + NUTS_PASS( nng_url_parse(&url, "http://www.google.com/somewhere#chapter2")); - TEST_ASSERT(url != NULL); - TEST_STREQUAL(url->u_scheme, "http"); - TEST_STREQUAL(url->u_host, "www.google.com"); - TEST_STREQUAL(url->u_hostname, "www.google.com"); - TEST_STREQUAL(url->u_port, "80"); - TEST_STREQUAL(url->u_path, "/somewhere"); - TEST_STREQUAL(url->u_fragment, "chapter2"); - TEST_STREQUAL(url->u_requri, "/somewhere#chapter2"); - TEST_NULL(url->u_query); - TEST_NULL(url->u_userinfo); + NUTS_ASSERT(url != NULL); + NUTS_MATCH(url->u_scheme, "http"); + NUTS_MATCH(url->u_host, "www.google.com"); + NUTS_MATCH(url->u_hostname, "www.google.com"); + NUTS_MATCH(url->u_port, "80"); + NUTS_MATCH(url->u_path, "/somewhere"); + NUTS_MATCH(url->u_fragment, "chapter2"); + NUTS_MATCH(url->u_requri, "/somewhere#chapter2"); + NUTS_NULL(url->u_query); + NUTS_NULL(url->u_userinfo); nng_url_free(url); } @@ -157,17 +150,17 @@ void test_url_anchor(void) { nng_url *url; - TEST_NNG_PASS(nng_url_parse(&url, "http://www.google.com#chapter3")); - TEST_ASSERT(url != NULL); - TEST_STREQUAL(url->u_scheme, "http"); - TEST_STREQUAL(url->u_host, "www.google.com"); - TEST_STREQUAL(url->u_hostname, "www.google.com"); - TEST_STREQUAL(url->u_path, ""); - TEST_STREQUAL(url->u_port, "80"); - TEST_STREQUAL(url->u_fragment, "chapter3"); - TEST_STREQUAL(url->u_requri, "#chapter3"); - TEST_NULL(url->u_query); - TEST_NULL(url->u_userinfo); + NUTS_PASS(nng_url_parse(&url, "http://www.google.com#chapter3")); + NUTS_ASSERT(url != NULL); + NUTS_MATCH(url->u_scheme, "http"); + NUTS_MATCH(url->u_host, "www.google.com"); + NUTS_MATCH(url->u_hostname, "www.google.com"); + NUTS_MATCH(url->u_path, ""); + NUTS_MATCH(url->u_port, "80"); + NUTS_MATCH(url->u_fragment, "chapter3"); + NUTS_MATCH(url->u_requri, "#chapter3"); + NUTS_NULL(url->u_query); + NUTS_NULL(url->u_userinfo); nng_url_free(url); } @@ -175,17 +168,17 @@ void test_url_query_param(void) { nng_url *url; - TEST_NNG_PASS(nng_url_parse(&url, "http://www.google.com?color=red")); - TEST_ASSERT(url != NULL); - TEST_STREQUAL(url->u_scheme, "http"); - TEST_STREQUAL(url->u_host, "www.google.com"); - TEST_STREQUAL(url->u_hostname, "www.google.com"); - TEST_STREQUAL(url->u_path, ""); - TEST_STREQUAL(url->u_port, "80"); - TEST_STREQUAL(url->u_query, "color=red"); - TEST_STREQUAL(url->u_requri, "?color=red"); - TEST_ASSERT(url != NULL); - TEST_NULL(url->u_userinfo); + NUTS_PASS(nng_url_parse(&url, "http://www.google.com?color=red")); + NUTS_ASSERT(url != NULL); + NUTS_MATCH(url->u_scheme, "http"); + NUTS_MATCH(url->u_host, "www.google.com"); + NUTS_MATCH(url->u_hostname, "www.google.com"); + NUTS_MATCH(url->u_path, ""); + NUTS_MATCH(url->u_port, "80"); + NUTS_MATCH(url->u_query, "color=red"); + NUTS_MATCH(url->u_requri, "?color=red"); + NUTS_ASSERT(url != NULL); + NUTS_NULL(url->u_userinfo); nng_url_free(url); } @@ -193,16 +186,16 @@ void test_url_v6_host(void) { nng_url *url; - TEST_NNG_PASS(nng_url_parse(&url, "http://[::1]")); - TEST_ASSERT(url != NULL); - TEST_STREQUAL(url->u_scheme, "http"); - TEST_STREQUAL(url->u_host, "[::1]"); - TEST_STREQUAL(url->u_hostname, "::1"); - TEST_STREQUAL(url->u_path, ""); - TEST_STREQUAL(url->u_port, "80"); - TEST_NULL(url->u_query); - TEST_NULL(url->u_fragment); - TEST_NULL(url->u_userinfo); + NUTS_PASS(nng_url_parse(&url, "http://[::1]")); + NUTS_ASSERT(url != NULL); + NUTS_MATCH(url->u_scheme, "http"); + NUTS_MATCH(url->u_host, "[::1]"); + NUTS_MATCH(url->u_hostname, "::1"); + NUTS_MATCH(url->u_path, ""); + NUTS_MATCH(url->u_port, "80"); + NUTS_NULL(url->u_query); + NUTS_NULL(url->u_fragment); + NUTS_NULL(url->u_userinfo); nng_url_free(url); } @@ -210,16 +203,16 @@ void test_url_v6_host_port(void) { nng_url *url; - TEST_NNG_PASS(nng_url_parse(&url, "http://[::1]:29")); - TEST_ASSERT(url != NULL); - TEST_STREQUAL(url->u_scheme, "http"); - TEST_STREQUAL(url->u_host, "[::1]:29"); - TEST_STREQUAL(url->u_hostname, "::1"); - TEST_STREQUAL(url->u_path, ""); - TEST_STREQUAL(url->u_port, "29"); - TEST_NULL(url->u_query); - TEST_NULL(url->u_fragment); - TEST_NULL(url->u_userinfo); + NUTS_PASS(nng_url_parse(&url, "http://[::1]:29")); + NUTS_ASSERT(url != NULL); + NUTS_MATCH(url->u_scheme, "http"); + NUTS_MATCH(url->u_host, "[::1]:29"); + NUTS_MATCH(url->u_hostname, "::1"); + NUTS_MATCH(url->u_path, ""); + NUTS_MATCH(url->u_port, "29"); + NUTS_NULL(url->u_query); + NUTS_NULL(url->u_fragment); + NUTS_NULL(url->u_userinfo); nng_url_free(url); } @@ -227,16 +220,16 @@ void test_url_v6_host_port_path(void) { nng_url *url; - TEST_NNG_PASS(nng_url_parse(&url, "http://[::1]:29/bottles")); - TEST_ASSERT(url != NULL); - TEST_STREQUAL(url->u_scheme, "http"); - TEST_STREQUAL(url->u_host, "[::1]:29"); - TEST_STREQUAL(url->u_hostname, "::1"); - TEST_STREQUAL(url->u_path, "/bottles"); - TEST_STREQUAL(url->u_port, "29"); - TEST_NULL(url->u_query); - TEST_NULL(url->u_fragment); - TEST_NULL(url->u_userinfo); + NUTS_PASS(nng_url_parse(&url, "http://[::1]:29/bottles")); + NUTS_ASSERT(url != NULL); + NUTS_MATCH(url->u_scheme, "http"); + NUTS_MATCH(url->u_host, "[::1]:29"); + NUTS_MATCH(url->u_hostname, "::1"); + NUTS_MATCH(url->u_path, "/bottles"); + NUTS_MATCH(url->u_port, "29"); + NUTS_NULL(url->u_query); + NUTS_NULL(url->u_fragment); + NUTS_NULL(url->u_userinfo); nng_url_free(url); } @@ -244,16 +237,16 @@ void test_url_tcp_port(void) { nng_url *url; - TEST_NNG_PASS(nng_url_parse(&url, "tcp://:9876/")); - TEST_ASSERT(url != NULL); - TEST_STREQUAL(url->u_scheme, "tcp"); - TEST_STREQUAL(url->u_host, ":9876"); - TEST_STREQUAL(url->u_hostname, ""); - TEST_STREQUAL(url->u_path, "/"); - TEST_STREQUAL(url->u_port, "9876"); - TEST_NULL(url->u_query); - TEST_NULL(url->u_fragment); - TEST_NULL(url->u_userinfo); + NUTS_PASS(nng_url_parse(&url, "tcp://:9876/")); + NUTS_ASSERT(url != NULL); + NUTS_MATCH(url->u_scheme, "tcp"); + NUTS_MATCH(url->u_host, ":9876"); + NUTS_MATCH(url->u_hostname, ""); + NUTS_MATCH(url->u_path, "/"); + NUTS_MATCH(url->u_port, "9876"); + NUTS_NULL(url->u_query); + NUTS_NULL(url->u_fragment); + NUTS_NULL(url->u_userinfo); nng_url_free(url); } @@ -262,16 +255,16 @@ test_url_bare_ws(void) { nng_url *url; - TEST_NNG_PASS(nng_url_parse(&url, "ws://")); - TEST_ASSERT(url != NULL); - TEST_STREQUAL(url->u_scheme, "ws"); - TEST_STREQUAL(url->u_host, ""); - TEST_STREQUAL(url->u_hostname, ""); - TEST_STREQUAL(url->u_path, ""); - TEST_STREQUAL(url->u_port, "80"); - TEST_NULL(url->u_query); - TEST_NULL(url->u_fragment); - TEST_NULL(url->u_userinfo); + NUTS_PASS(nng_url_parse(&url, "ws://")); + NUTS_ASSERT(url != NULL); + NUTS_MATCH(url->u_scheme, "ws"); + NUTS_MATCH(url->u_host, ""); + NUTS_MATCH(url->u_hostname, ""); + NUTS_MATCH(url->u_path, ""); + NUTS_MATCH(url->u_port, "80"); + NUTS_NULL(url->u_query); + NUTS_NULL(url->u_fragment); + NUTS_NULL(url->u_userinfo); nng_url_free(url); } @@ -279,16 +272,16 @@ void test_url_ws_wildcard(void) { nng_url *url; - TEST_NNG_PASS(nng_url_parse(&url, "ws://*:12345/foobar")); - TEST_ASSERT(url != NULL); - TEST_STREQUAL(url->u_scheme, "ws"); - TEST_STREQUAL(url->u_host, ":12345"); - TEST_STREQUAL(url->u_hostname, ""); - TEST_STREQUAL(url->u_path, "/foobar"); - TEST_STREQUAL(url->u_port, "12345"); - TEST_NULL(url->u_query); - TEST_NULL(url->u_fragment); - TEST_NULL(url->u_userinfo); + NUTS_PASS(nng_url_parse(&url, "ws://*:12345/foobar")); + NUTS_ASSERT(url != NULL); + NUTS_MATCH(url->u_scheme, "ws"); + NUTS_MATCH(url->u_host, ":12345"); + NUTS_MATCH(url->u_hostname, ""); + NUTS_MATCH(url->u_path, "/foobar"); + NUTS_MATCH(url->u_port, "12345"); + NUTS_NULL(url->u_query); + NUTS_NULL(url->u_fragment); + NUTS_NULL(url->u_userinfo); nng_url_free(url); } @@ -296,16 +289,16 @@ void test_url_ssh(void) { nng_url *url; - TEST_NNG_PASS(nng_url_parse(&url, "ssh://user@host.example.com")); - TEST_ASSERT(url != NULL); - TEST_STREQUAL(url->u_scheme, "ssh"); - TEST_STREQUAL(url->u_host, "host.example.com"); - TEST_STREQUAL(url->u_hostname, "host.example.com"); - TEST_STREQUAL(url->u_path, ""); - TEST_STREQUAL(url->u_port, "22"); - TEST_NULL(url->u_query); - TEST_NULL(url->u_fragment); - TEST_STREQUAL(url->u_userinfo, "user"); + NUTS_PASS(nng_url_parse(&url, "ssh://user@host.example.com")); + NUTS_ASSERT(url != NULL); + NUTS_MATCH(url->u_scheme, "ssh"); + NUTS_MATCH(url->u_host, "host.example.com"); + NUTS_MATCH(url->u_hostname, "host.example.com"); + NUTS_MATCH(url->u_path, ""); + NUTS_MATCH(url->u_port, "22"); + NUTS_NULL(url->u_query); + NUTS_NULL(url->u_fragment); + NUTS_MATCH(url->u_userinfo, "user"); nng_url_free(url); } @@ -313,33 +306,33 @@ void test_url_bad_scheme(void) { nng_url *url = NULL; - TEST_NNG_FAIL(nng_url_parse(&url, "www.google.com"), NNG_EINVAL); - TEST_NULL(url); - TEST_NNG_FAIL(nng_url_parse(&url, "http:www.google.com"), NNG_EINVAL); - TEST_NULL(url); + NUTS_FAIL(nng_url_parse(&url, "www.google.com"), NNG_EINVAL); + NUTS_NULL(url); + NUTS_FAIL(nng_url_parse(&url, "http:www.google.com"), NNG_EINVAL); + NUTS_NULL(url); } void test_url_bad_ipv6(void) { nng_url *url = NULL; - TEST_NNG_FAIL(nng_url_parse(&url, "http://[::1"), NNG_EINVAL); - TEST_NULL(url); - TEST_NNG_FAIL(nng_url_parse(&url, "http://[::1]bogus"), NNG_EINVAL); - TEST_NULL(url); + NUTS_FAIL(nng_url_parse(&url, "http://[::1"), NNG_EINVAL); + NUTS_NULL(url); + NUTS_FAIL(nng_url_parse(&url, "http://[::1]bogus"), NNG_EINVAL); + NUTS_NULL(url); } void test_url_canonify(void) { nng_url *url = NULL; - TEST_NNG_PASS(nng_url_parse( + NUTS_PASS(nng_url_parse( &url, "hTTp://www.EXAMPLE.com/bogus/.%2e/%7egarrett")); - TEST_ASSERT(url != NULL); - TEST_STREQUAL(url->u_scheme, "http"); - TEST_STREQUAL(url->u_hostname, "www.example.com"); - TEST_STREQUAL(url->u_port, "80"); - TEST_STREQUAL(url->u_path, "/~garrett"); + NUTS_ASSERT(url != NULL); + NUTS_MATCH(url->u_scheme, "http"); + NUTS_MATCH(url->u_hostname, "www.example.com"); + NUTS_MATCH(url->u_port, "80"); + NUTS_MATCH(url->u_path, "/~garrett"); nng_url_free(url); } @@ -347,12 +340,12 @@ void test_url_path_resolve(void) { nng_url *url = NULL; - TEST_NNG_PASS( + NUTS_PASS( nng_url_parse(&url, "http://www.x.com//abc/def/./x/..///./../y")); - TEST_STREQUAL(url->u_scheme, "http"); - TEST_STREQUAL(url->u_hostname, "www.x.com"); - TEST_STREQUAL(url->u_port, "80"); - TEST_STREQUAL(url->u_path, "/abc/y"); + NUTS_MATCH(url->u_scheme, "http"); + NUTS_MATCH(url->u_hostname, "www.x.com"); + NUTS_MATCH(url->u_port, "80"); + NUTS_MATCH(url->u_path, "/abc/y"); nng_url_free(url); } @@ -360,14 +353,14 @@ void test_url_query_info_pass(void) { nng_url *url = NULL; - TEST_NNG_PASS( + NUTS_PASS( nng_url_parse(&url, "http://www.x.com/?/abc/def/./x/.././../y")); - TEST_ASSERT(url != NULL); - TEST_STREQUAL(url->u_scheme, "http"); - TEST_STREQUAL(url->u_hostname, "www.x.com"); - TEST_STREQUAL(url->u_port, "80"); - TEST_STREQUAL(url->u_path, "/"); - TEST_STREQUAL(url->u_query, "/abc/def/./x/.././../y"); + NUTS_ASSERT(url != NULL); + NUTS_MATCH(url->u_scheme, "http"); + NUTS_MATCH(url->u_hostname, "www.x.com"); + NUTS_MATCH(url->u_port, "80"); + NUTS_MATCH(url->u_path, "/"); + NUTS_MATCH(url->u_query, "/abc/def/./x/.././../y"); nng_url_free(url); } @@ -375,22 +368,22 @@ void test_url_bad_utf8(void) { nng_url *url = NULL; - TEST_NNG_FAIL(nng_url_parse(&url, "http://x.com/x%80x"), NNG_EINVAL); - TEST_NULL(url); - TEST_NNG_FAIL(nng_url_parse(&url, "http://x.com/x%c0%81"), NNG_EINVAL); - TEST_NULL(url); + NUTS_FAIL(nng_url_parse(&url, "http://x.com/x%80x"), NNG_EINVAL); + NUTS_NULL(url); + NUTS_FAIL(nng_url_parse(&url, "http://x.com/x%c0%81"), NNG_EINVAL); + NUTS_NULL(url); } void test_url_good_utf8(void) { nng_url *url = NULL; - TEST_NNG_PASS(nng_url_parse(&url, "http://www.x.com/%c2%a2_cents")); - TEST_ASSERT(url != NULL); - TEST_STREQUAL(url->u_scheme, "http"); - TEST_STREQUAL(url->u_hostname, "www.x.com"); - TEST_STREQUAL(url->u_port, "80"); - TEST_STREQUAL(url->u_path, "/\xc2\xa2_cents"); + NUTS_PASS(nng_url_parse(&url, "http://www.x.com/%c2%a2_cents")); + NUTS_ASSERT(url != NULL); + NUTS_MATCH(url->u_scheme, "http"); + NUTS_MATCH(url->u_hostname, "www.x.com"); + NUTS_MATCH(url->u_port, "80"); + NUTS_MATCH(url->u_path, "/\xc2\xa2_cents"); nng_url_free(url); } @@ -402,55 +395,55 @@ test_url_decode(void) out[3] = 'x'; len = nni_url_decode(out, "abc", 3); - TEST_CHECK(len == 3); - TEST_CHECK(memcmp(out, "abc", 3) == 0); - TEST_CHECK(out[3] == 'x'); + NUTS_TRUE(len == 3); + NUTS_TRUE(memcmp(out, "abc", 3) == 0); + NUTS_TRUE(out[3] == 'x'); len = nni_url_decode(out, "x%00y", 3); // embedded NULL - TEST_CHECK(len == 3); - TEST_CHECK(memcmp(out, "x\x00y", 3) == 0); - TEST_CHECK(out[3] == 'x'); + NUTS_TRUE(len == 3); + NUTS_TRUE(memcmp(out, "x\x00y", 3) == 0); + NUTS_TRUE(out[3] == 'x'); len = nni_url_decode(out, "%3987", 3); - TEST_CHECK(len == 3); - TEST_CHECK(memcmp(out, "987", 3) == 0); - TEST_CHECK(out[3] == 'x'); + NUTS_TRUE(len == 3); + NUTS_TRUE(memcmp(out, "987", 3) == 0); + NUTS_TRUE(out[3] == 'x'); len = nni_url_decode(out, "78%39", 3); - TEST_CHECK(len == 3); - TEST_CHECK(memcmp(out, "789", 3) == 0); - TEST_CHECK(out[3] == 'x'); + NUTS_TRUE(len == 3); + NUTS_TRUE(memcmp(out, "789", 3) == 0); + NUTS_TRUE(out[3] == 'x'); - len = nni_url_decode(out, "", 5); - TEST_CHECK(len == 0); - TEST_CHECK(memcmp(out, "789", 3) == 0); - TEST_CHECK(out[3] == 'x'); + len = nni_url_decode(out, "", 5); + NUTS_TRUE(len == 0); + NUTS_TRUE(memcmp(out, "789", 3) == 0); + NUTS_TRUE(out[3] == 'x'); - len = nni_url_decode(out, "be", 2); - TEST_CHECK(len == 2); - TEST_CHECK(memcmp(out, "be9", 3) == 0); - TEST_CHECK(out[3] == 'x'); + len = nni_url_decode(out, "be", 2); + NUTS_TRUE(len == 2); + NUTS_TRUE(memcmp(out, "be9", 3) == 0); + NUTS_TRUE(out[3] == 'x'); - len = nni_url_decode(out, "78%39", 2); - TEST_CHECK(len == (size_t) -1); + len = nni_url_decode(out, "78%39", 2); + NUTS_TRUE(len == (size_t) -1); - len = nni_url_decode(out, "", 2); - TEST_CHECK(len == 0); + len = nni_url_decode(out, "", 2); + NUTS_TRUE(len == 0); - len = nni_url_decode(out, "78%", 5); - TEST_CHECK(len == (size_t) -1); + len = nni_url_decode(out, "78%", 5); + NUTS_TRUE(len == (size_t) -1); - len = nni_url_decode(out, "78%xy", 5); - TEST_CHECK(len == (size_t) -1); + len = nni_url_decode(out, "78%xy", 5); + NUTS_TRUE(len == (size_t) -1); - len = nni_url_decode(out, "78%1$", 5); - TEST_CHECK(len == (size_t) -1); + len = nni_url_decode(out, "78%1$", 5); + NUTS_TRUE(len == (size_t) -1); - len = nni_url_decode(out, "%%20", 5); - TEST_CHECK(len == (size_t) -1); + len = nni_url_decode(out, "%%20", 5); + NUTS_TRUE(len == (size_t) -1); } -TEST_LIST = { +NUTS_TESTS = { { "url host", test_url_host }, { "url host port", test_url_host_port }, { "url host port path", test_url_host_port_path }, diff --git a/src/platform/platform_test.c b/src/platform/platform_test.c index e7dcabaa..900efe36 100644 --- a/src/platform/platform_test.c +++ b/src/platform/platform_test.c @@ -8,17 +8,13 @@ // found online at https://opensource.org/licenses/MIT. // -#include "testutil.h" - -#include <nng/nng.h> -#include <nng/supplemental/util/platform.h> - -#include "acutest.h" +#include <nuts.h> struct add_arg { - int cnt; - nng_mtx *mx; - nng_cv * cv; + int cnt; + nng_duration delay; + nng_mtx * mx; + nng_cv * cv; }; void @@ -26,58 +22,51 @@ add(void *arg) { struct add_arg *aa = arg; + if (aa->delay > 0) { + nng_msleep(aa->delay); + } nng_mtx_lock(aa->mx); aa->cnt++; nng_cv_wake(aa->cv); nng_mtx_unlock(aa->mx); } +#ifdef __has_feature +#if __has_feature(thread_sanitizer) || __has_feature(memory_sanitizer) +#define RELAXED_CLOCKS +#endif +#endif + void test_sleep(void) { - uint64_t start, end; - start = testutil_clock(); + uint64_t start; + NUTS_CLOCK(start); nng_msleep(100); - end = testutil_clock(); - TEST_CHECK((end - start) >= 100); -#ifdef __has_feature -#if !__has_feature(thread_sanitizer) && !__has_feature(memory_sanitizer) - TEST_CHECK((end - start) <= 500); -#endif + NUTS_AFTER(start + 100); +#ifndef RELAXED_CLOCKS + NUTS_BEFORE(start + 500); #endif } void test_clock(void) { - uint64_t mstart; - uint64_t msend; - nng_time usend; - nng_time usnow; + uint64_t s0, s1; + nng_time t0, t1; - mstart = testutil_clock(); - usnow = nng_clock(); + NUTS_CLOCK(s0); + t0 = nng_clock(); nng_msleep(200); - usend = nng_clock(); - msend = testutil_clock(); + t1 = nng_clock(); + NUTS_CLOCK(s1); - TEST_CHECK(usend > usnow); - TEST_CHECK(msend > mstart); + NUTS_TRUE(t1 > t0); + NUTS_TRUE((t1 - t0) >= 200); + NUTS_TRUE((t1 - t0) < 500); -#ifdef __has_feature -#if !__has_feature(thread_sanitizer) && !__has_feature(memory_sanitizer) - uint64_t usdelta; - uint64_t msdelta; - usdelta = usend - usnow; - msdelta = msend - mstart; - TEST_CHECK(usdelta >= 200); - TEST_CHECK(usdelta < 500); // increased tolerance for CIs - if (msdelta > usdelta) { - TEST_CHECK((msdelta - usdelta) < 50); - } else { - TEST_CHECK((usdelta - msdelta) < 50); - } -#endif +#ifndef RELAXED_CLOCKS + NUTS_TRUE(abs((int) (s1 - s0) - (int) (t1 - t0)) < 50); #endif } @@ -86,7 +75,7 @@ test_mutex(void) { nng_mtx *mx, *mx2; - TEST_CHECK(nng_mtx_alloc(&mx) == 0); + NUTS_PASS(nng_mtx_alloc(&mx)); nng_mtx_lock(mx); nng_mtx_unlock(mx); @@ -95,9 +84,9 @@ test_mutex(void) nng_mtx_free(mx); // Verify that the mutexes are not always the same! - TEST_CHECK(nng_mtx_alloc(&mx) == 0); - TEST_CHECK(nng_mtx_alloc(&mx2) == 0); - TEST_CHECK(mx != mx2); + NUTS_PASS(nng_mtx_alloc(&mx)); + NUTS_PASS(nng_mtx_alloc(&mx2)); + NUTS_TRUE(mx != mx2); nng_mtx_free(mx); nng_mtx_free(mx2); } @@ -106,16 +95,16 @@ void test_thread(void) { nng_thread * thr; - int rv; struct add_arg aa; - TEST_CHECK(nng_mtx_alloc(&aa.mx) == 0); - TEST_CHECK(nng_cv_alloc(&aa.cv, aa.mx) == 0); - aa.cnt = 0; + NUTS_PASS(nng_mtx_alloc(&aa.mx)); + NUTS_PASS(nng_cv_alloc(&aa.cv, aa.mx)); + aa.cnt = 0; + aa.delay = 0; - TEST_CHECK((rv = nng_thread_create(&thr, add, &aa)) == 0); + NUTS_PASS(nng_thread_create(&thr, add, &aa)); nng_thread_destroy(thr); - TEST_CHECK(aa.cnt == 1); + NUTS_TRUE(aa.cnt == 1); nng_cv_free(aa.cv); nng_mtx_free(aa.mx); @@ -124,15 +113,15 @@ test_thread(void) void test_cond_var(void) { - nng_thread * thr; - int rv; + nng_thread * thr; struct add_arg aa; - TEST_CHECK(nng_mtx_alloc(&aa.mx) == 0); - TEST_CHECK(nng_cv_alloc(&aa.cv, aa.mx) == 0); - aa.cnt = 0; + NUTS_PASS(nng_mtx_alloc(&aa.mx)); + NUTS_PASS(nng_cv_alloc(&aa.cv, aa.mx)); + aa.cnt = 0; + aa.delay = 0; - TEST_CHECK((rv = nng_thread_create(&thr, add, &aa)) == 0); + NUTS_PASS(nng_thread_create(&thr, add, &aa)); nng_mtx_lock(aa.mx); while (aa.cnt == 0) { @@ -140,7 +129,64 @@ test_cond_var(void) } nng_mtx_unlock(aa.mx); nng_thread_destroy(thr); - TEST_CHECK(aa.cnt == 1); + NUTS_TRUE(aa.cnt == 1); + + nng_cv_free(aa.cv); + nng_mtx_free(aa.mx); +} + +void +test_cond_wake(void) +{ + nng_thread * thr; + struct add_arg aa; + nng_time now; + + NUTS_PASS(nng_mtx_alloc(&aa.mx)); + NUTS_PASS(nng_cv_alloc(&aa.cv, aa.mx)); + aa.cnt = 0; + aa.delay = 200; + + now = nng_clock(); + + NUTS_PASS(nng_thread_create(&thr, add, &aa)); + + nng_mtx_lock(aa.mx); + nng_cv_until(aa.cv, now + 500); + nng_mtx_unlock(aa.mx); + + NUTS_TRUE(nng_clock() >= now + 200); + NUTS_TRUE(nng_clock() < now + 500); + + nng_thread_destroy(thr); + nng_cv_free(aa.cv); + nng_mtx_free(aa.mx); +} + +void +test_cond_until(void) +{ + struct add_arg aa; + nng_time now; + + NUTS_PASS(nng_mtx_alloc(&aa.mx)); + NUTS_PASS(nng_cv_alloc(&aa.cv, aa.mx)); + aa.cnt = 0; + aa.delay = 0; + + now = nng_clock(); + nng_mtx_lock(aa.mx); + nng_cv_until(aa.cv, now + 100); + nng_mtx_unlock(aa.mx); + + NUTS_TRUE(nng_clock() >= now); +#ifdef NO_SPRIOUS_WAKEUPS + // Some systems (e.g. Win32) will occasionally wake a threaed + // spuriously. We therefore can't rely on condwait to be + // an absolute guarantee of minimum time passage. + NUTS_TRUE(nng_clock() >= now + 100); +#endif + NUTS_TRUE(nng_clock() < now + 1000); nng_cv_free(aa.cv); nng_mtx_free(aa.mx); @@ -166,16 +212,18 @@ test_random(void) // 1% reproduction is *highly* unlikely. // There are 4 billion possible options, we are only looking at // 1000 of them. In general, it would be an extreme outlier - // to see more than 2 repeats, unless you RNG is biased. - TEST_CHECK_(same < 5, "fewer than 5 in 1000 repeats: %d", same); + // to see more than 2 repeats, unless your RNG is biased. + NUTS_TRUE(same < 5); } -TEST_LIST = { +NUTS_TESTS = { { "sleep", test_sleep }, { "clock", test_clock }, { "mutex", test_mutex }, { "thread", test_thread }, { "cond var", test_cond_var }, + { "cond wake", test_cond_wake }, + { "cond until", test_cond_until }, { "random", test_random }, { NULL, NULL }, }; diff --git a/src/platform/resolver_test.c b/src/platform/resolver_test.c index 43168cdb..d4dd4465 100644 --- a/src/platform/resolver_test.c +++ b/src/platform/resolver_test.c @@ -8,18 +8,9 @@ // found online at https://opensource.org/licenses/MIT. // -#include "testutil.h" - -#include <string.h> - #include "core/nng_impl.h" -#include "stubs.h" - -#include "acutest.h" -#ifndef _WIN32 -#include <arpa/inet.h> // for htons, htonl -#endif +#include <nuts.h> uint8_t v6loop[16] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; @@ -29,14 +20,14 @@ test_google_dns(void) nng_aio * aio; nng_sockaddr sa; - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); nni_resolv_ip("google-public-dns-a.google.com", "80", NNG_AF_INET, true, &sa, aio); nng_aio_wait(aio); - TEST_NNG_PASS(nng_aio_result(aio)); - TEST_CHECK(sa.s_in.sa_family == NNG_AF_INET); - TEST_CHECK(sa.s_in.sa_port == ntohs(80)); - TEST_CHECK(sa.s_in.sa_addr == 0x08080808); // aka 8.8.8.8 + NUTS_PASS(nng_aio_result(aio)); + NUTS_TRUE(sa.s_in.sa_family == NNG_AF_INET); + NUTS_TRUE(sa.s_in.sa_port == nuts_be16(80)); + NUTS_TRUE(sa.s_in.sa_addr == 0x08080808); // aka 8.8.8.8 nng_aio_free(aio); } @@ -46,13 +37,13 @@ test_numeric_addr(void) nng_aio * aio; nng_sockaddr sa; - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); nni_resolv_ip("8.8.4.4", "69", NNG_AF_INET, true, &sa, aio); nng_aio_wait(aio); - TEST_NNG_PASS(nng_aio_result(aio)); - TEST_CHECK(sa.s_in.sa_family == NNG_AF_INET); - TEST_CHECK(sa.s_in.sa_port == ntohs(69)); - TEST_CHECK(sa.s_in.sa_addr == ntohl(0x08080404)); // 8.8.4.4. + NUTS_PASS(nng_aio_result(aio)); + NUTS_TRUE(sa.s_in.sa_family == NNG_AF_INET); + NUTS_TRUE(sa.s_in.sa_port == nuts_be16(69)); + NUTS_TRUE(sa.s_in.sa_addr == nuts_be32(0x08080404)); // 8.8.4.4. nng_aio_free(aio); } @@ -69,13 +60,13 @@ test_numeric_v6(void) return; // skip this one. } - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); nni_resolv_ip("::1", "80", NNG_AF_INET6, true, &sa, aio); nng_aio_wait(aio); - TEST_NNG_PASS(nng_aio_result(aio)); - TEST_CHECK(sa.s_in6.sa_family == NNG_AF_INET6); - TEST_CHECK(sa.s_in6.sa_port == ntohs(80)); - TEST_CHECK(memcmp(sa.s_in6.sa_addr, v6loop, 16) == 0); + NUTS_PASS(nng_aio_result(aio)); + NUTS_TRUE(sa.s_in6.sa_family == NNG_AF_INET6); + NUTS_TRUE(sa.s_in6.sa_port == nuts_be16(80)); + NUTS_TRUE(memcmp(sa.s_in6.sa_addr, v6loop, 16) == 0); nng_aio_free(aio); } @@ -85,12 +76,12 @@ test_service_names(void) nng_aio * aio; nng_sockaddr sa; - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); nni_resolv_ip("8.8.4.4", "http", NNG_AF_INET, true, &sa, aio); nng_aio_wait(aio); - TEST_NNG_PASS(nng_aio_result(aio)); - TEST_CHECK(sa.s_in.sa_port == ntohs(80)); - TEST_CHECK(sa.s_in.sa_addr = ntohl(0x08080404)); + NUTS_PASS(nng_aio_result(aio)); + NUTS_TRUE(sa.s_in.sa_port == nuts_be16(80)); + NUTS_TRUE(sa.s_in.sa_addr = nuts_be32(0x08080404)); nng_aio_free(aio); } @@ -100,36 +91,36 @@ test_localhost_v4(void) nng_aio * aio; nng_sockaddr sa; - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); nni_resolv_ip("localhost", "80", NNG_AF_INET, true, &sa, aio); nng_aio_wait(aio); - TEST_NNG_PASS(nng_aio_result(aio)); - TEST_CHECK(sa.s_in.sa_family == NNG_AF_INET); - TEST_CHECK(sa.s_in.sa_port == ntohs(80)); - TEST_CHECK(sa.s_in.sa_addr == ntohl(0x7f000001)); + NUTS_PASS(nng_aio_result(aio)); + NUTS_TRUE(sa.s_in.sa_family == NNG_AF_INET); + NUTS_TRUE(sa.s_in.sa_port == nuts_be16(80)); + NUTS_TRUE(sa.s_in.sa_addr == nuts_be32(0x7f000001)); nng_aio_free(aio); } void -test_localhost_unspec(void) +test_localhost_unspecified(void) { nng_aio * aio; nng_sockaddr sa; - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); nni_resolv_ip("localhost", "80", NNG_AF_UNSPEC, true, &sa, aio); nng_aio_wait(aio); - TEST_NNG_PASS(nng_aio_result(aio)); - TEST_CHECK( + NUTS_PASS(nng_aio_result(aio)); + NUTS_TRUE( (sa.s_family == NNG_AF_INET) || (sa.s_family == NNG_AF_INET6)); switch (sa.s_family) { case NNG_AF_INET: - TEST_CHECK(sa.s_in.sa_port == ntohs(80)); - TEST_CHECK(sa.s_in.sa_addr == ntohl(0x7f000001)); + NUTS_TRUE(sa.s_in.sa_port == nuts_be16(80)); + NUTS_TRUE(sa.s_in.sa_addr == nuts_be32(0x7f000001)); break; case NNG_AF_INET6: - TEST_CHECK(sa.s_in6.sa_port == ntohs(80)); - TEST_CHECK(memcmp(sa.s_in6.sa_addr, v6loop, 16) == 0); + NUTS_TRUE(sa.s_in6.sa_port == nuts_be16(80)); + NUTS_TRUE(memcmp(sa.s_in6.sa_addr, v6loop, 16) == 0); break; } nng_aio_free(aio); @@ -141,13 +132,13 @@ test_null_passive(void) nng_aio * aio; nng_sockaddr sa; - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); nni_resolv_ip(NULL, "80", NNG_AF_INET, true, &sa, aio); nng_aio_wait(aio); - TEST_NNG_PASS(nng_aio_result(aio)); - TEST_CHECK(sa.s_in.sa_family == NNG_AF_INET); - TEST_CHECK(sa.s_in.sa_port == ntohs(80)); - TEST_CHECK(sa.s_in.sa_addr == 0); // INADDR_ANY + NUTS_PASS(nng_aio_result(aio)); + NUTS_TRUE(sa.s_in.sa_family == NNG_AF_INET); + NUTS_TRUE(sa.s_in.sa_port == nuts_be16(80)); + NUTS_TRUE(sa.s_in.sa_addr == 0); // any local address nng_aio_free(aio); } @@ -157,17 +148,17 @@ test_null_not_passive(void) nng_aio * aio; nng_sockaddr sa; - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); nni_resolv_ip(NULL, "80", NNG_AF_INET, false, &sa, aio); nng_aio_wait(aio); - // We can either get NNG_EADDRINVAL, or a loopback address. + // We can either get invalid address, or a loopback address. // Most systems do the former, but Linux does the latter. if (nng_aio_result(aio) == 0) { - TEST_CHECK(sa.s_family == NNG_AF_INET); - TEST_CHECK(sa.s_in.sa_addr == htonl(0x7f000001)); - TEST_CHECK(sa.s_in.sa_port == htons(80)); + NUTS_TRUE(sa.s_family == NNG_AF_INET); + NUTS_TRUE(sa.s_in.sa_addr == nuts_be32(0x7f000001)); + NUTS_TRUE(sa.s_in.sa_port == nuts_be16(80)); } else { - TEST_NNG_FAIL(nng_aio_result(aio), NNG_EADDRINVAL); + NUTS_FAIL(nng_aio_result(aio), NNG_EADDRINVAL); } nng_aio_free(aio); } @@ -178,20 +169,20 @@ test_bad_port_number(void) nng_aio * aio; nng_sockaddr sa; - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); nni_resolv_ip("1.1.1.1", "1000000", NNG_AF_INET, true, &sa, aio); nng_aio_wait(aio); - TEST_NNG_FAIL(nng_aio_result(aio), NNG_EADDRINVAL); + NUTS_FAIL(nng_aio_result(aio), NNG_EADDRINVAL); nng_aio_free(aio); } -TEST_LIST = { +NUTS_TESTS = { { "resolve google dns", test_google_dns }, { "resolve numeric addr", test_numeric_addr }, { "resolve numeric v6", test_numeric_v6 }, { "resolve service names", test_service_names }, { "resolve localhost v4", test_localhost_v4 }, - { "resolve localhost unspec", test_localhost_unspec }, + { "resolve localhost unspecified", test_localhost_unspecified }, { "resolve null passive", test_null_passive }, { "resolve null not passive", test_null_not_passive }, { "resolve bad port number", test_bad_port_number }, diff --git a/src/protocol/bus0/bug1247_test.c b/src/protocol/bus0/bug1247_test.c index 6f418f53..bbc6958b 100644 --- a/src/protocol/bus0/bug1247_test.c +++ b/src/protocol/bus0/bug1247_test.c @@ -7,30 +7,26 @@ // found online at https://opensource.org/licenses/MIT. // -#include <string.h> +#include <nuts.h> -#include <nng/nng.h> #include <nng/protocol/bus0/bus.h> -#include "acutest.h" -#include "testutil.h" - void test_bug1247(void) { nng_socket bus1, bus2; - char addr[64]; + char * addr; - testutil_scratch_addr("tcp", sizeof(addr), addr); + NUTS_ADDR(addr, "tcp"); - TEST_NNG_PASS(nng_bus0_open(&bus1)); - TEST_NNG_PASS(nng_bus0_open(&bus2)); + NUTS_PASS(nng_bus0_open(&bus1)); + NUTS_PASS(nng_bus0_open(&bus2)); - TEST_NNG_PASS(nng_listen(bus1, addr, NULL, 0)); - TEST_NNG_FAIL(nng_listen(bus2, addr, NULL, 0), NNG_EADDRINUSE); + NUTS_PASS(nng_listen(bus1, addr, NULL, 0)); + NUTS_FAIL(nng_listen(bus2, addr, NULL, 0), NNG_EADDRINUSE); - TEST_NNG_PASS(nng_close(bus2)); - TEST_NNG_PASS(nng_close(bus1)); + NUTS_PASS(nng_close(bus2)); + NUTS_PASS(nng_close(bus1)); } TEST_LIST = { diff --git a/src/protocol/pair1/pair1_poly_test.c b/src/protocol/pair1/pair1_poly_test.c index c4acbd86..f26f7809 100644 --- a/src/protocol/pair1/pair1_poly_test.c +++ b/src/protocol/pair1/pair1_poly_test.c @@ -8,22 +8,35 @@ // found online at https://opensource.org/licenses/MIT. // -#include <string.h> - -#include <nng/nng.h> -#include <nng/protocol/pair0/pair.h> -#include <nng/protocol/pair1/pair.h> - -#include <testutil.h> - -#include <acutest.h> +#include <nuts.h> #define SECOND 1000 -#define APPEND_STR(m, s) TEST_NNG_PASS(nng_msg_append(m, s, strlen(s))) -#define CHECK_STR(m, s) \ - TEST_CHECK(nng_msg_len(m) == strlen(s)); \ - TEST_CHECK(memcmp(nng_msg_body(m), s, strlen(s)) == 0) +#define APPEND_STR(m, s) NUTS_PASS(nng_msg_append(m, s, strlen(s))) +#define CHECK_STR(m, s) \ + NUTS_TRUE(nng_msg_len(m) == strlen(s)); \ + NUTS_TRUE(memcmp(nng_msg_body(m), s, strlen(s)) == 0) + +static void +test_poly_identity(void) +{ + nng_socket s; + int p; + char * n; + + NUTS_PASS(nng_pair1_open_poly(&s)); + NUTS_PASS(nng_socket_get_int(s, NNG_OPT_PROTO, &p)); + NUTS_TRUE(p == NUTS_PROTO(1u, 1u)); // 32 + NUTS_PASS(nng_socket_get_int(s, NNG_OPT_PEER, &p)); + NUTS_TRUE(p == NUTS_PROTO(1u, 1u)); // 33 + NUTS_PASS(nng_socket_get_string(s, NNG_OPT_PROTONAME, &n)); + NUTS_MATCH(n, "pair1"); + nng_strfree(n); + NUTS_PASS(nng_socket_get_string(s, NNG_OPT_PEERNAME, &n)); + NUTS_MATCH(n, "pair1"); + nng_strfree(n); + NUTS_CLOSE(s); +} void test_poly_best_effort(void) @@ -32,23 +45,23 @@ test_poly_best_effort(void) nng_socket c1; nng_msg * msg; - TEST_NNG_PASS(nng_pair1_open_poly(&s1)); - TEST_NNG_PASS(nng_pair1_open(&c1)); + NUTS_PASS(nng_pair1_open_poly(&s1)); + NUTS_PASS(nng_pair1_open(&c1)); - TEST_NNG_PASS(nng_setopt_int(s1, NNG_OPT_RECVBUF, 1)); - TEST_NNG_PASS(nng_setopt_int(s1, NNG_OPT_SENDBUF, 1)); - TEST_NNG_PASS(nng_setopt_int(c1, NNG_OPT_RECVBUF, 1)); - TEST_NNG_PASS(nng_setopt_ms(s1, NNG_OPT_SENDTIMEO, SECOND)); + NUTS_PASS(nng_setopt_int(s1, NNG_OPT_RECVBUF, 1)); + NUTS_PASS(nng_setopt_int(s1, NNG_OPT_SENDBUF, 1)); + NUTS_PASS(nng_setopt_int(c1, NNG_OPT_RECVBUF, 1)); + NUTS_PASS(nng_setopt_ms(s1, NNG_OPT_SENDTIMEO, SECOND)); - TEST_NNG_PASS(testutil_marry(s1, c1)); + NUTS_MARRY(s1, c1); for (int i = 0; i < 10; i++) { - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); - TEST_NNG_PASS(nng_sendmsg(s1, msg, 0)); + NUTS_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_sendmsg(s1, msg, 0)); } - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(c1)); + NUTS_CLOSE(s1); + NUTS_CLOSE(c1); } void @@ -62,69 +75,69 @@ test_poly_cooked(void) nng_pipe p1; nng_pipe p2; - TEST_NNG_PASS(nng_pair1_open_poly(&s1)); - TEST_NNG_PASS(nng_pair1_open(&c1)); - TEST_NNG_PASS(nng_pair1_open(&c2)); - TEST_NNG_PASS(nng_setopt_ms(s1, NNG_OPT_SENDTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(c1, NNG_OPT_SENDTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(c2, NNG_OPT_SENDTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(s1, NNG_OPT_RECVTIMEO, SECOND / 10)); - TEST_NNG_PASS(nng_setopt_ms(c1, NNG_OPT_RECVTIMEO, SECOND / 10)); - TEST_NNG_PASS(nng_setopt_ms(c2, NNG_OPT_RECVTIMEO, SECOND / 10)); + NUTS_PASS(nng_pair1_open_poly(&s1)); + NUTS_PASS(nng_pair1_open(&c1)); + NUTS_PASS(nng_pair1_open(&c2)); + NUTS_PASS(nng_setopt_ms(s1, NNG_OPT_SENDTIMEO, SECOND)); + NUTS_PASS(nng_setopt_ms(c1, NNG_OPT_SENDTIMEO, SECOND)); + NUTS_PASS(nng_setopt_ms(c2, NNG_OPT_SENDTIMEO, SECOND)); + NUTS_PASS(nng_setopt_ms(s1, NNG_OPT_RECVTIMEO, SECOND / 10)); + NUTS_PASS(nng_setopt_ms(c1, NNG_OPT_RECVTIMEO, SECOND / 10)); + NUTS_PASS(nng_setopt_ms(c2, NNG_OPT_RECVTIMEO, SECOND / 10)); - TEST_NNG_PASS(nng_getopt_bool(s1, NNG_OPT_PAIR1_POLY, &v)); - TEST_CHECK(v == true); + NUTS_PASS(nng_getopt_bool(s1, NNG_OPT_PAIR1_POLY, &v)); + NUTS_TRUE(v); - TEST_NNG_PASS(testutil_marry(s1, c1)); - TEST_NNG_PASS(testutil_marry(s1, c2)); + NUTS_MARRY(s1, c1); + NUTS_MARRY(s1, c2); - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_msg_alloc(&msg, 0)); APPEND_STR(msg, "ONE"); - TEST_NNG_PASS(nng_sendmsg(c1, msg, 0)); - TEST_NNG_PASS(nng_recvmsg(s1, &msg, 0)); + NUTS_PASS(nng_sendmsg(c1, msg, 0)); + NUTS_PASS(nng_recvmsg(s1, &msg, 0)); CHECK_STR(msg, "ONE"); p1 = nng_msg_get_pipe(msg); - TEST_CHECK(nng_pipe_id(p1) > 0); + NUTS_TRUE(nng_pipe_id(p1) > 0); nng_msg_free(msg); - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_msg_alloc(&msg, 0)); APPEND_STR(msg, "TWO"); - TEST_NNG_PASS(nng_sendmsg(c2, msg, 0)); - TEST_NNG_PASS(nng_recvmsg(s1, &msg, 0)); + NUTS_PASS(nng_sendmsg(c2, msg, 0)); + NUTS_PASS(nng_recvmsg(s1, &msg, 0)); CHECK_STR(msg, "TWO"); p2 = nng_msg_get_pipe(msg); - TEST_CHECK(nng_pipe_id(p2) > 0); + NUTS_TRUE(nng_pipe_id(p2) > 0); nng_msg_free(msg); - TEST_CHECK(nng_pipe_id(p1) != nng_pipe_id(p2)); + NUTS_TRUE(nng_pipe_id(p1) != nng_pipe_id(p2)); - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_msg_alloc(&msg, 0)); nng_msg_set_pipe(msg, p1); APPEND_STR(msg, "UNO"); - TEST_NNG_PASS(nng_sendmsg(s1, msg, 0)); - TEST_NNG_PASS(nng_recvmsg(c1, &msg, 0)); + NUTS_PASS(nng_sendmsg(s1, msg, 0)); + NUTS_PASS(nng_recvmsg(c1, &msg, 0)); CHECK_STR(msg, "UNO"); nng_msg_free(msg); - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_msg_alloc(&msg, 0)); nng_msg_set_pipe(msg, p2); APPEND_STR(msg, "DOS"); - TEST_NNG_PASS(nng_sendmsg(s1, msg, 0)); - TEST_NNG_PASS(nng_recvmsg(c2, &msg, 0)); + NUTS_PASS(nng_sendmsg(s1, msg, 0)); + NUTS_PASS(nng_recvmsg(c2, &msg, 0)); CHECK_STR(msg, "DOS"); nng_msg_free(msg); - TEST_NNG_PASS(nng_close(c1)); + NUTS_PASS(nng_close(c1)); - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_msg_alloc(&msg, 0)); nng_msg_set_pipe(msg, p1); APPEND_STR(msg, "EIN"); - TEST_NNG_PASS(nng_sendmsg(s1, msg, 0)); - TEST_NNG_FAIL(nng_recvmsg(c2, &msg, 0), NNG_ETIMEDOUT); + NUTS_PASS(nng_sendmsg(s1, msg, 0)); + NUTS_FAIL(nng_recvmsg(c2, &msg, 0), NNG_ETIMEDOUT); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(c2)); + NUTS_CLOSE(s1); + NUTS_CLOSE(c2); } void @@ -135,38 +148,38 @@ test_poly_default(void) nng_socket c2; nng_msg * msg; - TEST_NNG_PASS(nng_pair1_open_poly(&s1)); - TEST_NNG_PASS(nng_pair1_open(&c1)); - TEST_NNG_PASS(nng_pair1_open(&c2)); - TEST_NNG_PASS(nng_setopt_ms(s1, NNG_OPT_SENDTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(c1, NNG_OPT_SENDTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(c2, NNG_OPT_SENDTIMEO, SECOND)); + NUTS_PASS(nng_pair1_open_poly(&s1)); + NUTS_PASS(nng_pair1_open(&c1)); + NUTS_PASS(nng_pair1_open(&c2)); + NUTS_PASS(nng_setopt_ms(s1, NNG_OPT_SENDTIMEO, SECOND)); + NUTS_PASS(nng_setopt_ms(c1, NNG_OPT_SENDTIMEO, SECOND)); + NUTS_PASS(nng_setopt_ms(c2, NNG_OPT_SENDTIMEO, SECOND)); - TEST_NNG_PASS(testutil_marry(s1, c1)); - TEST_NNG_PASS(testutil_marry(s1, c2)); + NUTS_MARRY(s1, c1); + NUTS_MARRY(s1, c2); // This assumes poly picks the first suitor. Applications // should not make the same assumption. - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_msg_alloc(&msg, 0)); APPEND_STR(msg, "YES"); - TEST_NNG_PASS(nng_sendmsg(s1, msg, 0)); - TEST_NNG_PASS(nng_recvmsg(c1, &msg, 0)); + NUTS_PASS(nng_sendmsg(s1, msg, 0)); + NUTS_PASS(nng_recvmsg(c1, &msg, 0)); CHECK_STR(msg, "YES"); nng_msg_free(msg); - TEST_NNG_PASS(nng_close(c1)); - testutil_sleep(10); + NUTS_CLOSE(c1); + NUTS_SLEEP(10); // Verify that the other pipe is chosen as the next suitor. - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_msg_alloc(&msg, 0)); APPEND_STR(msg, "AGAIN"); - TEST_NNG_PASS(nng_sendmsg(s1, msg, 0)); - TEST_NNG_PASS(nng_recvmsg(c2, &msg, 0)); + NUTS_PASS(nng_sendmsg(s1, msg, 0)); + NUTS_PASS(nng_recvmsg(c2, &msg, 0)); CHECK_STR(msg, "AGAIN"); nng_msg_free(msg); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(c2)); + NUTS_CLOSE(s1); + NUTS_CLOSE(c2); } void @@ -175,25 +188,24 @@ test_poly_close_abort(void) nng_socket s; nng_socket c; - TEST_NNG_PASS(nng_pair1_open_poly(&s)); - TEST_NNG_PASS(nng_pair1_open(&c)); - TEST_NNG_PASS(nng_setopt_ms(s, NNG_OPT_RECVTIMEO, 100)); - TEST_NNG_PASS(nng_setopt_ms(s, NNG_OPT_SENDTIMEO, 200)); - TEST_NNG_PASS(nng_setopt_int(s, NNG_OPT_RECVBUF, 1)); - TEST_NNG_PASS(nng_setopt_int(c, NNG_OPT_SENDBUF, 20)); + NUTS_PASS(nng_pair1_open_poly(&s)); + NUTS_PASS(nng_pair1_open(&c)); + NUTS_PASS(nng_setopt_ms(s, NNG_OPT_RECVTIMEO, 100)); + NUTS_PASS(nng_setopt_ms(s, NNG_OPT_SENDTIMEO, 200)); + NUTS_PASS(nng_setopt_int(s, NNG_OPT_RECVBUF, 1)); + NUTS_PASS(nng_setopt_int(c, NNG_OPT_SENDBUF, 20)); - TEST_NNG_PASS(testutil_marry(c, s)); + NUTS_MARRY(c, s); for (int i = 0; i < 20; i++) { - TEST_NNG_SEND_STR(c, "TEST"); + NUTS_SEND(c, "TEST"); } - testutil_sleep(50); + NUTS_SLEEP(50); - TEST_NNG_PASS(nng_close(s)); - TEST_NNG_PASS(nng_close(c)); + NUTS_CLOSE(s); + NUTS_CLOSE(c); } - void test_poly_recv_no_header(void) { @@ -201,20 +213,20 @@ test_poly_recv_no_header(void) nng_socket c; nng_msg * m; - TEST_NNG_PASS(nng_pair1_open_poly(&s)); - TEST_NNG_PASS(nng_pair1_open(&c)); - TEST_NNG_PASS(nng_setopt_bool(c, "pair1_test_inject_header", true)); - TEST_NNG_PASS(nng_setopt_ms(s, NNG_OPT_RECVTIMEO, 100)); - TEST_NNG_PASS(nng_setopt_ms(s, NNG_OPT_SENDTIMEO, 200)); + NUTS_PASS(nng_pair1_open_poly(&s)); + NUTS_PASS(nng_pair1_open(&c)); + NUTS_PASS(nng_setopt_bool(c, "pair1_test_inject_header", true)); + NUTS_PASS(nng_setopt_ms(s, NNG_OPT_RECVTIMEO, 100)); + NUTS_PASS(nng_setopt_ms(s, NNG_OPT_SENDTIMEO, 200)); - TEST_NNG_PASS(testutil_marry(c, s)); + NUTS_MARRY(c, s); - TEST_NNG_PASS(nng_msg_alloc(&m, 0)); - TEST_NNG_PASS(nng_sendmsg(c, m, 0)); - TEST_NNG_FAIL(nng_recvmsg(s, &m, 0), NNG_ETIMEDOUT); + NUTS_PASS(nng_msg_alloc(&m, 0)); + NUTS_PASS(nng_sendmsg(c, m, 0)); + NUTS_FAIL(nng_recvmsg(s, &m, 0), NNG_ETIMEDOUT); - TEST_NNG_PASS(nng_close(c)); - TEST_NNG_PASS(nng_close(s)); + NUTS_CLOSE(c); + NUTS_CLOSE(s); } void @@ -224,22 +236,22 @@ test_poly_recv_garbage(void) nng_socket c; nng_msg * m; - TEST_NNG_PASS(nng_pair1_open_poly(&s)); - TEST_NNG_PASS(nng_pair1_open(&c)); - TEST_NNG_PASS(nng_setopt_bool(c, "pair1_test_inject_header", true)); - TEST_NNG_PASS(nng_setopt_ms(s, NNG_OPT_RECVTIMEO, 100)); - TEST_NNG_PASS(nng_setopt_ms(s, NNG_OPT_SENDTIMEO, 200)); + NUTS_PASS(nng_pair1_open_poly(&s)); + NUTS_PASS(nng_pair1_open(&c)); + NUTS_PASS(nng_setopt_bool(c, "pair1_test_inject_header", true)); + NUTS_PASS(nng_setopt_ms(s, NNG_OPT_RECVTIMEO, 100)); + NUTS_PASS(nng_setopt_ms(s, NNG_OPT_SENDTIMEO, 200)); - TEST_NNG_PASS(testutil_marry(c, s)); + NUTS_MARRY(c, s); // ridiculous hop count - TEST_NNG_PASS(nng_msg_alloc(&m, 0)); - TEST_NNG_PASS(nng_msg_append_u32(m, 0x1000)); - TEST_NNG_PASS(nng_sendmsg(c, m, 0)); - TEST_NNG_FAIL(nng_recvmsg(s, &m, 0), NNG_ETIMEDOUT); + NUTS_PASS(nng_msg_alloc(&m, 0)); + NUTS_PASS(nng_msg_append_u32(m, 0x1000)); + NUTS_PASS(nng_sendmsg(c, m, 0)); + NUTS_FAIL(nng_recvmsg(s, &m, 0), NNG_ETIMEDOUT); - TEST_NNG_PASS(nng_close(c)); - TEST_NNG_PASS(nng_close(s)); + NUTS_CLOSE(c); + NUTS_CLOSE(s); } void @@ -251,65 +263,65 @@ test_poly_ttl(void) uint32_t val; int ttl; - TEST_NNG_PASS(nng_pair1_open_poly(&s1)); - TEST_NNG_PASS(nng_pair1_open_raw(&c1)); - TEST_NNG_PASS(nng_setopt_ms(s1, NNG_OPT_RECVTIMEO, SECOND / 5)); - TEST_NNG_PASS(nng_setopt_ms(c1, NNG_OPT_RECVTIMEO, SECOND / 5)); + NUTS_PASS(nng_pair1_open_poly(&s1)); + NUTS_PASS(nng_pair1_open_raw(&c1)); + NUTS_PASS(nng_setopt_ms(s1, NNG_OPT_RECVTIMEO, SECOND / 5)); + NUTS_PASS(nng_setopt_ms(c1, NNG_OPT_RECVTIMEO, SECOND / 5)); // cannot set insane TTLs - TEST_NNG_FAIL(nng_setopt_int(s1, NNG_OPT_MAXTTL, 0), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_int(s1, NNG_OPT_MAXTTL, 1000), NNG_EINVAL); + NUTS_FAIL(nng_setopt_int(s1, NNG_OPT_MAXTTL, 0), NNG_EINVAL); + NUTS_FAIL(nng_setopt_int(s1, NNG_OPT_MAXTTL, 1000), NNG_EINVAL); ttl = 8; - TEST_NNG_FAIL(nng_setopt(s1, NNG_OPT_MAXTTL, &ttl, 1), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_bool(s1, NNG_OPT_MAXTTL, true), NNG_EBADTYPE); + NUTS_FAIL(nng_setopt(s1, NNG_OPT_MAXTTL, &ttl, 1), NNG_EINVAL); + NUTS_FAIL(nng_setopt_bool(s1, NNG_OPT_MAXTTL, true), NNG_EBADTYPE); - TEST_NNG_PASS(testutil_marry(s1, c1)); + NUTS_MARRY(s1, c1); // Let's check enforcement of TTL - TEST_NNG_PASS(nng_setopt_int(s1, NNG_OPT_MAXTTL, 4)); - TEST_NNG_PASS(nng_getopt_int(s1, NNG_OPT_MAXTTL, &ttl)); - TEST_CHECK(ttl == 4); + NUTS_PASS(nng_setopt_int(s1, NNG_OPT_MAXTTL, 4)); + NUTS_PASS(nng_getopt_int(s1, NNG_OPT_MAXTTL, &ttl)); + NUTS_TRUE(ttl == 4); // Bad TTL bounces - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); - TEST_NNG_PASS(nng_msg_header_append_u32(msg, 4)); - TEST_NNG_PASS(nng_sendmsg(c1, msg, 0)); - TEST_NNG_FAIL(nng_recvmsg(s1, &msg, 0), NNG_ETIMEDOUT); + NUTS_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_msg_header_append_u32(msg, 4)); + NUTS_PASS(nng_sendmsg(c1, msg, 0)); + NUTS_FAIL(nng_recvmsg(s1, &msg, 0), NNG_ETIMEDOUT); // Good TTL passes - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); - TEST_NNG_PASS(nng_msg_append_u32(msg, 0xFEEDFACE)); - TEST_NNG_PASS(nng_msg_header_append_u32(msg, 3)); - TEST_NNG_PASS(nng_sendmsg(c1, msg, 0)); - TEST_NNG_PASS(nng_recvmsg(s1, &msg, 0)); - TEST_NNG_PASS(nng_msg_trim_u32(msg, &val)); - TEST_CHECK(val == 0xFEEDFACE); - TEST_NNG_PASS(nng_msg_header_trim_u32(msg, &val)); - TEST_CHECK(val == 4); + NUTS_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_msg_append_u32(msg, 0xFEEDFACE)); + NUTS_PASS(nng_msg_header_append_u32(msg, 3)); + NUTS_PASS(nng_sendmsg(c1, msg, 0)); + NUTS_PASS(nng_recvmsg(s1, &msg, 0)); + NUTS_PASS(nng_msg_trim_u32(msg, &val)); + NUTS_TRUE(val == 0xFEEDFACE); + NUTS_PASS(nng_msg_header_trim_u32(msg, &val)); + NUTS_TRUE(val == 4); nng_msg_free(msg); // Large TTL passes - TEST_NNG_PASS(nng_setopt_int(s1, NNG_OPT_MAXTTL, 15)); - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); - TEST_NNG_PASS(nng_msg_append_u32(msg, 1234)); - TEST_NNG_PASS(nng_msg_header_append_u32(msg, 14)); - TEST_NNG_PASS(nng_sendmsg(c1, msg, 0)); - TEST_NNG_PASS(nng_recvmsg(s1, &msg, 0)); - TEST_NNG_PASS(nng_msg_trim_u32(msg, &val)); - TEST_CHECK(val == 1234); - TEST_NNG_PASS(nng_msg_header_trim_u32(msg, &val)); - TEST_CHECK(val == 15); + NUTS_PASS(nng_setopt_int(s1, NNG_OPT_MAXTTL, 15)); + NUTS_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_msg_append_u32(msg, 1234)); + NUTS_PASS(nng_msg_header_append_u32(msg, 14)); + NUTS_PASS(nng_sendmsg(c1, msg, 0)); + NUTS_PASS(nng_recvmsg(s1, &msg, 0)); + NUTS_PASS(nng_msg_trim_u32(msg, &val)); + NUTS_TRUE(val == 1234); + NUTS_PASS(nng_msg_header_trim_u32(msg, &val)); + NUTS_TRUE(val == 15); nng_msg_free(msg); // Max TTL fails - TEST_NNG_PASS(nng_setopt_int(s1, NNG_OPT_MAXTTL, 15)); - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); - TEST_NNG_PASS(nng_msg_header_append_u32(msg, 15)); - TEST_NNG_PASS(nng_sendmsg(c1, msg, 0)); - TEST_NNG_FAIL(nng_recvmsg(s1, &msg, 0), NNG_ETIMEDOUT); - - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(c1)); + NUTS_PASS(nng_setopt_int(s1, NNG_OPT_MAXTTL, 15)); + NUTS_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_msg_header_append_u32(msg, 15)); + NUTS_PASS(nng_sendmsg(c1, msg, 0)); + NUTS_FAIL(nng_recvmsg(s1, &msg, 0), NNG_ETIMEDOUT); + + NUTS_CLOSE(s1); + NUTS_CLOSE(c1); } void @@ -318,40 +330,41 @@ test_poly_validate_peer(void) nng_socket s1, s2; nng_stat * stats; nng_stat * reject; - char addr[64]; + char * addr; - testutil_scratch_addr("inproc", sizeof(addr), addr); + NUTS_ADDR(addr, "inproc"); - TEST_NNG_PASS(nng_pair1_open_poly(&s1)); - TEST_NNG_PASS(nng_pair0_open(&s2)); + NUTS_PASS(nng_pair1_open_poly(&s1)); + NUTS_PASS(nng_pair0_open(&s2)); - TEST_NNG_PASS(nng_listen(s1, addr, NULL, 0)); - TEST_NNG_PASS(nng_dial(s2, addr, NULL, NNG_FLAG_NONBLOCK)); + NUTS_PASS(nng_listen(s1, addr, NULL, 0)); + NUTS_PASS(nng_dial(s2, addr, NULL, NNG_FLAG_NONBLOCK)); - testutil_sleep(100); - TEST_NNG_PASS(nng_stats_get(&stats)); + NUTS_SLEEP(100); + NUTS_PASS(nng_stats_get(&stats)); - TEST_CHECK(stats != NULL); - TEST_CHECK((reject = nng_stat_find_socket(stats, s1)) != NULL); - TEST_CHECK((reject = nng_stat_find(reject, "reject")) != NULL); + NUTS_TRUE(stats != NULL); + NUTS_TRUE((reject = nng_stat_find_socket(stats, s1)) != NULL); + NUTS_TRUE((reject = nng_stat_find(reject, "reject")) != NULL); - TEST_CHECK(nng_stat_type(reject) == NNG_STAT_COUNTER); - TEST_CHECK(nng_stat_value(reject) > 0); + NUTS_TRUE(nng_stat_type(reject) == NNG_STAT_COUNTER); + NUTS_TRUE(nng_stat_value(reject) > 0); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(s2)); + NUTS_CLOSE(s1); + NUTS_CLOSE(s2); nng_stats_free(stats); } TEST_LIST = { - { "pair1 polyamorous best effort", test_poly_best_effort }, - { "pair1 polyamorous cooked", test_poly_cooked }, - { "pair1 polyamorous default", test_poly_default }, - { "pair1 polyamorous recv no header", test_poly_recv_no_header }, - { "pair1 polyamorous recv garbage", test_poly_recv_garbage }, - { "pair1 polyamorous ttl", test_poly_ttl }, - { "pair1 polyamorous close abort", test_poly_close_abort }, - { "pair1 polyamorous validate peer", test_poly_validate_peer }, + { "pair1 poly identity", test_poly_identity }, + { "pair1 poly best effort", test_poly_best_effort }, + { "pair1 poly cooked", test_poly_cooked }, + { "pair1 poly default", test_poly_default }, + { "pair1 poly recv no header", test_poly_recv_no_header }, + { "pair1 poly recv garbage", test_poly_recv_garbage }, + { "pair1 poly ttl", test_poly_ttl }, + { "pair1 poly close abort", test_poly_close_abort }, + { "pair1 poly validate peer", test_poly_validate_peer }, { NULL, NULL }, }; diff --git a/src/protocol/pair1/pair1_test.c b/src/protocol/pair1/pair1_test.c index 0f0131b5..881c4ac8 100644 --- a/src/protocol/pair1/pair1_test.c +++ b/src/protocol/pair1/pair1_test.c @@ -8,22 +8,35 @@ // found online at https://opensource.org/licenses/MIT. // -#include <string.h> - -#include <nng/nng.h> -#include <nng/protocol/pair0/pair.h> -#include <nng/protocol/pair1/pair.h> - -#include <testutil.h> - -#include <acutest.h> +#include <nuts.h> #define SECOND 1000 -#define APPEND_STR(m, s) TEST_CHECK(nng_msg_append(m, s, strlen(s)) == 0) -#define CHECK_STR(m, s) \ - TEST_CHECK(nng_msg_len(m) == strlen(s)); \ - TEST_CHECK(memcmp(nng_msg_body(m), s, strlen(s)) == 0) +#define APPEND_STR(m, s) NUTS_TRUE(nng_msg_append(m, s, strlen(s)) == 0) +#define CHECK_STR(m, s) \ + NUTS_TRUE(nng_msg_len(m) == strlen(s)); \ + NUTS_TRUE(memcmp(nng_msg_body(m), s, strlen(s)) == 0) + +static void +test_mono_identity(void) +{ + nng_socket s; + int p; + char * n; + + NUTS_PASS(nng_pair1_open(&s)); + NUTS_PASS(nng_socket_get_int(s, NNG_OPT_PROTO, &p)); + NUTS_TRUE(p == NUTS_PROTO(1u, 1u)); // 32 + NUTS_PASS(nng_socket_get_int(s, NNG_OPT_PEER, &p)); + NUTS_TRUE(p == NUTS_PROTO(1u, 1u)); // 33 + NUTS_PASS(nng_socket_get_string(s, NNG_OPT_PROTONAME, &n)); + NUTS_MATCH(n, "pair1"); + nng_strfree(n); + NUTS_PASS(nng_socket_get_string(s, NNG_OPT_PEERNAME, &n)); + NUTS_MATCH(n, "pair1"); + nng_strfree(n); + NUTS_CLOSE(s); +} void test_mono_cooked(void) @@ -32,28 +45,28 @@ test_mono_cooked(void) nng_socket c1; nng_msg * msg; - TEST_NNG_PASS(nng_pair1_open(&s1)); - TEST_NNG_PASS(nng_pair1_open(&c1)); - TEST_NNG_PASS(testutil_marry(s1, c1)); + NUTS_PASS(nng_pair1_open(&s1)); + NUTS_PASS(nng_pair1_open(&c1)); + NUTS_PASS(nuts_marry(s1, c1)); - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); - TEST_NNG_PASS(nng_msg_append(msg, "ALPHA", strlen("ALPHA") + 1)); - TEST_NNG_PASS(nng_sendmsg(c1, msg, 0)); - TEST_NNG_PASS(nng_recvmsg(s1, &msg, 0)); - TEST_CHECK(nng_msg_len(msg) == strlen("ALPHA") + 1); - TEST_CHECK(strcmp(nng_msg_body(msg), "ALPHA") == 0); + NUTS_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_msg_append(msg, "ALPHA", strlen("ALPHA") + 1)); + NUTS_PASS(nng_sendmsg(c1, msg, 0)); + NUTS_PASS(nng_recvmsg(s1, &msg, 0)); + NUTS_TRUE(nng_msg_len(msg) == strlen("ALPHA") + 1); + NUTS_MATCH(nng_msg_body(msg), "ALPHA"); nng_msg_free(msg); - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); - TEST_NNG_PASS(nng_msg_append(msg, "BETA", strlen("BETA") + 1)); - TEST_NNG_PASS(nng_sendmsg(s1, msg, 0)); - TEST_NNG_PASS(nng_recvmsg(c1, &msg, 0)); - TEST_CHECK(nng_msg_len(msg) == strlen("BETA") + 1); - TEST_CHECK(strcmp(nng_msg_body(msg), "BETA") == 0); + NUTS_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_msg_append(msg, "BETA", strlen("BETA") + 1)); + NUTS_PASS(nng_sendmsg(s1, msg, 0)); + NUTS_PASS(nng_recvmsg(c1, &msg, 0)); + NUTS_TRUE(nng_msg_len(msg) == strlen("BETA") + 1); + NUTS_MATCH(nng_msg_body(msg), "BETA"); nng_msg_free(msg); - TEST_NNG_PASS(nng_close(c1)); - TEST_NNG_PASS(nng_close(s1)); + NUTS_CLOSE(c1); + NUTS_CLOSE(s1); } void @@ -65,35 +78,35 @@ test_mono_faithful(void) nng_msg * msg; const char *addr = "inproc://pair1_mono_faithful"; - TEST_NNG_PASS(nng_pair1_open(&s1)); - TEST_NNG_PASS(nng_pair1_open(&c1)); - TEST_NNG_PASS(nng_pair1_open(&c2)); - TEST_NNG_PASS(nng_setopt_ms(s1, NNG_OPT_RECVTIMEO, SECOND / 4)); - TEST_NNG_PASS(nng_setopt_ms(c1, NNG_OPT_SENDTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(c2, NNG_OPT_SENDTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_int(c2, NNG_OPT_SENDBUF, 2)); + NUTS_PASS(nng_pair1_open(&s1)); + NUTS_PASS(nng_pair1_open(&c1)); + NUTS_PASS(nng_pair1_open(&c2)); + NUTS_PASS(nng_setopt_ms(s1, NNG_OPT_RECVTIMEO, SECOND / 4)); + NUTS_PASS(nng_setopt_ms(c1, NNG_OPT_SENDTIMEO, SECOND)); + NUTS_PASS(nng_setopt_ms(c2, NNG_OPT_SENDTIMEO, SECOND)); + NUTS_PASS(nng_setopt_int(c2, NNG_OPT_SENDBUF, 2)); - TEST_NNG_PASS(nng_listen(s1, addr, NULL, 0)); - TEST_NNG_PASS(testutil_marry(s1, c1)); - TEST_NNG_PASS(nng_dial(c2, addr, NULL, 0)); + NUTS_PASS(nng_listen(s1, addr, NULL, 0)); + NUTS_MARRY(s1, c1); + NUTS_PASS(nng_dial(c2, addr, NULL, 0)); - testutil_sleep(100); + NUTS_SLEEP(100); - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_msg_alloc(&msg, 0)); APPEND_STR(msg, "ONE"); - TEST_NNG_PASS(nng_sendmsg(c1, msg, 0)); - TEST_NNG_PASS(nng_recvmsg(s1, &msg, 0)); + NUTS_PASS(nng_sendmsg(c1, msg, 0)); + NUTS_PASS(nng_recvmsg(s1, &msg, 0)); CHECK_STR(msg, "ONE"); nng_msg_free(msg); - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_msg_alloc(&msg, 0)); APPEND_STR(msg, "TWO"); - TEST_NNG_PASS(nng_sendmsg(c2, msg, 0)); - TEST_NNG_FAIL(nng_recvmsg(s1, &msg, 0), NNG_ETIMEDOUT); + NUTS_PASS(nng_sendmsg(c2, msg, 0)); + NUTS_FAIL(nng_recvmsg(s1, &msg, 0), NNG_ETIMEDOUT); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(c1)); - TEST_NNG_PASS(nng_close(c2)); + NUTS_CLOSE(s1); + NUTS_CLOSE(c1); + NUTS_CLOSE(c2); } void @@ -106,28 +119,28 @@ test_mono_back_pressure(void) nng_msg * msg; nng_duration to = 100; - TEST_NNG_PASS(nng_pair1_open(&s1)); - TEST_NNG_PASS(nng_pair1_open(&c1)); - TEST_NNG_PASS(nng_setopt_int(s1, NNG_OPT_RECVBUF, 1)); - TEST_NNG_PASS(nng_setopt_int(s1, NNG_OPT_SENDBUF, 1)); - TEST_NNG_PASS(nng_setopt_int(c1, NNG_OPT_RECVBUF, 1)); - TEST_NNG_PASS(nng_setopt_ms(s1, NNG_OPT_SENDTIMEO, to)); + NUTS_PASS(nng_pair1_open(&s1)); + NUTS_PASS(nng_pair1_open(&c1)); + NUTS_PASS(nng_setopt_int(s1, NNG_OPT_RECVBUF, 1)); + NUTS_PASS(nng_setopt_int(s1, NNG_OPT_SENDBUF, 1)); + NUTS_PASS(nng_setopt_int(c1, NNG_OPT_RECVBUF, 1)); + NUTS_PASS(nng_setopt_ms(s1, NNG_OPT_SENDTIMEO, to)); - TEST_NNG_PASS(testutil_marry(s1, c1)); + NUTS_MARRY(s1, c1); // We choose to allow some buffering. In reality the // buffer size is just 1, and we will fail after 2. for (i = 0, rv = 0; i < 10; i++) { - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_msg_alloc(&msg, 0)); if ((rv = nng_sendmsg(s1, msg, 0)) != 0) { nng_msg_free(msg); break; } } - TEST_NNG_FAIL(rv, NNG_ETIMEDOUT); - TEST_CHECK(i < 10); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(c1)); + NUTS_FAIL(rv, NNG_ETIMEDOUT); + NUTS_TRUE(i < 10); + NUTS_CLOSE(s1); + NUTS_CLOSE(c1); } void @@ -139,45 +152,45 @@ test_mono_raw_exchange(void) nng_msg *msg; uint32_t hops; - TEST_NNG_PASS(nng_pair1_open_raw(&s1)); - TEST_NNG_PASS(nng_pair1_open_raw(&c1)); + NUTS_PASS(nng_pair1_open_raw(&s1)); + NUTS_PASS(nng_pair1_open_raw(&c1)); - TEST_NNG_PASS(nng_setopt_ms(s1, NNG_OPT_RECVTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(c1, NNG_OPT_RECVTIMEO, SECOND)); - TEST_NNG_PASS(testutil_marry(s1, c1)); + NUTS_PASS(nng_setopt_ms(s1, NNG_OPT_RECVTIMEO, SECOND)); + NUTS_PASS(nng_setopt_ms(c1, NNG_OPT_RECVTIMEO, SECOND)); + NUTS_MARRY(s1, c1); nng_pipe p = NNG_PIPE_INITIALIZER; - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_msg_alloc(&msg, 0)); APPEND_STR(msg, "GAMMA"); - TEST_NNG_PASS(nng_msg_header_append_u32(msg, 1)); - TEST_CHECK(nng_msg_header_len(msg) == sizeof(uint32_t)); - TEST_NNG_PASS(nng_sendmsg(c1, msg, 0)); - TEST_NNG_PASS(nng_recvmsg(s1, &msg, 0)); + NUTS_PASS(nng_msg_header_append_u32(msg, 1)); + NUTS_TRUE(nng_msg_header_len(msg) == sizeof(uint32_t)); + NUTS_PASS(nng_sendmsg(c1, msg, 0)); + NUTS_PASS(nng_recvmsg(s1, &msg, 0)); p = nng_msg_get_pipe(msg); - TEST_CHECK(nng_pipe_id(p) > 0); + NUTS_TRUE(nng_pipe_id(p) > 0); CHECK_STR(msg, "GAMMA"); - TEST_CHECK(nng_msg_header_len(msg) == sizeof(uint32_t)); - TEST_NNG_PASS(nng_msg_header_trim_u32(msg, &hops)); - TEST_CHECK(hops == 2); + NUTS_TRUE(nng_msg_header_len(msg) == sizeof(uint32_t)); + NUTS_PASS(nng_msg_header_trim_u32(msg, &hops)); + NUTS_TRUE(hops == 2); nng_msg_free(msg); - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_msg_alloc(&msg, 0)); APPEND_STR(msg, "EPSILON"); - TEST_NNG_PASS(nng_msg_header_append_u32(msg, 1)); - TEST_NNG_PASS(nng_sendmsg(s1, msg, 0)); - TEST_NNG_PASS(nng_recvmsg(c1, &msg, 0)); + NUTS_PASS(nng_msg_header_append_u32(msg, 1)); + NUTS_PASS(nng_sendmsg(s1, msg, 0)); + NUTS_PASS(nng_recvmsg(c1, &msg, 0)); CHECK_STR(msg, "EPSILON"); - TEST_CHECK(nng_msg_header_len(msg) == sizeof(uint32_t)); - TEST_NNG_PASS(nng_msg_header_trim_u32(msg, &hops)); + NUTS_TRUE(nng_msg_header_len(msg) == sizeof(uint32_t)); + NUTS_PASS(nng_msg_header_trim_u32(msg, &hops)); p = nng_msg_get_pipe(msg); - TEST_CHECK(nng_pipe_id(p) > 0); + NUTS_TRUE(nng_pipe_id(p) > 0); - TEST_CHECK(hops == 2); + NUTS_TRUE(hops == 2); nng_msg_free(msg); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(c1)); + NUTS_CLOSE(s1); + NUTS_CLOSE(c1); } void @@ -188,52 +201,52 @@ test_mono_raw_header(void) nng_msg * msg; uint32_t v; - TEST_NNG_PASS(nng_pair1_open_raw(&s1)); - TEST_NNG_PASS(nng_pair1_open_raw(&c1)); + NUTS_PASS(nng_pair1_open_raw(&s1)); + NUTS_PASS(nng_pair1_open_raw(&c1)); - TEST_NNG_PASS(nng_setopt_ms(s1, NNG_OPT_RECVTIMEO, SECOND / 5)); - TEST_NNG_PASS(nng_setopt_ms(c1, NNG_OPT_RECVTIMEO, SECOND / 5)); - TEST_NNG_PASS(testutil_marry(s1, c1)); + NUTS_PASS(nng_setopt_ms(s1, NNG_OPT_RECVTIMEO, SECOND / 5)); + NUTS_PASS(nng_setopt_ms(c1, NNG_OPT_RECVTIMEO, SECOND / 5)); + NUTS_MARRY(s1, c1); // Missing bits in the header - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); - TEST_NNG_PASS(nng_sendmsg(c1, msg, 0)); - TEST_NNG_FAIL(nng_recvmsg(s1, &msg, 0), NNG_ETIMEDOUT); + NUTS_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_sendmsg(c1, msg, 0)); + NUTS_FAIL(nng_recvmsg(s1, &msg, 0), NNG_ETIMEDOUT); // Valid header works - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); - TEST_NNG_PASS(nng_msg_append_u32(msg, 0xFEEDFACE)); - TEST_NNG_PASS(nng_msg_header_append_u32(msg, 1)); - TEST_NNG_PASS(nng_sendmsg(c1, msg, 0)); - TEST_NNG_PASS(nng_recvmsg(s1, &msg, 0)); - TEST_NNG_PASS(nng_msg_trim_u32(msg, &v)); - TEST_CHECK(v == 0xFEEDFACE); + NUTS_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_msg_append_u32(msg, 0xFEEDFACE)); + NUTS_PASS(nng_msg_header_append_u32(msg, 1)); + NUTS_PASS(nng_sendmsg(c1, msg, 0)); + NUTS_PASS(nng_recvmsg(s1, &msg, 0)); + NUTS_PASS(nng_msg_trim_u32(msg, &v)); + NUTS_TRUE(v == 0xFEEDFACE); nng_msg_free(msg); // Header with reserved bits set dropped - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); - TEST_NNG_PASS(nng_msg_header_append_u32(msg, 0xDEAD0000)); - TEST_NNG_PASS(nng_sendmsg(c1, msg, 0)); - TEST_NNG_FAIL(nng_recvmsg(s1, &msg, 0), NNG_ETIMEDOUT); + NUTS_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_msg_header_append_u32(msg, 0xDEAD0000)); + NUTS_PASS(nng_sendmsg(c1, msg, 0)); + NUTS_FAIL(nng_recvmsg(s1, &msg, 0), NNG_ETIMEDOUT); // Header with no chance to add another hop gets dropped - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); - TEST_NNG_PASS(nng_msg_header_append_u32(msg, 0xff)); - TEST_NNG_PASS(nng_sendmsg(c1, msg, 0)); - TEST_NNG_FAIL(nng_recvmsg(s1, &msg, 0), NNG_ETIMEDOUT); + NUTS_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_msg_header_append_u32(msg, 0xff)); + NUTS_PASS(nng_sendmsg(c1, msg, 0)); + NUTS_FAIL(nng_recvmsg(s1, &msg, 0), NNG_ETIMEDOUT); // With the same bits clear it works - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); - TEST_NNG_PASS(nng_msg_append_u32(msg, 0xFEEDFACE)); - TEST_NNG_PASS(nng_msg_header_append_u32(msg, 1)); - TEST_NNG_PASS(nng_sendmsg(c1, msg, 0)); - TEST_NNG_PASS(nng_recvmsg(s1, &msg, 0)); - TEST_NNG_PASS(nng_msg_trim_u32(msg, &v)); - TEST_CHECK(v == 0xFEEDFACE); + NUTS_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_msg_append_u32(msg, 0xFEEDFACE)); + NUTS_PASS(nng_msg_header_append_u32(msg, 1)); + NUTS_PASS(nng_sendmsg(c1, msg, 0)); + NUTS_PASS(nng_recvmsg(s1, &msg, 0)); + NUTS_PASS(nng_msg_trim_u32(msg, &v)); + NUTS_TRUE(v == 0xFEEDFACE); nng_msg_free(msg); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(c1)); + NUTS_CLOSE(s1); + NUTS_CLOSE(c1); } void @@ -242,17 +255,17 @@ test_pair1_raw(void) nng_socket s1; bool raw; - TEST_NNG_PASS(nng_pair1_open(&s1)); - TEST_NNG_PASS(nng_getopt_bool(s1, NNG_OPT_RAW, &raw)); - TEST_CHECK(raw == false); - TEST_NNG_FAIL(nng_setopt_bool(s1, NNG_OPT_RAW, true), NNG_EREADONLY); - TEST_NNG_PASS(nng_close(s1)); - - TEST_NNG_PASS(nng_pair1_open_raw(&s1)); - TEST_NNG_PASS(nng_getopt_bool(s1, NNG_OPT_RAW, &raw)); - TEST_CHECK(raw == true); - TEST_NNG_FAIL(nng_setopt_bool(s1, NNG_OPT_RAW, false), NNG_EREADONLY); - TEST_NNG_PASS(nng_close(s1)); + NUTS_PASS(nng_pair1_open(&s1)); + NUTS_PASS(nng_getopt_bool(s1, NNG_OPT_RAW, &raw)); + NUTS_TRUE(raw == false); + NUTS_FAIL(nng_setopt_bool(s1, NNG_OPT_RAW, true), NNG_EREADONLY); + NUTS_PASS(nng_close(s1)); + + NUTS_PASS(nng_pair1_open_raw(&s1)); + NUTS_PASS(nng_getopt_bool(s1, NNG_OPT_RAW, &raw)); + NUTS_TRUE(raw == true); + NUTS_FAIL(nng_setopt_bool(s1, NNG_OPT_RAW, false), NNG_EREADONLY); + NUTS_PASS(nng_close(s1)); } void @@ -264,65 +277,65 @@ test_pair1_ttl(void) uint32_t val; int ttl; - TEST_NNG_PASS(nng_pair1_open_raw(&s1)); - TEST_NNG_PASS(nng_pair1_open_raw(&c1)); - TEST_NNG_PASS(nng_setopt_ms(s1, NNG_OPT_RECVTIMEO, SECOND / 5)); - TEST_NNG_PASS(nng_setopt_ms(c1, NNG_OPT_RECVTIMEO, SECOND / 5)); + NUTS_PASS(nng_pair1_open_raw(&s1)); + NUTS_PASS(nng_pair1_open_raw(&c1)); + NUTS_PASS(nng_setopt_ms(s1, NNG_OPT_RECVTIMEO, SECOND / 5)); + NUTS_PASS(nng_setopt_ms(c1, NNG_OPT_RECVTIMEO, SECOND / 5)); // cannot set insane TTLs - TEST_NNG_FAIL(nng_setopt_int(s1, NNG_OPT_MAXTTL, 0), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_int(s1, NNG_OPT_MAXTTL, 1000), NNG_EINVAL); + NUTS_FAIL(nng_setopt_int(s1, NNG_OPT_MAXTTL, 0), NNG_EINVAL); + NUTS_FAIL(nng_setopt_int(s1, NNG_OPT_MAXTTL, 1000), NNG_EINVAL); ttl = 8; - TEST_NNG_FAIL(nng_setopt(s1, NNG_OPT_MAXTTL, &ttl, 1), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_bool(s1, NNG_OPT_MAXTTL, true), NNG_EBADTYPE); + NUTS_FAIL(nng_setopt(s1, NNG_OPT_MAXTTL, &ttl, 1), NNG_EINVAL); + NUTS_FAIL(nng_setopt_bool(s1, NNG_OPT_MAXTTL, true), NNG_EBADTYPE); - TEST_NNG_PASS(testutil_marry(s1, c1)); + NUTS_MARRY(s1, c1); // Let's check enforcement of TTL - TEST_NNG_PASS(nng_setopt_int(s1, NNG_OPT_MAXTTL, 4)); - TEST_NNG_PASS(nng_getopt_int(s1, NNG_OPT_MAXTTL, &ttl)); - TEST_CHECK(ttl == 4); + NUTS_PASS(nng_setopt_int(s1, NNG_OPT_MAXTTL, 4)); + NUTS_PASS(nng_getopt_int(s1, NNG_OPT_MAXTTL, &ttl)); + NUTS_TRUE(ttl == 4); // Bad TTL bounces - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); - TEST_NNG_PASS(nng_msg_header_append_u32(msg, 4)); - TEST_NNG_PASS(nng_sendmsg(c1, msg, 0)); - TEST_NNG_FAIL(nng_recvmsg(s1, &msg, 0), NNG_ETIMEDOUT); + NUTS_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_msg_header_append_u32(msg, 4)); + NUTS_PASS(nng_sendmsg(c1, msg, 0)); + NUTS_FAIL(nng_recvmsg(s1, &msg, 0), NNG_ETIMEDOUT); // Good TTL passes - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); - TEST_NNG_PASS(nng_msg_append_u32(msg, 0xFEEDFACE)); - TEST_NNG_PASS(nng_msg_header_append_u32(msg, 3)); - TEST_NNG_PASS(nng_sendmsg(c1, msg, 0)); - TEST_NNG_PASS(nng_recvmsg(s1, &msg, 0)); - TEST_NNG_PASS(nng_msg_trim_u32(msg, &val)); - TEST_CHECK(val == 0xFEEDFACE); - TEST_NNG_PASS(nng_msg_header_trim_u32(msg, &val)); - TEST_CHECK(val == 4); + NUTS_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_msg_append_u32(msg, 0xFEEDFACE)); + NUTS_PASS(nng_msg_header_append_u32(msg, 3)); + NUTS_PASS(nng_sendmsg(c1, msg, 0)); + NUTS_PASS(nng_recvmsg(s1, &msg, 0)); + NUTS_PASS(nng_msg_trim_u32(msg, &val)); + NUTS_TRUE(val == 0xFEEDFACE); + NUTS_PASS(nng_msg_header_trim_u32(msg, &val)); + NUTS_TRUE(val == 4); nng_msg_free(msg); // Large TTL passes - TEST_NNG_PASS(nng_setopt_int(s1, NNG_OPT_MAXTTL, 15)); - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); - TEST_NNG_PASS(nng_msg_append_u32(msg, 1234)); - TEST_NNG_PASS(nng_msg_header_append_u32(msg, 14)); - TEST_NNG_PASS(nng_sendmsg(c1, msg, 0)); - TEST_NNG_PASS(nng_recvmsg(s1, &msg, 0)); - TEST_NNG_PASS(nng_msg_trim_u32(msg, &val)); - TEST_CHECK(val == 1234); - TEST_NNG_PASS(nng_msg_header_trim_u32(msg, &val)); - TEST_CHECK(val == 15); + NUTS_PASS(nng_setopt_int(s1, NNG_OPT_MAXTTL, 15)); + NUTS_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_msg_append_u32(msg, 1234)); + NUTS_PASS(nng_msg_header_append_u32(msg, 14)); + NUTS_PASS(nng_sendmsg(c1, msg, 0)); + NUTS_PASS(nng_recvmsg(s1, &msg, 0)); + NUTS_PASS(nng_msg_trim_u32(msg, &val)); + NUTS_TRUE(val == 1234); + NUTS_PASS(nng_msg_header_trim_u32(msg, &val)); + NUTS_TRUE(val == 15); nng_msg_free(msg); // Max TTL fails - TEST_NNG_PASS(nng_setopt_int(s1, NNG_OPT_MAXTTL, 15)); - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); - TEST_NNG_PASS(nng_msg_header_append_u32(msg, 15)); - TEST_NNG_PASS(nng_sendmsg(c1, msg, 0)); - TEST_NNG_FAIL(nng_recvmsg(s1, &msg, 0), NNG_ETIMEDOUT); - - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(c1)); + NUTS_PASS(nng_setopt_int(s1, NNG_OPT_MAXTTL, 15)); + NUTS_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_msg_header_append_u32(msg, 15)); + NUTS_PASS(nng_sendmsg(c1, msg, 0)); + NUTS_FAIL(nng_recvmsg(s1, &msg, 0), NNG_ETIMEDOUT); + + NUTS_CLOSE(s1); + NUTS_CLOSE(c1); } void @@ -331,28 +344,27 @@ test_pair1_validate_peer(void) nng_socket s1, s2; nng_stat * stats; nng_stat * reject; - char addr[64]; - - testutil_scratch_addr("inproc", sizeof(addr), addr); + char * addr; - TEST_NNG_PASS(nng_pair1_open(&s1)); - TEST_NNG_PASS(nng_pair0_open(&s2)); + NUTS_ADDR(addr, "inproc"); + NUTS_PASS(nng_pair1_open(&s1)); + NUTS_PASS(nng_pair0_open(&s2)); - TEST_NNG_PASS(nng_listen(s1, addr, NULL, 0)); - TEST_NNG_PASS(nng_dial(s2, addr, NULL, NNG_FLAG_NONBLOCK)); + NUTS_PASS(nng_listen(s1, addr, NULL, 0)); + NUTS_PASS(nng_dial(s2, addr, NULL, NNG_FLAG_NONBLOCK)); - testutil_sleep(100); - TEST_NNG_PASS(nng_stats_get(&stats)); + NUTS_SLEEP(100); + NUTS_PASS(nng_stats_get(&stats)); - TEST_CHECK(stats != NULL); - TEST_CHECK((reject = nng_stat_find_socket(stats, s1)) != NULL); - TEST_CHECK((reject = nng_stat_find(reject, "reject")) != NULL); + NUTS_TRUE(stats != NULL); + NUTS_TRUE((reject = nng_stat_find_socket(stats, s1)) != NULL); + NUTS_TRUE((reject = nng_stat_find(reject, "reject")) != NULL); - TEST_CHECK(nng_stat_type(reject) == NNG_STAT_COUNTER); - TEST_CHECK(nng_stat_value(reject) > 0); + NUTS_TRUE(nng_stat_type(reject) == NNG_STAT_COUNTER); + NUTS_TRUE(nng_stat_value(reject) > 0); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(s2)); + NUTS_CLOSE(s1); + NUTS_CLOSE(s2); nng_stats_free(stats); } @@ -363,20 +375,20 @@ test_pair1_recv_no_header(void) nng_socket c; nng_msg * m; - TEST_NNG_PASS(nng_pair1_open(&s)); - TEST_NNG_PASS(nng_pair1_open(&c)); - TEST_NNG_PASS(nng_setopt_bool(c, "pair1_test_inject_header", true)); - TEST_NNG_PASS(nng_setopt_ms(s, NNG_OPT_RECVTIMEO, 100)); - TEST_NNG_PASS(nng_setopt_ms(s, NNG_OPT_SENDTIMEO, 200)); + NUTS_PASS(nng_pair1_open(&s)); + NUTS_PASS(nng_pair1_open(&c)); + NUTS_PASS(nng_setopt_bool(c, "pair1_test_inject_header", true)); + NUTS_PASS(nng_setopt_ms(s, NNG_OPT_RECVTIMEO, 100)); + NUTS_PASS(nng_setopt_ms(s, NNG_OPT_SENDTIMEO, 200)); - TEST_NNG_PASS(testutil_marry(c, s)); + NUTS_MARRY(c, s); - TEST_NNG_PASS(nng_msg_alloc(&m, 0)); - TEST_NNG_PASS(nng_sendmsg(c, m, 0)); - TEST_NNG_FAIL(nng_recvmsg(s, &m, 0), NNG_ETIMEDOUT); + NUTS_PASS(nng_msg_alloc(&m, 0)); + NUTS_PASS(nng_sendmsg(c, m, 0)); + NUTS_FAIL(nng_recvmsg(s, &m, 0), NNG_ETIMEDOUT); - TEST_NNG_PASS(nng_close(c)); - TEST_NNG_PASS(nng_close(s)); + NUTS_CLOSE(c); + NUTS_CLOSE(s); } void @@ -386,30 +398,31 @@ test_pair1_recv_garbage(void) nng_socket c; nng_msg * m; - TEST_NNG_PASS(nng_pair1_open(&s)); - TEST_NNG_PASS(nng_pair1_open(&c)); - TEST_NNG_PASS(nng_setopt_bool(c, "pair1_test_inject_header", true)); - TEST_NNG_PASS(nng_setopt_ms(s, NNG_OPT_RECVTIMEO, 100)); - TEST_NNG_PASS(nng_setopt_ms(s, NNG_OPT_SENDTIMEO, 200)); + NUTS_PASS(nng_pair1_open(&s)); + NUTS_PASS(nng_pair1_open(&c)); + NUTS_PASS(nng_setopt_bool(c, "pair1_test_inject_header", true)); + NUTS_PASS(nng_setopt_ms(s, NNG_OPT_RECVTIMEO, 100)); + NUTS_PASS(nng_setopt_ms(s, NNG_OPT_SENDTIMEO, 200)); - TEST_NNG_PASS(testutil_marry(c, s)); + NUTS_MARRY(c, s); // ridiculous hop count - TEST_NNG_PASS(nng_msg_alloc(&m, 0)); - TEST_NNG_PASS(nng_msg_append_u32(m, 0x1000)); - TEST_NNG_PASS(nng_sendmsg(c, m, 0)); - TEST_NNG_FAIL(nng_recvmsg(s, &m, 0), NNG_ETIMEDOUT); + NUTS_PASS(nng_msg_alloc(&m, 0)); + NUTS_PASS(nng_msg_append_u32(m, 0x1000)); + NUTS_PASS(nng_sendmsg(c, m, 0)); + NUTS_FAIL(nng_recvmsg(s, &m, 0), NNG_ETIMEDOUT); - TEST_NNG_PASS(nng_close(c)); - TEST_NNG_PASS(nng_close(s)); + NUTS_CLOSE(c); + NUTS_CLOSE(s); } -TEST_LIST = { - { "pair1 monogamous cooked", test_mono_cooked }, - { "pair1 monogamous faithful", test_mono_faithful }, - { "pair1 monogamous back pressure", test_mono_back_pressure }, - { "pair1 monogamous raw exchange", test_mono_raw_exchange }, - { "pair1 monogamous raw header", test_mono_raw_header }, +NUTS_TESTS = { + { "pair1 mono identity", test_mono_identity }, + { "pair1 mono cooked", test_mono_cooked }, + { "pair1 mono faithful", test_mono_faithful }, + { "pair1 mono back pressure", test_mono_back_pressure }, + { "pair1 mono raw exchange", test_mono_raw_exchange }, + { "pair1 mono raw header", test_mono_raw_header }, { "pair1 raw", test_pair1_raw }, { "pair1 ttl", test_pair1_ttl }, { "pair1 validate peer", test_pair1_validate_peer }, diff --git a/src/protocol/pubsub0/pub_test.c b/src/protocol/pubsub0/pub_test.c index 94d5c333..a430b610 100644 --- a/src/protocol/pubsub0/pub_test.c +++ b/src/protocol/pubsub0/pub_test.c @@ -7,18 +7,7 @@ // found online at https://opensource.org/licenses/MIT. // -#include <string.h> - -#include <nng/nng.h> -#include <nng/protocol/pubsub0/pub.h> -#include <nng/protocol/pubsub0/sub.h> - -#include <acutest.h> -#include <testutil.h> - -#ifndef NNI_PROTO -#define NNI_PROTO(x, y) (((x) << 4u) | (y)) -#endif +#include <nuts.h> static void test_pub_identity(void) @@ -27,18 +16,18 @@ test_pub_identity(void) int p; char * n; - TEST_NNG_PASS(nng_pub0_open(&s)); - TEST_NNG_PASS(nng_getopt_int(s, NNG_OPT_PROTO, &p)); - TEST_CHECK(p == NNI_PROTO(2u, 0u)); // 32 - TEST_NNG_PASS(nng_getopt_int(s, NNG_OPT_PEER, &p)); - TEST_CHECK(p == NNI_PROTO(2u, 1u)); // 33 - TEST_NNG_PASS(nng_getopt_string(s, NNG_OPT_PROTONAME, &n)); - TEST_CHECK(strcmp(n, "pub") == 0); + NUTS_PASS(nng_pub0_open(&s)); + NUTS_PASS(nng_socket_get_int(s, NNG_OPT_PROTO, &p)); + NUTS_TRUE(p == NUTS_PROTO(2u, 0u)); // 32 + NUTS_PASS(nng_socket_get_int(s, NNG_OPT_PEER, &p)); + NUTS_TRUE(p == NUTS_PROTO(2u, 1u)); // 33 + NUTS_PASS(nng_socket_get_string(s, NNG_OPT_PROTONAME, &n)); + NUTS_MATCH(n, "pub"); nng_strfree(n); - TEST_NNG_PASS(nng_getopt_string(s, NNG_OPT_PEERNAME, &n)); - TEST_CHECK(strcmp(n, "sub") == 0); + NUTS_PASS(nng_socket_get_string(s, NNG_OPT_PEERNAME, &n)); + NUTS_MATCH(n, "sub"); nng_strfree(n); - TEST_NNG_PASS(nng_close(s)); + NUTS_CLOSE(s); } static void @@ -46,9 +35,9 @@ test_pub_cannot_recv(void) { nng_socket pub; - TEST_NNG_PASS(nng_pub0_open(&pub)); - TEST_NNG_FAIL(nng_recv(pub, "", 0, 0), NNG_ENOTSUP); - TEST_NNG_PASS(nng_close(pub)); + NUTS_PASS(nng_pub0_open(&pub)); + NUTS_FAIL(nng_recv(pub, "", 0, 0), NNG_ENOTSUP); + NUTS_CLOSE(pub); } static void @@ -57,9 +46,9 @@ test_pub_no_context(void) nng_socket pub; nng_ctx ctx; - TEST_NNG_PASS(nng_pub0_open(&pub)); - TEST_NNG_FAIL(nng_ctx_open(&ctx, pub), NNG_ENOTSUP); - TEST_NNG_PASS(nng_close(pub)); + NUTS_PASS(nng_pub0_open(&pub)); + NUTS_FAIL(nng_ctx_open(&ctx, pub), NNG_ENOTSUP); + NUTS_CLOSE(pub); } static void @@ -68,9 +57,9 @@ test_pub_not_readable(void) int fd; nng_socket pub; - TEST_NNG_PASS(nng_pub0_open(&pub)); - TEST_NNG_FAIL(nng_getopt_int(pub, NNG_OPT_RECVFD, &fd), NNG_ENOTSUP); - TEST_NNG_PASS(nng_close(pub)); + NUTS_PASS(nng_pub0_open(&pub)); + NUTS_FAIL(nng_socket_get_int(pub, NNG_OPT_RECVFD, &fd), NNG_ENOTSUP); + NUTS_CLOSE(pub); } static void @@ -80,25 +69,24 @@ test_pub_poll_writeable(void) nng_socket pub; nng_socket sub; - TEST_NNG_PASS(nng_sub0_open(&sub)); - TEST_NNG_PASS(nng_pub0_open(&pub)); - TEST_NNG_PASS(nng_getopt_int(pub, NNG_OPT_SENDFD, &fd)); - TEST_CHECK(fd >= 0); + NUTS_PASS(nng_sub0_open(&sub)); + NUTS_PASS(nng_pub0_open(&pub)); + NUTS_PASS(nng_socket_get_int(pub, NNG_OPT_SENDFD, &fd)); + NUTS_TRUE(fd >= 0); // Pub is *always* writeable - TEST_CHECK(testutil_pollfd(fd) == true); + NUTS_TRUE(nuts_poll_fd(fd)); // Even after connect (no message yet) - TEST_NNG_PASS(testutil_marry(pub, sub)); - TEST_CHECK(testutil_pollfd(fd) == true); + NUTS_MARRY(pub, sub); + NUTS_TRUE(nuts_poll_fd(fd)); - // But once we send messages, it is. - // We have to send a request, in order to send a reply. - TEST_NNG_SEND_STR(pub, "abc"); - TEST_CHECK(testutil_pollfd(fd) == true); + // Even if we send messages. + NUTS_SEND(pub, "abc"); + NUTS_TRUE(nuts_poll_fd(fd)); - TEST_NNG_PASS(nng_close(pub)); - TEST_NNG_PASS(nng_close(sub)); + NUTS_CLOSE(pub); + NUTS_CLOSE(sub); } static void @@ -106,10 +94,10 @@ test_pub_send_no_pipes(void) { nng_socket pub; - TEST_NNG_PASS(nng_pub0_open(&pub)); - TEST_NNG_SEND_STR(pub, "DROP1"); - TEST_NNG_SEND_STR(pub, "DROP2"); - TEST_NNG_PASS(nng_close(pub)); + NUTS_PASS(nng_pub0_open(&pub)); + NUTS_SEND(pub, "DROP1"); + NUTS_SEND(pub, "DROP2"); + NUTS_CLOSE(pub); } void @@ -118,28 +106,28 @@ test_pub_validate_peer(void) nng_socket s1, s2; nng_stat * stats; nng_stat * reject; - char addr[64]; + char *addr; - testutil_scratch_addr("inproc", sizeof(addr), addr); + NUTS_ADDR(addr, "inproc"); - TEST_NNG_PASS(nng_pub0_open(&s1)); - TEST_NNG_PASS(nng_pub0_open(&s2)); + NUTS_PASS(nng_pub0_open(&s1)); + NUTS_PASS(nng_pub0_open(&s2)); - TEST_NNG_PASS(nng_listen(s1, addr, NULL, 0)); - TEST_NNG_PASS(nng_dial(s2, addr, NULL, NNG_FLAG_NONBLOCK)); + NUTS_PASS(nng_listen(s1, addr, NULL, 0)); + NUTS_PASS(nng_dial(s2, addr, NULL, NNG_FLAG_NONBLOCK)); - testutil_sleep(100); - TEST_NNG_PASS(nng_stats_get(&stats)); + NUTS_SLEEP(100); + NUTS_PASS(nng_stats_get(&stats)); - TEST_CHECK(stats != NULL); - TEST_CHECK((reject = nng_stat_find_socket(stats, s1)) != NULL); - TEST_CHECK((reject = nng_stat_find(reject, "reject")) != NULL); + NUTS_TRUE(stats != NULL); + NUTS_TRUE((reject = nng_stat_find_socket(stats, s1)) != NULL); + NUTS_TRUE((reject = nng_stat_find(reject, "reject")) != NULL); - TEST_CHECK(nng_stat_type(reject) == NNG_STAT_COUNTER); - TEST_CHECK(nng_stat_value(reject) > 0); + NUTS_TRUE(nng_stat_type(reject) == NNG_STAT_COUNTER); + NUTS_TRUE(nng_stat_value(reject) > 0); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(s2)); + NUTS_CLOSE(s1); + NUTS_CLOSE(s2); nng_stats_free(stats); } @@ -152,26 +140,26 @@ test_pub_send_queued(void) // MB: What we really need is a mock so that we can send harder // than we receive -- we need a way to apply back-pressure for this // test to be really meaningful. - TEST_NNG_PASS(nng_pub0_open(&pub)); - TEST_NNG_PASS(nng_sub0_open(&sub)); - TEST_NNG_PASS(nng_setopt(sub, NNG_OPT_SUB_SUBSCRIBE, "", 0)); - TEST_NNG_PASS(nng_setopt_int(pub, NNG_OPT_SENDBUF, 10)); - TEST_NNG_PASS(nng_setopt_int(sub, NNG_OPT_RECVBUF, 10)); - TEST_NNG_PASS(nng_setopt_ms(pub, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(sub, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(testutil_marry(pub, sub)); - TEST_NNG_SEND_STR(pub, "first"); - TEST_NNG_SEND_STR(pub, "second"); - TEST_NNG_SEND_STR(pub, "three musketeers"); - TEST_NNG_SEND_STR(pub, "four"); - testutil_sleep(50); - TEST_NNG_RECV_STR(sub, "first"); - TEST_NNG_RECV_STR(sub, "second"); - TEST_NNG_RECV_STR(sub, "three musketeers"); - TEST_NNG_RECV_STR(sub, "four"); - - TEST_NNG_PASS(nng_close(pub)); - TEST_NNG_PASS(nng_close(sub)); + NUTS_PASS(nng_pub0_open(&pub)); + NUTS_PASS(nng_sub0_open(&sub)); + NUTS_PASS(nng_socket_set(sub, NNG_OPT_SUB_SUBSCRIBE, "", 0)); + NUTS_PASS(nng_socket_set_int(pub, NNG_OPT_SENDBUF, 10)); + NUTS_PASS(nng_socket_set_int(sub, NNG_OPT_RECVBUF, 10)); + NUTS_PASS(nng_socket_set_ms(pub, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(sub, NNG_OPT_RECVTIMEO, 1000)); + NUTS_MARRY(pub, sub); + NUTS_SEND(pub, "first"); + NUTS_SEND(pub, "second"); + NUTS_SEND(pub, "three musketeers"); + NUTS_SEND(pub, "four"); + NUTS_SLEEP(50); + NUTS_RECV(sub, "first"); + NUTS_RECV(sub, "second"); + NUTS_RECV(sub, "three musketeers"); + NUTS_RECV(sub, "four"); + + NUTS_CLOSE(pub); + NUTS_CLOSE(sub); } static void test_sub_recv_ctx_closed(void) @@ -179,15 +167,15 @@ test_sub_recv_ctx_closed(void) nng_socket sub; nng_ctx ctx; nng_aio * aio; - TEST_NNG_PASS(nng_sub0_open(&sub)); - TEST_NNG_PASS(nng_ctx_open(&ctx, sub)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_sub0_open(&sub)); + NUTS_PASS(nng_ctx_open(&ctx, sub)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); nng_ctx_close(ctx); nng_ctx_recv(ctx, aio); nng_aio_wait(aio); - TEST_NNG_FAIL(nng_aio_result(aio), NNG_ECLOSED); + NUTS_FAIL(nng_aio_result(aio), NNG_ECLOSED); nng_aio_free(aio); - TEST_NNG_PASS(nng_close(sub)); + NUTS_CLOSE(sub); } static void @@ -197,16 +185,16 @@ test_sub_ctx_recv_aio_stopped(void) nng_ctx ctx; nng_aio * aio; - TEST_NNG_PASS(nng_sub0_open(&sub)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); - TEST_NNG_PASS(nng_ctx_open(&ctx, sub)); + NUTS_PASS(nng_sub0_open(&sub)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_ctx_open(&ctx, sub)); nng_aio_stop(aio); nng_ctx_recv(ctx, aio); nng_aio_wait(aio); - TEST_NNG_FAIL(nng_aio_result(aio), NNG_ECANCELED); - TEST_NNG_PASS(nng_ctx_close(ctx)); - TEST_NNG_PASS(nng_close(sub)); + NUTS_FAIL(nng_aio_result(aio), NNG_ECANCELED); + NUTS_PASS(nng_ctx_close(ctx)); + NUTS_CLOSE(sub); nng_aio_free(aio); } @@ -217,16 +205,16 @@ test_sub_close_context_recv(void) nng_ctx ctx; nng_aio * aio; - TEST_NNG_PASS(nng_sub0_open(&sub)); - TEST_NNG_PASS(nng_ctx_open(&ctx, sub)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_sub0_open(&sub)); + NUTS_PASS(nng_ctx_open(&ctx, sub)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); nng_aio_set_timeout(aio, 1000); nng_ctx_recv(ctx, aio); - TEST_NNG_PASS(nng_ctx_close(ctx)); + NUTS_PASS(nng_ctx_close(ctx)); nng_aio_wait(aio); - TEST_NNG_FAIL(nng_aio_result(aio), NNG_ECLOSED); + NUTS_FAIL(nng_aio_result(aio), NNG_ECLOSED); - TEST_NNG_PASS(nng_close(sub)); + NUTS_CLOSE(sub); nng_aio_free(aio); } @@ -237,16 +225,16 @@ test_sub_ctx_recv_nonblock(void) nng_ctx ctx; nng_aio * aio; - TEST_NNG_PASS(nng_sub0_open(&sub)); - TEST_NNG_PASS(nng_ctx_open(&ctx, sub)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_sub0_open(&sub)); + NUTS_PASS(nng_ctx_open(&ctx, sub)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); nng_aio_set_timeout(aio, 0); // Instant timeout nng_ctx_recv(ctx, aio); nng_aio_wait(aio); - TEST_NNG_FAIL(nng_aio_result(aio), NNG_ETIMEDOUT); - TEST_NNG_PASS(nng_close(sub)); + NUTS_FAIL(nng_aio_result(aio), NNG_ETIMEDOUT); + NUTS_CLOSE(sub); nng_aio_free(aio); } @@ -257,17 +245,17 @@ test_sub_ctx_recv_cancel(void) nng_ctx ctx; nng_aio * aio; - TEST_NNG_PASS(nng_sub0_open(&sub)); - TEST_NNG_PASS(nng_ctx_open(&ctx, sub)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_sub0_open(&sub)); + NUTS_PASS(nng_ctx_open(&ctx, sub)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); nng_aio_set_timeout(aio, 1000); nng_ctx_recv(ctx, aio); nng_aio_abort(aio, NNG_ECANCELED); nng_aio_wait(aio); - TEST_NNG_FAIL(nng_aio_result(aio), NNG_ECANCELED); - TEST_NNG_PASS(nng_close(sub)); + NUTS_FAIL(nng_aio_result(aio), NNG_ECANCELED); + NUTS_CLOSE(sub); nng_aio_free(aio); } @@ -280,28 +268,28 @@ test_pub_send_buf_option(void) size_t sz; const char *opt = NNG_OPT_SENDBUF; - TEST_NNG_PASS(nng_pub0_open(&pub)); + NUTS_PASS(nng_pub0_open(&pub)); - TEST_NNG_PASS(nng_setopt_int(pub, opt, 1)); - TEST_NNG_FAIL(nng_setopt_int(pub, opt, 0), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_int(pub, opt, -1), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_int(pub, opt, 1000000), NNG_EINVAL); - TEST_NNG_PASS(nng_setopt_int(pub, opt, 3)); - TEST_NNG_PASS(nng_getopt_int(pub, opt, &v)); - TEST_CHECK(v == 3); + NUTS_PASS(nng_socket_set_int(pub, opt, 1)); + NUTS_FAIL(nng_socket_set_int(pub, opt, 0), NNG_EINVAL); + NUTS_FAIL(nng_socket_set_int(pub, opt, -1), NNG_EINVAL); + NUTS_FAIL(nng_socket_set_int(pub, opt, 1000000), NNG_EINVAL); + NUTS_PASS(nng_socket_set_int(pub, opt, 3)); + NUTS_PASS(nng_socket_get_int(pub, opt, &v)); + NUTS_TRUE(v == 3); v = 0; sz = sizeof(v); - TEST_NNG_PASS(nng_getopt(pub, opt, &v, &sz)); - TEST_CHECK(v == 3); - TEST_CHECK(sz == sizeof(v)); + NUTS_PASS(nng_socket_get(pub, opt, &v, &sz)); + NUTS_TRUE(v == 3); + NUTS_TRUE(sz == sizeof(v)); - TEST_NNG_FAIL(nng_setopt(pub, opt, "", 1), NNG_EINVAL); + NUTS_FAIL(nng_socket_set(pub, opt, "", 1), NNG_EINVAL); sz = 1; - TEST_NNG_FAIL(nng_getopt(pub, opt, &v, &sz), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_bool(pub, opt, true), NNG_EBADTYPE); - TEST_NNG_FAIL(nng_getopt_bool(pub, opt, &b), NNG_EBADTYPE); + NUTS_FAIL(nng_socket_get(pub, opt, &v, &sz), NNG_EINVAL); + NUTS_FAIL(nng_socket_set_bool(pub, opt, true), NNG_EBADTYPE); + NUTS_FAIL(nng_socket_get_bool(pub, opt, &b), NNG_EBADTYPE); - TEST_NNG_PASS(nng_close(pub)); + NUTS_CLOSE(pub); } static void @@ -310,20 +298,20 @@ test_pub_cooked(void) nng_socket s; bool b; - TEST_NNG_PASS(nng_pub0_open(&s)); - TEST_NNG_PASS(nng_getopt_bool(s, NNG_OPT_RAW, &b)); - TEST_CHECK(!b); - TEST_NNG_FAIL(nng_setopt_bool(s, NNG_OPT_RAW, true), NNG_EREADONLY); - TEST_NNG_PASS(nng_close(s)); + NUTS_PASS(nng_pub0_open(&s)); + NUTS_PASS(nng_socket_get_bool(s, NNG_OPT_RAW, &b)); + NUTS_TRUE(!b); + NUTS_FAIL(nng_socket_set_bool(s, NNG_OPT_RAW, true), NNG_EREADONLY); + NUTS_PASS(nng_close(s)); // raw pub only differs in the option setting - TEST_NNG_PASS(nng_pub0_open_raw(&s)); - TEST_NNG_PASS(nng_getopt_bool(s, NNG_OPT_RAW, &b)); - TEST_CHECK(b); - TEST_NNG_PASS(nng_close(s)); + NUTS_PASS(nng_pub0_open_raw(&s)); + NUTS_PASS(nng_socket_get_bool(s, NNG_OPT_RAW, &b)); + NUTS_TRUE(b); + NUTS_CLOSE(s); } -TEST_LIST = { +NUTS_TESTS = { { "pub identity", test_pub_identity }, { "pub cannot recv", test_pub_cannot_recv }, { "put no context", test_pub_no_context }, diff --git a/src/protocol/pubsub0/sub_test.c b/src/protocol/pubsub0/sub_test.c index 3edf1d16..b830ae80 100644 --- a/src/protocol/pubsub0/sub_test.c +++ b/src/protocol/pubsub0/sub_test.c @@ -7,18 +7,7 @@ // found online at https://opensource.org/licenses/MIT. // -#include <string.h> - -#include <nng/nng.h> -#include <nng/protocol/pubsub0/pub.h> -#include <nng/protocol/pubsub0/sub.h> - -#include <acutest.h> -#include <testutil.h> - -#ifndef NNI_PROTO -#define NNI_PROTO(x, y) (((x) << 4u) | (y)) -#endif +#include <nuts.h> static void test_sub_identity(void) @@ -27,18 +16,18 @@ test_sub_identity(void) int p; char * n; - TEST_NNG_PASS(nng_sub0_open(&s)); - TEST_NNG_PASS(nng_getopt_int(s, NNG_OPT_PROTO, &p)); - TEST_CHECK(p == NNI_PROTO(2u, 1u)); // 33 - TEST_NNG_PASS(nng_getopt_int(s, NNG_OPT_PEER, &p)); - TEST_CHECK(p == NNI_PROTO(2u, 0u)); // 32 - TEST_NNG_PASS(nng_getopt_string(s, NNG_OPT_PROTONAME, &n)); - TEST_CHECK(strcmp(n, "sub") == 0); + NUTS_PASS(nng_sub0_open(&s)); + NUTS_PASS(nng_socket_get_int(s, NNG_OPT_PROTO, &p)); + NUTS_TRUE(p == NUTS_PROTO(2u, 1u)); // 33 + NUTS_PASS(nng_socket_get_int(s, NNG_OPT_PEER, &p)); + NUTS_TRUE(p == NUTS_PROTO(2u, 0u)); // 32 + NUTS_PASS(nng_socket_get_string(s, NNG_OPT_PROTONAME, &n)); + NUTS_MATCH(n, "sub"); nng_strfree(n); - TEST_NNG_PASS(nng_getopt_string(s, NNG_OPT_PEERNAME, &n)); - TEST_CHECK(strcmp(n, "pub") == 0); + NUTS_PASS(nng_socket_get_string(s, NNG_OPT_PEERNAME, &n)); + NUTS_MATCH(n, "pub"); nng_strfree(n); - TEST_NNG_PASS(nng_close(s)); + NUTS_CLOSE(s); } static void @@ -46,9 +35,9 @@ test_sub_cannot_send(void) { nng_socket sub; - TEST_NNG_PASS(nng_sub0_open(&sub)); - TEST_NNG_FAIL(nng_send(sub, "", 0, 0), NNG_ENOTSUP); - TEST_NNG_PASS(nng_close(sub)); + NUTS_PASS(nng_sub0_open(&sub)); + NUTS_FAIL(nng_send(sub, "", 0, 0), NNG_ENOTSUP); + NUTS_CLOSE(sub); } static void @@ -59,17 +48,17 @@ test_sub_context_cannot_send(void) nng_msg * m; nng_aio * aio; - TEST_NNG_PASS(nng_sub0_open(&sub)); - TEST_NNG_PASS(nng_ctx_open(&ctx, sub)); - TEST_NNG_PASS(nng_msg_alloc(&m, 0)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_sub0_open(&sub)); + NUTS_PASS(nng_ctx_open(&ctx, sub)); + NUTS_PASS(nng_msg_alloc(&m, 0)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); nng_aio_set_msg(aio, m); nng_aio_set_timeout(aio, 1000); nng_ctx_send(ctx, aio); nng_aio_wait(aio); - TEST_NNG_FAIL(nng_aio_result(aio), NNG_ENOTSUP); - TEST_NNG_PASS(nng_ctx_close(ctx)); - TEST_NNG_PASS(nng_close(sub)); + NUTS_FAIL(nng_aio_result(aio), NNG_ENOTSUP); + NUTS_PASS(nng_ctx_close(ctx)); + NUTS_CLOSE(sub); nng_aio_free(aio); nng_msg_free(m); } @@ -80,9 +69,9 @@ test_sub_not_writeable(void) int fd; nng_socket sub; - TEST_NNG_PASS(nng_sub0_open(&sub)); - TEST_NNG_FAIL(nng_getopt_int(sub, NNG_OPT_SENDFD, &fd), NNG_ENOTSUP); - TEST_NNG_PASS(nng_close(sub)); + NUTS_PASS(nng_sub0_open(&sub)); + NUTS_FAIL(nng_socket_get_int(sub, NNG_OPT_SENDFD, &fd), NNG_ENOTSUP); + NUTS_CLOSE(sub); } static void @@ -92,38 +81,38 @@ test_sub_poll_readable(void) nng_socket pub; nng_socket sub; - TEST_NNG_PASS(nng_sub0_open(&sub)); - TEST_NNG_PASS(nng_pub0_open(&pub)); - TEST_NNG_PASS(nng_setopt(sub, NNG_OPT_SUB_SUBSCRIBE, "a", 1)); - TEST_NNG_PASS(nng_setopt_ms(sub, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(pub, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_getopt_int(sub, NNG_OPT_RECVFD, &fd)); - TEST_CHECK(fd >= 0); + NUTS_PASS(nng_sub0_open(&sub)); + NUTS_PASS(nng_pub0_open(&pub)); + NUTS_PASS(nng_socket_set(sub, NNG_OPT_SUB_SUBSCRIBE, "a", 1)); + NUTS_PASS(nng_socket_set_ms(sub, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(pub, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_get_int(sub, NNG_OPT_RECVFD, &fd)); + NUTS_TRUE(fd >= 0); // Not readable if not connected! - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_TRUE(nuts_poll_fd(fd) == false); // Even after connect (no message yet) - TEST_NNG_PASS(testutil_marry(pub, sub)); - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_MARRY(pub, sub); + NUTS_TRUE(nuts_poll_fd(fd) == false); // If we send a message we didn't subscribe to, that doesn't matter. - TEST_NNG_SEND_STR(pub, "def"); - testutil_sleep(100); - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_SEND(pub, "def"); + NUTS_SLEEP(100); + NUTS_TRUE(nuts_poll_fd(fd) == false); // But once we send messages, it is. // We have to send a request, in order to send a reply. - TEST_NNG_SEND_STR(pub, "abc"); - testutil_sleep(100); - TEST_CHECK(testutil_pollfd(fd) == true); + NUTS_SEND(pub, "abc"); + NUTS_SLEEP(100); + NUTS_TRUE(nuts_poll_fd(fd)); // and receiving makes it no longer ready - TEST_NNG_RECV_STR(sub, "abc"); - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_RECV(sub, "abc"); + NUTS_TRUE(nuts_poll_fd(fd) == false); - TEST_NNG_PASS(nng_close(pub)); - TEST_NNG_PASS(nng_close(sub)); + NUTS_CLOSE(pub); + NUTS_CLOSE(sub); } static void @@ -135,41 +124,41 @@ test_sub_recv_late(void) nng_aio * aio; nng_msg * msg; - TEST_NNG_PASS(nng_sub0_open(&sub)); - TEST_NNG_PASS(nng_pub0_open(&pub)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); - TEST_NNG_PASS(nng_setopt(sub, NNG_OPT_SUB_SUBSCRIBE, "", 0)); - TEST_NNG_PASS(nng_setopt_ms(sub, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(pub, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_getopt_int(sub, NNG_OPT_RECVFD, &fd)); - TEST_CHECK(fd >= 0); + NUTS_PASS(nng_sub0_open(&sub)); + NUTS_PASS(nng_pub0_open(&pub)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_socket_set(sub, NNG_OPT_SUB_SUBSCRIBE, "", 0)); + NUTS_PASS(nng_socket_set_ms(sub, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(pub, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_get_int(sub, NNG_OPT_RECVFD, &fd)); + NUTS_TRUE(fd >= 0); // Not readable if not connected! - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_TRUE(nuts_poll_fd(fd) == false); // Even after connect (no message yet) - TEST_NNG_PASS(testutil_marry(pub, sub)); - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_MARRY(pub, sub); + NUTS_TRUE(nuts_poll_fd(fd) == false); nng_recv_aio(sub, aio); // But once we send messages, it is. // We have to send a request, in order to send a reply. - TEST_NNG_SEND_STR(pub, "abc"); - testutil_sleep(200); + NUTS_SEND(pub, "abc"); + NUTS_SLEEP(200); nng_aio_wait(aio); - TEST_NNG_PASS(nng_aio_result(aio)); + NUTS_PASS(nng_aio_result(aio)); msg = nng_aio_get_msg(aio); nng_aio_set_msg(aio, NULL); - TEST_CHECK(nng_msg_len(msg) == 4); - TEST_CHECK(strcmp(nng_msg_body(msg), "abc") == 0); + NUTS_TRUE(nng_msg_len(msg) == 4); + NUTS_MATCH(nng_msg_body(msg), "abc"); nng_msg_free(msg); nng_aio_free(aio); - TEST_NNG_PASS(nng_close(pub)); - TEST_NNG_PASS(nng_close(sub)); + NUTS_CLOSE(pub); + NUTS_CLOSE(sub); } void @@ -179,14 +168,12 @@ test_sub_context_no_poll(void) nng_socket sub; nng_ctx ctx; - TEST_NNG_PASS(nng_sub0_open(&sub)); - TEST_NNG_PASS(nng_ctx_open(&ctx, sub)); - TEST_NNG_FAIL( - nng_ctx_getopt_int(ctx, NNG_OPT_SENDFD, &fd), NNG_ENOTSUP); - TEST_NNG_FAIL( - nng_ctx_getopt_int(ctx, NNG_OPT_RECVFD, &fd), NNG_ENOTSUP); - TEST_NNG_PASS(nng_ctx_close(ctx)); - TEST_NNG_PASS(nng_close(sub)); + NUTS_PASS(nng_sub0_open(&sub)); + NUTS_PASS(nng_ctx_open(&ctx, sub)); + NUTS_FAIL(nng_ctx_get_int(ctx, NNG_OPT_SENDFD, &fd), NNG_ENOTSUP); + NUTS_FAIL(nng_ctx_get_int(ctx, NNG_OPT_RECVFD, &fd), NNG_ENOTSUP); + NUTS_PASS(nng_ctx_close(ctx)); + NUTS_CLOSE(sub); } void @@ -195,28 +182,28 @@ test_sub_validate_peer(void) nng_socket s1, s2; nng_stat * stats; nng_stat * reject; - char addr[64]; + char * addr; - testutil_scratch_addr("inproc", sizeof(addr), addr); + NUTS_ADDR(addr, "inproc"); - TEST_NNG_PASS(nng_sub0_open(&s1)); - TEST_NNG_PASS(nng_sub0_open(&s2)); + NUTS_PASS(nng_sub0_open(&s1)); + NUTS_PASS(nng_sub0_open(&s2)); - TEST_NNG_PASS(nng_listen(s1, addr, NULL, 0)); - TEST_NNG_PASS(nng_dial(s2, addr, NULL, NNG_FLAG_NONBLOCK)); + NUTS_PASS(nng_listen(s1, addr, NULL, 0)); + NUTS_PASS(nng_dial(s2, addr, NULL, NNG_FLAG_NONBLOCK)); - testutil_sleep(100); - TEST_NNG_PASS(nng_stats_get(&stats)); + NUTS_SLEEP(100); + NUTS_PASS(nng_stats_get(&stats)); - TEST_CHECK(stats != NULL); - TEST_CHECK((reject = nng_stat_find_socket(stats, s1)) != NULL); - TEST_CHECK((reject = nng_stat_find(reject, "reject")) != NULL); + NUTS_TRUE(stats != NULL); + NUTS_TRUE((reject = nng_stat_find_socket(stats, s1)) != NULL); + NUTS_TRUE((reject = nng_stat_find(reject, "reject")) != NULL); - TEST_CHECK(nng_stat_type(reject) == NNG_STAT_COUNTER); - TEST_CHECK(nng_stat_value(reject) > 0); + NUTS_TRUE(nng_stat_type(reject) == NNG_STAT_COUNTER); + NUTS_TRUE(nng_stat_value(reject) > 0); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(s2)); + NUTS_CLOSE(s1); + NUTS_CLOSE(s2); nng_stats_free(stats); } @@ -226,15 +213,15 @@ test_sub_recv_ctx_closed(void) nng_socket sub; nng_ctx ctx; nng_aio * aio; - TEST_NNG_PASS(nng_sub0_open(&sub)); - TEST_NNG_PASS(nng_ctx_open(&ctx, sub)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_sub0_open(&sub)); + NUTS_PASS(nng_ctx_open(&ctx, sub)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); nng_ctx_close(ctx); nng_ctx_recv(ctx, aio); nng_aio_wait(aio); - TEST_NNG_FAIL(nng_aio_result(aio), NNG_ECLOSED); + NUTS_FAIL(nng_aio_result(aio), NNG_ECLOSED); nng_aio_free(aio); - TEST_NNG_PASS(nng_close(sub)); + NUTS_CLOSE(sub); } static void @@ -244,16 +231,16 @@ test_sub_ctx_recv_aio_stopped(void) nng_ctx ctx; nng_aio * aio; - TEST_NNG_PASS(nng_sub0_open(&sub)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); - TEST_NNG_PASS(nng_ctx_open(&ctx, sub)); + NUTS_PASS(nng_sub0_open(&sub)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_ctx_open(&ctx, sub)); nng_aio_stop(aio); nng_ctx_recv(ctx, aio); nng_aio_wait(aio); - TEST_NNG_FAIL(nng_aio_result(aio), NNG_ECANCELED); - TEST_NNG_PASS(nng_ctx_close(ctx)); - TEST_NNG_PASS(nng_close(sub)); + NUTS_FAIL(nng_aio_result(aio), NNG_ECANCELED); + NUTS_PASS(nng_ctx_close(ctx)); + NUTS_CLOSE(sub); nng_aio_free(aio); } @@ -264,16 +251,16 @@ test_sub_close_context_recv(void) nng_ctx ctx; nng_aio * aio; - TEST_NNG_PASS(nng_sub0_open(&sub)); - TEST_NNG_PASS(nng_ctx_open(&ctx, sub)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_sub0_open(&sub)); + NUTS_PASS(nng_ctx_open(&ctx, sub)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); nng_aio_set_timeout(aio, 1000); nng_ctx_recv(ctx, aio); - TEST_NNG_PASS(nng_ctx_close(ctx)); + NUTS_PASS(nng_ctx_close(ctx)); nng_aio_wait(aio); - TEST_NNG_FAIL(nng_aio_result(aio), NNG_ECLOSED); + NUTS_FAIL(nng_aio_result(aio), NNG_ECLOSED); - TEST_NNG_PASS(nng_close(sub)); + NUTS_CLOSE(sub); nng_aio_free(aio); } @@ -284,16 +271,16 @@ test_sub_ctx_recv_nonblock(void) nng_ctx ctx; nng_aio * aio; - TEST_NNG_PASS(nng_sub0_open(&sub)); - TEST_NNG_PASS(nng_ctx_open(&ctx, sub)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_sub0_open(&sub)); + NUTS_PASS(nng_ctx_open(&ctx, sub)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); nng_aio_set_timeout(aio, 0); // Instant timeout nng_ctx_recv(ctx, aio); nng_aio_wait(aio); - TEST_NNG_FAIL(nng_aio_result(aio), NNG_ETIMEDOUT); - TEST_NNG_PASS(nng_close(sub)); + NUTS_FAIL(nng_aio_result(aio), NNG_ETIMEDOUT); + NUTS_CLOSE(sub); nng_aio_free(aio); } @@ -304,17 +291,17 @@ test_sub_ctx_recv_cancel(void) nng_ctx ctx; nng_aio * aio; - TEST_NNG_PASS(nng_sub0_open(&sub)); - TEST_NNG_PASS(nng_ctx_open(&ctx, sub)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_sub0_open(&sub)); + NUTS_PASS(nng_ctx_open(&ctx, sub)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); nng_aio_set_timeout(aio, 1000); nng_ctx_recv(ctx, aio); nng_aio_abort(aio, NNG_ECANCELED); nng_aio_wait(aio); - TEST_NNG_FAIL(nng_aio_result(aio), NNG_ECANCELED); - TEST_NNG_PASS(nng_close(sub)); + NUTS_FAIL(nng_aio_result(aio), NNG_ECANCELED); + NUTS_CLOSE(sub); nng_aio_free(aio); } @@ -327,28 +314,28 @@ test_sub_recv_buf_option(void) size_t sz; const char *opt = NNG_OPT_RECVBUF; - TEST_NNG_PASS(nng_sub0_open(&sub)); + NUTS_PASS(nng_sub0_open(&sub)); - TEST_NNG_PASS(nng_setopt_int(sub, opt, 1)); - TEST_NNG_FAIL(nng_setopt_int(sub, opt, 0), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_int(sub, opt, -1), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_int(sub, opt, 1000000), NNG_EINVAL); - TEST_NNG_PASS(nng_setopt_int(sub, opt, 3)); - TEST_NNG_PASS(nng_getopt_int(sub, opt, &v)); - TEST_CHECK(v == 3); + NUTS_PASS(nng_socket_set_int(sub, opt, 1)); + NUTS_FAIL(nng_socket_set_int(sub, opt, 0), NNG_EINVAL); + NUTS_FAIL(nng_socket_set_int(sub, opt, -1), NNG_EINVAL); + NUTS_FAIL(nng_socket_set_int(sub, opt, 1000000), NNG_EINVAL); + NUTS_PASS(nng_socket_set_int(sub, opt, 3)); + NUTS_PASS(nng_socket_get_int(sub, opt, &v)); + NUTS_TRUE(v == 3); v = 0; sz = sizeof(v); - TEST_NNG_PASS(nng_getopt(sub, opt, &v, &sz)); - TEST_CHECK(v == 3); - TEST_CHECK(sz == sizeof(v)); + NUTS_PASS(nng_socket_get(sub, opt, &v, &sz)); + NUTS_TRUE(v == 3); + NUTS_TRUE(sz == sizeof(v)); - TEST_NNG_FAIL(nng_setopt(sub, opt, "", 1), NNG_EINVAL); + NUTS_FAIL(nng_socket_set(sub, opt, "", 1), NNG_EINVAL); sz = 1; - TEST_NNG_FAIL(nng_getopt(sub, opt, &v, &sz), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_bool(sub, opt, true), NNG_EBADTYPE); - TEST_NNG_FAIL(nng_getopt_bool(sub, opt, &b), NNG_EBADTYPE); + NUTS_FAIL(nng_socket_get(sub, opt, &v, &sz), NNG_EINVAL); + NUTS_FAIL(nng_socket_set_bool(sub, opt, true), NNG_EBADTYPE); + NUTS_FAIL(nng_socket_get_bool(sub, opt, &b), NNG_EBADTYPE); - TEST_NNG_PASS(nng_close(sub)); + NUTS_CLOSE(sub); } static void @@ -359,16 +346,16 @@ test_sub_subscribe_option(void) int v; const char *opt = NNG_OPT_SUB_SUBSCRIBE; - TEST_NNG_PASS(nng_sub0_open(&sub)); + NUTS_PASS(nng_sub0_open(&sub)); - TEST_NNG_PASS(nng_setopt(sub, opt, "abc", 3)); - TEST_NNG_PASS(nng_setopt(sub, opt, "abc", 3)); // duplicate - TEST_NNG_PASS(nng_setopt_bool(sub, opt, false)); - TEST_NNG_PASS(nng_setopt_int(sub, opt, 32)); + NUTS_PASS(nng_socket_set(sub, opt, "abc", 3)); + NUTS_PASS(nng_socket_set(sub, opt, "abc", 3)); // duplicate + NUTS_PASS(nng_socket_set_bool(sub, opt, false)); + NUTS_PASS(nng_socket_set_int(sub, opt, 32)); sz = sizeof(v); - TEST_NNG_FAIL(nng_getopt(sub, opt, &v, &sz), NNG_EWRITEONLY); + NUTS_FAIL(nng_socket_get(sub, opt, &v, &sz), NNG_EWRITEONLY); - TEST_NNG_PASS(nng_close(sub)); + NUTS_CLOSE(sub); } static void @@ -380,19 +367,19 @@ test_sub_unsubscribe_option(void) const char *opt1 = NNG_OPT_SUB_SUBSCRIBE; const char *opt2 = NNG_OPT_SUB_UNSUBSCRIBE; - TEST_NNG_PASS(nng_sub0_open(&sub)); + NUTS_PASS(nng_sub0_open(&sub)); - TEST_NNG_PASS(nng_setopt(sub, opt1, "abc", 3)); - TEST_NNG_FAIL(nng_setopt(sub, opt2, "abcdef", 6), NNG_ENOENT); - TEST_NNG_PASS(nng_setopt(sub, opt2, "abc", 3)); - TEST_NNG_FAIL(nng_setopt(sub, opt2, "abc", 3), NNG_ENOENT); - TEST_NNG_PASS(nng_setopt_int(sub, opt1, 32)); - TEST_NNG_FAIL(nng_setopt_int(sub, opt2, 23), NNG_ENOENT); - TEST_NNG_PASS(nng_setopt_int(sub, opt2, 32)); + NUTS_PASS(nng_socket_set(sub, opt1, "abc", 3)); + NUTS_FAIL(nng_socket_set(sub, opt2, "abc123", 6), NNG_ENOENT); + NUTS_PASS(nng_socket_set(sub, opt2, "abc", 3)); + NUTS_FAIL(nng_socket_set(sub, opt2, "abc", 3), NNG_ENOENT); + NUTS_PASS(nng_socket_set_int(sub, opt1, 32)); + NUTS_FAIL(nng_socket_set_int(sub, opt2, 23), NNG_ENOENT); + NUTS_PASS(nng_socket_set_int(sub, opt2, 32)); sz = sizeof(v); - TEST_NNG_FAIL(nng_getopt(sub, opt2, &v, &sz), NNG_EWRITEONLY); + NUTS_FAIL(nng_socket_get(sub, opt2, &v, &sz), NNG_EWRITEONLY); - TEST_NNG_PASS(nng_close(sub)); + NUTS_CLOSE(sub); } static void @@ -403,22 +390,22 @@ test_sub_prefer_new_option(void) size_t sz; const char *opt = NNG_OPT_SUB_PREFNEW; - TEST_NNG_PASS(nng_sub0_open(&sub)); + NUTS_PASS(nng_sub0_open(&sub)); - TEST_NNG_PASS(nng_setopt_bool(sub, opt, true)); - TEST_NNG_PASS(nng_setopt_bool(sub, opt, false)); - TEST_NNG_PASS(nng_getopt_bool(sub, opt, &b)); - TEST_CHECK(b == false); + NUTS_PASS(nng_socket_set_bool(sub, opt, true)); + NUTS_PASS(nng_socket_set_bool(sub, opt, false)); + NUTS_PASS(nng_socket_get_bool(sub, opt, &b)); + NUTS_TRUE(b == false); sz = sizeof(b); b = true; - TEST_NNG_PASS(nng_getopt(sub, opt, &b, &sz)); - TEST_CHECK(b == false); - TEST_CHECK(sz == sizeof(bool)); + NUTS_PASS(nng_socket_get(sub, opt, &b, &sz)); + NUTS_TRUE(b == false); + NUTS_TRUE(sz == sizeof(bool)); - TEST_NNG_FAIL(nng_setopt(sub, opt, "abc", 3), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_int(sub, opt, 1), NNG_EBADTYPE); + NUTS_FAIL(nng_socket_set(sub, opt, "abc", 3), NNG_EINVAL); + NUTS_FAIL(nng_socket_set_int(sub, opt, 1), NNG_EBADTYPE); - TEST_NNG_PASS(nng_close(sub)); + NUTS_CLOSE(sub); } void @@ -428,23 +415,23 @@ test_sub_drop_new(void) nng_socket pub; nng_msg * msg; - TEST_NNG_PASS(nng_sub0_open(&sub)); - TEST_NNG_PASS(nng_pub0_open(&pub)); - TEST_NNG_PASS(nng_setopt_int(sub, NNG_OPT_RECVBUF, 2)); - TEST_NNG_PASS(nng_setopt_bool(sub, NNG_OPT_SUB_PREFNEW, false)); - TEST_NNG_PASS(nng_setopt(sub, NNG_OPT_SUB_SUBSCRIBE, NULL, 0)); - TEST_NNG_PASS(nng_setopt_ms(sub, NNG_OPT_RECVTIMEO, 200)); - TEST_NNG_PASS(nng_setopt_ms(pub, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(testutil_marry(pub, sub)); - TEST_NNG_SEND_STR(pub, "one"); - TEST_NNG_SEND_STR(pub, "two"); - TEST_NNG_SEND_STR(pub, "three"); - testutil_sleep(100); - TEST_NNG_RECV_STR(sub, "one"); - TEST_NNG_RECV_STR(sub, "two"); - TEST_NNG_FAIL(nng_recvmsg(sub, &msg, 0), NNG_ETIMEDOUT); - TEST_NNG_PASS(nng_close(pub)); - TEST_NNG_PASS(nng_close(sub)); + NUTS_PASS(nng_sub0_open(&sub)); + NUTS_PASS(nng_pub0_open(&pub)); + NUTS_PASS(nng_socket_set_int(sub, NNG_OPT_RECVBUF, 2)); + NUTS_PASS(nng_socket_set_bool(sub, NNG_OPT_SUB_PREFNEW, false)); + NUTS_PASS(nng_socket_set(sub, NNG_OPT_SUB_SUBSCRIBE, NULL, 0)); + NUTS_PASS(nng_socket_set_ms(sub, NNG_OPT_RECVTIMEO, 200)); + NUTS_PASS(nng_socket_set_ms(pub, NNG_OPT_SENDTIMEO, 1000)); + NUTS_MARRY(pub, sub); + NUTS_SEND(pub, "one"); + NUTS_SEND(pub, "two"); + NUTS_SEND(pub, "three"); + NUTS_SLEEP(100); + NUTS_RECV(sub, "one"); + NUTS_RECV(sub, "two"); + NUTS_FAIL(nng_recvmsg(sub, &msg, 0), NNG_ETIMEDOUT); + NUTS_CLOSE(pub); + NUTS_CLOSE(sub); } void @@ -454,23 +441,23 @@ test_sub_drop_old(void) nng_socket pub; nng_msg * msg; - TEST_NNG_PASS(nng_sub0_open(&sub)); - TEST_NNG_PASS(nng_pub0_open(&pub)); - TEST_NNG_PASS(nng_setopt_int(sub, NNG_OPT_RECVBUF, 2)); - TEST_NNG_PASS(nng_setopt_bool(sub, NNG_OPT_SUB_PREFNEW, true)); - TEST_NNG_PASS(nng_setopt(sub, NNG_OPT_SUB_SUBSCRIBE, NULL, 0)); - TEST_NNG_PASS(nng_setopt_ms(sub, NNG_OPT_RECVTIMEO, 200)); - TEST_NNG_PASS(nng_setopt_ms(pub, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(testutil_marry(pub, sub)); - TEST_NNG_SEND_STR(pub, "one"); - TEST_NNG_SEND_STR(pub, "two"); - TEST_NNG_SEND_STR(pub, "three"); - testutil_sleep(100); - TEST_NNG_RECV_STR(sub, "two"); - TEST_NNG_RECV_STR(sub, "three"); - TEST_NNG_FAIL(nng_recvmsg(sub, &msg, 0), NNG_ETIMEDOUT); - TEST_NNG_PASS(nng_close(pub)); - TEST_NNG_PASS(nng_close(sub)); + NUTS_PASS(nng_sub0_open(&sub)); + NUTS_PASS(nng_pub0_open(&pub)); + NUTS_PASS(nng_socket_set_int(sub, NNG_OPT_RECVBUF, 2)); + NUTS_PASS(nng_socket_set_bool(sub, NNG_OPT_SUB_PREFNEW, true)); + NUTS_PASS(nng_socket_set(sub, NNG_OPT_SUB_SUBSCRIBE, NULL, 0)); + NUTS_PASS(nng_socket_set_ms(sub, NNG_OPT_RECVTIMEO, 200)); + NUTS_PASS(nng_socket_set_ms(pub, NNG_OPT_SENDTIMEO, 1000)); + NUTS_MARRY(pub, sub); + NUTS_SEND(pub, "one"); + NUTS_SEND(pub, "two"); + NUTS_SEND(pub, "three"); + NUTS_SLEEP(100); + NUTS_RECV(sub, "two"); + NUTS_RECV(sub, "three"); + NUTS_FAIL(nng_recvmsg(sub, &msg, 0), NNG_ETIMEDOUT); + NUTS_CLOSE(pub); + NUTS_CLOSE(sub); } static void @@ -481,46 +468,46 @@ test_sub_filter(void) char buf[32]; size_t sz; - TEST_NNG_PASS(nng_sub0_open(&sub)); - TEST_NNG_PASS(nng_pub0_open(&pub)); - TEST_NNG_PASS(nng_setopt_ms(pub, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(sub, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_int(sub, NNG_OPT_RECVBUF, 10)); + NUTS_PASS(nng_sub0_open(&sub)); + NUTS_PASS(nng_pub0_open(&pub)); + NUTS_PASS(nng_socket_set_ms(pub, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(sub, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_int(sub, NNG_OPT_RECVBUF, 10)); // Set up some default filters - TEST_NNG_PASS(nng_setopt(sub, NNG_OPT_SUB_SUBSCRIBE, "abc", 3)); - TEST_NNG_PASS(nng_setopt(sub, NNG_OPT_SUB_SUBSCRIBE, "def", 3)); - TEST_NNG_PASS(nng_setopt(sub, NNG_OPT_SUB_SUBSCRIBE, "ghi", 3)); - TEST_NNG_PASS(nng_setopt(sub, NNG_OPT_SUB_SUBSCRIBE, "jkl", 3)); - - TEST_NNG_PASS(testutil_marry(pub, sub)); - - TEST_NNG_PASS(nng_send(pub, "def", 3, 0)); - TEST_NNG_PASS(nng_send(pub, "de", 2, 0)); // will not go through - TEST_NNG_PASS(nng_send(pub, "abc123", 6, 0)); - TEST_NNG_PASS(nng_send(pub, "xzy", 3, 0)); // does not match - TEST_NNG_PASS(nng_send(pub, "ghidrop", 7, 0)); // dropped by unsub - TEST_NNG_PASS(nng_send(pub, "jklmno", 6, 0)); - - testutil_sleep(100); - TEST_NNG_PASS(nng_setopt(sub, NNG_OPT_SUB_UNSUBSCRIBE, "ghi", 3)); + NUTS_PASS(nng_socket_set(sub, NNG_OPT_SUB_SUBSCRIBE, "abc", 3)); + NUTS_PASS(nng_socket_set(sub, NNG_OPT_SUB_SUBSCRIBE, "def", 3)); + NUTS_PASS(nng_socket_set(sub, NNG_OPT_SUB_SUBSCRIBE, "ghi", 3)); + NUTS_PASS(nng_socket_set(sub, NNG_OPT_SUB_SUBSCRIBE, "jkl", 3)); + + NUTS_MARRY(pub, sub); + + NUTS_PASS(nng_send(pub, "def", 3, 0)); + NUTS_PASS(nng_send(pub, "de", 2, 0)); // will not go through + NUTS_PASS(nng_send(pub, "abc123", 6, 0)); + NUTS_PASS(nng_send(pub, "xzy", 3, 0)); // does not match + NUTS_PASS(nng_send(pub, "ghi-drop", 7, 0)); // dropped by unsub + NUTS_PASS(nng_send(pub, "jkl-mno", 6, 0)); + + NUTS_SLEEP(100); + NUTS_PASS(nng_socket_set(sub, NNG_OPT_SUB_UNSUBSCRIBE, "ghi", 3)); sz = sizeof(buf); - TEST_NNG_PASS(nng_recv(sub, buf, &sz, 0)); - TEST_CHECK(sz == 3); - TEST_CHECK(memcmp(buf, "def", 3) == 0); + NUTS_PASS(nng_recv(sub, buf, &sz, 0)); + NUTS_TRUE(sz == 3); + NUTS_TRUE(memcmp(buf, "def", 3) == 0); sz = sizeof(buf); - TEST_NNG_PASS(nng_recv(sub, buf, &sz, 0)); - TEST_CHECK(sz == 6); - TEST_CHECK(memcmp(buf, "abc123", 6) == 0); + NUTS_PASS(nng_recv(sub, buf, &sz, 0)); + NUTS_TRUE(sz == 6); + NUTS_TRUE(memcmp(buf, "abc123", 6) == 0); sz = sizeof(buf); - TEST_NNG_PASS(nng_recv(sub, buf, &sz, 0)); - TEST_CHECK(sz == 6); - TEST_CHECK(memcmp(buf, "jklmno", 6) == 0); + NUTS_PASS(nng_recv(sub, buf, &sz, 0)); + NUTS_TRUE(sz == 6); + NUTS_TRUE(memcmp(buf, "jkl-mno", 6) == 0); - TEST_NNG_PASS(nng_close(sub)); - TEST_NNG_PASS(nng_close(pub)); + NUTS_CLOSE(sub); + NUTS_CLOSE(pub); } static void @@ -534,55 +521,55 @@ test_sub_multi_context(void) nng_aio * aio2; nng_msg * m; - TEST_NNG_PASS(nng_sub0_open(&sub)); - TEST_NNG_PASS(nng_pub0_open(&pub)); - TEST_NNG_PASS(nng_aio_alloc(&aio1, NULL, NULL)); - TEST_NNG_PASS(nng_aio_alloc(&aio2, NULL, NULL)); - TEST_NNG_PASS(nng_ctx_open(&c1, sub)); - TEST_NNG_PASS(nng_ctx_open(&c2, sub)); + NUTS_PASS(nng_sub0_open(&sub)); + NUTS_PASS(nng_pub0_open(&pub)); + NUTS_PASS(nng_aio_alloc(&aio1, NULL, NULL)); + NUTS_PASS(nng_aio_alloc(&aio2, NULL, NULL)); + NUTS_PASS(nng_ctx_open(&c1, sub)); + NUTS_PASS(nng_ctx_open(&c2, sub)); - TEST_NNG_PASS(nng_ctx_setopt(c1, NNG_OPT_SUB_SUBSCRIBE, "one", 3)); - TEST_NNG_PASS(nng_ctx_setopt(c1, NNG_OPT_SUB_SUBSCRIBE, "all", 3)); + NUTS_PASS(nng_ctx_set(c1, NNG_OPT_SUB_SUBSCRIBE, "one", 3)); + NUTS_PASS(nng_ctx_set(c1, NNG_OPT_SUB_SUBSCRIBE, "all", 3)); - TEST_NNG_PASS(nng_ctx_setopt(c2, NNG_OPT_SUB_SUBSCRIBE, "two", 3)); - TEST_NNG_PASS(nng_ctx_setopt(c2, NNG_OPT_SUB_SUBSCRIBE, "all", 3)); + NUTS_PASS(nng_ctx_set(c2, NNG_OPT_SUB_SUBSCRIBE, "two", 3)); + NUTS_PASS(nng_ctx_set(c2, NNG_OPT_SUB_SUBSCRIBE, "all", 3)); nng_aio_set_timeout(aio1, 100); nng_aio_set_timeout(aio2, 100); - TEST_NNG_PASS(testutil_marry(pub, sub)); + NUTS_MARRY(pub, sub); - TEST_NNG_SEND_STR(pub, "one for the money"); - TEST_NNG_SEND_STR(pub, "all dogs go to heaven"); - TEST_NNG_SEND_STR(pub, "nobody likes a snitch"); - TEST_NNG_SEND_STR(pub, "two for the show"); + NUTS_SEND(pub, "one for the money"); + NUTS_SEND(pub, "all dogs go to heaven"); + NUTS_SEND(pub, "nobody likes a snitch"); + NUTS_SEND(pub, "two for the show"); nng_ctx_recv(c1, aio1); nng_aio_wait(aio1); - TEST_NNG_PASS(nng_aio_result(aio1)); + NUTS_PASS(nng_aio_result(aio1)); m = nng_aio_get_msg(aio1); - TEST_CHECK(strcmp(nng_msg_body(m), "one for the money") == 0); + NUTS_MATCH(nng_msg_body(m), "one for the money"); nng_msg_free(m); nng_ctx_recv(c1, aio1); nng_aio_wait(aio1); - TEST_NNG_PASS(nng_aio_result(aio1)); + NUTS_PASS(nng_aio_result(aio1)); m = nng_aio_get_msg(aio1); - TEST_CHECK(strcmp(nng_msg_body(m), "all dogs go to heaven") == 0); + NUTS_MATCH(nng_msg_body(m), "all dogs go to heaven"); nng_msg_free(m); nng_ctx_recv(c2, aio1); nng_aio_wait(aio1); - TEST_NNG_PASS(nng_aio_result(aio1)); + NUTS_PASS(nng_aio_result(aio1)); m = nng_aio_get_msg(aio1); - TEST_CHECK(strcmp(nng_msg_body(m), "all dogs go to heaven") == 0); + NUTS_MATCH(nng_msg_body(m), "all dogs go to heaven"); nng_msg_free(m); nng_ctx_recv(c2, aio1); nng_aio_wait(aio1); - TEST_NNG_PASS(nng_aio_result(aio1)); + NUTS_PASS(nng_aio_result(aio1)); m = nng_aio_get_msg(aio1); - TEST_CHECK(strcmp(nng_msg_body(m), "two for the show") == 0); + NUTS_MATCH(nng_msg_body(m), "two for the show"); nng_msg_free(m); nng_ctx_recv(c1, aio1); @@ -590,10 +577,10 @@ test_sub_multi_context(void) nng_aio_wait(aio1); nng_aio_wait(aio2); - TEST_NNG_FAIL(nng_aio_result(aio1), NNG_ETIMEDOUT); - TEST_NNG_FAIL(nng_aio_result(aio2), NNG_ETIMEDOUT); - TEST_NNG_PASS(nng_close(sub)); - TEST_NNG_PASS(nng_close(pub)); + NUTS_FAIL(nng_aio_result(aio1), NNG_ETIMEDOUT); + NUTS_FAIL(nng_aio_result(aio2), NNG_ETIMEDOUT); + NUTS_CLOSE(sub); + NUTS_CLOSE(pub); nng_aio_free(aio1); nng_aio_free(aio2); } @@ -604,10 +591,10 @@ test_sub_cooked(void) nng_socket s; bool b; - TEST_NNG_PASS(nng_sub0_open(&s)); - TEST_NNG_PASS(nng_getopt_bool(s, NNG_OPT_RAW, &b)); - TEST_CHECK(!b); - TEST_NNG_PASS(nng_close(s)); + NUTS_PASS(nng_sub0_open(&s)); + NUTS_PASS(nng_socket_get_bool(s, NNG_OPT_RAW, &b)); + NUTS_TRUE(!b); + NUTS_CLOSE(s); } TEST_LIST = { diff --git a/src/protocol/pubsub0/xsub_test.c b/src/protocol/pubsub0/xsub_test.c index a05b893c..19815661 100644 --- a/src/protocol/pubsub0/xsub_test.c +++ b/src/protocol/pubsub0/xsub_test.c @@ -7,18 +7,7 @@ // found online at https://opensource.org/licenses/MIT. // -#include <string.h> - -#include <nng/nng.h> -#include <nng/protocol/pubsub0/pub.h> -#include <nng/protocol/pubsub0/sub.h> - -#include <acutest.h> -#include <testutil.h> - -#ifndef NNI_PROTO -#define NNI_PROTO(x, y) (((x) << 4u) | (y)) -#endif +#include <nuts.h> static void test_xsub_identity(void) @@ -27,18 +16,18 @@ test_xsub_identity(void) int p; char * n; - TEST_NNG_PASS(nng_sub0_open_raw(&s)); - TEST_NNG_PASS(nng_getopt_int(s, NNG_OPT_PROTO, &p)); - TEST_CHECK(p == NNI_PROTO(2u, 1u)); // 33 - TEST_NNG_PASS(nng_getopt_int(s, NNG_OPT_PEER, &p)); - TEST_CHECK(p == NNI_PROTO(2u, 0u)); // 32 - TEST_NNG_PASS(nng_getopt_string(s, NNG_OPT_PROTONAME, &n)); - TEST_CHECK(strcmp(n, "sub") == 0); + NUTS_PASS(nng_sub0_open_raw(&s)); + NUTS_PASS(nng_socket_get_int(s, NNG_OPT_PROTO, &p)); + NUTS_TRUE(p == NUTS_PROTO(2u, 1u)); // 33 + NUTS_PASS(nng_socket_get_int(s, NNG_OPT_PEER, &p)); + NUTS_TRUE(p == NUTS_PROTO(2u, 0u)); // 32 + NUTS_PASS(nng_socket_get_string(s, NNG_OPT_PROTONAME, &n)); + NUTS_MATCH(n, "sub"); nng_strfree(n); - TEST_NNG_PASS(nng_getopt_string(s, NNG_OPT_PEERNAME, &n)); - TEST_CHECK(strcmp(n, "pub") == 0); + NUTS_PASS(nng_socket_get_string(s, NNG_OPT_PEERNAME, &n)); + NUTS_MATCH(n, "pub"); nng_strfree(n); - TEST_NNG_PASS(nng_close(s)); + NUTS_CLOSE(s); } static void @@ -46,9 +35,9 @@ test_xsub_cannot_send(void) { nng_socket sub; - TEST_NNG_PASS(nng_sub0_open_raw(&sub)); - TEST_NNG_FAIL(nng_send(sub, "", 0, 0), NNG_ENOTSUP); - TEST_NNG_PASS(nng_close(sub)); + NUTS_PASS(nng_sub0_open_raw(&sub)); + NUTS_FAIL(nng_send(sub, "", 0, 0), NNG_ENOTSUP); + NUTS_CLOSE(sub); } static void @@ -57,9 +46,9 @@ test_xsub_not_writeable(void) int fd; nng_socket sub; - TEST_NNG_PASS(nng_sub0_open_raw(&sub)); - TEST_NNG_FAIL(nng_getopt_int(sub, NNG_OPT_SENDFD, &fd), NNG_ENOTSUP); - TEST_NNG_PASS(nng_close(sub)); + NUTS_PASS(nng_sub0_open_raw(&sub)); + NUTS_FAIL(nng_socket_get_int(sub, NNG_OPT_SENDFD, &fd), NNG_ENOTSUP); + NUTS_CLOSE(sub); } static void @@ -69,33 +58,33 @@ test_xsub_poll_readable(void) nng_socket pub; nng_socket sub; - TEST_NNG_PASS(nng_sub0_open_raw(&sub)); - TEST_NNG_PASS(nng_pub0_open(&pub)); - TEST_NNG_PASS(nng_setopt_ms(sub, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(pub, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_getopt_int(sub, NNG_OPT_RECVFD, &fd)); - TEST_CHECK(fd >= 0); + NUTS_PASS(nng_sub0_open_raw(&sub)); + NUTS_PASS(nng_pub0_open(&pub)); + NUTS_PASS(nng_socket_set_ms(sub, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(pub, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_get_int(sub, NNG_OPT_RECVFD, &fd)); + NUTS_TRUE(fd >= 0); // Not readable if not connected! - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_TRUE(nuts_poll_fd(fd) == false); // Even after connect (no message yet) - TEST_NNG_PASS(testutil_marry(pub, sub)); - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_MARRY(pub, sub); + NUTS_TRUE(nuts_poll_fd(fd) == false); // But once we send messages, it is. // We have to send a request, in order to send a reply. - TEST_NNG_SEND_STR(pub, "abc"); - testutil_sleep(200); + NUTS_SEND(pub, "abc"); + NUTS_SLEEP(200); - TEST_CHECK(testutil_pollfd(fd) == true); + NUTS_TRUE(nuts_poll_fd(fd)); // and receiving makes it no longer ready - TEST_NNG_RECV_STR(sub, "abc"); - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_RECV(sub, "abc"); + NUTS_TRUE(nuts_poll_fd(fd) == false); - TEST_NNG_PASS(nng_close(pub)); - TEST_NNG_PASS(nng_close(sub)); + NUTS_CLOSE(pub); + NUTS_CLOSE(sub); } static void @@ -107,40 +96,40 @@ test_xsub_recv_late(void) nng_aio * aio; nng_msg * msg; - TEST_NNG_PASS(nng_sub0_open_raw(&sub)); - TEST_NNG_PASS(nng_pub0_open(&pub)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); - TEST_NNG_PASS(nng_setopt_ms(sub, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(pub, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_getopt_int(sub, NNG_OPT_RECVFD, &fd)); - TEST_CHECK(fd >= 0); + NUTS_PASS(nng_sub0_open_raw(&sub)); + NUTS_PASS(nng_pub0_open(&pub)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_socket_set_ms(sub, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(pub, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_get_int(sub, NNG_OPT_RECVFD, &fd)); + NUTS_TRUE(fd >= 0); // Not readable if not connected! - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_TRUE(nuts_poll_fd(fd) == false); // Even after connect (no message yet) - TEST_NNG_PASS(testutil_marry(pub, sub)); - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_MARRY(pub, sub); + NUTS_TRUE(nuts_poll_fd(fd) == false); nng_recv_aio(sub, aio); // But once we send messages, it is. // We have to send a request, in order to send a reply. - TEST_NNG_SEND_STR(pub, "abc"); - testutil_sleep(200); + NUTS_SEND(pub, "abc"); + NUTS_SLEEP(200); nng_aio_wait(aio); - TEST_NNG_PASS(nng_aio_result(aio)); + NUTS_PASS(nng_aio_result(aio)); msg = nng_aio_get_msg(aio); nng_aio_set_msg(aio, NULL); - TEST_CHECK(nng_msg_len(msg) == 4); - TEST_CHECK(strcmp(nng_msg_body(msg), "abc") == 0); + NUTS_TRUE(nng_msg_len(msg) == 4); + NUTS_TRUE(strcmp(nng_msg_body(msg), "abc") == 0); nng_msg_free(msg); nng_aio_free(aio); - TEST_NNG_PASS(nng_close(pub)); - TEST_NNG_PASS(nng_close(sub)); + NUTS_CLOSE(pub); + NUTS_CLOSE(sub); } void @@ -149,9 +138,9 @@ test_xsub_no_context(void) nng_socket sub; nng_ctx ctx; - TEST_NNG_PASS(nng_sub0_open_raw(&sub)); - TEST_NNG_FAIL(nng_ctx_open(&ctx, sub), NNG_ENOTSUP); - TEST_NNG_PASS(nng_close(sub)); + NUTS_PASS(nng_sub0_open_raw(&sub)); + NUTS_FAIL(nng_ctx_open(&ctx, sub), NNG_ENOTSUP); + NUTS_CLOSE(sub); } void @@ -160,28 +149,28 @@ test_xsub_validate_peer(void) nng_socket s1, s2; nng_stat * stats; nng_stat * reject; - char addr[64]; + char * addr; - testutil_scratch_addr("inproc", sizeof(addr), addr); + NUTS_ADDR(addr, "inproc"); - TEST_NNG_PASS(nng_sub0_open_raw(&s1)); - TEST_NNG_PASS(nng_sub0_open_raw(&s2)); + NUTS_PASS(nng_sub0_open_raw(&s1)); + NUTS_PASS(nng_sub0_open_raw(&s2)); - TEST_NNG_PASS(nng_listen(s1, addr, NULL, 0)); - TEST_NNG_PASS(nng_dial(s2, addr, NULL, NNG_FLAG_NONBLOCK)); + NUTS_PASS(nng_listen(s1, addr, NULL, 0)); + NUTS_PASS(nng_dial(s2, addr, NULL, NNG_FLAG_NONBLOCK)); - testutil_sleep(100); - TEST_NNG_PASS(nng_stats_get(&stats)); + NUTS_SLEEP(100); + NUTS_PASS(nng_stats_get(&stats)); - TEST_CHECK(stats != NULL); - TEST_CHECK((reject = nng_stat_find_socket(stats, s1)) != NULL); - TEST_CHECK((reject = nng_stat_find(reject, "reject")) != NULL); + NUTS_TRUE(stats != NULL); + NUTS_TRUE((reject = nng_stat_find_socket(stats, s1)) != NULL); + NUTS_TRUE((reject = nng_stat_find(reject, "reject")) != NULL); - TEST_CHECK(nng_stat_type(reject) == NNG_STAT_COUNTER); - TEST_CHECK(nng_stat_value(reject) > 0); + NUTS_TRUE(nng_stat_type(reject) == NNG_STAT_COUNTER); + NUTS_TRUE(nng_stat_value(reject) > 0); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(s2)); + NUTS_CLOSE(s1); + NUTS_CLOSE(s2); nng_stats_free(stats); } @@ -190,12 +179,12 @@ test_xsub_recv_closed(void) { nng_socket sub; nng_aio * aio; - TEST_NNG_PASS(nng_sub0_open_raw(&sub)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); - nng_close(sub); + NUTS_PASS(nng_sub0_open_raw(&sub)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_CLOSE(sub); nng_recv_aio(sub, aio); nng_aio_wait(aio); - TEST_NNG_FAIL(nng_aio_result(aio), NNG_ECLOSED); + NUTS_FAIL(nng_aio_result(aio), NNG_ECLOSED); nng_aio_free(aio); } @@ -205,13 +194,13 @@ test_xsub_close_recv(void) nng_socket sub; nng_aio * aio; - TEST_NNG_PASS(nng_sub0_open_raw(&sub)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_sub0_open_raw(&sub)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); nng_aio_set_timeout(aio, 1000); nng_recv_aio(sub, aio); - TEST_NNG_PASS(nng_close(sub)); + NUTS_CLOSE(sub); nng_aio_wait(aio); - TEST_NNG_FAIL(nng_aio_result(aio), NNG_ECLOSED); + NUTS_FAIL(nng_aio_result(aio), NNG_ECLOSED); nng_aio_free(aio); } @@ -222,15 +211,15 @@ test_xsub_recv_nonblock(void) nng_socket sub; nng_aio * aio; - TEST_NNG_PASS(nng_sub0_open_raw(&sub)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_sub0_open_raw(&sub)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); nng_aio_set_timeout(aio, 0); // Instant timeout nng_recv_aio(sub, aio); nng_aio_wait(aio); - TEST_NNG_FAIL(nng_aio_result(aio), NNG_ETIMEDOUT); - TEST_NNG_PASS(nng_close(sub)); + NUTS_FAIL(nng_aio_result(aio), NNG_ETIMEDOUT); + NUTS_CLOSE(sub); nng_aio_free(aio); } @@ -243,27 +232,27 @@ test_xsub_recv_buf_option(void) size_t sz; const char *opt = NNG_OPT_RECVBUF; - TEST_NNG_PASS(nng_sub0_open_raw(&sub)); + NUTS_PASS(nng_sub0_open_raw(&sub)); - TEST_NNG_PASS(nng_setopt_int(sub, opt, 1)); - TEST_NNG_FAIL(nng_setopt_int(sub, opt, -1), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_int(sub, opt, 1000000), NNG_EINVAL); - TEST_NNG_PASS(nng_setopt_int(sub, opt, 3)); - TEST_NNG_PASS(nng_getopt_int(sub, opt, &v)); - TEST_CHECK(v == 3); + NUTS_PASS(nng_socket_set_int(sub, opt, 1)); + NUTS_FAIL(nng_socket_set_int(sub, opt, -1), NNG_EINVAL); + NUTS_FAIL(nng_socket_set_int(sub, opt, 1000000), NNG_EINVAL); + NUTS_PASS(nng_socket_set_int(sub, opt, 3)); + NUTS_PASS(nng_socket_get_int(sub, opt, &v)); + NUTS_TRUE(v == 3); v = 0; sz = sizeof(v); - TEST_NNG_PASS(nng_getopt(sub, opt, &v, &sz)); - TEST_CHECK(v == 3); - TEST_CHECK(sz == sizeof(v)); + NUTS_PASS(nng_socket_get(sub, opt, &v, &sz)); + NUTS_TRUE(v == 3); + NUTS_TRUE(sz == sizeof(v)); - TEST_NNG_FAIL(nng_setopt(sub, opt, "", 1), NNG_EINVAL); + NUTS_FAIL(nng_socket_set(sub, opt, "", 1), NNG_EINVAL); sz = 1; - TEST_NNG_FAIL(nng_getopt(sub, opt, &v, &sz), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_bool(sub, opt, true), NNG_EBADTYPE); - TEST_NNG_FAIL(nng_getopt_bool(sub, opt, &b), NNG_EBADTYPE); + NUTS_FAIL(nng_socket_get(sub, opt, &v, &sz), NNG_EINVAL); + NUTS_FAIL(nng_socket_set_bool(sub, opt, true), NNG_EBADTYPE); + NUTS_FAIL(nng_socket_get_bool(sub, opt, &b), NNG_EBADTYPE); - TEST_NNG_PASS(nng_close(sub)); + NUTS_CLOSE(sub); } static void @@ -272,9 +261,9 @@ test_xsub_subscribe_option(void) nng_socket sub; const char *opt = NNG_OPT_SUB_SUBSCRIBE; - TEST_NNG_PASS(nng_sub0_open_raw(&sub)); - TEST_NNG_FAIL(nng_setopt(sub, opt, "abc", 3), NNG_ENOTSUP); - TEST_NNG_PASS(nng_close(sub)); + NUTS_PASS(nng_sub0_open_raw(&sub)); + NUTS_FAIL(nng_socket_set(sub, opt, "abc", 3), NNG_ENOTSUP); + NUTS_CLOSE(sub); } static void @@ -283,9 +272,9 @@ test_xsub_unsubscribe_option(void) nng_socket sub; const char *opt = NNG_OPT_SUB_UNSUBSCRIBE; - TEST_NNG_PASS(nng_sub0_open_raw(&sub)); - TEST_NNG_FAIL(nng_setopt(sub, opt, "abc", 3), NNG_ENOTSUP); - TEST_NNG_PASS(nng_close(sub)); + NUTS_PASS(nng_sub0_open_raw(&sub)); + NUTS_FAIL(nng_socket_set(sub, opt, "abc", 3), NNG_ENOTSUP); + NUTS_CLOSE(sub); } static void @@ -294,10 +283,10 @@ test_xsub_raw(void) nng_socket s; bool b; - TEST_NNG_PASS(nng_sub0_open_raw(&s)); - TEST_NNG_PASS(nng_getopt_bool(s, NNG_OPT_RAW, &b)); - TEST_CHECK(b); - TEST_NNG_PASS(nng_close(s)); + NUTS_PASS(nng_sub0_open_raw(&s)); + NUTS_PASS(nng_socket_get_bool(s, NNG_OPT_RAW, &b)); + NUTS_TRUE(b); + NUTS_CLOSE(s); } static void @@ -306,20 +295,20 @@ test_xsub_close_during_recv(void) nng_socket sub; nng_socket pub; - TEST_NNG_PASS(nng_sub0_open_raw(&sub)); - TEST_NNG_PASS(nng_pub0_open(&pub)); - TEST_NNG_PASS(nng_setopt_ms(sub, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(pub, NNG_OPT_SENDTIMEO, 100)); - TEST_NNG_PASS(nng_setopt_int(sub, NNG_OPT_RECVBUF, 5)); - TEST_NNG_PASS(nng_setopt_int(pub, NNG_OPT_SENDBUF, 20)); + NUTS_PASS(nng_sub0_open_raw(&sub)); + NUTS_PASS(nng_pub0_open(&pub)); + NUTS_PASS(nng_socket_set_ms(sub, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(pub, NNG_OPT_SENDTIMEO, 100)); + NUTS_PASS(nng_socket_set_int(sub, NNG_OPT_RECVBUF, 5)); + NUTS_PASS(nng_socket_set_int(pub, NNG_OPT_SENDBUF, 20)); - TEST_NNG_PASS(testutil_marry(pub, sub)); + NUTS_MARRY(pub, sub); for (unsigned i = 0; i < 100; i++) { - TEST_NNG_PASS(nng_send(pub, "abc", 3, 0)); + NUTS_PASS(nng_send(pub, "abc", 3, 0)); } - TEST_NNG_PASS(nng_close(pub)); - TEST_NNG_PASS(nng_close(sub)); + NUTS_CLOSE(pub); + NUTS_CLOSE(sub); } static void @@ -328,14 +317,14 @@ test_xsub_close_during_pipe_recv(void) nng_socket sub; nng_socket pub; - TEST_NNG_PASS(nng_sub0_open_raw(&sub)); - TEST_NNG_PASS(nng_pub0_open(&pub)); - TEST_NNG_PASS(nng_setopt_ms(sub, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(pub, NNG_OPT_SENDTIMEO, 100)); - TEST_NNG_PASS(nng_setopt_int(sub, NNG_OPT_RECVBUF, 5)); - TEST_NNG_PASS(nng_setopt_int(pub, NNG_OPT_SENDBUF, 20)); + NUTS_PASS(nng_sub0_open_raw(&sub)); + NUTS_PASS(nng_pub0_open(&pub)); + NUTS_PASS(nng_socket_set_ms(sub, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(pub, NNG_OPT_SENDTIMEO, 100)); + NUTS_PASS(nng_socket_set_int(sub, NNG_OPT_RECVBUF, 5)); + NUTS_PASS(nng_socket_set_int(pub, NNG_OPT_SENDBUF, 20)); - TEST_NNG_PASS(testutil_marry(pub, sub)); + NUTS_MARRY(pub, sub); for (unsigned i = 0; i < 100; i++) { int rv; @@ -343,9 +332,9 @@ test_xsub_close_during_pipe_recv(void) if (rv == NNG_ETIMEDOUT) { break; } - testutil_sleep(1); + NUTS_SLEEP(1); } - TEST_NNG_PASS(nng_close(sub)); + NUTS_CLOSE(sub); } static void @@ -354,14 +343,14 @@ test_xsub_recv_aio_stopped(void) nng_socket sub; nng_aio * aio; - TEST_NNG_PASS(nng_sub0_open_raw(&sub)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_sub0_open_raw(&sub)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); nng_aio_stop(aio); nng_recv_aio(sub, aio); nng_aio_wait(aio); - TEST_NNG_FAIL(nng_aio_result(aio), NNG_ECANCELED); - TEST_NNG_PASS(nng_close(sub)); + NUTS_FAIL(nng_aio_result(aio), NNG_ECANCELED); + NUTS_CLOSE(sub); nng_aio_free(aio); } diff --git a/src/protocol/reqrep0/rep_test.c b/src/protocol/reqrep0/rep_test.c index a79a342b..5a47e67a 100644 --- a/src/protocol/reqrep0/rep_test.c +++ b/src/protocol/reqrep0/rep_test.c @@ -7,15 +7,7 @@ // found online at https://opensource.org/licenses/MIT. // -#include <string.h> - -#include <nng/nng.h> -#include <nng/protocol/reqrep0/rep.h> -#include <nng/protocol/reqrep0/req.h> -#include <nng/supplemental/util/platform.h> - -#include <acutest.h> -#include <testutil.h> +#include <nuts.h> static void test_rep_identity(void) @@ -25,16 +17,16 @@ test_rep_identity(void) char * n1; char * n2; - TEST_NNG_PASS(nng_rep0_open(&s)); - TEST_NNG_PASS(nng_getopt_int(s, NNG_OPT_PROTO, &p1)); - TEST_NNG_PASS(nng_getopt_int(s, NNG_OPT_PEER, &p2)); - TEST_NNG_PASS(nng_getopt_string(s, NNG_OPT_PROTONAME, &n1)); - TEST_NNG_PASS(nng_getopt_string(s, NNG_OPT_PEERNAME, &n2)); - TEST_NNG_PASS(nng_close(s)); - TEST_CHECK(p1 == NNG_REP0_SELF); - TEST_CHECK(p2 == NNG_REP0_PEER); - TEST_CHECK(strcmp(n1, NNG_REP0_SELF_NAME) == 0); - TEST_CHECK(strcmp(n2, NNG_REP0_PEER_NAME) == 0); + NUTS_PASS(nng_rep0_open(&s)); + NUTS_PASS(nng_socket_get_int(s, NNG_OPT_PROTO, &p1)); + NUTS_PASS(nng_socket_get_int(s, NNG_OPT_PEER, &p2)); + NUTS_PASS(nng_socket_get_string(s, NNG_OPT_PROTONAME, &n1)); + NUTS_PASS(nng_socket_get_string(s, NNG_OPT_PEERNAME, &n2)); + NUTS_CLOSE(s); + NUTS_TRUE(p1 == NNG_REP0_SELF); + NUTS_TRUE(p2 == NNG_REP0_PEER); + NUTS_MATCH(n1, NNG_REP0_SELF_NAME); + NUTS_MATCH(n2, NNG_REP0_PEER_NAME); nng_strfree(n1); nng_strfree(n2); } @@ -45,11 +37,11 @@ test_rep_send_bad_state(void) nng_socket rep; nng_msg * msg = NULL; - TEST_CHECK(nng_rep0_open(&rep) == 0); - TEST_CHECK(nng_msg_alloc(&msg, 0) == 0); - TEST_CHECK(nng_sendmsg(rep, msg, 0) == NNG_ESTATE); + NUTS_TRUE(nng_rep0_open(&rep) == 0); + NUTS_TRUE(nng_msg_alloc(&msg, 0) == 0); + NUTS_TRUE(nng_sendmsg(rep, msg, 0) == NNG_ESTATE); nng_msg_free(msg); - TEST_CHECK(nng_close(rep) == 0); + NUTS_CLOSE(rep); } void @@ -59,33 +51,33 @@ test_rep_poll_writeable(void) nng_socket req; nng_socket rep; - TEST_NNG_PASS(nng_req0_open(&req)); - TEST_NNG_PASS(nng_rep0_open(&rep)); - TEST_NNG_PASS(nng_getopt_int(rep, NNG_OPT_SENDFD, &fd)); - TEST_CHECK(fd >= 0); + NUTS_PASS(nng_req0_open(&req)); + NUTS_PASS(nng_rep0_open(&rep)); + NUTS_PASS(nng_socket_get_int(rep, NNG_OPT_SENDFD, &fd)); + NUTS_TRUE(fd >= 0); // Not writable before connect. - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_TRUE(nuts_poll_fd(fd) == false); - TEST_NNG_PASS(testutil_marry(req, rep)); + NUTS_MARRY(req, rep); // Still not writable. - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_TRUE(nuts_poll_fd(fd) == false); // If we get a job, *then* we become writable - TEST_NNG_SEND_STR(req, "abc"); - TEST_NNG_RECV_STR(rep, "abc"); - TEST_CHECK(testutil_pollfd(fd) == true); + NUTS_SEND(req, "abc"); + NUTS_RECV(rep, "abc"); + NUTS_TRUE(nuts_poll_fd(fd) == true); // And is no longer writable once we send a message - TEST_NNG_SEND_STR(rep, "def"); - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_SEND(rep, "def"); + NUTS_TRUE(nuts_poll_fd(fd) == false); // Even after receiving it - TEST_NNG_RECV_STR(req, "def"); - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_RECV(req, "def"); + NUTS_TRUE(nuts_poll_fd(fd) == false); - TEST_NNG_PASS(nng_close(req)); - TEST_NNG_PASS(nng_close(rep)); + NUTS_CLOSE(req); + NUTS_CLOSE(rep); } void @@ -96,34 +88,34 @@ test_rep_poll_readable(void) nng_socket rep; nng_msg * msg; - TEST_NNG_PASS(nng_req0_open(&req)); - TEST_NNG_PASS(nng_rep0_open(&rep)); - TEST_NNG_PASS(nng_getopt_int(rep, NNG_OPT_RECVFD, &fd)); - TEST_CHECK(fd >= 0); + NUTS_PASS(nng_req0_open(&req)); + NUTS_PASS(nng_rep0_open(&rep)); + NUTS_PASS(nng_socket_get_int(rep, NNG_OPT_RECVFD, &fd)); + NUTS_TRUE(fd >= 0); // Not readable if not connected! - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_TRUE(nuts_poll_fd(fd) == false); // Even after connect (no message yet) - TEST_NNG_PASS(testutil_marry(req, rep)); - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_MARRY(req, rep); + NUTS_TRUE(nuts_poll_fd(fd) == false); // But once we send messages, it is. // We have to send a request, in order to send a reply. - TEST_NNG_SEND_STR(req, "abc"); - testutil_sleep(100); + NUTS_SEND(req, "abc"); + NUTS_SLEEP(100); - TEST_CHECK(testutil_pollfd(fd) == true); + NUTS_TRUE(nuts_poll_fd(fd) == true); // and receiving makes it no longer ready - TEST_NNG_PASS(nng_recvmsg(rep, &msg, 0)); + NUTS_PASS(nng_recvmsg(rep, &msg, 0)); nng_msg_free(msg); - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_TRUE(nuts_poll_fd(fd) == false); // TODO verify unsolicited response - TEST_NNG_PASS(nng_close(req)); - TEST_NNG_PASS(nng_close(rep)); + NUTS_CLOSE(req); + NUTS_CLOSE(rep); } void @@ -133,14 +125,12 @@ test_rep_context_no_poll(void) nng_socket req; nng_ctx ctx; - TEST_NNG_PASS(nng_rep0_open(&req)); - TEST_NNG_PASS(nng_ctx_open(&ctx, req)); - TEST_NNG_FAIL( - nng_ctx_getopt_int(ctx, NNG_OPT_SENDFD, &fd), NNG_ENOTSUP); - TEST_NNG_FAIL( - nng_ctx_getopt_int(ctx, NNG_OPT_RECVFD, &fd), NNG_ENOTSUP); - TEST_NNG_PASS(nng_ctx_close(ctx)); - TEST_NNG_PASS(nng_close(req)); + NUTS_PASS(nng_rep0_open(&req)); + NUTS_PASS(nng_ctx_open(&ctx, req)); + NUTS_FAIL(nng_ctx_get_int(ctx, NNG_OPT_SENDFD, &fd), NNG_ENOTSUP); + NUTS_FAIL(nng_ctx_get_int(ctx, NNG_OPT_RECVFD, &fd), NNG_ENOTSUP); + NUTS_PASS(nng_ctx_close(ctx)); + NUTS_CLOSE(req); } void @@ -149,28 +139,27 @@ test_rep_validate_peer(void) nng_socket s1, s2; nng_stat * stats; nng_stat * reject; - char addr[64]; - - testutil_scratch_addr("inproc", sizeof(addr), addr); + char * addr; - TEST_NNG_PASS(nng_rep0_open(&s1)); - TEST_NNG_PASS(nng_rep0_open(&s2)); + NUTS_ADDR(addr, "inproc"); + NUTS_PASS(nng_rep0_open(&s1)); + NUTS_PASS(nng_rep0_open(&s2)); - TEST_NNG_PASS(nng_listen(s1, addr, NULL, 0)); - TEST_NNG_PASS(nng_dial(s2, addr, NULL, NNG_FLAG_NONBLOCK)); + NUTS_PASS(nng_listen(s1, addr, NULL, 0)); + NUTS_PASS(nng_dial(s2, addr, NULL, NNG_FLAG_NONBLOCK)); - testutil_sleep(100); - TEST_NNG_PASS(nng_stats_get(&stats)); + NUTS_SLEEP(100); + NUTS_PASS(nng_stats_get(&stats)); - TEST_CHECK(stats != NULL); - TEST_CHECK((reject = nng_stat_find_socket(stats, s1)) != NULL); - TEST_CHECK((reject = nng_stat_find(reject, "reject")) != NULL); + NUTS_TRUE(stats != NULL); + NUTS_TRUE((reject = nng_stat_find_socket(stats, s1)) != NULL); + NUTS_TRUE((reject = nng_stat_find(reject, "reject")) != NULL); - TEST_CHECK(nng_stat_type(reject) == NNG_STAT_COUNTER); - TEST_CHECK(nng_stat_value(reject) > 0); + NUTS_TRUE(nng_stat_type(reject) == NNG_STAT_COUNTER); + NUTS_TRUE(nng_stat_value(reject) > 0); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(s2)); + NUTS_CLOSE(s1); + NUTS_CLOSE(s2); nng_stats_free(stats); } @@ -181,17 +170,17 @@ test_rep_double_recv(void) nng_aio * aio1; nng_aio * aio2; - TEST_NNG_PASS(nng_rep0_open(&s1)); - TEST_NNG_PASS(nng_aio_alloc(&aio1, NULL, NULL)); - TEST_NNG_PASS(nng_aio_alloc(&aio2, NULL, NULL)); + NUTS_PASS(nng_rep0_open(&s1)); + NUTS_PASS(nng_aio_alloc(&aio1, NULL, NULL)); + NUTS_PASS(nng_aio_alloc(&aio2, NULL, NULL)); nng_recv_aio(s1, aio1); nng_recv_aio(s1, aio2); nng_aio_wait(aio2); - TEST_NNG_FAIL(nng_aio_result(aio2), NNG_ESTATE); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_FAIL(nng_aio_result(aio1), NNG_ECLOSED); + NUTS_FAIL(nng_aio_result(aio2), NNG_ESTATE); + NUTS_CLOSE(s1); + NUTS_FAIL(nng_aio_result(aio1), NNG_ECLOSED); nng_aio_free(aio1); nng_aio_free(aio2); } @@ -205,26 +194,26 @@ test_rep_close_pipe_before_send(void) nng_aio * aio1; nng_msg * m; - TEST_NNG_PASS(nng_rep0_open(&rep)); - TEST_NNG_PASS(nng_req0_open(&req)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_aio_alloc(&aio1, NULL, NULL)); + NUTS_PASS(nng_rep0_open(&rep)); + NUTS_PASS(nng_req0_open(&req)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_aio_alloc(&aio1, NULL, NULL)); - TEST_NNG_PASS(testutil_marry(req, rep)); - TEST_NNG_SEND_STR(req, "test"); + NUTS_MARRY(req, rep); + NUTS_SEND(req, "test"); nng_recv_aio(rep, aio1); nng_aio_wait(aio1); - TEST_NNG_PASS(nng_aio_result(aio1)); - TEST_CHECK((m = nng_aio_get_msg(aio1)) != NULL); + NUTS_PASS(nng_aio_result(aio1)); + NUTS_TRUE((m = nng_aio_get_msg(aio1)) != NULL); p = nng_msg_get_pipe(m); - TEST_NNG_PASS(nng_pipe_close(p)); - TEST_NNG_PASS(nng_sendmsg(rep, m, 0)); + NUTS_PASS(nng_pipe_close(p)); + NUTS_PASS(nng_sendmsg(rep, m, 0)); - TEST_NNG_PASS(nng_close(req)); - TEST_NNG_PASS(nng_close(rep)); + NUTS_CLOSE(req); + NUTS_CLOSE(rep); nng_aio_free(aio1); } @@ -236,25 +225,24 @@ test_rep_close_pipe_during_send(void) nng_pipe p = NNG_PIPE_INITIALIZER; nng_msg * m; - TEST_NNG_PASS(nng_rep0_open(&rep)); - TEST_NNG_PASS(nng_req0_open_raw(&req)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_SENDTIMEO, 200)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_int(rep, NNG_OPT_SENDBUF, 20)); - TEST_NNG_PASS(nng_setopt_int(rep, NNG_OPT_RECVBUF, 20)); - TEST_NNG_PASS(nng_setopt_int(req, NNG_OPT_SENDBUF, 20)); - TEST_NNG_PASS(nng_setopt_int(req, NNG_OPT_RECVBUF, 1)); + NUTS_PASS(nng_rep0_open(&rep)); + NUTS_PASS(nng_req0_open_raw(&req)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_SENDTIMEO, 200)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_int(rep, NNG_OPT_SENDBUF, 20)); + NUTS_PASS(nng_socket_set_int(rep, NNG_OPT_RECVBUF, 20)); + NUTS_PASS(nng_socket_set_int(req, NNG_OPT_SENDBUF, 20)); + NUTS_PASS(nng_socket_set_int(req, NNG_OPT_RECVBUF, 1)); - TEST_NNG_PASS(testutil_marry(req, rep)); + NUTS_MARRY(req, rep); for (int i = 0; i < 100; i++) { int rv; - TEST_NNG_PASS(nng_msg_alloc(&m, 4)); - TEST_NNG_PASS( - nng_msg_append_u32(m, (unsigned) i | 0x80000000u)); - TEST_NNG_PASS(nng_sendmsg(req, m, 0)); - TEST_NNG_PASS(nng_recvmsg(rep, &m, 0)); + NUTS_PASS(nng_msg_alloc(&m, 4)); + NUTS_PASS(nng_msg_append_u32(m, (unsigned) i | 0x80000000u)); + NUTS_PASS(nng_sendmsg(req, m, 0)); + NUTS_PASS(nng_recvmsg(rep, &m, 0)); p = nng_msg_get_pipe(m); rv = nng_sendmsg(rep, m, 0); if (rv == NNG_ETIMEDOUT) { @@ -262,12 +250,12 @@ test_rep_close_pipe_during_send(void) nng_msg_free(m); break; } - TEST_NNG_PASS(rv); + NUTS_PASS(rv); } - TEST_NNG_PASS(nng_pipe_close(p)); + NUTS_PASS(nng_pipe_close(p)); - TEST_NNG_PASS(nng_close(req)); - TEST_NNG_PASS(nng_close(rep)); + NUTS_CLOSE(req); + NUTS_CLOSE(rep); } void @@ -277,16 +265,16 @@ test_rep_ctx_recv_aio_stopped(void) nng_ctx ctx; nng_aio * aio; - TEST_NNG_PASS(nng_rep0_open(&rep)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); - TEST_NNG_PASS(nng_ctx_open(&ctx, rep)); + NUTS_PASS(nng_rep0_open(&rep)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_ctx_open(&ctx, rep)); nng_aio_stop(aio); nng_ctx_recv(ctx, aio); nng_aio_wait(aio); - TEST_NNG_FAIL(nng_aio_result(aio), NNG_ECANCELED); - TEST_NNG_PASS(nng_ctx_close(ctx)); - TEST_NNG_PASS(nng_close(rep)); + NUTS_FAIL(nng_aio_result(aio), NNG_ECANCELED); + NUTS_PASS(nng_ctx_close(ctx)); + NUTS_CLOSE(rep); nng_aio_free(aio); } @@ -301,54 +289,53 @@ test_rep_close_pipe_context_send(void) nng_aio * aio[100]; int i; - TEST_NNG_PASS(nng_rep0_open(&rep)); - TEST_NNG_PASS(nng_req0_open_raw(&req)); + NUTS_PASS(nng_rep0_open(&rep)); + NUTS_PASS(nng_req0_open_raw(&req)); for (i = 0; i < 100; i++) { - TEST_NNG_PASS(nng_ctx_open(&ctx[i], rep)); - TEST_NNG_PASS(nng_aio_alloc(&aio[i], NULL, NULL)); + NUTS_PASS(nng_ctx_open(&ctx[i], rep)); + NUTS_PASS(nng_aio_alloc(&aio[i], NULL, NULL)); } - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_int(rep, NNG_OPT_SENDBUF, 1)); - TEST_NNG_PASS(nng_setopt_int(rep, NNG_OPT_RECVBUF, 1)); - TEST_NNG_PASS(nng_setopt_int(req, NNG_OPT_SENDBUF, 1)); - TEST_NNG_PASS(nng_setopt_int(req, NNG_OPT_RECVBUF, 1)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_int(rep, NNG_OPT_SENDBUF, 1)); + NUTS_PASS(nng_socket_set_int(rep, NNG_OPT_RECVBUF, 1)); + NUTS_PASS(nng_socket_set_int(req, NNG_OPT_SENDBUF, 1)); + NUTS_PASS(nng_socket_set_int(req, NNG_OPT_RECVBUF, 1)); - TEST_NNG_PASS(testutil_marry(req, rep)); + NUTS_MARRY(req, rep); for (i = 0; i < 100; i++) { - TEST_NNG_PASS(nng_msg_alloc(&m, 4)); - TEST_NNG_PASS( - nng_msg_append_u32(m, (unsigned) i | 0x80000000u)); - TEST_NNG_PASS(nng_sendmsg(req, m, 0)); + NUTS_PASS(nng_msg_alloc(&m, 4)); + NUTS_PASS(nng_msg_append_u32(m, (unsigned) i | 0x80000000u)); + NUTS_PASS(nng_sendmsg(req, m, 0)); nng_ctx_recv(ctx[i], aio[i]); } for (i = 0; i < 100; i++) { nng_aio_wait(aio[i]); - TEST_NNG_PASS(nng_aio_result(aio[i])); - TEST_CHECK((m = nng_aio_get_msg(aio[i])) != NULL); + NUTS_PASS(nng_aio_result(aio[i])); + NUTS_TRUE((m = nng_aio_get_msg(aio[i])) != NULL); p = nng_msg_get_pipe(m); nng_aio_set_msg(aio[i], m); nng_ctx_send(ctx[i], aio[i]); } // Note that REQ socket is not reading the results. - TEST_NNG_PASS(nng_pipe_close(p)); + NUTS_PASS(nng_pipe_close(p)); for (i = 0; i < 100; i++) { int rv; nng_aio_wait(aio[i]); rv = nng_aio_result(aio[i]); if (rv != 0) { - TEST_NNG_FAIL(rv, NNG_ECLOSED); + NUTS_FAIL(rv, NNG_ECLOSED); nng_msg_free(nng_aio_get_msg(aio[i])); } nng_aio_free(aio[i]); - TEST_NNG_PASS(nng_ctx_close(ctx[i])); + NUTS_PASS(nng_ctx_close(ctx[i])); } - TEST_NNG_PASS(nng_close(req)); - TEST_NNG_PASS(nng_close(rep)); + NUTS_CLOSE(req); + NUTS_CLOSE(rep); } void @@ -361,33 +348,32 @@ test_rep_close_context_send(void) nng_aio * aio[100]; int i; - TEST_NNG_PASS(nng_rep0_open(&rep)); - TEST_NNG_PASS(nng_req0_open_raw(&req)); + NUTS_PASS(nng_rep0_open(&rep)); + NUTS_PASS(nng_req0_open_raw(&req)); for (i = 0; i < 100; i++) { - TEST_NNG_PASS(nng_ctx_open(&ctx[i], rep)); - TEST_NNG_PASS(nng_aio_alloc(&aio[i], NULL, NULL)); + NUTS_PASS(nng_ctx_open(&ctx[i], rep)); + NUTS_PASS(nng_aio_alloc(&aio[i], NULL, NULL)); } - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_int(rep, NNG_OPT_SENDBUF, 1)); - TEST_NNG_PASS(nng_setopt_int(rep, NNG_OPT_RECVBUF, 1)); - TEST_NNG_PASS(nng_setopt_int(req, NNG_OPT_SENDBUF, 1)); - TEST_NNG_PASS(nng_setopt_int(req, NNG_OPT_RECVBUF, 1)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_int(rep, NNG_OPT_SENDBUF, 1)); + NUTS_PASS(nng_socket_set_int(rep, NNG_OPT_RECVBUF, 1)); + NUTS_PASS(nng_socket_set_int(req, NNG_OPT_SENDBUF, 1)); + NUTS_PASS(nng_socket_set_int(req, NNG_OPT_RECVBUF, 1)); - TEST_NNG_PASS(testutil_marry(req, rep)); + NUTS_MARRY(req, rep); for (i = 0; i < 100; i++) { - TEST_NNG_PASS(nng_msg_alloc(&m, 4)); - TEST_NNG_PASS( - nng_msg_append_u32(m, (unsigned) i | 0x80000000u)); - TEST_NNG_PASS(nng_sendmsg(req, m, 0)); + NUTS_PASS(nng_msg_alloc(&m, 4)); + NUTS_PASS(nng_msg_append_u32(m, (unsigned) i | 0x80000000u)); + NUTS_PASS(nng_sendmsg(req, m, 0)); nng_ctx_recv(ctx[i], aio[i]); } for (i = 0; i < 100; i++) { nng_aio_wait(aio[i]); - TEST_NNG_PASS(nng_aio_result(aio[i])); - TEST_CHECK((m = nng_aio_get_msg(aio[i])) != NULL); + NUTS_PASS(nng_aio_result(aio[i])); + NUTS_TRUE((m = nng_aio_get_msg(aio[i])) != NULL); nng_aio_set_msg(aio[i], m); nng_ctx_send(ctx[i], aio[i]); } @@ -395,17 +381,17 @@ test_rep_close_context_send(void) // Note that REQ socket is not reading the results. for (i = 0; i < 100; i++) { int rv; - TEST_NNG_PASS(nng_ctx_close(ctx[i])); + NUTS_PASS(nng_ctx_close(ctx[i])); nng_aio_wait(aio[i]); rv = nng_aio_result(aio[i]); if (rv != 0) { - TEST_NNG_FAIL(rv, NNG_ECLOSED); + NUTS_FAIL(rv, NNG_ECLOSED); nng_msg_free(nng_aio_get_msg(aio[i])); } nng_aio_free(aio[i]); } - TEST_NNG_PASS(nng_close(req)); - TEST_NNG_PASS(nng_close(rep)); + NUTS_CLOSE(req); + NUTS_CLOSE(rep); } void @@ -415,19 +401,19 @@ test_rep_close_recv(void) nng_socket req; nng_aio * aio; - TEST_NNG_PASS(nng_rep0_open(&rep)); - TEST_NNG_PASS(nng_req0_open_raw(&req)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_rep0_open(&rep)); + NUTS_PASS(nng_req0_open_raw(&req)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(testutil_marry(req, rep)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_MARRY(req, rep); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); nng_recv_aio(rep, aio); - TEST_NNG_PASS(nng_close(rep)); - TEST_NNG_PASS(nng_close(req)); + NUTS_CLOSE(rep); + NUTS_CLOSE(req); nng_aio_wait(aio); - TEST_NNG_FAIL(nng_aio_result(aio), NNG_ECLOSED); + NUTS_FAIL(nng_aio_result(aio), NNG_ECLOSED); nng_aio_free(aio); } @@ -461,28 +447,28 @@ test_rep_close_recv_cb(void) struct rep_close_recv_cb_state state; memset(&state, 0, sizeof(state)); - TEST_NNG_PASS(nng_mtx_alloc(&state.mtx)); - TEST_NNG_PASS(nng_cv_alloc(&state.cv, state.mtx)); + NUTS_PASS(nng_mtx_alloc(&state.mtx)); + NUTS_PASS(nng_cv_alloc(&state.cv, state.mtx)); - TEST_NNG_PASS(nng_rep0_open(&rep)); - TEST_NNG_PASS(nng_req0_open_raw(&req)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_rep0_open(&rep)); + NUTS_PASS(nng_req0_open_raw(&req)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(testutil_marry(req, rep)); - TEST_NNG_PASS(nng_aio_alloc(&state.aio, rep_close_recv_cb, &state)); + NUTS_MARRY(req, rep); + NUTS_PASS(nng_aio_alloc(&state.aio, rep_close_recv_cb, &state)); nng_recv_aio(rep, state.aio); - TEST_NNG_PASS(nng_close(rep)); - TEST_NNG_PASS(nng_close(req)); + NUTS_CLOSE(rep); + NUTS_CLOSE(req); nng_mtx_lock(state.mtx); while (!state.done) { - TEST_NNG_PASS(nng_cv_until(state.cv, nng_clock() + 1000)); + NUTS_PASS(nng_cv_until(state.cv, nng_clock() + 1000)); } nng_mtx_unlock(state.mtx); - TEST_CHECK(state.done != 0); - TEST_NNG_FAIL(nng_aio_result(state.aio), NNG_ECLOSED); - TEST_CHECK(nng_aio_get_msg(state.aio) == NULL); + NUTS_TRUE(state.done != 0); + NUTS_FAIL(nng_aio_result(state.aio), NNG_ECLOSED); + NUTS_TRUE(nng_aio_get_msg(state.aio) == NULL); nng_aio_free(state.aio); nng_cv_free(state.cv); nng_mtx_free(state.mtx); @@ -495,16 +481,16 @@ test_rep_ctx_recv_nonblock(void) nng_ctx ctx; nng_aio * aio; - TEST_NNG_PASS(nng_rep0_open(&rep)); - TEST_NNG_PASS(nng_ctx_open(&ctx, rep)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_rep0_open(&rep)); + NUTS_PASS(nng_ctx_open(&ctx, rep)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); nng_aio_set_timeout(aio, 0); // Instant timeout nng_ctx_recv(ctx, aio); nng_aio_wait(aio); - TEST_NNG_FAIL(nng_aio_result(aio), NNG_ETIMEDOUT); - TEST_NNG_PASS(nng_close(rep)); + NUTS_FAIL(nng_aio_result(aio), NNG_ETIMEDOUT); + NUTS_CLOSE(rep); nng_aio_free(aio); } @@ -517,19 +503,19 @@ test_rep_ctx_send_nonblock(void) nng_aio * aio; nng_msg * msg; - TEST_NNG_PASS(nng_req0_open(&req)); - TEST_NNG_PASS(nng_rep0_open(&rep)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_RECVTIMEO, 2000)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_ctx_open(&ctx, rep)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); - TEST_NNG_PASS(testutil_marry(req, rep)); + NUTS_PASS(nng_req0_open(&req)); + NUTS_PASS(nng_rep0_open(&rep)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_RECVTIMEO, 2000)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_ctx_open(&ctx, rep)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_MARRY(req, rep); - TEST_NNG_SEND_STR(req, "SEND"); + NUTS_SEND(req, "SEND"); nng_ctx_recv(ctx, aio); nng_aio_wait(aio); - TEST_NNG_PASS(nng_aio_result(aio)); + NUTS_PASS(nng_aio_result(aio)); // message carries over msg = nng_aio_get_msg(aio); nng_aio_set_msg(aio, msg); @@ -537,9 +523,9 @@ test_rep_ctx_send_nonblock(void) nng_ctx_send(ctx, aio); nng_aio_wait(aio); - TEST_NNG_PASS(nng_aio_result(aio)); - TEST_NNG_PASS(nng_close(rep)); - TEST_NNG_PASS(nng_close(req)); + NUTS_PASS(nng_aio_result(aio)); + NUTS_CLOSE(rep); + NUTS_CLOSE(req); nng_aio_free(aio); } @@ -556,29 +542,28 @@ test_rep_ctx_send_nonblock2(void) // We are going to send a bunch of requests, receive them, // but then see that non-block pressure exerts for some, but // that at least one non-blocking send works. - TEST_NNG_PASS(nng_req0_open_raw(&req)); - TEST_NNG_PASS(nng_rep0_open(&rep)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_req0_open_raw(&req)); + NUTS_PASS(nng_rep0_open(&rep)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_SENDTIMEO, 1000)); for (int i = 0; i < 10; i++) { - TEST_NNG_PASS(nng_ctx_open(&rep_ctx[i], rep)); - TEST_NNG_PASS(nng_aio_alloc(&rep_aio[i], NULL, NULL)); + NUTS_PASS(nng_ctx_open(&rep_ctx[i], rep)); + NUTS_PASS(nng_aio_alloc(&rep_aio[i], NULL, NULL)); } - TEST_NNG_PASS(testutil_marry(req, rep)); + NUTS_MARRY(req, rep); for (int i = 0; i < 10; i++) { nng_msg *msg; - TEST_NNG_PASS(nng_msg_alloc(&msg, 4)); - TEST_NNG_PASS( - nng_msg_append_u32(msg, (unsigned) i | 0x80000000u)); + NUTS_PASS(nng_msg_alloc(&msg, 4)); + NUTS_PASS(nng_msg_append_u32(msg, (unsigned) i | 0x80000000u)); nng_ctx_recv(rep_ctx[i], rep_aio[i]); - TEST_NNG_PASS(nng_sendmsg(req, msg, 0)); + NUTS_PASS(nng_sendmsg(req, msg, 0)); } for (int i = 0; i < 10; i++) { nng_msg *msg; nng_aio_wait(rep_aio[i]); - TEST_NNG_PASS(nng_aio_result(rep_aio[i])); + NUTS_PASS(nng_aio_result(rep_aio[i])); msg = nng_aio_get_msg(rep_aio[i]); nng_aio_set_timeout(rep_aio[i], 0); nng_aio_set_msg(rep_aio[i], msg); @@ -592,7 +577,7 @@ test_rep_ctx_send_nonblock2(void) if (rv == 0) { num_good++; } else { - TEST_NNG_FAIL(rv, NNG_ETIMEDOUT); + NUTS_FAIL(rv, NNG_ETIMEDOUT); nng_msg_free(nng_aio_get_msg(rep_aio[i])); num_fail++; } @@ -605,8 +590,8 @@ test_rep_ctx_send_nonblock2(void) nng_aio_free(rep_aio[i]); nng_ctx_close(rep_ctx[i]); } - TEST_NNG_PASS(nng_close(rep)); - TEST_NNG_PASS(nng_close(req)); + NUTS_CLOSE(rep); + NUTS_CLOSE(req); } static void @@ -616,24 +601,24 @@ test_rep_send_nonblock(void) nng_socket req; int rv; - TEST_NNG_PASS(nng_req0_open(&req)); - TEST_NNG_PASS(nng_rep0_open(&rep)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_RECVTIMEO, 1000)); - 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(req, rep)); + NUTS_PASS(nng_req0_open(&req)); + NUTS_PASS(nng_rep0_open(&rep)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_SENDTIMEO, 1000)); + NUTS_MARRY(req, rep); - TEST_NNG_SEND_STR(req, "SEND"); - TEST_NNG_RECV_STR(rep, "SEND"); + NUTS_SEND(req, "SEND"); + NUTS_RECV(rep, "SEND"); // Use the nonblock flag rv = nng_send(rep, "RECV", 5, NNG_FLAG_NONBLOCK); - TEST_NNG_PASS(rv); - TEST_NNG_RECV_STR(req, "RECV"); - TEST_NNG_PASS(nng_close(rep)); - TEST_NNG_PASS(nng_close(req)); + NUTS_PASS(rv); + NUTS_RECV(req, "RECV"); + NUTS_CLOSE(rep); + NUTS_CLOSE(req); } void @@ -643,24 +628,24 @@ test_rep_recv_garbage(void) nng_socket req; nng_msg * m; - TEST_NNG_PASS(nng_rep0_open(&rep)); - TEST_NNG_PASS(nng_req0_open_raw(&req)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_RECVTIMEO, 200)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_SENDTIMEO, 200)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_rep0_open(&rep)); + NUTS_PASS(nng_req0_open_raw(&req)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_RECVTIMEO, 200)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_SENDTIMEO, 200)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(testutil_marry(req, rep)); + NUTS_MARRY(req, rep); - TEST_NNG_PASS(nng_msg_alloc(&m, 4)); - TEST_NNG_PASS(nng_msg_append_u32(m, 1u)); - TEST_NNG_PASS(nng_sendmsg(req, m, 0)); - TEST_NNG_FAIL(nng_recvmsg(rep, &m, 0), NNG_ETIMEDOUT); + NUTS_PASS(nng_msg_alloc(&m, 4)); + NUTS_PASS(nng_msg_append_u32(m, 1u)); + NUTS_PASS(nng_sendmsg(req, m, 0)); + NUTS_FAIL(nng_recvmsg(rep, &m, 0), NNG_ETIMEDOUT); - TEST_NNG_PASS(nng_close(req)); - TEST_NNG_PASS(nng_close(rep)); + NUTS_CLOSE(req); + NUTS_CLOSE(rep); } -TEST_LIST = { +NUTS_TESTS = { { "rep identity", test_rep_identity }, { "rep send bad state", test_rep_send_bad_state }, { "rep poll readable", test_rep_poll_readable }, diff --git a/src/protocol/reqrep0/req_test.c b/src/protocol/reqrep0/req_test.c index add420de..fb78efa0 100644 --- a/src/protocol/reqrep0/req_test.c +++ b/src/protocol/reqrep0/req_test.c @@ -8,14 +8,7 @@ // found online at https://opensource.org/licenses/MIT. // -#include <string.h> - -#include <nng/nng.h> -#include <nng/protocol/reqrep0/rep.h> -#include <nng/protocol/reqrep0/req.h> - -#include <acutest.h> -#include <testutil.h> +#include <nuts.h> static void test_req_identity(void) @@ -24,18 +17,18 @@ test_req_identity(void) int p; char * n; - TEST_NNG_PASS(nng_req0_open(&s)); - TEST_NNG_PASS(nng_getopt_int(s, NNG_OPT_PROTO, &p)); - TEST_CHECK(p == NNG_REQ0_SELF); - TEST_NNG_PASS(nng_getopt_int(s, NNG_OPT_PEER, &p)); - TEST_CHECK(p == NNG_REQ0_PEER); // 49 - TEST_NNG_PASS(nng_getopt_string(s, NNG_OPT_PROTONAME, &n)); - TEST_CHECK(strcmp(n, NNG_REQ0_SELF_NAME) == 0); + NUTS_PASS(nng_req0_open(&s)); + NUTS_PASS(nng_socket_get_int(s, NNG_OPT_PROTO, &p)); + NUTS_TRUE(p == NNG_REQ0_SELF); + NUTS_PASS(nng_socket_get_int(s, NNG_OPT_PEER, &p)); + NUTS_TRUE(p == NNG_REQ0_PEER); // 49 + NUTS_PASS(nng_socket_get_string(s, NNG_OPT_PROTONAME, &n)); + NUTS_MATCH(n, NNG_REQ0_SELF_NAME); nng_strfree(n); - TEST_NNG_PASS(nng_getopt_string(s, NNG_OPT_PEERNAME, &n)); - TEST_CHECK(strcmp(n, NNG_REQ0_PEER_NAME) == 0); + NUTS_PASS(nng_socket_get_string(s, NNG_OPT_PEERNAME, &n)); + NUTS_MATCH(n, NNG_REQ0_PEER_NAME); nng_strfree(n); - TEST_NNG_PASS(nng_close(s)); + NUTS_CLOSE(s); } static void @@ -47,31 +40,31 @@ test_req_ttl_option(void) size_t sz; const char *opt = NNG_OPT_MAXTTL; - TEST_NNG_PASS(nng_req0_open(&req)); + NUTS_PASS(nng_req0_open(&req)); - TEST_NNG_PASS(nng_setopt_int(req, opt, 1)); - TEST_NNG_FAIL(nng_setopt_int(req, opt, 0), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_int(req, opt, -1), NNG_EINVAL); + NUTS_PASS(nng_socket_set_int(req, opt, 1)); + NUTS_FAIL(nng_socket_set_int(req, opt, 0), NNG_EINVAL); + NUTS_FAIL(nng_socket_set_int(req, opt, -1), NNG_EINVAL); // This test will fail if the NNI_MAX_MAX_TTL is changed from the // builtin default of 15. - TEST_NNG_FAIL(nng_setopt_int(req, opt, 16), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_int(req, opt, 256), NNG_EINVAL); - TEST_NNG_PASS(nng_setopt_int(req, opt, 3)); - TEST_NNG_PASS(nng_getopt_int(req, opt, &v)); - TEST_CHECK(v == 3); + NUTS_FAIL(nng_socket_set_int(req, opt, 16), NNG_EINVAL); + NUTS_FAIL(nng_socket_set_int(req, opt, 256), NNG_EINVAL); + NUTS_PASS(nng_socket_set_int(req, opt, 3)); + NUTS_PASS(nng_socket_get_int(req, opt, &v)); + NUTS_TRUE(v == 3); v = 0; sz = sizeof(v); - TEST_NNG_PASS(nng_getopt(req, opt, &v, &sz)); - TEST_CHECK(v == 3); - TEST_CHECK(sz == sizeof(v)); + NUTS_PASS(nng_socket_get(req, opt, &v, &sz)); + NUTS_TRUE(v == 3); + NUTS_TRUE(sz == sizeof(v)); - TEST_NNG_FAIL(nng_setopt(req, opt, "", 1), NNG_EINVAL); + NUTS_FAIL(nng_socket_set(req, opt, "", 1), NNG_EINVAL); sz = 1; - TEST_NNG_FAIL(nng_getopt(req, opt, &v, &sz), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_bool(req, opt, true), NNG_EBADTYPE); - TEST_NNG_FAIL(nng_getopt_bool(req, opt, &b), NNG_EBADTYPE); + NUTS_FAIL(nng_socket_get(req, opt, &v, &sz), NNG_EINVAL); + NUTS_FAIL(nng_socket_set_bool(req, opt, true), NNG_EBADTYPE); + NUTS_FAIL(nng_socket_get_bool(req, opt, &b), NNG_EBADTYPE); - TEST_NNG_PASS(nng_close(req)); + NUTS_CLOSE(req); } static void @@ -83,17 +76,17 @@ test_req_resend_option(void) size_t sz = sizeof(b); const char * opt = NNG_OPT_REQ_RESENDTIME; - TEST_NNG_PASS(nng_req0_open(&req)); + NUTS_PASS(nng_req0_open(&req)); - TEST_CHECK(nng_setopt_ms(req, opt, 10) == 0); - TEST_NNG_FAIL(nng_setopt(req, opt, "", 1), NNG_EINVAL); - TEST_NNG_FAIL(nng_getopt(req, opt, &b, &sz), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_bool(req, opt, true), NNG_EBADTYPE); - TEST_NNG_FAIL(nng_getopt_bool(req, opt, &b), NNG_EBADTYPE); + NUTS_TRUE(nng_socket_set_ms(req, opt, 10) == 0); + NUTS_FAIL(nng_socket_set(req, opt, "", 1), NNG_EINVAL); + NUTS_FAIL(nng_socket_get(req, opt, &b, &sz), NNG_EINVAL); + NUTS_FAIL(nng_socket_set_bool(req, opt, true), NNG_EBADTYPE); + NUTS_FAIL(nng_socket_get_bool(req, opt, &b), NNG_EBADTYPE); - TEST_NNG_PASS(nng_getopt_ms(req, opt, &d)); - TEST_CHECK(d == 10); - TEST_NNG_PASS(nng_close(req)); + NUTS_PASS(nng_socket_get_ms(req, opt, &d)); + NUTS_TRUE(d == 10); + NUTS_CLOSE(req); } void @@ -102,10 +95,10 @@ test_req_recv_bad_state(void) nng_socket req; nng_msg * msg = NULL; - TEST_CHECK(nng_req0_open(&req) == 0); - TEST_CHECK(nng_recvmsg(req, &msg, 0) == NNG_ESTATE); - TEST_CHECK(msg == NULL); - TEST_CHECK(nng_close(req) == 0); + NUTS_TRUE(nng_req0_open(&req) == 0); + NUTS_TRUE(nng_recvmsg(req, &msg, 0) == NNG_ESTATE); + NUTS_NULL(msg); + NUTS_CLOSE(req); } static void @@ -116,31 +109,31 @@ test_req_recv_garbage(void) nng_msg * m; uint32_t req_id; - TEST_NNG_PASS(nng_rep0_open_raw(&rep)); - TEST_NNG_PASS(nng_req0_open(&req)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_RECVTIMEO, 100)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_rep0_open_raw(&rep)); + NUTS_PASS(nng_req0_open(&req)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_RECVTIMEO, 100)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(testutil_marry(req, rep)); + NUTS_MARRY(req, rep); - TEST_NNG_PASS(nng_msg_alloc(&m, 0)); - TEST_NNG_PASS(nng_sendmsg(req, m, 0)); + NUTS_PASS(nng_msg_alloc(&m, 0)); + NUTS_PASS(nng_sendmsg(req, m, 0)); - TEST_NNG_PASS(nng_recvmsg(rep, &m, 0)); + NUTS_PASS(nng_recvmsg(rep, &m, 0)); // The message will have a header that contains the 32-bit pipe ID, // followed by the 32-bit request ID. We will discard the request // ID before sending it out. - TEST_CHECK(nng_msg_header_len(m) == 8); - TEST_NNG_PASS(nng_msg_header_chop_u32(m, &req_id)); + NUTS_TRUE(nng_msg_header_len(m) == 8); + NUTS_PASS(nng_msg_header_chop_u32(m, &req_id)); - TEST_NNG_PASS(nng_sendmsg(rep, m, 0)); - TEST_NNG_FAIL(nng_recvmsg(req, &m, 0), NNG_ETIMEDOUT); + NUTS_PASS(nng_sendmsg(rep, m, 0)); + NUTS_FAIL(nng_recvmsg(req, &m, 0), NNG_ETIMEDOUT); - TEST_NNG_PASS(nng_close(req)); - TEST_NNG_PASS(nng_close(rep)); + NUTS_CLOSE(req); + NUTS_CLOSE(rep); } #define SECOND 1000 @@ -150,40 +143,24 @@ test_req_rep_exchange(void) { nng_socket req; nng_socket rep; - nng_msg * msg = NULL; - TEST_CHECK(nng_req0_open(&req) == 0); - TEST_CHECK(nng_rep0_open(&rep) == 0); - - TEST_CHECK(nng_setopt_ms(req, NNG_OPT_RECVTIMEO, SECOND) == 0); - TEST_CHECK(nng_setopt_ms(rep, NNG_OPT_RECVTIMEO, SECOND) == 0); - TEST_CHECK(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, SECOND) == 0); - TEST_CHECK(nng_setopt_ms(rep, NNG_OPT_SENDTIMEO, SECOND) == 0); - - TEST_CHECK(testutil_marry(rep, req) == 0); - - TEST_CHECK(nng_msg_alloc(&msg, 0) == 0); - TEST_CHECK(nng_msg_append(msg, "ping", 5) == 0); - TEST_CHECK(nng_msg_len(msg) == 5); - TEST_CHECK(strcmp(nng_msg_body(msg), "ping") == 0); - TEST_CHECK(nng_sendmsg(req, msg, 0) == 0); - msg = NULL; - TEST_CHECK(nng_recvmsg(rep, &msg, 0) == 0); - TEST_CHECK(msg != NULL); - TEST_CHECK(nng_msg_len(msg) == 5); - TEST_CHECK(strcmp(nng_msg_body(msg), "ping") == 0); - nng_msg_trim(msg, 5); - TEST_CHECK(nng_msg_append(msg, "pong", 5) == 0); - TEST_CHECK(nng_sendmsg(rep, msg, 0) == 0); - msg = NULL; - TEST_CHECK(nng_recvmsg(req, &msg, 0) == 0); - TEST_CHECK(msg != NULL); - TEST_CHECK(nng_msg_len(msg) == 5); - TEST_CHECK(strcmp(nng_msg_body(msg), "pong") == 0); - nng_msg_free(msg); + NUTS_TRUE(nng_req0_open(&req) == 0); + NUTS_TRUE(nng_rep0_open(&rep) == 0); + + NUTS_TRUE(nng_socket_set_ms(req, NNG_OPT_RECVTIMEO, SECOND) == 0); + NUTS_TRUE(nng_socket_set_ms(rep, NNG_OPT_RECVTIMEO, SECOND) == 0); + NUTS_TRUE(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, SECOND) == 0); + NUTS_TRUE(nng_socket_set_ms(rep, NNG_OPT_SENDTIMEO, SECOND) == 0); + + NUTS_MARRY(rep, req); - TEST_CHECK(nng_close(req) == 0); - TEST_CHECK(nng_close(rep) == 0); + NUTS_SEND(req, "ping"); + NUTS_RECV(rep, "ping"); + NUTS_SEND(rep, "pong"); + NUTS_RECV(req, "pong"); + + NUTS_CLOSE(req); + NUTS_CLOSE(rep); } void @@ -192,24 +169,24 @@ test_req_resend(void) nng_socket req; nng_socket rep; - TEST_NNG_PASS(nng_req0_open(&req)); - TEST_NNG_PASS(nng_rep0_open(&rep)); + NUTS_PASS(nng_req0_open(&req)); + NUTS_PASS(nng_rep0_open(&rep)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_RECVTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_RECVTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_SENDTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_REQ_RESENDTIME, 10)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_RECVTIMEO, SECOND)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_RECVTIMEO, SECOND)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, SECOND)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_SENDTIMEO, SECOND)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_REQ_RESENDTIME, 10)); - TEST_NNG_PASS(testutil_marry(rep, req)); + NUTS_MARRY(rep, req); - TEST_NNG_SEND_STR(req, "ping"); - TEST_NNG_RECV_STR(rep, "ping"); - TEST_NNG_RECV_STR(rep, "ping"); - TEST_NNG_RECV_STR(rep, "ping"); + NUTS_SEND(req, "ping"); + NUTS_RECV(rep, "ping"); + NUTS_RECV(rep, "ping"); + NUTS_RECV(rep, "ping"); - TEST_NNG_PASS(nng_close(req)); - TEST_NNG_PASS(nng_close(rep)); + NUTS_CLOSE(req); + NUTS_CLOSE(rep); } void @@ -219,34 +196,34 @@ test_req_resend_reconnect(void) nng_socket rep1; nng_socket rep2; - TEST_NNG_PASS(nng_req0_open(&req)); - TEST_NNG_PASS(nng_rep0_open(&rep1)); - TEST_NNG_PASS(nng_rep0_open(&rep2)); + NUTS_PASS(nng_req0_open(&req)); + NUTS_PASS(nng_rep0_open(&rep1)); + NUTS_PASS(nng_rep0_open(&rep2)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_RECVTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(rep1, NNG_OPT_RECVTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(rep2, NNG_OPT_RECVTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(rep1, NNG_OPT_SENDTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(rep2, NNG_OPT_SENDTIMEO, SECOND)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_RECVTIMEO, SECOND)); + NUTS_PASS(nng_socket_set_ms(rep1, NNG_OPT_RECVTIMEO, SECOND)); + NUTS_PASS(nng_socket_set_ms(rep2, NNG_OPT_RECVTIMEO, SECOND)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, SECOND)); + NUTS_PASS(nng_socket_set_ms(rep1, NNG_OPT_SENDTIMEO, SECOND)); + NUTS_PASS(nng_socket_set_ms(rep2, NNG_OPT_SENDTIMEO, SECOND)); // We intentionally set the retry time long; that way we only see // the retry from loss of our original peer. - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_REQ_RESENDTIME, 60 * SECOND)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_REQ_RESENDTIME, 60 * SECOND)); - TEST_NNG_PASS(testutil_marry(rep1, req)); + NUTS_MARRY(rep1, req); - TEST_NNG_SEND_STR(req, "ping"); - TEST_NNG_RECV_STR(rep1, "ping"); + NUTS_SEND(req, "ping"); + NUTS_RECV(rep1, "ping"); - TEST_NNG_PASS(nng_close(rep1)); - TEST_NNG_PASS(testutil_marry(rep2, req)); + NUTS_CLOSE(rep1); + NUTS_MARRY(rep2, req); - TEST_NNG_RECV_STR(rep2, "ping"); - TEST_NNG_SEND_STR(rep2, "rep2"); - TEST_NNG_RECV_STR(req, "rep2"); + NUTS_RECV(rep2, "ping"); + NUTS_SEND(rep2, "rep2"); + NUTS_RECV(req, "rep2"); - TEST_NNG_PASS(nng_close(req)); - TEST_NNG_PASS(nng_close(rep2)); + NUTS_CLOSE(req); + NUTS_CLOSE(rep2); } void @@ -256,33 +233,33 @@ test_req_resend_disconnect(void) nng_socket rep1; nng_socket rep2; - TEST_NNG_PASS(nng_req0_open(&req)); - TEST_NNG_PASS(nng_rep0_open(&rep1)); - TEST_NNG_PASS(nng_rep0_open(&rep2)); + NUTS_PASS(nng_req0_open(&req)); + NUTS_PASS(nng_rep0_open(&rep1)); + NUTS_PASS(nng_rep0_open(&rep2)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_RECVTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(rep1, NNG_OPT_RECVTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(rep2, NNG_OPT_RECVTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(rep1, NNG_OPT_SENDTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(rep2, NNG_OPT_SENDTIMEO, SECOND)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_RECVTIMEO, SECOND)); + NUTS_PASS(nng_socket_set_ms(rep1, NNG_OPT_RECVTIMEO, SECOND)); + NUTS_PASS(nng_socket_set_ms(rep2, NNG_OPT_RECVTIMEO, SECOND)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, SECOND)); + NUTS_PASS(nng_socket_set_ms(rep1, NNG_OPT_SENDTIMEO, SECOND)); + NUTS_PASS(nng_socket_set_ms(rep2, NNG_OPT_SENDTIMEO, SECOND)); // We intentionally set the retry time long; that way we only see // the retry from loss of our original peer. - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_REQ_RESENDTIME, 60 * SECOND)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_REQ_RESENDTIME, 60 * SECOND)); - TEST_NNG_PASS(testutil_marry(rep1, req)); - TEST_NNG_SEND_STR(req, "ping"); - TEST_NNG_RECV_STR(rep1, "ping"); + NUTS_MARRY(rep1, req); + NUTS_SEND(req, "ping"); + NUTS_RECV(rep1, "ping"); - TEST_NNG_PASS(testutil_marry(rep2, req)); - TEST_NNG_PASS(nng_close(rep1)); + NUTS_MARRY(rep2, req); + NUTS_CLOSE(rep1); - TEST_NNG_RECV_STR(rep2, "ping"); - TEST_NNG_SEND_STR(rep2, "rep2"); - TEST_NNG_RECV_STR(req, "rep2"); + NUTS_RECV(rep2, "ping"); + NUTS_SEND(rep2, "rep2"); + NUTS_RECV(req, "rep2"); - TEST_NNG_PASS(nng_close(req)); - TEST_NNG_PASS(nng_close(rep2)); + NUTS_CLOSE(req); + NUTS_CLOSE(rep2); } void @@ -292,32 +269,32 @@ test_req_disconnect_no_retry(void) nng_socket rep1; nng_socket rep2; - TEST_NNG_PASS(nng_req0_open(&req)); - TEST_NNG_PASS(nng_rep0_open(&rep1)); - TEST_NNG_PASS(nng_rep0_open(&rep2)); + NUTS_PASS(nng_req0_open(&req)); + NUTS_PASS(nng_rep0_open(&rep1)); + NUTS_PASS(nng_rep0_open(&rep2)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_RECVTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(rep1, NNG_OPT_RECVTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(rep2, NNG_OPT_RECVTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(rep1, NNG_OPT_SENDTIMEO, SECOND / 10)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_RECVTIMEO, SECOND)); + NUTS_PASS(nng_socket_set_ms(rep1, NNG_OPT_RECVTIMEO, SECOND)); + NUTS_PASS(nng_socket_set_ms(rep2, NNG_OPT_RECVTIMEO, SECOND)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, SECOND)); + NUTS_PASS(nng_socket_set_ms(rep1, NNG_OPT_SENDTIMEO, SECOND / 10)); // Setting the resend time to zero so we will force an error // if the peer disconnects without sending us an answer. - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_REQ_RESENDTIME, 0)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_REQ_RESENDTIME, 0)); - TEST_NNG_PASS(testutil_marry(rep1, req)); - TEST_NNG_SEND_STR(req, "ping"); - TEST_NNG_RECV_STR(rep1, "ping"); + NUTS_MARRY(rep1, req); + NUTS_SEND(req, "ping"); + NUTS_RECV(rep1, "ping"); - TEST_NNG_PASS(testutil_marry(rep2, req)); - TEST_NNG_PASS(nng_close(rep1)); + NUTS_MARRY(rep2, req); + NUTS_CLOSE(rep1); nng_msg *msg = NULL; - TEST_NNG_FAIL(nng_recvmsg(req, &msg, 0), NNG_ECONNRESET); - TEST_NNG_FAIL(nng_recvmsg(rep2, &msg, 0), NNG_ETIMEDOUT); + NUTS_FAIL(nng_recvmsg(req, &msg, 0), NNG_ECONNRESET); + NUTS_FAIL(nng_recvmsg(rep2, &msg, 0), NNG_ETIMEDOUT); - TEST_NNG_PASS(nng_close(req)); - TEST_NNG_PASS(nng_close(rep2)); + NUTS_CLOSE(req); + NUTS_CLOSE(rep2); } void @@ -328,186 +305,152 @@ test_req_disconnect_abort(void) nng_socket rep2; nng_aio * aio; - TEST_NNG_PASS(nng_req0_open(&req)); - TEST_NNG_PASS(nng_rep0_open(&rep1)); - TEST_NNG_PASS(nng_rep0_open(&rep2)); - TEST_NNG_PASS(nng_aio_alloc(&aio, 0, 0)); + NUTS_PASS(nng_req0_open(&req)); + NUTS_PASS(nng_rep0_open(&rep1)); + NUTS_PASS(nng_rep0_open(&rep2)); + NUTS_PASS(nng_aio_alloc(&aio, 0, 0)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_RECVTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(rep1, NNG_OPT_RECVTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(rep2, NNG_OPT_RECVTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(rep1, NNG_OPT_SENDTIMEO, SECOND / 10)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_RECVTIMEO, SECOND)); + NUTS_PASS(nng_socket_set_ms(rep1, NNG_OPT_RECVTIMEO, SECOND)); + NUTS_PASS(nng_socket_set_ms(rep2, NNG_OPT_RECVTIMEO, SECOND)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, SECOND)); + NUTS_PASS(nng_socket_set_ms(rep1, NNG_OPT_SENDTIMEO, SECOND / 10)); // Setting the resend time to zero so we will force an error // if the peer disconnects without sending us an answer. - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_REQ_RESENDTIME, 0)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_REQ_RESENDTIME, 0)); - TEST_NNG_PASS(testutil_marry(rep1, req)); - TEST_NNG_SEND_STR(req, "ping"); - TEST_NNG_RECV_STR(rep1, "ping"); + NUTS_MARRY(rep1, req); + NUTS_SEND(req, "ping"); + NUTS_RECV(rep1, "ping"); nng_recv_aio(req, aio); - TEST_NNG_PASS(testutil_marry(rep2, req)); - TEST_NNG_PASS(nng_close(rep1)); + NUTS_MARRY(rep2, req); + NUTS_CLOSE(rep1); nng_msg *msg = NULL; nng_aio_wait(aio); - TEST_NNG_FAIL(nng_aio_result(aio), NNG_ECONNRESET); - TEST_NNG_FAIL(nng_recvmsg(rep2, &msg, 0), NNG_ETIMEDOUT); + NUTS_FAIL(nng_aio_result(aio), NNG_ECONNRESET); + NUTS_FAIL(nng_recvmsg(rep2, &msg, 0), NNG_ETIMEDOUT); nng_aio_free(aio); - TEST_NNG_PASS(nng_close(req)); - TEST_NNG_PASS(nng_close(rep2)); + NUTS_CLOSE(req); + NUTS_CLOSE(rep2); } void test_req_cancel(void) { - nng_msg * abc; - nng_msg * def; - nng_msg * cmd; nng_duration retry = SECOND; nng_socket req; nng_socket rep; - TEST_NNG_PASS(nng_rep_open(&rep)); - TEST_NNG_PASS(nng_req_open(&req)); - - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_RECVTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_RECVTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, 5 * SECOND)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_SENDTIMEO, 5 * SECOND)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_REQ_RESENDTIME, retry)); - TEST_NNG_PASS(nng_setopt_int(req, NNG_OPT_SENDBUF, 16)); + NUTS_PASS(nng_rep_open(&rep)); + NUTS_PASS(nng_req_open(&req)); - TEST_NNG_PASS(nng_msg_alloc(&abc, 0)); - TEST_NNG_PASS(nng_msg_append(abc, "abc", 4)); - TEST_NNG_PASS(nng_msg_alloc(&def, 0)); - TEST_NNG_PASS(nng_msg_append(def, "def", 4)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_RECVTIMEO, SECOND)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_RECVTIMEO, SECOND)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, 5 * SECOND)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_SENDTIMEO, 5 * SECOND)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_REQ_RESENDTIME, retry)); + NUTS_PASS(nng_socket_set_int(req, NNG_OPT_SENDBUF, 16)); - TEST_NNG_PASS(testutil_marry(rep, req)); + NUTS_MARRY(rep, req); // Send req #1 (abc). - TEST_CHECK(nng_sendmsg(req, abc, 0) == 0); + NUTS_SEND(req, "abc"); // Sleep a bit. This is so that we ensure that our request gets // to the far side. (If we cancel too fast, then our outgoing send // will be canceled before it gets to the peer.) - testutil_sleep(100); + NUTS_SLEEP(100); // Send the next next request ("def"). Note that // the REP side server will have already buffered the receive // request, and should simply be waiting for us to reply to abc. - TEST_NNG_PASS(nng_sendmsg(req, def, 0)); + NUTS_SEND(req, "def"); // Receive the first request (should be abc) on the REP server. - TEST_NNG_PASS(nng_recvmsg(rep, &cmd, 0)); - TEST_ASSERT(cmd != NULL); - TEST_CHECK(nng_msg_len(cmd) == 4); - TEST_CHECK(strcmp(nng_msg_body(cmd), "abc") == 0); + NUTS_RECV(rep, "abc"); // REP sends the reply to first command. This will be discarded // by the REQ socket. - TEST_NNG_PASS(nng_sendmsg(rep, cmd, 0)); + NUTS_SEND(rep, "abc"); // Now get the next command from the REP; should be "def". - TEST_NNG_PASS(nng_recvmsg(rep, &cmd, 0)); - TEST_ASSERT(cmd != NULL); - TEST_CHECK(nng_msg_len(cmd) == 4); - TEST_CHECK(strcmp(nng_msg_body(cmd), "def") == 0); - TEST_MSG("Received body was %s", nng_msg_body(cmd)); + NUTS_RECV(rep, "def"); // And send it back to REQ. - TEST_NNG_PASS(nng_sendmsg(rep, cmd, 0)); + NUTS_SEND(rep, "def"); - // Try a req command. This should give back "def" - TEST_NNG_PASS(nng_recvmsg(req, &cmd, 0)); - TEST_CHECK(nng_msg_len(cmd) == 4); - TEST_CHECK(strcmp(nng_msg_body(cmd), "def") == 0); - nng_msg_free(cmd); + // And we got back only the second result. + NUTS_RECV(req, "def"); - TEST_NNG_PASS(nng_close(req)); - TEST_NNG_PASS(nng_close(rep)); + NUTS_CLOSE(req); + NUTS_CLOSE(rep); } void test_req_cancel_abort_recv(void) { - - nng_msg * abc; - nng_msg * def; - nng_msg * cmd; nng_aio * aio; nng_duration retry = SECOND * 10; // 10s (kind of never) nng_socket req; nng_socket rep; - TEST_CHECK(nng_rep_open(&rep) == 0); - TEST_CHECK(nng_req_open(&req) == 0); - TEST_CHECK(nng_aio_alloc(&aio, NULL, NULL) == 0); - - TEST_CHECK(nng_setopt_ms(req, NNG_OPT_REQ_RESENDTIME, retry) == 0); - TEST_CHECK(nng_setopt_int(req, NNG_OPT_SENDBUF, 16) == 0); - TEST_CHECK(nng_setopt_ms(req, NNG_OPT_RECVTIMEO, 5 * SECOND) == 0); - TEST_CHECK(nng_setopt_ms(rep, NNG_OPT_RECVTIMEO, 5 * SECOND) == 0); - TEST_CHECK(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, 5 * SECOND) == 0); - TEST_CHECK(nng_setopt_ms(rep, NNG_OPT_SENDTIMEO, 5 * SECOND) == 0); + NUTS_PASS(nng_rep_open(&rep)); + NUTS_PASS(nng_req_open(&req)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); - TEST_CHECK(nng_msg_alloc(&abc, 0) == 0); - TEST_CHECK(nng_msg_append(abc, "abc", 4) == 0); - TEST_CHECK(nng_msg_alloc(&def, 0) == 0); - TEST_CHECK(nng_msg_append(def, "def", 4) == 0); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_REQ_RESENDTIME, retry)); + NUTS_PASS(nng_socket_set_int(req, NNG_OPT_SENDBUF, 16)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_RECVTIMEO, 5 * SECOND)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_RECVTIMEO, 5 * SECOND)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, 5 * SECOND)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_SENDTIMEO, 5 * SECOND)); - TEST_CHECK(testutil_marry(rep, req) == 0); + NUTS_MARRY(rep, req); // Send req #1 (abc). - TEST_CHECK(nng_sendmsg(req, abc, 0) == 0); + NUTS_SEND(req, "abc"); // Wait for it to get ot the other side. - testutil_sleep(100); + NUTS_SLEEP(100); nng_aio_set_timeout(aio, 5 * SECOND); nng_recv_aio(req, aio); // Give time for this recv to post properly. - testutil_sleep(100); + NUTS_SLEEP(100); // Send the next next request ("def"). Note that // the REP side server will have already buffered the receive // request, and should simply be waiting for us to reply to // abc. - TEST_CHECK(nng_sendmsg(req, def, 0) == 0); + NUTS_SEND(req, "def"); // Our pending I/O should have been canceled. nng_aio_wait(aio); - TEST_CHECK(nng_aio_result(aio) == NNG_ECANCELED); + NUTS_FAIL(nng_aio_result(aio), NNG_ECANCELED); // Receive the first request (should be abc) on the REP server. - TEST_CHECK(nng_recvmsg(rep, &cmd, 0) == 0); - TEST_CHECK(nng_msg_len(cmd) == 4); - TEST_CHECK(strcmp(nng_msg_body(cmd), "abc") == 0); + NUTS_RECV(rep, "abc"); // REP sends the reply to first command. This will be // discarded by the REQ socket. - TEST_CHECK(nng_sendmsg(rep, cmd, 0) == 0); + NUTS_SEND(rep, "abc"); // Now get the next command from the REP; should be "def". - TEST_CHECK(nng_recvmsg(rep, &cmd, 0) == 0); - TEST_CHECK(nng_msg_len(cmd) == 4); - TEST_CHECK(strcmp(nng_msg_body(cmd), "def") == 0); + NUTS_RECV(rep, "def"); // And send it back to REQ. - TEST_CHECK(nng_sendmsg(rep, cmd, 0) == 0); + NUTS_SEND(rep, "def"); // Try a req command. This should give back "def" - TEST_CHECK(nng_recvmsg(req, &cmd, 0) == 0); - TEST_CHECK(nng_msg_len(cmd) == 4); - TEST_CHECK(strcmp(nng_msg_body(cmd), "def") == 0); - nng_msg_free(cmd); + NUTS_RECV(req, "def"); nng_aio_free(aio); - TEST_CHECK(nng_close(req) == 0); - TEST_CHECK(nng_close(rep) == 0); + NUTS_CLOSE(req); + NUTS_CLOSE(rep); } static void @@ -516,25 +459,25 @@ test_req_cancel_post_recv(void) nng_socket req; nng_socket rep; - TEST_NNG_PASS(nng_req0_open(&req)); - TEST_NNG_PASS(nng_rep0_open(&rep)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(testutil_marry(req, rep)); - - TEST_NNG_SEND_STR(req, "ONE"); - TEST_NNG_RECV_STR(rep, "ONE"); - TEST_NNG_SEND_STR(rep, "one"); - testutil_sleep(100); // Make sure reply arrives! - TEST_NNG_SEND_STR(req, "TWO"); - TEST_NNG_RECV_STR(rep, "TWO"); - TEST_NNG_SEND_STR(rep, "two"); - TEST_NNG_RECV_STR(req, "two"); - - TEST_NNG_PASS(nng_close(req)); - TEST_NNG_PASS(nng_close(rep)); + NUTS_PASS(nng_req0_open(&req)); + NUTS_PASS(nng_rep0_open(&rep)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_RECVTIMEO, 1000)); + NUTS_MARRY(req, rep); + + NUTS_SEND(req, "ONE"); + NUTS_RECV(rep, "ONE"); + NUTS_SEND(rep, "one"); + NUTS_SLEEP(100); // Make sure reply arrives! + NUTS_SEND(req, "TWO"); + NUTS_RECV(rep, "TWO"); + NUTS_SEND(rep, "two"); + NUTS_RECV(req, "two"); + + NUTS_CLOSE(req); + NUTS_CLOSE(rep); } void @@ -544,18 +487,18 @@ test_req_poll_writeable(void) nng_socket req; nng_socket rep; - TEST_NNG_PASS(nng_req0_open(&req)); - TEST_NNG_PASS(nng_rep0_open(&rep)); - TEST_NNG_PASS(nng_getopt_int(req, NNG_OPT_SENDFD, &fd)); - TEST_CHECK(fd >= 0); + NUTS_PASS(nng_req0_open(&req)); + NUTS_PASS(nng_rep0_open(&rep)); + NUTS_PASS(nng_socket_get_int(req, NNG_OPT_SENDFD, &fd)); + NUTS_TRUE(fd >= 0); // Not writable before connect. - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_TRUE(nuts_poll_fd(fd) == false); - TEST_NNG_PASS(testutil_marry(req, rep)); + NUTS_MARRY(req, rep); // It should be writable now. - TEST_CHECK(testutil_pollfd(fd) == true); + NUTS_TRUE(nuts_poll_fd(fd)); // Submit a bunch of jobs. Note that we have to stall a bit // between each message to let it queue up. @@ -564,12 +507,12 @@ test_req_poll_writeable(void) if (rv == NNG_EAGAIN) { break; } - TEST_NNG_PASS(rv); - testutil_sleep(50); + NUTS_PASS(rv); + NUTS_SLEEP(50); } - TEST_CHECK(testutil_pollfd(fd) == 0); - TEST_NNG_PASS(nng_close(req)); - TEST_NNG_PASS(nng_close(rep)); + NUTS_TRUE(nuts_poll_fd(fd) == false); + NUTS_CLOSE(req); + NUTS_CLOSE(rep); } void @@ -584,26 +527,26 @@ test_req_poll_contention(void) nng_msg * ctx_msg[5]; nng_msg * msg; - TEST_NNG_PASS(nng_req0_open(&req)); - TEST_NNG_PASS(nng_rep0_open(&rep)); - TEST_NNG_PASS(nng_setopt_int(req, NNG_OPT_SENDBUF, 1)); - TEST_NNG_PASS(nng_setopt_int(rep, NNG_OPT_RECVBUF, 1)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_req0_open(&req)); + NUTS_PASS(nng_rep0_open(&rep)); + NUTS_PASS(nng_socket_set_int(req, NNG_OPT_SENDBUF, 1)); + NUTS_PASS(nng_socket_set_int(rep, NNG_OPT_RECVBUF, 1)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_RECVTIMEO, 1000)); for (int i = 0; i < 5; i++) { - TEST_NNG_PASS(nng_ctx_open(&ctx[i], req)); - TEST_NNG_PASS(nng_aio_alloc(&ctx_aio[i], NULL, NULL)); - TEST_NNG_PASS(nng_msg_alloc(&ctx_msg[i], 0)); + NUTS_PASS(nng_ctx_open(&ctx[i], req)); + NUTS_PASS(nng_aio_alloc(&ctx_aio[i], NULL, NULL)); + NUTS_PASS(nng_msg_alloc(&ctx_msg[i], 0)); } - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_msg_alloc(&msg, 0)); - TEST_NNG_PASS(nng_getopt_int(req, NNG_OPT_SENDFD, &fd)); - TEST_CHECK(fd >= 0); + NUTS_PASS(nng_socket_get_int(req, NNG_OPT_SENDFD, &fd)); + NUTS_TRUE(fd >= 0); // Not writable before connect. - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_TRUE(nuts_poll_fd(fd) == false); nng_aio_set_msg(aio, msg); nng_send_aio(req, aio); @@ -611,35 +554,35 @@ test_req_poll_contention(void) nng_aio_set_msg(ctx_aio[i], ctx_msg[i]); nng_ctx_send(ctx[i], ctx_aio[i]); } - testutil_sleep(50); // so everything is queued steady state + NUTS_SLEEP(50); // so everything is queued steady state - TEST_NNG_PASS(testutil_marry(req, rep)); + NUTS_MARRY(req, rep); // It should not be writable now. - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_TRUE(nuts_poll_fd(fd) == false); - TEST_NNG_PASS(nng_recvmsg(rep, &msg, 0)); + NUTS_PASS(nng_recvmsg(rep, &msg, 0)); nng_msg_free(msg); // Still not writeable... - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_TRUE(nuts_poll_fd(fd) == false); for (int i = 0; i < 5; i++) { - TEST_NNG_PASS(nng_recvmsg(rep, &msg, 0)); + NUTS_PASS(nng_recvmsg(rep, &msg, 0)); nng_msg_free(msg); } // It can take a little bit of time for the eased back-pressure // to reflect across the network. - testutil_sleep(100); + NUTS_SLEEP(100); // Should be come writeable now... - TEST_CHECK(testutil_pollfd(fd) == true); + NUTS_TRUE(nuts_poll_fd(fd) == true); for (int i = 0; i < 5; i++) { nng_aio_free(ctx_aio[i]); } nng_aio_free(aio); - TEST_NNG_PASS(nng_close(req)); - TEST_NNG_PASS(nng_close(rep)); + NUTS_CLOSE(req); + NUTS_CLOSE(rep); } void @@ -650,28 +593,28 @@ test_req_poll_multi_pipe(void) nng_socket rep1; nng_socket rep2; - TEST_NNG_PASS(nng_req0_open(&req)); - TEST_NNG_PASS(nng_rep0_open(&rep1)); - TEST_NNG_PASS(nng_rep0_open(&rep2)); - TEST_NNG_PASS(nng_setopt_int(req, NNG_OPT_SENDBUF, 1)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_req0_open(&req)); + NUTS_PASS(nng_rep0_open(&rep1)); + NUTS_PASS(nng_rep0_open(&rep2)); + NUTS_PASS(nng_socket_set_int(req, NNG_OPT_SENDBUF, 1)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_getopt_int(req, NNG_OPT_SENDFD, &fd)); - TEST_CHECK(fd >= 0); + NUTS_PASS(nng_socket_get_int(req, NNG_OPT_SENDFD, &fd)); + NUTS_TRUE(fd >= 0); // Not writable before connect. - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_TRUE(nuts_poll_fd(fd) == false); - TEST_NNG_PASS(testutil_marry(req, rep1)); - TEST_NNG_PASS(testutil_marry(req, rep2)); + NUTS_MARRY(req, rep1); + NUTS_MARRY(req, rep2); - TEST_CHECK(testutil_pollfd(fd) == true); - TEST_NNG_SEND_STR(req, "ONE"); - TEST_CHECK(testutil_pollfd(fd) == true); + NUTS_TRUE(nuts_poll_fd(fd) == true); + NUTS_SEND(req, "ONE"); + NUTS_TRUE(nuts_poll_fd(fd) == true); - TEST_NNG_PASS(nng_close(req)); - TEST_NNG_PASS(nng_close(rep1)); - TEST_NNG_PASS(nng_close(rep2)); + NUTS_CLOSE(req); + NUTS_CLOSE(rep1); + NUTS_CLOSE(rep2); } void @@ -682,39 +625,39 @@ test_req_poll_readable(void) nng_socket rep; nng_msg * msg; - TEST_NNG_PASS(nng_req0_open(&req)); - TEST_NNG_PASS(nng_rep0_open(&rep)); - TEST_NNG_PASS(nng_getopt_int(req, NNG_OPT_RECVFD, &fd)); - TEST_CHECK(fd >= 0); + NUTS_PASS(nng_req0_open(&req)); + NUTS_PASS(nng_rep0_open(&rep)); + NUTS_PASS(nng_socket_get_int(req, NNG_OPT_RECVFD, &fd)); + NUTS_TRUE(fd >= 0); // Not readable if not connected! - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_TRUE(nuts_poll_fd(fd) == false); // Even after connect (no message yet) - TEST_NNG_PASS(testutil_marry(req, rep)); - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_MARRY(req, rep); + NUTS_TRUE(nuts_poll_fd(fd) == false); // But once we send messages, it is. // We have to send a request, in order to send a reply. - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); - TEST_NNG_PASS(nng_msg_append(msg, "xyz", 3)); - TEST_NNG_PASS(nng_sendmsg(req, msg, 0)); - TEST_NNG_PASS(nng_recvmsg(rep, &msg, 0)); // recv on rep - TEST_NNG_PASS(nng_sendmsg(rep, msg, 0)); // echo it back - testutil_sleep(200); // give time for message to arrive + NUTS_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_msg_append(msg, "xyz", 3)); + NUTS_PASS(nng_sendmsg(req, msg, 0)); + NUTS_PASS(nng_recvmsg(rep, &msg, 0)); // recv on rep + NUTS_PASS(nng_sendmsg(rep, msg, 0)); // echo it back + NUTS_SLEEP(200); // give time for message to arrive - TEST_CHECK(testutil_pollfd(fd) == true); + NUTS_TRUE(nuts_poll_fd(fd) == true); // and receiving makes it no longer ready - TEST_NNG_PASS(nng_recvmsg(req, &msg, 0)); + NUTS_PASS(nng_recvmsg(req, &msg, 0)); nng_msg_free(msg); - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_TRUE(nuts_poll_fd(fd) == false); // TODO verify unsolicited response - TEST_NNG_PASS(nng_close(req)); - TEST_NNG_PASS(nng_close(rep)); + NUTS_CLOSE(req); + NUTS_CLOSE(rep); } static void @@ -724,14 +667,12 @@ test_req_ctx_no_poll(void) nng_socket req; nng_ctx ctx; - TEST_NNG_PASS(nng_req0_open(&req)); - TEST_NNG_PASS(nng_ctx_open(&ctx, req)); - TEST_NNG_FAIL( - nng_ctx_getopt_int(ctx, NNG_OPT_SENDFD, &fd), NNG_ENOTSUP); - TEST_NNG_FAIL( - nng_ctx_getopt_int(ctx, NNG_OPT_RECVFD, &fd), NNG_ENOTSUP); - TEST_NNG_PASS(nng_ctx_close(ctx)); - TEST_NNG_PASS(nng_close(req)); + NUTS_PASS(nng_req0_open(&req)); + NUTS_PASS(nng_ctx_open(&ctx, req)); + NUTS_FAIL(nng_ctx_getopt_int(ctx, NNG_OPT_SENDFD, &fd), NNG_ENOTSUP); + NUTS_FAIL(nng_ctx_getopt_int(ctx, NNG_OPT_RECVFD, &fd), NNG_ENOTSUP); + NUTS_PASS(nng_ctx_close(ctx)); + NUTS_CLOSE(req); } static void @@ -743,15 +684,15 @@ test_req_ctx_send_queued(void) nng_aio * aio[3]; nng_msg * msg[3]; - TEST_NNG_PASS(nng_req0_open(&req)); - TEST_NNG_PASS(nng_rep0_open(&rep)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_RECVTIMEO, 100)); + NUTS_PASS(nng_req0_open(&req)); + NUTS_PASS(nng_rep0_open(&rep)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_RECVTIMEO, 100)); for (int i = 0; i < 3; i++) { - TEST_NNG_PASS(nng_ctx_open(&ctx[i], req)); - TEST_NNG_PASS(nng_aio_alloc(&aio[i], NULL, NULL)); - TEST_NNG_PASS(nng_msg_alloc(&msg[i], 0)); + NUTS_PASS(nng_ctx_open(&ctx[i], req)); + NUTS_PASS(nng_aio_alloc(&aio[i], NULL, NULL)); + NUTS_PASS(nng_msg_alloc(&msg[i], 0)); } for (int i = 0; i < 3; i++) { @@ -759,20 +700,20 @@ test_req_ctx_send_queued(void) nng_ctx_send(ctx[i], aio[i]); } - TEST_NNG_PASS(testutil_marry(req, rep)); + NUTS_MARRY(req, rep); - testutil_sleep(50); // Only to ensure stuff queues up + NUTS_SLEEP(50); // Only to ensure stuff queues up for (int i = 0; i < 3; i++) { nng_msg *m; - TEST_NNG_PASS(nng_recvmsg(rep, &m, 0)); + NUTS_PASS(nng_recvmsg(rep, &m, 0)); nng_msg_free(m); } - TEST_NNG_PASS(nng_close(req)); - TEST_NNG_PASS(nng_close(rep)); + NUTS_CLOSE(req); + NUTS_CLOSE(rep); for (int i = 0; i < 3; i++) { nng_aio_wait(aio[i]); - TEST_NNG_PASS(nng_aio_result(aio[i])); + NUTS_PASS(nng_aio_result(aio[i])); nng_aio_free(aio[i]); } } @@ -785,13 +726,13 @@ test_req_ctx_send_close(void) nng_aio * aio[3]; nng_msg * msg[3]; - TEST_NNG_PASS(nng_req0_open(&req)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_req0_open(&req)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, 1000)); for (int i = 0; i < 3; i++) { - TEST_NNG_PASS(nng_ctx_open(&ctx[i], req)); - TEST_NNG_PASS(nng_aio_alloc(&aio[i], NULL, NULL)); - TEST_NNG_PASS(nng_msg_alloc(&msg[i], 0)); + NUTS_PASS(nng_ctx_open(&ctx[i], req)); + NUTS_PASS(nng_aio_alloc(&aio[i], NULL, NULL)); + NUTS_PASS(nng_msg_alloc(&msg[i], 0)); } for (int i = 0; i < 3; i++) { @@ -805,11 +746,11 @@ test_req_ctx_send_close(void) for (int i = 0; i < 3; i++) { nng_aio_wait(aio[i]); - TEST_NNG_FAIL(nng_aio_result(aio[i]), NNG_ECLOSED); + NUTS_FAIL(nng_aio_result(aio[i]), NNG_ECLOSED); nng_aio_free(aio[i]); nng_msg_free(msg[i]); } - TEST_NNG_PASS(nng_close(req)); + NUTS_CLOSE(req); } static void @@ -820,13 +761,13 @@ test_req_ctx_send_abort(void) nng_aio * aio[3]; nng_msg * msg[3]; - TEST_NNG_PASS(nng_req0_open(&req)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_req0_open(&req)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, 1000)); for (int i = 0; i < 3; i++) { - TEST_NNG_PASS(nng_ctx_open(&ctx[i], req)); - TEST_NNG_PASS(nng_aio_alloc(&aio[i], NULL, NULL)); - TEST_NNG_PASS(nng_msg_alloc(&msg[i], 0)); + NUTS_PASS(nng_ctx_open(&ctx[i], req)); + NUTS_PASS(nng_aio_alloc(&aio[i], NULL, NULL)); + NUTS_PASS(nng_msg_alloc(&msg[i], 0)); } for (int i = 0; i < 3; i++) { @@ -840,11 +781,11 @@ test_req_ctx_send_abort(void) for (int i = 0; i < 3; i++) { nng_aio_wait(aio[i]); - TEST_NNG_FAIL(nng_aio_result(aio[i]), NNG_ECANCELED); + NUTS_FAIL(nng_aio_result(aio[i]), NNG_ECANCELED); nng_aio_free(aio[i]); nng_msg_free(msg[i]); } - TEST_NNG_PASS(nng_close(req)); + NUTS_CLOSE(req); } static void @@ -855,26 +796,26 @@ test_req_ctx_send_twice(void) nng_aio * aio[2]; nng_msg * msg[2]; - TEST_NNG_PASS(nng_req0_open(&req)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_ctx_open(&ctx, req)); + NUTS_PASS(nng_req0_open(&req)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_ctx_open(&ctx, req)); for (int i = 0; i < 2; i++) { - TEST_NNG_PASS(nng_aio_alloc(&aio[i], NULL, NULL)); - TEST_NNG_PASS(nng_msg_alloc(&msg[i], 0)); + NUTS_PASS(nng_aio_alloc(&aio[i], NULL, NULL)); + NUTS_PASS(nng_msg_alloc(&msg[i], 0)); } for (int i = 0; i < 2; i++) { nng_aio_set_msg(aio[i], msg[i]); nng_ctx_send(ctx, aio[i]); - testutil_sleep(50); + NUTS_SLEEP(50); } - TEST_NNG_PASS(nng_close(req)); + NUTS_CLOSE(req); nng_aio_wait(aio[0]); nng_aio_wait(aio[1]); - TEST_NNG_FAIL(nng_aio_result(aio[0]), NNG_ECANCELED); - TEST_NNG_FAIL(nng_aio_result(aio[1]), NNG_ECLOSED); + NUTS_FAIL(nng_aio_result(aio[0]), NNG_ECANCELED); + NUTS_FAIL(nng_aio_result(aio[1]), NNG_ECLOSED); for (int i = 0; i < 2; i++) { nng_aio_free(aio[i]); @@ -891,25 +832,25 @@ test_req_ctx_recv_nonblock(void) nng_aio * aio; nng_msg * msg; - TEST_NNG_PASS(nng_req0_open(&req)); - TEST_NNG_PASS(nng_rep0_open(&rep)); - TEST_NNG_PASS(nng_ctx_open(&ctx, req)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_req0_open(&req)); + NUTS_PASS(nng_rep0_open(&rep)); + NUTS_PASS(nng_ctx_open(&ctx, req)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_msg_alloc(&msg, 0)); - TEST_NNG_PASS(testutil_marry(req, rep)); + NUTS_MARRY(req, rep); nng_aio_set_msg(aio, msg); nng_ctx_send(ctx, aio); nng_aio_wait(aio); - TEST_NNG_PASS(nng_aio_result(aio)); + NUTS_PASS(nng_aio_result(aio)); nng_aio_set_timeout(aio, 0); // Instant timeout nng_ctx_recv(ctx, aio); nng_aio_wait(aio); - TEST_NNG_FAIL(nng_aio_result(aio), NNG_ETIMEDOUT); - TEST_NNG_PASS(nng_close(req)); - TEST_NNG_PASS(nng_close(rep)); + NUTS_FAIL(nng_aio_result(aio), NNG_ETIMEDOUT); + NUTS_CLOSE(req); + NUTS_CLOSE(rep); nng_aio_free(aio); } @@ -921,17 +862,17 @@ test_req_ctx_send_nonblock(void) nng_aio * aio; nng_msg * msg; - TEST_NNG_PASS(nng_req0_open(&req)); - TEST_NNG_PASS(nng_ctx_open(&ctx, req)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_req0_open(&req)); + NUTS_PASS(nng_ctx_open(&ctx, req)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_msg_alloc(&msg, 0)); nng_aio_set_msg(aio, msg); nng_aio_set_timeout(aio, 0); // Instant timeout nng_ctx_send(ctx, aio); nng_aio_wait(aio); - TEST_NNG_FAIL(nng_aio_result(aio), NNG_ETIMEDOUT); - TEST_NNG_PASS(nng_close(req)); + NUTS_FAIL(nng_aio_result(aio), NNG_ETIMEDOUT); + NUTS_CLOSE(req); nng_aio_free(aio); nng_msg_free(msg); } @@ -945,23 +886,23 @@ test_req_ctx_recv_close_socket(void) nng_aio * aio; nng_msg * m; - TEST_NNG_PASS(nng_req0_open(&req)); - TEST_NNG_PASS(nng_rep0_open(&rep)); - TEST_NNG_PASS(nng_ctx_open(&ctx, req)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); - TEST_NNG_PASS(testutil_marry(req, rep)); - TEST_NNG_PASS(nng_msg_alloc(&m, 0)); + NUTS_PASS(nng_req0_open(&req)); + NUTS_PASS(nng_rep0_open(&rep)); + NUTS_PASS(nng_ctx_open(&ctx, req)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_MARRY(req, rep); + NUTS_PASS(nng_msg_alloc(&m, 0)); nng_aio_set_msg(aio, m); nng_ctx_send(ctx, aio); nng_aio_wait(aio); - TEST_NNG_PASS(nng_aio_result(aio)); + NUTS_PASS(nng_aio_result(aio)); nng_ctx_recv(ctx, aio); nng_close(req); - TEST_NNG_FAIL(nng_aio_result(aio), NNG_ECLOSED); + NUTS_FAIL(nng_aio_result(aio), NNG_ECLOSED); nng_aio_free(aio); - TEST_NNG_PASS(nng_close(rep)); + NUTS_CLOSE(rep); } static void @@ -970,32 +911,32 @@ test_req_validate_peer(void) nng_socket s1, s2; nng_stat * stats; nng_stat * reject; - char addr[64]; + char * addr; - testutil_scratch_addr("inproc", sizeof(addr), addr); + NUTS_ADDR(addr, "inproc"); - TEST_NNG_PASS(nng_req0_open(&s1)); - TEST_NNG_PASS(nng_req0_open(&s2)); + NUTS_PASS(nng_req0_open(&s1)); + NUTS_PASS(nng_req0_open(&s2)); - TEST_NNG_PASS(nng_listen(s1, addr, NULL, 0)); - TEST_NNG_PASS(nng_dial(s2, addr, NULL, NNG_FLAG_NONBLOCK)); + NUTS_PASS(nng_listen(s1, addr, NULL, 0)); + NUTS_PASS(nng_dial(s2, addr, NULL, NNG_FLAG_NONBLOCK)); - testutil_sleep(100); - TEST_NNG_PASS(nng_stats_get(&stats)); + NUTS_SLEEP(100); + NUTS_PASS(nng_stats_get(&stats)); - TEST_CHECK(stats != NULL); - TEST_CHECK((reject = nng_stat_find_socket(stats, s1)) != NULL); - TEST_CHECK((reject = nng_stat_find(reject, "reject")) != NULL); + NUTS_TRUE(stats != NULL); + NUTS_TRUE((reject = nng_stat_find_socket(stats, s1)) != NULL); + NUTS_TRUE((reject = nng_stat_find(reject, "reject")) != NULL); - TEST_CHECK(nng_stat_type(reject) == NNG_STAT_COUNTER); - TEST_CHECK(nng_stat_value(reject) > 0); + NUTS_TRUE(nng_stat_type(reject) == NNG_STAT_COUNTER); + NUTS_TRUE(nng_stat_value(reject) > 0); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(s2)); + NUTS_CLOSE(s1); + NUTS_CLOSE(s2); nng_stats_free(stats); } -TEST_LIST = { +NUTS_TESTS = { { "req identity", test_req_identity }, { "req ttl option", test_req_ttl_option }, { "req resend option", test_req_resend_option }, diff --git a/src/protocol/reqrep0/xrep_test.c b/src/protocol/reqrep0/xrep_test.c index 8fc36964..6f1564eb 100644 --- a/src/protocol/reqrep0/xrep_test.c +++ b/src/protocol/reqrep0/xrep_test.c @@ -7,14 +7,7 @@ // found online at https://opensource.org/licenses/MIT. // -#include <string.h> - -#include <nng/nng.h> -#include <nng/protocol/reqrep0/rep.h> -#include <nng/protocol/reqrep0/req.h> - -#include <acutest.h> -#include <testutil.h> +#include <nuts.h> static void test_xrep_identity(void) @@ -24,16 +17,16 @@ test_xrep_identity(void) char * n1; char * n2; - TEST_NNG_PASS(nng_rep0_open_raw(&s)); - TEST_NNG_PASS(nng_getopt_int(s, NNG_OPT_PROTO, &p1)); - TEST_NNG_PASS(nng_getopt_int(s, NNG_OPT_PEER, &p2)); - TEST_NNG_PASS(nng_getopt_string(s, NNG_OPT_PROTONAME, &n1)); - TEST_NNG_PASS(nng_getopt_string(s, NNG_OPT_PEERNAME, &n2)); - TEST_NNG_PASS(nng_close(s)); - TEST_CHECK(p1 == NNG_REP0_SELF); - TEST_CHECK(p2 == NNG_REP0_PEER); - TEST_CHECK(strcmp(n1, NNG_REP0_SELF_NAME) == 0); - TEST_CHECK(strcmp(n2, NNG_REP0_PEER_NAME) == 0); + NUTS_PASS(nng_rep0_open_raw(&s)); + NUTS_PASS(nng_socket_get_int(s, NNG_OPT_PROTO, &p1)); + NUTS_PASS(nng_socket_get_int(s, NNG_OPT_PEER, &p2)); + NUTS_PASS(nng_socket_get_string(s, NNG_OPT_PROTONAME, &n1)); + NUTS_PASS(nng_socket_get_string(s, NNG_OPT_PEERNAME, &n2)); + NUTS_CLOSE(s); + NUTS_TRUE(p1 == NNG_REP0_SELF); + NUTS_TRUE(p2 == NNG_REP0_PEER); + NUTS_MATCH(n1, NNG_REP0_SELF_NAME); + NUTS_MATCH(n2, NNG_REP0_PEER_NAME); nng_strfree(n1); nng_strfree(n2); } @@ -44,10 +37,10 @@ test_xrep_raw(void) nng_socket s; bool b; - TEST_NNG_PASS(nng_rep0_open_raw(&s)); - TEST_NNG_PASS(nng_getopt_bool(s, NNG_OPT_RAW, &b)); - TEST_CHECK(b); - TEST_NNG_PASS(nng_close(s)); + NUTS_PASS(nng_rep0_open_raw(&s)); + NUTS_PASS(nng_socket_get_bool(s, NNG_OPT_RAW, &b)); + NUTS_TRUE(b); + NUTS_CLOSE(s); } static void @@ -56,9 +49,9 @@ test_xrep_no_context(void) nng_socket s; nng_ctx ctx; - TEST_NNG_PASS(nng_rep0_open_raw(&s)); - TEST_NNG_FAIL(nng_ctx_open(&ctx, s), NNG_ENOTSUP); - TEST_NNG_PASS(nng_close(s)); + NUTS_PASS(nng_rep0_open_raw(&s)); + NUTS_FAIL(nng_ctx_open(&ctx, s), NNG_ENOTSUP); + NUTS_CLOSE(s); } static void @@ -68,24 +61,24 @@ test_xrep_poll_writeable(void) nng_socket req; nng_socket rep; - TEST_NNG_PASS(nng_rep0_open_raw(&rep)); - TEST_NNG_PASS(nng_req0_open(&req)); - TEST_NNG_PASS(nng_getopt_int(rep, NNG_OPT_SENDFD, &fd)); - TEST_CHECK(fd >= 0); + NUTS_PASS(nng_rep0_open_raw(&rep)); + NUTS_PASS(nng_req0_open(&req)); + NUTS_PASS(nng_socket_get_int(rep, NNG_OPT_SENDFD, &fd)); + NUTS_TRUE(fd >= 0); // We are always writeable, even before connect. This is so that // back-pressure from a bad peer can't trash others. We assume // that peers won't send us requests faster than they can consume // the answers. If they do, they will lose their answers. - TEST_CHECK(testutil_pollfd(fd) == true); + NUTS_TRUE(nuts_poll_fd(fd) == true); - TEST_NNG_PASS(testutil_marry(req, rep)); + NUTS_MARRY(req, rep); // Now it's writable. - TEST_CHECK(testutil_pollfd(fd) == true); + NUTS_TRUE(nuts_poll_fd(fd) == true); - TEST_NNG_PASS(nng_close(req)); - TEST_NNG_PASS(nng_close(rep)); + NUTS_CLOSE(req); + NUTS_CLOSE(rep); } static void @@ -96,32 +89,32 @@ test_xrep_poll_readable(void) nng_socket rep; nng_msg * msg; - TEST_NNG_PASS(nng_req0_open(&req)); - TEST_NNG_PASS(nng_rep0_open_raw(&rep)); - TEST_NNG_PASS(nng_getopt_int(rep, NNG_OPT_RECVFD, &fd)); - TEST_CHECK(fd >= 0); + NUTS_PASS(nng_req0_open(&req)); + NUTS_PASS(nng_rep0_open_raw(&rep)); + NUTS_PASS(nng_socket_get_int(rep, NNG_OPT_RECVFD, &fd)); + NUTS_TRUE(fd >= 0); // Not readable if not connected! - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_TRUE(nuts_poll_fd(fd) == false); // Even after connect (no message yet) - TEST_NNG_PASS(testutil_marry(req, rep)); - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_MARRY(req, rep); + NUTS_TRUE(nuts_poll_fd(fd) == false); // But once we send messages, it is. // We have to send a request, in order to send a reply. - TEST_NNG_SEND_STR(req, "abc"); - testutil_sleep(100); + NUTS_SEND(req, "abc"); + NUTS_SLEEP(100); - TEST_CHECK(testutil_pollfd(fd) == true); + NUTS_TRUE(nuts_poll_fd(fd) == true); // and receiving makes it no longer ready - TEST_NNG_PASS(nng_recvmsg(rep, &msg, 0)); + NUTS_PASS(nng_recvmsg(rep, &msg, 0)); nng_msg_free(msg); - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_TRUE(nuts_poll_fd(fd) == false); - TEST_NNG_PASS(nng_close(req)); - TEST_NNG_PASS(nng_close(rep)); + NUTS_CLOSE(req); + NUTS_CLOSE(rep); } static void @@ -130,28 +123,28 @@ test_xrep_validate_peer(void) nng_socket s1, s2; nng_stat * stats; nng_stat * reject; - char addr[64]; + char *addr; - testutil_scratch_addr("inproc", sizeof(addr), addr); + NUTS_ADDR(addr, "inproc"); - TEST_NNG_PASS(nng_rep0_open_raw(&s1)); - TEST_NNG_PASS(nng_rep0_open(&s2)); + NUTS_PASS(nng_rep0_open_raw(&s1)); + NUTS_PASS(nng_rep0_open(&s2)); - TEST_NNG_PASS(nng_listen(s1, addr, NULL, 0)); - TEST_NNG_PASS(nng_dial(s2, addr, NULL, NNG_FLAG_NONBLOCK)); + NUTS_PASS(nng_listen(s1, addr, NULL, 0)); + NUTS_PASS(nng_dial(s2, addr, NULL, NNG_FLAG_NONBLOCK)); - testutil_sleep(100); - TEST_NNG_PASS(nng_stats_get(&stats)); + NUTS_SLEEP(100); + NUTS_PASS(nng_stats_get(&stats)); - TEST_CHECK(stats != NULL); - TEST_CHECK((reject = nng_stat_find_socket(stats, s1)) != NULL); - TEST_CHECK((reject = nng_stat_find(reject, "reject")) != NULL); + NUTS_TRUE(stats != NULL); + NUTS_TRUE((reject = nng_stat_find_socket(stats, s1)) != NULL); + NUTS_TRUE((reject = nng_stat_find(reject, "reject")) != NULL); - TEST_CHECK(nng_stat_type(reject) == NNG_STAT_COUNTER); - TEST_CHECK(nng_stat_value(reject) > 0); + NUTS_TRUE(nng_stat_type(reject) == NNG_STAT_COUNTER); + NUTS_TRUE(nng_stat_value(reject) > 0); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(s2)); + NUTS_PASS(nng_close(s1)); + NUTS_PASS(nng_close(s2)); nng_stats_free(stats); } @@ -164,26 +157,26 @@ test_xrep_close_pipe_before_send(void) nng_aio * aio1; nng_msg * m; - TEST_NNG_PASS(nng_rep0_open_raw(&rep)); - TEST_NNG_PASS(nng_req0_open(&req)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_aio_alloc(&aio1, NULL, NULL)); + NUTS_PASS(nng_rep0_open_raw(&rep)); + NUTS_PASS(nng_req0_open(&req)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_aio_alloc(&aio1, NULL, NULL)); - TEST_NNG_PASS(testutil_marry(req, rep)); - TEST_NNG_SEND_STR(req, "test"); + NUTS_MARRY(req, rep); + NUTS_SEND(req, "test"); nng_recv_aio(rep, aio1); nng_aio_wait(aio1); - TEST_NNG_PASS(nng_aio_result(aio1)); - TEST_CHECK((m = nng_aio_get_msg(aio1)) != NULL); + NUTS_PASS(nng_aio_result(aio1)); + NUTS_TRUE((m = nng_aio_get_msg(aio1)) != NULL); p = nng_msg_get_pipe(m); - TEST_NNG_PASS(nng_pipe_close(p)); - TEST_NNG_PASS(nng_sendmsg(rep, m, 0)); + NUTS_PASS(nng_pipe_close(p)); + NUTS_PASS(nng_sendmsg(rep, m, 0)); - TEST_NNG_PASS(nng_close(req)); - TEST_NNG_PASS(nng_close(rep)); + NUTS_CLOSE(req); + NUTS_CLOSE(rep); nng_aio_free(aio1); } @@ -195,37 +188,37 @@ test_xrep_close_pipe_during_send(void) nng_pipe p; nng_msg * m; - TEST_NNG_PASS(nng_rep0_open_raw(&rep)); - TEST_NNG_PASS(nng_req0_open_raw(&req)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_SENDTIMEO, 200)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_int(rep, NNG_OPT_SENDBUF, 20)); - TEST_NNG_PASS(nng_setopt_int(rep, NNG_OPT_RECVBUF, 20)); - TEST_NNG_PASS(nng_setopt_int(req, NNG_OPT_SENDBUF, 20)); - TEST_NNG_PASS(nng_setopt_int(req, NNG_OPT_RECVBUF, 1)); - - TEST_NNG_PASS(testutil_marry(req, rep)); - - TEST_NNG_PASS(nng_msg_alloc(&m, 4)); - TEST_NNG_PASS(nng_msg_append_u32(m, (unsigned) 0x81000000u)); - TEST_NNG_PASS(nng_sendmsg(req, m, 0)); - TEST_NNG_PASS(nng_recvmsg(rep, &m, 0)); + NUTS_PASS(nng_rep0_open_raw(&rep)); + NUTS_PASS(nng_req0_open_raw(&req)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_SENDTIMEO, 200)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_int(rep, NNG_OPT_SENDBUF, 20)); + NUTS_PASS(nng_socket_set_int(rep, NNG_OPT_RECVBUF, 20)); + NUTS_PASS(nng_socket_set_int(req, NNG_OPT_SENDBUF, 20)); + NUTS_PASS(nng_socket_set_int(req, NNG_OPT_RECVBUF, 1)); + + NUTS_MARRY(req, rep); + + NUTS_PASS(nng_msg_alloc(&m, 4)); + NUTS_PASS(nng_msg_append_u32(m, (unsigned) 0x81000000u)); + NUTS_PASS(nng_sendmsg(req, m, 0)); + NUTS_PASS(nng_recvmsg(rep, &m, 0)); p = nng_msg_get_pipe(m); nng_msg_free(m); for (int i = 0; i < 100; i++) { - TEST_NNG_PASS(nng_msg_alloc(&m, 4)); - TEST_NNG_PASS(nng_msg_header_append_u32(m, nng_pipe_id(p))); - TEST_NNG_PASS( + NUTS_PASS(nng_msg_alloc(&m, 4)); + NUTS_PASS(nng_msg_header_append_u32(m, nng_pipe_id(p))); + NUTS_PASS( nng_msg_header_append_u32(m, (unsigned) i | 0x80000000u)); // xrep does not exert back-pressure - TEST_NNG_PASS(nng_sendmsg(rep, m, 0)); + NUTS_PASS(nng_sendmsg(rep, m, 0)); } - TEST_NNG_PASS(nng_pipe_close(p)); + NUTS_PASS(nng_pipe_close(p)); - TEST_NNG_PASS(nng_close(req)); - TEST_NNG_PASS(nng_close(rep)); + NUTS_CLOSE(req); + NUTS_CLOSE(rep); } static void @@ -235,27 +228,27 @@ test_xrep_close_during_recv(void) nng_socket req; nng_msg * m; - TEST_NNG_PASS(nng_rep0_open_raw(&rep)); - TEST_NNG_PASS(nng_req0_open_raw(&req)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, 100)); - TEST_NNG_PASS(nng_setopt_int(rep, NNG_OPT_RECVBUF, 5)); - TEST_NNG_PASS(nng_setopt_int(req, NNG_OPT_SENDBUF, 20)); + NUTS_PASS(nng_rep0_open_raw(&rep)); + NUTS_PASS(nng_req0_open_raw(&req)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, 100)); + NUTS_PASS(nng_socket_set_int(rep, NNG_OPT_RECVBUF, 5)); + NUTS_PASS(nng_socket_set_int(req, NNG_OPT_SENDBUF, 20)); - TEST_NNG_PASS(testutil_marry(req, rep)); + NUTS_MARRY(req, rep); for (unsigned i = 0; i < 100; i++) { int rv; - TEST_NNG_PASS(nng_msg_alloc(&m, 4)); - TEST_NNG_PASS(nng_msg_header_append_u32(m, i | 0x80000000u)); + NUTS_PASS(nng_msg_alloc(&m, 4)); + NUTS_PASS(nng_msg_header_append_u32(m, i | 0x80000000u)); rv = nng_sendmsg(req, m, 0); if (rv == NNG_ETIMEDOUT) { nng_msg_free(m); break; } } - TEST_NNG_PASS(nng_close(req)); - TEST_NNG_PASS(nng_close(rep)); + NUTS_CLOSE(req); + NUTS_CLOSE(rep); } static void @@ -264,14 +257,14 @@ test_xrep_recv_aio_stopped(void) nng_socket rep; nng_aio * aio; - TEST_NNG_PASS(nng_rep0_open_raw(&rep)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_rep0_open_raw(&rep)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); nng_aio_stop(aio); nng_recv_aio(rep, aio); nng_aio_wait(aio); - TEST_NNG_FAIL(nng_aio_result(aio), NNG_ECANCELED); - TEST_NNG_PASS(nng_close(rep)); + NUTS_FAIL(nng_aio_result(aio), NNG_ECANCELED); + NUTS_CLOSE(rep); nng_aio_free(aio); } @@ -282,21 +275,21 @@ test_xrep_send_no_header(void) nng_socket req; nng_msg * m; - TEST_NNG_PASS(nng_req0_open_raw(&req)); - TEST_NNG_PASS(nng_rep0_open_raw(&rep)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_RECVTIMEO, 100)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_RECVTIMEO, 100)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_req0_open_raw(&req)); + NUTS_PASS(nng_rep0_open_raw(&rep)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_RECVTIMEO, 100)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_RECVTIMEO, 100)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(testutil_marry(req, rep)); + NUTS_MARRY(req, rep); - TEST_NNG_PASS(nng_msg_alloc(&m, 4)); - TEST_NNG_PASS(nng_sendmsg(rep, m, 0)); - TEST_NNG_FAIL(nng_recvmsg(rep, &m, 0), NNG_ETIMEDOUT); + NUTS_PASS(nng_msg_alloc(&m, 4)); + NUTS_PASS(nng_sendmsg(rep, m, 0)); + NUTS_FAIL(nng_recvmsg(rep, &m, 0), NNG_ETIMEDOUT); - TEST_NNG_PASS(nng_close(req)); - TEST_NNG_PASS(nng_close(rep)); + NUTS_CLOSE(req); + NUTS_CLOSE(rep); } static void @@ -306,21 +299,21 @@ test_xrep_recv_garbage(void) nng_socket req; nng_msg * m; - TEST_NNG_PASS(nng_rep0_open_raw(&rep)); - TEST_NNG_PASS(nng_req0_open_raw(&req)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_RECVTIMEO, 100)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_SENDTIMEO, 100)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_rep0_open_raw(&rep)); + NUTS_PASS(nng_req0_open_raw(&req)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_RECVTIMEO, 100)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_SENDTIMEO, 100)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(testutil_marry(req, rep)); + NUTS_MARRY(req, rep); - TEST_NNG_PASS(nng_msg_alloc(&m, 4)); - TEST_NNG_PASS(nng_msg_append_u32(m, 1u)); - TEST_NNG_PASS(nng_sendmsg(req, m, 0)); - TEST_NNG_FAIL(nng_recvmsg(rep, &m, 0), NNG_ETIMEDOUT); + NUTS_PASS(nng_msg_alloc(&m, 4)); + NUTS_PASS(nng_msg_append_u32(m, 1u)); + NUTS_PASS(nng_sendmsg(req, m, 0)); + NUTS_FAIL(nng_recvmsg(rep, &m, 0), NNG_ETIMEDOUT); - TEST_NNG_PASS(nng_close(req)); - TEST_NNG_PASS(nng_close(rep)); + NUTS_CLOSE(req); + NUTS_CLOSE(rep); } static void @@ -332,29 +325,29 @@ test_xrep_ttl_option(void) size_t sz; const char *opt = NNG_OPT_MAXTTL; - TEST_NNG_PASS(nng_rep0_open_raw(&rep)); + NUTS_PASS(nng_rep0_open_raw(&rep)); - TEST_NNG_PASS(nng_setopt_int(rep, opt, 1)); - TEST_NNG_FAIL(nng_setopt_int(rep, opt, 0), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_int(rep, opt, -1), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_int(rep, opt, 16), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_int(rep, opt, 256), NNG_EINVAL); - TEST_NNG_PASS(nng_setopt_int(rep, opt, 3)); - TEST_NNG_PASS(nng_getopt_int(rep, opt, &v)); - TEST_CHECK(v == 3); + NUTS_PASS(nng_socket_set_int(rep, opt, 1)); + NUTS_FAIL(nng_socket_set_int(rep, opt, 0), NNG_EINVAL); + NUTS_FAIL(nng_socket_set_int(rep, opt, -1), NNG_EINVAL); + NUTS_FAIL(nng_socket_set_int(rep, opt, 16), NNG_EINVAL); + NUTS_FAIL(nng_socket_set_int(rep, opt, 256), NNG_EINVAL); + NUTS_PASS(nng_socket_set_int(rep, opt, 3)); + NUTS_PASS(nng_socket_get_int(rep, opt, &v)); + NUTS_TRUE(v == 3); v = 0; sz = sizeof(v); - TEST_NNG_PASS(nng_getopt(rep, opt, &v, &sz)); - TEST_CHECK(v == 3); - TEST_CHECK(sz == sizeof(v)); + NUTS_PASS(nng_socket_get(rep, opt, &v, &sz)); + NUTS_TRUE(v == 3); + NUTS_TRUE(sz == sizeof(v)); - TEST_CHECK(nng_setopt(rep, opt, "", 1) == NNG_EINVAL); + NUTS_TRUE(nng_socket_set(rep, opt, "", 1) == NNG_EINVAL); sz = 1; - TEST_CHECK(nng_getopt(rep, opt, &v, &sz) == NNG_EINVAL); - TEST_CHECK(nng_setopt_bool(rep, opt, true) == NNG_EBADTYPE); - TEST_CHECK(nng_getopt_bool(rep, opt, &b) == NNG_EBADTYPE); + NUTS_TRUE(nng_socket_get(rep, opt, &v, &sz) == NNG_EINVAL); + NUTS_TRUE(nng_socket_set_bool(rep, opt, true) == NNG_EBADTYPE); + NUTS_TRUE(nng_socket_get_bool(rep, opt, &b) == NNG_EBADTYPE); - TEST_CHECK(nng_close(rep) == 0); + NUTS_TRUE(nng_close(rep) == 0); } static void @@ -364,65 +357,65 @@ test_xrep_ttl_drop(void) nng_socket req; nng_msg * m; - TEST_NNG_PASS(nng_rep0_open_raw(&rep)); - TEST_NNG_PASS(nng_req0_open_raw(&req)); - TEST_NNG_PASS(nng_setopt_int(rep, NNG_OPT_MAXTTL, 3)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_RECVTIMEO, 200)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_rep0_open_raw(&rep)); + NUTS_PASS(nng_req0_open_raw(&req)); + NUTS_PASS(nng_socket_set_int(rep, NNG_OPT_MAXTTL, 3)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_RECVTIMEO, 200)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(testutil_marry(req, rep)); + NUTS_MARRY(req, rep); // Send messages. Note that xrep implicitly adds a hop on receive. - TEST_NNG_PASS(nng_msg_alloc(&m, 0)); - TEST_NNG_PASS(nng_msg_append_u32(m, 1u)); // 2 hops - TEST_NNG_PASS(nng_msg_append_u32(m, 0x80000001u)); - TEST_NNG_PASS(nng_msg_append(m, "PASS1", 6)); - TEST_NNG_PASS(nng_sendmsg(req, m, 0)); - - TEST_NNG_PASS(nng_msg_alloc(&m, 0)); - TEST_NNG_PASS(nng_msg_append_u32(m, 1u)); // 4 hops -- discard! - TEST_NNG_PASS(nng_msg_append_u32(m, 2u)); - TEST_NNG_PASS(nng_msg_append_u32(m, 3u)); - TEST_NNG_PASS(nng_msg_append_u32(m, 0x80000002u)); - TEST_NNG_PASS(nng_msg_append(m, "FAIL2", 6)); - TEST_NNG_PASS(nng_sendmsg(req, m, 0)); - - TEST_NNG_PASS(nng_msg_alloc(&m, 0)); - TEST_NNG_PASS(nng_msg_append_u32(m, 1u)); // 3 hops - passes - TEST_NNG_PASS(nng_msg_append_u32(m, 2u)); - TEST_NNG_PASS(nng_msg_append_u32(m, 0x80000003u)); - TEST_NNG_PASS(nng_msg_append(m, "PASS3", 6)); - TEST_NNG_PASS(nng_sendmsg(req, m, 0)); - - TEST_NNG_PASS(nng_msg_alloc(&m, 0)); - TEST_NNG_PASS(nng_msg_append_u32(m, 1u)); // 4 hops -- discard! - TEST_NNG_PASS(nng_msg_append_u32(m, 2u)); - TEST_NNG_PASS(nng_msg_append_u32(m, 3u)); - TEST_NNG_PASS(nng_msg_append_u32(m, 0x80000003u)); - TEST_NNG_PASS(nng_msg_append(m, "FAIL4", 6)); - TEST_NNG_PASS(nng_sendmsg(req, m, 0)); + NUTS_PASS(nng_msg_alloc(&m, 0)); + NUTS_PASS(nng_msg_append_u32(m, 1u)); // 2 hops + NUTS_PASS(nng_msg_append_u32(m, 0x80000001u)); + NUTS_PASS(nng_msg_append(m, "PASS1", 6)); + NUTS_PASS(nng_sendmsg(req, m, 0)); + + NUTS_PASS(nng_msg_alloc(&m, 0)); + NUTS_PASS(nng_msg_append_u32(m, 1u)); // 4 hops -- discard! + NUTS_PASS(nng_msg_append_u32(m, 2u)); + NUTS_PASS(nng_msg_append_u32(m, 3u)); + NUTS_PASS(nng_msg_append_u32(m, 0x80000002u)); + NUTS_PASS(nng_msg_append(m, "FAIL2", 6)); + NUTS_PASS(nng_sendmsg(req, m, 0)); + + NUTS_PASS(nng_msg_alloc(&m, 0)); + NUTS_PASS(nng_msg_append_u32(m, 1u)); // 3 hops - passes + NUTS_PASS(nng_msg_append_u32(m, 2u)); + NUTS_PASS(nng_msg_append_u32(m, 0x80000003u)); + NUTS_PASS(nng_msg_append(m, "PASS3", 6)); + NUTS_PASS(nng_sendmsg(req, m, 0)); + + NUTS_PASS(nng_msg_alloc(&m, 0)); + NUTS_PASS(nng_msg_append_u32(m, 1u)); // 4 hops -- discard! + NUTS_PASS(nng_msg_append_u32(m, 2u)); + NUTS_PASS(nng_msg_append_u32(m, 3u)); + NUTS_PASS(nng_msg_append_u32(m, 0x80000003u)); + NUTS_PASS(nng_msg_append(m, "FAIL4", 6)); + NUTS_PASS(nng_sendmsg(req, m, 0)); // So on receive we should see 80000001 and 80000003. - TEST_NNG_PASS(nng_recvmsg(rep, &m, 0)); - TEST_CHECK(nng_msg_header_len(m) == 12); - TEST_CHECK(nng_msg_len(m) == 6); - TEST_CHECK(strcmp(nng_msg_body(m), "PASS1") == 0); + NUTS_PASS(nng_recvmsg(rep, &m, 0)); + NUTS_TRUE(nng_msg_header_len(m) == 12); + NUTS_TRUE(nng_msg_len(m) == 6); + NUTS_TRUE(strcmp(nng_msg_body(m), "PASS1") == 0); nng_msg_free(m); - TEST_NNG_PASS(nng_recvmsg(rep, &m, 0)); - TEST_CHECK(nng_msg_header_len(m) == 16); // 3 hops + ID - TEST_CHECK(nng_msg_len(m) == 6); - TEST_CHECK(strcmp(nng_msg_body(m), "PASS3") == 0); + NUTS_PASS(nng_recvmsg(rep, &m, 0)); + NUTS_TRUE(nng_msg_header_len(m) == 16); // 3 hops + ID + NUTS_TRUE(nng_msg_len(m) == 6); + NUTS_TRUE(strcmp(nng_msg_body(m), "PASS3") == 0); nng_msg_free(m); - TEST_NNG_FAIL(nng_recvmsg(rep, &m, 0), NNG_ETIMEDOUT); + NUTS_FAIL(nng_recvmsg(rep, &m, 0), NNG_ETIMEDOUT); - TEST_NNG_PASS(nng_close(req)); - TEST_NNG_PASS(nng_close(rep)); + NUTS_CLOSE(req); + NUTS_CLOSE(rep); } -TEST_LIST = { +NUTS_TESTS = { { "xrep identity", test_xrep_identity }, { "xrep raw", test_xrep_raw }, { "xrep no context", test_xrep_no_context }, diff --git a/src/protocol/reqrep0/xreq_test.c b/src/protocol/reqrep0/xreq_test.c index 68a7c7f5..8c850cba 100644 --- a/src/protocol/reqrep0/xreq_test.c +++ b/src/protocol/reqrep0/xreq_test.c @@ -7,14 +7,7 @@ // found online at https://opensource.org/licenses/MIT. // -#include <string.h> - -#include <nng/nng.h> -#include <nng/protocol/reqrep0/rep.h> -#include <nng/protocol/reqrep0/req.h> - -#include <acutest.h> -#include <testutil.h> +#include <nuts.h> static void test_xreq_identity(void) @@ -24,16 +17,16 @@ test_xreq_identity(void) char * n1; char * n2; - TEST_NNG_PASS(nng_req0_open_raw(&s)); - TEST_NNG_PASS(nng_getopt_int(s, NNG_OPT_PROTO, &p1)); - TEST_NNG_PASS(nng_getopt_int(s, NNG_OPT_PEER, &p2)); - TEST_NNG_PASS(nng_getopt_string(s, NNG_OPT_PROTONAME, &n1)); - TEST_NNG_PASS(nng_getopt_string(s, NNG_OPT_PEERNAME, &n2)); - TEST_NNG_PASS(nng_close(s)); - TEST_CHECK(p1 == NNG_REQ0_SELF); - TEST_CHECK(p2 == NNG_REQ0_PEER); - TEST_CHECK(strcmp(n1, NNG_REQ0_SELF_NAME) == 0); - TEST_CHECK(strcmp(n2, NNG_REQ0_PEER_NAME) == 0); + NUTS_PASS(nng_req0_open_raw(&s)); + NUTS_PASS(nng_socket_get_int(s, NNG_OPT_PROTO, &p1)); + NUTS_PASS(nng_socket_get_int(s, NNG_OPT_PEER, &p2)); + NUTS_PASS(nng_socket_get_string(s, NNG_OPT_PROTONAME, &n1)); + NUTS_PASS(nng_socket_get_string(s, NNG_OPT_PEERNAME, &n2)); + NUTS_CLOSE(s); + NUTS_TRUE(p1 == NNG_REQ0_SELF); + NUTS_TRUE(p2 == NNG_REQ0_PEER); + NUTS_MATCH(n1, NNG_REQ0_SELF_NAME); + NUTS_MATCH(n2, NNG_REQ0_PEER_NAME); nng_strfree(n1); nng_strfree(n2); } @@ -44,10 +37,10 @@ test_xreq_raw(void) nng_socket s; bool b; - TEST_NNG_PASS(nng_req0_open_raw(&s)); - TEST_NNG_PASS(nng_getopt_bool(s, NNG_OPT_RAW, &b)); - TEST_CHECK(b); - TEST_NNG_PASS(nng_close(s)); + NUTS_PASS(nng_req0_open_raw(&s)); + NUTS_PASS(nng_socket_get_bool(s, NNG_OPT_RAW, &b)); + NUTS_TRUE(b); + NUTS_CLOSE(s); } static void @@ -56,9 +49,9 @@ test_xreq_no_context(void) nng_socket s; nng_ctx ctx; - TEST_NNG_PASS(nng_req0_open_raw(&s)); - TEST_NNG_FAIL(nng_ctx_open(&ctx, s), NNG_ENOTSUP); - TEST_NNG_PASS(nng_close(s)); + NUTS_PASS(nng_req0_open_raw(&s)); + NUTS_FAIL(nng_ctx_open(&ctx, s), NNG_ENOTSUP); + NUTS_CLOSE(s); } static void @@ -68,21 +61,21 @@ test_xreq_poll_writeable(void) nng_socket req; nng_socket rep; - TEST_NNG_PASS(nng_req0_open_raw(&req)); - TEST_NNG_PASS(nng_rep0_open(&rep)); - TEST_NNG_PASS(nng_getopt_int(req, NNG_OPT_SENDFD, &fd)); - TEST_CHECK(fd >= 0); + NUTS_PASS(nng_req0_open_raw(&req)); + NUTS_PASS(nng_rep0_open(&rep)); + NUTS_PASS(nng_socket_get_int(req, NNG_OPT_SENDFD, &fd)); + NUTS_TRUE(fd >= 0); // We can't write until we have a connection. - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_TRUE(nuts_poll_fd(fd) == false); - TEST_NNG_PASS(testutil_marry(req, rep)); + NUTS_MARRY(req, rep); // Now it's writable. - TEST_CHECK(testutil_pollfd(fd) == true); + NUTS_TRUE(nuts_poll_fd(fd) == true); - TEST_NNG_PASS(nng_close(req)); - TEST_NNG_PASS(nng_close(rep)); + NUTS_CLOSE(req); + NUTS_CLOSE(rep); } static void @@ -93,44 +86,44 @@ test_xreq_poll_readable(void) nng_socket rep; nng_msg * msg; - TEST_NNG_PASS(nng_req0_open_raw(&req)); - TEST_NNG_PASS(nng_rep0_open(&rep)); - TEST_NNG_PASS(nng_getopt_int(req, NNG_OPT_RECVFD, &fd)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_req0_open_raw(&req)); + NUTS_PASS(nng_rep0_open(&rep)); + NUTS_PASS(nng_socket_get_int(req, NNG_OPT_RECVFD, &fd)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, 1000)); - TEST_CHECK(fd >= 0); + NUTS_TRUE(fd >= 0); // Not readable if not connected! - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_TRUE(nuts_poll_fd(fd) == false); // Even after connect (no message yet) - TEST_NNG_PASS(testutil_marry(req, rep)); - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_MARRY(req, rep); + NUTS_TRUE(nuts_poll_fd(fd) == false); // But once we send messages, it is. // We have to send a request, in order to send a reply. - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_msg_alloc(&msg, 0)); // Request ID - TEST_NNG_PASS(nng_msg_append_u32(msg, 0x80000000)); - TEST_NNG_PASS(nng_sendmsg(req, msg, 0)); + NUTS_PASS(nng_msg_append_u32(msg, 0x80000000)); + NUTS_PASS(nng_sendmsg(req, msg, 0)); - TEST_NNG_PASS(nng_recvmsg(rep, &msg, 0)); - TEST_NNG_PASS(nng_sendmsg(rep, msg, 0)); + NUTS_PASS(nng_recvmsg(rep, &msg, 0)); + NUTS_PASS(nng_sendmsg(rep, msg, 0)); - testutil_sleep(100); + NUTS_SLEEP(100); - TEST_CHECK(testutil_pollfd(fd) == true); + NUTS_TRUE(nuts_poll_fd(fd) == true); // and receiving makes it no longer ready - TEST_NNG_PASS(nng_recvmsg(req, &msg, 0)); + NUTS_PASS(nng_recvmsg(req, &msg, 0)); nng_msg_free(msg); - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_TRUE(nuts_poll_fd(fd) == false); - TEST_NNG_PASS(nng_close(req)); - TEST_NNG_PASS(nng_close(rep)); + NUTS_CLOSE(req); + NUTS_CLOSE(rep); } static void @@ -139,28 +132,28 @@ test_xreq_validate_peer(void) nng_socket s1, s2; nng_stat * stats; nng_stat * reject; - char addr[64]; + char * addr; - testutil_scratch_addr("inproc", sizeof(addr), addr); + NUTS_ADDR(addr, "inproc"); - TEST_NNG_PASS(nng_req0_open_raw(&s1)); - TEST_NNG_PASS(nng_req0_open(&s2)); + NUTS_PASS(nng_req0_open_raw(&s1)); + NUTS_PASS(nng_req0_open(&s2)); - TEST_NNG_PASS(nng_listen(s1, addr, NULL, 0)); - TEST_NNG_PASS(nng_dial(s2, addr, NULL, NNG_FLAG_NONBLOCK)); + NUTS_PASS(nng_listen(s1, addr, NULL, 0)); + NUTS_PASS(nng_dial(s2, addr, NULL, NNG_FLAG_NONBLOCK)); - testutil_sleep(100); - TEST_NNG_PASS(nng_stats_get(&stats)); + NUTS_SLEEP(100); + NUTS_PASS(nng_stats_get(&stats)); - TEST_CHECK(stats != NULL); - TEST_CHECK((reject = nng_stat_find_socket(stats, s1)) != NULL); - TEST_CHECK((reject = nng_stat_find(reject, "reject")) != NULL); + NUTS_TRUE(stats != NULL); + NUTS_TRUE((reject = nng_stat_find_socket(stats, s1)) != NULL); + NUTS_TRUE((reject = nng_stat_find(reject, "reject")) != NULL); - TEST_CHECK(nng_stat_type(reject) == NNG_STAT_COUNTER); - TEST_CHECK(nng_stat_value(reject) > 0); + NUTS_TRUE(nng_stat_type(reject) == NNG_STAT_COUNTER); + NUTS_TRUE(nng_stat_value(reject) > 0); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(s2)); + NUTS_CLOSE(s1); + NUTS_CLOSE(s2); nng_stats_free(stats); } @@ -170,14 +163,14 @@ test_xreq_recv_aio_stopped(void) nng_socket req; nng_aio * aio; - TEST_NNG_PASS(nng_req0_open_raw(&req)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_req0_open_raw(&req)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); nng_aio_stop(aio); nng_recv_aio(req, aio); nng_aio_wait(aio); - TEST_NNG_FAIL(nng_aio_result(aio), NNG_ECANCELED); - TEST_NNG_PASS(nng_close(req)); + NUTS_FAIL(nng_aio_result(aio), NNG_ECANCELED); + NUTS_CLOSE(req); nng_aio_free(aio); } @@ -189,33 +182,33 @@ test_xreq_recv_garbage(void) nng_msg * m; uint32_t req_id; - TEST_NNG_PASS(nng_rep0_open_raw(&rep)); - TEST_NNG_PASS(nng_req0_open_raw(&req)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_RECVTIMEO, 100)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_rep0_open_raw(&rep)); + NUTS_PASS(nng_req0_open_raw(&req)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_RECVTIMEO, 100)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(testutil_marry(req, rep)); + NUTS_MARRY(req, rep); - TEST_NNG_PASS(nng_msg_alloc(&m, 0)); - TEST_NNG_PASS(nng_msg_append_u32(m, 0x80000000)); - TEST_NNG_PASS(nng_sendmsg(req, m, 0)); + NUTS_PASS(nng_msg_alloc(&m, 0)); + NUTS_PASS(nng_msg_append_u32(m, 0x80000000)); + NUTS_PASS(nng_sendmsg(req, m, 0)); - TEST_NNG_PASS(nng_recvmsg(rep, &m, 0)); + NUTS_PASS(nng_recvmsg(rep, &m, 0)); // The message will have a header that contains the 32-bit pipe ID, // followed by the 32-bit request ID. We will discard the request // ID before sending it out. - TEST_CHECK(nng_msg_header_len(m) == 8); - TEST_NNG_PASS(nng_msg_header_chop_u32(m, &req_id)); - TEST_CHECK(req_id == 0x80000000); + NUTS_TRUE(nng_msg_header_len(m) == 8); + NUTS_PASS(nng_msg_header_chop_u32(m, &req_id)); + NUTS_TRUE(req_id == 0x80000000); - TEST_NNG_PASS(nng_sendmsg(rep, m, 0)); - TEST_NNG_FAIL(nng_recvmsg(req, &m, 0), NNG_ETIMEDOUT); + NUTS_PASS(nng_sendmsg(rep, m, 0)); + NUTS_FAIL(nng_recvmsg(req, &m, 0), NNG_ETIMEDOUT); - TEST_NNG_PASS(nng_close(req)); - TEST_NNG_PASS(nng_close(rep)); + NUTS_CLOSE(req); + NUTS_CLOSE(rep); } static void @@ -227,37 +220,37 @@ test_xreq_recv_header(void) nng_pipe p1, p2; uint32_t id; - TEST_NNG_PASS(nng_rep0_open_raw(&rep)); - TEST_NNG_PASS(nng_req0_open_raw(&req)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_rep0_open_raw(&rep)); + NUTS_PASS(nng_req0_open_raw(&req)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(testutil_marry_ex(req, rep, NULL, &p1, &p2)); + NUTS_MARRY_EX(req, rep, NULL, &p1, &p2); // 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, 0x2)); - TEST_NNG_PASS(nng_msg_header_append_u32(m, 0x1)); - TEST_NNG_PASS(nng_msg_header_append_u32(m, 0x80000123u)); - - TEST_NNG_PASS(nng_sendmsg(rep, m, 0)); - - TEST_NNG_PASS(nng_recvmsg(req, &m, 0)); - TEST_CHECK(nng_msg_header_len(m) == 12); - TEST_NNG_PASS(nng_msg_header_trim_u32(m, &id)); - TEST_CHECK(id == 0x2); - TEST_NNG_PASS(nng_msg_header_trim_u32(m, &id)); - TEST_CHECK(id == 0x1); - TEST_NNG_PASS(nng_msg_header_trim_u32(m, &id)); - TEST_CHECK(id == 0x80000123u); + NUTS_PASS(nng_msg_alloc(&m, 0)); + NUTS_PASS(nng_msg_header_append_u32(m, nng_pipe_id(p2))); + NUTS_PASS(nng_msg_header_append_u32(m, 0x2)); + NUTS_PASS(nng_msg_header_append_u32(m, 0x1)); + NUTS_PASS(nng_msg_header_append_u32(m, 0x80000123u)); + + NUTS_PASS(nng_sendmsg(rep, m, 0)); + + NUTS_PASS(nng_recvmsg(req, &m, 0)); + NUTS_TRUE(nng_msg_header_len(m) == 12); + NUTS_PASS(nng_msg_header_trim_u32(m, &id)); + NUTS_TRUE(id == 0x2); + NUTS_PASS(nng_msg_header_trim_u32(m, &id)); + NUTS_TRUE(id == 0x1); + NUTS_PASS(nng_msg_header_trim_u32(m, &id)); + NUTS_TRUE(id == 0x80000123u); nng_msg_free(m); - TEST_NNG_PASS(nng_close(req)); - TEST_NNG_PASS(nng_close(rep)); + NUTS_CLOSE(req); + NUTS_CLOSE(rep); } static void @@ -269,26 +262,26 @@ test_xreq_close_during_recv(void) nng_pipe p1; nng_pipe p2; - TEST_NNG_PASS(nng_rep0_open_raw(&rep)); - TEST_NNG_PASS(nng_req0_open_raw(&req)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, 100)); - TEST_NNG_PASS(nng_setopt_int(req, NNG_OPT_RECVBUF, 5)); - TEST_NNG_PASS(nng_setopt_int(rep, NNG_OPT_SENDBUF, 20)); + NUTS_PASS(nng_rep0_open_raw(&rep)); + NUTS_PASS(nng_req0_open_raw(&req)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, 100)); + NUTS_PASS(nng_socket_set_int(req, NNG_OPT_RECVBUF, 5)); + NUTS_PASS(nng_socket_set_int(rep, NNG_OPT_SENDBUF, 20)); - 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); + NUTS_MARRY_EX(req, rep, NULL, &p1, &p2); + NUTS_TRUE(nng_pipe_id(p1) > 0); + NUTS_TRUE(nng_pipe_id(p2) > 0); for (unsigned i = 0; i < 20; i++) { - TEST_NNG_PASS(nng_msg_alloc(&m, 4)); - TEST_NNG_PASS(nng_msg_header_append_u32(m, nng_pipe_id(p2))); - TEST_NNG_PASS(nng_msg_header_append_u32(m, i | 0x80000000u)); - testutil_sleep(10); - TEST_NNG_PASS(nng_sendmsg(rep, m, 0)); + NUTS_PASS(nng_msg_alloc(&m, 4)); + NUTS_PASS(nng_msg_header_append_u32(m, nng_pipe_id(p2))); + NUTS_PASS(nng_msg_header_append_u32(m, i | 0x80000000u)); + NUTS_SLEEP(10); + NUTS_PASS(nng_sendmsg(rep, m, 0)); } - TEST_NNG_PASS(nng_close(req)); - TEST_NNG_PASS(nng_close(rep)); + NUTS_CLOSE(req); + NUTS_CLOSE(rep); } static void @@ -300,27 +293,27 @@ test_xreq_close_pipe_during_send(void) nng_pipe p1; nng_pipe p2; - TEST_NNG_PASS(nng_rep0_open_raw(&rep)); - TEST_NNG_PASS(nng_req0_open_raw(&req)); - TEST_NNG_PASS(nng_setopt_ms(rep, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(req, NNG_OPT_SENDTIMEO, 100)); - TEST_NNG_PASS(nng_setopt_int(rep, NNG_OPT_RECVBUF, 5)); - TEST_NNG_PASS(nng_setopt_int(req, NNG_OPT_SENDBUF, 20)); + NUTS_PASS(nng_rep0_open_raw(&rep)); + NUTS_PASS(nng_req0_open_raw(&req)); + NUTS_PASS(nng_socket_set_ms(rep, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(req, NNG_OPT_SENDTIMEO, 100)); + NUTS_PASS(nng_socket_set_int(rep, NNG_OPT_RECVBUF, 5)); + NUTS_PASS(nng_socket_set_int(req, NNG_OPT_SENDBUF, 20)); - 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); + NUTS_MARRY_EX(req, rep, NULL, &p1, &p2); + NUTS_TRUE(nng_pipe_id(p1) > 0); + NUTS_TRUE(nng_pipe_id(p2) > 0); for (unsigned i = 0; i < 20; i++) { - TEST_NNG_PASS(nng_msg_alloc(&m, 4)); - TEST_NNG_PASS(nng_msg_header_append_u32(m, i | 0x80000000u)); - testutil_sleep(10); - TEST_NNG_PASS(nng_sendmsg(req, m, 0)); + NUTS_PASS(nng_msg_alloc(&m, 4)); + NUTS_PASS(nng_msg_header_append_u32(m, i | 0x80000000u)); + NUTS_SLEEP(10); + NUTS_PASS(nng_sendmsg(req, m, 0)); } - TEST_NNG_PASS(nng_pipe_close(p1)); - TEST_NNG_PASS(nng_close(req)); - TEST_NNG_PASS(nng_close(rep)); + NUTS_PASS(nng_pipe_close(p1)); + NUTS_CLOSE(req); + NUTS_CLOSE(rep); } static void @@ -332,32 +325,32 @@ test_xreq_ttl_option(void) size_t sz; const char *opt = NNG_OPT_MAXTTL; - TEST_NNG_PASS(nng_req0_open_raw(&rep)); + NUTS_PASS(nng_req0_open_raw(&rep)); - TEST_NNG_PASS(nng_setopt_int(rep, opt, 1)); - TEST_NNG_FAIL(nng_setopt_int(rep, opt, 0), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_int(rep, opt, -1), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_int(rep, opt, 16), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_int(rep, opt, 256), NNG_EINVAL); - TEST_NNG_PASS(nng_setopt_int(rep, opt, 3)); - TEST_NNG_PASS(nng_getopt_int(rep, opt, &v)); - TEST_CHECK(v == 3); + NUTS_PASS(nng_socket_set_int(rep, opt, 1)); + NUTS_FAIL(nng_socket_set_int(rep, opt, 0), NNG_EINVAL); + NUTS_FAIL(nng_socket_set_int(rep, opt, -1), NNG_EINVAL); + NUTS_FAIL(nng_socket_set_int(rep, opt, 16), NNG_EINVAL); + NUTS_FAIL(nng_socket_set_int(rep, opt, 256), NNG_EINVAL); + NUTS_PASS(nng_socket_set_int(rep, opt, 3)); + NUTS_PASS(nng_socket_get_int(rep, opt, &v)); + NUTS_TRUE(v == 3); v = 0; sz = sizeof(v); - TEST_NNG_PASS(nng_getopt(rep, opt, &v, &sz)); - TEST_CHECK(v == 3); - TEST_CHECK(sz == sizeof(v)); + NUTS_PASS(nng_socket_get(rep, opt, &v, &sz)); + NUTS_TRUE(v == 3); + NUTS_TRUE(sz == sizeof(v)); - TEST_CHECK(nng_setopt(rep, opt, "", 1) == NNG_EINVAL); + NUTS_TRUE(nng_socket_set(rep, opt, "", 1) == NNG_EINVAL); sz = 1; - TEST_CHECK(nng_getopt(rep, opt, &v, &sz) == NNG_EINVAL); - TEST_CHECK(nng_setopt_bool(rep, opt, true) == NNG_EBADTYPE); - TEST_CHECK(nng_getopt_bool(rep, opt, &b) == NNG_EBADTYPE); + NUTS_TRUE(nng_socket_get(rep, opt, &v, &sz) == NNG_EINVAL); + NUTS_TRUE(nng_socket_set_bool(rep, opt, true) == NNG_EBADTYPE); + NUTS_TRUE(nng_socket_get_bool(rep, opt, &b) == NNG_EBADTYPE); - TEST_CHECK(nng_close(rep) == 0); + NUTS_TRUE(nng_close(rep) == 0); } -TEST_LIST = { +NUTS_TESTS = { { "xreq identity", test_xreq_identity }, { "xreq raw", test_xreq_raw }, { "xreq no context", test_xreq_no_context }, diff --git a/src/protocol/survey0/respond_test.c b/src/protocol/survey0/respond_test.c index efda181b..51844c76 100644 --- a/src/protocol/survey0/respond_test.c +++ b/src/protocol/survey0/respond_test.c @@ -7,18 +7,7 @@ // found online at https://opensource.org/licenses/MIT. // -#include <string.h> - -#include <nng/nng.h> -#include <nng/protocol/survey0/respond.h> -#include <nng/protocol/survey0/survey.h> - -#include <acutest.h> -#include <testutil.h> - -#ifndef NNI_PROTO -#define NNI_PROTO(x, y) (((x) << 4u) | (y)) -#endif +#include <nuts.h> void test_resp_identity(void) @@ -27,18 +16,18 @@ test_resp_identity(void) int p; char * n; - TEST_CHECK(nng_respondent0_open(&s) == 0); - TEST_CHECK(nng_getopt_int(s, NNG_OPT_PROTO, &p) == 0); - TEST_CHECK(p == NNI_PROTO(6u, 3u)); - TEST_CHECK(nng_getopt_int(s, NNG_OPT_PEER, &p) == 0); - TEST_CHECK(p == NNI_PROTO(6u, 2u)); - TEST_CHECK(nng_getopt_string(s, NNG_OPT_PROTONAME, &n) == 0); - TEST_CHECK(strcmp(n, "respondent") == 0); + NUTS_PASS(nng_respondent0_open(&s)); + NUTS_PASS(nng_socket_get_int(s, NNG_OPT_PROTO, &p)); + NUTS_TRUE(p == NNG_RESPONDENT0_SELF); + NUTS_TRUE(nng_socket_get_int(s, NNG_OPT_PEER, &p) == 0); + NUTS_TRUE(p == NNG_RESPONDENT0_PEER); + NUTS_TRUE(nng_socket_get_string(s, NNG_OPT_PROTONAME, &n) == 0); + NUTS_MATCH(n, NNG_RESPONDENT0_SELF_NAME); nng_strfree(n); - TEST_CHECK(nng_getopt_string(s, NNG_OPT_PEERNAME, &n) == 0); - TEST_CHECK(strcmp(n, "surveyor") == 0); + NUTS_TRUE(nng_socket_get_string(s, NNG_OPT_PEERNAME, &n) == 0); + NUTS_MATCH(n, NNG_RESPONDENT0_PEER_NAME); nng_strfree(n); - TEST_CHECK(nng_close(s) == 0); + NUTS_CLOSE(s); } void @@ -47,11 +36,11 @@ test_resp_send_bad_state(void) nng_socket resp; nng_msg * msg = NULL; - TEST_CHECK(nng_respondent0_open(&resp) == 0); - TEST_CHECK(nng_msg_alloc(&msg, 0) == 0); - TEST_CHECK(nng_sendmsg(resp, msg, 0) == NNG_ESTATE); + NUTS_PASS(nng_respondent0_open(&resp)); + NUTS_PASS(nng_msg_alloc(&msg, 0)); + NUTS_FAIL(nng_sendmsg(resp, msg, 0), NNG_ESTATE); nng_msg_free(msg); - TEST_CHECK(nng_close(resp) == 0); + NUTS_CLOSE(resp); } void @@ -61,33 +50,33 @@ test_resp_poll_writeable(void) nng_socket surv; nng_socket resp; - TEST_NNG_PASS(nng_surveyor0_open(&surv)); - TEST_NNG_PASS(nng_respondent0_open(&resp)); - TEST_NNG_PASS(nng_getopt_int(resp, NNG_OPT_SENDFD, &fd)); - TEST_CHECK(fd >= 0); + NUTS_PASS(nng_surveyor0_open(&surv)); + NUTS_PASS(nng_respondent0_open(&resp)); + NUTS_PASS(nng_socket_get_int(resp, NNG_OPT_SENDFD, &fd)); + NUTS_TRUE(fd >= 0); // Not writable before connect. - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_TRUE(nuts_poll_fd(fd) == false); - TEST_NNG_PASS(testutil_marry(surv, resp)); + NUTS_MARRY(surv, resp); // Still not writable. - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_TRUE(nuts_poll_fd(fd) == false); // If we get a job, *then* we become writable - TEST_NNG_SEND_STR(surv, "abc"); - TEST_NNG_RECV_STR(resp, "abc"); - TEST_CHECK(testutil_pollfd(fd) == true); + NUTS_SEND(surv, "abc"); + NUTS_RECV(resp, "abc"); + NUTS_TRUE(nuts_poll_fd(fd) == true); // And is no longer writable once we send a message - TEST_NNG_SEND_STR(resp, "def"); - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_SEND(resp, "def"); + NUTS_TRUE(nuts_poll_fd(fd) == false); // Even after receiving it - TEST_NNG_RECV_STR(surv, "def"); - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_RECV(surv, "def"); + NUTS_TRUE(nuts_poll_fd(fd) == false); - TEST_NNG_PASS(nng_close(surv)); - TEST_NNG_PASS(nng_close(resp)); + NUTS_CLOSE(surv); + NUTS_CLOSE(resp); } void @@ -98,34 +87,34 @@ test_resp_poll_readable(void) nng_socket resp; nng_msg * msg; - TEST_NNG_PASS(nng_surveyor0_open(&surv)); - TEST_NNG_PASS(nng_respondent0_open(&resp)); - TEST_NNG_PASS(nng_getopt_int(resp, NNG_OPT_RECVFD, &fd)); - TEST_CHECK(fd >= 0); + NUTS_PASS(nng_surveyor0_open(&surv)); + NUTS_PASS(nng_respondent0_open(&resp)); + NUTS_PASS(nng_socket_get_int(resp, NNG_OPT_RECVFD, &fd)); + NUTS_TRUE(fd >= 0); // Not readable if not connected! - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_TRUE(nuts_poll_fd(fd) == false); // Even after connect (no message yet) - TEST_NNG_PASS(testutil_marry(surv, resp)); - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_MARRY(surv, resp); + NUTS_TRUE(nuts_poll_fd(fd) == false); // But once we send messages, it is. // We have to send a request, in order to send a reply. - TEST_NNG_SEND_STR(surv, "abc"); - testutil_sleep(100); + NUTS_SEND(surv, "abc"); + NUTS_SLEEP(100); - TEST_CHECK(testutil_pollfd(fd) == true); + NUTS_TRUE(nuts_poll_fd(fd) == true); // and receiving makes it no longer ready - TEST_NNG_PASS(nng_recvmsg(resp, &msg, 0)); + NUTS_PASS(nng_recvmsg(resp, &msg, 0)); nng_msg_free(msg); - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_TRUE(nuts_poll_fd(fd) == false); // TODO verify unsolicited response - TEST_NNG_PASS(nng_close(surv)); - TEST_NNG_PASS(nng_close(resp)); + NUTS_CLOSE(surv); + NUTS_CLOSE(resp); } void @@ -135,14 +124,12 @@ test_resp_context_no_poll(void) nng_socket resp; nng_ctx ctx; - TEST_NNG_PASS(nng_respondent0_open(&resp)); - TEST_NNG_PASS(nng_ctx_open(&ctx, resp)); - TEST_NNG_FAIL( - nng_ctx_getopt_int(ctx, NNG_OPT_SENDFD, &fd), NNG_ENOTSUP); - TEST_NNG_FAIL( - nng_ctx_getopt_int(ctx, NNG_OPT_RECVFD, &fd), NNG_ENOTSUP); - TEST_NNG_PASS(nng_ctx_close(ctx)); - TEST_NNG_PASS(nng_close(resp)); + NUTS_PASS(nng_respondent0_open(&resp)); + NUTS_PASS(nng_ctx_open(&ctx, resp)); + NUTS_FAIL(nng_ctx_get_int(ctx, NNG_OPT_SENDFD, &fd), NNG_ENOTSUP); + NUTS_FAIL(nng_ctx_get_int(ctx, NNG_OPT_RECVFD, &fd), NNG_ENOTSUP); + NUTS_PASS(nng_ctx_close(ctx)); + NUTS_CLOSE(resp); } void @@ -151,28 +138,28 @@ test_resp_validate_peer(void) nng_socket s1, s2; nng_stat * stats; nng_stat * reject; - char addr[64]; + char * addr; - testutil_scratch_addr("inproc", sizeof(addr), addr); + NUTS_ADDR(addr, "inproc"); - TEST_NNG_PASS(nng_respondent0_open(&s1)); - TEST_NNG_PASS(nng_respondent0_open(&s2)); + NUTS_PASS(nng_respondent0_open(&s1)); + NUTS_PASS(nng_respondent0_open(&s2)); - TEST_NNG_PASS(nng_listen(s1, addr, NULL, 0)); - TEST_NNG_PASS(nng_dial(s2, addr, NULL, NNG_FLAG_NONBLOCK)); + NUTS_PASS(nng_listen(s1, addr, NULL, 0)); + NUTS_PASS(nng_dial(s2, addr, NULL, NNG_FLAG_NONBLOCK)); - testutil_sleep(100); - TEST_NNG_PASS(nng_stats_get(&stats)); + NUTS_SLEEP(100); + NUTS_PASS(nng_stats_get(&stats)); - TEST_CHECK(stats != NULL); - TEST_CHECK((reject = nng_stat_find_socket(stats, s1)) != NULL); - TEST_CHECK((reject = nng_stat_find(reject, "reject")) != NULL); + NUTS_TRUE(stats != NULL); + NUTS_TRUE((reject = nng_stat_find_socket(stats, s1)) != NULL); + NUTS_TRUE((reject = nng_stat_find(reject, "reject")) != NULL); - TEST_CHECK(nng_stat_type(reject) == NNG_STAT_COUNTER); - TEST_CHECK(nng_stat_value(reject) > 0); + NUTS_TRUE(nng_stat_type(reject) == NNG_STAT_COUNTER); + NUTS_TRUE(nng_stat_value(reject) > 0); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(s2)); + NUTS_CLOSE(s1); + NUTS_CLOSE(s2); nng_stats_free(stats); } @@ -183,17 +170,17 @@ test_resp_double_recv(void) nng_aio * aio1; nng_aio * aio2; - TEST_NNG_PASS(nng_respondent0_open(&s1)); - TEST_NNG_PASS(nng_aio_alloc(&aio1, NULL, NULL)); - TEST_NNG_PASS(nng_aio_alloc(&aio2, NULL, NULL)); + NUTS_PASS(nng_respondent0_open(&s1)); + NUTS_PASS(nng_aio_alloc(&aio1, NULL, NULL)); + NUTS_PASS(nng_aio_alloc(&aio2, NULL, NULL)); nng_recv_aio(s1, aio1); nng_recv_aio(s1, aio2); nng_aio_wait(aio2); - TEST_NNG_FAIL(nng_aio_result(aio2), NNG_ESTATE); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_FAIL(nng_aio_result(aio1), NNG_ECLOSED); + NUTS_FAIL(nng_aio_result(aio2), NNG_ESTATE); + NUTS_CLOSE(s1); + NUTS_FAIL(nng_aio_result(aio1), NNG_ECLOSED); nng_aio_free(aio1); nng_aio_free(aio2); } @@ -207,26 +194,26 @@ test_resp_close_pipe_before_send(void) nng_aio * aio1; nng_msg * m; - TEST_NNG_PASS(nng_respondent0_open(&resp)); - TEST_NNG_PASS(nng_surveyor0_open(&surv)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_aio_alloc(&aio1, NULL, NULL)); + NUTS_PASS(nng_respondent0_open(&resp)); + NUTS_PASS(nng_surveyor0_open(&surv)); + NUTS_PASS(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_setopt_ms(resp, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_setopt_ms(surv, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_aio_alloc(&aio1, NULL, NULL)); - TEST_NNG_PASS(testutil_marry(surv, resp)); - TEST_NNG_SEND_STR(surv, "test"); + NUTS_MARRY(surv, resp); + NUTS_SEND(surv, "test"); nng_recv_aio(resp, aio1); nng_aio_wait(aio1); - TEST_NNG_PASS(nng_aio_result(aio1)); - TEST_CHECK((m = nng_aio_get_msg(aio1)) != NULL); + NUTS_PASS(nng_aio_result(aio1)); + NUTS_TRUE((m = nng_aio_get_msg(aio1)) != NULL); p = nng_msg_get_pipe(m); - TEST_NNG_PASS(nng_pipe_close(p)); - TEST_NNG_PASS(nng_sendmsg(resp, m, 0)); + NUTS_PASS(nng_pipe_close(p)); + NUTS_PASS(nng_sendmsg(resp, m, 0)); - TEST_NNG_PASS(nng_close(surv)); - TEST_NNG_PASS(nng_close(resp)); + NUTS_CLOSE(surv); + NUTS_CLOSE(resp); nng_aio_free(aio1); } @@ -238,25 +225,24 @@ test_resp_close_pipe_during_send(void) nng_pipe p = NNG_PIPE_INITIALIZER; nng_msg * m; - TEST_NNG_PASS(nng_respondent0_open(&resp)); - TEST_NNG_PASS(nng_surveyor0_open_raw(&surv)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_SENDTIMEO, 200)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_int(resp, NNG_OPT_SENDBUF, 20)); - TEST_NNG_PASS(nng_setopt_int(resp, NNG_OPT_RECVBUF, 20)); - TEST_NNG_PASS(nng_setopt_int(surv, NNG_OPT_SENDBUF, 20)); - TEST_NNG_PASS(nng_setopt_int(surv, NNG_OPT_RECVBUF, 1)); + NUTS_PASS(nng_respondent0_open(&resp)); + NUTS_PASS(nng_surveyor0_open_raw(&surv)); + NUTS_PASS(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_setopt_ms(resp, NNG_OPT_SENDTIMEO, 200)); + NUTS_PASS(nng_setopt_ms(surv, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_setopt_int(resp, NNG_OPT_SENDBUF, 20)); + NUTS_PASS(nng_setopt_int(resp, NNG_OPT_RECVBUF, 20)); + NUTS_PASS(nng_setopt_int(surv, NNG_OPT_SENDBUF, 20)); + NUTS_PASS(nng_setopt_int(surv, NNG_OPT_RECVBUF, 1)); - TEST_NNG_PASS(testutil_marry(surv, resp)); + NUTS_MARRY(surv, resp); for (int i = 0; i < 100; i++) { int rv; - TEST_NNG_PASS(nng_msg_alloc(&m, 4)); - TEST_NNG_PASS( - nng_msg_append_u32(m, (unsigned) i | 0x80000000u)); - TEST_NNG_PASS(nng_sendmsg(surv, m, 0)); - TEST_NNG_PASS(nng_recvmsg(resp, &m, 0)); + NUTS_PASS(nng_msg_alloc(&m, 4)); + NUTS_PASS(nng_msg_append_u32(m, (unsigned) i | 0x80000000u)); + NUTS_PASS(nng_sendmsg(surv, m, 0)); + NUTS_PASS(nng_recvmsg(resp, &m, 0)); p = nng_msg_get_pipe(m); rv = nng_sendmsg(resp, m, 0); if (rv == NNG_ETIMEDOUT) { @@ -264,12 +250,12 @@ test_resp_close_pipe_during_send(void) nng_msg_free(m); break; } - TEST_NNG_PASS(rv); + NUTS_PASS(rv); } - TEST_NNG_PASS(nng_pipe_close(p)); + NUTS_PASS(nng_pipe_close(p)); - TEST_NNG_PASS(nng_close(surv)); - TEST_NNG_PASS(nng_close(resp)); + NUTS_CLOSE(surv); + NUTS_CLOSE(resp); } void @@ -279,16 +265,16 @@ test_resp_ctx_recv_aio_stopped(void) nng_ctx ctx; nng_aio * aio; - TEST_NNG_PASS(nng_respondent0_open(&resp)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); - TEST_NNG_PASS(nng_ctx_open(&ctx, resp)); + NUTS_PASS(nng_respondent0_open(&resp)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_ctx_open(&ctx, resp)); nng_aio_stop(aio); nng_ctx_recv(ctx, aio); nng_aio_wait(aio); - TEST_NNG_FAIL(nng_aio_result(aio), NNG_ECANCELED); - TEST_NNG_PASS(nng_ctx_close(ctx)); - TEST_NNG_PASS(nng_close(resp)); + NUTS_FAIL(nng_aio_result(aio), NNG_ECANCELED); + NUTS_PASS(nng_ctx_close(ctx)); + NUTS_CLOSE(resp); nng_aio_free(aio); } @@ -303,54 +289,53 @@ test_resp_close_pipe_context_send(void) nng_aio * aio[10]; int i; - TEST_NNG_PASS(nng_respondent0_open(&resp)); - TEST_NNG_PASS(nng_surveyor0_open_raw(&surv)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_int(resp, NNG_OPT_SENDBUF, 1)); - TEST_NNG_PASS(nng_setopt_int(resp, NNG_OPT_RECVBUF, 1)); - TEST_NNG_PASS(nng_setopt_int(surv, NNG_OPT_SENDBUF, 1)); - TEST_NNG_PASS(nng_setopt_int(surv, NNG_OPT_RECVBUF, 1)); + NUTS_PASS(nng_respondent0_open(&resp)); + NUTS_PASS(nng_surveyor0_open_raw(&surv)); + NUTS_PASS(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_setopt_ms(resp, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_setopt_ms(surv, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_setopt_int(resp, NNG_OPT_SENDBUF, 1)); + NUTS_PASS(nng_setopt_int(resp, NNG_OPT_RECVBUF, 1)); + NUTS_PASS(nng_setopt_int(surv, NNG_OPT_SENDBUF, 1)); + NUTS_PASS(nng_setopt_int(surv, NNG_OPT_RECVBUF, 1)); for (i = 0; i < 10; i++) { - TEST_NNG_PASS(nng_ctx_open(&ctx[i], resp)); - TEST_NNG_PASS(nng_aio_alloc(&aio[i], NULL, NULL)); + NUTS_PASS(nng_ctx_open(&ctx[i], resp)); + NUTS_PASS(nng_aio_alloc(&aio[i], NULL, NULL)); } - TEST_NNG_PASS(testutil_marry(surv, resp)); + NUTS_MARRY(surv, resp); for (i = 0; i < 10; i++) { - TEST_NNG_PASS(nng_msg_alloc(&m, 4)); - TEST_NNG_PASS( - nng_msg_append_u32(m, (unsigned) i | 0x80000000u)); - TEST_NNG_PASS(nng_sendmsg(surv, m, 0)); + NUTS_PASS(nng_msg_alloc(&m, 4)); + NUTS_PASS(nng_msg_append_u32(m, (unsigned) i | 0x80000000u)); + NUTS_PASS(nng_sendmsg(surv, m, 0)); nng_ctx_recv(ctx[i], aio[i]); } for (i = 0; i < 10; i++) { nng_aio_wait(aio[i]); - TEST_NNG_PASS(nng_aio_result(aio[i])); - TEST_CHECK((m = nng_aio_get_msg(aio[i])) != NULL); + NUTS_PASS(nng_aio_result(aio[i])); + NUTS_TRUE((m = nng_aio_get_msg(aio[i])) != NULL); p = nng_msg_get_pipe(m); nng_aio_set_msg(aio[i], m); nng_ctx_send(ctx[i], aio[i]); } // Note that SURVEYOR socket is not reading the results. - TEST_NNG_PASS(nng_pipe_close(p)); + NUTS_PASS(nng_pipe_close(p)); for (i = 0; i < 10; i++) { int rv; nng_aio_wait(aio[i]); rv = nng_aio_result(aio[i]); if (rv != 0) { - TEST_NNG_FAIL(rv, NNG_ECLOSED); + NUTS_FAIL(rv, NNG_ECLOSED); nng_msg_free(nng_aio_get_msg(aio[i])); } nng_aio_free(aio[i]); - TEST_NNG_PASS(nng_ctx_close(ctx[i])); + NUTS_PASS(nng_ctx_close(ctx[i])); } - TEST_NNG_PASS(nng_close(surv)); - TEST_NNG_PASS(nng_close(resp)); + NUTS_CLOSE(surv); + NUTS_CLOSE(resp); } void @@ -363,33 +348,32 @@ test_resp_close_context_send(void) nng_aio * aio[10]; int i; - TEST_NNG_PASS(nng_respondent0_open(&resp)); - TEST_NNG_PASS(nng_surveyor0_open_raw(&surv)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_int(resp, NNG_OPT_SENDBUF, 1)); - TEST_NNG_PASS(nng_setopt_int(resp, NNG_OPT_RECVBUF, 1)); - TEST_NNG_PASS(nng_setopt_int(surv, NNG_OPT_SENDBUF, 1)); - TEST_NNG_PASS(nng_setopt_int(surv, NNG_OPT_RECVBUF, 1)); + NUTS_PASS(nng_respondent0_open(&resp)); + NUTS_PASS(nng_surveyor0_open_raw(&surv)); + NUTS_PASS(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_setopt_ms(resp, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_setopt_ms(surv, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_setopt_int(resp, NNG_OPT_SENDBUF, 1)); + NUTS_PASS(nng_setopt_int(resp, NNG_OPT_RECVBUF, 1)); + NUTS_PASS(nng_setopt_int(surv, NNG_OPT_SENDBUF, 1)); + NUTS_PASS(nng_setopt_int(surv, NNG_OPT_RECVBUF, 1)); for (i = 0; i < 10; i++) { - TEST_NNG_PASS(nng_ctx_open(&ctx[i], resp)); - TEST_NNG_PASS(nng_aio_alloc(&aio[i], NULL, NULL)); + NUTS_PASS(nng_ctx_open(&ctx[i], resp)); + NUTS_PASS(nng_aio_alloc(&aio[i], NULL, NULL)); } - TEST_NNG_PASS(testutil_marry(surv, resp)); + NUTS_MARRY(surv, resp); for (i = 0; i < 10; i++) { - TEST_NNG_PASS(nng_msg_alloc(&m, 4)); - TEST_NNG_PASS( - nng_msg_append_u32(m, (unsigned) i | 0x80000000u)); - TEST_NNG_PASS(nng_sendmsg(surv, m, 0)); + NUTS_PASS(nng_msg_alloc(&m, 4)); + NUTS_PASS(nng_msg_append_u32(m, (unsigned) i | 0x80000000u)); + NUTS_PASS(nng_sendmsg(surv, m, 0)); nng_ctx_recv(ctx[i], aio[i]); } for (i = 0; i < 10; i++) { nng_aio_wait(aio[i]); - TEST_NNG_PASS(nng_aio_result(aio[i])); - TEST_CHECK((m = nng_aio_get_msg(aio[i])) != NULL); + NUTS_PASS(nng_aio_result(aio[i])); + NUTS_TRUE((m = nng_aio_get_msg(aio[i])) != NULL); nng_aio_set_msg(aio[i], m); nng_ctx_send(ctx[i], aio[i]); } @@ -397,17 +381,17 @@ test_resp_close_context_send(void) // Note that REQ socket is not reading the results. for (i = 0; i < 10; i++) { int rv; - TEST_NNG_PASS(nng_ctx_close(ctx[i])); + NUTS_PASS(nng_ctx_close(ctx[i])); nng_aio_wait(aio[i]); rv = nng_aio_result(aio[i]); if (rv != 0) { - TEST_NNG_FAIL(rv, NNG_ECLOSED); + NUTS_FAIL(rv, NNG_ECLOSED); nng_msg_free(nng_aio_get_msg(aio[i])); } nng_aio_free(aio[i]); } - TEST_NNG_PASS(nng_close(surv)); - TEST_NNG_PASS(nng_close(resp)); + NUTS_CLOSE(surv); + NUTS_CLOSE(resp); } static void @@ -417,16 +401,16 @@ test_resp_ctx_recv_nonblock(void) nng_ctx ctx; nng_aio * aio; - TEST_NNG_PASS(nng_respondent0_open(&resp)); - TEST_NNG_PASS(nng_ctx_open(&ctx, resp)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_respondent0_open(&resp)); + NUTS_PASS(nng_ctx_open(&ctx, resp)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); nng_aio_set_timeout(aio, 0); // Instant timeout nng_ctx_recv(ctx, aio); nng_aio_wait(aio); - TEST_NNG_FAIL(nng_aio_result(aio), NNG_ETIMEDOUT); - TEST_NNG_PASS(nng_close(resp)); + NUTS_FAIL(nng_aio_result(aio), NNG_ETIMEDOUT); + NUTS_CLOSE(resp); nng_aio_free(aio); } @@ -439,19 +423,19 @@ test_resp_ctx_send_nonblock(void) nng_aio * aio; nng_msg * msg; - TEST_NNG_PASS(nng_surveyor0_open(&surv)); - TEST_NNG_PASS(nng_respondent0_open(&resp)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_ctx_open(&ctx, resp)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); - TEST_NNG_PASS(testutil_marry(surv, resp)); + NUTS_PASS(nng_surveyor0_open(&surv)); + NUTS_PASS(nng_respondent0_open(&resp)); + NUTS_PASS(nng_setopt_ms(surv, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_setopt_ms(resp, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_ctx_open(&ctx, resp)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_MARRY(surv, resp); - TEST_NNG_SEND_STR(surv, "SEND"); + NUTS_SEND(surv, "SEND"); nng_ctx_recv(ctx, aio); nng_aio_wait(aio); - TEST_NNG_PASS(nng_aio_result(aio)); + NUTS_PASS(nng_aio_result(aio)); // message carries over msg = nng_aio_get_msg(aio); nng_aio_set_msg(aio, msg); @@ -459,9 +443,9 @@ test_resp_ctx_send_nonblock(void) nng_ctx_send(ctx, aio); nng_aio_wait(aio); - TEST_NNG_FAIL(nng_aio_result(aio), NNG_ETIMEDOUT); - TEST_NNG_PASS(nng_close(surv)); - TEST_NNG_PASS(nng_close(resp)); + NUTS_FAIL(nng_aio_result(aio), NNG_ETIMEDOUT); + NUTS_CLOSE(surv); + NUTS_CLOSE(resp); nng_aio_free(aio); nng_msg_free(msg); } @@ -473,21 +457,21 @@ test_resp_recv_garbage(void) nng_socket surv; nng_msg * m; - TEST_NNG_PASS(nng_respondent0_open(&resp)); - TEST_NNG_PASS(nng_surveyor0_open_raw(&surv)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, 200)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_SENDTIMEO, 200)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_respondent0_open(&resp)); + NUTS_PASS(nng_surveyor0_open_raw(&surv)); + NUTS_PASS(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, 200)); + NUTS_PASS(nng_setopt_ms(resp, NNG_OPT_SENDTIMEO, 200)); + NUTS_PASS(nng_setopt_ms(surv, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(testutil_marry(surv, resp)); + NUTS_MARRY(surv, resp); - TEST_NNG_PASS(nng_msg_alloc(&m, 4)); - TEST_NNG_PASS(nng_msg_append_u32(m, 1u)); - TEST_NNG_PASS(nng_sendmsg(surv, m, 0)); - TEST_NNG_FAIL(nng_recvmsg(resp, &m, 0), NNG_ETIMEDOUT); + NUTS_PASS(nng_msg_alloc(&m, 4)); + NUTS_PASS(nng_msg_append_u32(m, 1u)); + NUTS_PASS(nng_sendmsg(surv, m, 0)); + NUTS_FAIL(nng_recvmsg(resp, &m, 0), NNG_ETIMEDOUT); - TEST_NNG_PASS(nng_close(surv)); - TEST_NNG_PASS(nng_close(resp)); + NUTS_CLOSE(surv); + NUTS_CLOSE(resp); } static void @@ -499,29 +483,29 @@ test_resp_ttl_option(void) size_t sz; const char *opt = NNG_OPT_MAXTTL; - TEST_NNG_PASS(nng_respondent0_open(&resp)); + NUTS_PASS(nng_respondent0_open(&resp)); - TEST_NNG_PASS(nng_setopt_int(resp, opt, 1)); - TEST_NNG_FAIL(nng_setopt_int(resp, opt, 0), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_int(resp, opt, -1), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_int(resp, opt, 16), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_int(resp, opt, 256), NNG_EINVAL); - TEST_NNG_PASS(nng_setopt_int(resp, opt, 3)); - TEST_NNG_PASS(nng_getopt_int(resp, opt, &v)); - TEST_CHECK(v == 3); + NUTS_PASS(nng_setopt_int(resp, opt, 1)); + NUTS_FAIL(nng_setopt_int(resp, opt, 0), NNG_EINVAL); + NUTS_FAIL(nng_setopt_int(resp, opt, -1), NNG_EINVAL); + NUTS_FAIL(nng_setopt_int(resp, opt, 16), NNG_EINVAL); + NUTS_FAIL(nng_setopt_int(resp, opt, 256), NNG_EINVAL); + NUTS_PASS(nng_setopt_int(resp, opt, 3)); + NUTS_PASS(nng_socket_get_int(resp, opt, &v)); + NUTS_TRUE(v == 3); v = 0; sz = sizeof(v); - TEST_NNG_PASS(nng_getopt(resp, opt, &v, &sz)); - TEST_CHECK(v == 3); - TEST_CHECK(sz == sizeof(v)); + NUTS_PASS(nng_socket_get(resp, opt, &v, &sz)); + NUTS_TRUE(v == 3); + NUTS_TRUE(sz == sizeof(v)); - TEST_NNG_FAIL(nng_setopt(resp, opt, "", 1), NNG_EINVAL); + NUTS_FAIL(nng_setopt(resp, opt, "", 1), NNG_EINVAL); sz = 1; - TEST_NNG_FAIL(nng_getopt(resp, opt, &v, &sz), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_bool(resp, opt, true), NNG_EBADTYPE); - TEST_NNG_FAIL(nng_getopt_bool(resp, opt, &b), NNG_EBADTYPE); + NUTS_FAIL(nng_socket_get(resp, opt, &v, &sz), NNG_EINVAL); + NUTS_FAIL(nng_setopt_bool(resp, opt, true), NNG_EBADTYPE); + NUTS_FAIL(nng_socket_get_bool(resp, opt, &b), NNG_EBADTYPE); - TEST_NNG_PASS(nng_close(resp)); + NUTS_CLOSE(resp); } static void @@ -531,52 +515,52 @@ test_resp_ttl_drop(void) nng_socket surv; nng_msg * m; - TEST_NNG_PASS(nng_respondent0_open(&resp)); - TEST_NNG_PASS(nng_surveyor0_open_raw(&surv)); - TEST_NNG_PASS(nng_setopt_int(resp, NNG_OPT_MAXTTL, 3)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, 200)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_respondent0_open(&resp)); + NUTS_PASS(nng_surveyor0_open_raw(&surv)); + NUTS_PASS(nng_setopt_int(resp, NNG_OPT_MAXTTL, 3)); + NUTS_PASS(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, 200)); + NUTS_PASS(nng_setopt_ms(surv, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(testutil_marry(surv, resp)); + NUTS_MARRY(surv, resp); // Send messages. Note that xrep implicitly adds a hop on receive. - TEST_NNG_PASS(nng_msg_alloc(&m, 0)); - TEST_NNG_PASS(nng_msg_append_u32(m, 1u)); // 2 hops - TEST_NNG_PASS(nng_msg_append_u32(m, 0x80000001u)); - TEST_NNG_PASS(nng_msg_append(m, "PASS1", 6)); - TEST_NNG_PASS(nng_sendmsg(surv, m, 0)); - - TEST_NNG_PASS(nng_msg_alloc(&m, 0)); - TEST_NNG_PASS(nng_msg_append_u32(m, 1u)); // 4 hops -- discard! - TEST_NNG_PASS(nng_msg_append_u32(m, 2u)); - TEST_NNG_PASS(nng_msg_append_u32(m, 3u)); - TEST_NNG_PASS(nng_msg_append_u32(m, 0x80000002u)); - TEST_NNG_PASS(nng_msg_append(m, "FAIL2", 6)); - TEST_NNG_PASS(nng_sendmsg(surv, m, 0)); - - TEST_NNG_PASS(nng_msg_alloc(&m, 0)); - TEST_NNG_PASS(nng_msg_append_u32(m, 1u)); // 3 hops - passes - TEST_NNG_PASS(nng_msg_append_u32(m, 2u)); - TEST_NNG_PASS(nng_msg_append_u32(m, 0x80000003u)); - TEST_NNG_PASS(nng_msg_append(m, "PASS3", 6)); - TEST_NNG_PASS(nng_sendmsg(surv, m, 0)); - - TEST_NNG_PASS(nng_msg_alloc(&m, 0)); - TEST_NNG_PASS(nng_msg_append_u32(m, 1u)); // 4 hops -- discard! - TEST_NNG_PASS(nng_msg_append_u32(m, 2u)); - TEST_NNG_PASS(nng_msg_append_u32(m, 3u)); - TEST_NNG_PASS(nng_msg_append_u32(m, 0x80000003u)); - TEST_NNG_PASS(nng_msg_append(m, "FAIL4", 6)); - TEST_NNG_PASS(nng_sendmsg(surv, m, 0)); - - TEST_NNG_RECV_STR(resp, "PASS1"); - TEST_NNG_RECV_STR(resp, "PASS3"); - - TEST_NNG_FAIL(nng_recvmsg(resp, &m, 0), NNG_ETIMEDOUT); - - TEST_NNG_PASS(nng_close(resp)); - TEST_NNG_PASS(nng_close(surv)); + NUTS_PASS(nng_msg_alloc(&m, 0)); + NUTS_PASS(nng_msg_append_u32(m, 1u)); // 2 hops + NUTS_PASS(nng_msg_append_u32(m, 0x80000001u)); + NUTS_PASS(nng_msg_append(m, "PASS1", 6)); + NUTS_PASS(nng_sendmsg(surv, m, 0)); + + NUTS_PASS(nng_msg_alloc(&m, 0)); + NUTS_PASS(nng_msg_append_u32(m, 1u)); // 4 hops -- discard! + NUTS_PASS(nng_msg_append_u32(m, 2u)); + NUTS_PASS(nng_msg_append_u32(m, 3u)); + NUTS_PASS(nng_msg_append_u32(m, 0x80000002u)); + NUTS_PASS(nng_msg_append(m, "FAIL2", 6)); + NUTS_PASS(nng_sendmsg(surv, m, 0)); + + NUTS_PASS(nng_msg_alloc(&m, 0)); + NUTS_PASS(nng_msg_append_u32(m, 1u)); // 3 hops - passes + NUTS_PASS(nng_msg_append_u32(m, 2u)); + NUTS_PASS(nng_msg_append_u32(m, 0x80000003u)); + NUTS_PASS(nng_msg_append(m, "PASS3", 6)); + NUTS_PASS(nng_sendmsg(surv, m, 0)); + + NUTS_PASS(nng_msg_alloc(&m, 0)); + NUTS_PASS(nng_msg_append_u32(m, 1u)); // 4 hops -- discard! + NUTS_PASS(nng_msg_append_u32(m, 2u)); + NUTS_PASS(nng_msg_append_u32(m, 3u)); + NUTS_PASS(nng_msg_append_u32(m, 0x80000003u)); + NUTS_PASS(nng_msg_append(m, "FAIL4", 6)); + NUTS_PASS(nng_sendmsg(surv, m, 0)); + + NUTS_RECV(resp, "PASS1"); + NUTS_RECV(resp, "PASS3"); + + NUTS_FAIL(nng_recvmsg(resp, &m, 0), NNG_ETIMEDOUT); + + NUTS_CLOSE(resp); + NUTS_CLOSE(surv); } TEST_LIST = { @@ -590,7 +574,8 @@ TEST_LIST = { { "respond close pipe before send", test_resp_close_pipe_before_send }, { "respond close pipe during send", test_resp_close_pipe_during_send }, { "respond recv aio ctx stopped", test_resp_ctx_recv_aio_stopped }, - { "respond close pipe context send", test_resp_close_pipe_context_send }, + { "respond close pipe context send", + test_resp_close_pipe_context_send }, { "respond close context send", test_resp_close_context_send }, { "respond context send nonblock", test_resp_ctx_send_nonblock }, { "respond context recv nonblock", test_resp_ctx_recv_nonblock }, diff --git a/src/protocol/survey0/survey_test.c b/src/protocol/survey0/survey_test.c index 65395eee..95d27adf 100644 --- a/src/protocol/survey0/survey_test.c +++ b/src/protocol/survey0/survey_test.c @@ -8,14 +8,7 @@ // found online at https://opensource.org/licenses/MIT. // -#include <string.h> - -#include <nng/nng.h> -#include <nng/protocol/survey0/respond.h> -#include <nng/protocol/survey0/survey.h> - -#include <acutest.h> -#include <testutil.h> +#include <nuts.h> static void test_surv_identity(void) @@ -24,18 +17,18 @@ test_surv_identity(void) int p; char * n; - TEST_NNG_PASS(nng_surveyor0_open(&s)); - TEST_NNG_PASS(nng_getopt_int(s, NNG_OPT_PROTO, &p)); - TEST_CHECK(p == NNG_SURVEYOR0_SELF); - TEST_NNG_PASS(nng_getopt_int(s, NNG_OPT_PEER, &p)); - TEST_CHECK(p == NNG_SURVEYOR0_PEER); // 49 - TEST_NNG_PASS(nng_getopt_string(s, NNG_OPT_PROTONAME, &n)); - TEST_CHECK(strcmp(n, NNG_SURVEYOR0_SELF_NAME) == 0); + NUTS_PASS(nng_surveyor0_open(&s)); + NUTS_PASS(nng_socket_get_int(s, NNG_OPT_PROTO, &p)); + NUTS_TRUE(p == NNG_SURVEYOR0_SELF); + NUTS_PASS(nng_socket_get_int(s, NNG_OPT_PEER, &p)); + NUTS_TRUE(p == NNG_SURVEYOR0_PEER); // 49 + NUTS_PASS(nng_socket_get_string(s, NNG_OPT_PROTONAME, &n)); + NUTS_MATCH(n, NNG_SURVEYOR0_SELF_NAME); nng_strfree(n); - TEST_NNG_PASS(nng_getopt_string(s, NNG_OPT_PEERNAME, &n)); - TEST_CHECK(strcmp(n, NNG_SURVEYOR0_PEER_NAME) == 0); + NUTS_PASS(nng_socket_get_string(s, NNG_OPT_PEERNAME, &n)); + NUTS_MATCH(n, NNG_SURVEYOR0_PEER_NAME); nng_strfree(n); - TEST_NNG_PASS(nng_close(s)); + NUTS_CLOSE(s); } static void @@ -47,31 +40,31 @@ test_surv_ttl_option(void) size_t sz; const char *opt = NNG_OPT_MAXTTL; - TEST_NNG_PASS(nng_surveyor0_open(&surv)); + NUTS_PASS(nng_surveyor0_open(&surv)); - TEST_NNG_PASS(nng_setopt_int(surv, opt, 1)); - TEST_NNG_FAIL(nng_setopt_int(surv, opt, 0), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_int(surv, opt, -1), NNG_EINVAL); + NUTS_PASS(nng_socket_set_int(surv, opt, 1)); + NUTS_FAIL(nng_socket_set_int(surv, opt, 0), NNG_EINVAL); + NUTS_FAIL(nng_socket_set_int(surv, opt, -1), NNG_EINVAL); // This test will fail if the NNI_MAX_MAX_TTL is changed from the // builtin default of 15. - TEST_NNG_FAIL(nng_setopt_int(surv, opt, 16), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_int(surv, opt, 256), NNG_EINVAL); - TEST_NNG_PASS(nng_setopt_int(surv, opt, 3)); - TEST_NNG_PASS(nng_getopt_int(surv, opt, &v)); - TEST_CHECK(v == 3); + NUTS_FAIL(nng_socket_set_int(surv, opt, 16), NNG_EINVAL); + NUTS_FAIL(nng_socket_set_int(surv, opt, 256), NNG_EINVAL); + NUTS_PASS(nng_socket_set_int(surv, opt, 3)); + NUTS_PASS(nng_socket_get_int(surv, opt, &v)); + NUTS_TRUE(v == 3); v = 0; sz = sizeof(v); - TEST_NNG_PASS(nng_getopt(surv, opt, &v, &sz)); - TEST_CHECK(v == 3); - TEST_CHECK(sz == sizeof(v)); + NUTS_PASS(nng_socket_get(surv, opt, &v, &sz)); + NUTS_TRUE(v == 3); + NUTS_TRUE(sz == sizeof(v)); - TEST_NNG_FAIL(nng_setopt(surv, opt, "", 1), NNG_EINVAL); + NUTS_FAIL(nng_socket_set(surv, opt, "", 1), NNG_EINVAL); sz = 1; - TEST_NNG_FAIL(nng_getopt(surv, opt, &v, &sz), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_bool(surv, opt, true), NNG_EBADTYPE); - TEST_NNG_FAIL(nng_getopt_bool(surv, opt, &b), NNG_EBADTYPE); + NUTS_FAIL(nng_socket_get(surv, opt, &v, &sz), NNG_EINVAL); + NUTS_FAIL(nng_socket_set_bool(surv, opt, true), NNG_EBADTYPE); + NUTS_FAIL(nng_socket_get_bool(surv, opt, &b), NNG_EBADTYPE); - TEST_NNG_PASS(nng_close(surv)); + NUTS_CLOSE(surv); } static void @@ -83,17 +76,17 @@ test_surv_survey_time_option(void) size_t sz = sizeof(b); const char * opt = NNG_OPT_SURVEYOR_SURVEYTIME; - TEST_NNG_PASS(nng_surveyor0_open(&surv)); + NUTS_PASS(nng_surveyor0_open(&surv)); - TEST_NNG_PASS(nng_setopt_ms(surv, opt, 10)); - TEST_NNG_FAIL(nng_setopt(surv, opt, "", 1), NNG_EINVAL); - TEST_NNG_FAIL(nng_getopt(surv, opt, &b, &sz), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_bool(surv, opt, true), NNG_EBADTYPE); - TEST_NNG_FAIL(nng_getopt_bool(surv, opt, &b), NNG_EBADTYPE); + NUTS_PASS(nng_socket_set_ms(surv, opt, 10)); + NUTS_FAIL(nng_socket_set(surv, opt, "", 1), NNG_EINVAL); + NUTS_FAIL(nng_socket_get(surv, opt, &b, &sz), NNG_EINVAL); + NUTS_FAIL(nng_socket_set_bool(surv, opt, true), NNG_EBADTYPE); + NUTS_FAIL(nng_socket_get_bool(surv, opt, &b), NNG_EBADTYPE); - TEST_NNG_PASS(nng_getopt_ms(surv, opt, &d)); - TEST_CHECK(d == 10); - TEST_NNG_PASS(nng_close(surv)); + NUTS_PASS(nng_socket_get_ms(surv, opt, &d)); + NUTS_TRUE(d == 10); + NUTS_CLOSE(surv); } void @@ -102,10 +95,10 @@ test_surv_recv_bad_state(void) nng_socket surv; nng_msg * msg = NULL; - TEST_NNG_PASS(nng_surveyor0_open(&surv)); - TEST_NNG_FAIL(nng_recvmsg(surv, &msg, 0), NNG_ESTATE); - TEST_CHECK(msg == NULL); - TEST_NNG_PASS(nng_close(surv)); + NUTS_PASS(nng_surveyor0_open(&surv)); + NUTS_FAIL(nng_recvmsg(surv, &msg, 0), NNG_ESTATE); + NUTS_TRUE(msg == NULL); + NUTS_CLOSE(surv); } static void @@ -116,31 +109,31 @@ test_surv_recv_garbage(void) nng_msg * m; uint32_t surv_id; - TEST_NNG_PASS(nng_respondent0_open_raw(&resp)); - TEST_NNG_PASS(nng_surveyor0_open(&surv)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_RECVTIMEO, 100)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_respondent0_open_raw(&resp)); + NUTS_PASS(nng_surveyor0_open(&surv)); + NUTS_PASS(nng_socket_set_ms(surv, NNG_OPT_RECVTIMEO, 100)); + NUTS_PASS(nng_socket_set_ms(surv, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(resp, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(resp, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(testutil_marry(surv, resp)); + NUTS_MARRY(surv, resp); - TEST_NNG_PASS(nng_msg_alloc(&m, 0)); - TEST_NNG_PASS(nng_sendmsg(surv, m, 0)); + NUTS_PASS(nng_msg_alloc(&m, 0)); + NUTS_PASS(nng_sendmsg(surv, m, 0)); - TEST_NNG_PASS(nng_recvmsg(resp, &m, 0)); + NUTS_PASS(nng_recvmsg(resp, &m, 0)); // The message will have a header that contains the 32-bit pipe ID, // followed by the 32-bit request ID. We will discard the request // ID before sending it out. - TEST_CHECK(nng_msg_header_len(m) == 8); - TEST_NNG_PASS(nng_msg_header_chop_u32(m, &surv_id)); + NUTS_TRUE(nng_msg_header_len(m) == 8); + NUTS_PASS(nng_msg_header_chop_u32(m, &surv_id)); - TEST_NNG_PASS(nng_sendmsg(resp, m, 0)); - TEST_NNG_FAIL(nng_recvmsg(surv, &m, 0), NNG_ETIMEDOUT); + NUTS_PASS(nng_sendmsg(resp, m, 0)); + NUTS_FAIL(nng_recvmsg(surv, &m, 0), NNG_ETIMEDOUT); - TEST_NNG_PASS(nng_close(surv)); - TEST_NNG_PASS(nng_close(resp)); + NUTS_CLOSE(surv); + NUTS_CLOSE(resp); } #define SECOND 1000 @@ -150,188 +143,138 @@ test_surv_resp_exchange(void) { nng_socket surv; nng_socket resp; - nng_msg * msg = NULL; - TEST_NNG_PASS(nng_surveyor0_open(&surv)); - TEST_NNG_PASS(nng_respondent0_open(&resp)); - - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_RECVTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_SENDTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_SENDTIMEO, SECOND)); - - TEST_NNG_PASS(testutil_marry(resp, surv)); - - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); - TEST_NNG_PASS(nng_msg_append(msg, "ping", 5)); - TEST_CHECK(nng_msg_len(msg) == 5); - TEST_CHECK(strcmp(nng_msg_body(msg), "ping") == 0); - TEST_NNG_PASS(nng_sendmsg(surv, msg, 0)); - msg = NULL; - TEST_NNG_PASS(nng_recvmsg(resp, &msg, 0)); - TEST_CHECK(msg != NULL); - TEST_CHECK(nng_msg_len(msg) == 5); - TEST_CHECK(strcmp(nng_msg_body(msg), "ping") == 0); - nng_msg_trim(msg, 5); - TEST_NNG_PASS(nng_msg_append(msg, "pong", 5)); - TEST_NNG_PASS(nng_sendmsg(resp, msg, 0)); - msg = NULL; - TEST_NNG_PASS(nng_recvmsg(surv, &msg, 0)); - TEST_CHECK(msg != NULL); - TEST_CHECK(nng_msg_len(msg) == 5); - TEST_CHECK(strcmp(nng_msg_body(msg), "pong") == 0); - nng_msg_free(msg); + NUTS_PASS(nng_surveyor0_open(&surv)); + NUTS_PASS(nng_respondent0_open(&resp)); + + NUTS_PASS(nng_socket_set_ms(surv, NNG_OPT_RECVTIMEO, SECOND)); + NUTS_PASS(nng_socket_set_ms(resp, NNG_OPT_RECVTIMEO, SECOND)); + NUTS_PASS(nng_socket_set_ms(surv, NNG_OPT_SENDTIMEO, SECOND)); + NUTS_PASS(nng_socket_set_ms(resp, NNG_OPT_SENDTIMEO, SECOND)); + + NUTS_MARRY(resp, surv); - TEST_NNG_PASS(nng_close(surv)); - TEST_NNG_PASS(nng_close(resp)); + NUTS_SEND(surv, "ping"); + NUTS_RECV(resp, "ping"); + NUTS_SEND(resp, "pong"); + NUTS_RECV(surv, "pong"); + + NUTS_CLOSE(surv); + NUTS_CLOSE(resp); } void test_surv_cancel(void) { - nng_msg * abc; - nng_msg * def; - nng_msg * cmd; nng_socket surv; nng_socket resp; - TEST_NNG_PASS(nng_respondent0_open(&resp)); - TEST_NNG_PASS(nng_surveyor0_open(&surv)); - - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_RECVTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, SECOND)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_SENDTIMEO, 5 * SECOND)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_SENDTIMEO, 5 * SECOND)); - TEST_NNG_PASS(nng_setopt_int(surv, NNG_OPT_SENDBUF, 16)); + NUTS_PASS(nng_respondent0_open(&resp)); + NUTS_PASS(nng_surveyor0_open(&surv)); - TEST_NNG_PASS(nng_msg_alloc(&abc, 0)); - TEST_NNG_PASS(nng_msg_append(abc, "abc", 4)); - TEST_NNG_PASS(nng_msg_alloc(&def, 0)); - TEST_NNG_PASS(nng_msg_append(def, "def", 4)); + NUTS_PASS(nng_socket_set_ms(surv, NNG_OPT_RECVTIMEO, SECOND)); + NUTS_PASS(nng_socket_set_ms(resp, NNG_OPT_RECVTIMEO, SECOND)); + NUTS_PASS(nng_socket_set_ms(surv, NNG_OPT_SENDTIMEO, 5 * SECOND)); + NUTS_PASS(nng_socket_set_ms(resp, NNG_OPT_SENDTIMEO, 5 * SECOND)); + NUTS_PASS(nng_socket_set_int(surv, NNG_OPT_SENDBUF, 16)); - TEST_NNG_PASS(testutil_marry(resp, surv)); + NUTS_MARRY(resp, surv); // Send req #1 (abc). - TEST_CHECK(nng_sendmsg(surv, abc, 0) == 0); + NUTS_SEND(surv, "abc"); // Sleep a bit. This is so that we ensure that our request gets // to the far side. (If we cancel too fast, then our outgoing send // will be canceled before it gets to the peer.) - testutil_sleep(100); + NUTS_SLEEP(100); // Send the next next request ("def"). Note that // the RESP side server will have already buffered the receive // request, and should simply be waiting for us to reply to abc. - TEST_NNG_PASS(nng_sendmsg(surv, def, 0)); + NUTS_SEND(surv, "def"); // Receive the first request (should be abc) on the REP server. - TEST_NNG_PASS(nng_recvmsg(resp, &cmd, 0)); - TEST_ASSERT(cmd != NULL); - TEST_CHECK(nng_msg_len(cmd) == 4); - TEST_CHECK(strcmp(nng_msg_body(cmd), "abc") == 0); + NUTS_RECV(resp, "abc"); // RESP sends the reply to first command. This will be discarded // by the SURV socket. - TEST_NNG_PASS(nng_sendmsg(resp, cmd, 0)); + NUTS_SEND(resp, "abc"); // Now get the next command from the REP; should be "def". - TEST_NNG_PASS(nng_recvmsg(resp, &cmd, 0)); - TEST_ASSERT(cmd != NULL); - TEST_CHECK(nng_msg_len(cmd) == 4); - TEST_CHECK(strcmp(nng_msg_body(cmd), "def") == 0); - TEST_MSG("Received body was %s", nng_msg_body(cmd)); + NUTS_RECV(resp, "def"); // And send it back to REQ. - TEST_NNG_PASS(nng_sendmsg(resp, cmd, 0)); + NUTS_SEND(resp, "def"); // Try a req command. This should give back "def" - TEST_NNG_PASS(nng_recvmsg(surv, &cmd, 0)); - TEST_CHECK(nng_msg_len(cmd) == 4); - TEST_CHECK(strcmp(nng_msg_body(cmd), "def") == 0); - nng_msg_free(cmd); + NUTS_RECV(surv, "def"); - TEST_NNG_PASS(nng_close(surv)); - TEST_NNG_PASS(nng_close(resp)); + NUTS_CLOSE(surv); + NUTS_CLOSE(resp); } void test_surv_cancel_abort_recv(void) { - - nng_msg * abc; - nng_msg * def; - nng_msg * cmd; nng_aio * aio; nng_duration time = SECOND * 10; // 10s (kind of never) nng_socket surv; nng_socket resp; - TEST_NNG_PASS(nng_respondent0_open(&resp)); - TEST_NNG_PASS(nng_surveyor0_open(&surv)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_respondent0_open(&resp)); + NUTS_PASS(nng_surveyor0_open(&surv)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_SURVEYOR_SURVEYTIME, time)); - TEST_NNG_PASS(nng_setopt_int(surv, NNG_OPT_SENDBUF, 16)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_RECVTIMEO, 5 * SECOND)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, 5 * SECOND)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_SENDTIMEO, 5 * SECOND)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_SENDTIMEO, 5 * SECOND)); + NUTS_PASS(nng_socket_set_ms(surv, NNG_OPT_SURVEYOR_SURVEYTIME, time)); + NUTS_PASS(nng_socket_set_int(surv, NNG_OPT_SENDBUF, 16)); + NUTS_PASS(nng_socket_set_ms(surv, NNG_OPT_RECVTIMEO, 5 * SECOND)); + NUTS_PASS(nng_socket_set_ms(resp, NNG_OPT_RECVTIMEO, 5 * SECOND)); + NUTS_PASS(nng_socket_set_ms(surv, NNG_OPT_SENDTIMEO, 5 * SECOND)); + NUTS_PASS(nng_socket_set_ms(resp, NNG_OPT_SENDTIMEO, 5 * SECOND)); - TEST_NNG_PASS(nng_msg_alloc(&abc, 0)); - TEST_NNG_PASS(nng_msg_append(abc, "abc", 4)); - TEST_NNG_PASS(nng_msg_alloc(&def, 0)); - TEST_NNG_PASS(nng_msg_append(def, "def", 4)); - - TEST_NNG_PASS(testutil_marry(resp, surv)); + NUTS_MARRY(resp, surv); // Send survey #1 (abc). - TEST_NNG_PASS(nng_sendmsg(surv, abc, 0)); + NUTS_SEND(surv, "abc"); // Wait for it to get ot the other side. - testutil_sleep(100); + NUTS_SLEEP(100); nng_aio_set_timeout(aio, 5 * SECOND); nng_recv_aio(surv, aio); // Give time for this recv to post properly. - testutil_sleep(100); + NUTS_SLEEP(100); // Send the next next request ("def"). Note that // the respondent side server will have already buffered the receive // request, and should simply be waiting for us to reply to // abc. - TEST_NNG_PASS(nng_sendmsg(surv, def, 0)); + NUTS_SEND(surv, "def"); // Our pending I/O should have been canceled. nng_aio_wait(aio); - TEST_NNG_FAIL(nng_aio_result(aio), NNG_ECANCELED); + NUTS_FAIL(nng_aio_result(aio), NNG_ECANCELED); // Receive the first request (should be abc) on the respondent. - TEST_NNG_PASS(nng_recvmsg(resp, &cmd, 0)); - TEST_CHECK(nng_msg_len(cmd) == 4); - TEST_CHECK(strcmp(nng_msg_body(cmd), "abc") == 0); + NUTS_RECV(resp, "abc"); // Respondent sends the reply to first survey. This will be // discarded by the SURV socket. - TEST_CHECK(nng_sendmsg(resp, cmd, 0) == 0); + NUTS_SEND(resp, "abc"); // Now get the next survey from the RESP; should be "def". - TEST_NNG_PASS(nng_recvmsg(resp, &cmd, 0)); - TEST_CHECK(nng_msg_len(cmd) == 4); - TEST_CHECK(strcmp(nng_msg_body(cmd), "def") == 0); + NUTS_RECV(resp, "def"); // And send it back to REQ. - TEST_NNG_PASS(nng_sendmsg(resp, cmd, 0)); + NUTS_SEND(resp, "def"); // Try a req command. This should give back "def" - TEST_NNG_PASS(nng_recvmsg(surv, &cmd, 0)); - TEST_CHECK(nng_msg_len(cmd) == 4); - TEST_CHECK(strcmp(nng_msg_body(cmd), "def") == 0); - nng_msg_free(cmd); + NUTS_RECV(surv, "def"); nng_aio_free(aio); - TEST_NNG_PASS(nng_close(surv)); - TEST_NNG_PASS(nng_close(resp)); + NUTS_CLOSE(surv); + NUTS_CLOSE(resp); } static void @@ -340,25 +283,25 @@ test_surv_cancel_post_recv(void) nng_socket surv; nng_socket resp; - TEST_NNG_PASS(nng_surveyor0_open(&surv)); - TEST_NNG_PASS(nng_respondent0_open(&resp)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(testutil_marry(surv, resp)); - - TEST_NNG_SEND_STR(surv, "ONE"); - TEST_NNG_RECV_STR(resp, "ONE"); - TEST_NNG_SEND_STR(resp, "one"); - testutil_sleep(100); // Make sure reply arrives! - TEST_NNG_SEND_STR(surv, "TWO"); - TEST_NNG_RECV_STR(resp, "TWO"); - TEST_NNG_SEND_STR(resp, "two"); - TEST_NNG_RECV_STR(surv, "two"); - - TEST_NNG_PASS(nng_close(surv)); - TEST_NNG_PASS(nng_close(resp)); + NUTS_PASS(nng_surveyor0_open(&surv)); + NUTS_PASS(nng_respondent0_open(&resp)); + NUTS_PASS(nng_socket_set_ms(surv, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(resp, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(surv, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(resp, NNG_OPT_RECVTIMEO, 1000)); + NUTS_MARRY(surv, resp); + + NUTS_SEND(surv, "ONE"); + NUTS_RECV(resp, "ONE"); + NUTS_SEND(resp, "one"); + NUTS_SLEEP(100); // Make sure reply arrives! + NUTS_SEND(surv, "TWO"); + NUTS_RECV(resp, "TWO"); + NUTS_SEND(resp, "two"); + NUTS_RECV(surv, "two"); + + NUTS_CLOSE(surv); + NUTS_CLOSE(resp); } static void @@ -368,21 +311,21 @@ test_surv_poll_writeable(void) nng_socket surv; nng_socket resp; - TEST_NNG_PASS(nng_surveyor0_open(&surv)); - TEST_NNG_PASS(nng_respondent0_open(&resp)); - TEST_NNG_PASS(nng_getopt_int(surv, NNG_OPT_SENDFD, &fd)); - TEST_CHECK(fd >= 0); + NUTS_PASS(nng_surveyor0_open(&surv)); + NUTS_PASS(nng_respondent0_open(&resp)); + NUTS_PASS(nng_socket_get_int(surv, NNG_OPT_SENDFD, &fd)); + NUTS_TRUE(fd >= 0); // Survey is broadcast, so we can always write. - TEST_CHECK(testutil_pollfd(fd) == true); + NUTS_TRUE(nuts_poll_fd(fd)); - TEST_NNG_PASS(testutil_marry(surv, resp)); + NUTS_MARRY(surv, resp); // Now it's writable. - TEST_CHECK(testutil_pollfd(fd) == true); + NUTS_TRUE(nuts_poll_fd(fd)); - TEST_NNG_PASS(nng_close(surv)); - TEST_NNG_PASS(nng_close(resp)); + NUTS_CLOSE(surv); + NUTS_CLOSE(resp); } void @@ -393,39 +336,39 @@ test_surv_poll_readable(void) nng_socket resp; nng_msg * msg; - TEST_NNG_PASS(nng_surveyor0_open(&surv)); - TEST_NNG_PASS(nng_respondent0_open(&resp)); - TEST_NNG_PASS(nng_getopt_int(surv, NNG_OPT_RECVFD, &fd)); - TEST_CHECK(fd >= 0); + NUTS_PASS(nng_surveyor0_open(&surv)); + NUTS_PASS(nng_respondent0_open(&resp)); + NUTS_PASS(nng_socket_get_int(surv, NNG_OPT_RECVFD, &fd)); + NUTS_TRUE(fd >= 0); // Not readable if not connected! - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_TRUE(nuts_poll_fd(fd) == false); // Even after connect (no message yet) - TEST_NNG_PASS(testutil_marry(surv, resp)); - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_MARRY(surv, resp); + NUTS_TRUE(nuts_poll_fd(fd) == false); // But once we send messages, it is. // We have to send a request, in order to send a reply. - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); - TEST_NNG_PASS(nng_msg_append(msg, "xyz", 3)); - TEST_NNG_PASS(nng_sendmsg(surv, msg, 0)); - TEST_NNG_PASS(nng_recvmsg(resp, &msg, 0)); // recv on rep - TEST_NNG_PASS(nng_sendmsg(resp, msg, 0)); // echo it back - testutil_sleep(200); // give time for message to arrive + NUTS_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_msg_append(msg, "xyz", 3)); + NUTS_PASS(nng_sendmsg(surv, msg, 0)); + NUTS_PASS(nng_recvmsg(resp, &msg, 0)); // recv on rep + NUTS_PASS(nng_sendmsg(resp, msg, 0)); // echo it back + NUTS_SLEEP(200); // give time for message to arrive - TEST_CHECK(testutil_pollfd(fd) == true); + NUTS_TRUE(nuts_poll_fd(fd) == true); // and receiving makes it no longer ready - TEST_NNG_PASS(nng_recvmsg(surv, &msg, 0)); + NUTS_PASS(nng_recvmsg(surv, &msg, 0)); nng_msg_free(msg); - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_TRUE(nuts_poll_fd(fd) == false); // TODO verify unsolicited response - TEST_NNG_PASS(nng_close(surv)); - TEST_NNG_PASS(nng_close(resp)); + NUTS_CLOSE(surv); + NUTS_CLOSE(resp); } static void @@ -435,14 +378,12 @@ test_surv_ctx_no_poll(void) nng_socket surv; nng_ctx ctx; - TEST_NNG_PASS(nng_surveyor0_open(&surv)); - TEST_NNG_PASS(nng_ctx_open(&ctx, surv)); - TEST_NNG_FAIL( - nng_ctx_getopt_int(ctx, NNG_OPT_SENDFD, &fd), NNG_ENOTSUP); - TEST_NNG_FAIL( - nng_ctx_getopt_int(ctx, NNG_OPT_RECVFD, &fd), NNG_ENOTSUP); - TEST_NNG_PASS(nng_ctx_close(ctx)); - TEST_NNG_PASS(nng_close(surv)); + NUTS_PASS(nng_surveyor0_open(&surv)); + NUTS_PASS(nng_ctx_open(&ctx, surv)); + NUTS_FAIL(nng_ctx_get_int(ctx, NNG_OPT_SENDFD, &fd), NNG_ENOTSUP); + NUTS_FAIL(nng_ctx_get_int(ctx, NNG_OPT_RECVFD, &fd), NNG_ENOTSUP); + NUTS_PASS(nng_ctx_close(ctx)); + NUTS_CLOSE(surv); } static void @@ -454,25 +395,25 @@ test_surv_ctx_recv_nonblock(void) nng_aio * aio; nng_msg * msg; - TEST_NNG_PASS(nng_surveyor0_open(&surv)); - TEST_NNG_PASS(nng_respondent0_open(&resp)); - TEST_NNG_PASS(nng_ctx_open(&ctx, surv)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_surveyor0_open(&surv)); + NUTS_PASS(nng_respondent0_open(&resp)); + NUTS_PASS(nng_ctx_open(&ctx, surv)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_msg_alloc(&msg, 0)); - TEST_NNG_PASS(testutil_marry(surv, resp)); + NUTS_MARRY(surv, resp); nng_aio_set_msg(aio, msg); nng_ctx_send(ctx, aio); nng_aio_wait(aio); - TEST_NNG_PASS(nng_aio_result(aio)); + NUTS_PASS(nng_aio_result(aio)); nng_aio_set_timeout(aio, 0); // Instant timeout nng_ctx_recv(ctx, aio); nng_aio_wait(aio); - TEST_NNG_FAIL(nng_aio_result(aio), NNG_ETIMEDOUT); - TEST_NNG_PASS(nng_close(surv)); - TEST_NNG_PASS(nng_close(resp)); + NUTS_FAIL(nng_aio_result(aio), NNG_ETIMEDOUT); + NUTS_CLOSE(surv); + NUTS_CLOSE(resp); nng_aio_free(aio); } @@ -484,17 +425,17 @@ test_surv_ctx_send_nonblock(void) nng_aio * aio; nng_msg * msg; - TEST_NNG_PASS(nng_surveyor0_open(&surv)); - TEST_NNG_PASS(nng_ctx_open(&ctx, surv)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_surveyor0_open(&surv)); + NUTS_PASS(nng_ctx_open(&ctx, surv)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_msg_alloc(&msg, 0)); nng_aio_set_msg(aio, msg); nng_aio_set_timeout(aio, 0); // Instant timeout nng_ctx_send(ctx, aio); nng_aio_wait(aio); - TEST_NNG_PASS(nng_aio_result(aio)); // We never block - TEST_NNG_PASS(nng_close(surv)); + NUTS_PASS(nng_aio_result(aio)); // We never block + NUTS_CLOSE(surv); nng_aio_free(aio); } @@ -504,16 +445,16 @@ test_surv_send_best_effort(void) nng_socket surv; nng_socket resp; - TEST_NNG_PASS(nng_surveyor0_open(&surv)); - TEST_NNG_PASS(nng_respondent0_open(&resp)); - TEST_NNG_PASS(testutil_marry(surv, resp)); + NUTS_PASS(nng_surveyor0_open(&surv)); + NUTS_PASS(nng_respondent0_open(&resp)); + NUTS_MARRY(surv, resp); for (int i = 0; i < 200; i++) { - TEST_NNG_SEND_STR(surv, "junk"); + NUTS_SEND(surv, "junk"); } - TEST_NNG_PASS(nng_close(surv)); - TEST_NNG_PASS(nng_close(resp)); + NUTS_CLOSE(surv); + NUTS_CLOSE(resp); } static void @@ -524,23 +465,23 @@ test_surv_survey_timeout(void) char buf[16]; size_t sz; - TEST_NNG_PASS(nng_surveyor0_open(&surv)); - TEST_NNG_PASS(nng_respondent0_open(&resp)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_SURVEYOR_SURVEYTIME, 50)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_RECVTIMEO, 100)); + NUTS_PASS(nng_surveyor0_open(&surv)); + NUTS_PASS(nng_respondent0_open(&resp)); + NUTS_PASS(nng_socket_set_ms(surv, NNG_OPT_SURVEYOR_SURVEYTIME, 50)); + NUTS_PASS(nng_socket_set_ms(surv, NNG_OPT_RECVTIMEO, 100)); - TEST_NNG_PASS(testutil_marry(surv, resp)); + NUTS_MARRY(surv, resp); - TEST_NNG_SEND_STR(surv, "hello"); - TEST_NNG_RECV_STR(resp, "hello"); + NUTS_SEND(surv, "hello"); + NUTS_RECV(resp, "hello"); sz = sizeof(buf); - TEST_NNG_FAIL(nng_recv(surv, buf, &sz, 0), NNG_ETIMEDOUT); - TEST_NNG_SEND_STR(resp, "world"); - TEST_NNG_FAIL(nng_recv(surv, buf, &sz, 0), NNG_ESTATE); + NUTS_FAIL(nng_recv(surv, buf, &sz, 0), NNG_ETIMEDOUT); + NUTS_SEND(resp, "world"); + NUTS_FAIL(nng_recv(surv, buf, &sz, 0), NNG_ESTATE); - TEST_NNG_PASS(nng_close(surv)); - TEST_NNG_PASS(nng_close(resp)); + NUTS_CLOSE(surv); + NUTS_CLOSE(resp); } static void @@ -552,23 +493,23 @@ test_surv_ctx_recv_close_socket(void) nng_aio * aio; nng_msg * m; - TEST_NNG_PASS(nng_surveyor0_open(&surv)); - TEST_NNG_PASS(nng_respondent0_open(&resp)); - TEST_NNG_PASS(nng_ctx_open(&ctx, surv)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); - TEST_NNG_PASS(testutil_marry(surv, resp)); - TEST_NNG_PASS(nng_msg_alloc(&m, 0)); + NUTS_PASS(nng_surveyor0_open(&surv)); + NUTS_PASS(nng_respondent0_open(&resp)); + NUTS_PASS(nng_ctx_open(&ctx, surv)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_MARRY(surv, resp); + NUTS_PASS(nng_msg_alloc(&m, 0)); nng_aio_set_msg(aio, m); nng_ctx_send(ctx, aio); nng_aio_wait(aio); - TEST_NNG_PASS(nng_aio_result(aio)); + NUTS_PASS(nng_aio_result(aio)); nng_ctx_recv(ctx, aio); nng_close(surv); - TEST_NNG_FAIL(nng_aio_result(aio), NNG_ECLOSED); + NUTS_FAIL(nng_aio_result(aio), NNG_ECLOSED); nng_aio_free(aio); - TEST_NNG_PASS(nng_close(resp)); + NUTS_CLOSE(resp); } static void @@ -581,52 +522,52 @@ test_surv_context_multi(void) nng_msg * m; int cnt = sizeof(c) / sizeof(c[0]); - TEST_NNG_PASS(nng_surveyor0_open(&surv)); - TEST_NNG_PASS(nng_respondent0_open(&resp)); - TEST_NNG_PASS(testutil_marry(surv, resp)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_SURVEYOR_SURVEYTIME, 200)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_surveyor0_open(&surv)); + NUTS_PASS(nng_respondent0_open(&resp)); + NUTS_MARRY(surv, resp); + NUTS_PASS(nng_socket_set_ms(surv, NNG_OPT_SURVEYOR_SURVEYTIME, 200)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); for (int i = 0; i < cnt; i++) { - TEST_NNG_PASS(nng_ctx_open(&c[i], surv)); + NUTS_PASS(nng_ctx_open(&c[i], surv)); } for (int i = 0; i < cnt; i++) { - TEST_NNG_PASS(nng_msg_alloc(&m, 0)); - TEST_NNG_PASS(nng_msg_append_u32(m, i)); + NUTS_PASS(nng_msg_alloc(&m, 0)); + NUTS_PASS(nng_msg_append_u32(m, i)); nng_aio_set_msg(aio, m); nng_ctx_send(c[i], aio); nng_aio_wait(aio); - TEST_NNG_PASS(nng_aio_result(aio)); + NUTS_PASS(nng_aio_result(aio)); } for (int i = 0; i < cnt; i++) { - TEST_NNG_PASS(nng_recvmsg(resp, &m, 0)); - TEST_NNG_PASS(nng_sendmsg(resp, m, 0)); + NUTS_PASS(nng_recvmsg(resp, &m, 0)); + NUTS_PASS(nng_sendmsg(resp, m, 0)); } for (int i = cnt - 1; i >= 0; i--) { uint32_t x; nng_ctx_recv(c[i], aio); nng_aio_wait(aio); - TEST_NNG_PASS(nng_aio_result(aio)); + NUTS_PASS(nng_aio_result(aio)); m = nng_aio_get_msg(aio); TEST_ASSERT(m != NULL); - TEST_NNG_PASS(nng_msg_trim_u32(m, &x)); - TEST_CHECK(x == (uint32_t)i); + NUTS_PASS(nng_msg_trim_u32(m, &x)); + NUTS_TRUE(x == (uint32_t) i); nng_msg_free(m); } for (int i = 0; i < cnt; i++) { nng_ctx_recv(c[i], aio); nng_aio_wait(aio); - TEST_CHECK(nng_aio_result(aio) != 0); + NUTS_TRUE(nng_aio_result(aio) != 0); } for (int i = 0; i < cnt; i++) { nng_ctx_close(c[i]); } - TEST_NNG_PASS(nng_close(surv)); - TEST_NNG_PASS(nng_close(resp)); + NUTS_CLOSE(surv); + NUTS_CLOSE(resp); nng_aio_free(aio); } @@ -636,28 +577,27 @@ test_surv_validate_peer(void) nng_socket s1, s2; nng_stat * stats; nng_stat * reject; - char addr[64]; - - testutil_scratch_addr("inproc", sizeof(addr), addr); + char * addr; - TEST_NNG_PASS(nng_surveyor0_open(&s1)); - TEST_NNG_PASS(nng_surveyor0_open(&s2)); + NUTS_ADDR(addr, "inproc"); + NUTS_PASS(nng_surveyor0_open(&s1)); + NUTS_PASS(nng_surveyor0_open(&s2)); - TEST_NNG_PASS(nng_listen(s1, addr, NULL, 0)); - TEST_NNG_PASS(nng_dial(s2, addr, NULL, NNG_FLAG_NONBLOCK)); + NUTS_PASS(nng_listen(s1, addr, NULL, 0)); + NUTS_PASS(nng_dial(s2, addr, NULL, NNG_FLAG_NONBLOCK)); - testutil_sleep(100); - TEST_NNG_PASS(nng_stats_get(&stats)); + NUTS_SLEEP(100); + NUTS_PASS(nng_stats_get(&stats)); - TEST_CHECK(stats != NULL); - TEST_CHECK((reject = nng_stat_find_socket(stats, s1)) != NULL); - TEST_CHECK((reject = nng_stat_find(reject, "reject")) != NULL); + NUTS_TRUE(stats != NULL); + NUTS_TRUE((reject = nng_stat_find_socket(stats, s1)) != NULL); + NUTS_TRUE((reject = nng_stat_find(reject, "reject")) != NULL); - TEST_CHECK(nng_stat_type(reject) == NNG_STAT_COUNTER); - TEST_CHECK(nng_stat_value(reject) > 0); + NUTS_TRUE(nng_stat_type(reject) == NNG_STAT_COUNTER); + NUTS_TRUE(nng_stat_value(reject) > 0); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(s2)); + NUTS_PASS(nng_close(s1)); + NUTS_PASS(nng_close(s2)); nng_stats_free(stats); } diff --git a/src/protocol/survey0/xrespond_test.c b/src/protocol/survey0/xrespond_test.c index 342c8a94..ec5e99a3 100644 --- a/src/protocol/survey0/xrespond_test.c +++ b/src/protocol/survey0/xrespond_test.c @@ -7,14 +7,7 @@ // found online at https://opensource.org/licenses/MIT. // -#include <string.h> - -#include <nng/nng.h> -#include <nng/protocol/survey0/respond.h> -#include <nng/protocol/survey0/survey.h> - -#include <acutest.h> -#include <testutil.h> +#include <nuts.h> static void test_xresp_identity(void) @@ -24,16 +17,16 @@ test_xresp_identity(void) char * n1; char * n2; - TEST_NNG_PASS(nng_respondent0_open_raw(&s)); - TEST_NNG_PASS(nng_getopt_int(s, NNG_OPT_PROTO, &p1)); - TEST_NNG_PASS(nng_getopt_int(s, NNG_OPT_PEER, &p2)); - TEST_NNG_PASS(nng_getopt_string(s, NNG_OPT_PROTONAME, &n1)); - TEST_NNG_PASS(nng_getopt_string(s, NNG_OPT_PEERNAME, &n2)); - TEST_NNG_PASS(nng_close(s)); - TEST_CHECK(p1 == NNG_RESPONDENT0_SELF); - TEST_CHECK(p2 == NNG_RESPONDENT0_PEER); - TEST_CHECK(strcmp(n1, NNG_RESPONDENT0_SELF_NAME) == 0); - TEST_CHECK(strcmp(n2, NNG_RESPONDENT0_PEER_NAME) == 0); + NUTS_PASS(nng_respondent0_open_raw(&s)); + NUTS_PASS(nng_socket_get_int(s, NNG_OPT_PROTO, &p1)); + NUTS_PASS(nng_socket_get_int(s, NNG_OPT_PEER, &p2)); + NUTS_PASS(nng_socket_get_string(s, NNG_OPT_PROTONAME, &n1)); + NUTS_PASS(nng_socket_get_string(s, NNG_OPT_PEERNAME, &n2)); + NUTS_CLOSE(s); + NUTS_TRUE(p1 == NNG_RESPONDENT0_SELF); + NUTS_TRUE(p2 == NNG_RESPONDENT0_PEER); + NUTS_MATCH(n1, NNG_RESPONDENT0_SELF_NAME); + NUTS_MATCH(n2, NNG_RESPONDENT0_PEER_NAME); nng_strfree(n1); nng_strfree(n2); } @@ -44,10 +37,10 @@ test_xresp_raw(void) nng_socket s; bool b; - TEST_NNG_PASS(nng_respondent0_open_raw(&s)); - TEST_NNG_PASS(nng_getopt_bool(s, NNG_OPT_RAW, &b)); - TEST_CHECK(b); - TEST_NNG_PASS(nng_close(s)); + NUTS_PASS(nng_respondent0_open_raw(&s)); + NUTS_PASS(nng_socket_get_bool(s, NNG_OPT_RAW, &b)); + NUTS_TRUE(b); + NUTS_CLOSE(s); } static void @@ -56,9 +49,9 @@ test_xresp_no_context(void) nng_socket s; nng_ctx ctx; - TEST_NNG_PASS(nng_respondent0_open_raw(&s)); - TEST_NNG_FAIL(nng_ctx_open(&ctx, s), NNG_ENOTSUP); - TEST_NNG_PASS(nng_close(s)); + NUTS_PASS(nng_respondent0_open_raw(&s)); + NUTS_FAIL(nng_ctx_open(&ctx, s), NNG_ENOTSUP); + NUTS_CLOSE(s); } static void @@ -68,24 +61,24 @@ test_xresp_poll_writeable(void) nng_socket surv; nng_socket resp; - TEST_NNG_PASS(nng_respondent0_open_raw(&resp)); - TEST_NNG_PASS(nng_surveyor0_open(&surv)); - TEST_NNG_PASS(nng_getopt_int(resp, NNG_OPT_SENDFD, &fd)); - TEST_CHECK(fd >= 0); + NUTS_PASS(nng_respondent0_open_raw(&resp)); + NUTS_PASS(nng_surveyor0_open(&surv)); + NUTS_PASS(nng_socket_get_int(resp, NNG_OPT_SENDFD, &fd)); + NUTS_TRUE(fd >= 0); // We are always writeable, even before connect. This is so that // back-pressure from a bad peer can't trash others. We assume // that peers won't send us requests faster than they can consume // the answers. If they do, they will lose their answers. - TEST_CHECK(testutil_pollfd(fd) == true); + NUTS_TRUE(nuts_poll_fd(fd) == true); - TEST_NNG_PASS(testutil_marry(surv, resp)); + NUTS_MARRY(surv, resp); // Now it's writable. - TEST_CHECK(testutil_pollfd(fd) == true); + NUTS_TRUE(nuts_poll_fd(fd) == true); - TEST_NNG_PASS(nng_close(surv)); - TEST_NNG_PASS(nng_close(resp)); + NUTS_CLOSE(surv); + NUTS_CLOSE(resp); } static void @@ -96,32 +89,32 @@ test_xresp_poll_readable(void) nng_socket resp; nng_msg * msg; - TEST_NNG_PASS(nng_surveyor0_open(&surv)); - TEST_NNG_PASS(nng_respondent0_open_raw(&resp)); - TEST_NNG_PASS(nng_getopt_int(resp, NNG_OPT_RECVFD, &fd)); - TEST_CHECK(fd >= 0); + NUTS_PASS(nng_surveyor0_open(&surv)); + NUTS_PASS(nng_respondent0_open_raw(&resp)); + NUTS_PASS(nng_socket_get_int(resp, NNG_OPT_RECVFD, &fd)); + NUTS_TRUE(fd >= 0); // Not readable if not connected! - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_TRUE(nuts_poll_fd(fd) == false); // Even after connect (no message yet) - TEST_NNG_PASS(testutil_marry(surv, resp)); - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_MARRY(surv, resp); + NUTS_TRUE(nuts_poll_fd(fd) == false); // But once we send messages, it is. // We have to send a request, in order to send a reply. - TEST_NNG_SEND_STR(surv, "abc"); - testutil_sleep(100); + NUTS_SEND(surv, "abc"); + NUTS_SLEEP(100); - TEST_CHECK(testutil_pollfd(fd) == true); + NUTS_TRUE(nuts_poll_fd(fd) == true); // and receiving makes it no longer ready - TEST_NNG_PASS(nng_recvmsg(resp, &msg, 0)); + NUTS_PASS(nng_recvmsg(resp, &msg, 0)); nng_msg_free(msg); - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_TRUE(nuts_poll_fd(fd) == false); - TEST_NNG_PASS(nng_close(surv)); - TEST_NNG_PASS(nng_close(resp)); + NUTS_CLOSE(surv); + NUTS_CLOSE(resp); } static void @@ -130,28 +123,28 @@ test_xresp_validate_peer(void) nng_socket s1, s2; nng_stat * stats; nng_stat * reject; - char addr[64]; + char * addr; - testutil_scratch_addr("inproc", sizeof(addr), addr); + NUTS_ADDR(addr, "inproc"); - TEST_NNG_PASS(nng_respondent0_open_raw(&s1)); - TEST_NNG_PASS(nng_respondent0_open(&s2)); + NUTS_PASS(nng_respondent0_open_raw(&s1)); + NUTS_PASS(nng_respondent0_open(&s2)); - TEST_NNG_PASS(nng_listen(s1, addr, NULL, 0)); - TEST_NNG_PASS(nng_dial(s2, addr, NULL, NNG_FLAG_NONBLOCK)); + NUTS_PASS(nng_listen(s1, addr, NULL, 0)); + NUTS_PASS(nng_dial(s2, addr, NULL, NNG_FLAG_NONBLOCK)); - testutil_sleep(100); - TEST_NNG_PASS(nng_stats_get(&stats)); + NUTS_SLEEP(100); + NUTS_PASS(nng_stats_get(&stats)); - TEST_CHECK(stats != NULL); - TEST_CHECK((reject = nng_stat_find_socket(stats, s1)) != NULL); - TEST_CHECK((reject = nng_stat_find(reject, "reject")) != NULL); + NUTS_TRUE(stats != NULL); + NUTS_TRUE((reject = nng_stat_find_socket(stats, s1)) != NULL); + NUTS_TRUE((reject = nng_stat_find(reject, "reject")) != NULL); - TEST_CHECK(nng_stat_type(reject) == NNG_STAT_COUNTER); - TEST_CHECK(nng_stat_value(reject) > 0); + NUTS_TRUE(nng_stat_type(reject) == NNG_STAT_COUNTER); + NUTS_TRUE(nng_stat_value(reject) > 0); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(s2)); + NUTS_CLOSE(s1); + NUTS_CLOSE(s2); nng_stats_free(stats); } @@ -164,26 +157,26 @@ test_xresp_close_pipe_before_send(void) nng_aio * aio1; nng_msg * m; - TEST_NNG_PASS(nng_respondent0_open_raw(&resp)); - TEST_NNG_PASS(nng_surveyor0_open(&surv)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_aio_alloc(&aio1, NULL, NULL)); + NUTS_PASS(nng_respondent0_open_raw(&resp)); + NUTS_PASS(nng_surveyor0_open(&surv)); + NUTS_PASS(nng_socket_set_ms(resp, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(resp, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(surv, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_aio_alloc(&aio1, NULL, NULL)); - TEST_NNG_PASS(testutil_marry(surv, resp)); - TEST_NNG_SEND_STR(surv, "test"); + NUTS_MARRY(surv, resp); + NUTS_SEND(surv, "test"); nng_recv_aio(resp, aio1); nng_aio_wait(aio1); - TEST_NNG_PASS(nng_aio_result(aio1)); - TEST_CHECK((m = nng_aio_get_msg(aio1)) != NULL); + NUTS_PASS(nng_aio_result(aio1)); + NUTS_TRUE((m = nng_aio_get_msg(aio1)) != NULL); p = nng_msg_get_pipe(m); - TEST_NNG_PASS(nng_pipe_close(p)); - TEST_NNG_PASS(nng_sendmsg(resp, m, 0)); + NUTS_PASS(nng_pipe_close(p)); + NUTS_PASS(nng_sendmsg(resp, m, 0)); - TEST_NNG_PASS(nng_close(surv)); - TEST_NNG_PASS(nng_close(resp)); + NUTS_CLOSE(surv); + NUTS_CLOSE(resp); nng_aio_free(aio1); } @@ -195,37 +188,37 @@ test_xresp_close_pipe_during_send(void) nng_pipe p; nng_msg * m; - TEST_NNG_PASS(nng_respondent_open_raw(&resp)); - TEST_NNG_PASS(nng_surveyor0_open_raw(&surv)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_SENDTIMEO, 200)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_int(resp, NNG_OPT_SENDBUF, 20)); - TEST_NNG_PASS(nng_setopt_int(resp, NNG_OPT_RECVBUF, 20)); - TEST_NNG_PASS(nng_setopt_int(surv, NNG_OPT_SENDBUF, 20)); - TEST_NNG_PASS(nng_setopt_int(surv, NNG_OPT_RECVBUF, 1)); - - TEST_NNG_PASS(testutil_marry(surv, resp)); - - TEST_NNG_PASS(nng_msg_alloc(&m, 4)); - TEST_NNG_PASS(nng_msg_append_u32(m, (unsigned) 0x81000000u)); - TEST_NNG_PASS(nng_sendmsg(surv, m, 0)); - TEST_NNG_PASS(nng_recvmsg(resp, &m, 0)); + NUTS_PASS(nng_respondent_open_raw(&resp)); + NUTS_PASS(nng_surveyor0_open_raw(&surv)); + NUTS_PASS(nng_socket_set_ms(resp, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(resp, NNG_OPT_SENDTIMEO, 200)); + NUTS_PASS(nng_socket_set_ms(surv, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_int(resp, NNG_OPT_SENDBUF, 20)); + NUTS_PASS(nng_socket_set_int(resp, NNG_OPT_RECVBUF, 20)); + NUTS_PASS(nng_socket_set_int(surv, NNG_OPT_SENDBUF, 20)); + NUTS_PASS(nng_socket_set_int(surv, NNG_OPT_RECVBUF, 1)); + + NUTS_MARRY(surv, resp); + + NUTS_PASS(nng_msg_alloc(&m, 4)); + NUTS_PASS(nng_msg_append_u32(m, (unsigned) 0x81000000u)); + NUTS_PASS(nng_sendmsg(surv, m, 0)); + NUTS_PASS(nng_recvmsg(resp, &m, 0)); p = nng_msg_get_pipe(m); nng_msg_free(m); for (int i = 0; i < 100; i++) { - TEST_NNG_PASS(nng_msg_alloc(&m, 4)); - TEST_NNG_PASS(nng_msg_header_append_u32(m, nng_pipe_id(p))); - TEST_NNG_PASS( + NUTS_PASS(nng_msg_alloc(&m, 4)); + NUTS_PASS(nng_msg_header_append_u32(m, nng_pipe_id(p))); + NUTS_PASS( nng_msg_header_append_u32(m, (unsigned) i | 0x80000000u)); // protocol does not exert back-pressure - TEST_NNG_PASS(nng_sendmsg(resp, m, 0)); + NUTS_PASS(nng_sendmsg(resp, m, 0)); } - TEST_NNG_PASS(nng_pipe_close(p)); + NUTS_PASS(nng_pipe_close(p)); - TEST_NNG_PASS(nng_close(surv)); - TEST_NNG_PASS(nng_close(resp)); + NUTS_CLOSE(surv); + NUTS_CLOSE(resp); } static void @@ -235,27 +228,27 @@ test_xresp_close_during_recv(void) nng_socket surv; nng_msg * m; - TEST_NNG_PASS(nng_respondent0_open_raw(&resp)); - TEST_NNG_PASS(nng_surveyor0_open_raw(&surv)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_SENDTIMEO, 100)); - TEST_NNG_PASS(nng_setopt_int(resp, NNG_OPT_RECVBUF, 5)); - TEST_NNG_PASS(nng_setopt_int(surv, NNG_OPT_SENDBUF, 20)); + NUTS_PASS(nng_respondent0_open_raw(&resp)); + NUTS_PASS(nng_surveyor0_open_raw(&surv)); + NUTS_PASS(nng_socket_set_ms(surv, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(surv, NNG_OPT_SENDTIMEO, 100)); + NUTS_PASS(nng_socket_set_int(resp, NNG_OPT_RECVBUF, 5)); + NUTS_PASS(nng_socket_set_int(surv, NNG_OPT_SENDBUF, 20)); - TEST_NNG_PASS(testutil_marry(surv, resp)); + NUTS_MARRY(surv, resp); for (unsigned i = 0; i < 100; i++) { int rv; - TEST_NNG_PASS(nng_msg_alloc(&m, 4)); - TEST_NNG_PASS(nng_msg_header_append_u32(m, i | 0x80000000u)); + NUTS_PASS(nng_msg_alloc(&m, 4)); + NUTS_PASS(nng_msg_header_append_u32(m, i | 0x80000000u)); rv = nng_sendmsg(surv, m, 0); if (rv == NNG_ETIMEDOUT) { nng_msg_free(m); break; } } - TEST_NNG_PASS(nng_close(surv)); - TEST_NNG_PASS(nng_close(resp)); + NUTS_CLOSE(surv); + NUTS_CLOSE(resp); } static void @@ -264,14 +257,14 @@ test_xresp_recv_aio_stopped(void) nng_socket resp; nng_aio * aio; - TEST_NNG_PASS(nng_respondent0_open_raw(&resp)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_respondent0_open_raw(&resp)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); nng_aio_stop(aio); nng_recv_aio(resp, aio); nng_aio_wait(aio); - TEST_NNG_FAIL(nng_aio_result(aio), NNG_ECANCELED); - TEST_NNG_PASS(nng_close(resp)); + NUTS_FAIL(nng_aio_result(aio), NNG_ECANCELED); + NUTS_CLOSE(resp); nng_aio_free(aio); } @@ -282,21 +275,21 @@ test_xresp_send_no_header(void) nng_socket surv; nng_msg * m; - TEST_NNG_PASS(nng_surveyor0_open_raw(&surv)); - TEST_NNG_PASS(nng_respondent0_open_raw(&resp)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, 100)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_RECVTIMEO, 100)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_surveyor0_open_raw(&surv)); + NUTS_PASS(nng_respondent0_open_raw(&resp)); + NUTS_PASS(nng_socket_set_ms(resp, NNG_OPT_RECVTIMEO, 100)); + NUTS_PASS(nng_socket_set_ms(surv, NNG_OPT_RECVTIMEO, 100)); + NUTS_PASS(nng_socket_set_ms(resp, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(surv, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(testutil_marry(surv, resp)); + NUTS_MARRY(surv, resp); - TEST_NNG_PASS(nng_msg_alloc(&m, 4)); - TEST_NNG_PASS(nng_sendmsg(resp, m, 0)); - TEST_NNG_FAIL(nng_recvmsg(resp, &m, 0), NNG_ETIMEDOUT); + NUTS_PASS(nng_msg_alloc(&m, 4)); + NUTS_PASS(nng_sendmsg(resp, m, 0)); + NUTS_FAIL(nng_recvmsg(resp, &m, 0), NNG_ETIMEDOUT); - TEST_NNG_PASS(nng_close(surv)); - TEST_NNG_PASS(nng_close(resp)); + NUTS_CLOSE(surv); + NUTS_CLOSE(resp); } static void @@ -306,21 +299,21 @@ test_xresp_recv_garbage(void) nng_socket surv; nng_msg * m; - TEST_NNG_PASS(nng_respondent0_open_raw(&resp)); - TEST_NNG_PASS(nng_surveyor0_open_raw(&surv)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, 100)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_SENDTIMEO, 100)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_respondent0_open_raw(&resp)); + NUTS_PASS(nng_surveyor0_open_raw(&surv)); + NUTS_PASS(nng_socket_set_ms(resp, NNG_OPT_RECVTIMEO, 100)); + NUTS_PASS(nng_socket_set_ms(resp, NNG_OPT_SENDTIMEO, 100)); + NUTS_PASS(nng_socket_set_ms(surv, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(testutil_marry(surv, resp)); + NUTS_MARRY(surv, resp); - TEST_NNG_PASS(nng_msg_alloc(&m, 4)); - TEST_NNG_PASS(nng_msg_append_u32(m, 1u)); - TEST_NNG_PASS(nng_sendmsg(surv, m, 0)); - TEST_NNG_FAIL(nng_recvmsg(resp, &m, 0), NNG_ETIMEDOUT); + NUTS_PASS(nng_msg_alloc(&m, 4)); + NUTS_PASS(nng_msg_append_u32(m, 1u)); + NUTS_PASS(nng_sendmsg(surv, m, 0)); + NUTS_FAIL(nng_recvmsg(resp, &m, 0), NNG_ETIMEDOUT); - TEST_NNG_PASS(nng_close(surv)); - TEST_NNG_PASS(nng_close(resp)); + NUTS_CLOSE(surv); + NUTS_CLOSE(resp); } static void @@ -332,29 +325,29 @@ test_xresp_ttl_option(void) size_t sz; const char *opt = NNG_OPT_MAXTTL; - TEST_NNG_PASS(nng_respondent0_open_raw(&resp)); + NUTS_PASS(nng_respondent0_open_raw(&resp)); - TEST_NNG_PASS(nng_setopt_int(resp, opt, 1)); - TEST_NNG_FAIL(nng_setopt_int(resp, opt, 0), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_int(resp, opt, -1), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_int(resp, opt, 16), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_int(resp, opt, 256), NNG_EINVAL); - TEST_NNG_PASS(nng_setopt_int(resp, opt, 3)); - TEST_NNG_PASS(nng_getopt_int(resp, opt, &v)); - TEST_CHECK(v == 3); + NUTS_PASS(nng_socket_set_int(resp, opt, 1)); + NUTS_FAIL(nng_socket_set_int(resp, opt, 0), NNG_EINVAL); + NUTS_FAIL(nng_socket_set_int(resp, opt, -1), NNG_EINVAL); + NUTS_FAIL(nng_socket_set_int(resp, opt, 16), NNG_EINVAL); + NUTS_FAIL(nng_socket_set_int(resp, opt, 256), NNG_EINVAL); + NUTS_PASS(nng_socket_set_int(resp, opt, 3)); + NUTS_PASS(nng_socket_get_int(resp, opt, &v)); + NUTS_TRUE(v == 3); v = 0; sz = sizeof(v); - TEST_NNG_PASS(nng_getopt(resp, opt, &v, &sz)); - TEST_CHECK(v == 3); - TEST_CHECK(sz == sizeof(v)); + NUTS_PASS(nng_socket_get(resp, opt, &v, &sz)); + NUTS_TRUE(v == 3); + NUTS_TRUE(sz == sizeof(v)); - TEST_CHECK(nng_setopt(resp, opt, "", 1) == NNG_EINVAL); + NUTS_FAIL(nng_socket_set(resp, opt, "", 1), NNG_EINVAL); sz = 1; - TEST_CHECK(nng_getopt(resp, opt, &v, &sz) == NNG_EINVAL); - TEST_CHECK(nng_setopt_bool(resp, opt, true) == NNG_EBADTYPE); - TEST_CHECK(nng_getopt_bool(resp, opt, &b) == NNG_EBADTYPE); + NUTS_FAIL(nng_socket_get(resp, opt, &v, &sz), NNG_EINVAL); + NUTS_FAIL(nng_socket_set_bool(resp, opt, true), NNG_EBADTYPE); + NUTS_FAIL(nng_socket_get_bool(resp, opt, &b), NNG_EBADTYPE); - TEST_CHECK(nng_close(resp) == 0); + NUTS_CLOSE(resp); } static void @@ -364,65 +357,65 @@ test_xresp_ttl_drop(void) nng_socket surv; nng_msg * m; - TEST_NNG_PASS(nng_respondent0_open_raw(&resp)); - TEST_NNG_PASS(nng_surveyor0_open_raw(&surv)); - TEST_NNG_PASS(nng_setopt_int(resp, NNG_OPT_MAXTTL, 3)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, 200)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_respondent0_open_raw(&resp)); + NUTS_PASS(nng_surveyor0_open_raw(&surv)); + NUTS_PASS(nng_socket_set_int(resp, NNG_OPT_MAXTTL, 3)); + NUTS_PASS(nng_socket_set_ms(resp, NNG_OPT_RECVTIMEO, 200)); + NUTS_PASS(nng_socket_set_ms(surv, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(testutil_marry(surv, resp)); + NUTS_MARRY(surv, resp); // Send messages. Note that xresp implicitly adds a hop on receive. - TEST_NNG_PASS(nng_msg_alloc(&m, 0)); - TEST_NNG_PASS(nng_msg_append_u32(m, 1u)); // 2 hops - TEST_NNG_PASS(nng_msg_append_u32(m, 0x80000001u)); - TEST_NNG_PASS(nng_msg_append(m, "PASS1", 6)); - TEST_NNG_PASS(nng_sendmsg(surv, m, 0)); - - TEST_NNG_PASS(nng_msg_alloc(&m, 0)); - TEST_NNG_PASS(nng_msg_append_u32(m, 1u)); // 4 hops -- discard! - TEST_NNG_PASS(nng_msg_append_u32(m, 2u)); - TEST_NNG_PASS(nng_msg_append_u32(m, 3u)); - TEST_NNG_PASS(nng_msg_append_u32(m, 0x80000002u)); - TEST_NNG_PASS(nng_msg_append(m, "FAIL2", 6)); - TEST_NNG_PASS(nng_sendmsg(surv, m, 0)); - - TEST_NNG_PASS(nng_msg_alloc(&m, 0)); - TEST_NNG_PASS(nng_msg_append_u32(m, 1u)); // 3 hops - passes - TEST_NNG_PASS(nng_msg_append_u32(m, 2u)); - TEST_NNG_PASS(nng_msg_append_u32(m, 0x80000003u)); - TEST_NNG_PASS(nng_msg_append(m, "PASS3", 6)); - TEST_NNG_PASS(nng_sendmsg(surv, m, 0)); - - TEST_NNG_PASS(nng_msg_alloc(&m, 0)); - TEST_NNG_PASS(nng_msg_append_u32(m, 1u)); // 4 hops -- discard! - TEST_NNG_PASS(nng_msg_append_u32(m, 2u)); - TEST_NNG_PASS(nng_msg_append_u32(m, 3u)); - TEST_NNG_PASS(nng_msg_append_u32(m, 0x80000003u)); - TEST_NNG_PASS(nng_msg_append(m, "FAIL4", 6)); - TEST_NNG_PASS(nng_sendmsg(surv, m, 0)); + NUTS_PASS(nng_msg_alloc(&m, 0)); + NUTS_PASS(nng_msg_append_u32(m, 1u)); // 2 hops + NUTS_PASS(nng_msg_append_u32(m, 0x80000001u)); + NUTS_PASS(nng_msg_append(m, "PASS1", 6)); + NUTS_PASS(nng_sendmsg(surv, m, 0)); + + NUTS_PASS(nng_msg_alloc(&m, 0)); + NUTS_PASS(nng_msg_append_u32(m, 1u)); // 4 hops -- discard! + NUTS_PASS(nng_msg_append_u32(m, 2u)); + NUTS_PASS(nng_msg_append_u32(m, 3u)); + NUTS_PASS(nng_msg_append_u32(m, 0x80000002u)); + NUTS_PASS(nng_msg_append(m, "FAIL2", 6)); + NUTS_PASS(nng_sendmsg(surv, m, 0)); + + NUTS_PASS(nng_msg_alloc(&m, 0)); + NUTS_PASS(nng_msg_append_u32(m, 1u)); // 3 hops - passes + NUTS_PASS(nng_msg_append_u32(m, 2u)); + NUTS_PASS(nng_msg_append_u32(m, 0x80000003u)); + NUTS_PASS(nng_msg_append(m, "PASS3", 6)); + NUTS_PASS(nng_sendmsg(surv, m, 0)); + + NUTS_PASS(nng_msg_alloc(&m, 0)); + NUTS_PASS(nng_msg_append_u32(m, 1u)); // 4 hops -- discard! + NUTS_PASS(nng_msg_append_u32(m, 2u)); + NUTS_PASS(nng_msg_append_u32(m, 3u)); + NUTS_PASS(nng_msg_append_u32(m, 0x80000003u)); + NUTS_PASS(nng_msg_append(m, "FAIL4", 6)); + NUTS_PASS(nng_sendmsg(surv, m, 0)); // So on receive we should see 80000001 and 80000003. - TEST_NNG_PASS(nng_recvmsg(resp, &m, 0)); - TEST_CHECK(nng_msg_header_len(m) == 12); - TEST_CHECK(nng_msg_len(m) == 6); - TEST_CHECK(strcmp(nng_msg_body(m), "PASS1") == 0); + NUTS_PASS(nng_recvmsg(resp, &m, 0)); + NUTS_TRUE(nng_msg_header_len(m) == 12); + NUTS_TRUE(nng_msg_len(m) == 6); + NUTS_MATCH(nng_msg_body(m), "PASS1"); nng_msg_free(m); - TEST_NNG_PASS(nng_recvmsg(resp, &m, 0)); - TEST_CHECK(nng_msg_header_len(m) == 16); // 3 hops + ID - TEST_CHECK(nng_msg_len(m) == 6); - TEST_CHECK(strcmp(nng_msg_body(m), "PASS3") == 0); + NUTS_PASS(nng_recvmsg(resp, &m, 0)); + NUTS_TRUE(nng_msg_header_len(m) == 16); // 3 hops + ID + NUTS_TRUE(nng_msg_len(m) == 6); + NUTS_MATCH(nng_msg_body(m), "PASS3"); nng_msg_free(m); - TEST_NNG_FAIL(nng_recvmsg(resp, &m, 0), NNG_ETIMEDOUT); + NUTS_FAIL(nng_recvmsg(resp, &m, 0), NNG_ETIMEDOUT); - TEST_NNG_PASS(nng_close(surv)); - TEST_NNG_PASS(nng_close(resp)); + NUTS_CLOSE(surv); + NUTS_CLOSE(resp); } -TEST_LIST = { +NUTS_TESTS = { { "xrespond identity", test_xresp_identity }, { "xrespond raw", test_xresp_raw }, { "xrespond no context", test_xresp_no_context }, diff --git a/src/protocol/survey0/xsurvey_test.c b/src/protocol/survey0/xsurvey_test.c index ca7a2dd6..f8e9d401 100644 --- a/src/protocol/survey0/xsurvey_test.c +++ b/src/protocol/survey0/xsurvey_test.c @@ -7,18 +7,7 @@ // found online at https://opensource.org/licenses/MIT. // -#include <string.h> - -#include <nng/nng.h> -#include <nng/protocol/survey0/respond.h> -#include <nng/protocol/survey0/survey.h> - -#include <acutest.h> -#include <testutil.h> - -#ifndef NNI_PROTO -#define NNI_PROTO(x, y) (((x) << 4u) | (y)) -#endif +#include <nuts.h> static void test_xsurveyor_identity(void) @@ -27,18 +16,18 @@ test_xsurveyor_identity(void) int p; char * n; - TEST_CHECK(nng_surveyor0_open_raw(&s) == 0); - TEST_CHECK(nng_getopt_int(s, NNG_OPT_PROTO, &p) == 0); - TEST_CHECK(p == NNI_PROTO(6u, 2u)); // 0x62 - TEST_CHECK(nng_getopt_int(s, NNG_OPT_PEER, &p) == 0); - TEST_CHECK(p == NNI_PROTO(6u, 3u)); // 0x63 - TEST_CHECK(nng_getopt_string(s, NNG_OPT_PROTONAME, &n) == 0); - TEST_CHECK(strcmp(n, "surveyor") == 0); + NUTS_PASS(nng_surveyor0_open_raw(&s)); + NUTS_PASS(nng_socket_get_int(s, NNG_OPT_PROTO, &p)); + NUTS_TRUE(p == NNG_SURVEYOR0_SELF); // 0x62 + NUTS_PASS(nng_socket_get_int(s, NNG_OPT_PEER, &p)); + NUTS_TRUE(p == NNG_SURVEYOR0_PEER); // 0x62 + NUTS_PASS(nng_socket_get_string(s, NNG_OPT_PROTONAME, &n)); + NUTS_MATCH(n, NNG_SURVEYOR0_SELF_NAME); nng_strfree(n); - TEST_CHECK(nng_getopt_string(s, NNG_OPT_PEERNAME, &n) == 0); - TEST_CHECK(strcmp(n, "respondent") == 0); + NUTS_PASS(nng_socket_get_string(s, NNG_OPT_PEERNAME, &n)); + NUTS_MATCH(n, NNG_SURVEYOR0_PEER_NAME); nng_strfree(n); - TEST_CHECK(nng_close(s) == 0); + NUTS_CLOSE(s); } static void @@ -47,10 +36,10 @@ test_xsurveyor_raw(void) nng_socket s; bool b; - TEST_NNG_PASS(nng_surveyor0_open_raw(&s)); - TEST_NNG_PASS(nng_getopt_bool(s, NNG_OPT_RAW, &b)); - TEST_CHECK(b); - TEST_NNG_PASS(nng_close(s)); + NUTS_PASS(nng_surveyor0_open_raw(&s)); + NUTS_PASS(nng_socket_get_bool(s, NNG_OPT_RAW, &b)); + NUTS_TRUE(b); + NUTS_CLOSE(s); } static void @@ -59,9 +48,9 @@ test_xsurvey_no_context(void) nng_socket s; nng_ctx ctx; - TEST_NNG_PASS(nng_surveyor0_open_raw(&s)); - TEST_NNG_FAIL(nng_ctx_open(&ctx, s), NNG_ENOTSUP); - TEST_NNG_PASS(nng_close(s)); + NUTS_PASS(nng_surveyor0_open_raw(&s)); + NUTS_FAIL(nng_ctx_open(&ctx, s), NNG_ENOTSUP); + NUTS_CLOSE(s); } static void @@ -71,21 +60,21 @@ test_xsurvey_poll_writeable(void) nng_socket surv; nng_socket resp; - TEST_NNG_PASS(nng_surveyor0_open_raw(&surv)); - TEST_NNG_PASS(nng_respondent0_open(&resp)); - TEST_NNG_PASS(nng_getopt_int(surv, NNG_OPT_SENDFD, &fd)); - TEST_CHECK(fd >= 0); + NUTS_PASS(nng_surveyor0_open_raw(&surv)); + NUTS_PASS(nng_respondent0_open(&resp)); + NUTS_PASS(nng_socket_get_int(surv, NNG_OPT_SENDFD, &fd)); + NUTS_TRUE(fd >= 0); // Survey is broadcast, so we can always write. - TEST_CHECK(testutil_pollfd(fd) == true); + NUTS_TRUE(nuts_poll_fd(fd)); - TEST_NNG_PASS(testutil_marry(surv, resp)); + NUTS_MARRY(surv, resp); // Now it's writable. - TEST_CHECK(testutil_pollfd(fd) == true); + NUTS_TRUE(nuts_poll_fd(fd)); - TEST_NNG_PASS(nng_close(surv)); - TEST_NNG_PASS(nng_close(resp)); + NUTS_CLOSE(surv); + NUTS_CLOSE(resp); } static void @@ -96,44 +85,44 @@ test_xsurvey_poll_readable(void) nng_socket resp; nng_msg * msg; - TEST_NNG_PASS(nng_surveyor0_open_raw(&surv)); - TEST_NNG_PASS(nng_respondent0_open(&resp)); - TEST_NNG_PASS(nng_getopt_int(surv, NNG_OPT_RECVFD, &fd)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_surveyor0_open_raw(&surv)); + NUTS_PASS(nng_respondent0_open(&resp)); + NUTS_PASS(nng_socket_get_int(surv, NNG_OPT_RECVFD, &fd)); + NUTS_PASS(nng_socket_set_ms(resp, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(surv, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(resp, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(surv, NNG_OPT_SENDTIMEO, 1000)); - TEST_CHECK(fd >= 0); + NUTS_TRUE(fd >= 0); // Not readable if not connected! - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_TRUE(nuts_poll_fd(fd) == false); // Even after connect (no message yet) - TEST_NNG_PASS(testutil_marry(surv, resp)); - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_MARRY(surv, resp); + NUTS_TRUE(nuts_poll_fd(fd) == false); // But once we send messages, it is. // We have to send a request, in order to send a reply. - TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); + NUTS_PASS(nng_msg_alloc(&msg, 0)); // Request ID - TEST_NNG_PASS(nng_msg_append_u32(msg, 0x80000000)); - TEST_NNG_PASS(nng_sendmsg(surv, msg, 0)); + NUTS_PASS(nng_msg_append_u32(msg, 0x80000000)); + NUTS_PASS(nng_sendmsg(surv, msg, 0)); - TEST_NNG_PASS(nng_recvmsg(resp, &msg, 0)); - TEST_NNG_PASS(nng_sendmsg(resp, msg, 0)); + NUTS_PASS(nng_recvmsg(resp, &msg, 0)); + NUTS_PASS(nng_sendmsg(resp, msg, 0)); - testutil_sleep(100); + NUTS_SLEEP(100); - TEST_CHECK(testutil_pollfd(fd) == true); + NUTS_TRUE(nuts_poll_fd(fd) ); // and receiving makes it no longer ready - TEST_NNG_PASS(nng_recvmsg(surv, &msg, 0)); + NUTS_PASS(nng_recvmsg(surv, &msg, 0)); nng_msg_free(msg); - TEST_CHECK(testutil_pollfd(fd) == false); + NUTS_TRUE(nuts_poll_fd(fd) == false); - TEST_NNG_PASS(nng_close(surv)); - TEST_NNG_PASS(nng_close(resp)); + NUTS_CLOSE(surv); + NUTS_CLOSE(resp); } static void @@ -142,28 +131,28 @@ test_xsurvey_validate_peer(void) nng_socket s1, s2; nng_stat * stats; nng_stat * reject; - char addr[64]; + char *addr; - testutil_scratch_addr("inproc", sizeof(addr), addr); + NUTS_ADDR(addr, "inproc"); - TEST_NNG_PASS(nng_surveyor0_open_raw(&s1)); - TEST_NNG_PASS(nng_surveyor0_open(&s2)); + NUTS_PASS(nng_surveyor0_open_raw(&s1)); + NUTS_PASS(nng_surveyor0_open(&s2)); - TEST_NNG_PASS(nng_listen(s1, addr, NULL, 0)); - TEST_NNG_PASS(nng_dial(s2, addr, NULL, NNG_FLAG_NONBLOCK)); + NUTS_PASS(nng_listen(s1, addr, NULL, 0)); + NUTS_PASS(nng_dial(s2, addr, NULL, NNG_FLAG_NONBLOCK)); - testutil_sleep(100); - TEST_NNG_PASS(nng_stats_get(&stats)); + NUTS_SLEEP(100); + NUTS_PASS(nng_stats_get(&stats)); - TEST_CHECK(stats != NULL); - TEST_CHECK((reject = nng_stat_find_socket(stats, s1)) != NULL); - TEST_CHECK((reject = nng_stat_find(reject, "reject")) != NULL); + NUTS_TRUE(stats != NULL); + NUTS_TRUE((reject = nng_stat_find_socket(stats, s1)) != NULL); + NUTS_TRUE((reject = nng_stat_find(reject, "reject")) != NULL); - TEST_CHECK(nng_stat_type(reject) == NNG_STAT_COUNTER); - TEST_CHECK(nng_stat_value(reject) > 0); + NUTS_TRUE(nng_stat_type(reject) == NNG_STAT_COUNTER); + NUTS_TRUE(nng_stat_value(reject) > 0); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(s2)); + NUTS_CLOSE(s1); + NUTS_CLOSE(s2); nng_stats_free(stats); } @@ -173,14 +162,14 @@ test_xsurvey_recv_aio_stopped(void) nng_socket surv; nng_aio * aio; - TEST_NNG_PASS(nng_surveyor0_open_raw(&surv)); - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_surveyor0_open_raw(&surv)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); nng_aio_stop(aio); nng_recv_aio(surv, aio); nng_aio_wait(aio); - TEST_NNG_FAIL(nng_aio_result(aio), NNG_ECANCELED); - TEST_NNG_PASS(nng_close(surv)); + NUTS_FAIL(nng_aio_result(aio), NNG_ECANCELED); + NUTS_CLOSE(surv); nng_aio_free(aio); } @@ -192,33 +181,33 @@ test_xsurvey_recv_garbage(void) nng_msg * m; uint32_t req_id; - TEST_NNG_PASS(nng_respondent0_open_raw(&resp)); - TEST_NNG_PASS(nng_surveyor0_open_raw(&surv)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_RECVTIMEO, 100)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_respondent0_open_raw(&resp)); + NUTS_PASS(nng_surveyor0_open_raw(&surv)); + NUTS_PASS(nng_socket_set_ms(surv, NNG_OPT_RECVTIMEO, 100)); + NUTS_PASS(nng_socket_set_ms(surv, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(resp, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(resp, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(testutil_marry(surv, resp)); + NUTS_MARRY(surv, resp); - TEST_NNG_PASS(nng_msg_alloc(&m, 0)); - TEST_NNG_PASS(nng_msg_append_u32(m, 0x80000000)); - TEST_NNG_PASS(nng_sendmsg(surv, m, 0)); + NUTS_PASS(nng_msg_alloc(&m, 0)); + NUTS_PASS(nng_msg_append_u32(m, 0x80000000)); + NUTS_PASS(nng_sendmsg(surv, m, 0)); - TEST_NNG_PASS(nng_recvmsg(resp, &m, 0)); + NUTS_PASS(nng_recvmsg(resp, &m, 0)); // The message will have a header that contains the 32-bit pipe ID, // followed by the 32-bit request ID. We will discard the request // ID before sending it out. - TEST_CHECK(nng_msg_header_len(m) == 8); - TEST_NNG_PASS(nng_msg_header_chop_u32(m, &req_id)); - TEST_CHECK(req_id == 0x80000000); + NUTS_TRUE(nng_msg_header_len(m) == 8); + NUTS_PASS(nng_msg_header_chop_u32(m, &req_id)); + NUTS_TRUE(req_id == 0x80000000); - TEST_NNG_PASS(nng_sendmsg(resp, m, 0)); - TEST_NNG_FAIL(nng_recvmsg(surv, &m, 0), NNG_ETIMEDOUT); + NUTS_PASS(nng_sendmsg(resp, m, 0)); + NUTS_FAIL(nng_recvmsg(surv, &m, 0), NNG_ETIMEDOUT); - TEST_NNG_PASS(nng_close(surv)); - TEST_NNG_PASS(nng_close(resp)); + NUTS_CLOSE(surv); + NUTS_CLOSE(resp); } static void @@ -230,37 +219,37 @@ test_xsurvey_recv_header(void) nng_pipe p; uint32_t id; - TEST_NNG_PASS(nng_respondent0_open_raw(&resp)); - TEST_NNG_PASS(nng_surveyor0_open_raw(&surv)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_respondent0_open_raw(&resp)); + NUTS_PASS(nng_surveyor0_open_raw(&surv)); + NUTS_PASS(nng_socket_set_ms(surv, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(surv, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(resp, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(resp, NNG_OPT_SENDTIMEO, 1000)); - TEST_NNG_PASS(testutil_marry_ex(surv, resp, NULL, NULL, &p)); + NUTS_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(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)); - - TEST_NNG_PASS(nng_sendmsg(resp, m, 0)); - - TEST_NNG_PASS(nng_recvmsg(surv, &m, 0)); - TEST_CHECK(nng_msg_header_len(m) == 12); - TEST_NNG_PASS(nng_msg_header_trim_u32(m, &id)); - TEST_CHECK(id == 0x2); - TEST_NNG_PASS(nng_msg_header_trim_u32(m, &id)); - TEST_CHECK(id == 0x1); - TEST_NNG_PASS(nng_msg_header_trim_u32(m, &id)); - TEST_CHECK(id == 0x80000123u); + NUTS_PASS(nng_msg_alloc(&m, 0)); + NUTS_PASS(nng_msg_header_append_u32(m, nng_pipe_id(p))); + NUTS_PASS(nng_msg_header_append_u32(m, 0x2)); + NUTS_PASS(nng_msg_header_append_u32(m, 0x1)); + NUTS_PASS(nng_msg_header_append_u32(m, 0x80000123u)); + + NUTS_PASS(nng_sendmsg(resp, m, 0)); + + NUTS_PASS(nng_recvmsg(surv, &m, 0)); + NUTS_TRUE(nng_msg_header_len(m) == 12); + NUTS_PASS(nng_msg_header_trim_u32(m, &id)); + NUTS_TRUE(id == 0x2); + NUTS_PASS(nng_msg_header_trim_u32(m, &id)); + NUTS_TRUE(id == 0x1); + NUTS_PASS(nng_msg_header_trim_u32(m, &id)); + NUTS_TRUE(id == 0x80000123u); nng_msg_free(m); - TEST_NNG_PASS(nng_close(surv)); - TEST_NNG_PASS(nng_close(resp)); + NUTS_CLOSE(surv); + NUTS_CLOSE(resp); } static void @@ -272,26 +261,26 @@ test_xsurvey_close_during_recv(void) nng_pipe p1; nng_pipe p2; - TEST_NNG_PASS(nng_respondent0_open_raw(&resp)); - TEST_NNG_PASS(nng_surveyor0_open_raw(&surv)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_SENDTIMEO, 100)); - TEST_NNG_PASS(nng_setopt_int(surv, NNG_OPT_RECVBUF, 1)); - TEST_NNG_PASS(nng_setopt_int(resp, NNG_OPT_SENDBUF, 20)); + NUTS_PASS(nng_respondent0_open_raw(&resp)); + NUTS_PASS(nng_surveyor0_open_raw(&surv)); + NUTS_PASS(nng_socket_set_ms(resp, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(surv, NNG_OPT_SENDTIMEO, 100)); + NUTS_PASS(nng_socket_set_int(surv, NNG_OPT_RECVBUF, 1)); + NUTS_PASS(nng_socket_set_int(resp, NNG_OPT_SENDBUF, 20)); - 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); + NUTS_MARRY_EX(surv, resp, NULL, &p1, &p2); + NUTS_TRUE(nng_pipe_id(p1) > 0); + NUTS_TRUE(nng_pipe_id(p2) > 0); for (unsigned i = 0; i < 20; i++) { - TEST_NNG_PASS(nng_msg_alloc(&m, 4)); - TEST_NNG_PASS(nng_msg_header_append_u32(m, nng_pipe_id(p2))); - TEST_NNG_PASS(nng_msg_header_append_u32(m, i | 0x80000000u)); - testutil_sleep(10); - TEST_NNG_PASS(nng_sendmsg(resp, m, 0)); + NUTS_PASS(nng_msg_alloc(&m, 4)); + NUTS_PASS(nng_msg_header_append_u32(m, nng_pipe_id(p2))); + NUTS_PASS(nng_msg_header_append_u32(m, i | 0x80000000u)); + NUTS_SLEEP(10); + NUTS_PASS(nng_sendmsg(resp, m, 0)); } - TEST_NNG_PASS(nng_close(surv)); - TEST_NNG_PASS(nng_close(resp)); + NUTS_CLOSE(surv); + NUTS_CLOSE(resp); } static void @@ -303,27 +292,27 @@ test_xsurvey_close_pipe_during_send(void) nng_pipe p1; nng_pipe p2; - TEST_NNG_PASS(nng_respondent0_open_raw(&resp)); - TEST_NNG_PASS(nng_surveyor0_open_raw(&surv)); - TEST_NNG_PASS(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_SENDTIMEO, 100)); - TEST_NNG_PASS(nng_setopt_int(resp, NNG_OPT_RECVBUF, 5)); - TEST_NNG_PASS(nng_setopt_int(surv, NNG_OPT_SENDBUF, 20)); + NUTS_PASS(nng_respondent0_open_raw(&resp)); + NUTS_PASS(nng_surveyor0_open_raw(&surv)); + NUTS_PASS(nng_socket_set_ms(resp, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(surv, NNG_OPT_SENDTIMEO, 100)); + NUTS_PASS(nng_socket_set_int(resp, NNG_OPT_RECVBUF, 5)); + NUTS_PASS(nng_socket_set_int(surv, NNG_OPT_SENDBUF, 20)); - 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); + NUTS_MARRY_EX(surv, resp, NULL, &p1, &p2); + NUTS_TRUE(nng_pipe_id(p1) > 0); + NUTS_TRUE(nng_pipe_id(p2) > 0); for (unsigned i = 0; i < 20; i++) { - TEST_NNG_PASS(nng_msg_alloc(&m, 4)); - TEST_NNG_PASS(nng_msg_header_append_u32(m, i | 0x80000000u)); - testutil_sleep(10); - TEST_NNG_PASS(nng_sendmsg(surv, m, 0)); + NUTS_PASS(nng_msg_alloc(&m, 4)); + NUTS_PASS(nng_msg_header_append_u32(m, i | 0x80000000u)); + NUTS_SLEEP(10); + NUTS_PASS(nng_sendmsg(surv, m, 0)); } - TEST_NNG_PASS(nng_pipe_close(p1)); - TEST_NNG_PASS(nng_close(surv)); - TEST_NNG_PASS(nng_close(resp)); + NUTS_PASS(nng_pipe_close(p1)); + NUTS_CLOSE(surv); + NUTS_CLOSE(resp); } static void @@ -335,29 +324,29 @@ test_xsurvey_ttl_option(void) size_t sz; const char *opt = NNG_OPT_MAXTTL; - TEST_NNG_PASS(nng_surveyor0_open_raw(&s)); + NUTS_PASS(nng_surveyor0_open_raw(&s)); - TEST_NNG_PASS(nng_setopt_int(s, opt, 1)); - TEST_NNG_FAIL(nng_setopt_int(s, opt, 0), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_int(s, opt, -1), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_int(s, opt, 16), NNG_EINVAL); - TEST_NNG_FAIL(nng_setopt_int(s, opt, 256), NNG_EINVAL); - TEST_NNG_PASS(nng_setopt_int(s, opt, 3)); - TEST_NNG_PASS(nng_getopt_int(s, opt, &v)); - TEST_CHECK(v == 3); + NUTS_PASS(nng_socket_set_int(s, opt, 1)); + NUTS_FAIL(nng_socket_set_int(s, opt, 0), NNG_EINVAL); + NUTS_FAIL(nng_socket_set_int(s, opt, -1), NNG_EINVAL); + NUTS_FAIL(nng_socket_set_int(s, opt, 16), NNG_EINVAL); + NUTS_FAIL(nng_socket_set_int(s, opt, 256), NNG_EINVAL); + NUTS_PASS(nng_socket_set_int(s, opt, 3)); + NUTS_PASS(nng_socket_get_int(s, opt, &v)); + NUTS_TRUE(v == 3); v = 0; sz = sizeof(v); - TEST_NNG_PASS(nng_getopt(s, opt, &v, &sz)); - TEST_CHECK(v == 3); - TEST_CHECK(sz == sizeof(v)); + NUTS_PASS(nng_socket_get(s, opt, &v, &sz)); + NUTS_TRUE(v == 3); + NUTS_TRUE(sz == sizeof(v)); - TEST_CHECK(nng_setopt(s, opt, "", 1) == NNG_EINVAL); + NUTS_FAIL(nng_socket_set(s, opt, "", 1) , NNG_EINVAL); sz = 1; - TEST_CHECK(nng_getopt(s, opt, &v, &sz) == NNG_EINVAL); - TEST_CHECK(nng_setopt_bool(s, opt, true) == NNG_EBADTYPE); - TEST_CHECK(nng_getopt_bool(s, opt, &b) == NNG_EBADTYPE); + NUTS_FAIL(nng_socket_get(s, opt, &v, &sz) , NNG_EINVAL); + NUTS_FAIL(nng_socket_set_bool(s, opt, true) , NNG_EBADTYPE); + NUTS_FAIL(nng_socket_get_bool(s, opt, &b) , NNG_EBADTYPE); - TEST_CHECK(nng_close(s) == 0); + NUTS_CLOSE(s); } static void @@ -368,27 +357,27 @@ test_xsurvey_broadcast(void) nng_socket surv; nng_msg * m; - TEST_NNG_PASS(nng_respondent0_open(&resp1)); - TEST_NNG_PASS(nng_respondent0_open(&resp2)); - TEST_NNG_PASS(nng_surveyor0_open_raw(&surv)); - TEST_NNG_PASS(nng_setopt_ms(resp1, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(resp2, NNG_OPT_RECVTIMEO, 1000)); - TEST_NNG_PASS(nng_setopt_ms(surv, NNG_OPT_SENDTIMEO, 100)); + NUTS_PASS(nng_respondent0_open(&resp1)); + NUTS_PASS(nng_respondent0_open(&resp2)); + NUTS_PASS(nng_surveyor0_open_raw(&surv)); + NUTS_PASS(nng_socket_set_ms(resp1, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(resp2, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(surv, NNG_OPT_SENDTIMEO, 100)); - TEST_NNG_PASS(testutil_marry(surv, resp1)); - TEST_NNG_PASS(testutil_marry(surv, resp2)); + NUTS_MARRY(surv, resp1); + NUTS_MARRY(surv, resp2); - TEST_NNG_PASS(nng_msg_alloc(&m, 0)); - TEST_NNG_PASS(nng_msg_header_append_u32(m, 0x80000002u)); - TEST_NNG_PASS(nng_msg_append(m, "hello", 6)); + NUTS_PASS(nng_msg_alloc(&m, 0)); + NUTS_PASS(nng_msg_header_append_u32(m, 0x80000002u)); + NUTS_PASS(nng_msg_append(m, "hello", 6)); - TEST_NNG_PASS(nng_sendmsg(surv, m, 0)); - TEST_NNG_RECV_STR(resp1, "hello"); - TEST_NNG_RECV_STR(resp2, "hello"); + NUTS_PASS(nng_sendmsg(surv, m, 0)); + NUTS_RECV(resp1, "hello"); + NUTS_RECV(resp2, "hello"); - TEST_NNG_PASS(nng_close(surv)); - TEST_NNG_PASS(nng_close(resp1)); - TEST_NNG_PASS(nng_close(resp2)); + NUTS_CLOSE(surv); + NUTS_CLOSE(resp1); + NUTS_CLOSE(resp2); } TEST_LIST = { diff --git a/src/supplemental/tls/tls_test.c b/src/supplemental/tls/tls_test.c index 4857c4c7..244f68ca 100644 --- a/src/supplemental/tls/tls_test.c +++ b/src/supplemental/tls/tls_test.c @@ -7,48 +7,37 @@ // found online at https://opensource.org/licenses/MIT. // -#include <stdbool.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#include <nng/nng.h> -#include <nng/supplemental/tls/tls.h> -#include <testutil.h> - -#include <acutest.h> +#include <nuts.h> void test_tls_config_version(void) { nng_tls_config *cfg; - TEST_NNG_PASS(nng_tls_config_alloc(&cfg, NNG_TLS_MODE_SERVER)); + NUTS_PASS(nng_tls_config_alloc(&cfg, NNG_TLS_MODE_SERVER)); // Verify that min ver < max ver - TEST_NNG_FAIL(nng_tls_config_version(cfg, NNG_TLS_1_3, NNG_TLS_1_0), + NUTS_FAIL(nng_tls_config_version(cfg, NNG_TLS_1_3, NNG_TLS_1_0), NNG_ENOTSUP); // Verify that we cannot configure SSL 3.0 or older. - TEST_NNG_FAIL( - nng_tls_config_version(cfg, NNG_TLS_1_0 - 1, NNG_TLS_1_0), + NUTS_FAIL(nng_tls_config_version(cfg, NNG_TLS_1_0 - 1, NNG_TLS_1_0), NNG_ENOTSUP); // Verify that we cannot configure TLS > 1.3. - TEST_NNG_FAIL( - nng_tls_config_version(cfg, NNG_TLS_1_0, NNG_TLS_1_3 + 1), + NUTS_FAIL(nng_tls_config_version(cfg, NNG_TLS_1_0, NNG_TLS_1_3 + 1), NNG_ENOTSUP); // Verify that we *can* configure some various ranges. - TEST_NNG_PASS(nng_tls_config_version(cfg, NNG_TLS_1_0, NNG_TLS_1_0)); - TEST_NNG_PASS(nng_tls_config_version(cfg, NNG_TLS_1_0, NNG_TLS_1_1)); - TEST_NNG_PASS(nng_tls_config_version(cfg, NNG_TLS_1_0, NNG_TLS_1_2)); - TEST_NNG_PASS(nng_tls_config_version(cfg, NNG_TLS_1_0, NNG_TLS_1_3)); - TEST_NNG_PASS(nng_tls_config_version(cfg, NNG_TLS_1_1, NNG_TLS_1_1)); - TEST_NNG_PASS(nng_tls_config_version(cfg, NNG_TLS_1_1, NNG_TLS_1_2)); - TEST_NNG_PASS(nng_tls_config_version(cfg, NNG_TLS_1_1, NNG_TLS_1_3)); - TEST_NNG_PASS(nng_tls_config_version(cfg, NNG_TLS_1_2, NNG_TLS_1_2)); - TEST_NNG_PASS(nng_tls_config_version(cfg, NNG_TLS_1_2, NNG_TLS_1_3)); + NUTS_PASS(nng_tls_config_version(cfg, NNG_TLS_1_0, NNG_TLS_1_0)); + NUTS_PASS(nng_tls_config_version(cfg, NNG_TLS_1_0, NNG_TLS_1_1)); + NUTS_PASS(nng_tls_config_version(cfg, NNG_TLS_1_0, NNG_TLS_1_2)); + NUTS_PASS(nng_tls_config_version(cfg, NNG_TLS_1_0, NNG_TLS_1_3)); + NUTS_PASS(nng_tls_config_version(cfg, NNG_TLS_1_1, NNG_TLS_1_1)); + NUTS_PASS(nng_tls_config_version(cfg, NNG_TLS_1_1, NNG_TLS_1_2)); + NUTS_PASS(nng_tls_config_version(cfg, NNG_TLS_1_1, NNG_TLS_1_3)); + NUTS_PASS(nng_tls_config_version(cfg, NNG_TLS_1_2, NNG_TLS_1_2)); + NUTS_PASS(nng_tls_config_version(cfg, NNG_TLS_1_2, NNG_TLS_1_3)); nng_tls_config_free(cfg); } @@ -59,15 +48,14 @@ test_tls_conn_refused(void) nng_stream_dialer *dialer; nng_aio * aio; - TEST_NNG_PASS(nng_aio_alloc(&aio, NULL, NULL)); + NUTS_PASS(nng_aio_alloc(&aio, NULL, NULL)); nng_aio_set_timeout(aio, 5000); // 5 sec // port 8 is generally not used for anything. - TEST_NNG_PASS( - nng_stream_dialer_alloc(&dialer, "tls+tcp://127.0.0.1:8")); + NUTS_PASS(nng_stream_dialer_alloc(&dialer, "tls+tcp://127.0.0.1:8")); nng_stream_dialer_dial(dialer, aio); nng_aio_wait(aio); - TEST_NNG_FAIL(nng_aio_result(aio), NNG_ECONNREFUSED); + NUTS_FAIL(nng_aio_result(aio), NNG_ECONNREFUSED); nng_aio_free(aio); nng_stream_dialer_free(dialer); @@ -89,57 +77,59 @@ test_tls_large_message(void) size_t size = 450001; void * t1; void * t2; + int port; // allocate messages - TEST_CHECK((buf1 = nng_alloc(size)) != NULL); - TEST_CHECK((buf2 = nng_alloc(size)) != NULL); + NUTS_ASSERT((buf1 = nng_alloc(size)) != NULL); + NUTS_ASSERT((buf2 = nng_alloc(size)) != NULL); for (size_t i = 0; i < size; i++) { buf1[i] = rand() & 0xff; } - TEST_NNG_PASS(nng_aio_alloc(&aio1, NULL, NULL)); - TEST_NNG_PASS(nng_aio_alloc(&aio2, NULL, NULL)); + NUTS_PASS(nng_aio_alloc(&aio1, NULL, NULL)); + NUTS_PASS(nng_aio_alloc(&aio2, NULL, NULL)); nng_aio_set_timeout(aio1, 5000); nng_aio_set_timeout(aio2, 5000); - testutil_scratch_addr("tls+tcp", sizeof(addr), addr); - - TEST_NNG_PASS(nng_stream_dialer_alloc(&d, addr)); - TEST_NNG_PASS(nng_stream_listener_alloc(&l, addr)); - - // set up TLS parameters - - TEST_NNG_PASS(nng_tls_config_alloc(&c1, NNG_TLS_MODE_SERVER)); - TEST_NNG_PASS(nng_tls_config_own_cert( - c1, testutil_server_crt, testutil_server_key, NULL)); - - TEST_NNG_PASS(nng_tls_config_alloc(&c2, NNG_TLS_MODE_CLIENT)); - TEST_NNG_PASS(nng_tls_config_ca_chain(c2, testutil_server_crt, NULL)); - TEST_NNG_PASS(nng_tls_config_server_name(c2, "localhost")); - - TEST_NNG_PASS(nng_stream_listener_set_ptr(l, NNG_OPT_TLS_CONFIG, c1)); - TEST_NNG_PASS(nng_stream_dialer_set_ptr(d, NNG_OPT_TLS_CONFIG, c2)); + // Allocate the listener first. We use a wild-card port. + NUTS_PASS(nng_stream_listener_alloc(&l, "tls+tcp://127.0.0.1:0")); + NUTS_PASS(nng_tls_config_alloc(&c1, NNG_TLS_MODE_SERVER)); + NUTS_PASS(nng_tls_config_own_cert( + c1, nuts_server_crt, nuts_server_key, NULL)); + NUTS_PASS(nng_stream_listener_set_ptr(l, NNG_OPT_TLS_CONFIG, c1)); + NUTS_PASS(nng_stream_listener_listen(l)); + NUTS_PASS( + nng_stream_listener_get_int(l, NNG_OPT_TCP_BOUND_PORT, &port)); + NUTS_TRUE(port > 0); + NUTS_TRUE(port < 65536); + + snprintf(addr, sizeof (addr), "tls+tcp://127.0.0.1:%d", port); + NUTS_PASS(nng_stream_dialer_alloc(&d, addr)); + NUTS_PASS(nng_tls_config_alloc(&c2, NNG_TLS_MODE_CLIENT)); + NUTS_PASS(nng_tls_config_ca_chain(c2, nuts_server_crt, NULL)); + NUTS_PASS(nng_tls_config_server_name(c2, "localhost")); + + NUTS_PASS(nng_stream_dialer_set_ptr(d, NNG_OPT_TLS_CONFIG, c2)); - TEST_NNG_PASS(nng_stream_listener_listen(l)); nng_stream_listener_accept(l, aio1); nng_stream_dialer_dial(d, aio2); nng_aio_wait(aio1); nng_aio_wait(aio2); - TEST_NNG_PASS(nng_aio_result(aio1)); - TEST_NNG_PASS(nng_aio_result(aio2)); + NUTS_PASS(nng_aio_result(aio1)); + NUTS_PASS(nng_aio_result(aio2)); - TEST_CHECK((s1 = nng_aio_get_output(aio1, 0)) != NULL); - TEST_CHECK((s2 = nng_aio_get_output(aio2, 0)) != NULL); + NUTS_TRUE((s1 = nng_aio_get_output(aio1, 0)) != NULL); + NUTS_TRUE((s2 = nng_aio_get_output(aio2, 0)) != NULL); - t1 = testutil_stream_send_start(s1, buf1, size); - t2 = testutil_stream_recv_start(s2, buf2, size); + t1 = nuts_stream_send_start(s1, buf1, size); + t2 = nuts_stream_recv_start(s2, buf2, size); - TEST_NNG_PASS(testutil_stream_send_wait(t1)); - TEST_NNG_PASS(testutil_stream_recv_wait(t2)); - TEST_CHECK(memcmp(buf1, buf2, size) == 0); + NUTS_PASS(nuts_stream_wait(t1)); + NUTS_PASS(nuts_stream_wait(t2)); + NUTS_TRUE(memcmp(buf1, buf2, size) == 0); nng_free(buf1, size); nng_free(buf2, size); diff --git a/src/supplemental/websocket/websocket_test.c b/src/supplemental/websocket/websocket_test.c index 9a298142..9ea68017 100644 --- a/src/supplemental/websocket/websocket_test.c +++ b/src/supplemental/websocket/websocket_test.c @@ -12,10 +12,7 @@ #include <nng/nng.h> #include <nng/supplemental/util/platform.h> -#include "supplemental/sha1/sha1.h" - -#include <acutest.h> -#include <testutil.h> +#include <nuts.h> void test_websocket_wildcard(void) @@ -36,27 +33,27 @@ test_websocket_wildcard(void) char buf2[8]; char uri[64]; - TEST_NNG_PASS(nng_stream_listener_alloc(&l, "ws://127.0.0.1:0/test")); + NUTS_PASS(nng_stream_listener_alloc(&l, "ws://127.0.0.1:0/test")); - TEST_NNG_PASS(nng_stream_listener_listen(l)); + NUTS_PASS(nng_stream_listener_listen(l)); // Let's get the address we're going to use to dial -- also check // that it is correct. sz = sizeof(sa1); - TEST_NNG_PASS(nng_stream_listener_get(l, NNG_OPT_LOCADDR, &sa1, &sz)); - TEST_CHECK(sz == sizeof(sa1)); - TEST_CHECK(sa1.s_in.sa_port != 0); - TEST_CHECK(sa1.s_family == NNG_AF_INET); - TEST_CHECK(testutil_htonl(sa1.s_in.sa_addr) == 0x7F000001u); + NUTS_PASS(nng_stream_listener_get(l, NNG_OPT_LOCADDR, &sa1, &sz)); + NUTS_TRUE(sz == sizeof(sa1)); + NUTS_TRUE(sa1.s_in.sa_port != 0); + NUTS_TRUE(sa1.s_family == NNG_AF_INET); + NUTS_TRUE(nuts_be32(sa1.s_in.sa_addr) == 0x7F000001u); (void) snprintf(uri, sizeof(uri), "ws://127.0.0.1:%d/test", - testutil_htons(sa1.s_in.sa_port)); + nuts_be16(sa1.s_in.sa_port)); - TEST_NNG_PASS(nng_stream_dialer_alloc(&d, uri)); - TEST_NNG_PASS(nng_aio_alloc(&daio, NULL, NULL)); - TEST_NNG_PASS(nng_aio_alloc(&laio, NULL, NULL)); - TEST_NNG_PASS(nng_aio_alloc(&aio1, NULL, NULL)); - TEST_NNG_PASS(nng_aio_alloc(&aio2, NULL, NULL)); + NUTS_PASS(nng_stream_dialer_alloc(&d, uri)); + NUTS_PASS(nng_aio_alloc(&daio, NULL, NULL)); + NUTS_PASS(nng_aio_alloc(&laio, NULL, NULL)); + NUTS_PASS(nng_aio_alloc(&aio1, NULL, NULL)); + NUTS_PASS(nng_aio_alloc(&aio2, NULL, NULL)); nng_aio_set_timeout(daio, 5000); // 5 seconds nng_aio_set_timeout(laio, 5000); nng_aio_set_timeout(aio1, 5000); @@ -68,29 +65,24 @@ test_websocket_wildcard(void) nng_aio_wait(laio); nng_aio_wait(daio); - TEST_NNG_PASS(nng_aio_result(laio)); - TEST_NNG_PASS(nng_aio_result(daio)); + NUTS_PASS(nng_aio_result(laio)); + NUTS_PASS(nng_aio_result(daio)); c1 = nng_aio_get_output(laio, 0); c2 = nng_aio_get_output(daio, 0); - TEST_CHECK(c1 != NULL); - TEST_CHECK(c2 != NULL); + NUTS_TRUE(c1 != NULL); + NUTS_TRUE(c2 != NULL); // Let's compare the peer addresses - TEST_NNG_PASS(nng_stream_get_addr(c2, NNG_OPT_REMADDR, &sa2)); - TEST_CHECK(sa1.s_family == sa2.s_family); - TEST_CHECK(sa1.s_in.sa_addr == sa2.s_in.sa_addr); - TEST_CHECK(sa1.s_in.sa_port == sa2.s_in.sa_port); - - TEST_NNG_PASS(nng_stream_get_addr(c1, NNG_OPT_REMADDR, &sa1)); - TEST_NNG_PASS(nng_stream_get_addr(c2, NNG_OPT_LOCADDR, &sa2)); - TEST_CHECK_(sa1.s_family == sa2.s_family, "families match %x == %x", - sa1.s_family, sa2.s_family); - TEST_CHECK_(sa1.s_in.sa_addr == sa2.s_in.sa_addr, - "addresses match %x == %x", testutil_htonl(sa1.s_in.sa_addr), - testutil_htonl(sa2.s_in.sa_addr)); - TEST_CHECK_(sa1.s_in.sa_port == sa2.s_in.sa_port, - "ports match %u == %u", testutil_htons(sa1.s_in.sa_port), - testutil_htons(sa2.s_in.sa_port)); + NUTS_PASS(nng_stream_get_addr(c2, NNG_OPT_REMADDR, &sa2)); + NUTS_TRUE(sa1.s_family == sa2.s_family); + NUTS_TRUE(sa1.s_in.sa_addr == sa2.s_in.sa_addr); + NUTS_TRUE(sa1.s_in.sa_port == sa2.s_in.sa_port); + + NUTS_PASS(nng_stream_get_addr(c1, NNG_OPT_REMADDR, &sa1)); + NUTS_PASS(nng_stream_get_addr(c2, NNG_OPT_LOCADDR, &sa2)); + NUTS_TRUE(sa1.s_family == sa2.s_family); + NUTS_TRUE(sa1.s_in.sa_addr == sa2.s_in.sa_addr); + NUTS_TRUE(sa1.s_in.sa_port == sa2.s_in.sa_port); // This relies on send completing for for just 5 bytes, and on // recv doing the same. Technically this isn't/ guaranteed, but @@ -100,23 +92,23 @@ test_websocket_wildcard(void) memset(buf2, 0, 5); iov.iov_buf = buf1; iov.iov_len = 5; - TEST_NNG_PASS(nng_aio_set_iov(aio1, 1, &iov)); + NUTS_PASS(nng_aio_set_iov(aio1, 1, &iov)); iov.iov_buf = buf2; iov.iov_len = 5; - TEST_NNG_PASS(nng_aio_set_iov(aio2, 1, &iov)); + NUTS_PASS(nng_aio_set_iov(aio2, 1, &iov)); nng_stream_send(c1, aio1); nng_stream_recv(c2, aio2); nng_aio_wait(aio1); nng_aio_wait(aio2); - TEST_NNG_PASS(nng_aio_result(aio1)); - TEST_CHECK(nng_aio_count(aio1) == 5); + NUTS_PASS(nng_aio_result(aio1)); + NUTS_TRUE(nng_aio_count(aio1) == 5); - TEST_NNG_PASS(nng_aio_result(aio2)); - TEST_CHECK(nng_aio_count(aio2) == 5); - TEST_CHECK(memcmp(buf1, buf2, 5) == 0); + NUTS_PASS(nng_aio_result(aio2)); + NUTS_TRUE(nng_aio_count(aio2) == 5); + NUTS_TRUE(memcmp(buf1, buf2, 5) == 0); nng_stream_close(c1); nng_stream_free(c1); @@ -145,18 +137,18 @@ test_websocket_conn_props(void) char uri[64]; bool on; char * str; - uint16_t port = testutil_next_port(); + uint16_t port = nuts_next_port(); (void) snprintf(uri, sizeof(uri), "ws://127.0.0.1:%d/test", port); - TEST_NNG_PASS(nng_aio_alloc(&daio, NULL, NULL)); - TEST_NNG_PASS(nng_aio_alloc(&laio, NULL, NULL)); + NUTS_PASS(nng_aio_alloc(&daio, NULL, NULL)); + NUTS_PASS(nng_aio_alloc(&laio, NULL, NULL)); nng_aio_set_timeout(daio, 5000); // 5 seconds nng_aio_set_timeout(laio, 5000); - TEST_NNG_PASS(nng_stream_listener_alloc(&l, uri)); - TEST_NNG_PASS(nng_stream_listener_listen(l)); - TEST_NNG_PASS(nng_stream_dialer_alloc(&d, uri)); + NUTS_PASS(nng_stream_listener_alloc(&l, uri)); + NUTS_PASS(nng_stream_listener_listen(l)); + NUTS_PASS(nng_stream_dialer_alloc(&d, uri)); nng_stream_dialer_dial(d, daio); nng_stream_listener_accept(l, laio); @@ -164,64 +156,54 @@ test_websocket_conn_props(void) nng_aio_wait(laio); nng_aio_wait(daio); - TEST_NNG_PASS(nng_aio_result(laio)); - TEST_NNG_PASS(nng_aio_result(daio)); + NUTS_PASS(nng_aio_result(laio)); + NUTS_PASS(nng_aio_result(daio)); c1 = nng_aio_get_output(laio, 0); c2 = nng_aio_get_output(daio, 0); - TEST_CHECK(c1 != NULL); - TEST_CHECK(c2 != NULL); + NUTS_TRUE(c1 != NULL); + NUTS_TRUE(c2 != NULL); // Let's compare the peer addresses - TEST_NNG_PASS(nng_stream_get_addr(c1, NNG_OPT_LOCADDR, &sa1)); - TEST_NNG_PASS(nng_stream_get_addr(c2, NNG_OPT_REMADDR, &sa2)); - TEST_CHECK_(sa1.s_family == sa2.s_family, "families match %x == %x", - sa1.s_family, sa2.s_family); - TEST_CHECK_(sa1.s_in.sa_addr == sa2.s_in.sa_addr, - "addresses match %x == %x", testutil_htonl(sa1.s_in.sa_addr), - testutil_htonl(sa2.s_in.sa_addr)); - TEST_CHECK_(sa1.s_in.sa_port == sa2.s_in.sa_port, - "ports match %u == %u", testutil_htons(sa1.s_in.sa_port), - testutil_htons(sa2.s_in.sa_port)); - - TEST_NNG_PASS(nng_stream_get_addr(c1, NNG_OPT_REMADDR, &sa1)); - TEST_NNG_PASS(nng_stream_get_addr(c2, NNG_OPT_LOCADDR, &sa2)); - TEST_CHECK_(sa1.s_family == sa2.s_family, "families match %x == %x", - sa1.s_family, sa2.s_family); - TEST_CHECK_(sa1.s_in.sa_addr == sa2.s_in.sa_addr, - "addresses match %x == %x", testutil_htonl(sa1.s_in.sa_addr), - testutil_htonl(sa2.s_in.sa_addr)); - TEST_CHECK_(sa1.s_in.sa_port == sa2.s_in.sa_port, - "ports match %u == %u", testutil_htons(sa1.s_in.sa_port), - testutil_htons(sa2.s_in.sa_port)); + NUTS_PASS(nng_stream_get_addr(c1, NNG_OPT_LOCADDR, &sa1)); + NUTS_PASS(nng_stream_get_addr(c2, NNG_OPT_REMADDR, &sa2)); + NUTS_TRUE(sa1.s_family == sa2.s_family); + NUTS_TRUE(sa1.s_in.sa_addr == sa2.s_in.sa_addr); + NUTS_TRUE(sa1.s_in.sa_port == sa2.s_in.sa_port); + + NUTS_PASS(nng_stream_get_addr(c1, NNG_OPT_REMADDR, &sa1)); + NUTS_PASS(nng_stream_get_addr(c2, NNG_OPT_LOCADDR, &sa2)); + NUTS_TRUE(sa1.s_family == sa2.s_family); + NUTS_TRUE(sa1.s_in.sa_addr == sa2.s_in.sa_addr); + NUTS_TRUE(sa1.s_in.sa_port == sa2.s_in.sa_port); on = true; - TEST_NNG_PASS(nng_stream_set_bool(c1, NNG_OPT_TCP_NODELAY, on)); - TEST_NNG_PASS(nng_stream_set_bool(c2, NNG_OPT_TCP_NODELAY, on)); + NUTS_PASS(nng_stream_set_bool(c1, NNG_OPT_TCP_NODELAY, on)); + NUTS_PASS(nng_stream_set_bool(c2, NNG_OPT_TCP_NODELAY, on)); - TEST_NNG_PASS(nng_stream_set_bool(c1, NNG_OPT_TCP_KEEPALIVE, on)); - TEST_NNG_PASS(nng_stream_set_bool(c2, NNG_OPT_TCP_KEEPALIVE, on)); - TEST_NNG_FAIL(nng_stream_set_string(c1, NNG_OPT_TCP_KEEPALIVE, "nope"), + NUTS_PASS(nng_stream_set_bool(c1, NNG_OPT_TCP_KEEPALIVE, on)); + NUTS_PASS(nng_stream_set_bool(c2, NNG_OPT_TCP_KEEPALIVE, on)); + NUTS_FAIL(nng_stream_set_string(c1, NNG_OPT_TCP_KEEPALIVE, "nope"), NNG_EBADTYPE); on = false; sz = sizeof(on); - TEST_NNG_PASS(nng_stream_get(c1, NNG_OPT_TCP_NODELAY, &on, &sz)); - TEST_CHECK(sz == sizeof(on)); - TEST_CHECK(on == true); + NUTS_PASS(nng_stream_get(c1, NNG_OPT_TCP_NODELAY, &on, &sz)); + NUTS_TRUE(sz == sizeof(on)); + NUTS_TRUE(on == true); on = false; sz = sizeof(on); - TEST_NNG_PASS(nng_stream_get(c2, NNG_OPT_TCP_KEEPALIVE, &on, &sz)); - TEST_CHECK(sz == sizeof(on)); - TEST_CHECK(on == true); + NUTS_PASS(nng_stream_get(c2, NNG_OPT_TCP_KEEPALIVE, &on, &sz)); + NUTS_TRUE(sz == sizeof(on)); + NUTS_TRUE(on == true); - TEST_NNG_FAIL( + NUTS_FAIL( nng_stream_get_size(c1, NNG_OPT_TCP_NODELAY, &sz), NNG_EBADTYPE); - TEST_NNG_PASS(nng_stream_get_string( + NUTS_PASS(nng_stream_get_string( c1, NNG_OPT_WS_REQUEST_HEADER "Sec-WebSocket-Version", &str)); - TEST_CHECK(str != NULL); - TEST_CHECK(strcmp(str, "13") == 0); + NUTS_TRUE(str != NULL); + NUTS_TRUE(strcmp(str, "13") == 0); nng_strfree(str); nng_stream_close(c1); @@ -249,73 +231,69 @@ test_websocket_text_mode(void) char txb[5]; char rxb[5]; bool on; - uint16_t port = testutil_next_port(); + uint16_t port = nuts_next_port(); nng_iov iov; (void) snprintf(uri, sizeof(uri), "ws://127.0.0.1:%d/test", port); - TEST_NNG_PASS(nng_aio_alloc(&daio, NULL, NULL)); - TEST_NNG_PASS(nng_aio_alloc(&laio, NULL, NULL)); - TEST_NNG_PASS(nng_aio_alloc(&aio1, NULL, NULL)); - TEST_NNG_PASS(nng_aio_alloc(&aio2, NULL, NULL)); + NUTS_PASS(nng_aio_alloc(&daio, NULL, NULL)); + NUTS_PASS(nng_aio_alloc(&laio, NULL, NULL)); + NUTS_PASS(nng_aio_alloc(&aio1, NULL, NULL)); + NUTS_PASS(nng_aio_alloc(&aio2, NULL, NULL)); nng_aio_set_timeout(daio, 5000); // 5 seconds nng_aio_set_timeout(laio, 5000); nng_aio_set_timeout(aio1, 5000); nng_aio_set_timeout(aio2, 5000); - TEST_NNG_PASS(nng_stream_listener_alloc(&l, uri)); - TEST_NNG_PASS(nng_stream_dialer_alloc(&d, uri)); + NUTS_PASS(nng_stream_listener_alloc(&l, uri)); + NUTS_PASS(nng_stream_dialer_alloc(&d, uri)); on = true; - TEST_NNG_PASS(nng_stream_dialer_set_bool(d, NNG_OPT_WS_SEND_TEXT, on)); - TEST_NNG_PASS( - nng_stream_listener_set_bool(l, NNG_OPT_WS_RECV_TEXT, on)); + NUTS_PASS(nng_stream_dialer_set_bool(d, NNG_OPT_WS_SEND_TEXT, on)); + NUTS_PASS(nng_stream_listener_set_bool(l, NNG_OPT_WS_RECV_TEXT, on)); - TEST_NNG_PASS(nng_stream_dialer_get_bool(d, NNG_OPT_WS_SEND_TEXT, &on)); - TEST_ASSERT(on == true); - TEST_NNG_PASS(nng_stream_dialer_get_bool(d, NNG_OPT_WS_RECV_TEXT, &on)); - TEST_ASSERT(on == false); + NUTS_PASS(nng_stream_dialer_get_bool(d, NNG_OPT_WS_SEND_TEXT, &on)); + NUTS_TRUE(on); + NUTS_PASS(nng_stream_dialer_get_bool(d, NNG_OPT_WS_RECV_TEXT, &on)); + NUTS_TRUE(on == false); - - TEST_NNG_PASS(nng_stream_listener_get_bool(l, NNG_OPT_WS_SEND_TEXT, &on)); - TEST_ASSERT(on == false); - TEST_NNG_PASS(nng_stream_listener_get_bool(l, NNG_OPT_WS_RECV_TEXT, &on)); - TEST_ASSERT(on == true); + NUTS_PASS(nng_stream_listener_get_bool(l, NNG_OPT_WS_SEND_TEXT, &on)); + NUTS_TRUE(on == false); + NUTS_PASS(nng_stream_listener_get_bool(l, NNG_OPT_WS_RECV_TEXT, &on)); + NUTS_TRUE(on); on = false; - TEST_NNG_PASS(nng_stream_dialer_set_bool(d, NNG_OPT_WS_RECV_TEXT, on)); - TEST_NNG_PASS( - nng_stream_listener_set_bool(l, NNG_OPT_WS_SEND_TEXT, on)); - TEST_NNG_PASS(nng_stream_listener_get_bool(l, NNG_OPT_WS_SEND_TEXT, &on)); - TEST_ASSERT(on == false); - TEST_NNG_PASS(nng_stream_dialer_get_bool(d, NNG_OPT_WS_RECV_TEXT, &on)); - TEST_ASSERT(on == false); - - TEST_NNG_PASS(nng_stream_listener_listen(l)); - nng_stream_dialer_dial(d, daio); + NUTS_PASS(nng_stream_dialer_set_bool(d, NNG_OPT_WS_RECV_TEXT, on)); + NUTS_PASS(nng_stream_listener_set_bool(l, NNG_OPT_WS_SEND_TEXT, on)); + NUTS_PASS(nng_stream_listener_get_bool(l, NNG_OPT_WS_SEND_TEXT, &on)); + NUTS_TRUE(on == false); + NUTS_PASS(nng_stream_dialer_get_bool(d, NNG_OPT_WS_RECV_TEXT, &on)); + NUTS_TRUE(on == false); + + NUTS_PASS(nng_stream_listener_listen(l)); + nng_stream_dialer_dial(d, daio); nng_stream_listener_accept(l, laio); nng_aio_wait(laio); nng_aio_wait(daio); - TEST_NNG_PASS(nng_aio_result(laio)); - TEST_NNG_PASS(nng_aio_result(daio)); + NUTS_PASS(nng_aio_result(laio)); + NUTS_PASS(nng_aio_result(daio)); c1 = nng_aio_get_output(laio, 0); c2 = nng_aio_get_output(daio, 0); - TEST_CHECK(c1 != NULL); - TEST_CHECK(c2 != NULL); + NUTS_TRUE(c1 != NULL); + NUTS_TRUE(c2 != NULL); - TEST_NNG_PASS(nng_stream_get_bool(c1, NNG_OPT_WS_SEND_TEXT, &on)); - TEST_ASSERT(on == false); - TEST_NNG_PASS(nng_stream_get_bool(c1, NNG_OPT_WS_RECV_TEXT, &on)); - TEST_ASSERT(on == true); - TEST_NNG_PASS( - nng_stream_listener_set_bool(l, NNG_OPT_WS_RECV_TEXT, on)); + NUTS_PASS(nng_stream_get_bool(c1, NNG_OPT_WS_SEND_TEXT, &on)); + NUTS_TRUE(on == false); + NUTS_PASS(nng_stream_get_bool(c1, NNG_OPT_WS_RECV_TEXT, &on)); + NUTS_TRUE(on); + NUTS_PASS(nng_stream_listener_set_bool(l, NNG_OPT_WS_RECV_TEXT, on)); - TEST_NNG_PASS(nng_stream_get_bool(c2, NNG_OPT_WS_SEND_TEXT, &on)); - TEST_ASSERT(on == true); - TEST_NNG_PASS(nng_stream_get_bool(c2, NNG_OPT_WS_RECV_TEXT, &on)); - TEST_ASSERT(on == false); + NUTS_PASS(nng_stream_get_bool(c2, NNG_OPT_WS_SEND_TEXT, &on)); + NUTS_TRUE(on); + NUTS_PASS(nng_stream_get_bool(c2, NNG_OPT_WS_RECV_TEXT, &on)); + NUTS_TRUE(on == false); memcpy(txb, "PING", 5); iov.iov_buf = txb; @@ -329,9 +307,9 @@ test_websocket_text_mode(void) nng_aio_wait(aio1); nng_aio_wait(aio2); - TEST_NNG_PASS(nng_aio_result(aio1)); - TEST_NNG_PASS(nng_aio_result(aio2)); - TEST_ASSERT(memcmp(rxb, txb, 5) == 0); + NUTS_PASS(nng_aio_result(aio1)); + NUTS_PASS(nng_aio_result(aio2)); + NUTS_TRUE(memcmp(rxb, txb, 5) == 0); memset(rxb, 0, 5); memcpy(txb, "PONG", 5); @@ -347,9 +325,9 @@ test_websocket_text_mode(void) nng_aio_wait(aio1); nng_aio_wait(aio2); - TEST_NNG_PASS(nng_aio_result(aio1)); - TEST_NNG_PASS(nng_aio_result(aio2)); - TEST_ASSERT(memcmp(rxb, txb, 5) == 0); + NUTS_PASS(nng_aio_result(aio1)); + NUTS_PASS(nng_aio_result(aio2)); + NUTS_TRUE(memcmp(rxb, txb, 5) == 0); nng_stream_close(c1); nng_stream_free(c1); @@ -435,11 +413,11 @@ test_websocket_fragmentation(void) state.total = 200000; // total to send state.xfr = 0; state.err = 0; - TEST_CHECK((recv_buf = nng_alloc(state.total)) != NULL); - TEST_CHECK((send_buf = nng_alloc(state.total)) != NULL); - TEST_NNG_PASS(nng_mtx_alloc(&state.lock)); - TEST_NNG_PASS(nng_cv_alloc(&state.cv, state.lock)); - TEST_NNG_PASS(nng_aio_alloc(&state.aio, frag_recv_cb, &state)); + NUTS_TRUE((recv_buf = nng_alloc(state.total)) != NULL); + NUTS_TRUE((send_buf = nng_alloc(state.total)) != NULL); + NUTS_PASS(nng_mtx_alloc(&state.lock)); + NUTS_PASS(nng_cv_alloc(&state.cv, state.lock)); + NUTS_PASS(nng_aio_alloc(&state.aio, frag_recv_cb, &state)); nng_aio_set_timeout(state.aio, 2000); state.buf = recv_buf; @@ -451,20 +429,19 @@ test_websocket_fragmentation(void) nni_sha1(send_buf, state.total, sum1); nni_sha1_init(&state.sum); - port = testutil_next_port(); + port = nuts_next_port(); (void) snprintf(url, sizeof(url), "ws://127.0.0.1:%u", port); - TEST_NNG_PASS(nng_stream_listener_alloc(&l, url)); - TEST_NNG_PASS(nng_stream_dialer_alloc(&d, url)); - TEST_NNG_PASS(nng_aio_alloc(&daio, NULL, NULL)); - TEST_NNG_PASS(nng_aio_alloc(&laio, NULL, NULL)); - TEST_NNG_PASS(nng_aio_alloc(&caio, NULL, NULL)); + NUTS_PASS(nng_stream_listener_alloc(&l, url)); + NUTS_PASS(nng_stream_dialer_alloc(&d, url)); + NUTS_PASS(nng_aio_alloc(&daio, NULL, NULL)); + NUTS_PASS(nng_aio_alloc(&laio, NULL, NULL)); + NUTS_PASS(nng_aio_alloc(&caio, NULL, NULL)); - TEST_NNG_PASS( - nng_stream_listener_set_bool(l, NNG_OPT_TCP_NODELAY, true)); - TEST_NNG_PASS( + NUTS_PASS(nng_stream_listener_set_bool(l, NNG_OPT_TCP_NODELAY, true)); + NUTS_PASS( nng_stream_listener_set_size(l, NNG_OPT_WS_SENDMAXFRAME, 1000000)); - TEST_NNG_PASS(nng_stream_listener_listen(l)); + NUTS_PASS(nng_stream_listener_listen(l)); nng_aio_set_timeout(laio, 2000); nng_aio_set_timeout(daio, 2000); @@ -475,8 +452,8 @@ test_websocket_fragmentation(void) nng_aio_wait(laio); nng_aio_wait(daio); - TEST_NNG_PASS(nng_aio_result(laio)); - TEST_NNG_PASS(nng_aio_result(daio)); + NUTS_PASS(nng_aio_result(laio)); + NUTS_PASS(nng_aio_result(daio)); state.c = nng_aio_get_output(daio, 0); c = nng_aio_get_output(laio, 0); @@ -493,11 +470,11 @@ test_websocket_fragmentation(void) iov.iov_len = len; iov.iov_buf = buf; - TEST_NNG_PASS(nng_aio_set_iov(caio, 1, &iov)); + NUTS_PASS(nng_aio_set_iov(caio, 1, &iov)); nng_stream_send(c, caio); nng_aio_wait(caio); - TEST_NNG_PASS(nng_aio_result(caio)); - TEST_CHECK(nng_aio_count(caio) > 0); + NUTS_PASS(nng_aio_result(caio)); + NUTS_TRUE(nng_aio_count(caio) > 0); len = nng_aio_count(caio); resid -= len; @@ -510,13 +487,12 @@ test_websocket_fragmentation(void) } nng_mtx_unlock(state.lock); - TEST_NNG_PASS(state.err); - TEST_CHECK_(state.xfr == state.total, - "send count (%d) == recv count (%d)", state.total, state.xfr); + NUTS_PASS(state.err); + NUTS_TRUE(state.xfr == state.total); nni_sha1_final(&state.sum, sum2); - TEST_CHECK(memcmp(recv_buf, send_buf, state.total) == 0); - TEST_CHECK(memcmp(sum1, sum2, 20) == 0); + NUTS_TRUE(memcmp(recv_buf, send_buf, state.total) == 0); + NUTS_TRUE(memcmp(sum1, sum2, 20) == 0); nng_aio_free(caio); nng_stream_close(c); @@ -535,7 +511,7 @@ test_websocket_fragmentation(void) nng_stream_listener_free(l); } -TEST_LIST = { +NUTS_TESTS = { { "websocket stream wildcard", test_websocket_wildcard }, { "websocket conn properties", test_websocket_conn_props }, { "websocket fragmentation", test_websocket_fragmentation }, diff --git a/src/supplemental/websocket/wssfile_test.c b/src/supplemental/websocket/wssfile_test.c index 3f69cadc..59003123 100644 --- a/src/supplemental/websocket/wssfile_test.c +++ b/src/supplemental/websocket/wssfile_test.c @@ -8,16 +8,9 @@ // found online at https://opensource.org/licenses/MIT. // -#include <nng/nng.h> -#include <nng/protocol/pair1/pair.h> -#include <nng/supplemental/tls/tls.h> -#include <nng/supplemental/util/platform.h> -#include <nng/transport/ws/websocket.h> - #include "core/nng_impl.h" -#include "acutest.h" -#include "testutil.h" +#include <nuts.h> #ifdef NNG_SUPP_TLS // These keys are for demonstration purposes ONLY. DO NOT USE. @@ -106,13 +99,13 @@ init_dialer_wss_file(nng_dialer d) char *tmpdir; char *pth; - TEST_ASSERT((tmpdir = nni_plat_temp_dir()) != NULL); - TEST_ASSERT((pth = nni_file_join(tmpdir, CACERT)) != NULL); - nni_strfree(tmpdir); - TEST_NNG_PASS(nni_file_put(pth, cert, strlen(cert))); - TEST_NNG_PASS(nng_dialer_set_string(d, NNG_OPT_TLS_CA_FILE, pth)); + NUTS_ASSERT((tmpdir = nni_plat_temp_dir()) != NULL); + NUTS_ASSERT((pth = nni_file_join(tmpdir, CACERT)) != NULL); + nng_strfree(tmpdir); + NUTS_PASS(nni_file_put(pth, cert, strlen(cert))); + NUTS_PASS(nng_dialer_set_string(d, NNG_OPT_TLS_CA_FILE, pth)); nni_file_delete(pth); - nni_strfree(pth); + nng_strfree(pth); } static void @@ -122,25 +115,24 @@ init_listener_wss_file(nng_listener l) char *pth; char *cert_key; - TEST_ASSERT((tmpdir = nni_plat_temp_dir()) != NULL); - TEST_ASSERT((pth = nni_file_join(tmpdir, CERT_KEY)) != NULL); - nni_strfree(tmpdir); + NUTS_ASSERT((tmpdir = nni_plat_temp_dir()) != NULL); + NUTS_ASSERT((pth = nni_file_join(tmpdir, CERT_KEY)) != NULL); + nng_strfree(tmpdir); - TEST_NNG_PASS(nni_asprintf(&cert_key, "%s\r\n%s\r\n", cert, key)); + NUTS_PASS(nni_asprintf(&cert_key, "%s\r\n%s\r\n", cert, key)); - TEST_NNG_PASS(nni_file_put(pth, cert_key, strlen(cert_key))); - nni_strfree(cert_key); - TEST_NNG_PASS( - nng_listener_set_string(l, NNG_OPT_TLS_CERT_KEY_FILE, pth)); + NUTS_PASS(nni_file_put(pth, cert_key, strlen(cert_key))); + nng_strfree(cert_key); + NUTS_PASS(nng_listener_set_string(l, NNG_OPT_TLS_CERT_KEY_FILE, pth)); nni_file_delete(pth); - nni_strfree(pth); + nng_strfree(pth); } static void test_invalid_verify(void) { - uint16_t port = testutil_next_port(); + uint16_t port = nuts_next_port(); nng_socket s1; nng_socket s2; nng_listener l; @@ -149,11 +141,11 @@ test_invalid_verify(void) (void) snprintf(addr, sizeof(addr), "wss4://:%u/test", port); - TEST_NNG_PASS(nng_pair_open(&s1)); - TEST_NNG_PASS(nng_pair_open(&s2)); - TEST_NNG_PASS(nng_listener_create(&l, s1, addr)); + NUTS_PASS(nng_pair_open(&s1)); + NUTS_PASS(nng_pair_open(&s2)); + NUTS_PASS(nng_listener_create(&l, s1, addr)); init_listener_wss_file(l); - TEST_NNG_PASS(nng_listener_start(l, 0)); + NUTS_PASS(nng_listener_start(l, 0)); nng_msleep(100); @@ -164,20 +156,18 @@ test_invalid_verify(void) // dependent, based on receive vs. send timing most likely. // Applications shouldn't really depend that much on this. int rv; - rv = nng_dial(s2, addr, NULL, 0); - TEST_NNG_PASS(nng_dialer_create(&d, s2, addr)); - TEST_NNG_PASS(nng_dialer_set_int( + NUTS_PASS(nng_dialer_create(&d, s2, addr)); + NUTS_PASS(nng_dialer_set_int( d, NNG_OPT_TLS_AUTH_MODE, NNG_TLS_AUTH_MODE_REQUIRED)); rv = nng_dialer_start(d, 0); - TEST_CHECK(rv != 0); - TEST_CHECK_((rv == NNG_EPEERAUTH) || (rv == NNG_ECLOSED) || - (rv == NNG_ECRYPTO), - "result from dial: %d %s", rv, nng_strerror(rv)); + NUTS_TRUE(rv != 0); + NUTS_TRUE((rv == NNG_EPEERAUTH) || (rv == NNG_ECLOSED) || + (rv == NNG_ECRYPTO)); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(s2)); + NUTS_PASS(nng_close(s1)); + NUTS_PASS(nng_close(s2)); } static void @@ -193,43 +183,43 @@ test_no_verify(void) bool b; uint16_t port; - TEST_NNG_PASS(nng_pair_open(&s1)); - TEST_NNG_PASS(nng_pair_open(&s2)); - TEST_NNG_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, 5000)); - TEST_NNG_PASS(nng_socket_set_ms(s2, NNG_OPT_RECVTIMEO, 5000)); + NUTS_PASS(nng_pair_open(&s1)); + NUTS_PASS(nng_pair_open(&s2)); + NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, 5000)); + NUTS_PASS(nng_socket_set_ms(s2, NNG_OPT_RECVTIMEO, 5000)); - port = testutil_next_port(); + port = nuts_next_port(); (void) snprintf(addr, sizeof(addr), "wss4://:%u/test", port); - TEST_NNG_PASS(nng_listener_create(&l, s1, addr)); + NUTS_PASS(nng_listener_create(&l, s1, addr)); init_listener_wss_file(l); - TEST_NNG_PASS(nng_listener_start(l, 0)); + NUTS_PASS(nng_listener_start(l, 0)); nng_msleep(100); snprintf(addr, sizeof(addr), "wss://127.0.0.1:%u/test", port); - TEST_NNG_PASS(nng_dialer_create(&d, s2, addr)); + NUTS_PASS(nng_dialer_create(&d, s2, addr)); init_dialer_wss_file(d); - TEST_NNG_PASS(nng_dialer_set_int( + NUTS_PASS(nng_dialer_set_int( d, NNG_OPT_TLS_AUTH_MODE, NNG_TLS_AUTH_MODE_OPTIONAL)); - TEST_NNG_PASS( + NUTS_PASS( nng_dialer_set_string(d, NNG_OPT_TLS_SERVER_NAME, "example.com")); - TEST_NNG_PASS(nng_dialer_start(d, 0)); + NUTS_PASS(nng_dialer_start(d, 0)); nng_msleep(100); - TEST_NNG_PASS(nng_send(s1, "hello", 6, 0)); - TEST_NNG_PASS(nng_recvmsg(s2, &msg, 0)); - TEST_ASSERT(msg != NULL); - TEST_CHECK(nng_msg_len(msg) == 6); - TEST_STREQUAL(nng_msg_body(msg), "hello"); + NUTS_PASS(nng_send(s1, "hello", 6, 0)); + NUTS_PASS(nng_recvmsg(s2, &msg, 0)); + NUTS_ASSERT(msg != NULL); + NUTS_TRUE(nng_msg_len(msg) == 6); + NUTS_MATCH(nng_msg_body(msg), "hello"); p = nng_msg_get_pipe(msg); - TEST_CHECK(nng_pipe_id(p) > 0); - TEST_NNG_PASS(nng_pipe_get_bool(p, NNG_OPT_TLS_VERIFIED, &b)); - TEST_CHECK(b == false); + NUTS_TRUE(nng_pipe_id(p) > 0); + NUTS_PASS(nng_pipe_get_bool(p, NNG_OPT_TLS_VERIFIED, &b)); + NUTS_TRUE(b == false); nng_msg_free(msg); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(s2)); + NUTS_CLOSE(s1); + NUTS_CLOSE(s2); } static void @@ -245,39 +235,39 @@ test_verify_works(void) bool b; uint16_t port; - TEST_NNG_PASS(nng_pair_open(&s1)); - TEST_NNG_PASS(nng_pair_open(&s2)); - TEST_NNG_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, 5000)); - TEST_NNG_PASS(nng_socket_set_ms(s2, NNG_OPT_RECVTIMEO, 5000)); - port = testutil_next_port(); + NUTS_PASS(nng_pair_open(&s1)); + NUTS_PASS(nng_pair_open(&s2)); + NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, 5000)); + NUTS_PASS(nng_socket_set_ms(s2, NNG_OPT_RECVTIMEO, 5000)); + port = nuts_next_port(); (void) snprintf(addr, sizeof(addr), "wss4://:%u/test", port); - TEST_NNG_PASS(nng_listener_create(&l, s1, addr)); + NUTS_PASS(nng_listener_create(&l, s1, addr)); init_listener_wss_file(l); - TEST_NNG_PASS(nng_listener_start(l, 0)); + NUTS_PASS(nng_listener_start(l, 0)); // It can take a bit for the listener to start up in clouds. nng_msleep(200); snprintf(addr, sizeof(addr), "wss4://localhost:%u/test", port); - TEST_NNG_PASS(nng_dialer_create(&d, s2, addr)); + NUTS_PASS(nng_dialer_create(&d, s2, addr)); init_dialer_wss_file(d); - TEST_NNG_PASS(nng_dialer_start(d, 0)); + NUTS_PASS(nng_dialer_start(d, 0)); nng_msleep(100); - TEST_NNG_PASS(nng_send(s1, "hello", 6, 0)); - TEST_NNG_PASS(nng_recvmsg(s2, &msg, 0)); - TEST_ASSERT(msg != NULL); - TEST_CHECK(nng_msg_len(msg) == 6); - TEST_STREQUAL(nng_msg_body(msg), "hello"); + NUTS_PASS(nng_send(s1, "hello", 6, 0)); + NUTS_PASS(nng_recvmsg(s2, &msg, 0)); + NUTS_ASSERT(msg != NULL); + NUTS_TRUE(nng_msg_len(msg) == 6); + NUTS_MATCH(nng_msg_body(msg), "hello"); p = nng_msg_get_pipe(msg); - TEST_CHECK(nng_pipe_id(p) > 0); - TEST_NNG_PASS(nng_pipe_get_bool(p, NNG_OPT_TLS_VERIFIED, &b)); - TEST_CHECK(b == true); + NUTS_TRUE(nng_pipe_id(p) > 0); + NUTS_PASS(nng_pipe_get_bool(p, NNG_OPT_TLS_VERIFIED, &b)); + NUTS_TRUE(b == true); nng_msg_free(msg); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(s2)); + NUTS_PASS(nng_close(s1)); + NUTS_PASS(nng_close(s2)); } static void @@ -285,24 +275,20 @@ test_cert_file_not_present(void) { nng_socket s1; nng_listener l; - char addr[NNG_MAXADDRLEN]; - uint16_t port; - TEST_NNG_PASS(nng_pair_open(&s1)); - port = testutil_next_port(); - (void) snprintf(addr, sizeof(addr), "wss4://:%u/test", port); - TEST_NNG_PASS(nng_listener_create(&l, s1, addr)); + NUTS_PASS(nng_pair_open(&s1)); + NUTS_PASS(nng_listener_create(&l, s1, "wss4://:0/test")); - TEST_NNG_FAIL(nng_listener_set_string( - l, NNG_OPT_TLS_CERT_KEY_FILE, "no-such-file.pem"), + NUTS_FAIL(nng_listener_set_string( + l, NNG_OPT_TLS_CERT_KEY_FILE, "no-such-file.pem"), NNG_ENOENT); - TEST_NNG_PASS(nng_close(s1)); + NUTS_PASS(nng_close(s1)); } #endif -TEST_LIST = { +NUTS_TESTS = { #ifdef NNG_SUPP_TLS { "wss file invalid verify", test_invalid_verify }, { "wss file no verify", test_no_verify }, diff --git a/src/testing/CMakeLists.txt b/src/testing/CMakeLists.txt new file mode 100644 index 00000000..221ca8f2 --- /dev/null +++ b/src/testing/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. +# + +# Protocols. +nng_directory(testing`) + +target_sources(nng_testing PRIVATE + certs.c + marry.c + streams.c + util.c) + +target_include_directories(nng_testing PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/src/testing/acutest.h b/src/testing/acutest.h new file mode 100644 index 00000000..7f0fc059 --- /dev/null +++ b/src/testing/acutest.h @@ -0,0 +1,1645 @@ +/* + * Acutest -- Another C/C++ Unit Test facility + * <http://github.com/mity/acutest> + * + * Copyright (c) 2013-2019 Martin Mitas + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + +#ifndef ACUTEST_H__ +#define ACUTEST_H__ + + +/************************ + *** Public interface *** + ************************/ + +/* By default, "acutest.h" provides the main program entry point (function + * main()). However, if the test suite is composed of multiple source files + * which include "acutest.h", then this causes a problem of multiple main() + * definitions. To avoid this problem, #define macro TEST_NO_MAIN in all + * compilation units but one. + */ + +/* Macro to specify list of unit tests in the suite. + * The unit test implementation MUST provide list of unit tests it implements + * with this macro: + * + * TEST_LIST = { + * { "test1_name", test1_func_ptr }, + * { "test2_name", test2_func_ptr }, + * ... + * { 0 } + * }; + * + * The list specifies names of each test (must be unique) and pointer to + * a function implementing it. The function does not take any arguments + * and has no return values, i.e. every test function has to be compatible + * with this prototype: + * + * void test_func(void); + */ +#define TEST_LIST const struct test__ test_list__[] + + +/* Macros for testing whether an unit test succeeds or fails. These macros + * can be used arbitrarily in functions implementing the unit tests. + * + * If any condition fails throughout execution of a test, the test fails. + * + * TEST_CHECK takes only one argument (the condition), TEST_CHECK_ allows + * also to specify an error message to print out if the condition fails. + * (It expects printf-like format string and its parameters). The macros + * return non-zero (condition passes) or 0 (condition fails). + * + * That can be useful when more conditions should be checked only if some + * preceding condition passes, as illustrated in this code snippet: + * + * SomeStruct* ptr = allocate_some_struct(); + * if(TEST_CHECK(ptr != NULL)) { + * TEST_CHECK(ptr->member1 < 100); + * TEST_CHECK(ptr->member2 > 200); + * } + */ +#define TEST_CHECK_(cond,...) test_check__((cond), __FILE__, __LINE__, __VA_ARGS__) +#define TEST_CHECK(cond) test_check__((cond), __FILE__, __LINE__, "%s", #cond) + + +/* These macros are the same as TEST_CHECK_ and TEST_CHECK except that if the + * condition fails, the currently executed unit test is immediately aborted. + * + * That is done either by calling abort() if the unit test is executed as a + * child process; or via longjmp() if the unit test is executed within the + * main Acutest process. + * + * As a side effect of such abortion, your unit tests may cause memory leaks, + * unflushed file descriptors, and other fenomena caused by the abortion. + * + * Therefore you should not use these as a general replacement for TEST_CHECK. + * Use it with some caution, especially if your test causes some other side + * effects to the outside world (e.g. communicating with some server, inserting + * into a database etc.). + */ +#define TEST_ASSERT_(cond,...) \ + do { \ + if (!test_check__((cond), __FILE__, __LINE__, __VA_ARGS__)) \ + test_abort__(); \ + } while(0) +#define TEST_ASSERT(cond) \ + do { \ + if (!test_check__((cond), __FILE__, __LINE__, "%s", #cond)) \ + test_abort__(); \ + } while(0) + + +#ifdef __cplusplus +/* Macros to verify that the code (the 1st argument) throws exception of given + * type (the 2nd argument). (Note these macros are only available in C++.) + * + * TEST_EXCEPTION_ is like TEST_EXCEPTION but accepts custom printf-like + * message. + * + * For example: + * + * TEST_EXCEPTION(function_that_throw(), ExpectedExceptionType); + * + * If the function_that_throw() throws ExpectedExceptionType, the check passes. + * If the function throws anything incompatible with ExpectedExceptionType + * (or if it does not thrown an exception at all), the check fails. + */ +#define TEST_EXCEPTION(code, exctype) \ + do { \ + bool exc_ok__ = false; \ + const char *msg__ = NULL; \ + try { \ + code; \ + msg__ = "No exception thrown."; \ + } catch(exctype const&) { \ + exc_ok__= true; \ + } catch(...) { \ + msg__ = "Unexpected exception thrown."; \ + } \ + test_check__(exc_ok__, __FILE__, __LINE__, #code " throws " #exctype); \ + if(msg__ != NULL) \ + test_message__("%s", msg__); \ + } while(0) +#define TEST_EXCEPTION_(code, exctype, ...) \ + do { \ + bool exc_ok__ = false; \ + const char *msg__ = NULL; \ + try { \ + code; \ + msg__ = "No exception thrown."; \ + } catch(exctype const&) { \ + exc_ok__= true; \ + } catch(...) { \ + msg__ = "Unexpected exception thrown."; \ + } \ + test_check__(exc_ok__, __FILE__, __LINE__, __VA_ARGS__); \ + if(msg__ != NULL) \ + test_message__("%s", msg__); \ + } while(0) +#endif /* #ifdef __cplusplus */ + + +/* Sometimes it is useful to split execution of more complex unit tests to some + * smaller parts and associate those parts with some names. + * + * This is especially handy if the given unit test is implemented as a loop + * over some vector of multiple testing inputs. Using these macros allow to use + * sort of subtitle for each iteration of the loop (e.g. outputting the input + * itself or a name associated to it), so that if any TEST_CHECK condition + * fails in the loop, it can be easily seen which iteration triggers the + * failure, without the need to manually output the iteration-specific data in + * every single TEST_CHECK inside the loop body. + * + * TEST_CASE allows to specify only single string as the name of the case, + * TEST_CASE_ provides all the power of printf-like string formatting. + * + * Note that the test cases cannot be nested. Starting a new test case ends + * implicitly the previous one. To end the test case explicitly (e.g. to end + * the last test case after exiting the loop), you may use TEST_CASE(NULL). + */ +#define TEST_CASE_(...) test_case__(__VA_ARGS__) +#define TEST_CASE(name) test_case__("%s", name) + + +/* printf-like macro for outputting an extra information about a failure. + * + * Intended use is to output some computed output versus the expected value, + * e.g. like this: + * + * if(!TEST_CHECK(produced == expected)) { + * TEST_MSG("Expected: %d", expected); + * TEST_MSG("Produced: %d", produced); + * } + * + * Note the message is only written down if the most recent use of any checking + * macro (like e.g. TEST_CHECK or TEST_EXCEPTION) in the current test failed. + * This means the above is equivalent to just this: + * + * TEST_CHECK(produced == expected); + * TEST_MSG("Expected: %d", expected); + * TEST_MSG("Produced: %d", produced); + * + * The macro can deal with multi-line output fairly well. It also automatically + * adds a final new-line if there is none present. + */ +#define TEST_MSG(...) test_message__(__VA_ARGS__) + + +/* Maximal output per TEST_MSG call. Longer messages are cut. + * You may define another limit prior including "acutest.h" + */ +#ifndef TEST_MSG_MAXSIZE + #define TEST_MSG_MAXSIZE 1024 +#endif + + +/* Macro for dumping a block of memory. + * + * Its intended use is very similar to what TEST_MSG is for, but instead of + * generating any printf-like message, this is for dumping raw block of a + * memory in a hexadecimal form: + * + * TEST_CHECK(size_produced == size_expected && memcmp(addr_produced, addr_expected, size_produced) == 0); + * TEST_DUMP("Expected:", addr_expected, size_expected); + * TEST_DUMP("Produced:", addr_produced, size_produced); + */ +#define TEST_DUMP(title, addr, size) test_dump__(title, addr, size) + +/* Maximal output per TEST_DUMP call (in bytes to dump). Longer blocks are cut. + * You may define another limit prior including "acutest.h" + */ +#ifndef TEST_DUMP_MAXSIZE + #define TEST_DUMP_MAXSIZE 1024 +#endif + + +/********************** + *** Implementation *** + **********************/ + +/* The unit test files should not rely on anything below. */ + +#include <ctype.h> +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <setjmp.h> + +#if defined(unix) || defined(__unix__) || defined(__unix) || defined(__APPLE__) + #define ACUTEST_UNIX__ 1 + #include <errno.h> + #include <libgen.h> + #include <unistd.h> + #include <sys/types.h> + #include <sys/wait.h> + #include <signal.h> + #include <time.h> + + #if defined CLOCK_PROCESS_CPUTIME_ID && defined CLOCK_MONOTONIC + #define ACUTEST_HAS_POSIX_TIMER__ 1 + #endif +#endif + +#if defined(__gnu_linux__) + #define ACUTEST_LINUX__ 1 + #include <fcntl.h> + #include <sys/stat.h> +#endif + +#if defined(_WIN32) || defined(__WIN32__) || defined(__WINDOWS__) + #define ACUTEST_WIN__ 1 + #include <windows.h> + #include <io.h> +#endif + +#ifdef __cplusplus + #include <exception> +#endif + + +/* Note our global private identifiers end with '__' to mitigate risk of clash + * with the unit tests implementation. */ + + +#ifdef __cplusplus + extern "C" { +#endif + + +struct test__ { + const char* name; + void (*func)(void); +}; + +struct test_detail__ { + unsigned char flags; + double duration; +}; + +enum { + TEST_FLAG_RUN__ = 1 << 0, + TEST_FLAG_SUCCESS__ = 1 << 1, + TEST_FLAG_FAILURE__ = 1 << 2, +}; + +extern const struct test__ test_list__[]; + +int test_check__(int cond, const char* file, int line, const char* fmt, ...); +void test_case__(const char* fmt, ...); +void test_message__(const char* fmt, ...); +void test_dump__(const char* title, const void* addr, size_t size); +void test_abort__(void); + + +#ifndef TEST_NO_MAIN + +static char* test_argv0__ = NULL; +static size_t test_list_size__ = 0; +static struct test_detail__ *test_details__ = NULL; +static size_t test_count__ = 0; +static int test_no_exec__ = -1; +static int test_no_summary__ = 0; +static int test_tap__ = 0; +static int test_skip_mode__ = 0; +static int test_worker__ = 0; +static int test_worker_index__ = 0; +static int test_cond_failed__ = 0; +static FILE *test_xml_output__ = NULL; + +static int test_stat_failed_units__ = 0; +static int test_stat_run_units__ = 0; + +static const struct test__* test_current_unit__ = NULL; +static int test_current_index__ = 0; +static char test_case_name__[64] = ""; +static int test_current_already_logged__ = 0; +static int test_case_current_already_logged__ = 0; +static int test_verbose_level__ = 2; +static int test_current_failures__ = 0; +static int test_colorize__ = 0; +static int test_timer__ = 0; + +static int test_abort_has_jmp_buf__ = 0; +static jmp_buf test_abort_jmp_buf__; + +#if defined ACUTEST_WIN__ + typedef LARGE_INTEGER test_timer_type__; + static LARGE_INTEGER test_timer_freq__; + static test_timer_type__ test_timer_start__; + static test_timer_type__ test_timer_end__; + + static void + test_timer_init__(void) + { + QueryPerformanceFrequency(&test_timer_freq__); + } + + static void + test_timer_get_time__(LARGE_INTEGER* ts) + { + QueryPerformanceCounter(ts); + } + + static double + test_timer_diff__(LARGE_INTEGER start, LARGE_INTEGER end) + { + double duration = (double)(end.QuadPart - start.QuadPart); + duration /= (double)test_timer_freq__.QuadPart; + return duration; + } + + static void + test_timer_print_diff__(void) + { + printf("%.6lf secs", test_timer_diff__(test_timer_start__, test_timer_end__)); + } +#elif defined ACUTEST_HAS_POSIX_TIMER__ + static clockid_t test_timer_id__; + typedef struct timespec test_timer_type__; + static test_timer_type__ test_timer_start__; + static test_timer_type__ test_timer_end__; + + static void + test_timer_init__(void) + { + if(test_timer__ == 1) + test_timer_id__ = CLOCK_MONOTONIC; + else if(test_timer__ == 2) + test_timer_id__ = CLOCK_PROCESS_CPUTIME_ID; + } + + static void + test_timer_get_time__(struct timespec* ts) + { + clock_gettime(test_timer_id__, ts); + } + + static double + test_timer_diff__(struct timespec start, struct timespec end) + { + double endns; + double startns; + + endns = end.tv_sec; + endns *= 1e9; + endns += end.tv_nsec; + + startns = start.tv_sec; + startns *= 1e9; + startns += start.tv_nsec; + + return ((endns - startns)/ 1e9); + } + + static void + test_timer_print_diff__(void) + { + printf("%.6lf secs", + test_timer_diff__(test_timer_start__, test_timer_end__)); + } +#else + typedef int test_timer_type__; + static test_timer_type__ test_timer_start__; + static test_timer_type__ test_timer_end__; + + void + test_timer_init__(void) + {} + + static void + test_timer_get_time__(int* ts) + { + (void) ts; + } + + static double + test_timer_diff__(int start, int end) + { + (void) start; + (void) end; + return 0.0; + } + + static void + test_timer_print_diff__(void) + {} +#endif + +#define TEST_COLOR_DEFAULT__ 0 +#define TEST_COLOR_GREEN__ 1 +#define TEST_COLOR_RED__ 2 +#define TEST_COLOR_DEFAULT_INTENSIVE__ 3 +#define TEST_COLOR_GREEN_INTENSIVE__ 4 +#define TEST_COLOR_RED_INTENSIVE__ 5 + +static int +test_print_in_color__(int color, const char* fmt, ...) +{ + va_list args; + char buffer[256]; + int n; + + va_start(args, fmt); + vsnprintf(buffer, sizeof(buffer), fmt, args); + va_end(args); + buffer[sizeof(buffer)-1] = '\0'; + + if(!test_colorize__) { + return printf("%s", buffer); + } + +#if defined ACUTEST_UNIX__ + { + const char* col_str; + switch(color) { + case TEST_COLOR_GREEN__: col_str = "\033[0;32m"; break; + case TEST_COLOR_RED__: col_str = "\033[0;31m"; break; + case TEST_COLOR_GREEN_INTENSIVE__: col_str = "\033[1;32m"; break; + case TEST_COLOR_RED_INTENSIVE__: col_str = "\033[1;31m"; break; + case TEST_COLOR_DEFAULT_INTENSIVE__: col_str = "\033[1m"; break; + default: col_str = "\033[0m"; break; + } + printf("%s", col_str); + n = printf("%s", buffer); + printf("\033[0m"); + return n; + } +#elif defined ACUTEST_WIN__ + { + HANDLE h; + CONSOLE_SCREEN_BUFFER_INFO info; + WORD attr; + + h = GetStdHandle(STD_OUTPUT_HANDLE); + GetConsoleScreenBufferInfo(h, &info); + + switch(color) { + case TEST_COLOR_GREEN__: attr = FOREGROUND_GREEN; break; + case TEST_COLOR_RED__: attr = FOREGROUND_RED; break; + case TEST_COLOR_GREEN_INTENSIVE__: attr = FOREGROUND_GREEN | FOREGROUND_INTENSITY; break; + case TEST_COLOR_RED_INTENSIVE__: attr = FOREGROUND_RED | FOREGROUND_INTENSITY; break; + case TEST_COLOR_DEFAULT_INTENSIVE__: attr = FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY; break; + default: attr = 0; break; + } + if(attr != 0) + SetConsoleTextAttribute(h, attr); + n = printf("%s", buffer); + SetConsoleTextAttribute(h, info.wAttributes); + return n; + } +#else + n = printf("%s", buffer); + return n; +#endif +} + +static void +test_begin_test_line__(const struct test__* test) +{ + if(!test_tap__) { + if(test_verbose_level__ >= 3) { + test_print_in_color__(TEST_COLOR_DEFAULT_INTENSIVE__, "Test %s:\n", test->name); + test_current_already_logged__++; + } else if(test_verbose_level__ >= 1) { + int n; + char spaces[48]; + + n = test_print_in_color__(TEST_COLOR_DEFAULT_INTENSIVE__, "Test %s... ", test->name); + memset(spaces, ' ', sizeof(spaces)); + if(n < (int) sizeof(spaces)) + printf("%.*s", (int) sizeof(spaces) - n, spaces); + } else { + test_current_already_logged__ = 1; + } + } +} + +static void +test_finish_test_line__(int result) +{ + if(test_tap__) { + const char* str = (result == 0) ? "ok" : "not ok"; + + printf("%s %u - %s\n", str, test_current_index__ + 1, test_current_unit__->name); + + if(result == 0 && test_timer__) { + printf("# Duration: "); + test_timer_print_diff__(); + printf("\n"); + } + } else { + int color = (result == 0) ? TEST_COLOR_GREEN_INTENSIVE__ : TEST_COLOR_RED_INTENSIVE__; + const char* str = (result == 0) ? "OK" : "FAILED"; + printf("[ "); + test_print_in_color__(color, str); + printf(" ]"); + + if(result == 0 && test_timer__) { + printf(" "); + test_timer_print_diff__(); + } + + printf("\n"); + } +} + +static void +test_line_indent__(int level) +{ + static const char spaces[] = " "; + int n = level * 2; + + if(test_tap__ && n > 0) { + n--; + printf("#"); + } + + while(n > 16) { + printf("%s", spaces); + n -= 16; + } + printf("%.*s", n, spaces); +} + +int +test_check__(int cond, const char* file, int line, const char* fmt, ...) +{ + const char *result_str; + int result_color; + int verbose_level; + + if(cond) { + result_str = "ok"; + result_color = TEST_COLOR_GREEN__; + verbose_level = 3; + } else { + if(!test_current_already_logged__ && test_current_unit__ != NULL) + test_finish_test_line__(-1); + + result_str = "failed"; + result_color = TEST_COLOR_RED__; + verbose_level = 2; + test_current_failures__++; + test_current_already_logged__++; + } + + if(test_verbose_level__ >= verbose_level) { + va_list args; + + if(!test_case_current_already_logged__ && test_case_name__[0]) { + test_line_indent__(1); + test_print_in_color__(TEST_COLOR_DEFAULT_INTENSIVE__, "Case %s:\n", test_case_name__); + test_current_already_logged__++; + test_case_current_already_logged__++; + } + + test_line_indent__(test_case_name__[0] ? 2 : 1); + if(file != NULL) { + if(test_verbose_level__ < 3) { +#ifdef ACUTEST_WIN__ + const char* lastsep1 = strrchr(file, '\\'); + const char* lastsep2 = strrchr(file, '/'); + if(lastsep1 == NULL) + lastsep1 = file-1; + if(lastsep2 == NULL) + lastsep2 = file-1; + file = (lastsep1 > lastsep2 ? lastsep1 : lastsep2) + 1; +#else + const char* lastsep = strrchr(file, '/'); + if(lastsep != NULL) + file = lastsep+1; +#endif + } + printf("%s:%d: Check ", file, line); + } + + va_start(args, fmt); + vprintf(fmt, args); + va_end(args); + + printf("... "); + test_print_in_color__(result_color, result_str); + printf("\n"); + test_current_already_logged__++; + } + + test_cond_failed__ = (cond == 0); + return !test_cond_failed__; +} + +void +test_case__(const char* fmt, ...) +{ + va_list args; + + if(test_verbose_level__ < 2) + return; + + if(test_case_name__[0]) { + test_case_current_already_logged__ = 0; + test_case_name__[0] = '\0'; + } + + if(fmt == NULL) + return; + + va_start(args, fmt); + vsnprintf(test_case_name__, sizeof(test_case_name__) - 1, fmt, args); + va_end(args); + test_case_name__[sizeof(test_case_name__) - 1] = '\0'; + + if(test_verbose_level__ >= 3) { + test_line_indent__(1); + test_print_in_color__(TEST_COLOR_DEFAULT_INTENSIVE__, "Case %s:\n", test_case_name__); + test_current_already_logged__++; + test_case_current_already_logged__++; + } +} + +void +test_message__(const char* fmt, ...) +{ + char buffer[TEST_MSG_MAXSIZE]; + char* line_beg; + char* line_end; + va_list args; + + if(test_verbose_level__ < 2) + return; + + /* We allow extra message only when something is already wrong in the + * current test. */ + if(test_current_unit__ == NULL || !test_cond_failed__) + return; + + va_start(args, fmt); + vsnprintf(buffer, TEST_MSG_MAXSIZE, fmt, args); + va_end(args); + buffer[TEST_MSG_MAXSIZE-1] = '\0'; + + line_beg = buffer; + while(1) { + line_end = strchr(line_beg, '\n'); + if(line_end == NULL) + break; + test_line_indent__(test_case_name__[0] ? 3 : 2); + printf("%.*s\n", (int)(line_end - line_beg), line_beg); + line_beg = line_end + 1; + } + if(line_beg[0] != '\0') { + test_line_indent__(test_case_name__[0] ? 3 : 2); + printf("%s\n", line_beg); + } +} + +void +test_dump__(const char* title, const void* addr, size_t size) +{ + static const size_t BYTES_PER_LINE = 16; + size_t line_beg; + size_t truncate = 0; + + if(test_verbose_level__ < 2) + return; + + /* We allow extra message only when something is already wrong in the + * current test. */ + if(test_current_unit__ == NULL || !test_cond_failed__) + return; + + if(size > TEST_DUMP_MAXSIZE) { + truncate = size - TEST_DUMP_MAXSIZE; + size = TEST_DUMP_MAXSIZE; + } + + test_line_indent__(test_case_name__[0] ? 3 : 2); + printf((title[strlen(title)-1] == ':') ? "%s\n" : "%s:\n", title); + + for(line_beg = 0; line_beg < size; line_beg += BYTES_PER_LINE) { + size_t line_end = line_beg + BYTES_PER_LINE; + size_t off; + + test_line_indent__(test_case_name__[0] ? 4 : 3); + printf("%08lx: ", (unsigned long)line_beg); + for(off = line_beg; off < line_end; off++) { + if(off < size) + printf(" %02x", ((unsigned char*)addr)[off]); + else + printf(" "); + } + + printf(" "); + for(off = line_beg; off < line_end; off++) { + unsigned char byte = ((unsigned char*)addr)[off]; + if(off < size) + printf("%c", (iscntrl(byte) ? '.' : byte)); + else + break; + } + + printf("\n"); + } + + if(truncate > 0) { + test_line_indent__(test_case_name__[0] ? 4 : 3); + printf(" ... (and more %u bytes)\n", (unsigned) truncate); + } +} + +void +test_abort__(void) +{ + if(test_abort_has_jmp_buf__) + longjmp(test_abort_jmp_buf__, 1); + else + abort(); +} + +static void +test_list_names__(void) +{ + const struct test__* test; + + printf("Unit tests:\n"); + for(test = &test_list__[0]; test->func != NULL; test++) + printf(" %s\n", test->name); +} + +static void +test_remember__(int i) +{ + if(test_details__[i].flags & TEST_FLAG_RUN__) + return; + + test_details__[i].flags |= TEST_FLAG_RUN__; + test_count__++; +} + +static void +test_set_success__(int i, int success) +{ + test_details__[i].flags |= success ? TEST_FLAG_SUCCESS__ : TEST_FLAG_FAILURE__; +} + +static void +test_set_duration__(int i, double duration) +{ + test_details__[i].duration = duration; +} + +static int +test_name_contains_word__(const char* name, const char* pattern) +{ + static const char word_delim[] = " \t-_."; + const char* substr; + size_t pattern_len; + int starts_on_word_boundary; + int ends_on_word_boundary; + + pattern_len = strlen(pattern); + + substr = strstr(name, pattern); + while(substr != NULL) { + starts_on_word_boundary = (substr == name || strchr(word_delim, substr[-1]) != NULL); + ends_on_word_boundary = (substr[pattern_len] == '\0' || strchr(word_delim, substr[pattern_len]) != NULL); + + if(starts_on_word_boundary && ends_on_word_boundary) + return 1; + + substr = strstr(substr+1, pattern); + } + + return 0; +} + +static int +test_lookup__(const char* pattern) +{ + int i; + int n = 0; + + /* Try exact match. */ + for(i = 0; i < (int) test_list_size__; i++) { + if(strcmp(test_list__[i].name, pattern) == 0) { + test_remember__(i); + n++; + break; + } + } + if(n > 0) + return n; + + /* Try word match. */ + for(i = 0; i < (int) test_list_size__; i++) { + if(test_name_contains_word__(test_list__[i].name, pattern)) { + test_remember__(i); + n++; + } + } + if(n > 0) + return n; + + /* Try relaxed match. */ + for(i = 0; i < (int) test_list_size__; i++) { + if(strstr(test_list__[i].name, pattern) != NULL) { + test_remember__(i); + n++; + } + } + + return n; +} + + +/* Called if anything goes bad in Acutest, or if the unit test ends in other + * way then by normal returning from its function (e.g. exception or some + * abnormal child process termination). */ +static void +test_error__(const char* fmt, ...) +{ + va_list args; + + if(test_verbose_level__ == 0) + return; + + if(test_verbose_level__ <= 2 && !test_current_already_logged__ && test_current_unit__ != NULL) { + if(test_tap__) { + test_finish_test_line__(-1); + } else { + printf("[ "); + test_print_in_color__(TEST_COLOR_RED_INTENSIVE__, "FAILED"); + printf(" ]\n"); + } + } + + if(test_verbose_level__ >= 2) { + test_line_indent__(1); + if(test_verbose_level__ >= 3) + test_print_in_color__(TEST_COLOR_RED_INTENSIVE__, "ERROR: "); + va_start(args, fmt); + vprintf(fmt, args); + va_end(args); + printf("\n"); + } + + if(test_verbose_level__ >= 3) { + printf("\n"); + } +} + +/* Call directly the given test unit function. */ +static int +test_do_run__(const struct test__* test, int index) +{ + test_current_unit__ = test; + test_current_index__ = index; + test_current_failures__ = 0; + test_current_already_logged__ = 0; + test_cond_failed__ = 0; + + test_begin_test_line__(test); + +#ifdef __cplusplus + try { +#endif + + /* This is good to do for case the test unit e.g. crashes. */ + fflush(stdout); + fflush(stderr); + + if(!test_worker__) { + test_abort_has_jmp_buf__ = 1; + if(setjmp(test_abort_jmp_buf__) != 0) + goto aborted; + } + + test_timer_get_time__(&test_timer_start__); + test->func(); +aborted: + test_abort_has_jmp_buf__ = 0; + test_timer_get_time__(&test_timer_end__); + + if(test_verbose_level__ >= 3) { + test_line_indent__(1); + if(test_current_failures__ == 0) { + test_print_in_color__(TEST_COLOR_GREEN_INTENSIVE__, "SUCCESS: "); + printf("All conditions have passed.\n"); + + if(test_timer__) { + test_line_indent__(1); + printf("Duration: "); + test_timer_print_diff__(); + printf("\n"); + } + } else { + test_print_in_color__(TEST_COLOR_RED_INTENSIVE__, "FAILED: "); + printf("%d condition%s %s failed.\n", + test_current_failures__, + (test_current_failures__ == 1) ? "" : "s", + (test_current_failures__ == 1) ? "has" : "have"); + } + printf("\n"); + } else if(test_verbose_level__ >= 1 && test_current_failures__ == 0) { + test_finish_test_line__(0); + } + + test_case__(NULL); + test_current_unit__ = NULL; + return (test_current_failures__ == 0) ? 0 : -1; + +#ifdef __cplusplus + } catch(std::exception& e) { + const char* what = e.what(); + test_check__(0, NULL, 0, "Threw std::exception"); + if(what != NULL) + test_message__("std::exception::what(): %s", what); + return -1; + } catch(...) { + test_check__(0, NULL, 0, "Threw an exception"); + return -1; + } +#endif +} + +/* Trigger the unit test. If possible (and not suppressed) it starts a child + * process who calls test_do_run__(), otherwise it calls test_do_run__() + * directly. */ +static void +test_run__(const struct test__* test, int index, int master_index) +{ + int failed = 1; + test_timer_type__ start, end; + + test_current_unit__ = test; + test_current_already_logged__ = 0; + test_timer_get_time__(&start); + + if(!test_no_exec__) { + +#if defined(ACUTEST_UNIX__) + + pid_t pid; + int exit_code; + + /* Make sure the child starts with empty I/O buffers. */ + fflush(stdout); + fflush(stderr); + + pid = fork(); + if(pid == (pid_t)-1) { + test_error__("Cannot fork. %s [%d]", strerror(errno), errno); + failed = 1; + } else if(pid == 0) { + /* Child: Do the test. */ + test_worker__ = 1; + failed = (test_do_run__(test, index) != 0); + exit(failed ? 1 : 0); + } else { + /* Parent: Wait until child terminates and analyze its exit code. */ + waitpid(pid, &exit_code, 0); + if(WIFEXITED(exit_code)) { + switch(WEXITSTATUS(exit_code)) { + case 0: failed = 0; break; /* test has passed. */ + case 1: /* noop */ break; /* "normal" failure. */ + default: test_error__("Unexpected exit code [%d]", WEXITSTATUS(exit_code)); + } + } else if(WIFSIGNALED(exit_code)) { + char tmp[32]; + const char* signame; + switch(WTERMSIG(exit_code)) { + case SIGINT: signame = "SIGINT"; break; + case SIGHUP: signame = "SIGHUP"; break; + case SIGQUIT: signame = "SIGQUIT"; break; + case SIGABRT: signame = "SIGABRT"; break; + case SIGKILL: signame = "SIGKILL"; break; + case SIGSEGV: signame = "SIGSEGV"; break; + case SIGILL: signame = "SIGILL"; break; + case SIGTERM: signame = "SIGTERM"; break; + default: sprintf(tmp, "signal %d", WTERMSIG(exit_code)); signame = tmp; break; + } + test_error__("Test interrupted by %s", signame); + } else { + test_error__("Test ended in an unexpected way [%d]", exit_code); + } + } + +#elif defined(ACUTEST_WIN__) + + char buffer[512] = {0}; + STARTUPINFOA startupInfo; + PROCESS_INFORMATION processInfo; + DWORD exitCode; + + /* Windows has no fork(). So we propagate all info into the child + * through a command line arguments. */ + _snprintf(buffer, sizeof(buffer)-1, + "%s --worker=%d %s --no-exec --no-summary %s --verbose=%d --color=%s -- \"%s\"", + test_argv0__, index, test_timer__ ? "--timer" : "", + test_tap__ ? "--tap" : "", test_verbose_level__, + test_colorize__ ? "always" : "never", + test->name); + memset(&startupInfo, 0, sizeof(startupInfo)); + startupInfo.cb = sizeof(STARTUPINFO); + if(CreateProcessA(NULL, buffer, NULL, NULL, FALSE, 0, NULL, NULL, &startupInfo, &processInfo)) { + WaitForSingleObject(processInfo.hProcess, INFINITE); + GetExitCodeProcess(processInfo.hProcess, &exitCode); + CloseHandle(processInfo.hThread); + CloseHandle(processInfo.hProcess); + failed = (exitCode != 0); + } else { + test_error__("Cannot create unit test subprocess [%ld].", GetLastError()); + failed = 1; + } + +#else + + /* A platform where we don't know how to run child process. */ + failed = (test_do_run__(test, index) != 0); + +#endif + + } else { + /* Child processes suppressed through --no-exec. */ + failed = (test_do_run__(test, index) != 0); + } + test_timer_get_time__(&end); + + test_current_unit__ = NULL; + + test_stat_run_units__++; + if(failed) + test_stat_failed_units__++; + + test_set_success__(master_index, !failed); + test_set_duration__(master_index, test_timer_diff__(start, end)); +} + +#if defined(ACUTEST_WIN__) +/* Callback for SEH events. */ +static LONG CALLBACK +test_seh_exception_filter__(EXCEPTION_POINTERS *ptrs) +{ + test_check__(0, NULL, 0, "Unhandled SEH exception"); + test_message__("Exception code: 0x%08lx", ptrs->ExceptionRecord->ExceptionCode); + test_message__("Exception address: 0x%p", ptrs->ExceptionRecord->ExceptionAddress); + + fflush(stdout); + fflush(stderr); + + return EXCEPTION_EXECUTE_HANDLER; +} +#endif + + +#define TEST_CMDLINE_OPTFLAG_OPTIONALARG__ 0x0001 +#define TEST_CMDLINE_OPTFLAG_REQUIREDARG__ 0x0002 + +#define TEST_CMDLINE_OPTID_NONE__ 0 +#define TEST_CMDLINE_OPTID_UNKNOWN__ (-0x7fffffff + 0) +#define TEST_CMDLINE_OPTID_MISSINGARG__ (-0x7fffffff + 1) +#define TEST_CMDLINE_OPTID_BOGUSARG__ (-0x7fffffff + 2) + +typedef struct TEST_CMDLINE_OPTION__ { + char shortname; + const char* longname; + int id; + unsigned flags; +} TEST_CMDLINE_OPTION__; + +static int +test_cmdline_handle_short_opt_group__(const TEST_CMDLINE_OPTION__* options, + const char* arggroup, + int (*callback)(int /*optval*/, const char* /*arg*/)) +{ + const TEST_CMDLINE_OPTION__* opt; + int i; + int ret = 0; + + for(i = 0; arggroup[i] != '\0'; i++) { + for(opt = options; opt->id != 0; opt++) { + if(arggroup[i] == opt->shortname) + break; + } + + if(opt->id != 0 && !(opt->flags & TEST_CMDLINE_OPTFLAG_REQUIREDARG__)) { + ret = callback(opt->id, NULL); + } else { + /* Unknown option. */ + char badoptname[3]; + badoptname[0] = '-'; + badoptname[1] = arggroup[i]; + badoptname[2] = '\0'; + ret = callback((opt->id != 0 ? TEST_CMDLINE_OPTID_MISSINGARG__ : TEST_CMDLINE_OPTID_UNKNOWN__), + badoptname); + } + + if(ret != 0) + break; + } + + return ret; +} + +#define TEST_CMDLINE_AUXBUF_SIZE__ 32 + +static int +test_cmdline_read__(const TEST_CMDLINE_OPTION__* options, int argc, char** argv, + int (*callback)(int /*optval*/, const char* /*arg*/)) +{ + + const TEST_CMDLINE_OPTION__* opt; + char auxbuf[TEST_CMDLINE_AUXBUF_SIZE__+1]; + int after_doubledash = 0; + int i = 1; + int ret = 0; + + auxbuf[TEST_CMDLINE_AUXBUF_SIZE__] = '\0'; + + while(i < argc) { + if(after_doubledash || strcmp(argv[i], "-") == 0) { + /* Non-option argument. */ + ret = callback(TEST_CMDLINE_OPTID_NONE__, argv[i]); + } else if(strcmp(argv[i], "--") == 0) { + /* End of options. All the remaining members are non-option arguments. */ + after_doubledash = 1; + } else if(argv[i][0] != '-') { + /* Non-option argument. */ + ret = callback(TEST_CMDLINE_OPTID_NONE__, argv[i]); + } else { + for(opt = options; opt->id != 0; opt++) { + if(opt->longname != NULL && strncmp(argv[i], "--", 2) == 0) { + size_t len = strlen(opt->longname); + if(strncmp(argv[i]+2, opt->longname, len) == 0) { + /* Regular long option. */ + if(argv[i][2+len] == '\0') { + /* with no argument provided. */ + if(!(opt->flags & TEST_CMDLINE_OPTFLAG_REQUIREDARG__)) + ret = callback(opt->id, NULL); + else + ret = callback(TEST_CMDLINE_OPTID_MISSINGARG__, argv[i]); + break; + } else if(argv[i][2+len] == '=') { + /* with an argument provided. */ + if(opt->flags & (TEST_CMDLINE_OPTFLAG_OPTIONALARG__ | TEST_CMDLINE_OPTFLAG_REQUIREDARG__)) { + ret = callback(opt->id, argv[i]+2+len+1); + } else { + sprintf(auxbuf, "--%s", opt->longname); + ret = callback(TEST_CMDLINE_OPTID_BOGUSARG__, auxbuf); + } + break; + } else { + continue; + } + } + } else if(opt->shortname != '\0' && argv[i][0] == '-') { + if(argv[i][1] == opt->shortname) { + /* Regular short option. */ + if(opt->flags & TEST_CMDLINE_OPTFLAG_REQUIREDARG__) { + if(argv[i][2] != '\0') + ret = callback(opt->id, argv[i]+2); + else if(i+1 < argc) + ret = callback(opt->id, argv[++i]); + else + ret = callback(TEST_CMDLINE_OPTID_MISSINGARG__, argv[i]); + break; + } else { + ret = callback(opt->id, NULL); + + /* There might be more (argument-less) short options + * grouped together. */ + if(ret == 0 && argv[i][2] != '\0') + ret = test_cmdline_handle_short_opt_group__(options, argv[i]+2, callback); + break; + } + } + } + } + + if(opt->id == 0) { /* still not handled? */ + if(argv[i][0] != '-') { + /* Non-option argument. */ + ret = callback(TEST_CMDLINE_OPTID_NONE__, argv[i]); + } else { + /* Unknown option. */ + char* badoptname = argv[i]; + + if(strncmp(badoptname, "--", 2) == 0) { + /* Strip any argument from the long option. */ + char* assignment = strchr(badoptname, '='); + if(assignment != NULL) { + size_t len = assignment - badoptname; + if(len > TEST_CMDLINE_AUXBUF_SIZE__) + len = TEST_CMDLINE_AUXBUF_SIZE__; + strncpy(auxbuf, badoptname, len); + auxbuf[len] = '\0'; + badoptname = auxbuf; + } + } + + ret = callback(TEST_CMDLINE_OPTID_UNKNOWN__, badoptname); + } + } + } + + if(ret != 0) + return ret; + i++; + } + + return ret; +} + +static void +test_help__(void) +{ + printf("Usage: %s [options] [test...]\n", test_argv0__); + printf("\n"); + printf("Run the specified unit tests; or if the option '--skip' is used, run all\n"); + printf("tests in the suite but those listed. By default, if no tests are specified\n"); + printf("on the command line, all unit tests in the suite are run.\n"); + printf("\n"); + printf("Options:\n"); + printf(" -s, --skip Execute all unit tests but the listed ones\n"); + printf(" --exec[=WHEN] If supported, execute unit tests as child processes\n"); + printf(" (WHEN is one of 'auto', 'always', 'never')\n"); +#if defined ACUTEST_WIN__ + printf(" -t, --timer Measure test duration\n"); +#elif defined ACUTEST_HAS_POSIX_TIMER__ + printf(" -t, --timer Measure test duration (real time)\n"); + printf(" --timer=TIMER Measure test duration, using given timer\n"); + printf(" (TIMER is one of 'real', 'cpu')\n"); +#endif + printf(" -E, --no-exec Same as --exec=never\n"); + printf(" --no-summary Suppress printing of test results summary\n"); + printf(" --tap Produce TAP-compliant output\n"); + printf(" (See https://testanything.org/)\n"); + printf(" -x, --xml-output=FILE Enable XUnit output to the given file\n"); + printf(" -l, --list List unit tests in the suite and exit\n"); + printf(" -v, --verbose Make output more verbose\n"); + printf(" --verbose=LEVEL Set verbose level to LEVEL:\n"); + printf(" 0 ... Be silent\n"); + printf(" 1 ... Output one line per test (and summary)\n"); + printf(" 2 ... As 1 and failed conditions (this is default)\n"); + printf(" 3 ... As 1 and all conditions (and extended summary)\n"); + printf(" --color[=WHEN] Enable colorized output\n"); + printf(" (WHEN is one of 'auto', 'always', 'never')\n"); + printf(" --no-color Same as --color=never\n"); + printf(" -h, --help Display this help and exit\n"); + + if(test_list_size__ < 16) { + printf("\n"); + test_list_names__(); + } +} + +static const TEST_CMDLINE_OPTION__ test_cmdline_options__[] = { + { 's', "skip", 's', 0 }, + { 0, "exec", 'e', TEST_CMDLINE_OPTFLAG_OPTIONALARG__ }, + { 'E', "no-exec", 'E', 0 }, +#if defined ACUTEST_WIN__ + { 't', "timer", 't', 0 }, +#elif defined ACUTEST_HAS_POSIX_TIMER__ + { 't', "timer", 't', TEST_CMDLINE_OPTFLAG_OPTIONALARG__ }, +#endif + { 0, "no-summary", 'S', 0 }, + { 0, "tap", 'T', 0 }, + { 'l', "list", 'l', 0 }, + { 'v', "verbose", 'v', TEST_CMDLINE_OPTFLAG_OPTIONALARG__ }, + { 0, "color", 'c', TEST_CMDLINE_OPTFLAG_OPTIONALARG__ }, + { 0, "no-color", 'C', 0 }, + { 'h', "help", 'h', 0 }, + { 0, "worker", 'w', TEST_CMDLINE_OPTFLAG_REQUIREDARG__ }, /* internal */ + { 'x', "xml-output", 'x', TEST_CMDLINE_OPTFLAG_REQUIREDARG__ }, + { 0, NULL, 0, 0 } +}; + +static int +test_cmdline_callback__(int id, const char* arg) +{ + switch(id) { + case 's': + test_skip_mode__ = 1; + break; + + case 'e': + if(arg == NULL || strcmp(arg, "always") == 0) { + test_no_exec__ = 0; + } else if(strcmp(arg, "never") == 0) { + test_no_exec__ = 1; + } else if(strcmp(arg, "auto") == 0) { + /*noop*/ + } else { + fprintf(stderr, "%s: Unrecognized argument '%s' for option --exec.\n", test_argv0__, arg); + fprintf(stderr, "Try '%s --help' for more information.\n", test_argv0__); + exit(2); + } + break; + + case 'E': + test_no_exec__ = 1; + break; + + case 't': +#if defined ACUTEST_WIN__ || defined ACUTEST_HAS_POSIX_TIMER__ + if(arg == NULL || strcmp(arg, "real") == 0) { + test_timer__ = 1; + #ifndef ACUTEST_WIN__ + } else if(strcmp(arg, "cpu") == 0) { + test_timer__ = 2; + #endif + } else { + fprintf(stderr, "%s: Unrecognized argument '%s' for option --timer.\n", test_argv0__, arg); + fprintf(stderr, "Try '%s --help' for more information.\n", test_argv0__); + exit(2); + } +#endif + break; + + case 'S': + test_no_summary__ = 1; + break; + + case 'T': + test_tap__ = 1; + break; + + case 'l': + test_list_names__(); + exit(0); + + case 'v': + test_verbose_level__ = (arg != NULL ? atoi(arg) : test_verbose_level__+1); + break; + + case 'c': + if(arg == NULL || strcmp(arg, "always") == 0) { + test_colorize__ = 1; + } else if(strcmp(arg, "never") == 0) { + test_colorize__ = 0; + } else if(strcmp(arg, "auto") == 0) { + /*noop*/ + } else { + fprintf(stderr, "%s: Unrecognized argument '%s' for option --color.\n", test_argv0__, arg); + fprintf(stderr, "Try '%s --help' for more information.\n", test_argv0__); + exit(2); + } + break; + + case 'C': + test_colorize__ = 0; + break; + + case 'h': + test_help__(); + exit(0); + + case 'w': + test_worker__ = 1; + test_worker_index__ = atoi(arg); + break; + case 'x': + test_xml_output__ = fopen(arg, "w"); + if (!test_xml_output__) { + fprintf(stderr, "Unable to open '%s': %s\n", arg, strerror(errno)); + exit(2); + } + break; + + case 0: + if(test_lookup__(arg) == 0) { + fprintf(stderr, "%s: Unrecognized unit test '%s'\n", test_argv0__, arg); + fprintf(stderr, "Try '%s --list' for list of unit tests.\n", test_argv0__); + exit(2); + } + break; + + case TEST_CMDLINE_OPTID_UNKNOWN__: + fprintf(stderr, "Unrecognized command line option '%s'.\n", arg); + fprintf(stderr, "Try '%s --help' for more information.\n", test_argv0__); + exit(2); + + case TEST_CMDLINE_OPTID_MISSINGARG__: + fprintf(stderr, "The command line option '%s' requires an argument.\n", arg); + fprintf(stderr, "Try '%s --help' for more information.\n", test_argv0__); + exit(2); + + case TEST_CMDLINE_OPTID_BOGUSARG__: + fprintf(stderr, "The command line option '%s' does not expect an argument.\n", arg); + fprintf(stderr, "Try '%s --help' for more information.\n", test_argv0__); + exit(2); + } + + return 0; +} + + +#ifdef ACUTEST_LINUX__ +static int +test_is_tracer_present__(void) +{ + char buf[256+32+1]; + int tracer_present = 0; + int fd; + ssize_t n_read; + + fd = open("/proc/self/status", O_RDONLY); + if(fd == -1) + return 0; + + n_read = read(fd, buf, sizeof(buf)-1); + while(n_read > 0) { + static const char pattern[] = "TracerPid:"; + const char* field; + + buf[n_read] = '\0'; + field = strstr(buf, pattern); + if(field != NULL && field < buf + sizeof(buf) - 32) { + pid_t tracer_pid = (pid_t) atoi(field + sizeof(pattern) - 1); + tracer_present = (tracer_pid != 0); + break; + } + + if(n_read == sizeof(buf)-1) { + memmove(buf, buf + sizeof(buf)-1 - 32, 32); + n_read = read(fd, buf+32, sizeof(buf)-1-32); + if(n_read > 0) + n_read += 32; + } + } + + close(fd); + return tracer_present; +} +#endif + +int +main(int argc, char** argv) +{ + int i; + test_argv0__ = argv[0]; + +#if defined ACUTEST_UNIX__ + test_colorize__ = isatty(STDOUT_FILENO); +#elif defined ACUTEST_WIN__ + #if defined __BORLANDC__ + test_colorize__ = isatty(_fileno(stdout)); + #else + test_colorize__ = _isatty(_fileno(stdout)); + #endif +#else + test_colorize__ = 0; +#endif + + test_timer_init__(); + + /* Count all test units */ + test_list_size__ = 0; + for(i = 0; test_list__[i].func != NULL; i++) + test_list_size__++; + + test_details__ = (struct test_detail__*)calloc(test_list_size__, sizeof(struct test_detail__)); + if(test_details__ == NULL) { + fprintf(stderr, "Out of memory.\n"); + exit(2); + } + + /* Parse options */ + test_cmdline_read__(test_cmdline_options__, argc, argv, test_cmdline_callback__); + +#if defined(ACUTEST_WIN__) + SetUnhandledExceptionFilter(test_seh_exception_filter__); +#endif + + /* By default, we want to run all tests. */ + if(test_count__ == 0) { + for(i = 0; test_list__[i].func != NULL; i++) + test_remember__(i); + } + + /* Guess whether we want to run unit tests as child processes. */ + if(test_no_exec__ < 0) { + test_no_exec__ = 0; + + if(test_count__ <= 1) { + test_no_exec__ = 1; + } else { +#ifdef ACUTEST_WIN__ + if(IsDebuggerPresent()) + test_no_exec__ = 1; +#endif +#ifdef ACUTEST_LINUX__ + if(test_is_tracer_present__()) + test_no_exec__ = 1; +#endif + } + } + + if(test_tap__) { + /* TAP requires we know test result ("ok", "not ok") before we output + * anything about the test, and this gets problematic for larger verbose + * levels. */ + if(test_verbose_level__ > 2) + test_verbose_level__ = 2; + + /* TAP harness should provide some summary. */ + test_no_summary__ = 1; + + if(!test_worker__) + printf("1..%d\n", (int) test_count__); + } + + int index = test_worker_index__; + for(i = 0; test_list__[i].func != NULL; i++) { + int run = (test_details__[i].flags & TEST_FLAG_RUN__); + if (test_skip_mode__) /* Run all tests except those listed. */ + run = !run; + if(run) + test_run__(&test_list__[i], index++, i); + } + + /* Write a summary */ + if(!test_no_summary__ && test_verbose_level__ >= 1) { + if(test_verbose_level__ >= 3) { + test_print_in_color__(TEST_COLOR_DEFAULT_INTENSIVE__, "Summary:\n"); + + printf(" Count of all unit tests: %4d\n", (int) test_list_size__); + printf(" Count of run unit tests: %4d\n", test_stat_run_units__); + printf(" Count of failed unit tests: %4d\n", test_stat_failed_units__); + printf(" Count of skipped unit tests: %4d\n", (int) test_list_size__ - test_stat_run_units__); + } + + if(test_stat_failed_units__ == 0) { + test_print_in_color__(TEST_COLOR_GREEN_INTENSIVE__, "SUCCESS:"); + printf(" All unit tests have passed.\n"); + } else { + test_print_in_color__(TEST_COLOR_RED_INTENSIVE__, "FAILED:"); + printf(" %d of %d unit tests %s failed.\n", + test_stat_failed_units__, test_stat_run_units__, + (test_stat_failed_units__ == 1) ? "has" : "have"); + } + + if(test_verbose_level__ >= 3) + printf("\n"); + } + + if (test_xml_output__) { +#if defined ACUTEST_UNIX__ + char *suite_name = basename(argv[0]); +#elif defined ACUTEST_WIN__ + char suite_name[_MAX_FNAME]; + _splitpath(argv[0], NULL, NULL, suite_name, NULL); +#else + const char *suite_name = argv[0]; +#endif + fprintf(test_xml_output__, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); + fprintf(test_xml_output__, "<testsuite name=\"%s\" tests=\"%d\" errors=\"%d\" failures=\"%d\" skip=\"%d\">\n", + suite_name, (int)test_list_size__, test_stat_failed_units__, test_stat_failed_units__, + (int)test_list_size__ - test_stat_run_units__); + for(i = 0; test_list__[i].func != NULL; i++) { + struct test_detail__ *details = &test_details__[i]; + fprintf(test_xml_output__, " <testcase name=\"%s\" time=\"%.2f\">\n", test_list__[i].name, details->duration); + if (details->flags & TEST_FLAG_FAILURE__) + fprintf(test_xml_output__, " <failure />\n"); + if (!(details->flags & TEST_FLAG_FAILURE__) && !(details->flags & TEST_FLAG_SUCCESS__)) + fprintf(test_xml_output__, " <skipped />\n"); + fprintf(test_xml_output__, " </testcase>\n"); + } + fprintf(test_xml_output__, "</testsuite>\n"); + fclose(test_xml_output__); + } + + free((void*) test_details__); + + return (test_stat_failed_units__ == 0) ? 0 : 1; +} + + +#endif /* #ifndef TEST_NO_MAIN */ + +#ifdef __cplusplus + } /* extern "C" */ +#endif + + +#endif /* #ifndef ACUTEST_H__ */ diff --git a/src/testing/certs.c b/src/testing/certs.c new file mode 100644 index 00000000..e2ed94a0 --- /dev/null +++ b/src/testing/certs.c @@ -0,0 +1,126 @@ +// +// 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 +// 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. +// + +// TLS certificates. These are pre-generated, and should not be used outside +// of these test cases. They are all using RSA 2048 with SHA256. +// All certs are signed by the root key (making the root self-signed). +// They all expire in about 100 years -- so we don't have to worry about +// expiration. +// +// The server cert uses CN 127.0.0.1. +// +// Country = XX +// State = Utopia +// Locality = Paradise +// Organization = NNG Tests, Inc. +// + +const char *nuts_server_key = + "-----BEGIN RSA PRIVATE KEY-----\n" + "MIIEowIBAAKCAQEAyPdnRbMrQj9902TGQsmMbG6xTSl9XKbJr55BcnyZifsrqA7B\n" + "bNSkndVw9Qq+OJQIDBTfRhGdG+o9j3h6SDVvIb62fWtwJ5Fe0eUmeYwPc1PKQzOm\n" + "MFlMYekXiZsx60yu5LeuUhGlb84+csImH+m3NbutInPJcStSq0WfSV6VNk6DN353\n" + "5ex66zV2Ms6ikys1vCC434YqIpe1VxUh+IC2widJcLDCxmmJt3TOlx5f9OcKMkxu\n" + "H4fMAzgjIEpIrUjdb19CGNVvsNrEEB2CShBMgBdqMaAnKFxpKgfzS0JFulxRGNtp\n" + "srweki+j+a4sJXTv40kELkRQS6uB6wWZNjcPywIDAQABAoIBAQCGSUsot+BgFCzv\n" + "5JbWafb7Pbwb421xS8HZJ9Zzue6e1McHNVTqc+zLyqQAGX2iMMhvykKnf32L+anJ\n" + "BKgxOANaeSVYCUKYLfs+JfDfp0druMGexhR2mjT/99FSkfF5WXREQLiq/j+dxiLU\n" + "bActq+5QaWf3bYddp6VF7O/TBvCNqBfD0+S0o0wtBdvxXItrKPTD5iKr9JfLWdAt\n" + "YNAk2QgFywFtY5zc2wt4queghF9GHeBzzZCuVj9QvPA4WdVq0mePaPTmvTYQUD0j\n" + "GT6X5j9JhqCwfh7trb/HfkmLHwwc62zPDFps+Dxao80+vss5b/EYZ4zY3S/K3vpG\n" + "f/e42S2BAoGBAP51HQYFJGC/wsNtOcX8RtXnRo8eYmyboH6MtBFrZxWl6ERigKCN\n" + "5Tjni7EI3nwi3ONg0ENPFkoQ8h0bcVFS7iW5kz5te73WaOFtpkU9rmuFDUz37eLP\n" + "d+JLZ5Kwfn2FM9HoiSAZAHowE0MIlmmIEXSnFtqA2zzorPQLO/4QlR+VAoGBAMov\n" + "R0yaHg3qPlxmCNyLXKiGaGNzvsvWjYw825uCGmVZfhzDhOiCFMaMb51BS5Uw/gwm\n" + "zHxmJjoqak8JjxaQ1qKPoeY1TJ5ps1+TRq9Wzm2/zGqJHOXnRPlqwBQ6AFllAMgt\n" + "Rlp5uqb8QJ+YEo6/1kdGhw9kZWCZEEue6MNQjxnfAoGARLkUkZ+p54di7qz9QX+V\n" + "EghYgibOpk6R1hviNiIvwSUByhZgbvxjwC6pB7NBg31W8wIevU8K0g4plbrnq/Md\n" + "5opsPhwLo4XY5albkq/J/7f7k6ISWYN2+WMsIe4Q+42SJUsMXeLiwh1h1mTnWrEp\n" + "JbxK69CJZbXhoDe4iDGqVNECgYAjlgS3n9ywWE1XmAHxR3osk1OmRYYMfJv3VfLV\n" + "QSYCNqkyyNsIzXR4qdkvVYHHJZNhcibFsnkB/dsuRCFyOFX+0McPLMxqiXIv3U0w\n" + "qVe2C28gRTfX40fJmpdqN/c9xMBJe2aJoClRIM8DCBIkG/HMI8a719DcGrS6iqKv\n" + "VeuKAwKBgEgD+KWW1KtoSjCBlS0NP8HjC/Rq7j99YhKE6b9h2slIa7JTO8RZKCa0\n" + "qbuomdUeJA3R8h+5CFkEKWqO2/0+dUdLNOjG+CaTFHaUJevzHOzIjpn+VsfCLV13\n" + "yupGzHG+tGtdrWgLn9Dzdp67cDfSnsSh+KODPECAAFfo+wPvD8DS\n" + "-----END RSA PRIVATE KEY-----\n"; + +const char *nuts_server_crt = + "-----BEGIN CERTIFICATE-----\n" + "MIIDRzCCAi8CFCOIJGs6plMawgBYdDuCRV7UuJuyMA0GCSqGSIb3DQEBCwUAMF8x\n" + "CzAJBgNVBAYTAlhYMQ8wDQYDVQQIDAZVdG9waWExETAPBgNVBAcMCFBhcmFkaXNl\n" + "MRgwFgYDVQQKDA9OTkcgVGVzdHMsIEluYy4xEjAQBgNVBAMMCWxvY2FsaG9zdDAg\n" + "Fw0yMDA1MjMyMzMxMTlaGA8yMTIwMDQyOTIzMzExOVowXzELMAkGA1UEBhMCWFgx\n" + "DzANBgNVBAgMBlV0b3BpYTERMA8GA1UEBwwIUGFyYWRpc2UxGDAWBgNVBAoMD05O\n" + "RyBUZXN0cywgSW5jLjESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0B\n" + "AQEFAAOCAQ8AMIIBCgKCAQEAyPdnRbMrQj9902TGQsmMbG6xTSl9XKbJr55BcnyZ\n" + "ifsrqA7BbNSkndVw9Qq+OJQIDBTfRhGdG+o9j3h6SDVvIb62fWtwJ5Fe0eUmeYwP\n" + "c1PKQzOmMFlMYekXiZsx60yu5LeuUhGlb84+csImH+m3NbutInPJcStSq0WfSV6V\n" + "Nk6DN3535ex66zV2Ms6ikys1vCC434YqIpe1VxUh+IC2widJcLDCxmmJt3TOlx5f\n" + "9OcKMkxuH4fMAzgjIEpIrUjdb19CGNVvsNrEEB2CShBMgBdqMaAnKFxpKgfzS0JF\n" + "ulxRGNtpsrweki+j+a4sJXTv40kELkRQS6uB6wWZNjcPywIDAQABMA0GCSqGSIb3\n" + "DQEBCwUAA4IBAQA86Fqrd4aiih6R3fwiMLwV6IQJv+u5rQeqA4D0xu6v6siP42SJ\n" + "YMaI2DkNGrWdSFVSHUK/efceCrhnMlW7VM8I1cyl2F/qKMfnT72cxqqquiKtQKdT\n" + "NDTzv61QMUP9n86HxMzGS7jg0Pknu55BsIRNK6ndDvI3D/K/rzZs4xbqWSSfNfQs\n" + "fNFBbOuDrkS6/1h3p8SY1uPM18WLVv3GO2T3aeNMHn7YJAKSn+sfaxzAPyPIK3UT\n" + "W8ecGQSHOqBJJQELyUfMu7lx/FCYKUhN7/1uhU5Qf1pCR8hkIMegtqr64yVBNMOn\n" + "248fuiHbs9BRknuA/PqjxIDDZTwtDrfVSO/S\n" + "-----END CERTIFICATE-----\n"; + +const char *nuts_client_key = + "-----BEGIN RSA PRIVATE KEY-----\n" + "MIIEowIBAAKCAQEArohAOr7gv5aNpTEviOPPBJ2fArUX2EajMEtU9tF8H/TTlcMB\n" + "oy+vYoyNe56jc7CWUfO0S54rg0XaQ7HTI5EWueSR9wrEVK4q+Zg6x1dwr4k5SxD5\n" + "NcStDXzUjiCi9ygZRxpOUz8jRhKZFENuCdLxSN7E2vuOIU9IR5FpatMlsD33rTOX\n" + "Pgyx7qNpBj63ZCzY3b09zWBAXc/sLd1mxjlNP/LbtVLrFeIT1j6Gv0UgzxIcEjQ3\n" + "vybV/EYK7THn7jLhudEa+7fC9jfzwozbuszfEje/U0h0/DF4coGyIQTfDh6Wmk3x\n" + "5YB2QaI/0jwn8cwracKGtNO+vLqV4yUWZxf5xwIDAQABAoIBADXIEJrJpPIEz6Me\n" + "0/oH0QwoEg7AhReFNNY18HmaNfiW9fhJPiDuGcpxa0uzp8SHntqkEWPX2qq6BLcl\n" + "fd2Q4QLpdz08GSHLBb0h9sLko/nDfF8wXMr/zx+/3rPpRK6KsbdiWM54P0NhicBf\n" + "wvHOCcIdu2WLbNHA35IGMgjUBeIXxAsje63RBS3Dd6RnASxF7bbC/GXiUouQnos1\n" + "VSLoR6fLQQYlrMOAJU3ruPvMRwkrgaHQ1jl3PL4ilZMuvt7LSAi/KUDKMLRHdLNe\n" + "tMPITE5CvQ/rBhiUHMsTn1Xb2/jmSuJieJtG2fEDmLFuYZMUFMg1XfQ+ZC9cDCGI\n" + "wiEYUbkCgYEA1NoKnHp7Zmc2AK1J78uYByEwr8z2nAYZNq5LFeKuCd4rky6v385x\n" + "IjIYhvPLiGXw/lDfF1T15lHHo2FDAQqDa2rbEe+ycDC7Qa3eJjcsN284n1RM2pl+\n" + "iNyyhS09YVadelBxWsMqnwdDlf5lrSa7DW1+/u/z2iAw8lGka8XpFpsCgYEA0emd\n" + "sYqNivonQFEqJxi2kGTBjX8HNEjeF9tTLuAAg0hjhbW4i1v3JsekW9thbG436THa\n" + "4zWUBmcaEwx0iTD1dqM+d+PbN/4vxoRx9kWQJicfR+sa6eJiwL5UmiqDdX4to5z9\n" + "MbahemNBzYybr7lcvw+RbL91Fr/z3GooDM9rxkUCgYAuF8mUeTGfy1n2a5BHTV9u\n" + "q9FPQKNmxitPnA7GfoARwvrMtJ+BZ8M4FIEbOFArCWhWqkylUNCvP6ZryvQnlY9A\n" + "A7PM/os1oFfssSoaPHhmyL8KQcciz3qHSMOf81wHaCpSAnmJnhnstjX8lUqPZIO9\n" + "NKj7rBqycaYn02Y3sHP5YQKBgQDQxOQNW5uCiWDYWuDtmWqZGVxW+euUWJRqbbvB\n" + "dw+LgkdZCG7OS1z3uL8CjKHMUaJRzz+/kd3ysEACifStLYAzyg+q9XdlrOyfJ8Kg\n" + "CHdhOq+lu3I9Aubsg19pJLcx95g0jUJUWysmqekcIagFkPlpHHaqDZDKW4aRxRKo\n" + "CvNJcQKBgA9DB8OzHA/gp8TztxUZu8hAVfehLxVORquFvMRF0cr8uxjbu/6sDhzc\n" + "TRUkXRUe4DGxxMzAd+1SF/IWlcuZlfcuZrytH1hbjmrN8H30y+yGXFsSGCI/rudk\n" + "rLXNS+vWEeuOV8lQuQY0fkokmxnmhkPDMXra5/3KrVMzm3ZNF5N8\n" + "-----END RSA PRIVATE KEY-----\n"; + +const char *nuts_client_crt = + "-----BEGIN CERTIFICATE-----\n" + "MIIDdzCCAl8CFEzqJgxMn+OTdw7RjLtz8FlhrQ0HMA0GCSqGSIb3DQEBCwUAMHcx\n" + "CzAJBgNVBAYTAlhYMQ8wDQYDVQQIDAZVdG9waWExETAPBgNVBAcMCFBhcmFkaXNl\n" + "MRgwFgYDVQQKDA9OTkcgVGVzdHMsIEluYy4xFDASBgNVBAsMC0NsaWVudCBDZXJ0\n" + "MRQwEgYDVQQDDAtUZXN0IENsaWVudDAgFw0yMDA1MjMxODQ1MjZaGA8yMTIwMDQy\n" + "OTE4NDUyNlowdzELMAkGA1UEBhMCWFgxDzANBgNVBAgMBlV0b3BpYTERMA8GA1UE\n" + "BwwIUGFyYWRpc2UxGDAWBgNVBAoMD05ORyBUZXN0cywgSW5jLjEUMBIGA1UECwwL\n" + "Q2xpZW50IENlcnQxFDASBgNVBAMMC1Rlc3QgQ2xpZW50MIIBIjANBgkqhkiG9w0B\n" + "AQEFAAOCAQ8AMIIBCgKCAQEAoHWEJXvfaHDM33AyYbJHggKOllgcvwscEnsXztIt\n" + "OK+0jO6SRFSbtye1cjtrkGVCYBjeWMcOdEiNB0pw3PceVpF/Q9ifCuaSYsJA3sPH\n" + "wi/A3G7ZTe2KCH1i26I4zyw1Bn5AzkaDDXsaht2S9PEqIBCbWo/V1pWiv4QdYmLT\n" + "/UFYJDxFpFC3iKVC+BDv9yzziyaFXOYsQJXcaq8ZRD79bNV5NFfzUih8RoasIdD4\n" + "LoamBSbbr5XzstTISus+wu1JDKgKkYMJhLGA/tdU/eOKuTDx89yO4ba23W74xeqW\n" + "JYe0wPy+krmeB5M7UA7jIvg1JXhYACxujhieMp7wcC3FPwIDAQABMA0GCSqGSIb3\n" + "DQEBCwUAA4IBAQCMTQ89YnD19bCGIdUl/z6w2yx1x1kvTYHT+SzhUprsgiuS3KT1\n" + "RZNhjf5U3Yu+B6SrJCLuylv+L2zQfmHogp3lV7bayOA7r/rVy5fdmHS+Ei1w6LDL\n" + "t8jayiRMPG4VCgaG486yI73PFpK5DXnyFqSd23TlWvNoNeVag5gjlhzG+mHZBSB2\n" + "ExpGY3SPxrKSzDqIITVPVgzjW25N8qtgLXC6HODDiViNYq1nmuoS4O80NIYAPPs6\n" + "sxUMa5kT+zc17q57ZcgNq/sSGI3BU4b/E/8ntIwiui2xWSf/4JR6xtanih8uY5Pu\n" + "QTgg9qTtFgtu4WWUP7JhreoINTw6O4/g5Z18\n" + "-----END CERTIFICATE-----\n"; diff --git a/src/testing/marry.c b/src/testing/marry.c new file mode 100644 index 00000000..c0328df9 --- /dev/null +++ b/src/testing/marry.c @@ -0,0 +1,312 @@ +// +// 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 +// 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. +// + +#ifdef _WIN32 + +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif + +#include <io.h> +#include <windows.h> +#include <winsock2.h> +#else +#include <fcntl.h> +#include <poll.h> +#include <stdint.h> +#include <sys/time.h> +#include <time.h> +#include <unistd.h> +#endif +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <time.h> + +#define TEST_NO_MAIN +#include "nuts.h" + +void +nuts_scratch_addr(const char *scheme, size_t sz, char *addr) +{ + if ((strcmp(scheme, "inproc") == 0) || + (strcmp(scheme, "abstract") == 0)) { + (void) snprintf(addr, sz, "%s://nuts%04x%04x%04x%04x", scheme, + nng_random(), nng_random(), nng_random(), nng_random()); + return; + } + + if ((strncmp(scheme, "tcp", 3) == 0) || + (strncmp(scheme, "tls", 3) == 0)) { + (void) snprintf( + addr, sz, "%s://127.0.0.1:%u", scheme, nuts_next_port()); + return; + } + + if (strncmp(scheme, "ws", 2) == 0) { + (void) snprintf(addr, sz, + "%s://127.0.0.1:%u/nuts%04x%04x%04x%04x", scheme, + nuts_next_port(), nng_random(), nng_random(), nng_random(), + nng_random()); + return; + } + + if ((strncmp(scheme, "ipc", 3) == 0) || + (strncmp(scheme, "unix", 4) == 0)) { +#ifdef _WIN32 + // Windows doesn't place IPC names in the filesystem. + (void) snprintf(addr, sz, "%s://nuts%04x%04x%04x%04x", scheme, + nng_random(), nng_random(), nng_random(), nng_random()); + return; +#else + char *tmpdir; + + if (((tmpdir = getenv("TMPDIR")) == NULL) && + ((tmpdir = getenv("TEMP")) == NULL) && + ((tmpdir = getenv("TMP")) == NULL)) { + tmpdir = "/tmp"; + } + + (void) snprintf(addr, sz, "%s://%s/nuts%04x%04x%04x%04x", + scheme, tmpdir, nng_random(), nng_random(), nng_random(), + nng_random()); + return; +#endif + } + + // We should not be here. + abort(); +} + +// nuts_next_port returns a "next" allocation port. +// Ports are chosen by starting from a random point within a +// range (normally 38000-40000, but other good places to choose +// might be 36000-37000, 42000-43000, 45000-47000, 48000-49000. +// These are non-ephemeral ports. Successive calls to this function +// will return the next port in the range (wrapping). This works even +// across process boundaries, as the range is tracked in a file named +// by $TEST_PORT_FILE. The range of ports can be configured by using +// $TEST_PORT_RANGE (the range is specified as "lo:hi" where the actual +// port will be in the range [lo,hi). +uint16_t +nuts_next_port(void) +{ + char * name; + FILE * f; + uint16_t port; + uint16_t base; + uint16_t end; + char * str; +#ifdef _WIN32 + OVERLAPPED olp; + HANDLE h; +#endif + + if ((name = getenv("NUTS_PORT_FILE")) == NULL) { + name = ".nuts_ports"; + } + if (((str = getenv("NUTS_PORT_RANGE")) == NULL) || + ((sscanf(str, "%hu:%hu", &base, &end)) != 1) || + ((int) end - (int) base) < 1) { + base = 38000; + end = 40000; + } + + if (((f = fopen(name, "r+")) == NULL) && + ((f = fopen(name, "w+")) == NULL)) { + return (0); + } + (void) fseek(f, 0, SEEK_SET); + +#ifdef _WIN32 + h = (HANDLE) _get_osfhandle(_fileno(f)); + + // This contains the offset information for LockFileEx. + ZeroMemory(&olp, sizeof(olp)); + + if (LockFileEx(h, LOCKFILE_EXCLUSIVE_LOCK, 0, MAXDWORD, MAXDWORD, + &olp) == FALSE) { + fclose(f); + return (0); + } +#else + if (lockf(fileno(f), 0, F_LOCK) != 0) { + (void) fclose(f); + return (0); + } +#endif + if (fscanf(f, "%hu", &port) != 1) { + unsigned seed = (unsigned) time(NULL); + +#ifdef _WIN32 + port = base + rand_s(&seed) % (end - base); +#else + port = base + rand_r(&seed) % (end - base); +#endif + } + port++; + if ((port < base) || (port >= (base + end))) { + port = base; + } + +#ifdef _WIN32 + fseek(f, 0, SEEK_SET); + SetEndOfFile(h); + (void) fprintf(f, "%u", port); + ZeroMemory(&olp, sizeof(olp)); + (void) UnlockFileEx(h, 0, MAXDWORD, MAXDWORD, &olp); +#else + fseek(f, 0, SEEK_SET); + if (ftruncate(fileno(f), 0) != 0) { + (void) fclose(f); + return (0); + } + + (void) fprintf(f, "%u", port); + (void) lockf(fileno(f), 0, F_ULOCK); + +#endif + (void) fclose(f); + return (port); +} + +struct marriage_notice { + nng_mtx *mx; + nng_cv * cv; + int s1; + int s2; + int cnt1; + int cnt2; + nng_pipe p1; + nng_pipe p2; +}; + +static void +married(nng_pipe p, nng_pipe_ev ev, void *arg) +{ + struct marriage_notice *notice = arg; + (void) ev; + + nng_mtx_lock(notice->mx); + if (nng_socket_id(nng_pipe_socket(p)) == notice->s1) { + notice->cnt1++; + notice->p1 = p; + } else if (nng_socket_id(nng_pipe_socket(p)) == notice->s2) { + notice->cnt2++; + notice->p2 = p; + } + nng_cv_wake(notice->cv); + nng_mtx_unlock(notice->mx); +} + +int +nuts_marry(nng_socket s1, nng_socket s2) +{ + return (nuts_marry_ex(s1, s2, NULL, NULL, NULL)); +} + +// NB: This function is always called with sufficient space to +// hold the resulting expansion. +static void +replace_port_zero(const char *addr, char *buf, int port) +{ + int i; + int j; + bool colon; + char c; + + for (i = 0, j = 0; (c = addr[i]) != '\0'; i++) { + + if (colon && c == '0') { + char num[16]; + (void) snprintf(num, sizeof(num), "%d", port); + memcpy(&buf[j], num, strlen(num)); + j += (int) strlen(num); + colon = false; + continue; + } + colon = c == ':'; + buf[j++] = c; + } + buf[j] = '\0'; +} + +int +nuts_marry_ex( + nng_socket s1, nng_socket s2, const char *url, nng_pipe *p1, nng_pipe *p2) +{ + struct marriage_notice note; + nng_time timeout; + int rv; + char addr[64]; + nng_listener l; + int port; + + if (url == NULL) { + (void) snprintf(addr, sizeof(addr), + "inproc://marry%04x%04x%04x%04x", nng_random(), + nng_random(), nng_random(), nng_random()); + url = addr; + } + + note.cnt1 = 0; + note.cnt2 = 0; + note.s1 = nng_socket_id(s1); + note.s2 = nng_socket_id(s2); + timeout = nng_clock() + 1000; // 1 second + + if (((rv = nng_mtx_alloc(¬e.mx)) != 0) || + ((rv = nng_cv_alloc(¬e.cv, note.mx)) != 0) || + ((rv = nng_pipe_notify( + s1, NNG_PIPE_EV_ADD_POST, married, ¬e)) != 0) || + ((rv = nng_pipe_notify( + s2, NNG_PIPE_EV_ADD_POST, married, ¬e)) != 0) || + ((rv = nng_listen(s1, url, &l, 0)) != 0)) { + goto done; + } + + // If a TCP port of zero was selected, let's ask for the actual + // port bound. + if ((strstr(url, ":0") != NULL) && + (nng_listener_get_int(l, NNG_OPT_TCP_BOUND_PORT, &port) == 0) && + (port > 0)) { + replace_port_zero(url, addr, port); + url = addr; + } + if ((rv = nng_dial(s2, url, NULL, 0)) != 0) { + goto done; + } + + nng_mtx_lock(note.mx); + while ((note.cnt1 == 0) || (note.cnt2 == 0)) { + if ((rv = nng_cv_until(note.cv, timeout)) != 0) { + break; + } + } + nng_mtx_unlock(note.mx); + if (p1 != NULL) { + *p1 = note.p1; + } + if (p2 != NULL) { + *p2 = note.p2; + } + +done: + nng_pipe_notify(s1, NNG_PIPE_EV_ADD_POST, NULL, NULL); + nng_pipe_notify(s2, NNG_PIPE_EV_ADD_POST, NULL, NULL); + if (note.cv != NULL) { + nng_cv_free(note.cv); + } + if (note.mx != NULL) { + nng_mtx_free(note.mx); + } + return (rv); +} diff --git a/src/testing/nuts.h b/src/testing/nuts.h new file mode 100644 index 00000000..2ed8744c --- /dev/null +++ b/src/testing/nuts.h @@ -0,0 +1,206 @@ +// +// 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 +// file was obtained (LICENSE.txt). A copy of the license may also be +// found online at https://opensource.org/licenses/MIT. +// + +// NUTS - NNG Unit Test Support +// +// This is the NNG testing support library. It is used in the NNG +// project to support the various unit tests. It should not be used +// in other projects, and no guarantees are made about interface +// stability, etc. + +#ifndef NNG_TESTING_NUTS_H +#define NNG_TESTING_NUTS_H + +#include "acutest.h" + +#include <stdbool.h> +#include <stdint.h> +#include <string.h> + +// The following headers are provided for test code convenience. +#include <nng/nng.h> +#include <nng/protocol/bus0/bus.h> +#include <nng/protocol/pair0/pair.h> +#include <nng/protocol/pair1/pair.h> +#include <nng/protocol/pipeline0/pull.h> +#include <nng/protocol/pipeline0/push.h> +#include <nng/protocol/pubsub0/pub.h> +#include <nng/protocol/pubsub0/sub.h> +#include <nng/protocol/reqrep0/rep.h> +#include <nng/protocol/reqrep0/req.h> +#include <nng/protocol/survey0/respond.h> +#include <nng/protocol/survey0/survey.h> +#include <nng/supplemental/tls/tls.h> +#include <nng/supplemental/util/platform.h> +#include <nng/transport/ws/websocket.h> +#include <supplemental/sha1/sha1.h> + +#ifdef __cplusplus +extern "C" { +#endif + +// nuts_clock returns the current time in milliseconds. +// The reference clock may be any point in the past (typically since +// the program started running.) +extern uint64_t nuts_clock(void); + +// nuts_poll_fd tests if the given file descriptor polls as readable. +extern bool nuts_poll_fd(int); + +// nuts_be16 converts native and big-endian words. +extern uint16_t nuts_be16(uint16_t); + +// nuts_be32 converts native and big-endian double-words. +extern uint32_t nuts_be32(uint32_t); + +// nuts_sleep sleeps the specified number of milliseconds. +extern void nuts_sleep(int); + +// nuts_next_port returns a new port number (presumably unique) +extern uint16_t nuts_next_port(void); + +// nuts_scratch_addr makes a scratch address for the given scheme. +// The address buffer must be supplied, and the size should be at least +// 64 bytes to ensure no truncation occurs. +extern void nuts_scratch_addr(const char *, size_t, char *); + +// nuts_marry connects two sockets using inproc. It uses socket +// pipe hooks to ensure that it does not return before both sockets +// are fully connected. +extern int nuts_marry(nng_socket, nng_socket); + +// nuts_marry_ex is like nuts_marry, but returns the pipes that +// were connected, and includes an optional URL. The pipe pointers and the +// URL may be NULL if not needed. If a port number is part of the URL +// and is zero (i.e. if the URL contains :0) then listen is done first, +// and the actual bound port will be used for the client. +extern int nuts_marry_ex( + nng_socket, nng_socket, const char *, nng_pipe *, nng_pipe *); + +// nuts_stream_send_start and nuts_stream_recv_start are used +// to initiate transfers asynchronously. They return a token which can +// be used with nuts_stream_wait, which will return the result of +// the operation (0 on success, an NNG error number otherwise.) +extern void *nuts_stream_send_start(nng_stream *, void *, size_t); +extern void *nuts_stream_recv_start(nng_stream *, void *, size_t); +extern int nuts_stream_wait(void *); + +// These are TLS certificates. The client and server are signed with the +// root. The server uses CN 127.0.0.1. Other details are bogus, but +// designed to prevent accidental use elsewhere. +extern const char *nuts_server_key; +extern const char *nuts_server_crt; +extern const char *nuts_client_key; +extern const char *nuts_client_crt; + +// NUTS_SUCCESS tests for NNG success. It reports the failure if it +// did not. +#define NUTS_PASS(cond) \ + do { \ + int result_ = (cond); \ + TEST_CHECK_(result_ == 0, "%s succeeds", #cond); \ + TEST_MSG("%s: expected success, got %s (%d)", #cond, \ + nng_strerror(result_), result_); \ + } while (0) + +// NUTS_ERROR tests for a specific NNG error code. +#define NUTS_FAIL(cond, expect) \ + do { \ + int result_ = (cond); \ + TEST_CHECK_(result_ == (expect), "%s fails with %s", #cond, \ + nng_strerror(expect)); \ + TEST_MSG("%s: expected %s (%d), got %s (%d)", #cond, \ + nng_strerror(expect), expect, nng_strerror(result_), \ + result_); \ + } while (0) + +#define NUTS_SEND(sock, string) \ + NUTS_PASS(nng_send(sock, string, strlen(string) + 1, 0)) + +#define NUTS_RECV(sock, string) \ + do { \ + char buf_[64]; \ + size_t sz_ = sizeof(buf_); \ + int rv_ = nng_recv(sock, &buf_, &sz_, 0); \ + TEST_CHECK_( \ + rv_ == 0, "nng_recv (%d %s)", rv_, nng_strerror(rv_)); \ + TEST_CHECK_(sz_ == strlen(string) + 1, "length %d want %d", \ + sz_, strlen(string) + 1); \ + buf_[sizeof(buf_) - 1] = '\0'; \ + TEST_CHECK_( \ + strcmp(string, buf_) == 0, "%s == %s", string, buf_); \ + } while (0) + +#define NUTS_MATCH(s1, s2) \ + do { \ + TEST_CHECK_(strcmp(s1, s2) == 0, "%s == %s", s1, s2); \ + } while (0) + +#define NUTS_NULL(x) \ + do { \ + TEST_CHECK_((x) == NULL, "%p == NULL", x); \ + } while (0) + +#define NUTS_ADDR(var, scheme) \ + do { \ + static char nuts_addr_[64]; \ + nuts_scratch_addr(scheme, sizeof(nuts_addr_), nuts_addr_); \ + (var) = nuts_addr_; \ + } while (0) + +#define NUTS_OPEN(sock) NUTS_PASS(nng_pair1_open(&(sock))) + +#define NUTS_CLOSE(sock) NUTS_PASS(nng_close(sock)) + +#define NUTS_SLEEP(ms) nuts_sleep(ms) + +#define NUTS_CLOCK(var) \ + do { \ + (var) = nuts_clock(); \ + } while (0) + +#define NUTS_BEFORE(when) \ + do { \ + uint64_t nuts_t0_ = (when); \ + uint64_t nuts_t1_ = nuts_clock(); \ + TEST_CHECK_(nuts_t1_ < nuts_t0_, \ + "time before, deadline %lld, current %lld, delta %lld", \ + (long long) nuts_t0_, (long long) nuts_t1_, \ + (long long) nuts_t0_ - (long long) nuts_t1_); \ + } while (0) + +#define NUTS_AFTER(when) \ + do { \ + uint64_t nuts_t0_ = (when); \ + uint64_t nuts_t1_ = nuts_clock(); \ + TEST_CHECK_(nuts_t1_ >= nuts_t0_, \ + "time after, deadline %lld, current %lld, delta %lld", \ + (long long) nuts_t0_, (long long) nuts_t1_, \ + (long long) nuts_t0_ - (long long) nuts_t1_); \ + } while (0) + +#define NUTS_MARRY(s1, s2) NUTS_PASS(nuts_marry(s1, s2)) +#define NUTS_MARRY_EX(s1, s2, url, p1, p2) \ + NUTS_PASS(nuts_marry_ex(s1, s2, url, p1, p2)) + +// Redefine some macros from acutest.h for consistency. +#define NUTS_TRUE TEST_CHECK +#define NUTS_ASSERT TEST_ASSERT +#define NUTS_CASE TEST_CASE +#define NUTS_MSG TEST_MSG + +#define NUTS_TESTS TEST_LIST + +#define NUTS_PROTO(x, y) (((x) << 4u) | (y)) + +#ifdef __cplusplus +}; +#endif + +#endif // NNG_TEST_NUTS_H diff --git a/src/testing/streams.c b/src/testing/streams.c new file mode 100644 index 00000000..d718ab76 --- /dev/null +++ b/src/testing/streams.c @@ -0,0 +1,146 @@ +// +// 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 +// 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. +// + +#define TEST_NO_MAIN + +#include <nng/nng.h> +#include <nng/supplemental/util/platform.h> + +typedef struct { + uint8_t * base; + size_t rem; + nng_iov iov; + nng_aio * upper_aio; + nng_aio * lower_aio; + nng_stream *s; + void (*submit)(nng_stream *, nng_aio *); +} stream_xfr_t; + +static void +stream_xfr_free(stream_xfr_t *x) +{ + if (x == NULL) { + return; + } + if (x->upper_aio != NULL) { + nng_aio_free(x->upper_aio); + } + if (x->lower_aio != NULL) { + nng_aio_free(x->lower_aio); + } + nng_free(x, sizeof(*x)); +} + +static void +stream_xfr_start(stream_xfr_t *x) +{ + nng_iov iov; + iov.iov_buf = x->base; + iov.iov_len = x->rem; + + nng_aio_set_iov(x->lower_aio, 1, &iov); + x->submit(x->s, x->lower_aio); +} + +static void +stream_xfr_cb(void *arg) +{ + stream_xfr_t *x = arg; + int rv; + size_t n; + + rv = nng_aio_result(x->lower_aio); + if (rv != 0) { + nng_aio_finish(x->upper_aio, rv); + return; + } + n = nng_aio_count(x->lower_aio); + + x->rem -= n; + x->base += n; + + if (x->rem == 0) { + nng_aio_finish(x->upper_aio, 0); + return; + } + + stream_xfr_start(x); +} + +static stream_xfr_t * +stream_xfr_alloc(nng_stream *s, void (*submit)(nng_stream *, nng_aio *), + void *buf, size_t size) +{ + stream_xfr_t *x; + + if ((x = nng_alloc(size)) == NULL) { + return (NULL); + } + if (nng_aio_alloc(&x->upper_aio, NULL, NULL) != 0) { + stream_xfr_free(x); + return (NULL); + } + if (nng_aio_alloc(&x->lower_aio, stream_xfr_cb, x) != 0) { + stream_xfr_free(x); + return (NULL); + } + + // Upper should not take more than 30 seconds, lower not more than 5. + nng_aio_set_timeout(x->upper_aio, 30000); + nng_aio_set_timeout(x->lower_aio, 5000); + + nng_aio_begin(x->upper_aio); + + x->s = s; + x->rem = size; + x->base = buf; + x->submit = submit; + + return (x); +} + +int +nuts_stream_wait(stream_xfr_t *x) +{ + int rv; + if (x == NULL) { + return (NNG_ENOMEM); + } + nng_aio_wait(x->upper_aio); + rv = nng_aio_result(x->upper_aio); + stream_xfr_free(x); + return (rv); +} + +void * +nuts_stream_recv_start(nng_stream *s, void *buf, size_t size) +{ + stream_xfr_t *x; + + x = stream_xfr_alloc(s, nng_stream_recv, buf, size); + if (x == NULL) { + return (x); + } + stream_xfr_start(x); + return (x); +} + +void * +nuts_stream_send_start(nng_stream *s, void *buf, size_t size) +{ + stream_xfr_t *x; + + x = stream_xfr_alloc(s, nng_stream_send, buf, size); + if (x == NULL) { + return (x); + } + stream_xfr_start(x); + return (x); +} diff --git a/src/testing/util.c b/src/testing/util.c new file mode 100644 index 00000000..eeb70b4f --- /dev/null +++ b/src/testing/util.c @@ -0,0 +1,164 @@ +// +// 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 +// 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. +// + +#define TEST_NO_MAIN + +#ifdef _WIN32 + +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif + +#include <windows.h> +#include <winsock2.h> +// order counts +#include <mswsock.h> +#define poll WSAPoll +#include <io.h> +#else +#include <fcntl.h> +#include <poll.h> +#include <stdint.h> +#include <sys/time.h> +#include <time.h> +#include <unistd.h> +#endif +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <time.h> + +#if !defined(_WIN32) && !defined(CLOCK_MONOTONIC) +#include <poll.h> +#endif + +#include "nuts.h" + +uint64_t +nuts_clock(void) +{ +#ifdef _WIN32 + return (GetTickCount64()); +#elif defined(CLOCK_MONTONIC) + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + uint64_t val; + + val = ts.tv_sec; + val *= 1000; + val += ts.tv_nsec / 1000000; + return (val); +#else + static time_t epoch; + struct timeval tv; + + if (epoch == 0) { + epoch = time(NULL); + } + gettimeofday(&tv, NULL); + + if (tv.tv_sec < epoch) { + // Broken clock. + // This will force all other timing tests to fail + return (0); + } + tv.tv_sec -= epoch; + return ( + ((uint64_t)(tv.tv_sec) * 1000) + (uint64_t)(tv.tv_usec / 1000)); +#endif + +#ifdef _WIN32 +#else +#include <fcntl.h> +#include <unistd.h> +#endif +} + +bool +nuts_poll_fd(int fd) +{ +#ifdef _WIN32 + struct pollfd pfd; + pfd.fd = (SOCKET) fd; + pfd.events = POLLRDNORM; + pfd.revents = 0; + + switch (WSAPoll(&pfd, 1, 0)) { + case 0: + return (false); + case 1: + return (true); + } +#else + struct pollfd pfd; + + pfd.fd = fd; + pfd.events = POLLRDNORM; + pfd.revents = 0; + + switch (poll(&pfd, 1, 0)) { + case 0: + return (false); + case 1: + return (true); + } +#endif + return (false); +} + +static bool +is_little_endian(void) +{ + uint16_t num = 0x1; + uint8_t *ptr = (uint8_t *) (void *) (&num); + return (ptr[0] == 1); +} + +uint16_t +nuts_be16(uint16_t in) +{ + if (is_little_endian()) { + in = ((in / 0x100) + ((in % 0x100) * 0x100)); + } + return (in); +} + +uint32_t +nuts_be32(uint32_t in) +{ + if (is_little_endian()) { + in = ((in >> 24u) & 0xffu) | ((in >> 8u) & 0xff00u) | + ((in << 8u) & 0xff0000u) | ((in << 24u) & 0xff000000u); + } + return (in); +} + +void +nuts_sleep(int msec) +{ +#ifdef _WIN32 + Sleep(msec); +#elif defined(CLOCK_MONOTONIC) + struct timespec ts; + + ts.tv_sec = msec / 1000; + ts.tv_nsec = (msec % 1000) * 1000000; + + // Do this in a loop, so that interrupts don't actually wake us. + while (ts.tv_sec || ts.tv_nsec) { + if (nanosleep(&ts, &ts) == 0) { + break; + } + } +#else + poll(NULL, 0, msec); +#endif +} diff --git a/src/transport/ipc/ipc_test.c b/src/transport/ipc/ipc_test.c index 3240b21d..2fb4afa3 100644 --- a/src/transport/ipc/ipc_test.c +++ b/src/transport/ipc/ipc_test.c @@ -8,13 +8,7 @@ // 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 <testutil.h> - -#include <acutest.h> +#include <nuts.h> #ifdef NNG_PLATFORM_POSIX #include <sys/stat.h> @@ -33,15 +27,14 @@ test_path_too_long(void) addr[255] = 0; memcpy(addr, "ipc://", strlen("ipc://")); - TEST_ASSERT(strlen(addr) == 255); - TEST_NNG_PASS(nng_pair0_open(&s1)); - 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); + NUTS_ASSERT(strlen(addr) == 255); + NUTS_OPEN(s1); + NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_RECVTIMEO, 1000)); + NUTS_FAIL(nng_listen(s1, addr, NULL, 0), NNG_EADDRINVAL); + NUTS_FAIL(nng_dial(s1, addr, NULL, NNG_FLAG_NONBLOCK), NNG_EADDRINVAL); - TEST_NNG_PASS(nng_close(s1)); + NUTS_CLOSE(s1); } void @@ -49,16 +42,14 @@ test_ipc_dialer_perms(void) { nng_socket s; nng_dialer d; - char addr[64]; + char * addr; - testutil_scratch_addr("ipc", sizeof(addr), addr); - - TEST_NNG_PASS(nng_pair0_open(&s)); - TEST_NNG_PASS(nng_dialer_create(&d, s, addr)); - TEST_NNG_FAIL( + NUTS_ADDR(addr, "ipc"); + NUTS_OPEN(s); + NUTS_PASS(nng_dialer_create(&d, s, addr)); + NUTS_FAIL( nng_dialer_set_int(d, NNG_OPT_IPC_PERMISSIONS, 0444), NNG_ENOTSUP); - - TEST_NNG_PASS(nng_close(s)); + NUTS_CLOSE(s); } void @@ -68,26 +59,24 @@ test_ipc_dialer_properties(void) nng_dialer d; nng_sockaddr sa; size_t z; - char addr[64]; + char *addr; - testutil_scratch_addr("ipc", sizeof(addr), addr); - - TEST_NNG_PASS(nng_pair0_open(&s)); - TEST_NNG_PASS(nng_dial(s, addr, &d, NNG_FLAG_NONBLOCK)); + NUTS_ADDR(addr, "ipc"); + NUTS_OPEN(s); + NUTS_PASS(nng_dial(s, addr, &d, NNG_FLAG_NONBLOCK)); // Dialers don't have local addresses. - TEST_NNG_FAIL( - nng_dialer_get_addr(d, NNG_OPT_LOCADDR, &sa), NNG_ENOTSUP); + NUTS_FAIL(nng_dialer_get_addr(d, NNG_OPT_LOCADDR, &sa), NNG_ENOTSUP); - TEST_NNG_FAIL( + NUTS_FAIL( nng_dialer_set(d, NNG_OPT_LOCADDR, &sa, sizeof(sa)), NNG_ENOTSUP); z = 8192; - TEST_NNG_PASS(nng_dialer_set_size(d, NNG_OPT_RECVMAXSZ, z)); + NUTS_PASS(nng_dialer_set_size(d, NNG_OPT_RECVMAXSZ, z)); z = 0; - TEST_NNG_PASS(nng_dialer_get_size(d, NNG_OPT_RECVMAXSZ, &z)); - TEST_CHECK(z == 8192); - TEST_NNG_FAIL(nng_dialer_set_bool(d, NNG_OPT_RAW, true), NNG_ENOTSUP); - TEST_NNG_PASS(nng_close(s)); + NUTS_PASS(nng_dialer_get_size(d, NNG_OPT_RECVMAXSZ, &z)); + NUTS_TRUE(z == 8192); + NUTS_FAIL(nng_dialer_set_bool(d, NNG_OPT_RAW, true), NNG_ENOTSUP); + NUTS_CLOSE(s); } void @@ -95,40 +84,38 @@ test_ipc_listener_perms(void) { nng_socket s; nng_listener l; - char addr[64]; + char *addr; #ifndef _WIN32 char * path; struct stat st; #endif - testutil_scratch_addr("ipc", sizeof(addr), addr); - - TEST_NNG_PASS(nng_pair0_open(&s)); - TEST_NNG_PASS(nng_listener_create(&l, s, addr)); + NUTS_ADDR(addr, "ipc"); + NUTS_OPEN(s); + NUTS_PASS(nng_listener_create(&l, s, addr)); #ifdef _WIN32 - TEST_NNG_FAIL(nng_listener_set_int(l, NNG_OPT_IPC_PERMISSIONS, 0444), + NUTS_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_set_int(l, NNG_OPT_IPC_PERMISSIONS, S_IFREG), + NUTS_FAIL(nng_listener_set_int(l, NNG_OPT_IPC_PERMISSIONS, S_IFREG), NNG_EINVAL); - 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); + NUTS_PASS(nng_listener_set_int(l, NNG_OPT_IPC_PERMISSIONS, 0444)); + NUTS_PASS(nng_listener_start(l, 0)); + NUTS_TRUE(stat(path, &st) == 0); + NUTS_TRUE((st.st_mode & 0777) == 0444); // Now that it's running, we cannot set it. - TEST_NNG_FAIL( + NUTS_FAIL( nng_listener_set_int(l, NNG_OPT_IPC_PERMISSIONS, 0644), NNG_EBUSY); #endif - TEST_NNG_PASS(nng_close(s)); + NUTS_CLOSE(s); } void @@ -138,26 +125,24 @@ test_ipc_listener_properties(void) nng_listener l; nng_sockaddr sa; size_t z; - char addr[64]; + char *addr; - testutil_scratch_addr("ipc", sizeof(addr), addr); + NUTS_ADDR(addr, "ipc"); + NUTS_OPEN(s); + NUTS_PASS(nng_listen(s, addr, &l, 0)); + NUTS_PASS(nng_listener_get_addr(l, NNG_OPT_LOCADDR, &sa)); + NUTS_TRUE(sa.s_ipc.sa_family == NNG_AF_IPC); + NUTS_MATCH(sa.s_ipc.sa_path, addr + strlen("ipc://")); - TEST_NNG_PASS(nng_pair0_open(&s)); - TEST_NNG_PASS(nng_listen(s, addr, &l, 0)); - 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_set(l, NNG_OPT_LOCADDR, &sa, sizeof(sa)), + NUTS_FAIL(nng_listener_set(l, NNG_OPT_LOCADDR, &sa, sizeof(sa)), NNG_EREADONLY); z = 8192; - TEST_NNG_PASS(nng_listener_set_size(l, NNG_OPT_RECVMAXSZ, z)); + NUTS_PASS(nng_listener_set_size(l, NNG_OPT_RECVMAXSZ, z)); z = 0; - TEST_NNG_PASS(nng_listener_get_size(l, NNG_OPT_RECVMAXSZ, &z)); - TEST_CHECK(z == 8192); - TEST_NNG_FAIL( - nng_listener_set_bool(l, NNG_OPT_RAW, true), NNG_ENOTSUP); - TEST_NNG_PASS(nng_close(s)); + NUTS_PASS(nng_listener_get_size(l, NNG_OPT_RECVMAXSZ, &z)); + NUTS_TRUE(z == 8192); + NUTS_FAIL(nng_listener_set_bool(l, NNG_OPT_RAW, true), NNG_ENOTSUP); + NUTS_CLOSE(s); } void @@ -169,29 +154,28 @@ test_ipc_recv_max(void) nng_socket s1; nng_listener l; size_t sz; - char addr[64]; - - testutil_scratch_addr("ipc", 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, rcvbuf, &sz, 0)); - TEST_CHECK(sz == 95); - TEST_NNG_PASS(nng_send(s1, msg, 150, 0)); - TEST_NNG_FAIL(nng_recv(s0, rcvbuf, &sz, 0), NNG_ETIMEDOUT); - TEST_NNG_PASS(nng_close(s0)); - TEST_NNG_PASS(nng_close(s1)); + char *addr; + + NUTS_ADDR(addr, "ipc"); + NUTS_OPEN(s0); + NUTS_PASS(nng_socket_set_ms(s0, NNG_OPT_RECVTIMEO, 100)); + NUTS_PASS(nng_socket_set_size(s0, NNG_OPT_RECVMAXSZ, 200)); + NUTS_PASS(nng_listener_create(&l, s0, addr)); + NUTS_PASS(nng_socket_get_size(s0, NNG_OPT_RECVMAXSZ, &sz)); + NUTS_TRUE(sz == 200); + NUTS_PASS(nng_listener_set_size(l, NNG_OPT_RECVMAXSZ, 100)); + NUTS_PASS(nng_listener_start(l, 0)); + + NUTS_OPEN(s1); + NUTS_PASS(nng_dial(s1, addr, NULL, 0)); + NUTS_PASS(nng_send(s1, msg, 95, 0)); + NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, 100)); + NUTS_PASS(nng_recv(s0, rcvbuf, &sz, 0)); + NUTS_TRUE(sz == 95); + NUTS_PASS(nng_send(s1, msg, 150, 0)); + NUTS_FAIL(nng_recv(s0, rcvbuf, &sz, 0), NNG_ETIMEDOUT); + NUTS_CLOSE(s0); + NUTS_CLOSE(s1); } void @@ -200,27 +184,27 @@ test_abstract_sockets(void) #ifdef NNG_HAVE_ABSTRACT_SOCKETS nng_socket s1; nng_socket s2; - char addr[64]; + char *addr; nng_pipe p1; nng_pipe p2; nng_sockaddr sa1; nng_sockaddr sa2; char * prefix = "abstract://"; - testutil_scratch_addr("abstract", sizeof(addr), addr); - - TEST_NNG_PASS(nng_pair0_open(&s1)); - TEST_NNG_PASS(nng_pair0_open(&s2)); - TEST_NNG_PASS(testutil_marry_ex(s1, s2, addr, &p1, &p2)); - TEST_NNG_PASS(nng_pipe_get_addr(p1, NNG_OPT_REMADDR, &sa1)); - TEST_NNG_PASS(nng_pipe_get_addr(p2, NNG_OPT_LOCADDR, &sa2)); - TEST_CHECK(sa1.s_family == sa2.s_family); - TEST_CHECK(sa1.s_family == NNG_AF_ABSTRACT); - TEST_CHECK(sa1.s_abstract.sa_len == strlen(addr) - strlen(prefix)); - TEST_CHECK(sa2.s_abstract.sa_len == strlen(addr) - strlen(prefix)); - TEST_NNG_SEND_STR(s1, "ping"); - TEST_NNG_RECV_STR(s2, "ping"); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(s2)); + + NUTS_ADDR(addr, "abstract"); + NUTS_OPEN(s1); + NUTS_OPEN(s2); + NUTS_MARRY_EX(s1, s2, addr, &p1, &p2); + NUTS_PASS(nng_pipe_get_addr(p1, NNG_OPT_REMADDR, &sa1)); + NUTS_PASS(nng_pipe_get_addr(p2, NNG_OPT_LOCADDR, &sa2)); + NUTS_TRUE(sa1.s_family == sa2.s_family); + NUTS_TRUE(sa1.s_family == NNG_AF_ABSTRACT); + NUTS_TRUE(sa1.s_abstract.sa_len == strlen(addr) - strlen(prefix)); + NUTS_TRUE(sa2.s_abstract.sa_len == strlen(addr) - strlen(prefix)); + NUTS_SEND(s1, "ping"); + NUTS_RECV(s2, "ping"); + NUTS_CLOSE(s1); + NUTS_CLOSE(s2); #endif } @@ -238,36 +222,36 @@ test_abstract_auto_bind(void) snprintf(addr, sizeof(addr), "abstract://"); - TEST_NNG_PASS(nng_pair0_open(&s1)); - TEST_NNG_PASS(nng_pair0_open(&s2)); - 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)); + NUTS_OPEN(s1); + NUTS_OPEN(s2); + NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(s2, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(s2, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_listen(s1, addr, &l, 0)); - TEST_NNG_PASS(nng_listener_get_addr(l, NNG_OPT_LOCADDR, &sa)); + NUTS_PASS(nng_listener_get_addr(l, NNG_OPT_LOCADDR, &sa)); // Under linux there are either 8 or 5 hex characters. - TEST_CHECK(sa.s_family == NNG_AF_ABSTRACT); - TEST_CHECK(sa.s_abstract.sa_len < 10); + NUTS_TRUE(sa.s_family == NNG_AF_ABSTRACT); + NUTS_TRUE(sa.s_abstract.sa_len < 10); len = sa.s_abstract.sa_len; memcpy(name, sa.s_abstract.sa_name, len); name[len] = '\0'; - TEST_CHECK(strlen(name) == len); + NUTS_TRUE(strlen(name) == len); (void) snprintf(addr, sizeof(addr), "abstract://%s", name); - TEST_NNG_PASS(nng_dial(s2, addr, NULL, 0)); + NUTS_PASS(nng_dial(s2, addr, NULL, 0)); // first send the ping - TEST_NNG_SEND_STR(s1, "ping"); - TEST_NNG_RECV_STR(s2, "ping"); + NUTS_SEND(s1, "ping"); + NUTS_RECV(s2, "ping"); - TEST_NNG_SEND_STR(s2, "pong"); - TEST_NNG_RECV_STR(s1, "pong"); + NUTS_SEND(s2, "pong"); + NUTS_RECV(s1, "pong"); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(s2)); + NUTS_CLOSE(s1); + NUTS_CLOSE(s2); #endif } @@ -283,15 +267,14 @@ test_abstract_too_long(void) addr[255] = 0; memcpy(addr, "abstract://", strlen("abstract://")); - TEST_ASSERT(strlen(addr) == 255); - TEST_NNG_PASS(nng_pair0_open(&s1)); - 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); + NUTS_ASSERT(strlen(addr) == 255); + NUTS_OPEN(s1); + NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_RECVTIMEO, 1000)); + NUTS_FAIL(nng_listen(s1, addr, NULL, 0), NNG_EADDRINVAL); + NUTS_FAIL(nng_dial(s1, addr, NULL, NNG_FLAG_NONBLOCK), NNG_EADDRINVAL); - TEST_NNG_PASS(nng_close(s1)); + NUTS_CLOSE(s1); #endif } @@ -313,37 +296,37 @@ test_abstract_null(void) snprintf(name, sizeof(name), "a%%00b_%s", rng); snprintf(addr, sizeof(addr), "abstract://%s", name); - TEST_NNG_PASS(nng_pair0_open(&s1)); - TEST_NNG_PASS(nng_pair0_open(&s2)); - 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)); + NUTS_OPEN(s1); + NUTS_OPEN(s2); + NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(s2, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(s2, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_listen(s1, addr, &l, 0)); - TEST_NNG_PASS(nng_listener_get_addr(l, NNG_OPT_LOCADDR, &sa)); + NUTS_PASS(nng_listener_get_addr(l, NNG_OPT_LOCADDR, &sa)); // Under linux there are either 8 or 5 hex characters. - TEST_CHECK(sa.s_family == NNG_AF_ABSTRACT); - TEST_CHECK(sa.s_abstract.sa_len < 32); + NUTS_TRUE(sa.s_family == NNG_AF_ABSTRACT); + NUTS_TRUE(sa.s_abstract.sa_len < 32); len = sa.s_abstract.sa_len; - TEST_CHECK(len == 20); - TEST_CHECK(sa.s_abstract.sa_name[0] == 'a'); - TEST_CHECK(sa.s_abstract.sa_name[1] == '\0'); - TEST_CHECK(sa.s_abstract.sa_name[2] == 'b'); - TEST_CHECK(sa.s_abstract.sa_name[3] == '_'); - TEST_CHECK(memcmp(&sa.s_abstract.sa_name[4], rng, 16) == 0); + NUTS_TRUE(len == 20); + NUTS_TRUE(sa.s_abstract.sa_name[0] == 'a'); + NUTS_TRUE(sa.s_abstract.sa_name[1] == '\0'); + NUTS_TRUE(sa.s_abstract.sa_name[2] == 'b'); + NUTS_TRUE(sa.s_abstract.sa_name[3] == '_'); + NUTS_TRUE(memcmp(&sa.s_abstract.sa_name[4], rng, 16) == 0); - TEST_NNG_PASS(nng_dial(s2, addr, NULL, 0)); + NUTS_PASS(nng_dial(s2, addr, NULL, 0)); // first send the ping - TEST_NNG_SEND_STR(s1, "1234"); - TEST_NNG_RECV_STR(s2, "1234"); + NUTS_SEND(s1, "1234"); + NUTS_RECV(s2, "1234"); - TEST_NNG_SEND_STR(s2, "5678"); - TEST_NNG_RECV_STR(s1, "5678"); + NUTS_SEND(s2, "5678"); + NUTS_RECV(s1, "5678"); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(s2)); + NUTS_CLOSE(s1); + NUTS_CLOSE(s2); #endif } @@ -368,31 +351,31 @@ test_unix_alias(void) snprintf(addr1, sizeof(addr1), "ipc:///tmp/%s", rng); snprintf(addr2, sizeof(addr2), "unix:///tmp/%s", rng); - TEST_NNG_PASS(nng_pair0_open(&s1)); - TEST_NNG_PASS(nng_pair0_open(&s2)); - 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)); + NUTS_OPEN(s1); + NUTS_OPEN(s2); + NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(s2, NNG_OPT_SENDTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_socket_set_ms(s2, NNG_OPT_RECVTIMEO, 1000)); + NUTS_PASS(nng_listen(s1, addr1, NULL, 0)); + NUTS_PASS(nng_dial(s2, addr2, NULL, 0)); // first send the ping - TEST_NNG_SEND_STR(s1, "ping"); - TEST_NNG_PASS(nng_recvmsg(s2, &msg, 0)); - TEST_ASSERT(msg != NULL); - TEST_CHECK(nng_msg_len(msg) == 5); - TEST_STREQUAL(nng_msg_body(msg), "ping"); + NUTS_SEND(s1, "ping"); + NUTS_PASS(nng_recvmsg(s2, &msg, 0)); + NUTS_ASSERT(msg != NULL); + NUTS_TRUE(nng_msg_len(msg) == 5); + NUTS_MATCH(nng_msg_body(msg), "ping"); p = nng_msg_get_pipe(msg); - TEST_NNG_PASS(nng_pipe_get_addr(p, NNG_OPT_REMADDR, &sa1)); - TEST_NNG_PASS(nng_pipe_get_addr(p, NNG_OPT_REMADDR, &sa2)); - TEST_CHECK(sa1.s_family == sa2.s_family); - TEST_CHECK(sa1.s_family == NNG_AF_IPC); - TEST_STREQUAL(sa1.s_ipc.sa_path, sa2.s_ipc.sa_path); + NUTS_PASS(nng_pipe_get_addr(p, NNG_OPT_REMADDR, &sa1)); + NUTS_PASS(nng_pipe_get_addr(p, NNG_OPT_REMADDR, &sa2)); + NUTS_TRUE(sa1.s_family == sa2.s_family); + NUTS_TRUE(sa1.s_family == NNG_AF_IPC); + NUTS_MATCH(sa1.s_ipc.sa_path, sa2.s_ipc.sa_path); nng_msg_free(msg); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(s2)); + NUTS_CLOSE(s1); + NUTS_CLOSE(s2); #endif } diff --git a/src/transport/tcp/tcp_test.c b/src/transport/tcp/tcp_test.c index 88b77ab4..d23227d7 100644 --- a/src/transport/tcp/tcp_test.c +++ b/src/transport/tcp/tcp_test.c @@ -10,12 +10,8 @@ // 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> +#include <nuts.h> // TCP tests. @@ -25,11 +21,10 @@ 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)); + NUTS_OPEN(s); + (void) snprintf(addr, sizeof(addr), "tcp://*:%u", nuts_next_port()); + NUTS_FAIL(nng_dial(s, addr, NULL, 0), NNG_EADDRINVAL); + NUTS_CLOSE(s); } void @@ -40,17 +35,16 @@ test_tcp_wild_card_bind(void) char addr[NNG_MAXADDRLEN]; uint16_t port; - port = testutil_next_port(); + port = nuts_next_port(); - TEST_NNG_PASS(nng_pair0_open(&s1)); - TEST_NNG_PASS(nng_pair0_open(&s2)); + NUTS_OPEN(s1); + NUTS_OPEN(s2); (void) snprintf(addr, sizeof(addr), "tcp4://*:%u", port); - TEST_NNG_PASS(nng_listen(s1, addr, NULL, 0)); - // reset port back one + NUTS_PASS(nng_listen(s1, addr, NULL, 0)); (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)); + NUTS_PASS(nng_dial(s2, addr, NULL, 0)); + NUTS_CLOSE(s2); + NUTS_CLOSE(s1); } void @@ -62,17 +56,16 @@ test_tcp_local_address_connect(void) 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(); + NUTS_OPEN(s1); + NUTS_OPEN(s2); + port = nuts_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 + NUTS_PASS(nng_listen(s1, addr, NULL, 0)); (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)); + NUTS_PASS(nng_dial(s2, addr, NULL, 0)); + NUTS_CLOSE(s2); + NUTS_CLOSE(s1); } void @@ -84,19 +77,19 @@ test_tcp_port_zero_bind(void) 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)); + NUTS_OPEN(s1); + NUTS_OPEN(s2); + NUTS_PASS(nng_listen(s1, "tcp://127.0.0.1:0", &l, 0)); + NUTS_PASS(nng_listener_get_string(l, NNG_OPT_URL, &addr)); + NUTS_TRUE(memcmp(addr, "tcp://", 6) == 0); + NUTS_PASS(nng_listener_get_addr(l, NNG_OPT_LOCADDR, &sa)); + NUTS_TRUE(sa.s_in.sa_family == NNG_AF_INET); + NUTS_TRUE(sa.s_in.sa_port != 0); + NUTS_TRUE(sa.s_in.sa_addr = nuts_be32(0x7f000001)); + NUTS_PASS(nng_dial(s2, addr, NULL, 0)); nng_strfree(addr); - TEST_NNG_PASS(nng_close(s2)); - TEST_NNG_PASS(nng_close(s1)); + NUTS_CLOSE(s2); + NUTS_CLOSE(s1); } void @@ -104,10 +97,10 @@ 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), + NUTS_OPEN(s1); + NUTS_FAIL(nng_dial(s1, "tcp://bogus1;127.0.0.1:80", NULL, 0), NNG_EADDRINVAL); - TEST_NNG_PASS(nng_close(s1)); + NUTS_CLOSE(s1); } void @@ -115,10 +108,10 @@ 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), + NUTS_OPEN(s1); + NUTS_FAIL(nng_dial(s1, "tcp://8.8.8.8;127.0.0.1:80", NULL, 0), NNG_EADDRINVAL); - TEST_NNG_PASS(nng_close(s1)); + NUTS_CLOSE(s1); } void @@ -126,18 +119,18 @@ test_tcp_malformed_address(void) { nng_socket s1; - TEST_NNG_PASS(nng_pair0_open(&s1)); - TEST_NNG_FAIL( + NUTS_OPEN(s1); + NUTS_FAIL( nng_dial(s1, "tcp://127.0.0.1", NULL, 0), NNG_EADDRINVAL); - TEST_NNG_FAIL( + NUTS_FAIL( nng_dial(s1, "tcp://127.0.0.1.32", NULL, 0), NNG_EADDRINVAL); - TEST_NNG_FAIL( + NUTS_FAIL( nng_dial(s1, "tcp://127.0.x.1.32", NULL, 0), NNG_EADDRINVAL); - TEST_NNG_FAIL( + NUTS_FAIL( nng_listen(s1, "tcp://127.0.0.1.32", NULL, 0), NNG_EADDRINVAL); - TEST_NNG_FAIL( + NUTS_FAIL( nng_listen(s1, "tcp://127.0.x.1.32", NULL, 0), NNG_EADDRINVAL); - TEST_NNG_PASS(nng_close(s1)); + NUTS_CLOSE(s1); } void @@ -148,58 +141,58 @@ test_tcp_no_delay_option(void) nng_listener l; bool v; int x; - char addr[64]; + char *addr; - testutil_scratch_addr("tcp", sizeof(addr), addr); + NUTS_ADDR(addr, "tcp"); - TEST_NNG_PASS(nng_pair0_open(&s)); + NUTS_OPEN(s); #ifndef NNG_ELIDE_DEPRECATED - TEST_NNG_PASS(nng_socket_get_bool(s, NNG_OPT_TCP_NODELAY, &v)); - TEST_CHECK(v == true); + NUTS_PASS(nng_socket_get_bool(s, NNG_OPT_TCP_NODELAY, &v)); + NUTS_TRUE(v); #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( + NUTS_PASS(nng_dialer_create(&d, s, addr)); + NUTS_PASS(nng_dialer_get_bool(d, NNG_OPT_TCP_NODELAY, &v)); + NUTS_TRUE(v); + NUTS_PASS(nng_dialer_set_bool(d, NNG_OPT_TCP_NODELAY, false)); + NUTS_PASS(nng_dialer_get_bool(d, NNG_OPT_TCP_NODELAY, &v)); + NUTS_TRUE(v == false); + NUTS_FAIL( nng_dialer_get_int(d, NNG_OPT_TCP_NODELAY, &x), NNG_EBADTYPE); x = 0; - TEST_NNG_FAIL( + NUTS_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( + NUTS_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); + NUTS_PASS(nng_listener_create(&l, s, addr)); + NUTS_PASS(nng_listener_get_bool(l, NNG_OPT_TCP_NODELAY, &v)); + NUTS_TRUE(v == true); x = 0; - TEST_NNG_FAIL( + NUTS_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)), + NUTS_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)); + NUTS_PASS(nng_dialer_close(d)); + NUTS_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)); + NUTS_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); + NUTS_PASS(nng_socket_get_bool(s, NNG_OPT_TCP_NODELAY, &v)); + NUTS_TRUE(v); + NUTS_PASS(nng_socket_set_bool(s, NNG_OPT_TCP_NODELAY, false)); + NUTS_PASS(nng_dialer_create(&d, s, addr)); + NUTS_PASS(nng_dialer_get_bool(d, NNG_OPT_TCP_NODELAY, &v)); + NUTS_TRUE(v == false); #endif - TEST_NNG_PASS(nng_close(s)); + NUTS_CLOSE(s); } void @@ -210,48 +203,48 @@ test_tcp_keep_alive_option(void) nng_listener l; bool v; int x; - char addr[64]; + char *addr; - testutil_scratch_addr("tcp", sizeof(addr), addr); - TEST_NNG_PASS(nng_pair0_open(&s)); + NUTS_ADDR(addr, "tcp"); + NUTS_OPEN(s); #ifndef NNG_ELIDE_DEPRECATED - TEST_NNG_PASS(nng_socket_get_bool(s, NNG_OPT_TCP_KEEPALIVE, &v)); - TEST_CHECK(v == false); + NUTS_PASS(nng_socket_get_bool(s, NNG_OPT_TCP_KEEPALIVE, &v)); + NUTS_TRUE(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( + NUTS_PASS(nng_dialer_create(&d, s, addr)); + NUTS_PASS(nng_dialer_get_bool(d, NNG_OPT_TCP_KEEPALIVE, &v)); + NUTS_TRUE(v == false); + NUTS_PASS(nng_dialer_set_bool(d, NNG_OPT_TCP_KEEPALIVE, true)); + NUTS_PASS(nng_dialer_get_bool(d, NNG_OPT_TCP_KEEPALIVE, &v)); + NUTS_TRUE(v); + NUTS_FAIL( nng_dialer_get_int(d, NNG_OPT_TCP_KEEPALIVE, &x), NNG_EBADTYPE); x = 1; - TEST_NNG_FAIL( + NUTS_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); + NUTS_PASS(nng_listener_create(&l, s, addr)); + NUTS_PASS(nng_listener_get_bool(l, NNG_OPT_TCP_KEEPALIVE, &v)); + NUTS_TRUE(v == false); x = 1; - TEST_NNG_FAIL( + NUTS_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)); + NUTS_PASS(nng_dialer_close(d)); + NUTS_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)); + NUTS_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); + NUTS_PASS(nng_socket_get_bool(s, NNG_OPT_TCP_KEEPALIVE, &v)); + NUTS_TRUE(v == false); + NUTS_PASS(nng_socket_set_bool(s, NNG_OPT_TCP_KEEPALIVE, true)); + NUTS_PASS(nng_dialer_create(&d, s, addr)); + NUTS_PASS(nng_dialer_get_bool(d, NNG_OPT_TCP_KEEPALIVE, &v)); + NUTS_TRUE(v); #endif - TEST_NNG_PASS(nng_close(s)); + NUTS_CLOSE(s); } void @@ -263,32 +256,32 @@ test_tcp_recv_max(void) 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)); + char *addr; + + NUTS_ADDR(addr, "tcp"); + + NUTS_OPEN(s0); + NUTS_PASS(nng_socket_set_ms(s0, NNG_OPT_RECVTIMEO, 100)); + NUTS_PASS(nng_socket_set_size(s0, NNG_OPT_RECVMAXSZ, 200)); + NUTS_PASS(nng_listener_create(&l, s0, addr)); + NUTS_PASS(nng_socket_get_size(s0, NNG_OPT_RECVMAXSZ, &sz)); + NUTS_TRUE(sz == 200); + NUTS_PASS(nng_listener_set_size(l, NNG_OPT_RECVMAXSZ, 100)); + NUTS_PASS(nng_listener_start(l, 0)); + + NUTS_OPEN(s1); + NUTS_PASS(nng_dial(s1, addr, NULL, 0)); + NUTS_PASS(nng_send(s1, msg, 95, 0)); + NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, 100)); + NUTS_PASS(nng_recv(s0, buf, &sz, 0)); + NUTS_TRUE(sz == 95); + NUTS_PASS(nng_send(s1, msg, 150, 0)); + NUTS_FAIL(nng_recv(s0, buf, &sz, 0), NNG_ETIMEDOUT); + NUTS_PASS(nng_close(s0)); + NUTS_CLOSE(s1); } -TEST_LIST = { +NUTS_TESTS = { { "tcp wild card connect fail", test_tcp_wild_card_connect_fail }, { "tcp wild card bind", test_tcp_wild_card_bind }, diff --git a/src/transport/ws/ws_test.c b/src/transport/ws/ws_test.c index f8f122a1..7cbcd9d7 100644 --- a/src/transport/ws/ws_test.c +++ b/src/transport/ws/ws_test.c @@ -8,11 +8,7 @@ // found online at https://opensource.org/licenses/MIT. // -#include <testutil.h> - -#include <nng/protocol/pair0/pair.h> - -#include <acutest.h> +#include <nuts.h> static void test_ws_url_path_filters(void) @@ -21,19 +17,19 @@ test_ws_url_path_filters(void) nng_socket s2; char addr[NNG_MAXADDRLEN]; - TEST_NNG_PASS(nng_pair0_open(&s1)); - TEST_NNG_PASS(nng_pair0_open(&s2)); + NUTS_OPEN(s1); + NUTS_OPEN(s2); - testutil_scratch_addr("ws", sizeof(addr), addr); - TEST_NNG_PASS(nng_listen(s1, addr, NULL, 0)); + nuts_scratch_addr("ws", sizeof(addr), addr); + NUTS_PASS(nng_listen(s1, addr, NULL, 0)); // Now try we just remove the last character for now. // This will make the path different. addr[strlen(addr) - 1] = '\0'; - TEST_NNG_FAIL(nng_dial(s2, addr, NULL, 0), NNG_ECONNREFUSED); + NUTS_FAIL(nng_dial(s2, addr, NULL, 0), NNG_ECONNREFUSED); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(s2)); + NUTS_CLOSE(s1); + NUTS_CLOSE(s2); } static void @@ -53,43 +49,43 @@ test_wild_card_port(void) int port2; int port3; char ws_url[128]; - TEST_NNG_PASS(nng_pair0_open(&s1)); - TEST_NNG_PASS(nng_pair0_open(&s2)); - TEST_NNG_PASS(nng_pair0_open(&s3)); - TEST_NNG_PASS(nng_pair0_open(&s4)); - TEST_NNG_PASS(nng_pair0_open(&s5)); - 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( + NUTS_OPEN(s1); + NUTS_OPEN(s2); + NUTS_OPEN(s3); + NUTS_OPEN(s4); + NUTS_OPEN(s5); + NUTS_OPEN(s6); + NUTS_PASS(nng_listen(s1, "ws://127.0.0.1:0/one", &l1, 0)); + NUTS_PASS( nng_listener_get_int(l1, NNG_OPT_TCP_BOUND_PORT, &port1)); - TEST_CHECK(port1 != 0); + NUTS_TRUE(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( + NUTS_PASS(nng_listen(s2, ws_url, &l2, 0)); + NUTS_PASS( nng_listener_get_int(l2, NNG_OPT_TCP_BOUND_PORT, &port2)); - TEST_CHECK(port1 != 0); - TEST_CHECK(port1 == port2); + NUTS_TRUE(port1 != 0); + NUTS_TRUE(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( + NUTS_PASS(nng_listen(s3, "ws4://127.0.0.1:0/three", &l3, 0)); + NUTS_PASS( nng_listener_get_int(l3, NNG_OPT_TCP_BOUND_PORT, &port3)); - TEST_CHECK(port3 != 0); - TEST_CHECK(port3 != port1); + NUTS_TRUE(port3 != 0); + NUTS_TRUE(port3 != port1); // Let's make sure can dial to each. snprintf(ws_url, sizeof(ws_url), "ws://127.0.0.1:%d/one", port1); - TEST_NNG_PASS(nng_dial(s4, ws_url, NULL, 0)); + NUTS_PASS(nng_dial(s4, ws_url, NULL, 0)); snprintf(ws_url, sizeof(ws_url), "ws://127.0.0.1:%d/two", port2); - TEST_NNG_PASS(nng_dial(s6, ws_url, NULL, 0)); + NUTS_PASS(nng_dial(s6, ws_url, NULL, 0)); snprintf(ws_url, sizeof(ws_url), "ws://127.0.0.1:%d/three", port3); - TEST_NNG_PASS(nng_dial(s6, ws_url, NULL, 0)); - - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(s2)); - TEST_NNG_PASS(nng_close(s3)); - TEST_NNG_PASS(nng_close(s4)); - TEST_NNG_PASS(nng_close(s5)); - TEST_NNG_PASS(nng_close(s6)); + NUTS_PASS(nng_dial(s6, ws_url, NULL, 0)); + + NUTS_CLOSE(s1); + NUTS_CLOSE(s2); + NUTS_CLOSE(s3); + NUTS_CLOSE(s4); + NUTS_CLOSE(s5); + NUTS_CLOSE(s6); } static void @@ -100,21 +96,21 @@ test_wild_card_host(void) char addr[NNG_MAXADDRLEN]; uint16_t port; - TEST_NNG_PASS(nng_pair0_open(&s1)); - TEST_NNG_PASS(nng_pair0_open(&s2)); + NUTS_OPEN(s1); + NUTS_OPEN(s2); - port = testutil_next_port(); + port = nuts_next_port(); // we use ws4 to ensure 127.0.0.1 binding snprintf(addr, sizeof(addr), "ws4://*:%u/test", port); - TEST_NNG_PASS(nng_listen(s1, addr, NULL, 0)); + NUTS_PASS(nng_listen(s1, addr, NULL, 0)); nng_msleep(100); snprintf(addr, sizeof(addr), "ws://127.0.0.1:%u/test", port); - TEST_NNG_PASS(nng_dial(s2, addr, NULL, 0)); + NUTS_PASS(nng_dial(s2, addr, NULL, 0)); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(s2)); + NUTS_CLOSE(s1); + NUTS_CLOSE(s2); } static void @@ -125,21 +121,21 @@ test_empty_host(void) char addr[NNG_MAXADDRLEN]; uint16_t port; - TEST_NNG_PASS(nng_pair0_open(&s1)); - TEST_NNG_PASS(nng_pair0_open(&s2)); + NUTS_OPEN(s1); + NUTS_OPEN(s2); - port = testutil_next_port(); + port = nuts_next_port(); // we use ws4 to ensure 127.0.0.1 binding snprintf(addr, sizeof(addr), "ws4://:%u/test", port); - TEST_NNG_PASS(nng_listen(s1, addr, NULL, 0)); + NUTS_PASS(nng_listen(s1, addr, NULL, 0)); nng_msleep(100); snprintf(addr, sizeof(addr), "ws://127.0.0.1:%u/test", port); - TEST_NNG_PASS(nng_dial(s2, addr, NULL, 0)); + NUTS_PASS(nng_dial(s2, addr, NULL, 0)); - TEST_NNG_PASS(nng_close(s1)); - TEST_NNG_PASS(nng_close(s2)); + NUTS_CLOSE(s1); + NUTS_CLOSE(s2); } void @@ -151,29 +147,28 @@ test_ws_recv_max(void) 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)); + char *addr; + + NUTS_ADDR(addr, "ws"); + NUTS_OPEN(s0); + NUTS_PASS(nng_socket_set_ms(s0, NNG_OPT_RECVTIMEO, 100)); + NUTS_PASS(nng_socket_set_size(s0, NNG_OPT_RECVMAXSZ, 200)); + NUTS_PASS(nng_listener_create(&l, s0, addr)); + NUTS_PASS(nng_socket_get_size(s0, NNG_OPT_RECVMAXSZ, &sz)); + NUTS_TRUE(sz == 200); + NUTS_PASS(nng_listener_set_size(l, NNG_OPT_RECVMAXSZ, 100)); + NUTS_PASS(nng_listener_start(l, 0)); + + NUTS_OPEN(s1); + NUTS_PASS(nng_dial(s1, addr, NULL, 0)); + NUTS_PASS(nng_send(s1, msg, 95, 0)); + NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, 100)); + NUTS_PASS(nng_recv(s0, buf, &sz, 0)); + NUTS_TRUE(sz == 95); + NUTS_PASS(nng_send(s1, msg, 150, 0)); + NUTS_FAIL(nng_recv(s0, buf, &sz, 0), NNG_ETIMEDOUT); + NUTS_CLOSE(s0); + NUTS_CLOSE(s1); } TEST_LIST = { |
