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

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

Issue 1782273002: Make the SSLServerSocket unittests less crashy (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix test Created 4 years, 9 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
« no previous file with comments | « no previous file | no next file » | 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 // 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 317 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 EXPECT_LE(read, written); 328 EXPECT_LE(read, written);
329 EXPECT_EQ(0, memcmp(kTestData, read_buf->data(), read)); 329 EXPECT_EQ(0, memcmp(kTestData, read_buf->data(), read));
330 } 330 }
331 331
332 class SSLServerSocketTest : public PlatformTest { 332 class SSLServerSocketTest : public PlatformTest {
333 public: 333 public:
334 SSLServerSocketTest() 334 SSLServerSocketTest()
335 : socket_factory_(ClientSocketFactory::GetDefaultFactory()), 335 : socket_factory_(ClientSocketFactory::GetDefaultFactory()),
336 cert_verifier_(new MockCertVerifier()), 336 cert_verifier_(new MockCertVerifier()),
337 client_cert_verifier_(new MockClientCertVerifier()), 337 client_cert_verifier_(new MockClientCertVerifier()),
338 transport_security_state_(new TransportSecurityState) { 338 transport_security_state_(new TransportSecurityState) {}
339
340 void SetUp() override {
341 PlatformTest::SetUp();
342
339 cert_verifier_->set_default_result(ERR_CERT_AUTHORITY_INVALID); 343 cert_verifier_->set_default_result(ERR_CERT_AUTHORITY_INVALID);
340 client_cert_verifier_->set_default_result(ERR_CERT_AUTHORITY_INVALID); 344 client_cert_verifier_->set_default_result(ERR_CERT_AUTHORITY_INVALID);
341 345
342 server_cert_ = 346 server_cert_ =
343 ImportCertFromFile(GetTestCertsDirectory(), "unittest.selfsigned.der"); 347 ImportCertFromFile(GetTestCertsDirectory(), "unittest.selfsigned.der");
348 ASSERT_TRUE(server_cert_);
344 server_private_key_ = ReadTestKey("unittest.key.bin"); 349 server_private_key_ = ReadTestKey("unittest.key.bin");
350 ASSERT_TRUE(server_private_key_);
345 351
346 client_ssl_config_.false_start_enabled = false; 352 client_ssl_config_.false_start_enabled = false;
347 client_ssl_config_.channel_id_enabled = false; 353 client_ssl_config_.channel_id_enabled = false;
348 354
349 // Certificate provided by the host doesn't need authority. 355 // Certificate provided by the host doesn't need authority.
350 SSLConfig::CertAndStatus cert_and_status; 356 SSLConfig::CertAndStatus cert_and_status;
351 cert_and_status.cert_status = CERT_STATUS_AUTHORITY_INVALID; 357 cert_and_status.cert_status = CERT_STATUS_AUTHORITY_INVALID;
352 std::string server_cert_der; 358 std::string server_cert_der;
353 CHECK(X509Certificate::GetDEREncoded(server_cert_->os_cert_handle(), 359 ASSERT_TRUE(X509Certificate::GetDEREncoded(server_cert_->os_cert_handle(),
354 &server_cert_der)); 360 &server_cert_der));
355 cert_and_status.der_cert = server_cert_der; 361 cert_and_status.der_cert = server_cert_der;
356 client_ssl_config_.allowed_bad_certs.push_back(cert_and_status); 362 client_ssl_config_.allowed_bad_certs.push_back(cert_and_status);
357 } 363 }
358 364
359 protected: 365 protected:
360 void CreateContext() { 366 void CreateContext() {
361 client_socket_.reset(); 367 client_socket_.reset();
362 server_socket_.reset(); 368 server_socket_.reset();
363 channel_1_.reset(); 369 channel_1_.reset();
364 channel_2_.reset(); 370 channel_2_.reset();
(...skipping 10 matching lines...) Expand all
375 scoped_ptr<ClientSocketHandle> client_connection(new ClientSocketHandle); 381 scoped_ptr<ClientSocketHandle> client_connection(new ClientSocketHandle);
376 client_connection->SetSocket(scoped_ptr<StreamSocket>( 382 client_connection->SetSocket(scoped_ptr<StreamSocket>(
377 new FakeSocket(channel_1_.get(), channel_2_.get()))); 383 new FakeSocket(channel_1_.get(), channel_2_.get())));
378 scoped_ptr<StreamSocket> server_socket( 384 scoped_ptr<StreamSocket> server_socket(
379 new FakeSocket(channel_2_.get(), channel_1_.get())); 385 new FakeSocket(channel_2_.get(), channel_1_.get()));
380 386
381 HostPortPair host_and_pair("unittest", 0); 387 HostPortPair host_and_pair("unittest", 0);
382 SSLClientSocketContext context; 388 SSLClientSocketContext context;
383 context.cert_verifier = cert_verifier_.get(); 389 context.cert_verifier = cert_verifier_.get();
384 context.transport_security_state = transport_security_state_.get(); 390 context.transport_security_state = transport_security_state_.get();
391
385 client_socket_ = socket_factory_->CreateSSLClientSocket( 392 client_socket_ = socket_factory_->CreateSSLClientSocket(
386 std::move(client_connection), host_and_pair, client_ssl_config_, 393 std::move(client_connection), host_and_pair, client_ssl_config_,
387 context); 394 context);
395 ASSERT_TRUE(client_socket_);
388 396
389 server_socket_ = 397 server_socket_ =
390 server_context_->CreateSSLServerSocket(std::move(server_socket)); 398 server_context_->CreateSSLServerSocket(std::move(server_socket));
399 ASSERT_TRUE(server_socket_);
391 } 400 }
392 401
393 #if defined(USE_OPENSSL) 402 #if defined(USE_OPENSSL)
394 void ConfigureClientCertsForClient(const char* cert_file_name, 403 void ConfigureClientCertsForClient(const char* cert_file_name,
395 const char* private_key_file_name) { 404 const char* private_key_file_name) {
396 client_ssl_config_.send_client_cert = true; 405 client_ssl_config_.send_client_cert = true;
397 client_ssl_config_.client_cert = 406 client_ssl_config_.client_cert =
398 ImportCertFromFile(GetTestCertsDirectory(), cert_file_name); 407 ImportCertFromFile(GetTestCertsDirectory(), cert_file_name);
399 ASSERT_TRUE(client_ssl_config_.client_cert); 408 ASSERT_TRUE(client_ssl_config_.client_cert);
409
400 scoped_ptr<crypto::RSAPrivateKey> key = ReadTestKey(private_key_file_name); 410 scoped_ptr<crypto::RSAPrivateKey> key = ReadTestKey(private_key_file_name);
401 ASSERT_TRUE(key); 411 ASSERT_TRUE(key);
412
402 client_ssl_config_.client_private_key = WrapOpenSSLPrivateKey( 413 client_ssl_config_.client_private_key = WrapOpenSSLPrivateKey(
403 crypto::ScopedEVP_PKEY(EVP_PKEY_up_ref(key->key()))); 414 crypto::ScopedEVP_PKEY(EVP_PKEY_up_ref(key->key())));
404 } 415 }
405 416
406 void ConfigureClientCertsForServer() { 417 void ConfigureClientCertsForServer() {
407 server_ssl_config_.client_cert_type = 418 server_ssl_config_.client_cert_type =
408 SSLServerConfig::ClientCertType::REQUIRE_CLIENT_CERT; 419 SSLServerConfig::ClientCertType::REQUIRE_CLIENT_CERT;
409 420
410 ScopedX509NameStack cert_names( 421 ScopedX509NameStack cert_names(
411 SSL_load_client_CA_file(GetTestCertsDirectory() 422 SSL_load_client_CA_file(GetTestCertsDirectory()
412 .AppendASCII(kClientCertCAFileName) 423 .AppendASCII(kClientCertCAFileName)
413 .MaybeAsASCII() 424 .MaybeAsASCII()
414 .c_str())); 425 .c_str()));
415 ASSERT_TRUE(cert_names); 426 ASSERT_TRUE(cert_names);
427
416 for (size_t i = 0; i < sk_X509_NAME_num(cert_names.get()); ++i) { 428 for (size_t i = 0; i < sk_X509_NAME_num(cert_names.get()); ++i) {
417 uint8_t* str = nullptr; 429 uint8_t* str = nullptr;
418 int length = i2d_X509_NAME(sk_X509_NAME_value(cert_names.get(), i), &str); 430 int length = i2d_X509_NAME(sk_X509_NAME_value(cert_names.get(), i), &str);
431 ASSERT_LT(0, length);
432
419 server_ssl_config_.cert_authorities_.push_back(std::string( 433 server_ssl_config_.cert_authorities_.push_back(std::string(
420 reinterpret_cast<const char*>(str), static_cast<size_t>(length))); 434 reinterpret_cast<const char*>(str), static_cast<size_t>(length)));
421 OPENSSL_free(str); 435 OPENSSL_free(str);
422 } 436 }
423 437
424 scoped_refptr<X509Certificate> expected_client_cert( 438 scoped_refptr<X509Certificate> expected_client_cert(
425 ImportCertFromFile(GetTestCertsDirectory(), kClientCertFileName)); 439 ImportCertFromFile(GetTestCertsDirectory(), kClientCertFileName));
440 ASSERT_TRUE(expected_client_cert);
441
426 client_cert_verifier_->AddResultForCert(expected_client_cert.get(), OK); 442 client_cert_verifier_->AddResultForCert(expected_client_cert.get(), OK);
427 443
428 server_ssl_config_.client_cert_verifier = client_cert_verifier_.get(); 444 server_ssl_config_.client_cert_verifier = client_cert_verifier_.get();
429 } 445 }
430 446
431 scoped_ptr<crypto::RSAPrivateKey> ReadTestKey(const base::StringPiece& name) { 447 scoped_ptr<crypto::RSAPrivateKey> ReadTestKey(const base::StringPiece& name) {
432 base::FilePath certs_dir(GetTestCertsDirectory()); 448 base::FilePath certs_dir(GetTestCertsDirectory());
433 base::FilePath key_path = certs_dir.AppendASCII(name); 449 base::FilePath key_path = certs_dir.AppendASCII(name);
434 std::string key_string; 450 std::string key_string;
435 if (!base::ReadFileToString(key_path, &key_string)) 451 if (!base::ReadFileToString(key_path, &key_string))
(...skipping 20 matching lines...) Expand all
456 scoped_ptr<TransportSecurityState> transport_security_state_; 472 scoped_ptr<TransportSecurityState> transport_security_state_;
457 scoped_ptr<SSLServerContext> server_context_; 473 scoped_ptr<SSLServerContext> server_context_;
458 scoped_ptr<crypto::RSAPrivateKey> server_private_key_; 474 scoped_ptr<crypto::RSAPrivateKey> server_private_key_;
459 scoped_refptr<X509Certificate> server_cert_; 475 scoped_refptr<X509Certificate> server_cert_;
460 }; 476 };
461 477
462 // This test only executes creation of client and server sockets. This is to 478 // This test only executes creation of client and server sockets. This is to
463 // test that creation of sockets doesn't crash and have minimal code to run 479 // test that creation of sockets doesn't crash and have minimal code to run
464 // under valgrind in order to help debugging memory problems. 480 // under valgrind in order to help debugging memory problems.
465 TEST_F(SSLServerSocketTest, Initialize) { 481 TEST_F(SSLServerSocketTest, Initialize) {
466 CreateContext(); 482 ASSERT_NO_FATAL_FAILURE(CreateContext());
467 CreateSockets(); 483 ASSERT_NO_FATAL_FAILURE(CreateSockets());
468 } 484 }
469 485
470 // This test executes Connect() on SSLClientSocket and Handshake() on 486 // This test executes Connect() on SSLClientSocket and Handshake() on
471 // SSLServerSocket to make sure handshaking between the two sockets is 487 // SSLServerSocket to make sure handshaking between the two sockets is
472 // completed successfully. 488 // completed successfully.
473 TEST_F(SSLServerSocketTest, Handshake) { 489 TEST_F(SSLServerSocketTest, Handshake) {
474 CreateContext(); 490 ASSERT_NO_FATAL_FAILURE(CreateContext());
475 CreateSockets(); 491 ASSERT_NO_FATAL_FAILURE(CreateSockets());
476 492
477 TestCompletionCallback handshake_callback; 493 TestCompletionCallback handshake_callback;
478 int server_ret = server_socket_->Handshake(handshake_callback.callback()); 494 int server_ret = server_socket_->Handshake(handshake_callback.callback());
479 495
480 TestCompletionCallback connect_callback; 496 TestCompletionCallback connect_callback;
481 int client_ret = client_socket_->Connect(connect_callback.callback()); 497 int client_ret = client_socket_->Connect(connect_callback.callback());
482 498
483 client_ret = connect_callback.GetResult(client_ret); 499 client_ret = connect_callback.GetResult(client_ret);
484 server_ret = handshake_callback.GetResult(server_ret); 500 server_ret = handshake_callback.GetResult(server_ret);
485 501
(...skipping 16 matching lines...) Expand all
502 SSLCipherSuiteToStrings(&key_exchange, &cipher, &mac, &is_aead, cipher_suite); 518 SSLCipherSuiteToStrings(&key_exchange, &cipher, &mac, &is_aead, cipher_suite);
503 EXPECT_STREQ("ECDHE_RSA", key_exchange); 519 EXPECT_STREQ("ECDHE_RSA", key_exchange);
504 EXPECT_TRUE(is_aead); 520 EXPECT_TRUE(is_aead);
505 } 521 }
506 522
507 // NSS ports don't support client certificates and have a global session cache. 523 // NSS ports don't support client certificates and have a global session cache.
508 #if defined(USE_OPENSSL) 524 #if defined(USE_OPENSSL)
509 525
510 // This test makes sure the session cache is working. 526 // This test makes sure the session cache is working.
511 TEST_F(SSLServerSocketTest, HandshakeCached) { 527 TEST_F(SSLServerSocketTest, HandshakeCached) {
512 CreateContext(); 528 ASSERT_NO_FATAL_FAILURE(CreateContext());
513 CreateSockets(); 529 ASSERT_NO_FATAL_FAILURE(CreateSockets());
514 530
515 TestCompletionCallback handshake_callback; 531 TestCompletionCallback handshake_callback;
516 int server_ret = server_socket_->Handshake(handshake_callback.callback()); 532 int server_ret = server_socket_->Handshake(handshake_callback.callback());
517 533
518 TestCompletionCallback connect_callback; 534 TestCompletionCallback connect_callback;
519 int client_ret = client_socket_->Connect(connect_callback.callback()); 535 int client_ret = client_socket_->Connect(connect_callback.callback());
520 536
521 client_ret = connect_callback.GetResult(client_ret); 537 client_ret = connect_callback.GetResult(client_ret);
522 server_ret = handshake_callback.GetResult(server_ret); 538 server_ret = handshake_callback.GetResult(server_ret);
523 539
524 ASSERT_EQ(OK, client_ret); 540 ASSERT_EQ(OK, client_ret);
525 ASSERT_EQ(OK, server_ret); 541 ASSERT_EQ(OK, server_ret);
526 542
527 // Make sure the cert status is expected. 543 // Make sure the cert status is expected.
528 SSLInfo ssl_info; 544 SSLInfo ssl_info;
529 ASSERT_TRUE(client_socket_->GetSSLInfo(&ssl_info)); 545 ASSERT_TRUE(client_socket_->GetSSLInfo(&ssl_info));
530 EXPECT_EQ(ssl_info.handshake_type, SSLInfo::HANDSHAKE_FULL); 546 EXPECT_EQ(ssl_info.handshake_type, SSLInfo::HANDSHAKE_FULL);
531 SSLInfo ssl_server_info; 547 SSLInfo ssl_server_info;
532 ASSERT_TRUE(server_socket_->GetSSLInfo(&ssl_server_info)); 548 ASSERT_TRUE(server_socket_->GetSSLInfo(&ssl_server_info));
533 EXPECT_EQ(ssl_server_info.handshake_type, SSLInfo::HANDSHAKE_FULL); 549 EXPECT_EQ(ssl_server_info.handshake_type, SSLInfo::HANDSHAKE_FULL);
534 550
535 // Make sure the second connection is cached. 551 // Make sure the second connection is cached.
536 CreateSockets(); 552 ASSERT_NO_FATAL_FAILURE(CreateSockets());
537 TestCompletionCallback handshake_callback2; 553 TestCompletionCallback handshake_callback2;
538 int server_ret2 = server_socket_->Handshake(handshake_callback2.callback()); 554 int server_ret2 = server_socket_->Handshake(handshake_callback2.callback());
539 555
540 TestCompletionCallback connect_callback2; 556 TestCompletionCallback connect_callback2;
541 int client_ret2 = client_socket_->Connect(connect_callback2.callback()); 557 int client_ret2 = client_socket_->Connect(connect_callback2.callback());
542 558
543 client_ret2 = connect_callback2.GetResult(client_ret2); 559 client_ret2 = connect_callback2.GetResult(client_ret2);
544 server_ret2 = handshake_callback2.GetResult(server_ret2); 560 server_ret2 = handshake_callback2.GetResult(server_ret2);
545 561
546 ASSERT_EQ(OK, client_ret2); 562 ASSERT_EQ(OK, client_ret2);
547 ASSERT_EQ(OK, server_ret2); 563 ASSERT_EQ(OK, server_ret2);
548 564
549 // Make sure the cert status is expected. 565 // Make sure the cert status is expected.
550 SSLInfo ssl_info2; 566 SSLInfo ssl_info2;
551 ASSERT_TRUE(client_socket_->GetSSLInfo(&ssl_info2)); 567 ASSERT_TRUE(client_socket_->GetSSLInfo(&ssl_info2));
552 EXPECT_EQ(ssl_info2.handshake_type, SSLInfo::HANDSHAKE_RESUME); 568 EXPECT_EQ(ssl_info2.handshake_type, SSLInfo::HANDSHAKE_RESUME);
553 SSLInfo ssl_server_info2; 569 SSLInfo ssl_server_info2;
554 ASSERT_TRUE(server_socket_->GetSSLInfo(&ssl_server_info2)); 570 ASSERT_TRUE(server_socket_->GetSSLInfo(&ssl_server_info2));
555 EXPECT_EQ(ssl_server_info2.handshake_type, SSLInfo::HANDSHAKE_RESUME); 571 EXPECT_EQ(ssl_server_info2.handshake_type, SSLInfo::HANDSHAKE_RESUME);
556 } 572 }
557 573
558 // This test makes sure the session cache separates out by server context. 574 // This test makes sure the session cache separates out by server context.
559 TEST_F(SSLServerSocketTest, HandshakeCachedContextSwitch) { 575 TEST_F(SSLServerSocketTest, HandshakeCachedContextSwitch) {
560 CreateContext(); 576 ASSERT_NO_FATAL_FAILURE(CreateContext());
561 CreateSockets(); 577 ASSERT_NO_FATAL_FAILURE(CreateSockets());
562 578
563 TestCompletionCallback handshake_callback; 579 TestCompletionCallback handshake_callback;
564 int server_ret = server_socket_->Handshake(handshake_callback.callback()); 580 int server_ret = server_socket_->Handshake(handshake_callback.callback());
565 581
566 TestCompletionCallback connect_callback; 582 TestCompletionCallback connect_callback;
567 int client_ret = client_socket_->Connect(connect_callback.callback()); 583 int client_ret = client_socket_->Connect(connect_callback.callback());
568 584
569 client_ret = connect_callback.GetResult(client_ret); 585 client_ret = connect_callback.GetResult(client_ret);
570 server_ret = handshake_callback.GetResult(server_ret); 586 server_ret = handshake_callback.GetResult(server_ret);
571 587
572 ASSERT_EQ(OK, client_ret); 588 ASSERT_EQ(OK, client_ret);
573 ASSERT_EQ(OK, server_ret); 589 ASSERT_EQ(OK, server_ret);
574 590
575 // Make sure the cert status is expected. 591 // Make sure the cert status is expected.
576 SSLInfo ssl_info; 592 SSLInfo ssl_info;
577 ASSERT_TRUE(client_socket_->GetSSLInfo(&ssl_info)); 593 ASSERT_TRUE(client_socket_->GetSSLInfo(&ssl_info));
578 EXPECT_EQ(ssl_info.handshake_type, SSLInfo::HANDSHAKE_FULL); 594 EXPECT_EQ(ssl_info.handshake_type, SSLInfo::HANDSHAKE_FULL);
579 SSLInfo ssl_server_info; 595 SSLInfo ssl_server_info;
580 ASSERT_TRUE(server_socket_->GetSSLInfo(&ssl_server_info)); 596 ASSERT_TRUE(server_socket_->GetSSLInfo(&ssl_server_info));
581 EXPECT_EQ(ssl_server_info.handshake_type, SSLInfo::HANDSHAKE_FULL); 597 EXPECT_EQ(ssl_server_info.handshake_type, SSLInfo::HANDSHAKE_FULL);
582 598
583 // Make sure the second connection is NOT cached when using a new context. 599 // Make sure the second connection is NOT cached when using a new context.
584 CreateContext(); 600 ASSERT_NO_FATAL_FAILURE(CreateContext());
585 CreateSockets(); 601 ASSERT_NO_FATAL_FAILURE(CreateSockets());
586 602
587 TestCompletionCallback handshake_callback2; 603 TestCompletionCallback handshake_callback2;
588 int server_ret2 = server_socket_->Handshake(handshake_callback2.callback()); 604 int server_ret2 = server_socket_->Handshake(handshake_callback2.callback());
589 605
590 TestCompletionCallback connect_callback2; 606 TestCompletionCallback connect_callback2;
591 int client_ret2 = client_socket_->Connect(connect_callback2.callback()); 607 int client_ret2 = client_socket_->Connect(connect_callback2.callback());
592 608
593 client_ret2 = connect_callback2.GetResult(client_ret2); 609 client_ret2 = connect_callback2.GetResult(client_ret2);
594 server_ret2 = handshake_callback2.GetResult(server_ret2); 610 server_ret2 = handshake_callback2.GetResult(server_ret2);
595 611
596 ASSERT_EQ(OK, client_ret2); 612 ASSERT_EQ(OK, client_ret2);
597 ASSERT_EQ(OK, server_ret2); 613 ASSERT_EQ(OK, server_ret2);
598 614
599 // Make sure the cert status is expected. 615 // Make sure the cert status is expected.
600 SSLInfo ssl_info2; 616 SSLInfo ssl_info2;
601 ASSERT_TRUE(client_socket_->GetSSLInfo(&ssl_info2)); 617 ASSERT_TRUE(client_socket_->GetSSLInfo(&ssl_info2));
602 EXPECT_EQ(ssl_info2.handshake_type, SSLInfo::HANDSHAKE_FULL); 618 EXPECT_EQ(ssl_info2.handshake_type, SSLInfo::HANDSHAKE_FULL);
603 SSLInfo ssl_server_info2; 619 SSLInfo ssl_server_info2;
604 ASSERT_TRUE(server_socket_->GetSSLInfo(&ssl_server_info2)); 620 ASSERT_TRUE(server_socket_->GetSSLInfo(&ssl_server_info2));
605 EXPECT_EQ(ssl_server_info2.handshake_type, SSLInfo::HANDSHAKE_FULL); 621 EXPECT_EQ(ssl_server_info2.handshake_type, SSLInfo::HANDSHAKE_FULL);
606 } 622 }
607 623
608 // This test executes Connect() on SSLClientSocket and Handshake() on 624 // This test executes Connect() on SSLClientSocket and Handshake() on
609 // SSLServerSocket to make sure handshaking between the two sockets is 625 // SSLServerSocket to make sure handshaking between the two sockets is
610 // completed successfully, using client certificate. 626 // completed successfully, using client certificate.
611 TEST_F(SSLServerSocketTest, HandshakeWithClientCert) { 627 TEST_F(SSLServerSocketTest, HandshakeWithClientCert) {
612 scoped_refptr<X509Certificate> client_cert = 628 scoped_refptr<X509Certificate> client_cert =
613 ImportCertFromFile(GetTestCertsDirectory(), kClientCertFileName); 629 ImportCertFromFile(GetTestCertsDirectory(), kClientCertFileName);
614 ConfigureClientCertsForClient(kClientCertFileName, kClientPrivateKeyFileName); 630 ASSERT_NO_FATAL_FAILURE(ConfigureClientCertsForClient(
615 ConfigureClientCertsForServer(); 631 kClientCertFileName, kClientPrivateKeyFileName));
616 CreateContext(); 632 ASSERT_NO_FATAL_FAILURE(ConfigureClientCertsForServer());
617 CreateSockets(); 633 ASSERT_NO_FATAL_FAILURE(CreateContext());
634 ASSERT_NO_FATAL_FAILURE(CreateSockets());
618 635
619 TestCompletionCallback handshake_callback; 636 TestCompletionCallback handshake_callback;
620 int server_ret = server_socket_->Handshake(handshake_callback.callback()); 637 int server_ret = server_socket_->Handshake(handshake_callback.callback());
621 638
622 TestCompletionCallback connect_callback; 639 TestCompletionCallback connect_callback;
623 int client_ret = client_socket_->Connect(connect_callback.callback()); 640 int client_ret = client_socket_->Connect(connect_callback.callback());
624 641
625 client_ret = connect_callback.GetResult(client_ret); 642 client_ret = connect_callback.GetResult(client_ret);
626 server_ret = handshake_callback.GetResult(server_ret); 643 server_ret = handshake_callback.GetResult(server_ret);
627 644
628 ASSERT_EQ(OK, client_ret); 645 ASSERT_EQ(OK, client_ret);
629 ASSERT_EQ(OK, server_ret); 646 ASSERT_EQ(OK, server_ret);
630 647
631 // Make sure the cert status is expected. 648 // Make sure the cert status is expected.
632 SSLInfo ssl_info; 649 SSLInfo ssl_info;
633 client_socket_->GetSSLInfo(&ssl_info); 650 client_socket_->GetSSLInfo(&ssl_info);
634 EXPECT_EQ(CERT_STATUS_AUTHORITY_INVALID, ssl_info.cert_status); 651 EXPECT_EQ(CERT_STATUS_AUTHORITY_INVALID, ssl_info.cert_status);
635 server_socket_->GetSSLInfo(&ssl_info); 652 server_socket_->GetSSLInfo(&ssl_info);
636 EXPECT_TRUE(ssl_info.cert.get()); 653 ASSERT_TRUE(ssl_info.cert.get());
637 EXPECT_TRUE(client_cert->Equals(ssl_info.cert.get())); 654 EXPECT_TRUE(client_cert->Equals(ssl_info.cert.get()));
638 } 655 }
639 656
640 // This test executes Connect() on SSLClientSocket and Handshake() twice on 657 // This test executes Connect() on SSLClientSocket and Handshake() twice on
641 // SSLServerSocket to make sure handshaking between the two sockets is 658 // SSLServerSocket to make sure handshaking between the two sockets is
642 // completed successfully, using client certificate. The second connection is 659 // completed successfully, using client certificate. The second connection is
643 // expected to succeed through the session cache. 660 // expected to succeed through the session cache.
644 TEST_F(SSLServerSocketTest, HandshakeWithClientCertCached) { 661 TEST_F(SSLServerSocketTest, HandshakeWithClientCertCached) {
645 scoped_refptr<X509Certificate> client_cert = 662 scoped_refptr<X509Certificate> client_cert =
646 ImportCertFromFile(GetTestCertsDirectory(), kClientCertFileName); 663 ImportCertFromFile(GetTestCertsDirectory(), kClientCertFileName);
647 ConfigureClientCertsForClient(kClientCertFileName, kClientPrivateKeyFileName); 664 ASSERT_NO_FATAL_FAILURE(ConfigureClientCertsForClient(
648 ConfigureClientCertsForServer(); 665 kClientCertFileName, kClientPrivateKeyFileName));
649 CreateContext(); 666 ASSERT_NO_FATAL_FAILURE(ConfigureClientCertsForServer());
650 CreateSockets(); 667 ASSERT_NO_FATAL_FAILURE(CreateContext());
668 ASSERT_NO_FATAL_FAILURE(CreateSockets());
651 669
652 TestCompletionCallback handshake_callback; 670 TestCompletionCallback handshake_callback;
653 int server_ret = server_socket_->Handshake(handshake_callback.callback()); 671 int server_ret = server_socket_->Handshake(handshake_callback.callback());
654 672
655 TestCompletionCallback connect_callback; 673 TestCompletionCallback connect_callback;
656 int client_ret = client_socket_->Connect(connect_callback.callback()); 674 int client_ret = client_socket_->Connect(connect_callback.callback());
657 675
658 client_ret = connect_callback.GetResult(client_ret); 676 client_ret = connect_callback.GetResult(client_ret);
659 server_ret = handshake_callback.GetResult(server_ret); 677 server_ret = handshake_callback.GetResult(server_ret);
660 678
661 ASSERT_EQ(OK, client_ret); 679 ASSERT_EQ(OK, client_ret);
662 ASSERT_EQ(OK, server_ret); 680 ASSERT_EQ(OK, server_ret);
663 681
664 // Make sure the cert status is expected. 682 // Make sure the cert status is expected.
665 SSLInfo ssl_info; 683 SSLInfo ssl_info;
666 ASSERT_TRUE(client_socket_->GetSSLInfo(&ssl_info)); 684 ASSERT_TRUE(client_socket_->GetSSLInfo(&ssl_info));
667 EXPECT_EQ(ssl_info.handshake_type, SSLInfo::HANDSHAKE_FULL); 685 EXPECT_EQ(ssl_info.handshake_type, SSLInfo::HANDSHAKE_FULL);
668 SSLInfo ssl_server_info; 686 SSLInfo ssl_server_info;
669 ASSERT_TRUE(server_socket_->GetSSLInfo(&ssl_server_info)); 687 ASSERT_TRUE(server_socket_->GetSSLInfo(&ssl_server_info));
670 ASSERT_TRUE(ssl_server_info.cert.get()); 688 ASSERT_TRUE(ssl_server_info.cert.get());
671 EXPECT_TRUE(client_cert->Equals(ssl_server_info.cert.get())); 689 EXPECT_TRUE(client_cert->Equals(ssl_server_info.cert.get()));
672 EXPECT_EQ(ssl_server_info.handshake_type, SSLInfo::HANDSHAKE_FULL); 690 EXPECT_EQ(ssl_server_info.handshake_type, SSLInfo::HANDSHAKE_FULL);
673 server_socket_->Disconnect(); 691 server_socket_->Disconnect();
674 client_socket_->Disconnect(); 692 client_socket_->Disconnect();
675 693
676 // Create the connection again. 694 // Create the connection again.
677 CreateSockets(); 695 ASSERT_NO_FATAL_FAILURE(CreateSockets());
678 TestCompletionCallback handshake_callback2; 696 TestCompletionCallback handshake_callback2;
679 int server_ret2 = server_socket_->Handshake(handshake_callback2.callback()); 697 int server_ret2 = server_socket_->Handshake(handshake_callback2.callback());
680 698
681 TestCompletionCallback connect_callback2; 699 TestCompletionCallback connect_callback2;
682 int client_ret2 = client_socket_->Connect(connect_callback2.callback()); 700 int client_ret2 = client_socket_->Connect(connect_callback2.callback());
683 701
684 client_ret2 = connect_callback2.GetResult(client_ret2); 702 client_ret2 = connect_callback2.GetResult(client_ret2);
685 server_ret2 = handshake_callback2.GetResult(server_ret2); 703 server_ret2 = handshake_callback2.GetResult(server_ret2);
686 704
687 ASSERT_EQ(OK, client_ret2); 705 ASSERT_EQ(OK, client_ret2);
688 ASSERT_EQ(OK, server_ret2); 706 ASSERT_EQ(OK, server_ret2);
689 707
690 // Make sure the cert status is expected. 708 // Make sure the cert status is expected.
691 SSLInfo ssl_info2; 709 SSLInfo ssl_info2;
692 ASSERT_TRUE(client_socket_->GetSSLInfo(&ssl_info2)); 710 ASSERT_TRUE(client_socket_->GetSSLInfo(&ssl_info2));
693 EXPECT_EQ(ssl_info2.handshake_type, SSLInfo::HANDSHAKE_RESUME); 711 EXPECT_EQ(ssl_info2.handshake_type, SSLInfo::HANDSHAKE_RESUME);
694 SSLInfo ssl_server_info2; 712 SSLInfo ssl_server_info2;
695 ASSERT_TRUE(server_socket_->GetSSLInfo(&ssl_server_info2)); 713 ASSERT_TRUE(server_socket_->GetSSLInfo(&ssl_server_info2));
696 ASSERT_TRUE(ssl_server_info2.cert.get()); 714 ASSERT_TRUE(ssl_server_info2.cert.get());
697 EXPECT_TRUE(client_cert->Equals(ssl_server_info2.cert.get())); 715 EXPECT_TRUE(client_cert->Equals(ssl_server_info2.cert.get()));
698 EXPECT_EQ(ssl_server_info2.handshake_type, SSLInfo::HANDSHAKE_RESUME); 716 EXPECT_EQ(ssl_server_info2.handshake_type, SSLInfo::HANDSHAKE_RESUME);
699 } 717 }
700 718
701 TEST_F(SSLServerSocketTest, HandshakeWithClientCertRequiredNotSupplied) { 719 TEST_F(SSLServerSocketTest, HandshakeWithClientCertRequiredNotSupplied) {
702 ConfigureClientCertsForServer(); 720 ASSERT_NO_FATAL_FAILURE(ConfigureClientCertsForServer());
703 CreateContext(); 721 ASSERT_NO_FATAL_FAILURE(CreateContext());
704 CreateSockets(); 722 ASSERT_NO_FATAL_FAILURE(CreateSockets());
705 // Use the default setting for the client socket, which is to not send 723 // Use the default setting for the client socket, which is to not send
706 // a client certificate. This will cause the client to receive an 724 // a client certificate. This will cause the client to receive an
707 // ERR_SSL_CLIENT_AUTH_CERT_NEEDED error, and allow for inspecting the 725 // ERR_SSL_CLIENT_AUTH_CERT_NEEDED error, and allow for inspecting the
708 // requested cert_authorities from the CertificateRequest sent by the 726 // requested cert_authorities from the CertificateRequest sent by the
709 // server. 727 // server.
710 728
711 TestCompletionCallback handshake_callback; 729 TestCompletionCallback handshake_callback;
712 int server_ret = server_socket_->Handshake(handshake_callback.callback()); 730 int server_ret = server_socket_->Handshake(handshake_callback.callback());
713 731
714 TestCompletionCallback connect_callback; 732 TestCompletionCallback connect_callback;
715 EXPECT_EQ(ERR_SSL_CLIENT_AUTH_CERT_NEEDED, 733 EXPECT_EQ(ERR_SSL_CLIENT_AUTH_CERT_NEEDED,
716 connect_callback.GetResult( 734 connect_callback.GetResult(
717 client_socket_->Connect(connect_callback.callback()))); 735 client_socket_->Connect(connect_callback.callback())));
718 736
719 scoped_refptr<SSLCertRequestInfo> request_info = new SSLCertRequestInfo(); 737 scoped_refptr<SSLCertRequestInfo> request_info = new SSLCertRequestInfo();
720 client_socket_->GetSSLCertRequestInfo(request_info.get()); 738 client_socket_->GetSSLCertRequestInfo(request_info.get());
721 739
722 // Check that the authority name that arrived in the CertificateRequest 740 // Check that the authority name that arrived in the CertificateRequest
723 // handshake message is as expected. 741 // handshake message is as expected.
724 scoped_refptr<X509Certificate> client_cert = 742 scoped_refptr<X509Certificate> client_cert =
725 ImportCertFromFile(GetTestCertsDirectory(), kClientCertFileName); 743 ImportCertFromFile(GetTestCertsDirectory(), kClientCertFileName);
744 ASSERT_TRUE(client_cert);
726 EXPECT_TRUE(client_cert->IsIssuedByEncoded(request_info->cert_authorities)); 745 EXPECT_TRUE(client_cert->IsIssuedByEncoded(request_info->cert_authorities));
727 746
728 client_socket_->Disconnect(); 747 client_socket_->Disconnect();
729 748
730 EXPECT_EQ(ERR_FAILED, handshake_callback.GetResult(server_ret)); 749 EXPECT_EQ(ERR_FAILED, handshake_callback.GetResult(server_ret));
731 } 750 }
732 751
733 TEST_F(SSLServerSocketTest, HandshakeWithClientCertRequiredNotSuppliedCached) { 752 TEST_F(SSLServerSocketTest, HandshakeWithClientCertRequiredNotSuppliedCached) {
734 ConfigureClientCertsForServer(); 753 ASSERT_NO_FATAL_FAILURE(ConfigureClientCertsForServer());
735 CreateContext(); 754 ASSERT_NO_FATAL_FAILURE(CreateContext());
736 CreateSockets(); 755 ASSERT_NO_FATAL_FAILURE(CreateSockets());
737 // Use the default setting for the client socket, which is to not send 756 // Use the default setting for the client socket, which is to not send
738 // a client certificate. This will cause the client to receive an 757 // a client certificate. This will cause the client to receive an
739 // ERR_SSL_CLIENT_AUTH_CERT_NEEDED error, and allow for inspecting the 758 // ERR_SSL_CLIENT_AUTH_CERT_NEEDED error, and allow for inspecting the
740 // requested cert_authorities from the CertificateRequest sent by the 759 // requested cert_authorities from the CertificateRequest sent by the
741 // server. 760 // server.
742 761
743 TestCompletionCallback handshake_callback; 762 TestCompletionCallback handshake_callback;
744 int server_ret = server_socket_->Handshake(handshake_callback.callback()); 763 int server_ret = server_socket_->Handshake(handshake_callback.callback());
745 764
746 TestCompletionCallback connect_callback; 765 TestCompletionCallback connect_callback;
747 EXPECT_EQ(ERR_SSL_CLIENT_AUTH_CERT_NEEDED, 766 EXPECT_EQ(ERR_SSL_CLIENT_AUTH_CERT_NEEDED,
748 connect_callback.GetResult( 767 connect_callback.GetResult(
749 client_socket_->Connect(connect_callback.callback()))); 768 client_socket_->Connect(connect_callback.callback())));
750 769
751 scoped_refptr<SSLCertRequestInfo> request_info = new SSLCertRequestInfo(); 770 scoped_refptr<SSLCertRequestInfo> request_info = new SSLCertRequestInfo();
752 client_socket_->GetSSLCertRequestInfo(request_info.get()); 771 client_socket_->GetSSLCertRequestInfo(request_info.get());
753 772
754 // Check that the authority name that arrived in the CertificateRequest 773 // Check that the authority name that arrived in the CertificateRequest
755 // handshake message is as expected. 774 // handshake message is as expected.
756 scoped_refptr<X509Certificate> client_cert = 775 scoped_refptr<X509Certificate> client_cert =
757 ImportCertFromFile(GetTestCertsDirectory(), kClientCertFileName); 776 ImportCertFromFile(GetTestCertsDirectory(), kClientCertFileName);
777 ASSERT_TRUE(client_cert);
758 EXPECT_TRUE(client_cert->IsIssuedByEncoded(request_info->cert_authorities)); 778 EXPECT_TRUE(client_cert->IsIssuedByEncoded(request_info->cert_authorities));
759 779
760 client_socket_->Disconnect(); 780 client_socket_->Disconnect();
761 781
762 EXPECT_EQ(ERR_FAILED, handshake_callback.GetResult(server_ret)); 782 EXPECT_EQ(ERR_FAILED, handshake_callback.GetResult(server_ret));
763 server_socket_->Disconnect(); 783 server_socket_->Disconnect();
764 784
765 // Below, check that the cache didn't store the result of a failed handshake. 785 // Below, check that the cache didn't store the result of a failed handshake.
766 CreateSockets(); 786 ASSERT_NO_FATAL_FAILURE(CreateSockets());
767 TestCompletionCallback handshake_callback2; 787 TestCompletionCallback handshake_callback2;
768 int server_ret2 = server_socket_->Handshake(handshake_callback2.callback()); 788 int server_ret2 = server_socket_->Handshake(handshake_callback2.callback());
769 789
770 TestCompletionCallback connect_callback2; 790 TestCompletionCallback connect_callback2;
771 EXPECT_EQ(ERR_SSL_CLIENT_AUTH_CERT_NEEDED, 791 EXPECT_EQ(ERR_SSL_CLIENT_AUTH_CERT_NEEDED,
772 connect_callback2.GetResult( 792 connect_callback2.GetResult(
773 client_socket_->Connect(connect_callback2.callback()))); 793 client_socket_->Connect(connect_callback2.callback())));
774 794
775 scoped_refptr<SSLCertRequestInfo> request_info2 = new SSLCertRequestInfo(); 795 scoped_refptr<SSLCertRequestInfo> request_info2 = new SSLCertRequestInfo();
776 client_socket_->GetSSLCertRequestInfo(request_info2.get()); 796 client_socket_->GetSSLCertRequestInfo(request_info2.get());
777 797
778 // Check that the authority name that arrived in the CertificateRequest 798 // Check that the authority name that arrived in the CertificateRequest
779 // handshake message is as expected. 799 // handshake message is as expected.
780 EXPECT_TRUE(client_cert->IsIssuedByEncoded(request_info2->cert_authorities)); 800 EXPECT_TRUE(client_cert->IsIssuedByEncoded(request_info2->cert_authorities));
781 801
782 client_socket_->Disconnect(); 802 client_socket_->Disconnect();
783 803
784 EXPECT_EQ(ERR_FAILED, handshake_callback2.GetResult(server_ret2)); 804 EXPECT_EQ(ERR_FAILED, handshake_callback2.GetResult(server_ret2));
785 } 805 }
786 806
787 TEST_F(SSLServerSocketTest, HandshakeWithWrongClientCertSupplied) { 807 TEST_F(SSLServerSocketTest, HandshakeWithWrongClientCertSupplied) {
788 scoped_refptr<X509Certificate> client_cert = 808 scoped_refptr<X509Certificate> client_cert =
789 ImportCertFromFile(GetTestCertsDirectory(), kClientCertFileName); 809 ImportCertFromFile(GetTestCertsDirectory(), kClientCertFileName);
790 ConfigureClientCertsForClient(kWrongClientCertFileName, 810 ASSERT_TRUE(client_cert);
791 kWrongClientPrivateKeyFileName); 811
792 ConfigureClientCertsForServer(); 812 ASSERT_NO_FATAL_FAILURE(ConfigureClientCertsForClient(
793 CreateContext(); 813 kWrongClientCertFileName, kWrongClientPrivateKeyFileName));
794 CreateSockets(); 814 ASSERT_NO_FATAL_FAILURE(ConfigureClientCertsForServer());
815 ASSERT_NO_FATAL_FAILURE(CreateContext());
816 ASSERT_NO_FATAL_FAILURE(CreateSockets());
795 817
796 TestCompletionCallback handshake_callback; 818 TestCompletionCallback handshake_callback;
797 int server_ret = server_socket_->Handshake(handshake_callback.callback()); 819 int server_ret = server_socket_->Handshake(handshake_callback.callback());
798 820
799 TestCompletionCallback connect_callback; 821 TestCompletionCallback connect_callback;
800 int client_ret = client_socket_->Connect(connect_callback.callback()); 822 int client_ret = client_socket_->Connect(connect_callback.callback());
801 823
802 EXPECT_EQ(ERR_BAD_SSL_CLIENT_AUTH_CERT, 824 EXPECT_EQ(ERR_BAD_SSL_CLIENT_AUTH_CERT,
803 connect_callback.GetResult(client_ret)); 825 connect_callback.GetResult(client_ret));
804 EXPECT_EQ(ERR_BAD_SSL_CLIENT_AUTH_CERT, 826 EXPECT_EQ(ERR_BAD_SSL_CLIENT_AUTH_CERT,
805 handshake_callback.GetResult(server_ret)); 827 handshake_callback.GetResult(server_ret));
806 } 828 }
807 829
808 TEST_F(SSLServerSocketTest, HandshakeWithWrongClientCertSuppliedCached) { 830 TEST_F(SSLServerSocketTest, HandshakeWithWrongClientCertSuppliedCached) {
809 scoped_refptr<X509Certificate> client_cert = 831 scoped_refptr<X509Certificate> client_cert =
810 ImportCertFromFile(GetTestCertsDirectory(), kClientCertFileName); 832 ImportCertFromFile(GetTestCertsDirectory(), kClientCertFileName);
811 ConfigureClientCertsForClient(kWrongClientCertFileName, 833 ASSERT_TRUE(client_cert);
812 kWrongClientPrivateKeyFileName); 834
813 ConfigureClientCertsForServer(); 835 ASSERT_NO_FATAL_FAILURE(ConfigureClientCertsForClient(
814 CreateContext(); 836 kWrongClientCertFileName, kWrongClientPrivateKeyFileName));
815 CreateSockets(); 837 ASSERT_NO_FATAL_FAILURE(ConfigureClientCertsForServer());
838 ASSERT_NO_FATAL_FAILURE(CreateContext());
839 ASSERT_NO_FATAL_FAILURE(CreateSockets());
816 840
817 TestCompletionCallback handshake_callback; 841 TestCompletionCallback handshake_callback;
818 int server_ret = server_socket_->Handshake(handshake_callback.callback()); 842 int server_ret = server_socket_->Handshake(handshake_callback.callback());
819 843
820 TestCompletionCallback connect_callback; 844 TestCompletionCallback connect_callback;
821 int client_ret = client_socket_->Connect(connect_callback.callback()); 845 int client_ret = client_socket_->Connect(connect_callback.callback());
822 846
823 EXPECT_EQ(ERR_BAD_SSL_CLIENT_AUTH_CERT, 847 EXPECT_EQ(ERR_BAD_SSL_CLIENT_AUTH_CERT,
824 connect_callback.GetResult(client_ret)); 848 connect_callback.GetResult(client_ret));
825 EXPECT_EQ(ERR_BAD_SSL_CLIENT_AUTH_CERT, 849 EXPECT_EQ(ERR_BAD_SSL_CLIENT_AUTH_CERT,
826 handshake_callback.GetResult(server_ret)); 850 handshake_callback.GetResult(server_ret));
827 851
828 client_socket_->Disconnect(); 852 client_socket_->Disconnect();
829 server_socket_->Disconnect(); 853 server_socket_->Disconnect();
830 854
831 // Below, check that the cache didn't store the result of a failed handshake. 855 // Below, check that the cache didn't store the result of a failed handshake.
832 CreateSockets(); 856 ASSERT_NO_FATAL_FAILURE(CreateSockets());
833 TestCompletionCallback handshake_callback2; 857 TestCompletionCallback handshake_callback2;
834 int server_ret2 = server_socket_->Handshake(handshake_callback2.callback()); 858 int server_ret2 = server_socket_->Handshake(handshake_callback2.callback());
835 859
836 TestCompletionCallback connect_callback2; 860 TestCompletionCallback connect_callback2;
837 int client_ret2 = client_socket_->Connect(connect_callback2.callback()); 861 int client_ret2 = client_socket_->Connect(connect_callback2.callback());
838 862
839 EXPECT_EQ(ERR_BAD_SSL_CLIENT_AUTH_CERT, 863 EXPECT_EQ(ERR_BAD_SSL_CLIENT_AUTH_CERT,
840 connect_callback2.GetResult(client_ret2)); 864 connect_callback2.GetResult(client_ret2));
841 EXPECT_EQ(ERR_BAD_SSL_CLIENT_AUTH_CERT, 865 EXPECT_EQ(ERR_BAD_SSL_CLIENT_AUTH_CERT,
842 handshake_callback2.GetResult(server_ret2)); 866 handshake_callback2.GetResult(server_ret2));
843 } 867 }
844 #endif // defined(USE_OPENSSL) 868 #endif // defined(USE_OPENSSL)
845 869
846 TEST_F(SSLServerSocketTest, DataTransfer) { 870 TEST_F(SSLServerSocketTest, DataTransfer) {
847 CreateContext(); 871 ASSERT_NO_FATAL_FAILURE(CreateContext());
848 CreateSockets(); 872 ASSERT_NO_FATAL_FAILURE(CreateSockets());
849 873
850 // Establish connection. 874 // Establish connection.
851 TestCompletionCallback connect_callback; 875 TestCompletionCallback connect_callback;
852 int client_ret = client_socket_->Connect(connect_callback.callback()); 876 int client_ret = client_socket_->Connect(connect_callback.callback());
853 ASSERT_TRUE(client_ret == OK || client_ret == ERR_IO_PENDING); 877 ASSERT_TRUE(client_ret == OK || client_ret == ERR_IO_PENDING);
854 878
855 TestCompletionCallback handshake_callback; 879 TestCompletionCallback handshake_callback;
856 int server_ret = server_socket_->Handshake(handshake_callback.callback()); 880 int server_ret = server_socket_->Handshake(handshake_callback.callback());
857 ASSERT_TRUE(server_ret == OK || server_ret == ERR_IO_PENDING); 881 ASSERT_TRUE(server_ret == OK || server_ret == ERR_IO_PENDING);
858 882
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
921 EXPECT_EQ(write_buf->size(), read_buf->BytesConsumed()); 945 EXPECT_EQ(write_buf->size(), read_buf->BytesConsumed());
922 read_buf->SetOffset(0); 946 read_buf->SetOffset(0);
923 EXPECT_EQ(0, memcmp(write_buf->data(), read_buf->data(), write_buf->size())); 947 EXPECT_EQ(0, memcmp(write_buf->data(), read_buf->data(), write_buf->size()));
924 } 948 }
925 949
926 // A regression test for bug 127822 (http://crbug.com/127822). 950 // A regression test for bug 127822 (http://crbug.com/127822).
927 // If the server closes the connection after the handshake is finished, 951 // If the server closes the connection after the handshake is finished,
928 // the client's Write() call should not cause an infinite loop. 952 // the client's Write() call should not cause an infinite loop.
929 // NOTE: this is a test for SSLClientSocket rather than SSLServerSocket. 953 // NOTE: this is a test for SSLClientSocket rather than SSLServerSocket.
930 TEST_F(SSLServerSocketTest, ClientWriteAfterServerClose) { 954 TEST_F(SSLServerSocketTest, ClientWriteAfterServerClose) {
931 CreateContext(); 955 ASSERT_NO_FATAL_FAILURE(CreateContext());
932 CreateSockets(); 956 ASSERT_NO_FATAL_FAILURE(CreateSockets());
933 957
934 // Establish connection. 958 // Establish connection.
935 TestCompletionCallback connect_callback; 959 TestCompletionCallback connect_callback;
936 int client_ret = client_socket_->Connect(connect_callback.callback()); 960 int client_ret = client_socket_->Connect(connect_callback.callback());
937 ASSERT_TRUE(client_ret == OK || client_ret == ERR_IO_PENDING); 961 ASSERT_TRUE(client_ret == OK || client_ret == ERR_IO_PENDING);
938 962
939 TestCompletionCallback handshake_callback; 963 TestCompletionCallback handshake_callback;
940 int server_ret = server_socket_->Handshake(handshake_callback.callback()); 964 int server_ret = server_socket_->Handshake(handshake_callback.callback());
941 ASSERT_TRUE(server_ret == OK || server_ret == ERR_IO_PENDING); 965 ASSERT_TRUE(server_ret == OK || server_ret == ERR_IO_PENDING);
942 966
(...skipping 29 matching lines...) Expand all
972 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( 996 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
973 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(), 997 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure(),
974 base::TimeDelta::FromMilliseconds(10)); 998 base::TimeDelta::FromMilliseconds(10));
975 base::MessageLoop::current()->Run(); 999 base::MessageLoop::current()->Run();
976 } 1000 }
977 1001
978 // This test executes ExportKeyingMaterial() on the client and server sockets, 1002 // This test executes ExportKeyingMaterial() on the client and server sockets,
979 // after connecting them, and verifies that the results match. 1003 // after connecting them, and verifies that the results match.
980 // This test will fail if False Start is enabled (see crbug.com/90208). 1004 // This test will fail if False Start is enabled (see crbug.com/90208).
981 TEST_F(SSLServerSocketTest, ExportKeyingMaterial) { 1005 TEST_F(SSLServerSocketTest, ExportKeyingMaterial) {
982 CreateContext(); 1006 ASSERT_NO_FATAL_FAILURE(CreateContext());
983 CreateSockets(); 1007 ASSERT_NO_FATAL_FAILURE(CreateSockets());
984 1008
985 TestCompletionCallback connect_callback; 1009 TestCompletionCallback connect_callback;
986 int client_ret = client_socket_->Connect(connect_callback.callback()); 1010 int client_ret = client_socket_->Connect(connect_callback.callback());
987 ASSERT_TRUE(client_ret == OK || client_ret == ERR_IO_PENDING); 1011 ASSERT_TRUE(client_ret == OK || client_ret == ERR_IO_PENDING);
988 1012
989 TestCompletionCallback handshake_callback; 1013 TestCompletionCallback handshake_callback;
990 int server_ret = server_socket_->Handshake(handshake_callback.callback()); 1014 int server_ret = server_socket_->Handshake(handshake_callback.callback());
991 ASSERT_TRUE(server_ret == OK || server_ret == ERR_IO_PENDING); 1015 ASSERT_TRUE(server_ret == OK || server_ret == ERR_IO_PENDING);
992 1016
993 if (client_ret == ERR_IO_PENDING) { 1017 if (client_ret == ERR_IO_PENDING) {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
1033 0xc02f, // ECDHE_RSA_WITH_AES_128_GCM_SHA256 1057 0xc02f, // ECDHE_RSA_WITH_AES_128_GCM_SHA256
1034 0xcc13, // ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 1058 0xcc13, // ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
1035 0xcc14, // ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 1059 0xcc14, // ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
1036 }; 1060 };
1037 client_ssl_config_.disabled_cipher_suites.assign( 1061 client_ssl_config_.disabled_cipher_suites.assign(
1038 kEcdheCiphers, kEcdheCiphers + arraysize(kEcdheCiphers)); 1062 kEcdheCiphers, kEcdheCiphers + arraysize(kEcdheCiphers));
1039 1063
1040 // Require ECDHE on the server. 1064 // Require ECDHE on the server.
1041 server_ssl_config_.require_ecdhe = true; 1065 server_ssl_config_.require_ecdhe = true;
1042 1066
1043 CreateContext(); 1067 ASSERT_NO_FATAL_FAILURE(CreateContext());
1044 CreateSockets(); 1068 ASSERT_NO_FATAL_FAILURE(CreateSockets());
1045 1069
1046 TestCompletionCallback connect_callback; 1070 TestCompletionCallback connect_callback;
1047 int client_ret = client_socket_->Connect(connect_callback.callback()); 1071 int client_ret = client_socket_->Connect(connect_callback.callback());
1048 1072
1049 TestCompletionCallback handshake_callback; 1073 TestCompletionCallback handshake_callback;
1050 int server_ret = server_socket_->Handshake(handshake_callback.callback()); 1074 int server_ret = server_socket_->Handshake(handshake_callback.callback());
1051 1075
1052 client_ret = connect_callback.GetResult(client_ret); 1076 client_ret = connect_callback.GetResult(client_ret);
1053 server_ret = handshake_callback.GetResult(server_ret); 1077 server_ret = handshake_callback.GetResult(server_ret);
1054 1078
1055 ASSERT_EQ(ERR_SSL_VERSION_OR_CIPHER_MISMATCH, client_ret); 1079 ASSERT_EQ(ERR_SSL_VERSION_OR_CIPHER_MISMATCH, client_ret);
1056 ASSERT_EQ(ERR_SSL_VERSION_OR_CIPHER_MISMATCH, server_ret); 1080 ASSERT_EQ(ERR_SSL_VERSION_OR_CIPHER_MISMATCH, server_ret);
1057 } 1081 }
1058 1082
1059 } // namespace net 1083 } // namespace net
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698