Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(129)

Side by Side Diff: net/socket/tcp_socket_unittest.cc

Issue 236203018: win: Implement Bluetooth server. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: for #4 comments Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/socket/tcp_socket.h" 5 #include "net/socket/tcp_socket.h"
6 6
7 #include <string.h> 7 #include <string.h>
8 8
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 } 57 }
58 58
59 void ParseAddress(const std::string& ip_str, int port, IPEndPoint* address) { 59 void ParseAddress(const std::string& ip_str, int port, IPEndPoint* address) {
60 IPAddressNumber ip_number; 60 IPAddressNumber ip_number;
61 bool rv = ParseIPLiteralToNumber(ip_str, &ip_number); 61 bool rv = ParseIPLiteralToNumber(ip_str, &ip_number);
62 if (!rv) 62 if (!rv)
63 return; 63 return;
64 *address = IPEndPoint(ip_number, port); 64 *address = IPEndPoint(ip_number, port);
65 } 65 }
66 66
67 void TestAcceptAsync() {
68 TestCompletionCallback accept_callback;
69 scoped_ptr<TCPSocket> accepted_socket;
70 IPEndPoint accepted_address;
71 ASSERT_EQ(ERR_IO_PENDING,
72 socket_.Accept(&accepted_socket, &accepted_address,
73 accept_callback.callback()));
74
75 TestCompletionCallback connect_callback;
76 TCPClientSocket connecting_socket(local_address_list(),
77 NULL, NetLog::Source());
78 connecting_socket.Connect(connect_callback.callback());
79
80 EXPECT_EQ(OK, connect_callback.WaitForResult());
81 EXPECT_EQ(OK, accept_callback.WaitForResult());
82
83 EXPECT_TRUE(accepted_socket.get());
84
85 // Both sockets should be on the loopback network interface.
86 EXPECT_EQ(accepted_address.address(), local_address_.address());
87 }
88
67 AddressList local_address_list() const { 89 AddressList local_address_list() const {
68 return AddressList(local_address_); 90 return AddressList(local_address_);
69 } 91 }
70 92
71 TCPSocket socket_; 93 TCPSocket socket_;
72 IPEndPoint local_address_; 94 IPEndPoint local_address_;
73 }; 95 };
74 96
75 // Test listening and accepting with a socket bound to an IPv4 address. 97 // Test listening and accepting with a socket bound to an IPv4 address.
76 TEST_F(TCPSocketTest, Accept) { 98 TEST_F(TCPSocketTest, Accept) {
(...skipping 19 matching lines...) Expand all
96 118
97 // Both sockets should be on the loopback network interface. 119 // Both sockets should be on the loopback network interface.
98 EXPECT_EQ(accepted_address.address(), local_address_.address()); 120 EXPECT_EQ(accepted_address.address(), local_address_.address());
99 121
100 EXPECT_EQ(OK, connect_callback.WaitForResult()); 122 EXPECT_EQ(OK, connect_callback.WaitForResult());
101 } 123 }
102 124
103 // Test Accept() callback. 125 // Test Accept() callback.
104 TEST_F(TCPSocketTest, AcceptAsync) { 126 TEST_F(TCPSocketTest, AcceptAsync) {
105 ASSERT_NO_FATAL_FAILURE(SetUpListenIPv4()); 127 ASSERT_NO_FATAL_FAILURE(SetUpListenIPv4());
106 128 TestAcceptAsync();
107 TestCompletionCallback accept_callback;
108 scoped_ptr<TCPSocket> accepted_socket;
109 IPEndPoint accepted_address;
110 ASSERT_EQ(ERR_IO_PENDING,
111 socket_.Accept(&accepted_socket, &accepted_address,
112 accept_callback.callback()));
113
114 TestCompletionCallback connect_callback;
115 TCPClientSocket connecting_socket(local_address_list(),
116 NULL, NetLog::Source());
117 connecting_socket.Connect(connect_callback.callback());
118
119 EXPECT_EQ(OK, connect_callback.WaitForResult());
120 EXPECT_EQ(OK, accept_callback.WaitForResult());
121
122 EXPECT_TRUE(accepted_socket.get());
123
124 // Both sockets should be on the loopback network interface.
125 EXPECT_EQ(accepted_address.address(), local_address_.address());
126 } 129 }
127 130
128 // Accept two connections simultaneously. 131 // Accept two connections simultaneously.
129 TEST_F(TCPSocketTest, Accept2Connections) { 132 TEST_F(TCPSocketTest, Accept2Connections) {
130 ASSERT_NO_FATAL_FAILURE(SetUpListenIPv4()); 133 ASSERT_NO_FATAL_FAILURE(SetUpListenIPv4());
131 134
132 TestCompletionCallback accept_callback; 135 TestCompletionCallback accept_callback;
133 scoped_ptr<TCPSocket> accepted_socket; 136 scoped_ptr<TCPSocket> accepted_socket;
134 IPEndPoint accepted_address; 137 IPEndPoint accepted_address;
135 138
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 ASSERT_TRUE(read_result >= 0); 255 ASSERT_TRUE(read_result >= 0);
253 ASSERT_TRUE(bytes_read + read_result <= message.size()); 256 ASSERT_TRUE(bytes_read + read_result <= message.size());
254 memmove(&buffer[bytes_read], read_buffer->data(), read_result); 257 memmove(&buffer[bytes_read], read_buffer->data(), read_result);
255 bytes_read += read_result; 258 bytes_read += read_result;
256 } 259 }
257 260
258 std::string received_message(buffer.begin(), buffer.end()); 261 std::string received_message(buffer.begin(), buffer.end());
259 ASSERT_EQ(message, received_message); 262 ASSERT_EQ(message, received_message);
260 } 263 }
261 264
265 #if defined(OS_WIN)
266 // Test Accept() for AdoptListenSocket.
267 TEST_F(TCPSocketTest, AcceptForAdoptedListenSocket) {
wtc 2014/04/28 23:54:43 Nit: it seems better to list this new test right a
xiyuan 2014/04/29 00:50:26 Done.
268 // Create a socket to be used with AdoptListenSocket.
269 SOCKET existing_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
270 ASSERT_EQ(OK, socket_.AdoptListenSocket(existing_socket));
271
272 IPEndPoint address;
273 ParseAddress("127.0.0.1", 0, &address);
274 SockaddrStorage storage;
275 ASSERT_TRUE(address.ToSockAddr(storage.addr, &storage.addr_len));
276 ASSERT_EQ(0, bind(existing_socket, storage.addr, storage.addr_len));
277
278 ASSERT_EQ(OK, socket_.Listen(kListenBacklog));
279 ASSERT_EQ(OK, socket_.GetLocalAddress(&local_address_));
280
281 TestAcceptAsync();
282 }
283 #endif
284
262 } // namespace 285 } // namespace
263 } // namespace net 286 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698