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

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

Issue 9425016: Change MockRead and MockWrite (et. al.) to take an IoMode enum, instead (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: sync Created 8 years, 10 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
« no previous file with comments | « net/socket/socks5_client_socket_unittest.cc ('k') | net/socket/socks_client_socket_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/socks_client_socket_pool.h" 5 #include "net/socket/socks_client_socket_pool.h"
6 6
7 #include "base/callback.h" 7 #include "base/callback.h"
8 #include "base/compiler_specific.h" 8 #include "base/compiler_specific.h"
9 #include "base/time.h" 9 #include "base/time.h"
10 #include "net/base/mock_host_resolver.h" 10 #include "net/base/mock_host_resolver.h"
11 #include "net/base/net_errors.h" 11 #include "net/base/net_errors.h"
12 #include "net/base/test_completion_callback.h" 12 #include "net/base/test_completion_callback.h"
13 #include "net/socket/client_socket_factory.h" 13 #include "net/socket/client_socket_factory.h"
14 #include "net/socket/client_socket_handle.h" 14 #include "net/socket/client_socket_handle.h"
15 #include "net/socket/client_socket_pool_histograms.h" 15 #include "net/socket/client_socket_pool_histograms.h"
16 #include "net/socket/socket_test_util.h" 16 #include "net/socket/socket_test_util.h"
17 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
18 18
19 namespace net { 19 namespace net {
20 20
21 namespace { 21 namespace {
22 22
23 const int kMaxSockets = 32; 23 const int kMaxSockets = 32;
24 const int kMaxSocketsPerGroup = 6; 24 const int kMaxSocketsPerGroup = 6;
25 25
26 class SOCKSClientSocketPoolTest : public testing::Test { 26 class SOCKSClientSocketPoolTest : public testing::Test {
27 protected: 27 protected:
28 class SOCKS5MockData { 28 class SOCKS5MockData {
29 public: 29 public:
30 explicit SOCKS5MockData(bool async) { 30 explicit SOCKS5MockData(IoMode mode) {
31 writes_.reset(new MockWrite[3]); 31 writes_.reset(new MockWrite[3]);
32 writes_[0] = MockWrite(async, kSOCKS5GreetRequest, 32 writes_[0] = MockWrite(mode, kSOCKS5GreetRequest,
33 kSOCKS5GreetRequestLength); 33 kSOCKS5GreetRequestLength);
34 writes_[1] = MockWrite(async, kSOCKS5OkRequest, kSOCKS5OkRequestLength); 34 writes_[1] = MockWrite(mode, kSOCKS5OkRequest, kSOCKS5OkRequestLength);
35 writes_[2] = MockWrite(async, 0); 35 writes_[2] = MockWrite(mode, 0);
36 36
37 reads_.reset(new MockRead[3]); 37 reads_.reset(new MockRead[3]);
38 reads_[0] = MockRead(async, kSOCKS5GreetResponse, 38 reads_[0] = MockRead(mode, kSOCKS5GreetResponse,
39 kSOCKS5GreetResponseLength); 39 kSOCKS5GreetResponseLength);
40 reads_[1] = MockRead(async, kSOCKS5OkResponse, kSOCKS5OkResponseLength); 40 reads_[1] = MockRead(mode, kSOCKS5OkResponse, kSOCKS5OkResponseLength);
41 reads_[2] = MockRead(async, 0); 41 reads_[2] = MockRead(mode, 0);
42 42
43 data_.reset(new StaticSocketDataProvider(reads_.get(), 3, 43 data_.reset(new StaticSocketDataProvider(reads_.get(), 3,
44 writes_.get(), 3)); 44 writes_.get(), 3));
45 } 45 }
46 46
47 SocketDataProvider* data_provider() { return data_.get(); } 47 SocketDataProvider* data_provider() { return data_.get(); }
48 48
49 private: 49 private:
50 scoped_ptr<StaticSocketDataProvider> data_; 50 scoped_ptr<StaticSocketDataProvider> data_;
51 scoped_array<MockWrite> writes_; 51 scoped_array<MockWrite> writes_;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 MockClientSocketFactory transport_client_socket_factory_; 89 MockClientSocketFactory transport_client_socket_factory_;
90 MockTransportClientSocketPool transport_socket_pool_; 90 MockTransportClientSocketPool transport_socket_pool_;
91 91
92 scoped_refptr<SOCKSSocketParams> ignored_socket_params_; 92 scoped_refptr<SOCKSSocketParams> ignored_socket_params_;
93 ClientSocketPoolHistograms socks_histograms_; 93 ClientSocketPoolHistograms socks_histograms_;
94 SOCKSClientSocketPool pool_; 94 SOCKSClientSocketPool pool_;
95 ClientSocketPoolTest test_base_; 95 ClientSocketPoolTest test_base_;
96 }; 96 };
97 97
98 TEST_F(SOCKSClientSocketPoolTest, Simple) { 98 TEST_F(SOCKSClientSocketPoolTest, Simple) {
99 SOCKS5MockData data(false); 99 SOCKS5MockData data(SYNCHRONOUS);
100 data.data_provider()->set_connect_data(MockConnect(SYNCHRONOUS, OK)); 100 data.data_provider()->set_connect_data(MockConnect(SYNCHRONOUS, OK));
101 transport_client_socket_factory_.AddSocketDataProvider(data.data_provider()); 101 transport_client_socket_factory_.AddSocketDataProvider(data.data_provider());
102 102
103 ClientSocketHandle handle; 103 ClientSocketHandle handle;
104 int rv = handle.Init("a", ignored_socket_params_, LOW, CompletionCallback(), 104 int rv = handle.Init("a", ignored_socket_params_, LOW, CompletionCallback(),
105 &pool_, BoundNetLog()); 105 &pool_, BoundNetLog());
106 EXPECT_EQ(OK, rv); 106 EXPECT_EQ(OK, rv);
107 EXPECT_TRUE(handle.is_initialized()); 107 EXPECT_TRUE(handle.is_initialized());
108 EXPECT_TRUE(handle.socket()); 108 EXPECT_TRUE(handle.socket());
109 } 109 }
110 110
111 TEST_F(SOCKSClientSocketPoolTest, Async) { 111 TEST_F(SOCKSClientSocketPoolTest, Async) {
112 SOCKS5MockData data(true); 112 SOCKS5MockData data(ASYNC);
113 transport_client_socket_factory_.AddSocketDataProvider(data.data_provider()); 113 transport_client_socket_factory_.AddSocketDataProvider(data.data_provider());
114 114
115 TestCompletionCallback callback; 115 TestCompletionCallback callback;
116 ClientSocketHandle handle; 116 ClientSocketHandle handle;
117 int rv = handle.Init("a", ignored_socket_params_, LOW, callback.callback(), 117 int rv = handle.Init("a", ignored_socket_params_, LOW, callback.callback(),
118 &pool_, BoundNetLog()); 118 &pool_, BoundNetLog());
119 EXPECT_EQ(ERR_IO_PENDING, rv); 119 EXPECT_EQ(ERR_IO_PENDING, rv);
120 EXPECT_FALSE(handle.is_initialized()); 120 EXPECT_FALSE(handle.is_initialized());
121 EXPECT_FALSE(handle.socket()); 121 EXPECT_FALSE(handle.socket());
122 122
(...skipping 29 matching lines...) Expand all
152 EXPECT_FALSE(handle.is_initialized()); 152 EXPECT_FALSE(handle.is_initialized());
153 EXPECT_FALSE(handle.socket()); 153 EXPECT_FALSE(handle.socket());
154 154
155 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, callback.WaitForResult()); 155 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, callback.WaitForResult());
156 EXPECT_FALSE(handle.is_initialized()); 156 EXPECT_FALSE(handle.is_initialized());
157 EXPECT_FALSE(handle.socket()); 157 EXPECT_FALSE(handle.socket());
158 } 158 }
159 159
160 TEST_F(SOCKSClientSocketPoolTest, SOCKSConnectError) { 160 TEST_F(SOCKSClientSocketPoolTest, SOCKSConnectError) {
161 MockRead failed_read[] = { 161 MockRead failed_read[] = {
162 MockRead(false, 0), 162 MockRead(SYNCHRONOUS, 0),
163 }; 163 };
164 scoped_ptr<SocketDataProvider> socket_data(new StaticSocketDataProvider( 164 scoped_ptr<SocketDataProvider> socket_data(new StaticSocketDataProvider(
165 failed_read, arraysize(failed_read), NULL, 0)); 165 failed_read, arraysize(failed_read), NULL, 0));
166 socket_data->set_connect_data(MockConnect(SYNCHRONOUS, OK)); 166 socket_data->set_connect_data(MockConnect(SYNCHRONOUS, OK));
167 transport_client_socket_factory_.AddSocketDataProvider(socket_data.get()); 167 transport_client_socket_factory_.AddSocketDataProvider(socket_data.get());
168 168
169 ClientSocketHandle handle; 169 ClientSocketHandle handle;
170 EXPECT_EQ(0, transport_socket_pool_.release_count()); 170 EXPECT_EQ(0, transport_socket_pool_.release_count());
171 int rv = handle.Init("a", ignored_socket_params_, LOW, CompletionCallback(), 171 int rv = handle.Init("a", ignored_socket_params_, LOW, CompletionCallback(),
172 &pool_, BoundNetLog()); 172 &pool_, BoundNetLog());
173 EXPECT_EQ(ERR_SOCKS_CONNECTION_FAILED, rv); 173 EXPECT_EQ(ERR_SOCKS_CONNECTION_FAILED, rv);
174 EXPECT_FALSE(handle.is_initialized()); 174 EXPECT_FALSE(handle.is_initialized());
175 EXPECT_FALSE(handle.socket()); 175 EXPECT_FALSE(handle.socket());
176 EXPECT_EQ(1, transport_socket_pool_.release_count()); 176 EXPECT_EQ(1, transport_socket_pool_.release_count());
177 } 177 }
178 178
179 TEST_F(SOCKSClientSocketPoolTest, AsyncSOCKSConnectError) { 179 TEST_F(SOCKSClientSocketPoolTest, AsyncSOCKSConnectError) {
180 MockRead failed_read[] = { 180 MockRead failed_read[] = {
181 MockRead(true, 0), 181 MockRead(ASYNC, 0),
182 }; 182 };
183 scoped_ptr<SocketDataProvider> socket_data(new StaticSocketDataProvider( 183 scoped_ptr<SocketDataProvider> socket_data(new StaticSocketDataProvider(
184 failed_read, arraysize(failed_read), NULL, 0)); 184 failed_read, arraysize(failed_read), NULL, 0));
185 socket_data->set_connect_data(MockConnect(SYNCHRONOUS, OK)); 185 socket_data->set_connect_data(MockConnect(SYNCHRONOUS, OK));
186 transport_client_socket_factory_.AddSocketDataProvider(socket_data.get()); 186 transport_client_socket_factory_.AddSocketDataProvider(socket_data.get());
187 187
188 TestCompletionCallback callback; 188 TestCompletionCallback callback;
189 ClientSocketHandle handle; 189 ClientSocketHandle handle;
190 EXPECT_EQ(0, transport_socket_pool_.release_count()); 190 EXPECT_EQ(0, transport_socket_pool_.release_count());
191 int rv = handle.Init("a", ignored_socket_params_, LOW, callback.callback(), 191 int rv = handle.Init("a", ignored_socket_params_, LOW, callback.callback(),
192 &pool_, BoundNetLog()); 192 &pool_, BoundNetLog());
193 EXPECT_EQ(ERR_IO_PENDING, rv); 193 EXPECT_EQ(ERR_IO_PENDING, rv);
194 EXPECT_FALSE(handle.is_initialized()); 194 EXPECT_FALSE(handle.is_initialized());
195 EXPECT_FALSE(handle.socket()); 195 EXPECT_FALSE(handle.socket());
196 196
197 EXPECT_EQ(ERR_SOCKS_CONNECTION_FAILED, callback.WaitForResult()); 197 EXPECT_EQ(ERR_SOCKS_CONNECTION_FAILED, callback.WaitForResult());
198 EXPECT_FALSE(handle.is_initialized()); 198 EXPECT_FALSE(handle.is_initialized());
199 EXPECT_FALSE(handle.socket()); 199 EXPECT_FALSE(handle.socket());
200 EXPECT_EQ(1, transport_socket_pool_.release_count()); 200 EXPECT_EQ(1, transport_socket_pool_.release_count());
201 } 201 }
202 202
203 TEST_F(SOCKSClientSocketPoolTest, CancelDuringTransportConnect) { 203 TEST_F(SOCKSClientSocketPoolTest, CancelDuringTransportConnect) {
204 SOCKS5MockData data(false); 204 SOCKS5MockData data(SYNCHRONOUS);
205 transport_client_socket_factory_.AddSocketDataProvider(data.data_provider()); 205 transport_client_socket_factory_.AddSocketDataProvider(data.data_provider());
206 // We need two connections because the pool base lets one cancelled 206 // We need two connections because the pool base lets one cancelled
207 // connect job proceed for potential future use. 207 // connect job proceed for potential future use.
208 SOCKS5MockData data2(false); 208 SOCKS5MockData data2(SYNCHRONOUS);
209 transport_client_socket_factory_.AddSocketDataProvider(data2.data_provider()); 209 transport_client_socket_factory_.AddSocketDataProvider(data2.data_provider());
210 210
211 EXPECT_EQ(0, transport_socket_pool_.cancel_count()); 211 EXPECT_EQ(0, transport_socket_pool_.cancel_count());
212 int rv = StartRequest("a", LOW); 212 int rv = StartRequest("a", LOW);
213 EXPECT_EQ(ERR_IO_PENDING, rv); 213 EXPECT_EQ(ERR_IO_PENDING, rv);
214 214
215 rv = StartRequest("a", LOW); 215 rv = StartRequest("a", LOW);
216 EXPECT_EQ(ERR_IO_PENDING, rv); 216 EXPECT_EQ(ERR_IO_PENDING, rv);
217 217
218 pool_.CancelRequest("a", (*requests())[0]->handle()); 218 pool_.CancelRequest("a", (*requests())[0]->handle());
219 pool_.CancelRequest("a", (*requests())[1]->handle()); 219 pool_.CancelRequest("a", (*requests())[1]->handle());
220 // Requests in the connect phase don't actually get cancelled. 220 // Requests in the connect phase don't actually get cancelled.
221 EXPECT_EQ(0, transport_socket_pool_.cancel_count()); 221 EXPECT_EQ(0, transport_socket_pool_.cancel_count());
222 222
223 // Now wait for the TCP sockets to connect. 223 // Now wait for the TCP sockets to connect.
224 MessageLoop::current()->RunAllPending(); 224 MessageLoop::current()->RunAllPending();
225 225
226 EXPECT_EQ(ClientSocketPoolTest::kRequestNotFound, GetOrderOfRequest(1)); 226 EXPECT_EQ(ClientSocketPoolTest::kRequestNotFound, GetOrderOfRequest(1));
227 EXPECT_EQ(ClientSocketPoolTest::kRequestNotFound, GetOrderOfRequest(2)); 227 EXPECT_EQ(ClientSocketPoolTest::kRequestNotFound, GetOrderOfRequest(2));
228 EXPECT_EQ(0, transport_socket_pool_.cancel_count()); 228 EXPECT_EQ(0, transport_socket_pool_.cancel_count());
229 EXPECT_EQ(2, pool_.IdleSocketCount()); 229 EXPECT_EQ(2, pool_.IdleSocketCount());
230 230
231 (*requests())[0]->handle()->Reset(); 231 (*requests())[0]->handle()->Reset();
232 (*requests())[1]->handle()->Reset(); 232 (*requests())[1]->handle()->Reset();
233 } 233 }
234 234
235 TEST_F(SOCKSClientSocketPoolTest, CancelDuringSOCKSConnect) { 235 TEST_F(SOCKSClientSocketPoolTest, CancelDuringSOCKSConnect) {
236 SOCKS5MockData data(true); 236 SOCKS5MockData data(ASYNC);
237 data.data_provider()->set_connect_data(MockConnect(SYNCHRONOUS, OK)); 237 data.data_provider()->set_connect_data(MockConnect(SYNCHRONOUS, OK));
238 transport_client_socket_factory_.AddSocketDataProvider(data.data_provider()); 238 transport_client_socket_factory_.AddSocketDataProvider(data.data_provider());
239 // We need two connections because the pool base lets one cancelled 239 // We need two connections because the pool base lets one cancelled
240 // connect job proceed for potential future use. 240 // connect job proceed for potential future use.
241 SOCKS5MockData data2(true); 241 SOCKS5MockData data2(ASYNC);
242 data2.data_provider()->set_connect_data(MockConnect(SYNCHRONOUS, OK)); 242 data2.data_provider()->set_connect_data(MockConnect(SYNCHRONOUS, OK));
243 transport_client_socket_factory_.AddSocketDataProvider(data2.data_provider()); 243 transport_client_socket_factory_.AddSocketDataProvider(data2.data_provider());
244 244
245 EXPECT_EQ(0, transport_socket_pool_.cancel_count()); 245 EXPECT_EQ(0, transport_socket_pool_.cancel_count());
246 EXPECT_EQ(0, transport_socket_pool_.release_count()); 246 EXPECT_EQ(0, transport_socket_pool_.release_count());
247 int rv = StartRequest("a", LOW); 247 int rv = StartRequest("a", LOW);
248 EXPECT_EQ(ERR_IO_PENDING, rv); 248 EXPECT_EQ(ERR_IO_PENDING, rv);
249 249
250 rv = StartRequest("a", LOW); 250 rv = StartRequest("a", LOW);
251 EXPECT_EQ(ERR_IO_PENDING, rv); 251 EXPECT_EQ(ERR_IO_PENDING, rv);
(...skipping 15 matching lines...) Expand all
267 267
268 (*requests())[0]->handle()->Reset(); 268 (*requests())[0]->handle()->Reset();
269 (*requests())[1]->handle()->Reset(); 269 (*requests())[1]->handle()->Reset();
270 } 270 }
271 271
272 // It would be nice to also test the timeouts in SOCKSClientSocketPool. 272 // It would be nice to also test the timeouts in SOCKSClientSocketPool.
273 273
274 } // namespace 274 } // namespace
275 275
276 } // namespace net 276 } // namespace net
OLDNEW
« no previous file with comments | « net/socket/socks5_client_socket_unittest.cc ('k') | net/socket/socks_client_socket_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698