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

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

Issue 266243004: Clang format slam. Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_server_socket.h" 5 #include "net/socket/tcp_server_socket.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
11 #include "base/memory/ref_counted.h" 11 #include "base/memory/ref_counted.h"
12 #include "base/memory/scoped_ptr.h" 12 #include "base/memory/scoped_ptr.h"
13 #include "net/base/address_list.h" 13 #include "net/base/address_list.h"
14 #include "net/base/io_buffer.h" 14 #include "net/base/io_buffer.h"
15 #include "net/base/ip_endpoint.h" 15 #include "net/base/ip_endpoint.h"
16 #include "net/base/net_errors.h" 16 #include "net/base/net_errors.h"
17 #include "net/base/test_completion_callback.h" 17 #include "net/base/test_completion_callback.h"
18 #include "net/socket/tcp_client_socket.h" 18 #include "net/socket/tcp_client_socket.h"
19 #include "testing/gtest/include/gtest/gtest.h" 19 #include "testing/gtest/include/gtest/gtest.h"
20 #include "testing/platform_test.h" 20 #include "testing/platform_test.h"
21 21
22 namespace net { 22 namespace net {
23 23
24 namespace { 24 namespace {
25 const int kListenBacklog = 5; 25 const int kListenBacklog = 5;
26 26
27 class TCPServerSocketTest : public PlatformTest { 27 class TCPServerSocketTest : public PlatformTest {
28 protected: 28 protected:
29 TCPServerSocketTest() 29 TCPServerSocketTest() : socket_(NULL, NetLog::Source()) {}
30 : socket_(NULL, NetLog::Source()) {
31 }
32 30
33 void SetUpIPv4() { 31 void SetUpIPv4() {
34 IPEndPoint address; 32 IPEndPoint address;
35 ParseAddress("127.0.0.1", 0, &address); 33 ParseAddress("127.0.0.1", 0, &address);
36 ASSERT_EQ(OK, socket_.Listen(address, kListenBacklog)); 34 ASSERT_EQ(OK, socket_.Listen(address, kListenBacklog));
37 ASSERT_EQ(OK, socket_.GetLocalAddress(&local_address_)); 35 ASSERT_EQ(OK, socket_.GetLocalAddress(&local_address_));
38 } 36 }
39 37
40 void SetUpIPv6(bool* success) { 38 void SetUpIPv6(bool* success) {
41 *success = false; 39 *success = false;
42 IPEndPoint address; 40 IPEndPoint address;
43 ParseAddress("::1", 0, &address); 41 ParseAddress("::1", 0, &address);
44 if (socket_.Listen(address, kListenBacklog) != 0) { 42 if (socket_.Listen(address, kListenBacklog) != 0) {
45 LOG(ERROR) << "Failed to listen on ::1 - probably because IPv6 is " 43 LOG(ERROR) << "Failed to listen on ::1 - probably because IPv6 is "
46 "disabled. Skipping the test"; 44 "disabled. Skipping the test";
47 return; 45 return;
48 } 46 }
49 ASSERT_EQ(OK, socket_.GetLocalAddress(&local_address_)); 47 ASSERT_EQ(OK, socket_.GetLocalAddress(&local_address_));
50 *success = true; 48 *success = true;
51 } 49 }
52 50
53 void ParseAddress(std::string ip_str, int port, IPEndPoint* address) { 51 void ParseAddress(std::string ip_str, int port, IPEndPoint* address) {
54 IPAddressNumber ip_number; 52 IPAddressNumber ip_number;
55 bool rv = ParseIPLiteralToNumber(ip_str, &ip_number); 53 bool rv = ParseIPLiteralToNumber(ip_str, &ip_number);
56 if (!rv) 54 if (!rv)
57 return; 55 return;
58 *address = IPEndPoint(ip_number, port); 56 *address = IPEndPoint(ip_number, port);
59 } 57 }
60 58
61 static IPEndPoint GetPeerAddress(StreamSocket* socket) { 59 static IPEndPoint GetPeerAddress(StreamSocket* socket) {
62 IPEndPoint address; 60 IPEndPoint address;
63 EXPECT_EQ(OK, socket->GetPeerAddress(&address)); 61 EXPECT_EQ(OK, socket->GetPeerAddress(&address));
64 return address; 62 return address;
65 } 63 }
66 64
67 AddressList local_address_list() const { 65 AddressList local_address_list() const { return AddressList(local_address_); }
68 return AddressList(local_address_);
69 }
70 66
71 TCPServerSocket socket_; 67 TCPServerSocket socket_;
72 IPEndPoint local_address_; 68 IPEndPoint local_address_;
73 }; 69 };
74 70
75 TEST_F(TCPServerSocketTest, Accept) { 71 TEST_F(TCPServerSocketTest, Accept) {
76 ASSERT_NO_FATAL_FAILURE(SetUpIPv4()); 72 ASSERT_NO_FATAL_FAILURE(SetUpIPv4());
77 73
78 TestCompletionCallback connect_callback; 74 TestCompletionCallback connect_callback;
79 TCPClientSocket connecting_socket(local_address_list(), 75 TCPClientSocket connecting_socket(
80 NULL, NetLog::Source()); 76 local_address_list(), NULL, NetLog::Source());
81 connecting_socket.Connect(connect_callback.callback()); 77 connecting_socket.Connect(connect_callback.callback());
82 78
83 TestCompletionCallback accept_callback; 79 TestCompletionCallback accept_callback;
84 scoped_ptr<StreamSocket> accepted_socket; 80 scoped_ptr<StreamSocket> accepted_socket;
85 int result = socket_.Accept(&accepted_socket, accept_callback.callback()); 81 int result = socket_.Accept(&accepted_socket, accept_callback.callback());
86 if (result == ERR_IO_PENDING) 82 if (result == ERR_IO_PENDING)
87 result = accept_callback.WaitForResult(); 83 result = accept_callback.WaitForResult();
88 ASSERT_EQ(OK, result); 84 ASSERT_EQ(OK, result);
89 85
90 ASSERT_TRUE(accepted_socket.get() != NULL); 86 ASSERT_TRUE(accepted_socket.get() != NULL);
91 87
92 // Both sockets should be on the loopback network interface. 88 // Both sockets should be on the loopback network interface.
93 EXPECT_EQ(GetPeerAddress(accepted_socket.get()).address(), 89 EXPECT_EQ(GetPeerAddress(accepted_socket.get()).address(),
94 local_address_.address()); 90 local_address_.address());
95 91
96 EXPECT_EQ(OK, connect_callback.WaitForResult()); 92 EXPECT_EQ(OK, connect_callback.WaitForResult());
97 } 93 }
98 94
99 // Test Accept() callback. 95 // Test Accept() callback.
100 TEST_F(TCPServerSocketTest, AcceptAsync) { 96 TEST_F(TCPServerSocketTest, AcceptAsync) {
101 ASSERT_NO_FATAL_FAILURE(SetUpIPv4()); 97 ASSERT_NO_FATAL_FAILURE(SetUpIPv4());
102 98
103 TestCompletionCallback accept_callback; 99 TestCompletionCallback accept_callback;
104 scoped_ptr<StreamSocket> accepted_socket; 100 scoped_ptr<StreamSocket> accepted_socket;
105 101
106 ASSERT_EQ(ERR_IO_PENDING, 102 ASSERT_EQ(ERR_IO_PENDING,
107 socket_.Accept(&accepted_socket, accept_callback.callback())); 103 socket_.Accept(&accepted_socket, accept_callback.callback()));
108 104
109 TestCompletionCallback connect_callback; 105 TestCompletionCallback connect_callback;
110 TCPClientSocket connecting_socket(local_address_list(), 106 TCPClientSocket connecting_socket(
111 NULL, NetLog::Source()); 107 local_address_list(), NULL, NetLog::Source());
112 connecting_socket.Connect(connect_callback.callback()); 108 connecting_socket.Connect(connect_callback.callback());
113 109
114 EXPECT_EQ(OK, connect_callback.WaitForResult()); 110 EXPECT_EQ(OK, connect_callback.WaitForResult());
115 EXPECT_EQ(OK, accept_callback.WaitForResult()); 111 EXPECT_EQ(OK, accept_callback.WaitForResult());
116 112
117 EXPECT_TRUE(accepted_socket != NULL); 113 EXPECT_TRUE(accepted_socket != NULL);
118 114
119 // Both sockets should be on the loopback network interface. 115 // Both sockets should be on the loopback network interface.
120 EXPECT_EQ(GetPeerAddress(accepted_socket.get()).address(), 116 EXPECT_EQ(GetPeerAddress(accepted_socket.get()).address(),
121 local_address_.address()); 117 local_address_.address());
122 } 118 }
123 119
124 // Accept two connections simultaneously. 120 // Accept two connections simultaneously.
125 TEST_F(TCPServerSocketTest, Accept2Connections) { 121 TEST_F(TCPServerSocketTest, Accept2Connections) {
126 ASSERT_NO_FATAL_FAILURE(SetUpIPv4()); 122 ASSERT_NO_FATAL_FAILURE(SetUpIPv4());
127 123
128 TestCompletionCallback accept_callback; 124 TestCompletionCallback accept_callback;
129 scoped_ptr<StreamSocket> accepted_socket; 125 scoped_ptr<StreamSocket> accepted_socket;
130 126
131 ASSERT_EQ(ERR_IO_PENDING, 127 ASSERT_EQ(ERR_IO_PENDING,
132 socket_.Accept(&accepted_socket, accept_callback.callback())); 128 socket_.Accept(&accepted_socket, accept_callback.callback()));
133 129
134 TestCompletionCallback connect_callback; 130 TestCompletionCallback connect_callback;
135 TCPClientSocket connecting_socket(local_address_list(), 131 TCPClientSocket connecting_socket(
136 NULL, NetLog::Source()); 132 local_address_list(), NULL, NetLog::Source());
137 connecting_socket.Connect(connect_callback.callback()); 133 connecting_socket.Connect(connect_callback.callback());
138 134
139 TestCompletionCallback connect_callback2; 135 TestCompletionCallback connect_callback2;
140 TCPClientSocket connecting_socket2(local_address_list(), 136 TCPClientSocket connecting_socket2(
141 NULL, NetLog::Source()); 137 local_address_list(), NULL, NetLog::Source());
142 connecting_socket2.Connect(connect_callback2.callback()); 138 connecting_socket2.Connect(connect_callback2.callback());
143 139
144 EXPECT_EQ(OK, accept_callback.WaitForResult()); 140 EXPECT_EQ(OK, accept_callback.WaitForResult());
145 141
146 TestCompletionCallback accept_callback2; 142 TestCompletionCallback accept_callback2;
147 scoped_ptr<StreamSocket> accepted_socket2; 143 scoped_ptr<StreamSocket> accepted_socket2;
148 int result = socket_.Accept(&accepted_socket2, accept_callback2.callback()); 144 int result = socket_.Accept(&accepted_socket2, accept_callback2.callback());
149 if (result == ERR_IO_PENDING) 145 if (result == ERR_IO_PENDING)
150 result = accept_callback2.WaitForResult(); 146 result = accept_callback2.WaitForResult();
151 ASSERT_EQ(OK, result); 147 ASSERT_EQ(OK, result);
(...skipping 10 matching lines...) Expand all
162 local_address_.address()); 158 local_address_.address());
163 } 159 }
164 160
165 TEST_F(TCPServerSocketTest, AcceptIPv6) { 161 TEST_F(TCPServerSocketTest, AcceptIPv6) {
166 bool initialized = false; 162 bool initialized = false;
167 ASSERT_NO_FATAL_FAILURE(SetUpIPv6(&initialized)); 163 ASSERT_NO_FATAL_FAILURE(SetUpIPv6(&initialized));
168 if (!initialized) 164 if (!initialized)
169 return; 165 return;
170 166
171 TestCompletionCallback connect_callback; 167 TestCompletionCallback connect_callback;
172 TCPClientSocket connecting_socket(local_address_list(), 168 TCPClientSocket connecting_socket(
173 NULL, NetLog::Source()); 169 local_address_list(), NULL, NetLog::Source());
174 connecting_socket.Connect(connect_callback.callback()); 170 connecting_socket.Connect(connect_callback.callback());
175 171
176 TestCompletionCallback accept_callback; 172 TestCompletionCallback accept_callback;
177 scoped_ptr<StreamSocket> accepted_socket; 173 scoped_ptr<StreamSocket> accepted_socket;
178 int result = socket_.Accept(&accepted_socket, accept_callback.callback()); 174 int result = socket_.Accept(&accepted_socket, accept_callback.callback());
179 if (result == ERR_IO_PENDING) 175 if (result == ERR_IO_PENDING)
180 result = accept_callback.WaitForResult(); 176 result = accept_callback.WaitForResult();
181 ASSERT_EQ(OK, result); 177 ASSERT_EQ(OK, result);
182 178
183 ASSERT_TRUE(accepted_socket.get() != NULL); 179 ASSERT_TRUE(accepted_socket.get() != NULL);
184 180
185 // Both sockets should be on the loopback network interface. 181 // Both sockets should be on the loopback network interface.
186 EXPECT_EQ(GetPeerAddress(accepted_socket.get()).address(), 182 EXPECT_EQ(GetPeerAddress(accepted_socket.get()).address(),
187 local_address_.address()); 183 local_address_.address());
188 184
189 EXPECT_EQ(OK, connect_callback.WaitForResult()); 185 EXPECT_EQ(OK, connect_callback.WaitForResult());
190 } 186 }
191 187
192 TEST_F(TCPServerSocketTest, AcceptIO) { 188 TEST_F(TCPServerSocketTest, AcceptIO) {
193 ASSERT_NO_FATAL_FAILURE(SetUpIPv4()); 189 ASSERT_NO_FATAL_FAILURE(SetUpIPv4());
194 190
195 TestCompletionCallback connect_callback; 191 TestCompletionCallback connect_callback;
196 TCPClientSocket connecting_socket(local_address_list(), 192 TCPClientSocket connecting_socket(
197 NULL, NetLog::Source()); 193 local_address_list(), NULL, NetLog::Source());
198 connecting_socket.Connect(connect_callback.callback()); 194 connecting_socket.Connect(connect_callback.callback());
199 195
200 TestCompletionCallback accept_callback; 196 TestCompletionCallback accept_callback;
201 scoped_ptr<StreamSocket> accepted_socket; 197 scoped_ptr<StreamSocket> accepted_socket;
202 int result = socket_.Accept(&accepted_socket, accept_callback.callback()); 198 int result = socket_.Accept(&accepted_socket, accept_callback.callback());
203 ASSERT_EQ(OK, accept_callback.GetResult(result)); 199 ASSERT_EQ(OK, accept_callback.GetResult(result));
204 200
205 ASSERT_TRUE(accepted_socket.get() != NULL); 201 ASSERT_TRUE(accepted_socket.get() != NULL);
206 202
207 // Both sockets should be on the loopback network interface. 203 // Both sockets should be on the loopback network interface.
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 bytes_read += read_result; 238 bytes_read += read_result;
243 } 239 }
244 240
245 std::string received_message(buffer.begin(), buffer.end()); 241 std::string received_message(buffer.begin(), buffer.end());
246 ASSERT_EQ(message, received_message); 242 ASSERT_EQ(message, received_message);
247 } 243 }
248 244
249 } // namespace 245 } // namespace
250 246
251 } // namespace net 247 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698