Index: net/socket/tcp_socket_unittest.cc |
diff --git a/net/socket/tcp_socket_unittest.cc b/net/socket/tcp_socket_unittest.cc |
index a45fcba016bcd05172ca022c93b4a5b843de5a79..f540e8e099bf5520b2b87f6ac66a124a74bccbdc 100644 |
--- a/net/socket/tcp_socket_unittest.cc |
+++ b/net/socket/tcp_socket_unittest.cc |
@@ -64,6 +64,28 @@ class TCPSocketTest : public PlatformTest { |
*address = IPEndPoint(ip_number, port); |
} |
+ void TestAcceptAsync() { |
+ TestCompletionCallback accept_callback; |
+ scoped_ptr<TCPSocket> accepted_socket; |
+ IPEndPoint accepted_address; |
+ ASSERT_EQ(ERR_IO_PENDING, |
+ socket_.Accept(&accepted_socket, &accepted_address, |
+ accept_callback.callback())); |
+ |
+ TestCompletionCallback connect_callback; |
+ TCPClientSocket connecting_socket(local_address_list(), |
+ NULL, NetLog::Source()); |
+ connecting_socket.Connect(connect_callback.callback()); |
+ |
+ EXPECT_EQ(OK, connect_callback.WaitForResult()); |
+ EXPECT_EQ(OK, accept_callback.WaitForResult()); |
+ |
+ EXPECT_TRUE(accepted_socket.get()); |
+ |
+ // Both sockets should be on the loopback network interface. |
+ EXPECT_EQ(accepted_address.address(), local_address_.address()); |
+ } |
+ |
AddressList local_address_list() const { |
return AddressList(local_address_); |
} |
@@ -103,27 +125,28 @@ TEST_F(TCPSocketTest, Accept) { |
// Test Accept() callback. |
TEST_F(TCPSocketTest, AcceptAsync) { |
ASSERT_NO_FATAL_FAILURE(SetUpListenIPv4()); |
+ TestAcceptAsync(); |
+} |
- TestCompletionCallback accept_callback; |
- scoped_ptr<TCPSocket> accepted_socket; |
- IPEndPoint accepted_address; |
- ASSERT_EQ(ERR_IO_PENDING, |
- socket_.Accept(&accepted_socket, &accepted_address, |
- accept_callback.callback())); |
+#if defined(OS_WIN) |
+// Test Accept() for AdoptListenSocket. |
+TEST_F(TCPSocketTest, AcceptForAdoptedListenSocket) { |
+ // Create a socket to be used with AdoptListenSocket. |
+ SOCKET existing_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); |
+ ASSERT_EQ(OK, socket_.AdoptListenSocket(existing_socket)); |
- TestCompletionCallback connect_callback; |
- TCPClientSocket connecting_socket(local_address_list(), |
- NULL, NetLog::Source()); |
- connecting_socket.Connect(connect_callback.callback()); |
+ IPEndPoint address; |
+ ParseAddress("127.0.0.1", 0, &address); |
+ SockaddrStorage storage; |
+ ASSERT_TRUE(address.ToSockAddr(storage.addr, &storage.addr_len)); |
+ ASSERT_EQ(0, bind(existing_socket, storage.addr, storage.addr_len)); |
- EXPECT_EQ(OK, connect_callback.WaitForResult()); |
- EXPECT_EQ(OK, accept_callback.WaitForResult()); |
+ ASSERT_EQ(OK, socket_.Listen(kListenBacklog)); |
+ ASSERT_EQ(OK, socket_.GetLocalAddress(&local_address_)); |
- EXPECT_TRUE(accepted_socket.get()); |
- |
- // Both sockets should be on the loopback network interface. |
- EXPECT_EQ(accepted_address.address(), local_address_.address()); |
+ TestAcceptAsync(); |
} |
+#endif |
// Accept two connections simultaneously. |
TEST_F(TCPSocketTest, Accept2Connections) { |