diff options
| author | Garrett D'Amore <garrett@damore.org> | 2017-09-25 12:49:10 -0700 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2017-09-27 14:38:12 -0700 |
| commit | 64db0f085be0c9efc6dca8d9e72d3e5a47cb792e (patch) | |
| tree | 475520498d8ebe9e47e9785d8f9d209c87582400 /tests/sock.c | |
| parent | 86a96e5bf1b207a8b1aa925e1d9f73ce834505b8 (diff) | |
| download | nng-64db0f085be0c9efc6dca8d9e72d3e5a47cb792e.tar.gz nng-64db0f085be0c9efc6dca8d9e72d3e5a47cb792e.tar.bz2 nng-64db0f085be0c9efc6dca8d9e72d3e5a47cb792e.zip | |
Refactor option handling APIs.
This makes the APIs use string keys, and largely eliminates the use of
integer option IDs altogether. The underlying registration for options
is also now a bit richer, letting protcols and transports declare the
actual options they use, rather than calling down into each entry point
carte blanche and relying on ENOTSUP.
This code may not be as fast as the integers was, but it is more intuitive,
easier to extend, and is not on any hot code paths. (If you're diddling
options on a hot code path you're doing something wrong.)
Diffstat (limited to 'tests/sock.c')
| -rw-r--r-- | tests/sock.c | 168 |
1 files changed, 84 insertions, 84 deletions
diff --git a/tests/sock.c b/tests/sock.c index 6c911250..ca125214 100644 --- a/tests/sock.c +++ b/tests/sock.c @@ -64,7 +64,7 @@ TestMain("Socket Operations", { now = nng_clock(); So(now > 0); - So(nng_setopt_usec(s1, nng_optid_recvtimeo, to) == 0); + So(nng_setopt_usec(s1, NNG_OPT_RECVTIMEO, to) == 0); So(nng_recvmsg(s1, &msg, 0) == NNG_ETIMEDOUT); So(msg == NULL); So(nng_clock() >= (now + to)); @@ -88,7 +88,7 @@ TestMain("Socket Operations", { So(msg != NULL); now = nng_clock(); - So(nng_setopt_usec(s1, nng_optid_sendtimeo, to) == 0); + So(nng_setopt_usec(s1, NNG_OPT_SENDTIMEO, to) == 0); So(nng_sendmsg(s1, msg, 0) == NNG_ETIMEDOUT); So(nng_clock() >= (now + to)); So(nng_clock() < (now + (to * 2))); @@ -100,17 +100,15 @@ TestMain("Socket Operations", { int64_t v = 0; size_t sz; - So(nng_setopt_usec(s1, nng_optid_sendtimeo, to) == 0); + So(nng_setopt_usec(s1, NNG_OPT_SENDTIMEO, to) == 0); Convey("Read only options handled properly", { - So(nng_setopt_int(s1, nng_optid_recvfd, 0) == - NNG_EINVAL); - So(nng_setopt_int(s1, nng_optid_sendfd, 0) == - NNG_EINVAL); - So(nng_setopt(s1, nng_optid_locaddr, "a", 1) == - NNG_EINVAL); - So(nng_setopt(s1, nng_optid_remaddr, "a", 1) == - NNG_EINVAL); + So(nng_setopt_int(s1, NNG_OPT_RECVFD, 0) == + NNG_EREADONLY); + So(nng_setopt_int(s1, NNG_OPT_SENDFD, 0) == + NNG_EREADONLY); + So(nng_setopt(s1, NNG_OPT_LOCADDR, "a", 1) == + NNG_EREADONLY); }); Convey("URL option works", { @@ -126,17 +124,21 @@ TestMain("Socket Operations", { memset(url, 0, sizeof(url)); sz = sizeof(url); So(nng_listener_getopt( - l, nng_optid_url, url, &sz) == 0); + l, NNG_OPT_URL, url, &sz) == 0); So(strcmp(url, "inproc://url1") == 0); + So(nng_listener_setopt(l, NNG_OPT_URL, url, + sz) == NNG_EREADONLY); sz = sizeof(url); So(nng_dialer_getopt( - d, nng_optid_url, url, &sz) == 0); + d, NNG_OPT_URL, url, &sz) == 0); So(strcmp(url, "inproc://url2") == 0); + So(nng_dialer_setopt(d, NNG_OPT_URL, url, + sz) == NNG_EREADONLY); Reset({ nng_dialer_close(d); nng_listener_close(l); - }) + }); }); Convey("We can apply options before endpoint", { @@ -146,52 +148,52 @@ TestMain("Socket Operations", { addr, "ipc:///tmp/lopt_%u"); So(nng_setopt_size( - s1, nng_optid_recvmaxsz, 543) == 0); + s1, NNG_OPT_RECVMAXSZ, 543) == 0); So(nng_listener_create(&l, s1, addr) == 0); So(nng_listener_getopt_size( - l, nng_optid_recvmaxsz, &sz) == 0); + l, NNG_OPT_RECVMAXSZ, &sz) == 0); So(sz == 543); Convey("Endpoint option can be overridden", { So(nng_listener_setopt_size(l, - nng_optid_recvmaxsz, 678) == 0); + NNG_OPT_RECVMAXSZ, 678) == 0); So(nng_listener_getopt_size(l, - nng_optid_recvmaxsz, &sz) == 0); + NNG_OPT_RECVMAXSZ, &sz) == 0); So(sz == 678); So(nng_getopt_size(s1, - nng_optid_recvmaxsz, &sz) == 0); + NNG_OPT_RECVMAXSZ, &sz) == 0); So(sz == 543); }); Convey("And socket overrides again", { So(nng_setopt_size(s1, - nng_optid_recvmaxsz, 911) == 0); + NNG_OPT_RECVMAXSZ, 911) == 0); So(nng_listener_getopt_size(l, - nng_optid_recvmaxsz, &sz) == 0); + NNG_OPT_RECVMAXSZ, &sz) == 0); So(sz == 911); }); }); Convey("Short size is not copied", { sz = 0; So(nng_getopt( - s1, nng_optid_sendtimeo, &v, &sz) == 0); + s1, NNG_OPT_SENDTIMEO, &v, &sz) == 0); So(sz == sizeof(v)); So(v == 0); sz = 0; - So(nng_getopt(s1, nng_optid_reconnmint, &v, - &sz) == 0); + So(nng_getopt( + s1, NNG_OPT_RECONNMINT, &v, &sz) == 0); So(v == 0); sz = 0; - So(nng_getopt(s1, nng_optid_reconnmaxt, &v, - &sz) == 0); + So(nng_getopt( + s1, NNG_OPT_RECONNMAXT, &v, &sz) == 0); So(v == 0); }); Convey("Correct size is copied", { sz = sizeof(v); So(nng_getopt( - s1, nng_optid_sendtimeo, &v, &sz) == 0); + s1, NNG_OPT_SENDTIMEO, &v, &sz) == 0); So(sz == sizeof(v)); So(v == 1234); }); @@ -199,47 +201,47 @@ TestMain("Socket Operations", { Convey("Short size buf is not copied", { int l = 5; sz = 0; - So(nng_getopt( - s1, nng_optid_recvbuf, &l, &sz) == 0); + So(nng_getopt(s1, NNG_OPT_RECVBUF, &l, &sz) == + 0); So(sz == sizeof(l)); So(l == 5); }); Convey("Insane buffer size fails", { - So(nng_setopt_int(s1, nng_optid_recvbuf, + So(nng_setopt_int(s1, NNG_OPT_RECVBUF, 0x100000) == NNG_EINVAL); - So(nng_setopt_int(s1, nng_optid_recvbuf, - -200) == NNG_EINVAL); + So(nng_setopt_int(s1, NNG_OPT_RECVBUF, -200) == + NNG_EINVAL); }); Convey("Negative timeout fails", { - So(nng_setopt_usec(s1, nng_optid_recvtimeo, + So(nng_setopt_usec(s1, NNG_OPT_RECVTIMEO, -5) == NNG_EINVAL); }); Convey("Short timeout fails", { to = 0; sz = sizeof(to) - 1; - So(nng_setopt(s1, nng_optid_recvtimeo, &to, + So(nng_setopt(s1, NNG_OPT_RECVTIMEO, &to, sz) == NNG_EINVAL); - So(nng_setopt(s1, nng_optid_reconnmint, &to, + So(nng_setopt(s1, NNG_OPT_RECONNMINT, &to, sz) == NNG_EINVAL); }); Convey("Bogus raw fails", { - So(nng_setopt_int(s1, nng_optid_raw, 42) == + So(nng_setopt_int(s1, NNG_OPT_RAW, 42) == NNG_EINVAL); - So(nng_setopt_int(s1, nng_optid_raw, -42) == + So(nng_setopt_int(s1, NNG_OPT_RAW, -42) == NNG_EINVAL); - So(nng_setopt_int(s1, nng_optid_raw, 0) == 0); - So(nng_setopt(s1, nng_optid_raw, "a", 1) == + So(nng_setopt_int(s1, NNG_OPT_RAW, 0) == 0); + So(nng_setopt(s1, NNG_OPT_RAW, "a", 1) == NNG_EINVAL); }); Convey("Unsupported options fail", { char *crap = "crap"; - So(nng_setopt(s1, nng_optid_sub_subscribe, - crap, strlen(crap)) == NNG_ENOTSUP); + So(nng_setopt(s1, NNG_OPT_SUB_SUBSCRIBE, crap, + strlen(crap)) == NNG_ENOTSUP); }); Convey("Bogus sizes fail", { @@ -247,30 +249,30 @@ TestMain("Socket Operations", { int i; So(nng_setopt_size( - s1, nng_optid_recvmaxsz, 6550) == 0); + s1, NNG_OPT_RECVMAXSZ, 6550) == 0); So(nng_getopt_size( - s1, nng_optid_recvmaxsz, &v) == 0); + s1, NNG_OPT_RECVMAXSZ, &v) == 0); So(v == 6550); v = 102400; - So(nng_setopt(s1, nng_optid_recvmaxsz, &v, - 1) == NNG_EINVAL); + So(nng_setopt(s1, NNG_OPT_RECVMAXSZ, &v, 1) == + NNG_EINVAL); So(nng_getopt_size( - s1, nng_optid_recvmaxsz, &v) == 0); + s1, NNG_OPT_RECVMAXSZ, &v) == 0); So(v == 6550); i = 42; - So(nng_setopt(s1, nng_optid_recvbuf, &i, 1) == + So(nng_setopt(s1, NNG_OPT_RECVBUF, &i, 1) == NNG_EINVAL); if (sizeof(size_t) == 8) { v = 0x10000; v <<= 30; So(nng_setopt_size(s1, - nng_optid_recvmaxsz, + NNG_OPT_RECVMAXSZ, v) == NNG_EINVAL); So(nng_getopt_size(s1, - nng_optid_recvmaxsz, &v) == 0); + NNG_OPT_RECVMAXSZ, &v) == 0); So(v == 6550); } }); @@ -343,21 +345,20 @@ TestMain("Socket Operations", { Convey("Options work", { size_t sz; So(nng_dialer_setopt_size( - ep, nng_optid_recvmaxsz, 4321) == 0); + ep, NNG_OPT_RECVMAXSZ, 4321) == 0); So(nng_dialer_getopt_size( - ep, nng_optid_recvmaxsz, &sz) == 0); + ep, NNG_OPT_RECVMAXSZ, &sz) == 0); So(sz == 4321); }); Convey("Socket opts not for dialer", { // Not appropriate for dialer. - So(nng_dialer_setopt_int( - ep, nng_optid_raw, 1) == NNG_ENOTSUP); + So(nng_dialer_setopt_int(ep, NNG_OPT_RAW, 1) == + NNG_ENOTSUP); So(nng_dialer_setopt_usec(ep, - nng_optid_reconnmint, - 1) == NNG_ENOTSUP); + NNG_OPT_RECONNMINT, 1) == NNG_ENOTSUP); }); Convey("Bad size checks", { - So(nng_dialer_setopt(ep, nng_optid_recvmaxsz, + So(nng_dialer_setopt(ep, NNG_OPT_RECVMAXSZ, "a", 1) == NNG_EINVAL); }); Convey("Cannot listen", @@ -372,21 +373,20 @@ TestMain("Socket Operations", { Convey("Options work", { size_t sz; So(nng_listener_setopt_size( - ep, nng_optid_recvmaxsz, 4321) == 0); + ep, NNG_OPT_RECVMAXSZ, 4321) == 0); So(nng_listener_getopt_size( - ep, nng_optid_recvmaxsz, &sz) == 0); + ep, NNG_OPT_RECVMAXSZ, &sz) == 0); So(sz == 4321); }); Convey("Socket opts not for dialer", { // Not appropriate for dialer. So(nng_listener_setopt_int( - ep, nng_optid_raw, 1) == NNG_ENOTSUP); + ep, NNG_OPT_RAW, 1) == NNG_ENOTSUP); So(nng_listener_setopt_usec(ep, - nng_optid_reconnmint, - 1) == NNG_ENOTSUP); + NNG_OPT_RECONNMINT, 1) == NNG_ENOTSUP); }); Convey("Bad size checks", { - So(nng_listener_setopt(ep, nng_optid_recvmaxsz, + So(nng_listener_setopt(ep, NNG_OPT_RECVMAXSZ, "a", 1) == NNG_EINVAL); }); Convey("Cannot dial", @@ -399,30 +399,30 @@ TestMain("Socket Operations", { uint64_t t; So(nng_dialer_setopt_size( - 1999, nng_optid_recvmaxsz, 10) == NNG_ENOENT); + 1999, NNG_OPT_RECVMAXSZ, 10) == NNG_ENOENT); So(nng_listener_setopt_size( - 1999, nng_optid_recvmaxsz, 10) == NNG_ENOENT); + 1999, NNG_OPT_RECVMAXSZ, 10) == NNG_ENOENT); s = 1; - So(nng_dialer_getopt(1999, nng_optid_raw, &i, &s) == + So(nng_dialer_getopt(1999, NNG_OPT_RAW, &i, &s) == NNG_ENOENT); - So(nng_listener_getopt(1999, nng_optid_raw, &i, &s) == + So(nng_listener_getopt(1999, NNG_OPT_RAW, &i, &s) == NNG_ENOENT); So(nng_dialer_getopt_size( - 1999, nng_optid_recvmaxsz, &s) == NNG_ENOENT); + 1999, NNG_OPT_RECVMAXSZ, &s) == NNG_ENOENT); So(nng_listener_getopt_size( - 1999, nng_optid_recvmaxsz, &s) == NNG_ENOENT); + 1999, NNG_OPT_RECVMAXSZ, &s) == NNG_ENOENT); - So(nng_dialer_getopt_int(1999, nng_optid_raw, &i) == + So(nng_dialer_getopt_int(1999, NNG_OPT_RAW, &i) == NNG_ENOENT); - So(nng_listener_getopt_int(1999, nng_optid_raw, &i) == + So(nng_listener_getopt_int(1999, NNG_OPT_RAW, &i) == NNG_ENOENT); - So(nng_dialer_getopt_usec( - 1999, nng_optid_linger, &t) == NNG_ENOENT); + So(nng_dialer_getopt_usec(1999, NNG_OPT_LINGER, &t) == + NNG_ENOENT); So(nng_listener_getopt_usec( - 1999, nng_optid_linger, &t) == NNG_ENOENT); + 1999, NNG_OPT_LINGER, &t) == NNG_ENOENT); }); @@ -433,8 +433,8 @@ TestMain("Socket Operations", { trantest_next_address(addr, "ipc:///tmp/sock_test_%u"); So(nng_dialer_create(&ep, s1, addr) == 0); So(nng_dialer_start(ep, NNG_FLAG_NONBLOCK) == 0); - So(nng_dialer_setopt_size( - ep, nng_optid_recvmaxsz, 10) == NNG_ESTATE); + So(nng_dialer_setopt_size(ep, NNG_OPT_RECVMAXSZ, 10) == + NNG_ESTATE); So(nng_dialer_close(ep) == 0); So(nng_dialer_close(ep) == NNG_ENOENT); }); @@ -448,7 +448,7 @@ TestMain("Socket Operations", { So(nng_listener_create(&ep, s1, addr) == 0); So(nng_listener_start(ep, 0) == 0); So(nng_listener_setopt_size( - ep, nng_optid_recvmaxsz, 10) == NNG_ESTATE); + ep, NNG_OPT_RECVMAXSZ, 10) == NNG_ESTATE); So(nng_listener_close(ep) == 0); So(nng_listener_close(ep) == NNG_ENOENT); }); @@ -464,17 +464,17 @@ TestMain("Socket Operations", { So(nng_pair_open(&s2) == 0); Reset({ nng_close(s2); }); - So(nng_setopt_int(s1, nng_optid_recvbuf, 1) == 0); - So(nng_getopt_int(s1, nng_optid_recvbuf, &len) == 0); + So(nng_setopt_int(s1, NNG_OPT_RECVBUF, 1) == 0); + So(nng_getopt_int(s1, NNG_OPT_RECVBUF, &len) == 0); So(len == 1); - So(nng_setopt_int(s1, nng_optid_sendbuf, 1) == 0); - So(nng_setopt_int(s2, nng_optid_sendbuf, 1) == 0); + So(nng_setopt_int(s1, NNG_OPT_SENDBUF, 1) == 0); + So(nng_setopt_int(s2, NNG_OPT_SENDBUF, 1) == 0); - So(nng_setopt_usec(s1, nng_optid_sendtimeo, to) == 0); - So(nng_setopt_usec(s1, nng_optid_recvtimeo, to) == 0); - So(nng_setopt_usec(s2, nng_optid_sendtimeo, to) == 0); - So(nng_setopt_usec(s2, nng_optid_recvtimeo, to) == 0); + So(nng_setopt_usec(s1, NNG_OPT_SENDTIMEO, to) == 0); + So(nng_setopt_usec(s1, NNG_OPT_RECVTIMEO, to) == 0); + So(nng_setopt_usec(s2, NNG_OPT_SENDTIMEO, to) == 0); + So(nng_setopt_usec(s2, NNG_OPT_RECVTIMEO, to) == 0); So(nng_listen(s1, a, NULL, 0) == 0); So(nng_dial(s2, a, NULL, 0) == 0); |
