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 c8e45b1404bddb840341ffdf2ef956614e1e943e..850fde92bc4c1623eca20a5045da82e1fcea615d 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 |
@@ -617,18 +617,42 @@ TEST_F(SocketTestTCP, Listen) { |
// Pass in addrlen that is larger than our actual address to make |
// sure that it is correctly set back to sizeof(sockaddr_in) |
- addrlen = sizeof(addr) + 10; |
- int new_socket = ki_accept(server_sock, (sockaddr*)&addr, &addrlen); |
+ sockaddr_in client_addr[2]; |
+ sockaddr_in cmp_addr; |
+ memset(&client_addr[0], 0, sizeof(client_addr[0])); |
+ memset(&client_addr[1], 0xab, sizeof(client_addr[1])); |
+ memset(&cmp_addr, 0xab, sizeof(cmp_addr)); |
+ addrlen = sizeof(client_addr[0]) + 10; |
+ int new_socket = ki_accept(server_sock, (sockaddr*)&client_addr[0], |
+ &addrlen); |
ASSERT_GT(new_socket, -1) |
<< "accept failed with " << errno << ": " << strerror(errno); |
+ ASSERT_EQ(addrlen, sizeof(sockaddr_in)); |
+ // Check that client_addr[1] and cmp_addr are the same (not overwritten). |
+ ASSERT_EQ(0, memcmp(&client_addr[1], &cmp_addr, sizeof(cmp_addr))); |
+ ASSERT_EQ(0xabab, client_addr[1].sin_port); |
// Verify addr and addrlen were set correctly |
ASSERT_EQ(addrlen, sizeof(sockaddr_in)); |
- sockaddr_in client_addr; |
- ASSERT_EQ(0, ki_getsockname(client_sock, (sockaddr*)&client_addr, &addrlen)); |
- ASSERT_EQ(client_addr.sin_family, addr.sin_family); |
- ASSERT_EQ(client_addr.sin_port, addr.sin_port); |
- ASSERT_EQ(client_addr.sin_addr.s_addr, addr.sin_addr.s_addr); |
+ ASSERT_EQ(0, ki_getsockname(client_sock, (sockaddr*)&client_addr[1], |
+ &addrlen)); |
+ ASSERT_EQ(client_addr[1].sin_family, client_addr[0].sin_family); |
+ ASSERT_EQ(client_addr[1].sin_port, client_addr[0].sin_port); |
+ ASSERT_EQ(client_addr[1].sin_addr.s_addr, client_addr[0].sin_addr.s_addr); |
+ |
+ // Try a call where the supplied len is smaller than the expected length. |
+ // The API should only write up to that amount, but should return the |
+ // expected length. |
+ sockaddr_in client_addr2; |
+ memset(&client_addr2, 0, sizeof(client_addr2)); |
+ socklen_t truncated_len = sizeof(client_addr2.sin_family); |
+ ASSERT_GT(sizeof(sockaddr_in), truncated_len); |
+ ASSERT_EQ(0, ki_getsockname(client_sock, (sockaddr*)&client_addr2, |
+ &truncated_len)); |
+ ASSERT_EQ(sizeof(sockaddr_in), truncated_len); |
+ ASSERT_EQ(client_addr2.sin_family, client_addr[0].sin_family); |
+ ASSERT_EQ(client_addr2.sin_port, 0); |
+ ASSERT_EQ(client_addr2.sin_addr.s_addr, 0); |
Sam Clegg
2014/06/04 00:45:28
This seems like it should be its own test really..
|
// Recv greeting from client and send reply |
char inbuf[512]; |