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

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

Issue 12886034: Remove experimental code to pick the "warmest" socket (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: sync, fix conflict Created 7 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
« no previous file with comments | « net/socket/client_socket_pool_base.cc ('k') | net/socket/socket_test_util.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/client_socket_pool_base.h" 5 #include "net/socket/client_socket_pool_base.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
11 #include "base/callback.h" 11 #include "base/callback.h"
12 #include "base/compiler_specific.h"
13 #include "base/memory/ref_counted.h" 12 #include "base/memory/ref_counted.h"
14 #include "base/memory/scoped_vector.h" 13 #include "base/memory/scoped_vector.h"
15 #include "base/memory/weak_ptr.h" 14 #include "base/memory/weak_ptr.h"
16 #include "base/message_loop.h" 15 #include "base/message_loop.h"
17 #include "base/run_loop.h" 16 #include "base/run_loop.h"
18 #include "base/stringprintf.h" 17 #include "base/stringprintf.h"
19 #include "base/string_number_conversions.h" 18 #include "base/string_number_conversions.h"
20 #include "base/threading/platform_thread.h" 19 #include "base/threading/platform_thread.h"
21 #include "base/values.h" 20 #include "base/values.h"
22 #include "net/base/load_timing_info.h" 21 #include "net/base/load_timing_info.h"
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 111
113 bool ignore_limits_; 112 bool ignore_limits_;
114 }; 113 };
115 typedef ClientSocketPoolBase<TestSocketParams> TestClientSocketPoolBase; 114 typedef ClientSocketPoolBase<TestSocketParams> TestClientSocketPoolBase;
116 115
117 class MockClientSocket : public StreamSocket { 116 class MockClientSocket : public StreamSocket {
118 public: 117 public:
119 explicit MockClientSocket(net::NetLog* net_log) 118 explicit MockClientSocket(net::NetLog* net_log)
120 : connected_(false), 119 : connected_(false),
121 net_log_(BoundNetLog::Make(net_log, net::NetLog::SOURCE_SOCKET)), 120 net_log_(BoundNetLog::Make(net_log, net::NetLog::SOURCE_SOCKET)),
122 was_used_to_convey_data_(false), 121 was_used_to_convey_data_(false) {
123 num_bytes_read_(0) {
124 } 122 }
125 123
126 // Socket implementation. 124 // Socket implementation.
127 virtual int Read( 125 virtual int Read(
128 IOBuffer* /* buf */, int len, 126 IOBuffer* /* buf */, int len,
129 const CompletionCallback& /* callback */) OVERRIDE { 127 const CompletionCallback& /* callback */) OVERRIDE {
130 num_bytes_read_ += len; 128 return ERR_UNEXPECTED;
131 return len;
132 } 129 }
133 130
134 virtual int Write( 131 virtual int Write(
135 IOBuffer* /* buf */, int len, 132 IOBuffer* /* buf */, int len,
136 const CompletionCallback& /* callback */) OVERRIDE { 133 const CompletionCallback& /* callback */) OVERRIDE {
137 was_used_to_convey_data_ = true; 134 was_used_to_convey_data_ = true;
138 return len; 135 return len;
139 } 136 }
140 virtual bool SetReceiveBufferSize(int32 size) OVERRIDE { return true; } 137 virtual bool SetReceiveBufferSize(int32 size) OVERRIDE { return true; }
141 virtual bool SetSendBufferSize(int32 size) OVERRIDE { return true; } 138 virtual bool SetSendBufferSize(int32 size) OVERRIDE { return true; }
(...skipping 16 matching lines...) Expand all
158 return ERR_UNEXPECTED; 155 return ERR_UNEXPECTED;
159 } 156 }
160 157
161 virtual const BoundNetLog& NetLog() const OVERRIDE { 158 virtual const BoundNetLog& NetLog() const OVERRIDE {
162 return net_log_; 159 return net_log_;
163 } 160 }
164 161
165 virtual void SetSubresourceSpeculation() OVERRIDE {} 162 virtual void SetSubresourceSpeculation() OVERRIDE {}
166 virtual void SetOmniboxSpeculation() OVERRIDE {} 163 virtual void SetOmniboxSpeculation() OVERRIDE {}
167 virtual bool WasEverUsed() const OVERRIDE { 164 virtual bool WasEverUsed() const OVERRIDE {
168 return was_used_to_convey_data_ || num_bytes_read_ > 0; 165 return was_used_to_convey_data_;
169 } 166 }
170 virtual bool UsingTCPFastOpen() const OVERRIDE { return false; } 167 virtual bool UsingTCPFastOpen() const OVERRIDE { return false; }
171 virtual int64 NumBytesRead() const OVERRIDE { return num_bytes_read_; }
172 virtual base::TimeDelta GetConnectTimeMicros() const OVERRIDE {
173 static const base::TimeDelta kDummyConnectTimeMicros =
174 base::TimeDelta::FromMicroseconds(10);
175 return kDummyConnectTimeMicros; // Dummy value.
176 }
177 virtual bool WasNpnNegotiated() const OVERRIDE { 168 virtual bool WasNpnNegotiated() const OVERRIDE {
178 return false; 169 return false;
179 } 170 }
180 virtual NextProto GetNegotiatedProtocol() const OVERRIDE { 171 virtual NextProto GetNegotiatedProtocol() const OVERRIDE {
181 return kProtoUnknown; 172 return kProtoUnknown;
182 } 173 }
183 virtual bool GetSSLInfo(SSLInfo* ssl_info) OVERRIDE { 174 virtual bool GetSSLInfo(SSLInfo* ssl_info) OVERRIDE {
184 return false; 175 return false;
185 } 176 }
186 177
187 private: 178 private:
188 bool connected_; 179 bool connected_;
189 BoundNetLog net_log_; 180 BoundNetLog net_log_;
190 bool was_used_to_convey_data_; 181 bool was_used_to_convey_data_;
191 int num_bytes_read_;
192 182
193 DISALLOW_COPY_AND_ASSIGN(MockClientSocket); 183 DISALLOW_COPY_AND_ASSIGN(MockClientSocket);
194 }; 184 };
195 185
196 class TestConnectJob; 186 class TestConnectJob;
197 187
198 class MockClientSocketFactory : public ClientSocketFactory { 188 class MockClientSocketFactory : public ClientSocketFactory {
199 public: 189 public:
200 MockClientSocketFactory() : allocation_count_(0) {} 190 MockClientSocketFactory() : allocation_count_(0) {}
201 191
(...skipping 536 matching lines...) Expand 10 before | Expand all | Expand 10 after
738 bool connect_backup_jobs_enabled_; 728 bool connect_backup_jobs_enabled_;
739 bool cleanup_timer_enabled_; 729 bool cleanup_timer_enabled_;
740 MockClientSocketFactory client_socket_factory_; 730 MockClientSocketFactory client_socket_factory_;
741 TestConnectJobFactory* connect_job_factory_; 731 TestConnectJobFactory* connect_job_factory_;
742 scoped_refptr<TestSocketParams> params_; 732 scoped_refptr<TestSocketParams> params_;
743 ClientSocketPoolHistograms histograms_; 733 ClientSocketPoolHistograms histograms_;
744 scoped_ptr<TestClientSocketPool> pool_; 734 scoped_ptr<TestClientSocketPool> pool_;
745 ClientSocketPoolTest test_base_; 735 ClientSocketPoolTest test_base_;
746 }; 736 };
747 737
748 TEST_F(ClientSocketPoolBaseTest, AssignIdleSocketToGroup_WarmestSocket) {
749 CreatePool(4, 4);
750 net::SetSocketReusePolicy(0);
751
752 EXPECT_EQ(OK, StartRequest("a", kDefaultPriority));
753 EXPECT_EQ(OK, StartRequest("a", kDefaultPriority));
754 EXPECT_EQ(OK, StartRequest("a", kDefaultPriority));
755 EXPECT_EQ(OK, StartRequest("a", kDefaultPriority));
756
757 std::map<int, StreamSocket*> sockets_;
758 for (size_t i = 0; i < test_base_.requests_size(); i++) {
759 TestSocketRequest* req = test_base_.request(i);
760 StreamSocket* s = req->handle()->socket();
761 MockClientSocket* sock = static_cast<MockClientSocket*>(s);
762 CHECK(sock);
763 sockets_[i] = sock;
764 sock->Read(NULL, 1024 - i, CompletionCallback());
765 }
766
767 ReleaseAllConnections(ClientSocketPoolTest::KEEP_ALIVE);
768
769 EXPECT_EQ(OK, StartRequest("a", kDefaultPriority));
770 TestSocketRequest* req = test_base_.request(test_base_.requests_size() - 1);
771
772 // First socket is warmest.
773 EXPECT_EQ(sockets_[0], req->handle()->socket());
774
775 // Test that NumBytes are as expected.
776 EXPECT_EQ(1024, sockets_[0]->NumBytesRead());
777 EXPECT_EQ(1023, sockets_[1]->NumBytesRead());
778 EXPECT_EQ(1022, sockets_[2]->NumBytesRead());
779 EXPECT_EQ(1021, sockets_[3]->NumBytesRead());
780
781 ReleaseAllConnections(ClientSocketPoolTest::NO_KEEP_ALIVE);
782 }
783
784 TEST_F(ClientSocketPoolBaseTest, AssignIdleSocketToGroup_LastAccessedSocket) {
785 CreatePool(4, 4);
786 net::SetSocketReusePolicy(2);
787
788 EXPECT_EQ(OK, StartRequest("a", kDefaultPriority));
789 EXPECT_EQ(OK, StartRequest("a", kDefaultPriority));
790 EXPECT_EQ(OK, StartRequest("a", kDefaultPriority));
791 EXPECT_EQ(OK, StartRequest("a", kDefaultPriority));
792
793 std::map<int, StreamSocket*> sockets_;
794 for (size_t i = 0; i < test_base_.requests_size(); i++) {
795 TestSocketRequest* req = test_base_.request(i);
796 StreamSocket* s = req->handle()->socket();
797 MockClientSocket* sock = static_cast<MockClientSocket*>(s);
798 CHECK(sock);
799 sockets_[i] = sock;
800 sock->Read(NULL, 1024 - i, CompletionCallback());
801 }
802
803 ReleaseAllConnections(ClientSocketPoolTest::KEEP_ALIVE);
804
805 EXPECT_EQ(OK, StartRequest("a", kDefaultPriority));
806 TestSocketRequest* req = test_base_.request(test_base_.requests_size() - 1);
807
808 // Last socket is most recently accessed.
809 EXPECT_EQ(sockets_[3], req->handle()->socket());
810 ReleaseAllConnections(ClientSocketPoolTest::NO_KEEP_ALIVE);
811 }
812
813 // Even though a timeout is specified, it doesn't time out on a synchronous 738 // Even though a timeout is specified, it doesn't time out on a synchronous
814 // completion. 739 // completion.
815 TEST_F(ClientSocketPoolBaseTest, ConnectJob_NoTimeoutOnSynchronousCompletion) { 740 TEST_F(ClientSocketPoolBaseTest, ConnectJob_NoTimeoutOnSynchronousCompletion) {
816 TestConnectJobDelegate delegate; 741 TestConnectJobDelegate delegate;
817 ClientSocketHandle ignored; 742 ClientSocketHandle ignored;
818 TestClientSocketPoolBase::Request request( 743 TestClientSocketPoolBase::Request request(
819 &ignored, CompletionCallback(), kDefaultPriority, 744 &ignored, CompletionCallback(), kDefaultPriority,
820 internal::ClientSocketPoolBaseHelper::NORMAL, 745 internal::ClientSocketPoolBaseHelper::NORMAL,
821 false, params_, BoundNetLog()); 746 false, params_, BoundNetLog());
822 scoped_ptr<TestConnectJob> job( 747 scoped_ptr<TestConnectJob> job(
(...skipping 2810 matching lines...) Expand 10 before | Expand all | Expand 10 after
3633 // complete. 3558 // complete.
3634 EXPECT_EQ(1, pool_->NumConnectJobsInGroup("a")); 3559 EXPECT_EQ(1, pool_->NumConnectJobsInGroup("a"));
3635 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("a")); 3560 EXPECT_EQ(0, pool_->NumUnassignedConnectJobsInGroup("a"));
3636 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a")); 3561 EXPECT_EQ(0, pool_->IdleSocketCountInGroup("a"));
3637 EXPECT_EQ(1, pool_->NumActiveSocketsInGroup("a")); 3562 EXPECT_EQ(1, pool_->NumActiveSocketsInGroup("a"));
3638 } 3563 }
3639 3564
3640 } // namespace 3565 } // namespace
3641 3566
3642 } // namespace net 3567 } // namespace net
OLDNEW
« no previous file with comments | « net/socket/client_socket_pool_base.cc ('k') | net/socket/socket_test_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698