diff --git a/test/unit/api/test_sockets.c b/test/unit/api/test_sockets.c index e28a51de..e2fb9f32 100644 --- a/test/unit/api/test_sockets.c +++ b/test/unit/api/test_sockets.c @@ -138,49 +138,47 @@ START_TEST(test_sockets_allfunctions_basic) } END_TEST -static void test_sockets_sendmsg_udp_send_recv_loop(int s, struct msghdr *msg) +static void test_sockets_msgapi_udp_send_recv_loop(int s, struct msghdr *smsg, struct msghdr *rmsg) { int i, ret; - u8_t buf[4]; /* send/receive our datagram of IO vectors 10 times */ for (i = 0; i < 10; i++) { - ret = lwip_sendmsg(s, msg, 0); + ret = lwip_sendmsg(s, smsg, 0); fail_unless(ret == 4); while (tcpip_thread_poll_one()); - ret = lwip_recv(s, buf, sizeof(buf), 0); + /* receive the datagram split across 4 buffers */ + ret = lwip_recvmsg(s, rmsg, 0); fail_unless(ret == 4); /* verify data */ - fail_unless(buf[0] == 0xDE); - fail_unless(buf[1] == 0xAD); - fail_unless(buf[2] == 0xBE); - fail_unless(buf[3] == 0xEF); + fail_unless(*((u8_t*)rmsg->msg_iov[0].iov_base) == 0xDE); + fail_unless(*((u8_t*)rmsg->msg_iov[1].iov_base) == 0xAD); + fail_unless(*((u8_t*)rmsg->msg_iov[2].iov_base) == 0xBE); + fail_unless(*((u8_t*)rmsg->msg_iov[3].iov_base) == 0xEF); } } -static void test_sockets_sendmsg_udp(int domain) +static void test_sockets_msgapi_udp(int domain) { int s, i, ret; struct sockaddr_storage addr_storage; socklen_t addr_size; - - struct iovec iovs[4]; - struct msghdr msg; - u8_t bytes[4]; - - /* each datagram should be 0xDEADBEEF */ - bytes[0] = 0xDE; - bytes[1] = 0xAD; - bytes[2] = 0xBE; - bytes[3] = 0xEF; + struct iovec riovs[4]; + struct msghdr rmsg = {0}; + u8_t rcv_buf[4]; + struct iovec siovs[4]; + struct msghdr smsg = {0}; + u8_t snd_buf[4] = {0xDE, 0xAD, 0xBE, 0xEF}; /* initialize IO vectors with data */ for (i = 0; i < 4; i++) { - iovs[i].iov_base = &bytes[i]; - iovs[i].iov_len = sizeof(char); + siovs[i].iov_base = &snd_buf[i]; + siovs[i].iov_len = sizeof(u8_t); + riovs[i].iov_base = &rcv_buf[i]; + riovs[i].iov_len = sizeof(u8_t); } /* set up address to send to */ @@ -238,39 +236,39 @@ static void test_sockets_sendmsg_udp(int domain) break; } - msg.msg_iov = iovs; - msg.msg_iovlen = 4; - msg.msg_control = NULL; - msg.msg_controllen = 0; - msg.msg_flags = 0; + /* send and receive the datagram in 4 pieces */ + smsg.msg_iov = siovs; + smsg.msg_iovlen = 4; + rmsg.msg_iov = riovs; + rmsg.msg_iovlen = 4; /* perform a sendmsg with remote host (self) */ - msg.msg_name = &addr_storage; - msg.msg_namelen = addr_size; + smsg.msg_name = &addr_storage; + smsg.msg_namelen = addr_size; - test_sockets_sendmsg_udp_send_recv_loop(s, &msg); + test_sockets_msgapi_udp_send_recv_loop(s, &smsg, &rmsg); /* Connect to self, allowing us to not pass message name */ ret = lwip_connect(s, (struct sockaddr*)&addr_storage, addr_size); fail_unless(ret == 0); - msg.msg_name = NULL; - msg.msg_namelen = 0; + smsg.msg_name = NULL; + smsg.msg_namelen = 0; - test_sockets_sendmsg_udp_send_recv_loop(s, &msg); + test_sockets_msgapi_udp_send_recv_loop(s, &smsg, &rmsg); ret = lwip_close(s); fail_unless(ret == 0); } -START_TEST(test_sockets_sendmsg) +START_TEST(test_sockets_msgapis) { LWIP_UNUSED_ARG(_i); #if LWIP_IPV4 - test_sockets_sendmsg_udp(AF_INET); + test_sockets_msgapi_udp(AF_INET); #endif #if LWIP_IPV6 - test_sockets_sendmsg_udp(AF_INET6); + test_sockets_msgapi_udp(AF_INET6); #endif } END_TEST @@ -282,7 +280,7 @@ sockets_suite(void) testfunc tests[] = { TESTFUNC(test_sockets_basics), TESTFUNC(test_sockets_allfunctions_basic), - TESTFUNC(test_sockets_sendmsg), + TESTFUNC(test_sockets_msgapis), }; return create_suite("SOCKETS", tests, sizeof(tests)/sizeof(testfunc), sockets_setup, sockets_teardown); }