aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2018-03-19 16:02:37 -0700
committerGarrett D'Amore <garrett@damore.org>2018-03-20 09:53:58 -0700
commit9ca901c1b70b17d851426483d9f54611cfa8e395 (patch)
treea26b11e16f505ccdc77b5ac6681e0f9de705ff20 /tests
parent9b886a9999247d87c9f6d389c3e65a4bd39be010 (diff)
downloadnng-9ca901c1b70b17d851426483d9f54611cfa8e395.tar.gz
nng-9ca901c1b70b17d851426483d9f54611cfa8e395.tar.bz2
nng-9ca901c1b70b17d851426483d9f54611cfa8e395.zip
fixes #296 Typed options should validate option type
fixes #302 nng_dialer/listener/pipe_getopt_sockaddr desired This adds plumbing to pass and check the type of options all the way through. NNG_ZT_OPT_ORBIT is type UINT64, but you can use the untyped form to pass two of them if needed. No typed access for retrieving strings yet. I think this should allocate a pointer and copy that out, but that's for later.
Diffstat (limited to 'tests')
-rw-r--r--tests/sock.c6
-rw-r--r--tests/tls.c26
-rw-r--r--tests/wssfile.c19
3 files changed, 31 insertions, 20 deletions
diff --git a/tests/sock.c b/tests/sock.c
index 8ff8b002..75d7c140 100644
--- a/tests/sock.c
+++ b/tests/sock.c
@@ -254,11 +254,11 @@ TestMain("Socket Operations", {
Convey("Bogus raw fails", {
// Bool type is 1 byte.
So(nng_setopt_int(s1, NNG_OPT_RAW, 42) ==
- NNG_EINVAL);
+ NNG_EBADTYPE);
So(nng_setopt_int(s1, NNG_OPT_RAW, -42) ==
- NNG_EINVAL);
+ NNG_EBADTYPE);
So(nng_setopt_int(s1, NNG_OPT_RAW, 0) ==
- NNG_EINVAL);
+ NNG_EBADTYPE);
So(nng_setopt(s1, NNG_OPT_RAW, "abcd", 4) ==
NNG_EINVAL);
});
diff --git a/tests/tls.c b/tests/tls.c
index f46467fe..a441b453 100644
--- a/tests/tls.c
+++ b/tests/tls.c
@@ -115,14 +115,14 @@ check_props_v4(nng_msg *msg)
nng_sockaddr la;
nng_sockaddr ra;
- z = sizeof(nng_sockaddr);
- So(nng_pipe_getopt(p, NNG_OPT_LOCADDR, &la, &z) == 0);
- So(z == sizeof(la));
+ // Typed access
+ So(nng_pipe_getopt_sockaddr(p, NNG_OPT_LOCADDR, &la) == 0);
So(la.s_family == NNG_AF_INET);
So(la.s_in.sa_port == htons(trantest_port - 1));
So(la.s_in.sa_port != 0);
So(la.s_in.sa_addr == htonl(0x7f000001));
+ // Untyped access
z = sizeof(nng_sockaddr);
So(nng_pipe_getopt(p, NNG_OPT_REMADDR, &ra, &z) == 0);
So(z == sizeof(ra));
@@ -130,6 +130,10 @@ check_props_v4(nng_msg *msg)
So(ra.s_in.sa_port != 0);
So(ra.s_in.sa_addr == htonl(0x7f000001));
+ // Check for type enforcement
+ int i;
+ So(nng_pipe_getopt_int(p, NNG_OPT_REMADDR, &i) == NNG_EBADTYPE);
+
return (0);
}
@@ -379,7 +383,7 @@ TestMain("TLS Transport", {
char addr[NNG_MAXADDRLEN];
nng_msg * msg;
nng_pipe p;
- int v;
+ bool b;
nng_dialer d;
So(nng_pair_open(&s1) == 0);
@@ -412,8 +416,8 @@ TestMain("TLS Transport", {
So(strcmp(nng_msg_body(msg), "hello") == 0);
p = nng_msg_get_pipe(msg);
So(p > 0);
- So(nng_pipe_getopt_int(p, NNG_OPT_TLS_VERIFIED, &v) == 0);
- So(v == 0);
+ So(nng_pipe_getopt_bool(p, NNG_OPT_TLS_VERIFIED, &b) == 0);
+ So(b == false);
nng_msg_free(msg);
});
@@ -425,7 +429,7 @@ TestMain("TLS Transport", {
char addr[NNG_MAXADDRLEN];
nng_msg * msg;
nng_pipe p;
- int v;
+ bool b;
So(nng_pair_open(&s1) == 0);
So(nng_pair_open(&s2) == 0);
@@ -454,9 +458,11 @@ TestMain("TLS Transport", {
So(strcmp(nng_msg_body(msg), "hello") == 0);
p = nng_msg_get_pipe(msg);
So(p > 0);
- So(nng_pipe_getopt_int(p, NNG_OPT_TLS_VERIFIED, &v) == 0);
- So(v == 1);
+ So(nng_pipe_getopt_bool(p, NNG_OPT_TLS_VERIFIED, &b) == 0);
+ So(b == true);
+ int i;
+ So(nng_pipe_getopt_int(p, NNG_OPT_TLS_VERIFIED, &i) ==
+ NNG_EBADTYPE);
nng_msg_free(msg);
});
-
})
diff --git a/tests/wssfile.c b/tests/wssfile.c
index 15f7008e..48736117 100644
--- a/tests/wssfile.c
+++ b/tests/wssfile.c
@@ -144,16 +144,21 @@ check_props(nng_msg *msg)
p = nng_msg_get_pipe(msg);
So(p > 0);
+ // Typed
z = sizeof(nng_sockaddr);
- So(nng_pipe_getopt(p, NNG_OPT_LOCADDR, &la, &z) == 0);
+ So(nng_pipe_getopt_sockaddr(p, NNG_OPT_LOCADDR, &la) == 0);
So(z == sizeof(la));
So(validloopback(&la));
+ // Untyped
z = sizeof(nng_sockaddr);
So(nng_pipe_getopt(p, NNG_OPT_REMADDR, &ra, &z) == 0);
So(z == sizeof(ra));
So(validloopback(&ra));
+ // Bad type
+ So(nng_pipe_getopt_size(p, NNG_OPT_LOCADDR, &z) == NNG_EBADTYPE);
+
// Request header
z = 0;
buf = NULL;
@@ -298,7 +303,7 @@ TestMain("WebSocket Secure (TLS) Transport (file based)", {
char addr[NNG_MAXADDRLEN];
nng_msg * msg;
nng_pipe p;
- int v;
+ bool b;
So(nng_pair_open(&s1) == 0);
So(nng_pair_open(&s2) == 0);
@@ -337,8 +342,8 @@ TestMain("WebSocket Secure (TLS) Transport (file based)", {
So(strcmp(nng_msg_body(msg), "hello") == 0);
p = nng_msg_get_pipe(msg);
So(p > 0);
- So(nng_pipe_getopt_int(p, NNG_OPT_TLS_VERIFIED, &v) == 0);
- So(v == 0);
+ So(nng_pipe_getopt_bool(p, NNG_OPT_TLS_VERIFIED, &b) == 0);
+ So(b == false);
nng_msg_free(msg);
});
@@ -350,7 +355,7 @@ TestMain("WebSocket Secure (TLS) Transport (file based)", {
char addr[NNG_MAXADDRLEN];
nng_msg * msg;
nng_pipe p;
- int v;
+ bool b;
So(nng_pair_open(&s1) == 0);
So(nng_pair_open(&s2) == 0);
@@ -379,8 +384,8 @@ TestMain("WebSocket Secure (TLS) Transport (file based)", {
So(strcmp(nng_msg_body(msg), "hello") == 0);
p = nng_msg_get_pipe(msg);
So(p > 0);
- So(nng_pipe_getopt_int(p, NNG_OPT_TLS_VERIFIED, &v) == 0);
- So(v == 1);
+ So(nng_pipe_getopt_bool(p, NNG_OPT_TLS_VERIFIED, &b) == 0);
+ So(b == true);
nng_msg_free(msg);
});