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

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

Issue 149511: Refactorings surrounding HostResolver:... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Merge in socks5_client_socket_unittest.cc Created 11 years, 5 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/ssl_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) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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.h" 5 #include "net/socket/socks_client_socket.h"
6 6
7 #include "net/base/address_list.h" 7 #include "net/base/address_list.h"
8 #include "net/base/host_resolver_unittest.h"
9 #include "net/base/listen_socket.h" 8 #include "net/base/listen_socket.h"
9 #include "net/base/mock_host_resolver.h"
10 #include "net/base/test_completion_callback.h" 10 #include "net/base/test_completion_callback.h"
11 #include "net/base/winsock_init.h" 11 #include "net/base/winsock_init.h"
12 #include "net/socket/client_socket_factory.h" 12 #include "net/socket/client_socket_factory.h"
13 #include "net/socket/tcp_client_socket.h" 13 #include "net/socket/tcp_client_socket.h"
14 #include "net/socket/socket_test_util.h" 14 #include "net/socket/socket_test_util.h"
15 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
16 #include "testing/platform_test.h" 16 #include "testing/platform_test.h"
17 17
18 //----------------------------------------------------------------------------- 18 //-----------------------------------------------------------------------------
19 19
20 namespace net { 20 namespace net {
21 21
22 const char kSOCKSOkRequest[] = { 0x04, 0x01, 0x00, 0x50, 127, 0, 0, 1, 0 }; 22 const char kSOCKSOkRequest[] = { 0x04, 0x01, 0x00, 0x50, 127, 0, 0, 1, 0 };
23 const char kSOCKS4aInitialRequest[] = 23 const char kSOCKS4aInitialRequest[] =
24 { 0x04, 0x01, 0x00, 0x50, 0, 0, 0, 127, 0 }; 24 { 0x04, 0x01, 0x00, 0x50, 0, 0, 0, 127, 0 };
25 const char kSOCKSOkReply[] = { 0x00, 0x5A, 0x00, 0x00, 0, 0, 0, 0 }; 25 const char kSOCKSOkReply[] = { 0x00, 0x5A, 0x00, 0x00, 0, 0, 0, 0 };
26 26
27 class SOCKSClientSocketTest : public PlatformTest { 27 class SOCKSClientSocketTest : public PlatformTest {
28 public: 28 public:
29 SOCKSClientSocketTest(); 29 SOCKSClientSocketTest();
30 // Create a SOCKSClientSocket on top of a MockSocket. 30 // Create a SOCKSClientSocket on top of a MockSocket.
31 SOCKSClientSocket* BuildMockSocket(MockRead reads[], MockWrite writes[], 31 SOCKSClientSocket* BuildMockSocket(MockRead reads[], MockWrite writes[],
32 const std::string& hostname, int port); 32 const std::string& hostname, int port);
33 virtual void SetUp(); 33 virtual void SetUp();
34 34
35 protected: 35 protected:
36 scoped_ptr<SOCKSClientSocket> user_sock_; 36 scoped_ptr<SOCKSClientSocket> user_sock_;
37 AddressList address_list_; 37 AddressList address_list_;
38 ClientSocket* tcp_sock_; 38 ClientSocket* tcp_sock_;
39 ScopedHostMapper host_mapper_;
40 TestCompletionCallback callback_; 39 TestCompletionCallback callback_;
41 scoped_refptr<RuleBasedHostMapper> mapper_; 40 scoped_refptr<MockHostResolver> host_resolver_;
42 scoped_refptr<HostResolver> host_resolver_;
43 scoped_ptr<MockSocket> mock_socket_; 41 scoped_ptr<MockSocket> mock_socket_;
44 42
45 private: 43 private:
46 DISALLOW_COPY_AND_ASSIGN(SOCKSClientSocketTest); 44 DISALLOW_COPY_AND_ASSIGN(SOCKSClientSocketTest);
47 }; 45 };
48 46
49 SOCKSClientSocketTest::SOCKSClientSocketTest() 47 SOCKSClientSocketTest::SOCKSClientSocketTest()
50 : host_resolver_(new HostResolver(0, 0)) { 48 : host_resolver_(new MockHostResolver) {
51 } 49 }
52 50
53 // Set up platform before every test case 51 // Set up platform before every test case
54 void SOCKSClientSocketTest::SetUp() { 52 void SOCKSClientSocketTest::SetUp() {
55 PlatformTest::SetUp(); 53 PlatformTest::SetUp();
56
57 // Resolve the "localhost" AddressList used by the tcp_connection to connect.
58 scoped_refptr<HostResolver> resolver = new HostResolver();
59 HostResolver::RequestInfo info("localhost", 1080);
60 int rv = resolver->Resolve(info, &address_list_, NULL, NULL);
61 ASSERT_EQ(OK, rv);
62
63 // Create a new host mapping for the duration of this test case only.
64 mapper_ = new RuleBasedHostMapper();
65 host_mapper_.Init(mapper_);
66 mapper_->AddRule("www.google.com", "127.0.0.1");
67 } 54 }
68 55
69 SOCKSClientSocket* SOCKSClientSocketTest::BuildMockSocket( 56 SOCKSClientSocket* SOCKSClientSocketTest::BuildMockSocket(
70 MockRead reads[], 57 MockRead reads[],
71 MockWrite writes[], 58 MockWrite writes[],
72 const std::string& hostname, 59 const std::string& hostname,
73 int port) { 60 int port) {
74 61
75 TestCompletionCallback callback; 62 TestCompletionCallback callback;
76 mock_socket_.reset(new StaticMockSocket(reads, writes)); 63 mock_socket_.reset(new StaticMockSocket(reads, writes));
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 EXPECT_EQ(ERR_IO_PENDING, rv); 220 EXPECT_EQ(ERR_IO_PENDING, rv);
234 rv = callback_.WaitForResult(); 221 rv = callback_.WaitForResult();
235 EXPECT_EQ(ERR_CONNECTION_CLOSED, rv); 222 EXPECT_EQ(ERR_CONNECTION_CLOSED, rv);
236 EXPECT_FALSE(user_sock_->IsConnected()); 223 EXPECT_FALSE(user_sock_->IsConnected());
237 } 224 }
238 225
239 // Tries to connect to an unknown DNS and on failure should revert to SOCKS4A. 226 // Tries to connect to an unknown DNS and on failure should revert to SOCKS4A.
240 TEST_F(SOCKSClientSocketTest, SOCKS4AFailedDNS) { 227 TEST_F(SOCKSClientSocketTest, SOCKS4AFailedDNS) {
241 const char hostname[] = "unresolved.ipv4.address"; 228 const char hostname[] = "unresolved.ipv4.address";
242 229
243 mapper_->AddSimulatedFailure(hostname); 230 host_resolver_->rules()->AddSimulatedFailure(hostname);
244 231
245 std::string request(kSOCKS4aInitialRequest, 232 std::string request(kSOCKS4aInitialRequest,
246 arraysize(kSOCKS4aInitialRequest)); 233 arraysize(kSOCKS4aInitialRequest));
247 request.append(hostname, arraysize(hostname)); 234 request.append(hostname, arraysize(hostname));
248 235
249 MockWrite data_writes[] = { 236 MockWrite data_writes[] = {
250 MockWrite(false, request.data(), request.size()) }; 237 MockWrite(false, request.data(), request.size()) };
251 MockRead data_reads[] = { 238 MockRead data_reads[] = {
252 MockRead(false, kSOCKSOkReply, arraysize(kSOCKSOkReply)) }; 239 MockRead(false, kSOCKSOkReply, arraysize(kSOCKSOkReply)) };
253 240
254 user_sock_.reset(BuildMockSocket(data_reads, data_writes, hostname, 80)); 241 user_sock_.reset(BuildMockSocket(data_reads, data_writes, hostname, 80));
255 242
256 int rv = user_sock_->Connect(&callback_); 243 int rv = user_sock_->Connect(&callback_);
257 EXPECT_EQ(ERR_IO_PENDING, rv); 244 EXPECT_EQ(ERR_IO_PENDING, rv);
258 rv = callback_.WaitForResult(); 245 rv = callback_.WaitForResult();
259 EXPECT_EQ(OK, rv); 246 EXPECT_EQ(OK, rv);
260 EXPECT_TRUE(user_sock_->IsConnected()); 247 EXPECT_TRUE(user_sock_->IsConnected());
261 EXPECT_EQ(SOCKSClientSocket::kSOCKS4a, user_sock_->socks_version_); 248 EXPECT_EQ(SOCKSClientSocket::kSOCKS4a, user_sock_->socks_version_);
262 } 249 }
263 250
264 // Tries to connect to a domain that resolves to IPv6. 251 // Tries to connect to a domain that resolves to IPv6.
265 // Should revert to SOCKS4a. 252 // Should revert to SOCKS4a.
266 TEST_F(SOCKSClientSocketTest, SOCKS4AIfDomainInIPv6) { 253 TEST_F(SOCKSClientSocketTest, SOCKS4AIfDomainInIPv6) {
267 const char hostname[] = "an.ipv6.address"; 254 const char hostname[] = "an.ipv6.address";
268 255
269 mapper_->AddRule(hostname, "2001:db8:8714:3a90::12"); 256 host_resolver_->rules()->AddRule(hostname, "2001:db8:8714:3a90::12");
270 257
271 std::string request(kSOCKS4aInitialRequest, 258 std::string request(kSOCKS4aInitialRequest,
272 arraysize(kSOCKS4aInitialRequest)); 259 arraysize(kSOCKS4aInitialRequest));
273 request.append(hostname, arraysize(hostname)); 260 request.append(hostname, arraysize(hostname));
274 261
275 MockWrite data_writes[] = { 262 MockWrite data_writes[] = {
276 MockWrite(false, request.data(), request.size()) }; 263 MockWrite(false, request.data(), request.size()) };
277 MockRead data_reads[] = { 264 MockRead data_reads[] = {
278 MockRead(false, kSOCKSOkReply, arraysize(kSOCKSOkReply)) }; 265 MockRead(false, kSOCKSOkReply, arraysize(kSOCKSOkReply)) };
279 266
280 user_sock_.reset(BuildMockSocket(data_reads, data_writes, hostname, 80)); 267 user_sock_.reset(BuildMockSocket(data_reads, data_writes, hostname, 80));
281 268
282 int rv = user_sock_->Connect(&callback_); 269 int rv = user_sock_->Connect(&callback_);
283 EXPECT_EQ(ERR_IO_PENDING, rv); 270 EXPECT_EQ(ERR_IO_PENDING, rv);
284 rv = callback_.WaitForResult(); 271 rv = callback_.WaitForResult();
285 EXPECT_EQ(OK, rv); 272 EXPECT_EQ(OK, rv);
286 EXPECT_TRUE(user_sock_->IsConnected()); 273 EXPECT_TRUE(user_sock_->IsConnected());
287 EXPECT_EQ(SOCKSClientSocket::kSOCKS4a, user_sock_->socks_version_); 274 EXPECT_EQ(SOCKSClientSocket::kSOCKS4a, user_sock_->socks_version_);
288 } 275 }
289 276
290 } // namespace net 277 } // namespace net
291 278
OLDNEW
« no previous file with comments | « net/socket/socks5_client_socket_unittest.cc ('k') | net/socket/ssl_client_socket_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698