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

Side by Side Diff: net/tools/quic/test_tools/quic_test_client.cc

Issue 131743009: Land Recent QUIC Changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: use size_t instead of int to fix win_x64 compile error Created 6 years, 11 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/tools/quic/test_tools/quic_test_client.h" 5 #include "net/tools/quic/test_tools/quic_test_client.h"
6 6
7 #include "base/time/time.h" 7 #include "base/time/time.h"
8 #include "net/base/completion_callback.h" 8 #include "net/base/completion_callback.h"
9 #include "net/base/net_errors.h" 9 #include "net/base/net_errors.h"
10 #include "net/cert/cert_verify_result.h" 10 #include "net/cert/cert_verify_result.h"
11 #include "net/cert/x509_certificate.h" 11 #include "net/cert/x509_certificate.h"
12 #include "net/quic/crypto/proof_verifier.h" 12 #include "net/quic/crypto/proof_verifier.h"
13 #include "net/quic/test_tools/quic_connection_peer.h" 13 #include "net/quic/test_tools/quic_connection_peer.h"
14 #include "net/tools/balsa/balsa_headers.h" 14 #include "net/tools/balsa/balsa_headers.h"
15 #include "net/tools/quic/quic_epoll_connection_helper.h" 15 #include "net/tools/quic/quic_epoll_connection_helper.h"
16 #include "net/tools/quic/quic_packet_writer_wrapper.h"
16 #include "net/tools/quic/quic_spdy_client_stream.h" 17 #include "net/tools/quic/quic_spdy_client_stream.h"
17 #include "net/tools/quic/test_tools/http_message_test_utils.h" 18 #include "net/tools/quic/test_tools/http_message_test_utils.h"
18 #include "net/tools/quic/test_tools/quic_client_peer.h" 19 #include "net/tools/quic/test_tools/quic_client_peer.h"
19 #include "url/gurl.h" 20 #include "url/gurl.h"
20 21
21 using base::StringPiece; 22 using base::StringPiece;
22 using net::test::QuicConnectionPeer; 23 using net::test::QuicConnectionPeer;
23 using net::test::QuicTestWriter;
24 using std::string; 24 using std::string;
25 using std::vector; 25 using std::vector;
26 26
27 namespace { 27 namespace {
28 28
29 // RecordingProofVerifier accepts any certificate chain and records the common 29 // RecordingProofVerifier accepts any certificate chain and records the common
30 // name of the leaf. 30 // name of the leaf.
31 class RecordingProofVerifier : public net::ProofVerifier { 31 class RecordingProofVerifier : public net::ProofVerifier {
32 public: 32 public:
33 // ProofVerifier interface. 33 // ProofVerifier interface.
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 // If we have a relative URL, set some defaults. 89 // If we have a relative URL, set some defaults.
90 string full_uri = secure ? "https://www.google.com" : 90 string full_uri = secure ? "https://www.google.com" :
91 "http://www.google.com"; 91 "http://www.google.com";
92 full_uri.append(uri.as_string()); 92 full_uri.append(uri.as_string());
93 headers->SetRequestUri(full_uri); 93 headers->SetRequestUri(full_uri);
94 } 94 }
95 return headers; 95 return headers;
96 } 96 }
97 97
98 // A quic client which allows mocking out writes. 98 // A quic client which allows mocking out writes.
99 class QuicEpollClient : public QuicClient { 99 class MockableQuicClient : public QuicClient {
100 public: 100 public:
101 typedef QuicClient Super; 101 MockableQuicClient(IPEndPoint server_address,
102 const string& server_hostname,
103 const QuicVersionVector& supported_versions)
104 : QuicClient(server_address, server_hostname, supported_versions, false),
105 override_guid_(0),
106 test_writer_(NULL) {}
102 107
103 QuicEpollClient(IPEndPoint server_address, 108 MockableQuicClient(IPEndPoint server_address,
104 const string& server_hostname, 109 const string& server_hostname,
105 const QuicVersionVector& supported_versions) 110 const QuicConfig& config,
106 : Super(server_address, server_hostname, supported_versions, false), 111 const QuicVersionVector& supported_versions)
107 override_guid_(0), test_writer_(NULL) { 112 : QuicClient(server_address, server_hostname, config, supported_versions),
108 } 113 override_guid_(0),
114 test_writer_(NULL) {}
109 115
110 QuicEpollClient(IPEndPoint server_address, 116 virtual ~MockableQuicClient() {
111 const string& server_hostname,
112 const QuicConfig& config,
113 const QuicVersionVector& supported_versions)
114 : Super(server_address, server_hostname, config, supported_versions),
115 override_guid_(0), test_writer_(NULL) {
116 }
117
118 virtual ~QuicEpollClient() {
119 if (connected()) { 117 if (connected()) {
120 Disconnect(); 118 Disconnect();
121 } 119 }
122 } 120 }
123 121
124 virtual QuicPacketWriter* CreateQuicPacketWriter() OVERRIDE { 122 virtual QuicPacketWriter* CreateQuicPacketWriter() OVERRIDE {
125 QuicPacketWriter* writer = Super::CreateQuicPacketWriter(); 123 QuicPacketWriter* writer = QuicClient::CreateQuicPacketWriter();
126 if (!test_writer_) { 124 if (!test_writer_) {
127 return writer; 125 return writer;
128 } 126 }
129 test_writer_->set_writer(writer); 127 test_writer_->set_writer(writer);
130 return test_writer_; 128 return test_writer_;
131 } 129 }
132 130
133 virtual QuicGuid GenerateGuid() OVERRIDE { 131 virtual QuicGuid GenerateGuid() OVERRIDE {
134 return override_guid_ ? override_guid_ : Super::GenerateGuid(); 132 return override_guid_ ? override_guid_ : QuicClient::GenerateGuid();
135 } 133 }
136 134
137 // Takes ownership of writer. 135 // Takes ownership of writer.
138 void UseWriter(QuicTestWriter* writer) { test_writer_ = writer; } 136 void UseWriter(QuicPacketWriterWrapper* writer) { test_writer_ = writer; }
139 137
140 void UseGuid(QuicGuid guid) { 138 void UseGuid(QuicGuid guid) { override_guid_ = guid; }
141 override_guid_ = guid;
142 }
143 139
144 private: 140 private:
145 QuicGuid override_guid_; // GUID to use, if nonzero 141 QuicGuid override_guid_; // GUID to use, if nonzero
146 QuicTestWriter* test_writer_; 142 QuicPacketWriterWrapper* test_writer_;
147 }; 143 };
148 144
149 QuicTestClient::QuicTestClient(IPEndPoint address, const string& hostname, 145 QuicTestClient::QuicTestClient(IPEndPoint address, const string& hostname,
150 const QuicVersionVector& supported_versions) 146 const QuicVersionVector& supported_versions)
151 : client_(new QuicEpollClient(address, hostname, supported_versions)) { 147 : client_(new MockableQuicClient(address, hostname, supported_versions)) {
152 Initialize(address, hostname, true); 148 Initialize(address, hostname, true);
153 } 149 }
154 150
155 QuicTestClient::QuicTestClient(IPEndPoint address, 151 QuicTestClient::QuicTestClient(IPEndPoint address,
156 const string& hostname, 152 const string& hostname,
157 bool secure, 153 bool secure,
158 const QuicVersionVector& supported_versions) 154 const QuicVersionVector& supported_versions)
159 : client_(new QuicEpollClient(address, hostname, supported_versions)) { 155 : client_(new MockableQuicClient(address, hostname, supported_versions)) {
160 Initialize(address, hostname, secure); 156 Initialize(address, hostname, secure);
161 } 157 }
162 158
163 QuicTestClient::QuicTestClient(IPEndPoint address, 159 QuicTestClient::QuicTestClient(IPEndPoint address,
164 const string& hostname, 160 const string& hostname,
165 bool secure, 161 bool secure,
166 const QuicConfig& config, 162 const QuicConfig& config,
167 const QuicVersionVector& supported_versions) 163 const QuicVersionVector& supported_versions)
168 : client_(new QuicEpollClient(address, hostname, config, 164 : client_(new MockableQuicClient(
169 supported_versions)) { 165 address, hostname, config, supported_versions)) {
170 Initialize(address, hostname, secure); 166 Initialize(address, hostname, secure);
171 } 167 }
172 168
173 void QuicTestClient::Initialize(IPEndPoint address, 169 void QuicTestClient::Initialize(IPEndPoint address,
174 const string& hostname, 170 const string& hostname,
175 bool secure) { 171 bool secure) {
176 server_address_ = address; 172 server_address_ = address;
177 priority_ = 3; 173 priority_ = 3;
178 connect_attempted_ = false; 174 connect_attempted_ = false;
179 secure_ = secure; 175 secure_ = secure;
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 } 226 }
231 227
232 ssize_t QuicTestClient::SendData(string data, bool last_data) { 228 ssize_t QuicTestClient::SendData(string data, bool last_data) {
233 QuicSpdyClientStream* stream = GetOrCreateStream(); 229 QuicSpdyClientStream* stream = GetOrCreateStream();
234 if (!stream) { return 0; } 230 if (!stream) { return 0; }
235 GetOrCreateStream()->SendBody(data, last_data); 231 GetOrCreateStream()->SendBody(data, last_data);
236 WaitForWriteToFlush(); 232 WaitForWriteToFlush();
237 return data.length(); 233 return data.length();
238 } 234 }
239 235
236 QuicPacketCreator::Options* QuicTestClient::options() {
237 return client_->options();
238 }
239
240 string QuicTestClient::SendCustomSynchronousRequest( 240 string QuicTestClient::SendCustomSynchronousRequest(
241 const HTTPMessage& message) { 241 const HTTPMessage& message) {
242 SendMessage(message); 242 SendMessage(message);
243 WaitForResponse(); 243 WaitForResponse();
244 return response_; 244 return response_;
245 } 245 }
246 246
247 string QuicTestClient::SendSynchronousRequest(const string& uri) { 247 string QuicTestClient::SendSynchronousRequest(const string& uri) {
248 if (SendRequest(uri) == 0) { 248 if (SendRequest(uri) == 0) {
249 DLOG(ERROR) << "Failed the request for uri:" << uri; 249 DLOG(ERROR) << "Failed the request for uri:" << uri;
(...skipping 17 matching lines...) Expand all
267 if (stream_ == NULL) { 267 if (stream_ == NULL) {
268 return NULL; 268 return NULL;
269 } 269 }
270 stream_->set_visitor(this); 270 stream_->set_visitor(this);
271 reinterpret_cast<QuicSpdyClientStream*>(stream_)->set_priority(priority_); 271 reinterpret_cast<QuicSpdyClientStream*>(stream_)->set_priority(priority_);
272 } 272 }
273 273
274 return stream_; 274 return stream_;
275 } 275 }
276 276
277 QuicErrorCode QuicTestClient::connection_error() {
278 return client()->session()->error();
279 }
280
281 QuicClient* QuicTestClient::client() { return client_.get(); }
282
277 const string& QuicTestClient::cert_common_name() const { 283 const string& QuicTestClient::cert_common_name() const {
278 return reinterpret_cast<RecordingProofVerifier*>(proof_verifier_) 284 return reinterpret_cast<RecordingProofVerifier*>(proof_verifier_)
279 ->common_name(); 285 ->common_name();
280 } 286 }
281 287
282 QuicTagValueMap QuicTestClient::GetServerConfig() const { 288 QuicTagValueMap QuicTestClient::GetServerConfig() const {
283 net::QuicCryptoClientConfig* config = 289 net::QuicCryptoClientConfig* config =
284 QuicClientPeer::GetCryptoConfig(client_.get()); 290 QuicClientPeer::GetCryptoConfig(client_.get());
285 net::QuicCryptoClientConfig::CachedState* state = 291 net::QuicCryptoClientConfig::CachedState* state =
286 config->LookupOrCreate(client_->server_hostname()); 292 config->LookupOrCreate(client_->server_hostname());
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
428 headers_.CopyFrom(stream_->headers()); 434 headers_.CopyFrom(stream_->headers());
429 stream_error_ = stream_->stream_error(); 435 stream_error_ = stream_->stream_error();
430 bytes_read_ = stream_->stream_bytes_read() + stream_->header_bytes_read(); 436 bytes_read_ = stream_->stream_bytes_read() + stream_->header_bytes_read();
431 bytes_written_ = 437 bytes_written_ =
432 stream_->stream_bytes_written() + stream_->header_bytes_written(); 438 stream_->stream_bytes_written() + stream_->header_bytes_written();
433 response_header_size_ = headers_.GetSizeForWriteBuffer(); 439 response_header_size_ = headers_.GetSizeForWriteBuffer();
434 response_body_size_ = stream_->data().size(); 440 response_body_size_ = stream_->data().size();
435 stream_ = NULL; 441 stream_ = NULL;
436 } 442 }
437 443
438 void QuicTestClient::UseWriter(QuicTestWriter* writer) { 444 void QuicTestClient::UseWriter(QuicPacketWriterWrapper* writer) {
439 reinterpret_cast<QuicEpollClient*>(client_.get())->UseWriter(writer); 445 client_->UseWriter(writer);
440 } 446 }
441 447
442 void QuicTestClient::UseGuid(QuicGuid guid) { 448 void QuicTestClient::UseGuid(QuicGuid guid) {
443 DCHECK(!connected()); 449 DCHECK(!connected());
444 reinterpret_cast<QuicEpollClient*>(client_.get())->UseGuid(guid); 450 client_->UseGuid(guid);
445 } 451 }
446 452
447 void QuicTestClient::WaitForWriteToFlush() { 453 void QuicTestClient::WaitForWriteToFlush() {
448 while (connected() && client()->session()->HasQueuedData()) { 454 while (connected() && client()->session()->HasDataToWrite()) {
449 client_->WaitForEvents(); 455 client_->WaitForEvents();
450 } 456 }
451 } 457 }
452 458
453 } // namespace test 459 } // namespace test
454 } // namespace tools 460 } // namespace tools
455 } // namespace net 461 } // namespace net
OLDNEW
« no previous file with comments | « net/tools/quic/test_tools/quic_test_client.h ('k') | net/tools/quic/test_tools/quic_test_utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698