diff options
| author | Garrett D'Amore <garrett@damore.org> | 2020-02-06 19:12:55 -0800 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2020-02-07 18:53:20 -0800 |
| commit | f79eb9473fbee6207b3e992aa884b8913d7cdc46 (patch) | |
| tree | 5724eee808251a6fdec51b9d7a47550cb5852845 /src/protocol/pair1/pair1_test.c | |
| parent | 28c38d4116ffe8a05123cf98f62f7a63fdd1c920 (diff) | |
| download | nng-f79eb9473fbee6207b3e992aa884b8913d7cdc46.tar.gz nng-f79eb9473fbee6207b3e992aa884b8913d7cdc46.tar.bz2 nng-f79eb9473fbee6207b3e992aa884b8913d7cdc46.zip | |
fixes #1189 Extract and deprecate polyamorous mode
Diffstat (limited to 'src/protocol/pair1/pair1_test.c')
| -rw-r--r-- | src/protocol/pair1/pair1_test.c | 486 |
1 files changed, 129 insertions, 357 deletions
diff --git a/src/protocol/pair1/pair1_test.c b/src/protocol/pair1/pair1_test.c index 7011606a..0f0131b5 100644 --- a/src/protocol/pair1/pair1_test.c +++ b/src/protocol/pair1/pair1_test.c @@ -11,8 +11,8 @@ #include <string.h> #include <nng/nng.h> -#include <nng/protocol/pair1/pair.h> #include <nng/protocol/pair0/pair.h> +#include <nng/protocol/pair1/pair.h> #include <testutil.h> @@ -188,33 +188,33 @@ test_mono_raw_header(void) nng_msg * msg; uint32_t v; - TEST_CHECK(nng_pair1_open_raw(&s1) == 0); - TEST_CHECK(nng_pair1_open_raw(&c1) == 0); + TEST_NNG_PASS(nng_pair1_open_raw(&s1)); + TEST_NNG_PASS(nng_pair1_open_raw(&c1)); - TEST_CHECK(nng_setopt_ms(s1, NNG_OPT_RECVTIMEO, SECOND / 5) == 0); - TEST_CHECK(nng_setopt_ms(c1, NNG_OPT_RECVTIMEO, SECOND / 5) == 0); - TEST_CHECK(testutil_marry(s1, c1) == 0); + 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)); // Missing bits in the header - TEST_CHECK(nng_msg_alloc(&msg, 0) == 0); - TEST_CHECK(nng_sendmsg(c1, msg, 0) == 0); - TEST_CHECK(nng_recvmsg(s1, &msg, 0) == NNG_ETIMEDOUT); + 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); // Valid header works - TEST_CHECK(nng_msg_alloc(&msg, 0) == 0); - TEST_CHECK(nng_msg_append_u32(msg, 0xFEEDFACE) == 0); - TEST_CHECK(nng_msg_header_append_u32(msg, 1) == 0); - TEST_CHECK(nng_sendmsg(c1, msg, 0) == 0); - TEST_CHECK(nng_recvmsg(s1, &msg, 0) == 0); - TEST_CHECK(nng_msg_trim_u32(msg, &v) == 0); + 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); nng_msg_free(msg); // Header with reserved bits set dropped - TEST_CHECK(nng_msg_alloc(&msg, 0) == 0); - TEST_CHECK(nng_msg_header_append_u32(msg, 0xDEAD0000) == 0); - TEST_CHECK(nng_sendmsg(c1, msg, 0) == 0); - TEST_CHECK(nng_recvmsg(s1, &msg, 0) == NNG_ETIMEDOUT); + 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); // Header with no chance to add another hop gets dropped TEST_NNG_PASS(nng_msg_alloc(&msg, 0)); @@ -223,313 +223,40 @@ test_mono_raw_header(void) TEST_NNG_FAIL(nng_recvmsg(s1, &msg, 0), NNG_ETIMEDOUT); // With the same bits clear it works - TEST_CHECK(nng_msg_alloc(&msg, 0) == 0); - TEST_CHECK(nng_msg_append_u32(msg, 0xFEEDFACE) == 0); - TEST_CHECK(nng_msg_header_append_u32(msg, 1) == 0); - TEST_CHECK(nng_sendmsg(c1, msg, 0) == 0); - TEST_CHECK(nng_recvmsg(s1, &msg, 0) == 0); - TEST_CHECK(nng_msg_trim_u32(msg, &v) == 0); + 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); nng_msg_free(msg); - TEST_CHECK(nng_close(s1) == 0); - TEST_CHECK(nng_close(c1) == 0); -} - -void -test_poly_best_effort(void) -{ - nng_socket s1; - nng_socket c1; - nng_msg * msg; - - TEST_CHECK(nng_pair1_open(&s1) == 0); - TEST_CHECK(nng_pair1_open(&c1) == 0); - - TEST_CHECK(nng_setopt_bool(s1, NNG_OPT_PAIR1_POLY, true) == 0); - - TEST_CHECK(nng_setopt_int(s1, NNG_OPT_RECVBUF, 1) == 0); - TEST_CHECK(nng_setopt_int(s1, NNG_OPT_SENDBUF, 1) == 0); - TEST_CHECK(nng_setopt_int(c1, NNG_OPT_RECVBUF, 1) == 0); - TEST_CHECK(nng_setopt_ms(s1, NNG_OPT_SENDTIMEO, SECOND) == 0); - - TEST_CHECK(testutil_marry(s1, c1) == 0); - - for (int i = 0; i < 10; i++) { - TEST_CHECK(nng_msg_alloc(&msg, 0) == 0); - TEST_CHECK(nng_sendmsg(s1, msg, 0) == 0); - } - - TEST_CHECK(nng_close(s1) == 0); - TEST_CHECK(nng_close(c1) == 0); -} - -void -test_poly_cooked(void) -{ - nng_socket s1; - nng_socket c1; - nng_socket c2; - nng_msg * msg; - bool v; - nng_pipe p1; - nng_pipe p2; - - TEST_CHECK(nng_pair1_open(&s1) == 0); - TEST_CHECK(nng_pair1_open(&c1) == 0); - TEST_CHECK(nng_pair1_open(&c2) == 0); - TEST_CHECK(nng_setopt_ms(s1, NNG_OPT_SENDTIMEO, SECOND) == 0); - TEST_CHECK(nng_setopt_ms(c1, NNG_OPT_SENDTIMEO, SECOND) == 0); - TEST_CHECK(nng_setopt_ms(c2, NNG_OPT_SENDTIMEO, SECOND) == 0); - TEST_CHECK(nng_setopt_ms(s1, NNG_OPT_RECVTIMEO, SECOND / 10) == 0); - TEST_CHECK(nng_setopt_ms(c1, NNG_OPT_RECVTIMEO, SECOND / 10) == 0); - TEST_CHECK(nng_setopt_ms(c2, NNG_OPT_RECVTIMEO, SECOND / 10) == 0); - - TEST_CHECK(nng_getopt_bool(s1, NNG_OPT_PAIR1_POLY, &v) == 0); - TEST_CHECK(v == false); - - TEST_CHECK(nng_setopt_bool(s1, NNG_OPT_PAIR1_POLY, true) == 0); - TEST_CHECK(nng_getopt_bool(s1, NNG_OPT_PAIR1_POLY, &v) == 0); - TEST_CHECK(v == true); - - TEST_CHECK(testutil_marry(s1, c1) == 0); - TEST_CHECK(testutil_marry(s1, c2) == 0); - - TEST_CHECK(nng_msg_alloc(&msg, 0) == 0); - APPEND_STR(msg, "ONE"); - TEST_CHECK(nng_sendmsg(c1, msg, 0) == 0); - TEST_CHECK(nng_recvmsg(s1, &msg, 0) == 0); - CHECK_STR(msg, "ONE"); - p1 = nng_msg_get_pipe(msg); - TEST_CHECK(nng_pipe_id(p1) > 0); - nng_msg_free(msg); - - TEST_CHECK(nng_msg_alloc(&msg, 0) == 0); - APPEND_STR(msg, "TWO"); - TEST_CHECK(nng_sendmsg(c2, msg, 0) == 0); - TEST_CHECK(nng_recvmsg(s1, &msg, 0) == 0); - CHECK_STR(msg, "TWO"); - p2 = nng_msg_get_pipe(msg); - TEST_CHECK(nng_pipe_id(p2) > 0); - nng_msg_free(msg); - - TEST_CHECK(nng_pipe_id(p1) != nng_pipe_id(p2)); - - TEST_CHECK(nng_msg_alloc(&msg, 0) == 0); - - nng_msg_set_pipe(msg, p1); - APPEND_STR(msg, "UNO"); - TEST_CHECK(nng_sendmsg(s1, msg, 0) == 0); - TEST_CHECK(nng_recvmsg(c1, &msg, 0) == 0); - CHECK_STR(msg, "UNO"); - nng_msg_free(msg); - - TEST_CHECK(nng_msg_alloc(&msg, 0) == 0); - nng_msg_set_pipe(msg, p2); - APPEND_STR(msg, "DOS"); - TEST_CHECK(nng_sendmsg(s1, msg, 0) == 0); - TEST_CHECK(nng_recvmsg(c2, &msg, 0) == 0); - CHECK_STR(msg, "DOS"); - nng_msg_free(msg); - - TEST_CHECK(nng_close(c1) == 0); - - TEST_CHECK(nng_msg_alloc(&msg, 0) == 0); - nng_msg_set_pipe(msg, p1); - APPEND_STR(msg, "EIN"); - TEST_CHECK(nng_sendmsg(s1, msg, 0) == 0); - TEST_CHECK(nng_recvmsg(c2, &msg, 0) == NNG_ETIMEDOUT); - - TEST_CHECK(nng_close(s1) == 0); - TEST_CHECK(nng_close(c2) == 0); -} - -void -test_poly_late(void) -{ - nng_socket s1; - nng_socket c1; - bool v; - - TEST_CHECK(nng_pair1_open(&s1) == 0); - TEST_CHECK(nng_pair1_open(&c1) == 0); - - TEST_CHECK(nng_getopt_bool(s1, NNG_OPT_PAIR1_POLY, &v) == 0); - TEST_CHECK(v == false); - - TEST_CHECK(nng_setopt_bool(s1, NNG_OPT_PAIR1_POLY, true) == 0); - TEST_CHECK(nng_getopt_bool(s1, NNG_OPT_PAIR1_POLY, &v) == 0); - TEST_CHECK(v == true); - - TEST_CHECK(testutil_marry(s1, c1) == 0); - - TEST_CHECK( - nng_setopt_bool(s1, NNG_OPT_PAIR1_POLY, true) == NNG_ESTATE); - TEST_CHECK(nng_close(s1) == 0); - TEST_CHECK(nng_close(c1) == 0); -} - -void -test_poly_default(void) -{ - nng_socket s1; - nng_socket c1; - nng_socket c2; - nng_msg * msg; - - TEST_CHECK(nng_pair1_open(&s1) == 0); - TEST_CHECK(nng_pair1_open(&c1) == 0); - TEST_CHECK(nng_pair1_open(&c2) == 0); - TEST_CHECK(nng_setopt_ms(s1, NNG_OPT_SENDTIMEO, SECOND) == 0); - TEST_CHECK(nng_setopt_ms(c1, NNG_OPT_SENDTIMEO, SECOND) == 0); - TEST_CHECK(nng_setopt_ms(c2, NNG_OPT_SENDTIMEO, SECOND) == 0); - - TEST_CHECK(nng_setopt_bool(s1, NNG_OPT_PAIR1_POLY, true) == 0); - - TEST_CHECK(testutil_marry(s1, c1) == 0); - TEST_CHECK(testutil_marry(s1, c2) == 0); - - // This assumes poly picks the first suitor. Applications - // should not make the same assumption. - TEST_CHECK(nng_msg_alloc(&msg, 0) == 0); - APPEND_STR(msg, "YES"); - TEST_CHECK(nng_sendmsg(s1, msg, 0) == 0); - TEST_CHECK(nng_recvmsg(c1, &msg, 0) == 0); - CHECK_STR(msg, "YES"); - nng_msg_free(msg); - - TEST_CHECK(nng_close(c1) == 0); - testutil_sleep(10); - - // Verify that the other pipe is chosen as the next suitor. - TEST_CHECK(nng_msg_alloc(&msg, 0) == 0); - APPEND_STR(msg, "AGAIN"); - TEST_CHECK(nng_sendmsg(s1, msg, 0) == 0); - TEST_CHECK(nng_recvmsg(c2, &msg, 0) == 0); - CHECK_STR(msg, "AGAIN"); - nng_msg_free(msg); - - TEST_CHECK(nng_close(s1) == 0); - TEST_CHECK(nng_close(c2) == 0); -} - -void -test_poly_raw(void) -{ - nng_socket s1; - nng_socket c1; - nng_socket c2; - nng_msg * msg; - bool v; - uint32_t hops; - nng_pipe p1; - nng_pipe p2; - - TEST_CHECK(nng_pair1_open_raw(&s1) == 0); - TEST_CHECK(nng_pair1_open(&c1) == 0); - TEST_CHECK(nng_pair1_open(&c2) == 0); - TEST_CHECK(nng_setopt_ms(s1, NNG_OPT_RECVTIMEO, SECOND / 5) == 0); - TEST_CHECK(nng_setopt_ms(c1, NNG_OPT_RECVTIMEO, SECOND / 5) == 0); - TEST_CHECK(nng_setopt_ms(c2, NNG_OPT_RECVTIMEO, SECOND / 5) == 0); - - TEST_CHECK(nng_getopt_bool(s1, NNG_OPT_PAIR1_POLY, &v) == 0); - TEST_CHECK(v == 0); - - TEST_CHECK(nng_setopt_bool(s1, NNG_OPT_PAIR1_POLY, true) == 0); - TEST_CHECK(nng_getopt_bool(s1, NNG_OPT_PAIR1_POLY, &v) == 0); - TEST_CHECK(v == true); - - v = false; - TEST_CHECK(nng_getopt_bool(s1, NNG_OPT_RAW, &v) == 0); - TEST_CHECK(v == true); - - TEST_CHECK(testutil_marry(s1, c1) == 0); - TEST_CHECK(testutil_marry(s1, c2) == 0); - - // send/recv works - TEST_CHECK(nng_msg_alloc(&msg, 0) == 0); - APPEND_STR(msg, "ONE"); - TEST_CHECK(nng_sendmsg(c1, msg, 0) == 0); - TEST_CHECK(nng_recvmsg(s1, &msg, 0) == 0); - CHECK_STR(msg, "ONE"); - p1 = nng_msg_get_pipe(msg); - TEST_CHECK(nng_pipe_id(p1) > 0); - TEST_CHECK(nng_msg_header_trim_u32(msg, &hops) == 0); - TEST_CHECK(hops == 1); - nng_msg_free(msg); - - TEST_CHECK(nng_msg_alloc(&msg, 0) == 0); - APPEND_STR(msg, "TWO"); - TEST_CHECK(nng_sendmsg(c2, msg, 0) == 0); - TEST_CHECK(nng_recvmsg(s1, &msg, 0) == 0); - CHECK_STR(msg, "TWO"); - p2 = nng_msg_get_pipe(msg); - TEST_CHECK(nng_pipe_id(p2) > 0); - TEST_CHECK(nng_msg_header_trim_u32(msg, &hops) == 0); - TEST_CHECK(hops == 1); - nng_msg_free(msg); - - TEST_CHECK(nng_pipe_id(p1) != nng_pipe_id(p2)); - - TEST_CHECK(nng_msg_alloc(&msg, 0) == 0); - nng_msg_set_pipe(msg, p1); - APPEND_STR(msg, "UNO"); - TEST_CHECK(nng_msg_header_append_u32(msg, 1) == 0); - TEST_CHECK(nng_sendmsg(s1, msg, 0) == 0); - TEST_CHECK(nng_recvmsg(c1, &msg, 0) == 0); - CHECK_STR(msg, "UNO"); - nng_msg_free(msg); - - TEST_CHECK(nng_msg_alloc(&msg, 0) == 0); - nng_msg_set_pipe(msg, p2); - APPEND_STR(msg, "DOS"); - TEST_CHECK(nng_msg_header_append_u32(msg, 1) == 0); - TEST_CHECK(nng_sendmsg(s1, msg, 0) == 0); - TEST_CHECK(nng_recvmsg(c2, &msg, 0) == 0); - CHECK_STR(msg, "DOS"); - nng_msg_free(msg); - - // Verify closing the pipe stops any of its traffic - TEST_CHECK(nng_msg_alloc(&msg, 0) == 0); - APPEND_STR(msg, "ONE"); - TEST_CHECK(nng_sendmsg(c1, msg, 0) == 0); - TEST_CHECK(nng_recvmsg(s1, &msg, 0) == 0); - CHECK_STR(msg, "ONE"); - p1 = nng_msg_get_pipe(msg); - TEST_CHECK(nng_pipe_id(p1) > 0); - nng_msg_free(msg); - - TEST_CHECK(nng_close(c1) == 0); - - TEST_CHECK(nng_msg_alloc(&msg, 0) == 0); - nng_msg_set_pipe(msg, p1); - APPEND_STR(msg, "EIN"); - TEST_CHECK(nng_msg_header_append_u32(msg, 1) == 0); - TEST_CHECK(nng_sendmsg(s1, msg, 0) == 0); - TEST_CHECK(nng_recvmsg(c2, &msg, 0) == NNG_ETIMEDOUT); + TEST_NNG_PASS(nng_close(s1)); + TEST_NNG_PASS(nng_close(c1)); } void -test_raw(void) +test_pair1_raw(void) { nng_socket s1; bool raw; - TEST_CHECK(nng_pair1_open(&s1) == 0); - TEST_CHECK(nng_getopt_bool(s1, NNG_OPT_RAW, &raw) == 0); + TEST_NNG_PASS(nng_pair1_open(&s1)); + TEST_NNG_PASS(nng_getopt_bool(s1, NNG_OPT_RAW, &raw)); TEST_CHECK(raw == false); - TEST_CHECK(nng_setopt_bool(s1, NNG_OPT_RAW, true) == NNG_EREADONLY); - TEST_CHECK(nng_close(s1) == 0); + TEST_NNG_FAIL(nng_setopt_bool(s1, NNG_OPT_RAW, true), NNG_EREADONLY); + TEST_NNG_PASS(nng_close(s1)); - TEST_CHECK(nng_pair1_open_raw(&s1) == 0); - TEST_CHECK(nng_getopt_bool(s1, NNG_OPT_RAW, &raw) == 0); + TEST_NNG_PASS(nng_pair1_open_raw(&s1)); + TEST_NNG_PASS(nng_getopt_bool(s1, NNG_OPT_RAW, &raw)); TEST_CHECK(raw == true); - TEST_CHECK(nng_setopt_bool(s1, NNG_OPT_RAW, false) == NNG_EREADONLY); - TEST_CHECK(nng_close(s1) == 0); + TEST_NNG_FAIL(nng_setopt_bool(s1, NNG_OPT_RAW, false), NNG_EREADONLY); + TEST_NNG_PASS(nng_close(s1)); } void -test_ttl(void) +test_pair1_ttl(void) { nng_socket s1; nng_socket c1; @@ -537,69 +264,69 @@ test_ttl(void) uint32_t val; int ttl; - TEST_CHECK(nng_pair1_open_raw(&s1) == 0); - TEST_CHECK(nng_pair1_open_raw(&c1) == 0); - TEST_CHECK(nng_setopt_ms(s1, NNG_OPT_RECVTIMEO, SECOND / 5) == 0); - TEST_CHECK(nng_setopt_ms(c1, NNG_OPT_RECVTIMEO, SECOND / 5) == 0); + 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)); // cannot set insane TTLs - TEST_CHECK(nng_setopt_int(s1, NNG_OPT_MAXTTL, 0) == NNG_EINVAL); - TEST_CHECK(nng_setopt_int(s1, NNG_OPT_MAXTTL, 1000) == NNG_EINVAL); + 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); ttl = 8; - TEST_CHECK(nng_setopt(s1, NNG_OPT_MAXTTL, &ttl, 1) == NNG_EINVAL); - TEST_CHECK(nng_setopt_bool(s1, NNG_OPT_MAXTTL, true) == NNG_EBADTYPE); + 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); - TEST_CHECK(testutil_marry(s1, c1) == 0); + TEST_NNG_PASS(testutil_marry(s1, c1)); // Let's check enforcement of TTL - TEST_CHECK(nng_setopt_int(s1, NNG_OPT_MAXTTL, 4) == 0); - TEST_CHECK(nng_getopt_int(s1, NNG_OPT_MAXTTL, &ttl) == 0); + 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); // Bad TTL bounces - TEST_CHECK(nng_msg_alloc(&msg, 0) == 0); - TEST_CHECK(nng_msg_header_append_u32(msg, 4) == 0); - TEST_CHECK(nng_sendmsg(c1, msg, 0) == 0); - TEST_CHECK(nng_recvmsg(s1, &msg, 0) == NNG_ETIMEDOUT); + 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); // Good TTL passes - TEST_CHECK(nng_msg_alloc(&msg, 0) == 0); - TEST_CHECK(nng_msg_append_u32(msg, 0xFEEDFACE) == 0); - TEST_CHECK(nng_msg_header_append_u32(msg, 3) == 0); - TEST_CHECK(nng_sendmsg(c1, msg, 0) == 0); - TEST_CHECK(nng_recvmsg(s1, &msg, 0) == 0); - TEST_CHECK(nng_msg_trim_u32(msg, &val) == 0); + 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_CHECK(nng_msg_header_trim_u32(msg, &val) == 0); + TEST_NNG_PASS(nng_msg_header_trim_u32(msg, &val)); TEST_CHECK(val == 4); nng_msg_free(msg); // Large TTL passes - TEST_CHECK(nng_setopt_int(s1, NNG_OPT_MAXTTL, 15) == 0); - TEST_CHECK(nng_msg_alloc(&msg, 0) == 0); - TEST_CHECK(nng_msg_append_u32(msg, 1234) == 0); - TEST_CHECK(nng_msg_header_append_u32(msg, 14) == 0); - TEST_CHECK(nng_sendmsg(c1, msg, 0) == 0); - TEST_CHECK(nng_recvmsg(s1, &msg, 0) == 0); - TEST_CHECK(nng_msg_trim_u32(msg, &val) == 0); + 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_CHECK(nng_msg_header_trim_u32(msg, &val) == 0); + TEST_NNG_PASS(nng_msg_header_trim_u32(msg, &val)); TEST_CHECK(val == 15); nng_msg_free(msg); // Max TTL fails - TEST_CHECK(nng_setopt_int(s1, NNG_OPT_MAXTTL, 15) == 0); - TEST_CHECK(nng_msg_alloc(&msg, 0) == 0); - TEST_CHECK(nng_msg_header_append_u32(msg, 15) == 0); - TEST_CHECK(nng_sendmsg(c1, msg, 0) == 0); - TEST_CHECK(nng_recvmsg(s1, &msg, 0) == NNG_ETIMEDOUT); - - TEST_CHECK(nng_close(s1) == 0); - TEST_CHECK(nng_close(c1) == 0); + 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)); } void -test_validate_peer(void) +test_pair1_validate_peer(void) { nng_socket s1, s2; nng_stat * stats; @@ -629,20 +356,65 @@ test_validate_peer(void) nng_stats_free(stats); } +void +test_pair1_recv_no_header(void) +{ + nng_socket s; + 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)); + + TEST_NNG_PASS(testutil_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); + + TEST_NNG_PASS(nng_close(c)); + TEST_NNG_PASS(nng_close(s)); +} + +void +test_pair1_recv_garbage(void) +{ + nng_socket s; + 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)); + + TEST_NNG_PASS(testutil_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); + + TEST_NNG_PASS(nng_close(c)); + TEST_NNG_PASS(nng_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 }, - { "pair1 polyamorous best effort", test_poly_best_effort }, - { "pair1 polyamorous cooked", test_poly_cooked }, - { "pair1 polyamorous late", test_poly_late }, - { "pair1 polyamorous default", test_poly_default }, - { "pair1 polyamorous raw", test_poly_raw }, - { "pair1 raw", test_raw }, - { "pair1 ttl", test_ttl }, - { "pair1 validate peer", test_validate_peer }, + { "pair1 raw", test_pair1_raw }, + { "pair1 ttl", test_pair1_ttl }, + { "pair1 validate peer", test_pair1_validate_peer }, + { "pair1 recv no header", test_pair1_recv_no_header }, + { "pair1 recv garbage", test_pair1_recv_garbage }, { NULL, NULL }, }; |
