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

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

Issue 10309002: Reimplements net::AddressList without struct addrinfo. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: get_canonical_name -> canonical_name. iterator to indexing Created 8 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
« no previous file with comments | « net/socket/transport_client_socket_pool.cc ('k') | net/socket_stream/socket_stream.h » ('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/transport_client_socket_pool.h" 5 #include "net/socket/transport_client_socket_pool.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/callback.h" 9 #include "base/callback.h"
10 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/message_loop.h" 12 #include "base/message_loop.h"
13 #include "base/threading/platform_thread.h" 13 #include "base/threading/platform_thread.h"
14 #include "net/base/ip_endpoint.h" 14 #include "net/base/ip_endpoint.h"
15 #include "net/base/mock_host_resolver.h" 15 #include "net/base/mock_host_resolver.h"
16 #include "net/base/net_errors.h" 16 #include "net/base/net_errors.h"
17 #include "net/base/net_util.h" 17 #include "net/base/net_util.h"
18 #include "net/base/sys_addrinfo.h"
19 #include "net/base/test_completion_callback.h" 18 #include "net/base/test_completion_callback.h"
20 #include "net/socket/client_socket_factory.h" 19 #include "net/socket/client_socket_factory.h"
21 #include "net/socket/client_socket_handle.h" 20 #include "net/socket/client_socket_handle.h"
22 #include "net/socket/client_socket_pool_histograms.h" 21 #include "net/socket/client_socket_pool_histograms.h"
23 #include "net/socket/socket_test_util.h" 22 #include "net/socket/socket_test_util.h"
24 #include "net/socket/ssl_host_info.h" 23 #include "net/socket/ssl_host_info.h"
25 #include "net/socket/stream_socket.h" 24 #include "net/socket/stream_socket.h"
26 #include "testing/gtest/include/gtest/gtest.h" 25 #include "testing/gtest/include/gtest/gtest.h"
27 26
28 namespace net { 27 namespace net {
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 } 65 }
67 virtual bool IsConnectedAndIdle() const { 66 virtual bool IsConnectedAndIdle() const {
68 return connected_; 67 return connected_;
69 } 68 }
70 virtual int GetPeerAddress(AddressList* address) const { 69 virtual int GetPeerAddress(AddressList* address) const {
71 return ERR_UNEXPECTED; 70 return ERR_UNEXPECTED;
72 } 71 }
73 virtual int GetLocalAddress(IPEndPoint* address) const { 72 virtual int GetLocalAddress(IPEndPoint* address) const {
74 if (!connected_) 73 if (!connected_)
75 return ERR_SOCKET_NOT_CONNECTED; 74 return ERR_SOCKET_NOT_CONNECTED;
76 if (addrlist_.head()->ai_family == AF_INET) 75 if (addrlist_.front().GetFamily() == AF_INET)
77 SetIPv4Address(address); 76 SetIPv4Address(address);
78 else 77 else
79 SetIPv6Address(address); 78 SetIPv6Address(address);
80 return OK; 79 return OK;
81 } 80 }
82 virtual const BoundNetLog& NetLog() const { 81 virtual const BoundNetLog& NetLog() const {
83 return net_log_; 82 return net_log_;
84 } 83 }
85 84
86 virtual void SetSubresourceSpeculation() {} 85 virtual void SetSubresourceSpeculation() {}
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 } 204 }
206 virtual bool IsConnectedAndIdle() const { 205 virtual bool IsConnectedAndIdle() const {
207 return is_connected_; 206 return is_connected_;
208 } 207 }
209 virtual int GetPeerAddress(AddressList* address) const { 208 virtual int GetPeerAddress(AddressList* address) const {
210 return ERR_UNEXPECTED; 209 return ERR_UNEXPECTED;
211 } 210 }
212 virtual int GetLocalAddress(IPEndPoint* address) const { 211 virtual int GetLocalAddress(IPEndPoint* address) const {
213 if (!is_connected_) 212 if (!is_connected_)
214 return ERR_SOCKET_NOT_CONNECTED; 213 return ERR_SOCKET_NOT_CONNECTED;
215 if (addrlist_.head()->ai_family == AF_INET) 214 if (addrlist_.front().GetFamily() == AF_INET)
216 SetIPv4Address(address); 215 SetIPv4Address(address);
217 else 216 else
218 SetIPv6Address(address); 217 SetIPv6Address(address);
219 return OK; 218 return OK;
220 } 219 }
221 virtual const BoundNetLog& NetLog() const { 220 virtual const BoundNetLog& NetLog() const {
222 return net_log_; 221 return net_log_;
223 } 222 }
224 223
225 virtual void SetSubresourceSpeculation() {} 224 virtual void SetSubresourceSpeculation() {}
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
428 scoped_ptr<ClientSocketPoolHistograms> histograms_; 427 scoped_ptr<ClientSocketPoolHistograms> histograms_;
429 scoped_ptr<MockHostResolver> host_resolver_; 428 scoped_ptr<MockHostResolver> host_resolver_;
430 MockClientSocketFactory client_socket_factory_; 429 MockClientSocketFactory client_socket_factory_;
431 TransportClientSocketPool pool_; 430 TransportClientSocketPool pool_;
432 ClientSocketPoolTest test_base_; 431 ClientSocketPoolTest test_base_;
433 }; 432 };
434 433
435 TEST(TransportConnectJobTest, MakeAddrListStartWithIPv4) { 434 TEST(TransportConnectJobTest, MakeAddrListStartWithIPv4) {
436 IPAddressNumber ip_number; 435 IPAddressNumber ip_number;
437 ASSERT_TRUE(ParseIPLiteralToNumber("192.168.1.1", &ip_number)); 436 ASSERT_TRUE(ParseIPLiteralToNumber("192.168.1.1", &ip_number));
438 AddressList addrlist_v4_1 = AddressList::CreateFromIPAddress(ip_number, 80); 437 IPEndPoint addrlist_v4_1(ip_number, 80);
439 ASSERT_TRUE(ParseIPLiteralToNumber("192.168.1.2", &ip_number)); 438 ASSERT_TRUE(ParseIPLiteralToNumber("192.168.1.2", &ip_number));
440 AddressList addrlist_v4_2 = AddressList::CreateFromIPAddress(ip_number, 80); 439 IPEndPoint addrlist_v4_2(ip_number, 80);
441 ASSERT_TRUE(ParseIPLiteralToNumber("2001:4860:b006::64", &ip_number)); 440 ASSERT_TRUE(ParseIPLiteralToNumber("2001:4860:b006::64", &ip_number));
442 AddressList addrlist_v6_1 = AddressList::CreateFromIPAddress(ip_number, 80); 441 IPEndPoint addrlist_v6_1(ip_number, 80);
443 ASSERT_TRUE(ParseIPLiteralToNumber("2001:4860:b006::66", &ip_number)); 442 ASSERT_TRUE(ParseIPLiteralToNumber("2001:4860:b006::66", &ip_number));
444 AddressList addrlist_v6_2 = AddressList::CreateFromIPAddress(ip_number, 80); 443 IPEndPoint addrlist_v6_2(ip_number, 80);
445 444
446 AddressList addrlist; 445 AddressList addrlist;
447 const struct addrinfo* ai;
448 446
449 // Test 1: IPv4 only. Expect no change. 447 // Test 1: IPv4 only. Expect no change.
450 addrlist = addrlist_v4_1; 448 addrlist.clear();
451 addrlist.Append(addrlist_v4_2.head()); 449 addrlist.push_back(addrlist_v4_1);
452 TransportConnectJob::MakeAddrListStartWithIPv4(&addrlist); 450 addrlist.push_back(addrlist_v4_2);
453 ai = addrlist.head(); 451 TransportConnectJob::MakeAddressListStartWithIPv4(&addrlist);
454 EXPECT_EQ(AF_INET, ai->ai_family); 452 ASSERT_EQ(2u, addrlist.size());
455 ai = ai->ai_next; 453 EXPECT_EQ(AF_INET, addrlist[0].GetFamily());
456 EXPECT_EQ(AF_INET, ai->ai_family); 454 EXPECT_EQ(AF_INET, addrlist[1].GetFamily());
457 EXPECT_TRUE(ai->ai_next == NULL);
458 455
459 // Test 2: IPv6 only. Expect no change. 456 // Test 2: IPv6 only. Expect no change.
460 addrlist = addrlist_v6_1; 457 addrlist.clear();
461 addrlist.Append(addrlist_v6_2.head()); 458 addrlist.push_back(addrlist_v6_1);
462 TransportConnectJob::MakeAddrListStartWithIPv4(&addrlist); 459 addrlist.push_back(addrlist_v6_2);
463 ai = addrlist.head(); 460 TransportConnectJob::MakeAddressListStartWithIPv4(&addrlist);
464 EXPECT_EQ(AF_INET6, ai->ai_family); 461 ASSERT_EQ(2u, addrlist.size());
465 ai = ai->ai_next; 462 EXPECT_EQ(AF_INET6, addrlist[0].GetFamily());
466 EXPECT_EQ(AF_INET6, ai->ai_family); 463 EXPECT_EQ(AF_INET6, addrlist[1].GetFamily());
467 EXPECT_TRUE(ai->ai_next == NULL);
468 464
469 // Test 3: IPv4 then IPv6. Expect no change. 465 // Test 3: IPv4 then IPv6. Expect no change.
470 addrlist = addrlist_v4_1; 466 addrlist.clear();
471 addrlist.Append(addrlist_v4_2.head()); 467 addrlist.push_back(addrlist_v4_1);
472 addrlist.Append(addrlist_v6_1.head()); 468 addrlist.push_back(addrlist_v4_2);
473 addrlist.Append(addrlist_v6_2.head()); 469 addrlist.push_back(addrlist_v6_1);
474 TransportConnectJob::MakeAddrListStartWithIPv4(&addrlist); 470 addrlist.push_back(addrlist_v6_2);
475 ai = addrlist.head(); 471 TransportConnectJob::MakeAddressListStartWithIPv4(&addrlist);
476 EXPECT_EQ(AF_INET, ai->ai_family); 472 ASSERT_EQ(4u, addrlist.size());
477 ai = ai->ai_next; 473 EXPECT_EQ(AF_INET, addrlist[0].GetFamily());
478 EXPECT_EQ(AF_INET, ai->ai_family); 474 EXPECT_EQ(AF_INET, addrlist[1].GetFamily());
479 ai = ai->ai_next; 475 EXPECT_EQ(AF_INET6, addrlist[2].GetFamily());
480 EXPECT_EQ(AF_INET6, ai->ai_family); 476 EXPECT_EQ(AF_INET6, addrlist[3].GetFamily());
481 ai = ai->ai_next;
482 EXPECT_EQ(AF_INET6, ai->ai_family);
483 EXPECT_TRUE(ai->ai_next == NULL);
484 477
485 // Test 4: IPv6, IPv4, IPv6, IPv4. Expect first IPv6 moved to the end. 478 // Test 4: IPv6, IPv4, IPv6, IPv4. Expect first IPv6 moved to the end.
486 addrlist = addrlist_v6_1; 479 addrlist.clear();
487 addrlist.Append(addrlist_v4_1.head()); 480 addrlist.push_back(addrlist_v6_1);
488 addrlist.Append(addrlist_v6_2.head()); 481 addrlist.push_back(addrlist_v4_1);
489 addrlist.Append(addrlist_v4_2.head()); 482 addrlist.push_back(addrlist_v6_2);
490 TransportConnectJob::MakeAddrListStartWithIPv4(&addrlist); 483 addrlist.push_back(addrlist_v4_2);
491 ai = addrlist.head(); 484 TransportConnectJob::MakeAddressListStartWithIPv4(&addrlist);
492 EXPECT_EQ(AF_INET, ai->ai_family); 485 ASSERT_EQ(4u, addrlist.size());
493 ai = ai->ai_next; 486 EXPECT_EQ(AF_INET, addrlist[0].GetFamily());
494 EXPECT_EQ(AF_INET6, ai->ai_family); 487 EXPECT_EQ(AF_INET6, addrlist[1].GetFamily());
495 ai = ai->ai_next; 488 EXPECT_EQ(AF_INET, addrlist[2].GetFamily());
496 EXPECT_EQ(AF_INET, ai->ai_family); 489 EXPECT_EQ(AF_INET6, addrlist[3].GetFamily());
497 ai = ai->ai_next;
498 EXPECT_EQ(AF_INET6, ai->ai_family);
499 EXPECT_TRUE(ai->ai_next == NULL);
500 490
501 // Test 5: IPv6, IPv6, IPv4, IPv4. Expect first two IPv6's moved to the end. 491 // Test 5: IPv6, IPv6, IPv4, IPv4. Expect first two IPv6's moved to the end.
502 addrlist = addrlist_v6_1; 492 addrlist.clear();
503 addrlist.Append(addrlist_v6_2.head()); 493 addrlist.push_back(addrlist_v6_1);
504 addrlist.Append(addrlist_v4_1.head()); 494 addrlist.push_back(addrlist_v6_2);
505 addrlist.Append(addrlist_v4_2.head()); 495 addrlist.push_back(addrlist_v4_1);
506 TransportConnectJob::MakeAddrListStartWithIPv4(&addrlist); 496 addrlist.push_back(addrlist_v4_2);
507 ai = addrlist.head(); 497 TransportConnectJob::MakeAddressListStartWithIPv4(&addrlist);
508 EXPECT_EQ(AF_INET, ai->ai_family); 498 ASSERT_EQ(4u, addrlist.size());
509 ai = ai->ai_next; 499 EXPECT_EQ(AF_INET, addrlist[0].GetFamily());
510 EXPECT_EQ(AF_INET, ai->ai_family); 500 EXPECT_EQ(AF_INET, addrlist[1].GetFamily());
511 ai = ai->ai_next; 501 EXPECT_EQ(AF_INET6, addrlist[2].GetFamily());
512 EXPECT_EQ(AF_INET6, ai->ai_family); 502 EXPECT_EQ(AF_INET6, addrlist[3].GetFamily());
513 ai = ai->ai_next;
514 EXPECT_EQ(AF_INET6, ai->ai_family);
515 EXPECT_TRUE(ai->ai_next == NULL);
516 } 503 }
517 504
518 TEST_F(TransportClientSocketPoolTest, Basic) { 505 TEST_F(TransportClientSocketPoolTest, Basic) {
519 TestCompletionCallback callback; 506 TestCompletionCallback callback;
520 ClientSocketHandle handle; 507 ClientSocketHandle handle;
521 int rv = handle.Init("a", low_params_, LOW, callback.callback(), &pool_, 508 int rv = handle.Init("a", low_params_, LOW, callback.callback(), &pool_,
522 BoundNetLog()); 509 BoundNetLog());
523 EXPECT_EQ(ERR_IO_PENDING, rv); 510 EXPECT_EQ(ERR_IO_PENDING, rv);
524 EXPECT_FALSE(handle.is_initialized()); 511 EXPECT_FALSE(handle.is_initialized());
525 EXPECT_FALSE(handle.socket()); 512 EXPECT_FALSE(handle.socket());
(...skipping 740 matching lines...) Expand 10 before | Expand all | Expand 10 after
1266 EXPECT_TRUE(handle.socket()); 1253 EXPECT_TRUE(handle.socket());
1267 IPEndPoint endpoint; 1254 IPEndPoint endpoint;
1268 handle.socket()->GetLocalAddress(&endpoint); 1255 handle.socket()->GetLocalAddress(&endpoint);
1269 EXPECT_EQ(kIPv4AddressSize, endpoint.address().size()); 1256 EXPECT_EQ(kIPv4AddressSize, endpoint.address().size());
1270 EXPECT_EQ(1, client_socket_factory_.allocation_count()); 1257 EXPECT_EQ(1, client_socket_factory_.allocation_count());
1271 } 1258 }
1272 1259
1273 } // namespace 1260 } // namespace
1274 1261
1275 } // namespace net 1262 } // namespace net
OLDNEW
« no previous file with comments | « net/socket/transport_client_socket_pool.cc ('k') | net/socket_stream/socket_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698