diff options
Diffstat (limited to 'tests/bufsz.c')
| -rw-r--r-- | tests/bufsz.c | 190 |
1 files changed, 101 insertions, 89 deletions
diff --git a/tests/bufsz.c b/tests/bufsz.c index da6a14cb..4f62905d 100644 --- a/tests/bufsz.c +++ b/tests/bufsz.c @@ -8,97 +8,109 @@ // found online at https://opensource.org/licenses/MIT. // -#include <string.h> - -#include <nng/compat/nanomsg/nn.h> #include <nng/nng.h> -#include <nng/protocol/pubsub0/sub.h> #include <nng/protocol/pair1/pair.h> #include <nng/supplemental/util/platform.h> -#include "trantest.h" -#include "convey.h" -#include "stubs.h" - -#define SECONDS(x) ((x) *1000) - -TestMain("Buffer Options", { - - atexit(nng_fini); - - Convey("We are able to open a PAIR socket", { - nng_socket s1; - - So(nng_pair_open(&s1) == 0); - - Reset({ nng_close(s1); }); - - Convey("Set/Get Recv Buf Option", { - int cnt; - So(nng_setopt_int(s1, NNG_OPT_RECVBUF, 10) == 0); - So(nng_getopt_int(s1, NNG_OPT_RECVBUF, &cnt) == 0); - So(cnt == 10); - So(nng_setopt_size(s1, NNG_OPT_RECVBUF, 42) == - NNG_EBADTYPE); - - }); - Convey("Set/Get Send Buf Option", { - int cnt; - So(nng_setopt_int(s1, NNG_OPT_SENDBUF, 10) == 0); - So(nng_getopt_int(s1, NNG_OPT_SENDBUF, &cnt) == 0); - So(cnt == 10); - So(nng_setopt_size(s1, NNG_OPT_SENDBUF, 42) == - NNG_EBADTYPE); - - }); - - // NOTE: We are going to use the compat mode, but - // this assumes that the socket is the same between compat - // and current mode. This is true, but normal applications - // MUST NOT assume this. We only do so for testing. - Convey("Legacy Recv Buf Option", { - int cnt; - int os = (int) s1.id; - size_t sz = sizeof(cnt); - So(nng_setopt_int(s1, NNG_OPT_RECVBUF, 10) == 0); - So(nn_getsockopt( - os, NN_SOL_SOCKET, NN_RCVBUF, &cnt, &sz) == 0); - So(cnt == 10240); - cnt = 1; - So(nn_setsockopt( - os, NN_SOL_SOCKET, NN_RCVBUF, &cnt, sz) == 0); - So(nn_getsockopt( - os, NN_SOL_SOCKET, NN_RCVBUF, &cnt, &sz) == 0); - So(cnt == 1024); // round up! - So(nng_getopt_int(s1, NNG_OPT_RECVBUF, &cnt) == 0); - So(cnt == 1); - - So(nn_setsockopt( - os, NN_SOL_SOCKET, NN_RCVBUF, &cnt, 100) == -1); - So(nn_errno() == EINVAL); - }); - Convey("Legacy Send Buf Option", { - int cnt; - int os = (int) s1.id; - size_t sz = sizeof(cnt); - So(nng_setopt_int(s1, NNG_OPT_SENDBUF, 10) == 0); - So(nn_getsockopt( - os, NN_SOL_SOCKET, NN_SNDBUF, &cnt, &sz) == 0); - So(cnt == 10240); - cnt = 1; - So(nn_setsockopt( - os, NN_SOL_SOCKET, NN_SNDBUF, &cnt, sz) == 0); - So(nn_getsockopt( - os, NN_SOL_SOCKET, NN_SNDBUF, &cnt, &sz) == 0); - So(cnt == 1024); // round up! - So(nng_getopt_int(s1, NNG_OPT_SENDBUF, &cnt) == 0); - So(cnt == 1); - - So(nn_setsockopt( - os, NN_SOL_SOCKET, NN_SNDBUF, &cnt, 100) == -1); - So(nn_errno() == EINVAL); - }); - - }); -}) +#include <nng/compat/nanomsg/nn.h> + +#include "acutest.h" + +void +test_buffer_options(void) +{ + nng_socket s1; + int val; + size_t sz; + char * opt; + + char *cases[] = { + NNG_OPT_RECVBUF, + NNG_OPT_SENDBUF, + NULL, + }; + + TEST_CHECK(nng_pair1_open(&s1) == 0); + for (int i = 0; (opt = cases[i]) != NULL; i++) { + + TEST_CASE(opt); + + // Can't receive a size into zero bytes. + sz = 0; + TEST_CHECK(nng_getopt(s1, opt, &val, &sz) == NNG_EINVAL); + + // Can set a valid size + TEST_CHECK(nng_setopt_int(s1, opt, 1234) == 0); + TEST_CHECK(nng_getopt_int(s1, opt, &val) == 0); + TEST_CHECK(val == 1234); + + val = 0; + sz = sizeof(val); + TEST_CHECK(nng_getopt(s1, opt, &val, &sz) == 0); + TEST_CHECK(val == 1234); + TEST_CHECK(sz == sizeof(val)); + + // Can't set a negative size + TEST_CHECK(nng_setopt_int(s1, opt, -5) == NNG_EINVAL); + + // Can't pass a buf too small for size + sz = sizeof(val) - 1; + val = 1; + TEST_CHECK(nng_setopt(s1, opt, &val, sz) == NNG_EINVAL); + // Buffer sizes are limited to sane levels + TEST_CHECK(nng_setopt_int(s1, opt, 0x100000) == NNG_EINVAL); + } + TEST_CHECK(nng_close(s1) == 0); +} + +void +test_buffer_legacy(void) +{ + nng_socket s1; + char * opt; + + char *cases[] = { + NNG_OPT_RECVBUF, + NNG_OPT_SENDBUF, + NULL, + }; + int legacy[] = { + NN_RCVBUF, + NN_SNDBUF, + }; + + TEST_CHECK(nng_pair1_open(&s1) == 0); + for (int i = 0; (opt = cases[i]) != NULL; i++) { + int cnt; + int os = (int) s1.id; + size_t sz; + int nnopt = legacy[i]; + + TEST_CASE(opt); + + sz = sizeof(cnt); + TEST_CHECK(nng_setopt_int(s1, opt, 10) == 0); + TEST_CHECK( + nn_getsockopt(os, NN_SOL_SOCKET, nnopt, &cnt, &sz) == 0); + TEST_CHECK(cnt == 10240); // 1k multiple + + cnt = 1; + TEST_CHECK( + nn_setsockopt(os, NN_SOL_SOCKET, nnopt, &cnt, sz) == 0); + TEST_CHECK(nn_getsockopt(os, NN_SOL_SOCKET, nnopt, &cnt, &sz) == 0); + TEST_CHECK(cnt == 1024); // round up! + TEST_CHECK(nng_getopt_int(s1, opt, &cnt) == 0); + TEST_CHECK(cnt == 1); + + TEST_CHECK(nn_setsockopt(os, NN_SOL_SOCKET, nnopt, &cnt, 100) == -1); + TEST_CHECK(nn_errno() == EINVAL); + } + TEST_CHECK(nng_close(s1) == 0); +} + +TEST_LIST = { + { "buffer options", test_buffer_options }, + { "buffer legacy", test_buffer_legacy }, + { NULL, NULL }, +}; |
