aboutsummaryrefslogtreecommitdiff
path: root/tests/sock.c
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2018-04-26 15:36:13 -0700
committerGarrett D'Amore <garrett@damore.org>2018-04-26 19:13:59 -0700
commitfd06aba05381055ab56e1ec81d56055b66462f0b (patch)
tree99633af36e1c393bffeda213c0ac85e83fc4a6ee /tests/sock.c
parent3de2b56557c80b310341c423492bd8ba895c1abe (diff)
downloadnng-fd06aba05381055ab56e1ec81d56055b66462f0b.tar.gz
nng-fd06aba05381055ab56e1ec81d56055b66462f0b.tar.bz2
nng-fd06aba05381055ab56e1ec81d56055b66462f0b.zip
fixes #375 integer types are error prone
This change converts the various integer types like nng_socket in the public API to opaque structures that are passed by value. Basically we just wrap the integer ID. This "hack" give us strong type checks by the compiler (yay!), at the expense of not being able to directly use these as numbers (so comparisions for example don't work, and neither does initialization to zero using the normal method. Comparison of disassembly output shows that at least with the optimizer enabled there is no difference in the compiler output between using a structure or an integral value.
Diffstat (limited to 'tests/sock.c')
-rw-r--r--tests/sock.c64
1 files changed, 39 insertions, 25 deletions
diff --git a/tests/sock.c b/tests/sock.c
index 17ea055d..d6e36235 100644
--- a/tests/sock.c
+++ b/tests/sock.c
@@ -99,7 +99,7 @@ TestMain("Socket Operations", {
s1, NNG_OPT_SOCKNAME, name, &sz) == 0);
So(sz > 0 && sz < 64);
So(sz == nni_strnlen(name, 64) + 1);
- So(atoi(name) == (int) s1);
+ So(atoi(name) == (int) s1.id);
So(nng_setopt(
s1, NNG_OPT_SOCKNAME, "hello", 6) == 0);
@@ -336,7 +336,7 @@ TestMain("Socket Operations", {
nng_listener l;
rv = nng_listen(s1, a, &l, 0);
So(rv == 0);
- So(l != 0);
+ So(l.id != 0);
Convey("Second listen fails ADDRINUSE", {
rv = nng_listen(s1, a, NULL, 0);
@@ -369,10 +369,12 @@ TestMain("Socket Operations", {
});
Convey("Cannot access as listener", {
- bool b;
+ bool b;
+ nng_listener l;
+ l.id = ep.id;
So(nng_listener_getopt_bool(
- ep, NNG_OPT_RAW, &b) == NNG_ENOENT);
- So(nng_listener_close(ep) == NNG_ENOENT);
+ l, NNG_OPT_RAW, &b) == NNG_ENOENT);
+ So(nng_listener_close(l) == NNG_ENOENT);
});
Convey("Socket opts not for dialer", {
@@ -395,8 +397,11 @@ TestMain("Socket Operations", {
So(nng_dialer_setopt(ep, NNG_OPT_RECVMAXSZ,
"a", 1) == NNG_EINVAL);
});
- Convey("Cannot listen",
- { So(nng_listener_start(ep, 0) == NNG_ENOTSUP); });
+ Convey("Cannot listen", {
+ nng_listener l;
+ l.id = ep.id;
+ So(nng_listener_start(l, 0) == NNG_ENOTSUP);
+ });
});
@@ -413,10 +418,12 @@ TestMain("Socket Operations", {
So(sz == 4321);
});
Convey("Cannot access as dialer", {
- bool b;
+ bool b;
+ nng_dialer d;
+ d.id = ep.id;
So(nng_dialer_getopt_bool(
- ep, NNG_OPT_RAW, &b) == NNG_ENOENT);
- So(nng_dialer_close(ep) == NNG_ENOENT);
+ d, NNG_OPT_RAW, &b) == NNG_ENOENT);
+ So(nng_dialer_close(d) == NNG_ENOENT);
});
Convey("Socket opts not for listener", {
@@ -440,8 +447,11 @@ TestMain("Socket Operations", {
So(nng_listener_setopt(ep, NNG_OPT_RECVMAXSZ,
"a", 1) == NNG_EINVAL);
});
- Convey("Cannot dial",
- { So(nng_dialer_start(ep, 0) == NNG_ENOTSUP); });
+ Convey("Cannot dial", {
+ nng_dialer d;
+ d.id = ep.id;
+ So(nng_dialer_start(d, 0) == NNG_ENOTSUP);
+ });
});
Convey("Cannot access absent ep options", {
@@ -449,32 +459,36 @@ TestMain("Socket Operations", {
int i;
nng_duration t;
bool b;
+ nng_dialer d;
+ nng_listener l;
+ d.id = 1999;
+ l.id = 1999;
- So(nng_dialer_setopt_size(
- 1999, NNG_OPT_RECVMAXSZ, 10) == NNG_ENOENT);
+ So(nng_dialer_setopt_size(d, NNG_OPT_RECVMAXSZ, 10) ==
+ NNG_ENOENT);
So(nng_listener_setopt_size(
- 1999, NNG_OPT_RECVMAXSZ, 10) == NNG_ENOENT);
+ l, NNG_OPT_RECVMAXSZ, 10) == NNG_ENOENT);
s = 1;
- So(nng_dialer_getopt_bool(1999, NNG_OPT_RAW, &b) ==
+ So(nng_dialer_getopt_bool(d, NNG_OPT_RAW, &b) ==
NNG_ENOENT);
- So(nng_listener_getopt_bool(1999, NNG_OPT_RAW, &b) ==
+ So(nng_listener_getopt_bool(l, NNG_OPT_RAW, &b) ==
NNG_ENOENT);
- So(nng_dialer_getopt_size(
- 1999, NNG_OPT_RECVMAXSZ, &s) == NNG_ENOENT);
+ So(nng_dialer_getopt_size(d, NNG_OPT_RECVMAXSZ, &s) ==
+ NNG_ENOENT);
So(nng_listener_getopt_size(
- 1999, NNG_OPT_RECVMAXSZ, &s) == NNG_ENOENT);
+ l, NNG_OPT_RECVMAXSZ, &s) == NNG_ENOENT);
- So(nng_dialer_getopt_int(1999, NNG_OPT_RAW, &i) ==
+ So(nng_dialer_getopt_int(d, NNG_OPT_RAW, &i) ==
NNG_ENOENT);
- So(nng_listener_getopt_int(1999, NNG_OPT_RAW, &i) ==
+ So(nng_listener_getopt_int(l, NNG_OPT_RAW, &i) ==
NNG_ENOENT);
- So(nng_dialer_getopt_ms(1999, NNG_OPT_RECVTIMEO, &t) ==
+ So(nng_dialer_getopt_ms(d, NNG_OPT_RECVTIMEO, &t) ==
+ NNG_ENOENT);
+ So(nng_listener_getopt_ms(l, NNG_OPT_SENDTIMEO, &t) ==
NNG_ENOENT);
- So(nng_listener_getopt_ms(
- 1999, NNG_OPT_SENDTIMEO, &t) == NNG_ENOENT);
});