Index: native_client_sdk/src/tests/nacl_io_socket_test/socket_test.cc |
diff --git a/native_client_sdk/src/tests/nacl_io_socket_test/socket_test.cc b/native_client_sdk/src/tests/nacl_io_socket_test/socket_test.cc |
index 24a9b030a8e96512aac7e77a617f91802b2359d4..7aa07bcca47c00e833d61b2e2b6b14ff5c7c410f 100644 |
--- a/native_client_sdk/src/tests/nacl_io_socket_test/socket_test.cc |
+++ b/native_client_sdk/src/tests/nacl_io_socket_test/socket_test.cc |
@@ -244,6 +244,42 @@ TEST_F(SocketTestUDP, SendRcv) { |
EXPECT_EQ(0, memcmp(outbuf, inbuf, sizeof(outbuf))); |
} |
+TEST_F(SocketTestUDP, SendRcvUnbound) { |
+ char outbuf[256]; |
+ char inbuf[512]; |
+ |
+ memset(outbuf, 1, sizeof(outbuf)); |
+ memset(inbuf, 0, sizeof(inbuf)); |
+ |
+ // Don't bind sock1_, this will automatically bind sock1_ to a random port |
+ // at the time of the first send. |
Sam Clegg
2013/11/18 17:10:42
Maybe check getlocalname() before and after the se
binji
2013/11/18 20:54:18
Done.
|
+ //EXPECT_EQ(0, Bind(sock1_, LOCAL_HOST, PORT1)); |
+ EXPECT_EQ(0, Bind(sock2_, LOCAL_HOST, PORT2)); |
+ |
+ sockaddr_in addr; |
+ socklen_t addrlen = sizeof(addr); |
+ IP4ToSockAddr(LOCAL_HOST, PORT2, &addr); |
+ |
+ int len1 = |
+ sendto(sock1_, outbuf, sizeof(outbuf), 0, (sockaddr*) &addr, addrlen); |
+ EXPECT_EQ(sizeof(outbuf), len1); |
+ |
+ // Ensure the buffers are different |
+ EXPECT_NE(0, memcmp(outbuf, inbuf, sizeof(outbuf))); |
+ memset(&addr, 0, sizeof(addr)); |
+ |
+ // Try to receive the previously sent packet |
+ int len2 = |
+ recvfrom(sock2_, inbuf, sizeof(inbuf), 0, (sockaddr*) &addr, &addrlen); |
+ EXPECT_EQ(sizeof(outbuf), len2); |
+ EXPECT_EQ(sizeof(sockaddr_in), addrlen); |
+ EXPECT_EQ(LOCAL_HOST, htonl(addr.sin_addr.s_addr)); |
+ EXPECT_NE(0, htons(addr.sin_port)); |
+ |
+ // Now they should be the same |
+ EXPECT_EQ(0, memcmp(outbuf, inbuf, sizeof(outbuf))); |
+} |
+ |
const size_t kQueueSize = 65536 * 8; |
TEST_F(SocketTestUDP, FullFifo) { |
char outbuf[16 * 1024]; |