diff options
| author | Garrett D'Amore <garrett@damore.org> | 2017-09-30 22:07:21 -0700 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2017-09-30 22:07:21 -0700 |
| commit | b9b5c31b19df95d672ddc76cdfde29318f78b5ea (patch) | |
| tree | b5292f5bf8f311d35c1a36e7310f92d47b2d172f /tests | |
| parent | 33990278f78ab743ac9c4220c537063ce5790d16 (diff) | |
| download | nng-b9b5c31b19df95d672ddc76cdfde29318f78b5ea.tar.gz nng-b9b5c31b19df95d672ddc76cdfde29318f78b5ea.tar.bz2 nng-b9b5c31b19df95d672ddc76cdfde29318f78b5ea.zip | |
Add support for ZT sockaddr properties (pipe).
Also add a generic property test function to trantest.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/trantest.h | 60 | ||||
| -rw-r--r-- | tests/zt.c | 55 |
2 files changed, 114 insertions, 1 deletions
diff --git a/tests/trantest.h b/tests/trantest.h index 4b4d0335..542cff32 100644 --- a/tests/trantest.h +++ b/tests/trantest.h @@ -28,6 +28,8 @@ typedef struct { unsigned trantest_port = 0; +typedef int (*trantest_proptest_t)(nng_msg *, nng_listener, nng_dialer); + void trantest_next_address(char *out, const char *template) { @@ -170,6 +172,44 @@ trantest_send_recv(trantest *tt) } void +trantest_check_properties(trantest *tt, trantest_proptest_t f) +{ + Convey("Properties test", { + nng_listener l; + nng_dialer d; + nng_msg * send; + nng_msg * recv; + size_t len; + nng_pipe p; + char url[NNG_MAXADDRLEN]; + size_t sz; + int rv; + + So(nng_listen(tt->repsock, tt->addr, &l, 0) == 0); + So(l != 0); + So(nng_dial(tt->reqsock, tt->addr, &d, 0) == 0); + So(d != 0); + + nng_usleep(20000); // listener may be behind slightly + + send = NULL; + So(nng_msg_alloc(&send, 0) == 0); + So(send != NULL); + So(nng_msg_append(send, "props", 5) == 0); + + So(nng_sendmsg(tt->reqsock, send, 0) == 0); + recv = NULL; + So(nng_recvmsg(tt->repsock, &recv, 0) == 0); + So(recv != NULL); + So(nng_msg_len(recv) == 5); + So(strcmp(nng_msg_body(recv), "props") == 0); + rv = f(recv, l, d); + nng_msg_free(recv); + So(rv == 0); + }); +} + +void trantest_send_recv_large(trantest *tt) { Convey("Send and recv large data", { @@ -240,3 +280,23 @@ trantest_test_all(const char *addr) trantest_send_recv_large(&tt); }) } + +void +trantest_test_extended(const char *addr, trantest_proptest_t f) +{ + trantest tt; + + Convey("Given transport", { + trantest_init(&tt, addr); + + Reset({ trantest_fini(&tt); }); + + trantest_scheme(&tt); + trantest_conn_refused(&tt); + trantest_duplicate_listen(&tt); + trantest_listen_accept(&tt); + trantest_send_recv(&tt); + trantest_send_recv_large(&tt); + trantest_check_properties(&tt, f); + }) +} @@ -36,6 +36,59 @@ mkdir(const char *path, int mode) #include <unistd.h> #endif // WIN32 +static int +check_props(nng_msg *msg, nng_listener l, nng_dialer d) +{ + nng_sockaddr la, ra; + nng_pipe p; + size_t z; + size_t mtu; + uint64_t nwid; + p = nng_msg_get_pipe(msg); + So(p > 0); + + // Check local address. + z = sizeof(nng_sockaddr); + So(nng_pipe_getopt(p, NNG_OPT_LOCADDR, &la, &z) == 0); + So(z == sizeof(la)); + So(la.s_un.s_family == NNG_AF_ZT); + So(la.s_un.s_zt.sa_port == (trantest_port - 1)); + So(la.s_un.s_zt.sa_nwid == 0xa09acf02337b057bull); + So(la.s_un.s_zt.sa_nodeid != 0); + + // Check remote address. + z = sizeof(nng_sockaddr); + So(nng_pipe_getopt(p, NNG_OPT_REMADDR, &ra, &z) == 0); + So(z == sizeof(ra)); + So(ra.s_un.s_family == NNG_AF_ZT); + So(ra.s_un.s_zt.sa_port != 0); + So(ra.s_un.s_zt.sa_nwid == 0xa09acf02337b057bull); + So(ra.s_un.s_zt.sa_nodeid == la.s_un.s_zt.sa_nodeid); + + // Check network ID. + z = sizeof(nwid); + nwid = 0; + So(nng_pipe_getopt(p, "zt:nwid", &nwid, &z) == 0); + So(nwid = 0xa09acf02337b057bull); + + z = sizeof(nwid); + nwid = 0; + So(nng_dialer_getopt(d, "zt:nwid", &nwid, &z) == 0); + So(nwid = 0xa09acf02337b057bull); + + z = sizeof(nwid); + nwid = 0; + So(nng_listener_getopt(l, "zt:nwid", &nwid, &z) == 0); + So(nwid = 0xa09acf02337b057bull); + + // Check MTU + z = sizeof(mtu); + So(nng_pipe_getopt(p, "zt:mtu", &mtu, &z) == 0); + So(mtu >= 1000 && mtu <= 10000); + + return (0); +} + TestMain("ZeroTier Transport", { char path1[NNG_MAXADDRLEN] = "/tmp/zt_server"; @@ -175,7 +228,7 @@ TestMain("ZeroTier Transport", { }); - trantest_test_all("zt://" NWID "/*:%u"); + trantest_test_extended("zt://" NWID "/*:%u", check_props); nng_fini(); }) |
