diff options
| author | Garrett D'Amore <garrett@damore.org> | 2018-03-19 16:02:37 -0700 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2018-03-20 09:53:58 -0700 |
| commit | 9ca901c1b70b17d851426483d9f54611cfa8e395 (patch) | |
| tree | a26b11e16f505ccdc77b5ac6681e0f9de705ff20 /tests | |
| parent | 9b886a9999247d87c9f6d389c3e65a4bd39be010 (diff) | |
| download | nng-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.c | 6 | ||||
| -rw-r--r-- | tests/tls.c | 26 | ||||
| -rw-r--r-- | tests/wssfile.c | 19 |
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); }); |
