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

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

Issue 266243004: Clang format slam. Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 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
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 // This test suite uses SSLClientSocket to test the implementation of 5 // This test suite uses SSLClientSocket to test the implementation of
6 // SSLServerSocket. In order to establish connections between the sockets 6 // SSLServerSocket. In order to establish connections between the sockets
7 // we need two additional classes: 7 // we need two additional classes:
8 // 1. FakeSocket 8 // 1. FakeSocket
9 // Connects SSL socket to FakeDataChannel. This class is just a stub. 9 // Connects SSL socket to FakeDataChannel. This class is just a stub.
10 // 10 //
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 namespace net { 51 namespace net {
52 52
53 namespace { 53 namespace {
54 54
55 class FakeDataChannel { 55 class FakeDataChannel {
56 public: 56 public:
57 FakeDataChannel() 57 FakeDataChannel()
58 : read_buf_len_(0), 58 : read_buf_len_(0),
59 closed_(false), 59 closed_(false),
60 write_called_after_close_(false), 60 write_called_after_close_(false),
61 weak_factory_(this) { 61 weak_factory_(this) {}
62 }
63 62
64 int Read(IOBuffer* buf, int buf_len, const CompletionCallback& callback) { 63 int Read(IOBuffer* buf, int buf_len, const CompletionCallback& callback) {
65 if (closed_) 64 if (closed_)
66 return 0; 65 return 0;
67 if (data_.empty()) { 66 if (data_.empty()) {
68 read_callback_ = callback; 67 read_callback_ = callback;
69 read_buf_ = buf; 68 read_buf_ = buf;
70 read_buf_len_ = buf_len; 69 read_buf_len_ = buf_len;
71 return net::ERR_IO_PENDING; 70 return net::ERR_IO_PENDING;
72 } 71 }
73 return PropogateData(buf, buf_len); 72 return PropogateData(buf, buf_len);
74 } 73 }
75 74
76 int Write(IOBuffer* buf, int buf_len, const CompletionCallback& callback) { 75 int Write(IOBuffer* buf, int buf_len, const CompletionCallback& callback) {
77 if (closed_) { 76 if (closed_) {
78 if (write_called_after_close_) 77 if (write_called_after_close_)
79 return net::ERR_CONNECTION_RESET; 78 return net::ERR_CONNECTION_RESET;
80 write_called_after_close_ = true; 79 write_called_after_close_ = true;
81 write_callback_ = callback; 80 write_callback_ = callback;
82 base::MessageLoop::current()->PostTask( 81 base::MessageLoop::current()->PostTask(
83 FROM_HERE, base::Bind(&FakeDataChannel::DoWriteCallback, 82 FROM_HERE,
84 weak_factory_.GetWeakPtr())); 83 base::Bind(&FakeDataChannel::DoWriteCallback,
84 weak_factory_.GetWeakPtr()));
85 return net::ERR_IO_PENDING; 85 return net::ERR_IO_PENDING;
86 } 86 }
87 data_.push(new net::DrainableIOBuffer(buf, buf_len)); 87 data_.push(new net::DrainableIOBuffer(buf, buf_len));
88 base::MessageLoop::current()->PostTask( 88 base::MessageLoop::current()->PostTask(
89 FROM_HERE, base::Bind(&FakeDataChannel::DoReadCallback, 89 FROM_HERE,
90 weak_factory_.GetWeakPtr())); 90 base::Bind(&FakeDataChannel::DoReadCallback,
91 weak_factory_.GetWeakPtr()));
91 return buf_len; 92 return buf_len;
92 } 93 }
93 94
94 // Closes the FakeDataChannel. After Close() is called, Read() returns 0, 95 // Closes the FakeDataChannel. After Close() is called, Read() returns 0,
95 // indicating EOF, and Write() fails with ERR_CONNECTION_RESET. Note that 96 // indicating EOF, and Write() fails with ERR_CONNECTION_RESET. Note that
96 // after the FakeDataChannel is closed, the first Write() call completes 97 // after the FakeDataChannel is closed, the first Write() call completes
97 // asynchronously, which is necessary to reproduce bug 127822. 98 // asynchronously, which is necessary to reproduce bug 127822.
98 void Close() { 99 void Close() { closed_ = true; }
99 closed_ = true;
100 }
101 100
102 private: 101 private:
103 void DoReadCallback() { 102 void DoReadCallback() {
104 if (read_callback_.is_null() || data_.empty()) 103 if (read_callback_.is_null() || data_.empty())
105 return; 104 return;
106 105
107 int copied = PropogateData(read_buf_, read_buf_len_); 106 int copied = PropogateData(read_buf_, read_buf_len_);
108 CompletionCallback callback = read_callback_; 107 CompletionCallback callback = read_callback_;
109 read_callback_.Reset(); 108 read_callback_.Reset();
110 read_buf_ = NULL; 109 read_buf_ = NULL;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 149
151 base::WeakPtrFactory<FakeDataChannel> weak_factory_; 150 base::WeakPtrFactory<FakeDataChannel> weak_factory_;
152 151
153 DISALLOW_COPY_AND_ASSIGN(FakeDataChannel); 152 DISALLOW_COPY_AND_ASSIGN(FakeDataChannel);
154 }; 153 };
155 154
156 class FakeSocket : public StreamSocket { 155 class FakeSocket : public StreamSocket {
157 public: 156 public:
158 FakeSocket(FakeDataChannel* incoming_channel, 157 FakeSocket(FakeDataChannel* incoming_channel,
159 FakeDataChannel* outgoing_channel) 158 FakeDataChannel* outgoing_channel)
160 : incoming_(incoming_channel), 159 : incoming_(incoming_channel), outgoing_(outgoing_channel) {}
161 outgoing_(outgoing_channel) {
162 }
163 160
164 virtual ~FakeSocket() { 161 virtual ~FakeSocket() {}
165 }
166 162
167 virtual int Read(IOBuffer* buf, int buf_len, 163 virtual int Read(IOBuffer* buf,
164 int buf_len,
168 const CompletionCallback& callback) OVERRIDE { 165 const CompletionCallback& callback) OVERRIDE {
169 // Read random number of bytes. 166 // Read random number of bytes.
170 buf_len = rand() % buf_len + 1; 167 buf_len = rand() % buf_len + 1;
171 return incoming_->Read(buf, buf_len, callback); 168 return incoming_->Read(buf, buf_len, callback);
172 } 169 }
173 170
174 virtual int Write(IOBuffer* buf, int buf_len, 171 virtual int Write(IOBuffer* buf,
172 int buf_len,
175 const CompletionCallback& callback) OVERRIDE { 173 const CompletionCallback& callback) OVERRIDE {
176 // Write random number of bytes. 174 // Write random number of bytes.
177 buf_len = rand() % buf_len + 1; 175 buf_len = rand() % buf_len + 1;
178 return outgoing_->Write(buf, buf_len, callback); 176 return outgoing_->Write(buf, buf_len, callback);
179 } 177 }
180 178
181 virtual int SetReceiveBufferSize(int32 size) OVERRIDE { 179 virtual int SetReceiveBufferSize(int32 size) OVERRIDE { return net::OK; }
182 return net::OK;
183 }
184 180
185 virtual int SetSendBufferSize(int32 size) OVERRIDE { 181 virtual int SetSendBufferSize(int32 size) OVERRIDE { return net::OK; }
186 return net::OK;
187 }
188 182
189 virtual int Connect(const CompletionCallback& callback) OVERRIDE { 183 virtual int Connect(const CompletionCallback& callback) OVERRIDE {
190 return net::OK; 184 return net::OK;
191 } 185 }
192 186
193 virtual void Disconnect() OVERRIDE { 187 virtual void Disconnect() OVERRIDE {
194 incoming_->Close(); 188 incoming_->Close();
195 outgoing_->Close(); 189 outgoing_->Close();
196 } 190 }
197 191
198 virtual bool IsConnected() const OVERRIDE { 192 virtual bool IsConnected() const OVERRIDE { return true; }
199 return true;
200 }
201 193
202 virtual bool IsConnectedAndIdle() const OVERRIDE { 194 virtual bool IsConnectedAndIdle() const OVERRIDE { return true; }
203 return true;
204 }
205 195
206 virtual int GetPeerAddress(IPEndPoint* address) const OVERRIDE { 196 virtual int GetPeerAddress(IPEndPoint* address) const OVERRIDE {
207 net::IPAddressNumber ip_address(net::kIPv4AddressSize); 197 net::IPAddressNumber ip_address(net::kIPv4AddressSize);
208 *address = net::IPEndPoint(ip_address, 0 /*port*/); 198 *address = net::IPEndPoint(ip_address, 0 /*port*/);
209 return net::OK; 199 return net::OK;
210 } 200 }
211 201
212 virtual int GetLocalAddress(IPEndPoint* address) const OVERRIDE { 202 virtual int GetLocalAddress(IPEndPoint* address) const OVERRIDE {
213 net::IPAddressNumber ip_address(4); 203 net::IPAddressNumber ip_address(4);
214 *address = net::IPEndPoint(ip_address, 0); 204 *address = net::IPEndPoint(ip_address, 0);
215 return net::OK; 205 return net::OK;
216 } 206 }
217 207
218 virtual const BoundNetLog& NetLog() const OVERRIDE { 208 virtual const BoundNetLog& NetLog() const OVERRIDE { return net_log_; }
219 return net_log_;
220 }
221 209
222 virtual void SetSubresourceSpeculation() OVERRIDE {} 210 virtual void SetSubresourceSpeculation() OVERRIDE {}
223 virtual void SetOmniboxSpeculation() OVERRIDE {} 211 virtual void SetOmniboxSpeculation() OVERRIDE {}
224 212
225 virtual bool WasEverUsed() const OVERRIDE { 213 virtual bool WasEverUsed() const OVERRIDE { return true; }
226 return true;
227 }
228 214
229 virtual bool UsingTCPFastOpen() const OVERRIDE { 215 virtual bool UsingTCPFastOpen() const OVERRIDE { return false; }
230 return false;
231 }
232 216
233 217 virtual bool WasNpnNegotiated() const OVERRIDE { return false; }
234 virtual bool WasNpnNegotiated() const OVERRIDE {
235 return false;
236 }
237 218
238 virtual NextProto GetNegotiatedProtocol() const OVERRIDE { 219 virtual NextProto GetNegotiatedProtocol() const OVERRIDE {
239 return kProtoUnknown; 220 return kProtoUnknown;
240 } 221 }
241 222
242 virtual bool GetSSLInfo(SSLInfo* ssl_info) OVERRIDE { 223 virtual bool GetSSLInfo(SSLInfo* ssl_info) OVERRIDE { return false; }
243 return false;
244 }
245 224
246 private: 225 private:
247 net::BoundNetLog net_log_; 226 net::BoundNetLog net_log_;
248 FakeDataChannel* incoming_; 227 FakeDataChannel* incoming_;
249 FakeDataChannel* outgoing_; 228 FakeDataChannel* outgoing_;
250 229
251 DISALLOW_COPY_AND_ASSIGN(FakeSocket); 230 DISALLOW_COPY_AND_ASSIGN(FakeSocket);
252 }; 231 };
253 232
254 } // namespace 233 } // namespace
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
337 // Certificate provided by the host doesn't need authority. 316 // Certificate provided by the host doesn't need authority.
338 net::SSLConfig::CertAndStatus cert_and_status; 317 net::SSLConfig::CertAndStatus cert_and_status;
339 cert_and_status.cert_status = CERT_STATUS_AUTHORITY_INVALID; 318 cert_and_status.cert_status = CERT_STATUS_AUTHORITY_INVALID;
340 cert_and_status.der_cert = cert_der; 319 cert_and_status.der_cert = cert_der;
341 ssl_config.allowed_bad_certs.push_back(cert_and_status); 320 ssl_config.allowed_bad_certs.push_back(cert_and_status);
342 321
343 net::HostPortPair host_and_pair("unittest", 0); 322 net::HostPortPair host_and_pair("unittest", 0);
344 net::SSLClientSocketContext context; 323 net::SSLClientSocketContext context;
345 context.cert_verifier = cert_verifier_.get(); 324 context.cert_verifier = cert_verifier_.get();
346 context.transport_security_state = transport_security_state_.get(); 325 context.transport_security_state = transport_security_state_.get();
347 client_socket_ = 326 client_socket_ = socket_factory_->CreateSSLClientSocket(
348 socket_factory_->CreateSSLClientSocket( 327 client_connection.Pass(), host_and_pair, ssl_config, context);
349 client_connection.Pass(), host_and_pair, ssl_config, context);
350 server_socket_ = net::CreateSSLServerSocket( 328 server_socket_ = net::CreateSSLServerSocket(
351 server_socket.Pass(), 329 server_socket.Pass(), cert.get(), private_key.get(), net::SSLConfig());
352 cert.get(), private_key.get(), net::SSLConfig());
353 } 330 }
354 331
355 FakeDataChannel channel_1_; 332 FakeDataChannel channel_1_;
356 FakeDataChannel channel_2_; 333 FakeDataChannel channel_2_;
357 scoped_ptr<net::SSLClientSocket> client_socket_; 334 scoped_ptr<net::SSLClientSocket> client_socket_;
358 scoped_ptr<net::SSLServerSocket> server_socket_; 335 scoped_ptr<net::SSLServerSocket> server_socket_;
359 net::ClientSocketFactory* socket_factory_; 336 net::ClientSocketFactory* socket_factory_;
360 scoped_ptr<net::MockCertVerifier> cert_verifier_; 337 scoped_ptr<net::MockCertVerifier> cert_verifier_;
361 scoped_ptr<net::TransportSecurityState> transport_security_state_; 338 scoped_ptr<net::TransportSecurityState> transport_security_state_;
362 }; 339 };
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
414 391
415 client_ret = connect_callback.GetResult(client_ret); 392 client_ret = connect_callback.GetResult(client_ret);
416 ASSERT_EQ(net::OK, client_ret); 393 ASSERT_EQ(net::OK, client_ret);
417 server_ret = handshake_callback.GetResult(server_ret); 394 server_ret = handshake_callback.GetResult(server_ret);
418 ASSERT_EQ(net::OK, server_ret); 395 ASSERT_EQ(net::OK, server_ret);
419 396
420 const int kReadBufSize = 1024; 397 const int kReadBufSize = 1024;
421 scoped_refptr<net::StringIOBuffer> write_buf = 398 scoped_refptr<net::StringIOBuffer> write_buf =
422 new net::StringIOBuffer("testing123"); 399 new net::StringIOBuffer("testing123");
423 scoped_refptr<net::DrainableIOBuffer> read_buf = 400 scoped_refptr<net::DrainableIOBuffer> read_buf =
424 new net::DrainableIOBuffer(new net::IOBuffer(kReadBufSize), 401 new net::DrainableIOBuffer(new net::IOBuffer(kReadBufSize), kReadBufSize);
425 kReadBufSize);
426 402
427 // Write then read. 403 // Write then read.
428 TestCompletionCallback write_callback; 404 TestCompletionCallback write_callback;
429 TestCompletionCallback read_callback; 405 TestCompletionCallback read_callback;
430 server_ret = server_socket_->Write( 406 server_ret = server_socket_->Write(
431 write_buf.get(), write_buf->size(), write_callback.callback()); 407 write_buf.get(), write_buf->size(), write_callback.callback());
432 EXPECT_TRUE(server_ret > 0 || server_ret == net::ERR_IO_PENDING); 408 EXPECT_TRUE(server_ret > 0 || server_ret == net::ERR_IO_PENDING);
433 client_ret = client_socket_->Read( 409 client_ret = client_socket_->Read(
434 read_buf.get(), read_buf->BytesRemaining(), read_callback.callback()); 410 read_buf.get(), read_buf->BytesRemaining(), read_callback.callback());
435 EXPECT_TRUE(client_ret > 0 || client_ret == net::ERR_IO_PENDING); 411 EXPECT_TRUE(client_ret > 0 || client_ret == net::ERR_IO_PENDING);
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
522 498
523 // The client writes some data. This should not cause an infinite loop. 499 // The client writes some data. This should not cause an infinite loop.
524 client_ret = client_socket_->Write( 500 client_ret = client_socket_->Write(
525 write_buf.get(), write_buf->size(), write_callback.callback()); 501 write_buf.get(), write_buf->size(), write_callback.callback());
526 EXPECT_TRUE(client_ret > 0 || client_ret == net::ERR_IO_PENDING); 502 EXPECT_TRUE(client_ret > 0 || client_ret == net::ERR_IO_PENDING);
527 503
528 client_ret = write_callback.GetResult(client_ret); 504 client_ret = write_callback.GetResult(client_ret);
529 EXPECT_GT(client_ret, 0); 505 EXPECT_GT(client_ret, 0);
530 506
531 base::MessageLoop::current()->PostDelayedTask( 507 base::MessageLoop::current()->PostDelayedTask(
532 FROM_HERE, base::MessageLoop::QuitClosure(), 508 FROM_HERE,
509 base::MessageLoop::QuitClosure(),
533 base::TimeDelta::FromMilliseconds(10)); 510 base::TimeDelta::FromMilliseconds(10));
534 base::MessageLoop::current()->Run(); 511 base::MessageLoop::current()->Run();
535 } 512 }
536 513
537 // This test executes ExportKeyingMaterial() on the client and server sockets, 514 // This test executes ExportKeyingMaterial() on the client and server sockets,
538 // after connecting them, and verifies that the results match. 515 // after connecting them, and verifies that the results match.
539 // This test will fail if False Start is enabled (see crbug.com/90208). 516 // This test will fail if False Start is enabled (see crbug.com/90208).
540 TEST_F(SSLServerSocketTest, ExportKeyingMaterial) { 517 TEST_F(SSLServerSocketTest, ExportKeyingMaterial) {
541 Initialize(); 518 Initialize();
542 519
(...skipping 10 matching lines...) Expand all
553 ASSERT_EQ(net::OK, connect_callback.WaitForResult()); 530 ASSERT_EQ(net::OK, connect_callback.WaitForResult());
554 } 531 }
555 if (server_ret == net::ERR_IO_PENDING) { 532 if (server_ret == net::ERR_IO_PENDING) {
556 ASSERT_EQ(net::OK, handshake_callback.WaitForResult()); 533 ASSERT_EQ(net::OK, handshake_callback.WaitForResult());
557 } 534 }
558 535
559 const int kKeyingMaterialSize = 32; 536 const int kKeyingMaterialSize = 32;
560 const char* kKeyingLabel = "EXPERIMENTAL-server-socket-test"; 537 const char* kKeyingLabel = "EXPERIMENTAL-server-socket-test";
561 const char* kKeyingContext = ""; 538 const char* kKeyingContext = "";
562 unsigned char server_out[kKeyingMaterialSize]; 539 unsigned char server_out[kKeyingMaterialSize];
563 int rv = server_socket_->ExportKeyingMaterial(kKeyingLabel, 540 int rv = server_socket_->ExportKeyingMaterial(
564 false, kKeyingContext, 541 kKeyingLabel, false, kKeyingContext, server_out, sizeof(server_out));
565 server_out, sizeof(server_out));
566 ASSERT_EQ(net::OK, rv); 542 ASSERT_EQ(net::OK, rv);
567 543
568 unsigned char client_out[kKeyingMaterialSize]; 544 unsigned char client_out[kKeyingMaterialSize];
569 rv = client_socket_->ExportKeyingMaterial(kKeyingLabel, 545 rv = client_socket_->ExportKeyingMaterial(
570 false, kKeyingContext, 546 kKeyingLabel, false, kKeyingContext, client_out, sizeof(client_out));
571 client_out, sizeof(client_out));
572 ASSERT_EQ(net::OK, rv); 547 ASSERT_EQ(net::OK, rv);
573 EXPECT_EQ(0, memcmp(server_out, client_out, sizeof(server_out))); 548 EXPECT_EQ(0, memcmp(server_out, client_out, sizeof(server_out)));
574 549
575 const char* kKeyingLabelBad = "EXPERIMENTAL-server-socket-test-bad"; 550 const char* kKeyingLabelBad = "EXPERIMENTAL-server-socket-test-bad";
576 unsigned char client_bad[kKeyingMaterialSize]; 551 unsigned char client_bad[kKeyingMaterialSize];
577 rv = client_socket_->ExportKeyingMaterial(kKeyingLabelBad, 552 rv = client_socket_->ExportKeyingMaterial(
578 false, kKeyingContext, 553 kKeyingLabelBad, false, kKeyingContext, client_bad, sizeof(client_bad));
579 client_bad, sizeof(client_bad));
580 ASSERT_EQ(rv, net::OK); 554 ASSERT_EQ(rv, net::OK);
581 EXPECT_NE(0, memcmp(server_out, client_bad, sizeof(server_out))); 555 EXPECT_NE(0, memcmp(server_out, client_bad, sizeof(server_out)));
582 } 556 }
583 #endif 557 #endif
584 558
585 } // namespace net 559 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698