aboutsummaryrefslogtreecommitdiff
path: root/tests/sock.c
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2017-08-12 10:16:54 -0700
committerGarrett D'Amore <garrett@damore.org>2017-08-12 10:16:54 -0700
commit9b4d9e71a63cafcee0edee734847bba28d9fea35 (patch)
treec65290fb84bf3168af439ef8e92a5f1370aa2ceb /tests/sock.c
parent0584aa354014e91a9036bc51bad438e8fddaf15f (diff)
downloadnng-9b4d9e71a63cafcee0edee734847bba28d9fea35.tar.gz
nng-9b4d9e71a63cafcee0edee734847bba28d9fea35.tar.bz2
nng-9b4d9e71a63cafcee0edee734847bba28d9fea35.zip
Convenience option accesor functions.
This adds functions that know about option sizes and make them easier to use. While here I added some validation of those, and cleaned up a few tests slightly. Note that we do not need to use the nng_impl.h for most tests. More of them need to be cleaned up.
Diffstat (limited to 'tests/sock.c')
-rw-r--r--tests/sock.c432
1 files changed, 193 insertions, 239 deletions
diff --git a/tests/sock.c b/tests/sock.c
index 4ac2fe35..8b3083ee 100644
--- a/tests/sock.c
+++ b/tests/sock.c
@@ -8,273 +8,227 @@
//
#include "convey.h"
-#include "core/nng_impl.h"
#include "nng.h"
#include <string.h>
-Main({
- Test("Socket Operations", {
+TestMain("Socket Operations", {
- Convey("We are able to open a PAIR socket", {
- int rv;
- nng_socket sock;
+ Convey("We are able to open a PAIR socket", {
+ int rv;
+ nng_socket s1;
- So(nng_pair_open(&sock) == 0);
+ So(nng_pair_open(&s1) == 0);
- Reset({ nng_close(sock); });
+ Reset({ nng_close(s1); });
- Convey("And we can shut it down", {
- rv = nng_shutdown(sock);
- So(rv == 0);
- rv = nng_shutdown(sock);
- So(rv == NNG_ECLOSED);
- });
+ Convey("And we can shut it down", {
+ So(nng_shutdown(s1) == 0);
+ So(nng_shutdown(s1) == NNG_ECLOSED);
+ });
- Convey("It's type is still proto",
- { So(nng_protocol(sock) == NNG_PROTO_PAIR); });
+ Convey("It's type & peer are still PAIR", {
+ So(nng_protocol(s1) == NNG_PROTO_PAIR);
+ So(nng_peer(s1) == NNG_PROTO_PAIR);
+ });
- Convey("Recv with no pipes times out correctly", {
- nng_msg *msg = NULL;
- int64_t when = 100000;
- uint64_t now;
+ Convey("Recv with no pipes times out correctly", {
+ nng_msg *msg = NULL;
+ int64_t to = 100000;
+ uint64_t now;
+
+ now = nng_clock();
+ So(now > 0);
+ So(nng_setopt_duration(s1, NNG_OPT_RCVTIMEO, to) == 0);
+ So(nng_recvmsg(s1, &msg, 0) == NNG_ETIMEDOUT);
+ So(msg == NULL);
+ So(nng_clock() >= (now + to));
+ So(nng_clock() < (now + (to * 2)));
+ });
- now = nni_clock();
+ Convey("Recv nonblock with no pipes gives EAGAIN", {
+ nng_msg *msg = NULL;
+ So(nng_recvmsg(s1, &msg, NNG_FLAG_NONBLOCK) ==
+ NNG_EAGAIN);
+ So(msg == NULL);
+ });
+
+ Convey("Send with no pipes times out correctly", {
+ nng_msg *msg = NULL;
+ int64_t to = 100000;
+ uint64_t now;
+
+ // We cheat to get access to the core's clock.
+ So(nng_msg_alloc(&msg, 0) == 0);
+ So(msg != NULL);
+ now = nng_clock();
+
+ So(nng_setopt_duration(s1, NNG_OPT_SNDTIMEO, to) == 0);
+ So(nng_sendmsg(s1, msg, 0) == NNG_ETIMEDOUT);
+ So(nng_clock() >= (now + to));
+ So(nng_clock() < (now + (to * 2)));
+ nng_msg_free(msg);
+ });
- rv = nng_setopt(sock, NNG_OPT_RCVTIMEO, &when,
- sizeof(when));
- So(rv == 0);
- rv = nng_recvmsg(sock, &msg, 0);
- So(rv == NNG_ETIMEDOUT);
- So(msg == NULL);
- So(nni_clock() >= (now + when));
- So(nni_clock() < (now + (when * 2)));
+ Convey("We can set and get options", {
+ int64_t to = 1234;
+ int64_t v = 0;
+ size_t sz;
+
+ So(nng_setopt_duration(s1, NNG_OPT_SNDTIMEO, to) == 0);
+
+ Convey("Short size is not copied", {
+ sz = 0;
+ So(nng_getopt(s1, NNG_OPT_SNDTIMEO, &v, &sz) ==
+ 0);
+ So(sz == sizeof(v));
+ So(v == 0);
});
- Convey("Recv nonblock with no pipes gives EAGAIN", {
- nng_msg *msg = NULL;
- rv =
- nng_recvmsg(sock, &msg, NNG_FLAG_NONBLOCK);
- So(rv == NNG_EAGAIN);
- So(msg == NULL);
+ Convey("Correct size is copied", {
+ sz = sizeof(v);
+ So(nng_getopt(s1, NNG_OPT_SNDTIMEO, &v, &sz) ==
+ 0);
+ So(sz == sizeof(v));
+ So(v == 1234);
});
- Convey("Send with no pipes times out correctly", {
- nng_msg *msg = NULL;
- int64_t when = 100000;
- uint64_t now;
-
- // We cheat to get access to the core's clock.
- So(nng_msg_alloc(&msg, 0) == 0);
- So(msg != NULL);
- now = nni_clock();
-
- rv = nng_setopt(sock, NNG_OPT_SNDTIMEO, &when,
- sizeof(when));
- So(rv == 0);
- rv = nng_sendmsg(sock, msg, 0);
- So(rv == NNG_ETIMEDOUT);
- So(nni_clock() >= (now + when));
- So(nni_clock() < (now + (when * 2)));
- nng_msg_free(msg);
+ Convey("Short size buf is not copied", {
+ int l = 5;
+ sz = 0;
+ So(nng_getopt(s1, NNG_OPT_RCVBUF, &l, &sz) ==
+ 0);
+ So(sz == sizeof(l));
+ So(l == 5);
});
- Convey("We can set and get options", {
- int64_t when = 1234;
- int64_t check = 0;
- size_t sz;
- rv = nng_setopt(sock, NNG_OPT_SNDTIMEO, &when,
- sizeof(when));
- So(rv == 0);
- sz = sizeof(check);
- Convey("Short size is not copied", {
- sz = 0;
- rv = nng_getopt(sock, NNG_OPT_SNDTIMEO,
- &check, &sz);
- So(rv == 0);
- So(sz == sizeof(check));
- So(check == 0);
- });
- Convey("Correct size is copied", {
- sz = sizeof(check);
- rv = nng_getopt(sock, NNG_OPT_SNDTIMEO,
- &check, &sz);
- So(rv == 0);
- So(sz == sizeof(check));
- So(check == 1234);
- });
-
- Convey("Short size buf is not copied", {
- int len = 5;
- sz = 0;
- So(nng_getopt(sock, NNG_OPT_RCVBUF,
- &len, &sz) == 0);
- So(len == 5);
- });
-
- Convey("Insane buffer size fails", {
- int len = 1024 * 1024;
- sz = sizeof(len);
- So(nng_setopt(sock, NNG_OPT_RCVBUF,
- &len, sz) == NNG_EINVAL);
- });
-
- Convey("Negative timeout fails", {
- when = -5;
- sz = sizeof(when);
- So(nng_setopt(sock, NNG_OPT_RCVTIMEO,
- &when, sz) == NNG_EINVAL);
- });
-
- Convey("Short timeout fails", {
- when = 0;
- sz = sizeof(when) - 1;
- So(nng_setopt(sock, NNG_OPT_RCVTIMEO,
- &when, sz) == NNG_EINVAL);
- });
-
- Convey("Bogus raw fails", {
- int raw = 42;
- sz = sizeof(raw);
-
- raw = 42;
- So(nng_setopt(sock, NNG_OPT_RAW, &raw,
- sz) == NNG_EINVAL);
- raw = -42;
- So(nng_setopt(sock, NNG_OPT_RAW, &raw,
- sz) == NNG_EINVAL);
-
- raw = 0;
- So(nng_setopt(sock, NNG_OPT_RAW, &raw,
- sz) == 0);
- });
-
- Convey("Unsupported options fail", {
- char *crap = "crap";
- So(nng_setopt(sock, NNG_OPT_SUBSCRIBE,
- crap,
- strlen(crap)) == NNG_ENOTSUP);
- });
-
- Convey("Bogus sizes fail", {
- size_t rmax;
- rmax = 6550;
- So(nng_setopt(sock, NNG_OPT_RCVMAXSZ,
- &rmax, sizeof(rmax)) == 0);
- rmax = 0;
- sz = sizeof(rmax);
- So(nng_getopt(sock, NNG_OPT_RCVMAXSZ,
- &rmax, &sz) == 0);
- So(rmax == 6550);
-
- rmax = 102400;
- So(nng_setopt(sock, NNG_OPT_RCVMAXSZ,
- &rmax, 1) == NNG_EINVAL);
- So(nng_getopt(sock, NNG_OPT_RCVMAXSZ,
- &rmax, &sz) == 0);
- So(rmax == 6550);
-
- if (sizeof(size_t) == 8) {
- rmax = 0x10000;
- rmax <<= 30;
- So(nng_setopt(sock,
- NNG_OPT_RCVMAXSZ, &rmax,
- sizeof(rmax)) ==
- NNG_EINVAL);
- So(nng_getopt(sock,
- NNG_OPT_RCVMAXSZ, &rmax,
- &sz) == 0);
- So(rmax == 6550);
- }
- });
+ Convey("Insane buffer size fails", {
+ So(nng_setopt_int(s1, NNG_OPT_RCVBUF,
+ 0x100000) == NNG_EINVAL);
});
- Convey("Bogus URLs not supported", {
- Convey("Dialing fails properly", {
- rv = nng_dial(sock,
- "bogus://somewhere", NULL, 0);
- So(rv == NNG_ENOTSUP);
- });
- Convey("Listening fails properly", {
- rv = nng_listen(sock,
- "bogus://elsewhere", NULL, 0);
- So(rv == NNG_ENOTSUP);
- });
+ Convey("Negative timeout fails", {
+ So(nng_setopt_duration(s1, NNG_OPT_RCVTIMEO,
+ -5) == NNG_EINVAL);
});
- Convey("Dialing synch can get refused", {
- rv = nng_dial(sock, "inproc://notthere", NULL,
- NNG_FLAG_SYNCH);
- So(rv == NNG_ECONNREFUSED);
+ Convey("Short timeout fails", {
+ to = 0;
+ sz = sizeof(to) - 1;
+ So(nng_setopt(s1, NNG_OPT_RCVTIMEO, &to, sz) ==
+ NNG_EINVAL);
});
- Convey("Listening works", {
- rv = nng_listen(sock, "inproc://here", NULL,
- NNG_FLAG_SYNCH);
- So(rv == 0);
-
- Convey("Second listen fails ADDRINUSE", {
- rv = nng_listen(sock, "inproc://here",
- NULL, NNG_FLAG_SYNCH);
- So(rv == NNG_EADDRINUSE);
- });
-
- Convey("We can connect to it", {
- nng_socket sock2;
- So(nng_pair_open(&sock2) == 0);
- Reset({ nng_close(sock2); });
- rv = nng_dial(sock2, "inproc://here",
- NULL, NNG_FLAG_SYNCH);
- So(rv == 0);
- nng_close(sock2);
- });
+ Convey("Bogus raw fails", {
+ So(nng_setopt_int(s1, NNG_OPT_RAW, 42) ==
+ NNG_EINVAL);
+ So(nng_setopt_int(s1, NNG_OPT_RAW, -42) ==
+ NNG_EINVAL);
+ So(nng_setopt_int(s1, NNG_OPT_RAW, 0) == 0);
});
- Convey("We can send and receive messages", {
- nng_socket sock2;
- int len = 1;
- size_t sz;
- uint64_t second = 3000000;
- char * buf;
-
- So(nng_pair_open(&sock2) == 0);
- Reset({ nng_close(sock2); });
-
- So(nng_setopt(sock, NNG_OPT_RCVBUF, &len,
- sizeof(len)) == 0);
- sz = sizeof(len);
- So(nng_getopt(
- sock, NNG_OPT_RCVBUF, &len, &sz) == 0);
- So(len == 1);
- sz = 0;
+ Convey("Unsupported options fail", {
+ char *crap = "crap";
+ So(nng_setopt(s1, NNG_OPT_SUBSCRIBE, crap,
+ strlen(crap)) == NNG_ENOTSUP);
+ });
+
+ Convey("Bogus sizes fail", {
+ size_t v;
+
+ So(nng_setopt_size(
+ s1, NNG_OPT_RCVMAXSZ, 6550) == 0);
+ So(nng_getopt_size(s1, NNG_OPT_RCVMAXSZ, &v) ==
+ 0);
+ So(v == 6550);
+
+ v = 102400;
+ So(nng_setopt(s1, NNG_OPT_RCVMAXSZ, &v, 1) ==
+ NNG_EINVAL);
+ So(nng_getopt_size(s1, NNG_OPT_RCVMAXSZ, &v) ==
+ 0);
+ So(v == 6550);
+
+ if (sizeof(size_t) == 8) {
+ v = 0x10000;
+ v <<= 30;
+ So(nng_setopt_size(s1,
+ NNG_OPT_RCVMAXSZ,
+ v) == NNG_EINVAL);
+ So(nng_getopt_size(
+ s1, NNG_OPT_RCVMAXSZ, &v) == 0);
+ So(v == 6550);
+ }
+ });
+ });
- So(nng_setopt(sock, NNG_OPT_SNDBUF, &len,
- sizeof(len)) == 0);
- So(nng_setopt(sock2, NNG_OPT_SNDBUF, &len,
- sizeof(len)) == 0);
-
- So(nng_setopt(sock, NNG_OPT_SNDTIMEO, &second,
- sizeof(second)) == 0);
- So(nng_setopt(sock, NNG_OPT_RCVTIMEO, &second,
- sizeof(second)) == 0);
- So(nng_setopt(sock2, NNG_OPT_SNDTIMEO, &second,
- sizeof(second)) == 0);
- So(nng_setopt(sock2, NNG_OPT_RCVTIMEO, &second,
- sizeof(second)) == 0);
-
- So(nng_listen(sock, "inproc://test1", NULL,
- NNG_FLAG_SYNCH) == 0);
- So(nng_dial(sock2, "inproc://test1", NULL,
- NNG_FLAG_SYNCH) == 0);
-
- So(nng_send(sock, "abc", 4, 0) == 0);
- So(nng_recv(
- sock2, &buf, &sz, NNG_FLAG_ALLOC) == 0);
- So(buf != NULL);
- So(sz == 4);
- So(memcmp(buf, "abc", 4) == 0);
- nng_free(buf, sz);
+ Convey("Bogus URLs not supported", {
+ Convey("Dialing fails properly", {
+ rv = nng_dial(s1, "bogus://1", NULL, 0);
+ So(rv == NNG_ENOTSUP);
});
+ Convey("Listening fails properly", {
+ rv = nng_listen(s1, "bogus://2", NULL, 0);
+ So(rv == NNG_ENOTSUP);
+ });
+ });
+
+ Convey("Dialing synch can get refused", {
+ rv = nng_dial(s1, "inproc://no", NULL, NNG_FLAG_SYNCH);
+ So(rv == NNG_ECONNREFUSED);
+ });
+
+ Convey("Listening works", {
+ char *a = "inproc://here";
+ rv = nng_listen(s1, a, NULL, NNG_FLAG_SYNCH);
+ So(rv == 0);
+
+ Convey("Second listen fails ADDRINUSE", {
+ rv = nng_listen(s1, a, NULL, NNG_FLAG_SYNCH);
+ So(rv == NNG_EADDRINUSE);
+ });
+
+ Convey("We can connect to it", {
+ nng_socket s2;
+ So(nng_pair_open(&s2) == 0);
+ Reset({ nng_close(s2); });
+ So(nng_dial(s2, a, NULL, NNG_FLAG_SYNCH) == 0);
+ nng_close(s2);
+ });
+ });
+
+ Convey("We can send and receive messages", {
+ nng_socket s2;
+ int len;
+ size_t sz;
+ uint64_t to = 3000000;
+ char * buf;
+ char * a = "inproc://t1";
+
+ So(nng_pair_open(&s2) == 0);
+ Reset({ nng_close(s2); });
+
+ So(nng_setopt_int(s1, NNG_OPT_RCVBUF, 1) == 0);
+ So(nng_getopt_int(s1, NNG_OPT_RCVBUF, &len) == 0);
+ So(len == 1);
+
+ So(nng_setopt_int(s1, NNG_OPT_SNDBUF, 1) == 0);
+ So(nng_setopt_int(s2, NNG_OPT_SNDBUF, 1) == 0);
+
+ So(nng_setopt_duration(s1, NNG_OPT_SNDTIMEO, to) == 0);
+ So(nng_setopt_duration(s1, NNG_OPT_RCVTIMEO, to) == 0);
+ So(nng_setopt_duration(s2, NNG_OPT_SNDTIMEO, to) == 0);
+ So(nng_setopt_duration(s2, NNG_OPT_RCVTIMEO, to) == 0);
+
+ So(nng_listen(s1, a, NULL, NNG_FLAG_SYNCH) == 0);
+ So(nng_dial(s2, a, NULL, NNG_FLAG_SYNCH) == 0);
+
+ So(nng_send(s1, "abc", 4, 0) == 0);
+ So(nng_recv(s2, &buf, &sz, NNG_FLAG_ALLOC) == 0);
+ So(buf != NULL);
+ So(sz == 4);
+ So(memcmp(buf, "abc", 4) == 0);
+ nng_free(buf, sz);
});
});
})