diff options
| author | Garrett D'Amore <garrett@damore.org> | 2020-02-05 00:17:52 -0800 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2020-02-05 00:31:11 -0800 |
| commit | b46d532dc90b52eec42376e8c75bed5c6c7416a4 (patch) | |
| tree | a93bffc9e0643190648a770ad96af43a4f00a4e7 /tests | |
| parent | bd13268f356f83d541c4bce09eae02287d4ddbd9 (diff) | |
| download | nng-b46d532dc90b52eec42376e8c75bed5c6c7416a4.tar.gz nng-b46d532dc90b52eec42376e8c75bed5c6c7416a4.tar.bz2 nng-b46d532dc90b52eec42376e8c75bed5c6c7416a4.zip | |
Survey test rewrite.
This bumps the coverage for survey up. While here fixed a few nits
in req test, and removed the now pointless legacy survey and respond tests.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/CMakeLists.txt | 4 | ||||
| -rw-r--r-- | tests/respondpoll.c | 109 | ||||
| -rw-r--r-- | tests/survey.c | 335 | ||||
| -rw-r--r-- | tests/surveyctx.c | 307 | ||||
| -rw-r--r-- | tests/surveypoll.c | 126 |
5 files changed, 0 insertions, 881 deletions
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index f64d6286..3690a4aa 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -168,10 +168,6 @@ add_nng_test(bus 5) add_nng_test(pipeline 5) add_nng_test(reqctx 5) add_nng_test(reqstress 60) -add_nng_test(respondpoll 5) -add_nng_test(survey 5) -add_nng_test(surveyctx 5) -add_nng_test(surveypoll 5) # compatibility tests # We only support these if ALL the legacy protocols are supported. This diff --git a/tests/respondpoll.c b/tests/respondpoll.c deleted file mode 100644 index 4e869da8..00000000 --- a/tests/respondpoll.c +++ /dev/null @@ -1,109 +0,0 @@ -// -// Copyright 2018 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. -// - -#include <nng/nng.h> -#include <nng/protocol/survey0/respond.h> -#include <nng/protocol/survey0/survey.h> -#include <nng/supplemental/util/platform.h> - -#include "convey.h" -#include "stubs.h" - -TestMain("Respondent pollable", { - atexit(nng_fini); - - Convey("Given a connected survey pair", { - nng_socket surv; - nng_socket resp; - nng_ctx ctx; - - So(nng_surveyor0_open(&surv) == 0); - So(nng_respondent0_open(&resp) == 0); - So(nng_ctx_open(&ctx, resp) == 0); - - So(nng_setopt_ms(surv, NNG_OPT_SENDTIMEO, 2000) == 0); - So(nng_setopt_ms(resp, NNG_OPT_SENDTIMEO, 2000) == 0); - So(nng_setopt_ms(surv, NNG_OPT_RECVTIMEO, 2000) == 0); - So(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, 2000) == 0); - - Reset({ - nng_ctx_close(ctx); - nng_close(surv); - nng_close(resp); - }); - So(nng_listen(resp, "inproc://ctx1", NULL, 0) == 0); - - Convey("Respondent ctx not pollable", { - int fd; - - So(nng_ctx_getopt_int(ctx, NNG_OPT_SENDFD, &fd) == - NNG_ENOTSUP); - So(nng_ctx_getopt_int(ctx, NNG_OPT_RECVFD, &fd) == - NNG_ENOTSUP); - }); - - Convey("Respondent starts not writable", { - int fd; - - So(nng_getopt_int(resp, NNG_OPT_SENDFD, &fd) == 0); - So(fdready(fd) == false); - - Convey("And remains unwritable on connect", { - So(nng_dial(surv, "inproc://ctx1", NULL, 0) == - 0); - nng_msleep(100); - So(fdready(fd) == false); - - Convey("Becomes writable after recv", { - nng_msg *m; - So(nng_msg_alloc(&m, 0) == 0); - So(nng_sendmsg(surv, m, 0) == 0); - So(nng_recvmsg(resp, &m, 0) == 0); - nng_msg_free(m); - So(fdready(fd) == true); - }); - }); - }); - - Convey("Respondent starts not readable", { - int fd; - - So(nng_getopt_int(resp, NNG_OPT_RECVFD, &fd) == 0); - So(fdready(fd) == false); - - Convey("And doesn't become readable on connect", { - So(nng_dial(surv, "inproc://ctx1", NULL, 0) == - 0); - nng_msleep(100); - So(fdready(fd) == false); - }); - - Convey("And becomes readable on data", { - nng_msg *msg; - - So(nng_dial(surv, "inproc://ctx1", NULL, 0) == - 0); - nng_msleep(200); - - So(nng_msg_alloc(&msg, 0) == 0); - So(fdready(fd) == false); - So(nng_msg_append(msg, "xyz", 3) == 0); - So(nng_sendmsg(surv, msg, 0) == 0); - nng_msleep(300); // give time for msg to arrive - So(fdready(fd) == true); - Convey("Is no longer readable after recv", { - So(nng_recvmsg(resp, &msg, 0) == 0); - nng_msg_free(msg); - So(fdready(fd) == false); - }); - }); - }); - }); -}) diff --git a/tests/survey.c b/tests/survey.c deleted file mode 100644 index d1af09ec..00000000 --- a/tests/survey.c +++ /dev/null @@ -1,335 +0,0 @@ -// -// Copyright 2017 Garrett D'Amore <garrett@damore.org> -// Copyright 2017 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. -// - -#include <string.h> - -#include <nng/nng.h> -#include <nng/protocol/survey0/respond.h> -#include <nng/protocol/survey0/survey.h> -#include <nng/supplemental/util/platform.h> - -#include "convey.h" -#include "stubs.h" - -#define APPENDSTR(m, s) nng_msg_append(m, s, strlen(s)) -#define CHECKSTR(m, s) \ - So(nng_msg_len(m) == strlen(s)); \ - So(memcmp(nng_msg_body(m), s, strlen(s)) == 0) - -TestMain("SURVEY pattern", { - const char *addr = "inproc://test"; - - atexit(nng_fini); - - Convey("We can create a SURVEYOR socket", { - nng_socket surv; - - So(nng_surveyor_open(&surv) == 0); - - Reset({ nng_close(surv); }); - - Convey("Recv with no survey fails", { - nng_msg *msg; - So(nng_recvmsg(surv, &msg, 0) == NNG_ESTATE); - }); - - Convey("Survey without responder times out", { - nng_msg *msg; - - So(nng_setopt_ms( - surv, NNG_OPT_SURVEYOR_SURVEYTIME, 50) == 0); - So(nng_msg_alloc(&msg, 0) == 0); - So(nng_sendmsg(surv, msg, 0) == 0); - So(nng_recvmsg(surv, &msg, 0) == NNG_ETIMEDOUT); - }); - }); - - Convey("We can create a RESPONDENT socket", { - nng_socket resp; - So(nng_respondent_open(&resp) == 0); - - Reset({ nng_close(resp); }); - - Convey("Send fails with no survey", { - nng_msg *msg; - So(nng_msg_alloc(&msg, 0) == 0); - So(nng_sendmsg(resp, msg, 0) == NNG_ESTATE); - nng_msg_free(msg); - }); - }); - - Convey("We can create a linked survey pair", { - nng_socket surv; - nng_socket resp; - nng_socket sock; - - So(nng_surveyor_open(&surv) == 0); - So(nng_respondent_open(&resp) == 0); - - Reset({ - nng_close(surv); - nng_close(resp); - }); - - So(nng_setopt_ms(surv, NNG_OPT_SURVEYOR_SURVEYTIME, 50) == 0); - So(nng_listen(surv, addr, NULL, 0) == 0); - So(nng_dial(resp, addr, NULL, 0) == 0); - - // We dial another socket as that will force - // the earlier dial to have completed *fully*. - // This is a hack that only works because our - // listen logic is single threaded. - So(nng_respondent_open(&sock) == 0); - So(nng_dial(sock, addr, NULL, 0) == 0); - nng_close(sock); - - Convey("Survey works", { - nng_msg *msg; - - So(nng_msg_alloc(&msg, 0) == 0); - APPENDSTR(msg, "abc"); - So(nng_sendmsg(surv, msg, 0) == 0); - msg = NULL; - So(nng_recvmsg(resp, &msg, 0) == 0); - CHECKSTR(msg, "abc"); - nng_msg_chop(msg, 3); - APPENDSTR(msg, "def"); - So(nng_sendmsg(resp, msg, 0) == 0); - msg = NULL; - So(nng_recvmsg(surv, &msg, 0) == 0); - CHECKSTR(msg, "def"); - nng_msg_free(msg); - - So(nng_recvmsg(surv, &msg, 0) == NNG_ETIMEDOUT); - - Convey("And goes to non-survey state", { - So(nng_setopt_ms( - surv, NNG_OPT_RECVTIMEO, 200) == 0); - So(nng_recvmsg(surv, &msg, 0) == NNG_ESTATE); - }); - }); - - Convey("Second send cancels pending recv", { - nng_msg *msg; - nng_aio *aio; - - So(nng_aio_alloc(&aio, NULL, NULL) == 0); - So(nng_msg_alloc(&msg, 0) == 0); - APPENDSTR(msg, "one"); - So(nng_sendmsg(surv, msg, 0) == 0); - msg = NULL; - nng_recv_aio(surv, aio); - So(nng_msg_alloc(&msg, 0) == 0); - APPENDSTR(msg, "two"); - So(nng_sendmsg(surv, msg, 0) == 0); - nng_aio_wait(aio); - So(nng_aio_result(aio) == NNG_ECANCELED); - nng_aio_free(aio); - }); - - Convey("Sending a NULL message does not panic", { - nng_aio *aio; - - So(nng_aio_alloc(&aio, NULL, NULL) == 0); - Reset({ nng_aio_free(aio); }); - So(nng_sendmsg(surv, NULL, 0) == NNG_EINVAL); - nng_send_aio(surv, aio); - nng_aio_wait(aio); - So(nng_aio_result(aio) == NNG_EINVAL); - }); - - Convey("Disconnecting before getting response", { - nng_msg *msg; - - So(nng_msg_alloc(&msg, 0) == 0); - So(nng_sendmsg(surv, msg, 0) == 0); - So(nng_recvmsg(resp, &msg, 0) == 0); - nng_close(surv); - nng_msleep(100); - So(nng_sendmsg(resp, msg, 0) == 0); - }); - }); - - Convey("Bad backtrace survey is ignored", { - nng_socket surv; - nng_socket resp; - nng_msg * msg; - So(nng_surveyor0_open_raw(&surv) == 0); - So(nng_respondent0_open(&resp) == 0); - Reset({ - nng_close(surv); - nng_close(resp); - }); - So(nng_listen(resp, "inproc://badsurvback", NULL, 0) == 0); - So(nng_dial(surv, "inproc://badsurvback", NULL, 0) == 0); - So(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, 200) == 0); - nng_msleep(100); - So(nng_msg_alloc(&msg, 0) == 0); - So(nng_msg_header_append_u32(msg, 1) == - 0); // high order bit not set! - So(nng_sendmsg(surv, msg, 0) == 0); - So(nng_recvmsg(resp, &msg, 0) == NNG_ETIMEDOUT); - }); - - Convey("Bad backtrace survey is ignored (raw)", { - nng_socket surv; - nng_socket resp; - nng_msg * msg; - So(nng_surveyor0_open_raw(&surv) == 0); - So(nng_respondent0_open_raw(&resp) == 0); - Reset({ - nng_close(surv); - nng_close(resp); - }); - So(nng_listen(resp, "inproc://badsurvback", NULL, 0) == 0); - So(nng_dial(surv, "inproc://badsurvback", NULL, 0) == 0); - nng_msleep(100); - So(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, 200) == 0); - So(nng_msg_alloc(&msg, 0) == 0); - So(nng_msg_header_append_u32(msg, 1) == - 0); // high order bit not set! - So(nng_sendmsg(surv, msg, 0) == 0); - So(nng_recvmsg(resp, &msg, 0) == NNG_ETIMEDOUT); - }); - - Convey("Missing backtrace survey is ignored", { - nng_socket surv; - nng_socket resp; - nng_msg * msg; - So(nng_surveyor0_open_raw(&surv) == 0); - So(nng_respondent0_open(&resp) == 0); - Reset({ - nng_close(surv); - nng_close(resp); - }); - So(nng_listen(resp, "inproc://badsurvback", NULL, 0) == 0); - So(nng_dial(surv, "inproc://badsurvback", NULL, 0) == 0); - nng_msleep(100); - So(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, 200) == 0); - So(nng_msg_alloc(&msg, 0) == 0); - So(nng_sendmsg(surv, msg, 0) == 0); - So(nng_recvmsg(resp, &msg, 0) == NNG_ETIMEDOUT); - }); - - Convey("Missing backtrace survey is ignored (raw)", { - nng_socket surv; - nng_socket resp; - nng_msg * msg; - So(nng_surveyor0_open_raw(&surv) == 0); - So(nng_respondent0_open_raw(&resp) == 0); - Reset({ - nng_close(surv); - nng_close(resp); - }); - So(nng_listen(resp, "inproc://badsurvback", NULL, 0) == 0); - So(nng_dial(surv, "inproc://badsurvback", NULL, 0) == 0); - nng_msleep(100); - So(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, 200) == 0); - So(nng_msg_alloc(&msg, 0) == 0); - So(nng_sendmsg(surv, msg, 0) == 0); - So(nng_recvmsg(resp, &msg, 0) == NNG_ETIMEDOUT); - }); - - Convey("Bad backtrace response is ignored", { - nng_socket surv; - nng_socket resp; - nng_msg * msg; - So(nng_surveyor0_open(&surv) == 0); - So(nng_respondent0_open_raw(&resp) == 0); - Reset({ - nng_close(surv); - nng_close(resp); - }); - So(nng_listen(resp, "inproc://badsurvback", NULL, 0) == 0); - So(nng_dial(surv, "inproc://badsurvback", NULL, 0) == 0); - So(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, 200) == 0); - So(nng_setopt_ms(surv, NNG_OPT_RECVTIMEO, 200) == 0); - nng_msleep(100); - So(nng_msg_alloc(&msg, 0) == 0); - So(nng_sendmsg(surv, msg, 0) == 0); - So(nng_recvmsg(resp, &msg, 0) == 0); - nng_msg_header_clear(msg); - nng_msg_header_append_u32(msg, 1); - So(nng_sendmsg(resp, msg, 0) == 0); - So(nng_recvmsg(surv, &msg, 0) == NNG_ETIMEDOUT); - }); - - Convey("Bad backtrace response is ignored (raw)", { - nng_socket surv; - nng_socket resp; - nng_msg * msg; - So(nng_surveyor0_open_raw(&surv) == 0); - So(nng_respondent0_open_raw(&resp) == 0); - Reset({ - nng_close(surv); - nng_close(resp); - }); - So(nng_listen(resp, "inproc://badsurvback", NULL, 0) == 0); - So(nng_dial(surv, "inproc://badsurvback", NULL, 0) == 0); - So(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, 200) == 0); - So(nng_setopt_ms(surv, NNG_OPT_RECVTIMEO, 200) == 0); - nng_msleep(100); - So(nng_msg_alloc(&msg, 0) == 0); - So(nng_msg_header_append_u32(msg, 0x80000000) == 0); - So(nng_sendmsg(surv, msg, 0) == 0); - So(nng_recvmsg(resp, &msg, 0) == 0); - nng_msg_header_clear(msg); - nng_msg_header_append_u32(msg, 1); - So(nng_sendmsg(resp, msg, 0) == 0); - So(nng_recvmsg(surv, &msg, 0) == NNG_ETIMEDOUT); - }); - - Convey("Missing backtrace response is ignored", { - nng_socket surv; - nng_socket resp; - nng_msg * msg; - So(nng_surveyor0_open(&surv) == 0); - So(nng_respondent0_open_raw(&resp) == 0); - Reset({ - nng_close(surv); - nng_close(resp); - }); - So(nng_listen(resp, "inproc://badsurvback", NULL, 0) == 0); - So(nng_dial(surv, "inproc://badsurvback", NULL, 0) == 0); - So(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, 200) == 0); - So(nng_setopt_ms(surv, NNG_OPT_RECVTIMEO, 200) == 0); - nng_msleep(100); - So(nng_msg_alloc(&msg, 0) == 0); - So(nng_sendmsg(surv, msg, 0) == 0); - So(nng_recvmsg(resp, &msg, 0) == 0); - nng_msg_header_clear(msg); - So(nng_sendmsg(resp, msg, 0) == 0); - So(nng_recvmsg(surv, &msg, 0) == NNG_ETIMEDOUT); - }); - - Convey("Missing backtrace response is ignored (raw)", { - nng_socket surv; - nng_socket resp; - nng_msg * msg; - So(nng_surveyor0_open_raw(&surv) == 0); - So(nng_respondent0_open_raw(&resp) == 0); - Reset({ - nng_close(surv); - nng_close(resp); - }); - So(nng_listen(resp, "inproc://badsurvback", NULL, 0) == 0); - So(nng_dial(surv, "inproc://badsurvback", NULL, 0) == 0); - So(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, 200) == 0); - So(nng_setopt_ms(surv, NNG_OPT_RECVTIMEO, 200) == 0); - nng_msleep(100); - So(nng_msg_alloc(&msg, 0) == 0); - So(nng_msg_header_append_u32(msg, 0x80000000) == 0); - So(nng_sendmsg(surv, msg, 0) == 0); - So(nng_recvmsg(resp, &msg, 0) == 0); - nng_msg_header_clear(msg); - So(nng_sendmsg(resp, msg, 0) == 0); - So(nng_recvmsg(surv, &msg, 0) == NNG_ETIMEDOUT); - }); -}) diff --git a/tests/surveyctx.c b/tests/surveyctx.c deleted file mode 100644 index d2d1c4d7..00000000 --- a/tests/surveyctx.c +++ /dev/null @@ -1,307 +0,0 @@ -// -// Copyright 2018 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. -// - -#include <string.h> - -#include <nng/nng.h> -#include <nng/protocol/survey0/respond.h> -#include <nng/protocol/survey0/survey.h> -#include <nng/supplemental/util/platform.h> - -#include "convey.h" -#include "stubs.h" - -static struct { - nng_aio *aio; - enum { START, SEND, RECV } state; - nng_socket s; - nng_msg * msg; - int cnt; -} resp_state; - -void -resp_cb(void *notused) -{ - int rv; - (void) notused; - - if (resp_state.state == START) { - resp_state.state = RECV; - nng_recv_aio(resp_state.s, resp_state.aio); - return; - } - if ((rv = nng_aio_result(resp_state.aio)) != 0) { - if (resp_state.msg != NULL) { - nng_msg_free(resp_state.msg); - resp_state.msg = NULL; - } - return; - } - switch (resp_state.state) { - case START: - break; - case RECV: - resp_state.msg = nng_aio_get_msg(resp_state.aio); - resp_state.state = SEND; - nng_aio_set_msg(resp_state.aio, resp_state.msg); - nng_send_aio(resp_state.s, resp_state.aio); - break; - case SEND: - resp_state.msg = NULL; - resp_state.state = RECV; - nng_aio_set_msg(resp_state.aio, NULL); - nng_recv_aio(resp_state.s, resp_state.aio); - resp_state.cnt++; - break; - } -} - -#define NCTX 10 - -void -markr(void *arg) -{ - *(bool *) arg = true; -} - -static void -marks(void *arg) -{ - *(bool *) arg = true; -} - -nng_ctx ctxs[NCTX]; -uint32_t recv_order[NCTX]; -nng_aio *saios[NCTX]; -nng_aio *raios[NCTX]; -bool recd[NCTX]; -bool sent[NCTX]; - -TestMain("Surveyor concurrent contexts", { - int rv; - const char *addr = "inproc://test"; - int i; - - memset(recv_order, 0, NCTX * sizeof(int)); - - atexit(nng_fini); - - Convey("We can use Surveyor contexts concurrently", { - nng_socket surv = NNG_SOCKET_INITIALIZER; - - So(nng_aio_alloc(&resp_state.aio, resp_cb, NULL) == 0); - So(nng_respondent0_open(&resp_state.s) == 0); - So(nng_surveyor0_open(&surv) == 0); - - for (i = 0; i < NCTX; i++) { - sent[i] = recd[i] = false; - recv_order[i] = (uint32_t) i; - if (nng_aio_alloc(&raios[i], markr, &(recd[i])) != 0) { - break; - } - nng_aio_set_timeout(raios[i], 5000); - if (nng_aio_alloc(&saios[i], marks, &(sent[i])) != 0) { - break; - } - nng_aio_set_timeout(saios[i], 5000); - } - - // So(nng_setopt_int(resp_state.s, NNG_OPT_SENDBUF, NCTX) == - // 0); - So(i == NCTX); - for (i = 0; i < NCTX; i++) { - uint32_t tmp; - int ni = rand() % NCTX; // recv index - - tmp = recv_order[i]; - recv_order[i] = recv_order[ni]; - recv_order[ni] = tmp; - } - Reset({ - for (i = 0; i < NCTX; i++) { - nng_aio_free(saios[i]); - nng_aio_free(raios[i]); - } - nng_close(surv); - nng_close(resp_state.s); - nng_aio_free(resp_state.aio); - }); - - So(nng_listen(resp_state.s, addr, NULL, 0) == 0); - So(nng_dial(surv, addr, NULL, 0) == 0); - - nng_msleep(100); // let things establish. - - // Start the rep state machine going. - resp_cb(NULL); - - for (i = 0; i < NCTX; i++) { - if ((rv = nng_ctx_open(&ctxs[i], surv)) != 0) { - break; - } - if (nng_ctx_id(ctxs[i]) < 0) { - Fail("Invalid context ID"); - break; - } - if ((i > 0) && - (nng_ctx_id(ctxs[i]) == nng_ctx_id(ctxs[i - 1]))) { - Fail("Context IDs not different"); - } - } - So(rv == 0); - So(i == NCTX); - - // Send messages - for (i = 0; i < NCTX; i++) { - nng_msg *m; - if ((rv = nng_msg_alloc(&m, sizeof(uint32_t))) != 0) { - Fail("msg alloc failed: %s", nng_strerror(rv)); - } - if ((rv = nng_msg_append_u32(m, i)) != 0) { - Fail("append failed: %s", nng_strerror(rv)); - } - nng_aio_set_msg(saios[i], m); - nng_ctx_send(ctxs[i], saios[i]); - } - So(rv == 0); - So(i == NCTX); - - for (i = 0; i < NCTX; i++) { - nng_aio_wait(saios[i]); - if ((rv = nng_aio_result(saios[i])) != 0) { - Fail("send failed: %s", nng_strerror(rv)); - So(false); - break; - } - } - for (i = 0; i < NCTX; i++) { - if (!sent[i]) { - Fail("Index %d (%d) not sent", i, i); - } - } - - So(rv == 0); - So(i == NCTX); - // Receive answers - for (i = 0; i < NCTX; i++) { - int ri = recv_order[i]; - nng_ctx_recv(ctxs[ri], raios[ri]); - } - - for (i = 0; i < NCTX; i++) { - nng_msg *msg; - uint32_t x; - - nng_aio_wait(raios[i]); - if ((rv = nng_aio_result(raios[i])) != 0) { - Fail("recv %d (%d) %d failed: %s", i, - recv_order[i], resp_state.cnt, - nng_strerror(rv)); - continue; - } - msg = nng_aio_get_msg(raios[i]); - if ((rv = nng_msg_chop_u32(msg, &x)) != 0) { - Fail("recv msg trim: %s", nng_strerror(rv)); - break; - } - if (x != (uint32_t) i) { - Fail("message body mismatch: %x %x\n", x, - (uint32_t) i); - break; - } - - nng_msg_free(msg); - } - for (i = 0; i < NCTX; i++) { - if (!recd[i]) { - Fail("Index %d (%d) not received", i, - recv_order[i]); - break; - } - } - - So(rv == 0); - So(i == NCTX); - }); - - Convey("Given a socket and a context", { - nng_socket surv; - nng_ctx ctx; - nng_aio * aio; - - So(nng_surveyor0_open(&surv) == 0); - So(nng_ctx_open(&ctx, surv) == 0); - So(nng_aio_alloc(&aio, NULL, NULL) == 0); - nng_aio_set_timeout(aio, 1000); - - Reset({ nng_aio_free(aio); }); - - Convey("Recv on the context is ESTATE", { - nng_ctx_recv(ctx, aio); - nng_aio_wait(aio); - So(nng_aio_result(aio) == NNG_ESTATE); - }); - - Convey("Closing the socket aborts a context recv", { - nng_msg *msg; - So(nng_msg_alloc(&msg, 0) == 0); - nng_aio_set_msg(aio, msg); - nng_ctx_send(ctx, aio); - nng_aio_wait(aio); - So(nng_aio_result(aio) == 0); - nng_ctx_recv(ctx, aio); - nng_close(surv); - nng_aio_wait(aio); - So(nng_aio_result(aio) == NNG_ECLOSED); - }); - - Convey("Sending a null message fails", { - nng_ctx_send(ctx, aio); - nng_aio_wait(aio); - So(nng_aio_result(aio) == NNG_EINVAL); - }); - - Convey("Closing the context aborts a context send", { - nng_msg *msg; - So(nng_msg_alloc(&msg, 0) == 0); - nng_aio_set_msg(aio, msg); - nng_ctx_send(ctx, aio); - nng_aio_wait(aio); - So(nng_aio_result(aio) == 0); - nng_ctx_recv(ctx, aio); - nng_ctx_close(ctx); - nng_aio_wait(aio); - So(nng_aio_result(aio) == NNG_ECLOSED); - nng_close(surv); - }); - - Convey("We can set separate survey times", { - nng_duration ms; - So(nng_setopt_ms( - surv, NNG_OPT_SURVEYOR_SURVEYTIME, 100) == 0); - So(nng_ctx_setopt_ms( - ctx, NNG_OPT_SURVEYOR_SURVEYTIME, 200) == 0); - So(nng_getopt_ms( - surv, NNG_OPT_SURVEYOR_SURVEYTIME, &ms) == 0); - So(ms == 100); - So(nng_ctx_getopt_ms( - ctx, NNG_OPT_SURVEYOR_SURVEYTIME, &ms) == 0); - So(ms == 200); - }); - }); - - Convey("Raw mode does not support contexts", { - nng_socket surv; - nng_ctx ctx; - So(nng_surveyor0_open_raw(&surv) == 0); - So(nng_ctx_open(&ctx, surv) == NNG_ENOTSUP); - nng_close(surv); - }); -}) diff --git a/tests/surveypoll.c b/tests/surveypoll.c deleted file mode 100644 index 2d6f02ae..00000000 --- a/tests/surveypoll.c +++ /dev/null @@ -1,126 +0,0 @@ -// -// Copyright 2018 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. -// - -#include <nng/nng.h> -#include <nng/protocol/survey0/respond.h> -#include <nng/protocol/survey0/survey.h> -#include <nng/supplemental/util/platform.h> - -#include "convey.h" -#include "stubs.h" - -TestMain("Survey pollable", { - atexit(nng_fini); - - Convey("Given a connected survey pair", { - nng_socket surv; - nng_socket resp; - nng_ctx ctx; - - So(nng_surveyor0_open(&surv) == 0); - So(nng_respondent0_open(&resp) == 0); - So(nng_ctx_open(&ctx, surv) == 0); - - So(nng_setopt_ms(surv, NNG_OPT_SENDTIMEO, 2000) == 0); - So(nng_setopt_ms(resp, NNG_OPT_SENDTIMEO, 2000) == 0); - So(nng_setopt_ms(surv, NNG_OPT_RECVTIMEO, 2000) == 0); - So(nng_setopt_ms(resp, NNG_OPT_RECVTIMEO, 2000) == 0); - - Reset({ - nng_ctx_close(ctx); - nng_close(surv); - nng_close(resp); - }); - So(nng_listen(resp, "inproc://ctx1", NULL, 0) == 0); - - Convey("Surveyor ctx not pollable", { - int fd; - - So(nng_ctx_getopt_int(ctx, NNG_OPT_SENDFD, &fd) == - NNG_ENOTSUP); - So(nng_ctx_getopt_int(ctx, NNG_OPT_RECVFD, &fd) == - NNG_ENOTSUP); - }); - - Convey("Suveyor starts writable", { - int fd; - - So(nng_getopt_int(surv, NNG_OPT_SENDFD, &fd) == 0); - So(fdready(fd) == true); - - Convey("And becomes readable on connect", { - So(nng_dial(surv, "inproc://ctx1", NULL, 0) == - 0); - nng_msleep(100); - So(fdready(fd) == true); - - Convey("And stays writable", { - // 500 messages should force all - // the way to send depth. - int i; - for (i = 0; i < 500; i++) { - nng_msg *m; - if (nng_msg_alloc(&m, 0) != - 0) { - break; - } - // Fill intermediate queues. - if (nng_sendmsg(surv, m, - NNG_FLAG_NONBLOCK) != - 0) { - nng_msg_free(m); - } - } - So(i == 500); - So(fdready(fd) == true); - }); - }); - }); - - Convey("Surveyor starts not readable", { - int fd; - - So(nng_getopt_int(surv, NNG_OPT_RECVFD, &fd) == 0); - So(fdready(fd) == false); - - Convey("And doesn't become readable on connect", { - So(nng_dial(surv, "inproc://ctx1", NULL, 0) == - 0); - nng_msleep(100); - So(fdready(fd) == false); - }); - - Convey("And becomes readable on data", { - nng_msg *msg; - - So(nng_dial(surv, "inproc://ctx1", NULL, 0) == - 0); - nng_msleep(200); - - So(nng_msg_alloc(&msg, 0) == 0); - So(fdready(fd) == false); - So(nng_msg_append(msg, "xyz", 3) == 0); - So(nng_sendmsg(surv, msg, 0) == 0); - So(nng_recvmsg(resp, &msg, 0) == - 0); // recv on rep - So(nng_sendmsg(resp, msg, 0) == - 0); // echo it back - nng_msleep( - 300); // give time for message to arrive - So(fdready(fd) == true); - Convey("Is no longer readable after recv", { - So(nng_recvmsg(surv, &msg, 0) == 0); - nng_msg_free(msg); - So(fdready(fd) == false); - }); - }); - }); - }); -}) |
