OLD | NEW |
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 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
260 FakeSocket client(&channel_1, &channel_2); | 260 FakeSocket client(&channel_1, &channel_2); |
261 FakeSocket server(&channel_2, &channel_1); | 261 FakeSocket server(&channel_2, &channel_1); |
262 | 262 |
263 const char kTestData[] = "testing123"; | 263 const char kTestData[] = "testing123"; |
264 const int kTestDataSize = strlen(kTestData); | 264 const int kTestDataSize = strlen(kTestData); |
265 const int kReadBufSize = 1024; | 265 const int kReadBufSize = 1024; |
266 scoped_refptr<net::IOBuffer> write_buf = new net::StringIOBuffer(kTestData); | 266 scoped_refptr<net::IOBuffer> write_buf = new net::StringIOBuffer(kTestData); |
267 scoped_refptr<net::IOBuffer> read_buf = new net::IOBuffer(kReadBufSize); | 267 scoped_refptr<net::IOBuffer> read_buf = new net::IOBuffer(kReadBufSize); |
268 | 268 |
269 // Write then read. | 269 // Write then read. |
270 int written = server.Write(write_buf, kTestDataSize, CompletionCallback()); | 270 int written = |
| 271 server.Write(write_buf.get(), kTestDataSize, CompletionCallback()); |
271 EXPECT_GT(written, 0); | 272 EXPECT_GT(written, 0); |
272 EXPECT_LE(written, kTestDataSize); | 273 EXPECT_LE(written, kTestDataSize); |
273 | 274 |
274 int read = client.Read(read_buf, kReadBufSize, CompletionCallback()); | 275 int read = client.Read(read_buf.get(), kReadBufSize, CompletionCallback()); |
275 EXPECT_GT(read, 0); | 276 EXPECT_GT(read, 0); |
276 EXPECT_LE(read, written); | 277 EXPECT_LE(read, written); |
277 EXPECT_EQ(0, memcmp(kTestData, read_buf->data(), read)); | 278 EXPECT_EQ(0, memcmp(kTestData, read_buf->data(), read)); |
278 | 279 |
279 // Read then write. | 280 // Read then write. |
280 TestCompletionCallback callback; | 281 TestCompletionCallback callback; |
281 EXPECT_EQ(net::ERR_IO_PENDING, | 282 EXPECT_EQ(net::ERR_IO_PENDING, |
282 server.Read(read_buf, kReadBufSize, callback.callback())); | 283 server.Read(read_buf.get(), kReadBufSize, callback.callback())); |
283 | 284 |
284 written = client.Write(write_buf, kTestDataSize, CompletionCallback()); | 285 written = client.Write(write_buf.get(), kTestDataSize, CompletionCallback()); |
285 EXPECT_GT(written, 0); | 286 EXPECT_GT(written, 0); |
286 EXPECT_LE(written, kTestDataSize); | 287 EXPECT_LE(written, kTestDataSize); |
287 | 288 |
288 read = callback.WaitForResult(); | 289 read = callback.WaitForResult(); |
289 EXPECT_GT(read, 0); | 290 EXPECT_GT(read, 0); |
290 EXPECT_LE(read, written); | 291 EXPECT_LE(read, written); |
291 EXPECT_EQ(0, memcmp(kTestData, read_buf->data(), read)); | 292 EXPECT_EQ(0, memcmp(kTestData, read_buf->data(), read)); |
292 } | 293 } |
293 | 294 |
294 class SSLServerSocketTest : public PlatformTest { | 295 class SSLServerSocketTest : public PlatformTest { |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
336 cert_and_status.cert_status = CERT_STATUS_AUTHORITY_INVALID; | 337 cert_and_status.cert_status = CERT_STATUS_AUTHORITY_INVALID; |
337 cert_and_status.der_cert = cert_der; | 338 cert_and_status.der_cert = cert_der; |
338 ssl_config.allowed_bad_certs.push_back(cert_and_status); | 339 ssl_config.allowed_bad_certs.push_back(cert_and_status); |
339 | 340 |
340 net::HostPortPair host_and_pair("unittest", 0); | 341 net::HostPortPair host_and_pair("unittest", 0); |
341 net::SSLClientSocketContext context; | 342 net::SSLClientSocketContext context; |
342 context.cert_verifier = cert_verifier_.get(); | 343 context.cert_verifier = cert_verifier_.get(); |
343 client_socket_.reset( | 344 client_socket_.reset( |
344 socket_factory_->CreateSSLClientSocket( | 345 socket_factory_->CreateSSLClientSocket( |
345 fake_client_socket, host_and_pair, ssl_config, context)); | 346 fake_client_socket, host_and_pair, ssl_config, context)); |
346 server_socket_.reset(net::CreateSSLServerSocket(fake_server_socket, | 347 server_socket_.reset(net::CreateSSLServerSocket( |
347 cert, private_key.get(), | 348 fake_server_socket, cert.get(), private_key.get(), net::SSLConfig())); |
348 net::SSLConfig())); | |
349 } | 349 } |
350 | 350 |
351 FakeDataChannel channel_1_; | 351 FakeDataChannel channel_1_; |
352 FakeDataChannel channel_2_; | 352 FakeDataChannel channel_2_; |
353 scoped_ptr<net::SSLClientSocket> client_socket_; | 353 scoped_ptr<net::SSLClientSocket> client_socket_; |
354 scoped_ptr<net::SSLServerSocket> server_socket_; | 354 scoped_ptr<net::SSLServerSocket> server_socket_; |
355 net::ClientSocketFactory* socket_factory_; | 355 net::ClientSocketFactory* socket_factory_; |
356 scoped_ptr<net::MockCertVerifier> cert_verifier_; | 356 scoped_ptr<net::MockCertVerifier> cert_verifier_; |
357 }; | 357 }; |
358 | 358 |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
415 const int kReadBufSize = 1024; | 415 const int kReadBufSize = 1024; |
416 scoped_refptr<net::StringIOBuffer> write_buf = | 416 scoped_refptr<net::StringIOBuffer> write_buf = |
417 new net::StringIOBuffer("testing123"); | 417 new net::StringIOBuffer("testing123"); |
418 scoped_refptr<net::DrainableIOBuffer> read_buf = | 418 scoped_refptr<net::DrainableIOBuffer> read_buf = |
419 new net::DrainableIOBuffer(new net::IOBuffer(kReadBufSize), | 419 new net::DrainableIOBuffer(new net::IOBuffer(kReadBufSize), |
420 kReadBufSize); | 420 kReadBufSize); |
421 | 421 |
422 // Write then read. | 422 // Write then read. |
423 TestCompletionCallback write_callback; | 423 TestCompletionCallback write_callback; |
424 TestCompletionCallback read_callback; | 424 TestCompletionCallback read_callback; |
425 server_ret = server_socket_->Write(write_buf, write_buf->size(), | 425 server_ret = server_socket_->Write( |
426 write_callback.callback()); | 426 write_buf.get(), write_buf->size(), write_callback.callback()); |
427 EXPECT_TRUE(server_ret > 0 || server_ret == net::ERR_IO_PENDING); | 427 EXPECT_TRUE(server_ret > 0 || server_ret == net::ERR_IO_PENDING); |
428 client_ret = client_socket_->Read(read_buf, read_buf->BytesRemaining(), | 428 client_ret = client_socket_->Read( |
429 read_callback.callback()); | 429 read_buf.get(), read_buf->BytesRemaining(), read_callback.callback()); |
430 EXPECT_TRUE(client_ret > 0 || client_ret == net::ERR_IO_PENDING); | 430 EXPECT_TRUE(client_ret > 0 || client_ret == net::ERR_IO_PENDING); |
431 | 431 |
432 server_ret = write_callback.GetResult(server_ret); | 432 server_ret = write_callback.GetResult(server_ret); |
433 EXPECT_GT(server_ret, 0); | 433 EXPECT_GT(server_ret, 0); |
434 client_ret = read_callback.GetResult(client_ret); | 434 client_ret = read_callback.GetResult(client_ret); |
435 ASSERT_GT(client_ret, 0); | 435 ASSERT_GT(client_ret, 0); |
436 | 436 |
437 read_buf->DidConsume(client_ret); | 437 read_buf->DidConsume(client_ret); |
438 while (read_buf->BytesConsumed() < write_buf->size()) { | 438 while (read_buf->BytesConsumed() < write_buf->size()) { |
439 client_ret = client_socket_->Read(read_buf, read_buf->BytesRemaining(), | 439 client_ret = client_socket_->Read( |
440 read_callback.callback()); | 440 read_buf.get(), read_buf->BytesRemaining(), read_callback.callback()); |
441 EXPECT_TRUE(client_ret > 0 || client_ret == net::ERR_IO_PENDING); | 441 EXPECT_TRUE(client_ret > 0 || client_ret == net::ERR_IO_PENDING); |
442 client_ret = read_callback.GetResult(client_ret); | 442 client_ret = read_callback.GetResult(client_ret); |
443 ASSERT_GT(client_ret, 0); | 443 ASSERT_GT(client_ret, 0); |
444 read_buf->DidConsume(client_ret); | 444 read_buf->DidConsume(client_ret); |
445 } | 445 } |
446 EXPECT_EQ(write_buf->size(), read_buf->BytesConsumed()); | 446 EXPECT_EQ(write_buf->size(), read_buf->BytesConsumed()); |
447 read_buf->SetOffset(0); | 447 read_buf->SetOffset(0); |
448 EXPECT_EQ(0, memcmp(write_buf->data(), read_buf->data(), write_buf->size())); | 448 EXPECT_EQ(0, memcmp(write_buf->data(), read_buf->data(), write_buf->size())); |
449 | 449 |
450 // Read then write. | 450 // Read then write. |
451 write_buf = new net::StringIOBuffer("hello123"); | 451 write_buf = new net::StringIOBuffer("hello123"); |
452 server_ret = server_socket_->Read(read_buf, read_buf->BytesRemaining(), | 452 server_ret = server_socket_->Read( |
453 read_callback.callback()); | 453 read_buf.get(), read_buf->BytesRemaining(), read_callback.callback()); |
454 EXPECT_TRUE(server_ret > 0 || server_ret == net::ERR_IO_PENDING); | 454 EXPECT_TRUE(server_ret > 0 || server_ret == net::ERR_IO_PENDING); |
455 client_ret = client_socket_->Write(write_buf, write_buf->size(), | 455 client_ret = client_socket_->Write( |
456 write_callback.callback()); | 456 write_buf.get(), write_buf->size(), write_callback.callback()); |
457 EXPECT_TRUE(client_ret > 0 || client_ret == net::ERR_IO_PENDING); | 457 EXPECT_TRUE(client_ret > 0 || client_ret == net::ERR_IO_PENDING); |
458 | 458 |
459 server_ret = read_callback.GetResult(server_ret); | 459 server_ret = read_callback.GetResult(server_ret); |
460 ASSERT_GT(server_ret, 0); | 460 ASSERT_GT(server_ret, 0); |
461 client_ret = write_callback.GetResult(client_ret); | 461 client_ret = write_callback.GetResult(client_ret); |
462 EXPECT_GT(client_ret, 0); | 462 EXPECT_GT(client_ret, 0); |
463 | 463 |
464 read_buf->DidConsume(server_ret); | 464 read_buf->DidConsume(server_ret); |
465 while (read_buf->BytesConsumed() < write_buf->size()) { | 465 while (read_buf->BytesConsumed() < write_buf->size()) { |
466 server_ret = server_socket_->Read(read_buf, read_buf->BytesRemaining(), | 466 server_ret = server_socket_->Read( |
467 read_callback.callback()); | 467 read_buf.get(), read_buf->BytesRemaining(), read_callback.callback()); |
468 EXPECT_TRUE(server_ret > 0 || server_ret == net::ERR_IO_PENDING); | 468 EXPECT_TRUE(server_ret > 0 || server_ret == net::ERR_IO_PENDING); |
469 server_ret = read_callback.GetResult(server_ret); | 469 server_ret = read_callback.GetResult(server_ret); |
470 ASSERT_GT(server_ret, 0); | 470 ASSERT_GT(server_ret, 0); |
471 read_buf->DidConsume(server_ret); | 471 read_buf->DidConsume(server_ret); |
472 } | 472 } |
473 EXPECT_EQ(write_buf->size(), read_buf->BytesConsumed()); | 473 EXPECT_EQ(write_buf->size(), read_buf->BytesConsumed()); |
474 read_buf->SetOffset(0); | 474 read_buf->SetOffset(0); |
475 EXPECT_EQ(0, memcmp(write_buf->data(), read_buf->data(), write_buf->size())); | 475 EXPECT_EQ(0, memcmp(write_buf->data(), read_buf->data(), write_buf->size())); |
476 } | 476 } |
477 | 477 |
(...skipping 21 matching lines...) Expand all Loading... |
499 | 499 |
500 scoped_refptr<net::StringIOBuffer> write_buf = | 500 scoped_refptr<net::StringIOBuffer> write_buf = |
501 new net::StringIOBuffer("testing123"); | 501 new net::StringIOBuffer("testing123"); |
502 | 502 |
503 // The server closes the connection. The server needs to write some | 503 // The server closes the connection. The server needs to write some |
504 // data first so that the client's Read() calls from the transport | 504 // data first so that the client's Read() calls from the transport |
505 // socket won't return ERR_IO_PENDING. This ensures that the client | 505 // socket won't return ERR_IO_PENDING. This ensures that the client |
506 // will call Read() on the transport socket again. | 506 // will call Read() on the transport socket again. |
507 TestCompletionCallback write_callback; | 507 TestCompletionCallback write_callback; |
508 | 508 |
509 server_ret = server_socket_->Write(write_buf, write_buf->size(), | 509 server_ret = server_socket_->Write( |
510 write_callback.callback()); | 510 write_buf.get(), write_buf->size(), write_callback.callback()); |
511 EXPECT_TRUE(server_ret > 0 || server_ret == net::ERR_IO_PENDING); | 511 EXPECT_TRUE(server_ret > 0 || server_ret == net::ERR_IO_PENDING); |
512 | 512 |
513 server_ret = write_callback.GetResult(server_ret); | 513 server_ret = write_callback.GetResult(server_ret); |
514 EXPECT_GT(server_ret, 0); | 514 EXPECT_GT(server_ret, 0); |
515 | 515 |
516 server_socket_->Disconnect(); | 516 server_socket_->Disconnect(); |
517 | 517 |
518 // The client writes some data. This should not cause an infinite loop. | 518 // The client writes some data. This should not cause an infinite loop. |
519 client_ret = client_socket_->Write(write_buf, write_buf->size(), | 519 client_ret = client_socket_->Write( |
520 write_callback.callback()); | 520 write_buf.get(), write_buf->size(), write_callback.callback()); |
521 EXPECT_TRUE(client_ret > 0 || client_ret == net::ERR_IO_PENDING); | 521 EXPECT_TRUE(client_ret > 0 || client_ret == net::ERR_IO_PENDING); |
522 | 522 |
523 client_ret = write_callback.GetResult(client_ret); | 523 client_ret = write_callback.GetResult(client_ret); |
524 EXPECT_GT(client_ret, 0); | 524 EXPECT_GT(client_ret, 0); |
525 | 525 |
526 base::MessageLoop::current()->PostDelayedTask( | 526 base::MessageLoop::current()->PostDelayedTask( |
527 FROM_HERE, base::MessageLoop::QuitClosure(), | 527 FROM_HERE, base::MessageLoop::QuitClosure(), |
528 base::TimeDelta::FromMilliseconds(10)); | 528 base::TimeDelta::FromMilliseconds(10)); |
529 base::MessageLoop::current()->Run(); | 529 base::MessageLoop::current()->Run(); |
530 } | 530 } |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
571 unsigned char client_bad[kKeyingMaterialSize]; | 571 unsigned char client_bad[kKeyingMaterialSize]; |
572 rv = client_socket_->ExportKeyingMaterial(kKeyingLabelBad, | 572 rv = client_socket_->ExportKeyingMaterial(kKeyingLabelBad, |
573 false, kKeyingContext, | 573 false, kKeyingContext, |
574 client_bad, sizeof(client_bad)); | 574 client_bad, sizeof(client_bad)); |
575 ASSERT_EQ(rv, net::OK); | 575 ASSERT_EQ(rv, net::OK); |
576 EXPECT_NE(0, memcmp(server_out, client_bad, sizeof(server_out))); | 576 EXPECT_NE(0, memcmp(server_out, client_bad, sizeof(server_out))); |
577 } | 577 } |
578 #endif | 578 #endif |
579 | 579 |
580 } // namespace net | 580 } // namespace net |
OLD | NEW |