diff options
| -rw-r--r-- | tests/trantest.h | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/tests/trantest.h b/tests/trantest.h index d4d65eee..afb5a881 100644 --- a/tests/trantest.h +++ b/tests/trantest.h @@ -166,6 +166,60 @@ trantest_send_recv(trantest *tt) nng_msg_free(recv); }); } + +void +trantest_send_recv_large(trantest *tt) +{ + Convey("Send and recv large data", { + nng_listener l; + nng_dialer d; + nng_msg * send; + nng_msg * recv; + char * data; + size_t size; + + size = 1024 * 128; // bigger than any transport segment + So((data = nng_alloc(size)) != NULL); + + for (int i = 0; i < size; i++) { + data[i] = nni_random() & 0xff; + } + + 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, size) == 0); + So(send != NULL); + memcpy(nng_msg_body(send), data, size); + + 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) == size); + So(memcmp(nng_msg_body(recv), data, size) == 0); + nng_msg_free(recv); + + memset(data, 0x2, size); + + So(nng_msg_alloc(&send, 0) == 0); + So(nng_msg_append(send, data, size) == 0); + So(nng_sendmsg(tt->repsock, send, 0) == 0); + So(nng_recvmsg(tt->reqsock, &recv, 0) == 0); + So(recv != NULL); + So(nng_msg_len(recv) == size); + So(memcmp(nng_msg_body(recv), data, size) == 0); + nng_msg_free(recv); + + nng_free(data, size); + }) +} + void trantest_test_all(const char *addr) { @@ -181,5 +235,6 @@ trantest_test_all(const char *addr) trantest_duplicate_listen(&tt); trantest_listen_accept(&tt); trantest_send_recv(&tt); + trantest_send_recv_large(&tt); }) } |
