| 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 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 62 #include "net/socket/stream_socket.h" | 62 #include "net/socket/stream_socket.h" |
| 63 #include "net/ssl/scoped_openssl_types.h" | 63 #include "net/ssl/scoped_openssl_types.h" |
| 64 #include "net/ssl/ssl_cert_request_info.h" | 64 #include "net/ssl/ssl_cert_request_info.h" |
| 65 #include "net/ssl/ssl_cipher_suite_names.h" | 65 #include "net/ssl/ssl_cipher_suite_names.h" |
| 66 #include "net/ssl/ssl_connection_status_flags.h" | 66 #include "net/ssl/ssl_connection_status_flags.h" |
| 67 #include "net/ssl/ssl_info.h" | 67 #include "net/ssl/ssl_info.h" |
| 68 #include "net/ssl/ssl_private_key.h" | 68 #include "net/ssl/ssl_private_key.h" |
| 69 #include "net/ssl/ssl_server_config.h" | 69 #include "net/ssl/ssl_server_config.h" |
| 70 #include "net/ssl/test_ssl_private_key.h" | 70 #include "net/ssl/test_ssl_private_key.h" |
| 71 #include "net/test/cert_test_util.h" | 71 #include "net/test/cert_test_util.h" |
| 72 #include "net/test/gtest_util.h" |
| 72 #include "net/test/test_data_directory.h" | 73 #include "net/test/test_data_directory.h" |
| 74 #include "testing/gmock/include/gmock/gmock.h" |
| 73 #include "testing/gtest/include/gtest/gtest.h" | 75 #include "testing/gtest/include/gtest/gtest.h" |
| 74 #include "testing/platform_test.h" | 76 #include "testing/platform_test.h" |
| 75 | 77 |
| 78 using net::test::IsError; |
| 79 using net::test::IsOk; |
| 80 |
| 76 namespace net { | 81 namespace net { |
| 77 | 82 |
| 78 namespace { | 83 namespace { |
| 79 | 84 |
| 80 const char kClientCertFileName[] = "client_1.pem"; | 85 const char kClientCertFileName[] = "client_1.pem"; |
| 81 const char kClientPrivateKeyFileName[] = "client_1.pk8"; | 86 const char kClientPrivateKeyFileName[] = "client_1.pk8"; |
| 82 const char kWrongClientCertFileName[] = "client_2.pem"; | 87 const char kWrongClientCertFileName[] = "client_2.pem"; |
| 83 const char kWrongClientPrivateKeyFileName[] = "client_2.pk8"; | 88 const char kWrongClientPrivateKeyFileName[] = "client_2.pk8"; |
| 84 const char kClientCertCAFileName[] = "client_1_ca.pem"; | 89 const char kClientCertCAFileName[] = "client_1_ca.pem"; |
| 85 | 90 |
| (...skipping 448 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 534 | 539 |
| 535 TestCompletionCallback handshake_callback; | 540 TestCompletionCallback handshake_callback; |
| 536 int server_ret = server_socket_->Handshake(handshake_callback.callback()); | 541 int server_ret = server_socket_->Handshake(handshake_callback.callback()); |
| 537 | 542 |
| 538 TestCompletionCallback connect_callback; | 543 TestCompletionCallback connect_callback; |
| 539 int client_ret = client_socket_->Connect(connect_callback.callback()); | 544 int client_ret = client_socket_->Connect(connect_callback.callback()); |
| 540 | 545 |
| 541 client_ret = connect_callback.GetResult(client_ret); | 546 client_ret = connect_callback.GetResult(client_ret); |
| 542 server_ret = handshake_callback.GetResult(server_ret); | 547 server_ret = handshake_callback.GetResult(server_ret); |
| 543 | 548 |
| 544 ASSERT_EQ(OK, client_ret); | 549 ASSERT_THAT(client_ret, IsOk()); |
| 545 ASSERT_EQ(OK, server_ret); | 550 ASSERT_THAT(server_ret, IsOk()); |
| 546 | 551 |
| 547 // Make sure the cert status is expected. | 552 // Make sure the cert status is expected. |
| 548 SSLInfo ssl_info; | 553 SSLInfo ssl_info; |
| 549 ASSERT_TRUE(client_socket_->GetSSLInfo(&ssl_info)); | 554 ASSERT_TRUE(client_socket_->GetSSLInfo(&ssl_info)); |
| 550 EXPECT_EQ(CERT_STATUS_AUTHORITY_INVALID, ssl_info.cert_status); | 555 EXPECT_EQ(CERT_STATUS_AUTHORITY_INVALID, ssl_info.cert_status); |
| 551 | 556 |
| 552 // The default cipher suite should be ECDHE and, unless on NSS and the | 557 // The default cipher suite should be ECDHE and, unless on NSS and the |
| 553 // platform doesn't support it, an AEAD. | 558 // platform doesn't support it, an AEAD. |
| 554 uint16_t cipher_suite = | 559 uint16_t cipher_suite = |
| 555 SSLConnectionStatusToCipherSuite(ssl_info.connection_status); | 560 SSLConnectionStatusToCipherSuite(ssl_info.connection_status); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 569 | 574 |
| 570 TestCompletionCallback handshake_callback; | 575 TestCompletionCallback handshake_callback; |
| 571 int server_ret = server_socket_->Handshake(handshake_callback.callback()); | 576 int server_ret = server_socket_->Handshake(handshake_callback.callback()); |
| 572 | 577 |
| 573 TestCompletionCallback connect_callback; | 578 TestCompletionCallback connect_callback; |
| 574 int client_ret = client_socket_->Connect(connect_callback.callback()); | 579 int client_ret = client_socket_->Connect(connect_callback.callback()); |
| 575 | 580 |
| 576 client_ret = connect_callback.GetResult(client_ret); | 581 client_ret = connect_callback.GetResult(client_ret); |
| 577 server_ret = handshake_callback.GetResult(server_ret); | 582 server_ret = handshake_callback.GetResult(server_ret); |
| 578 | 583 |
| 579 ASSERT_EQ(OK, client_ret); | 584 ASSERT_THAT(client_ret, IsOk()); |
| 580 ASSERT_EQ(OK, server_ret); | 585 ASSERT_THAT(server_ret, IsOk()); |
| 581 | 586 |
| 582 // Make sure the cert status is expected. | 587 // Make sure the cert status is expected. |
| 583 SSLInfo ssl_info; | 588 SSLInfo ssl_info; |
| 584 ASSERT_TRUE(client_socket_->GetSSLInfo(&ssl_info)); | 589 ASSERT_TRUE(client_socket_->GetSSLInfo(&ssl_info)); |
| 585 EXPECT_EQ(ssl_info.handshake_type, SSLInfo::HANDSHAKE_FULL); | 590 EXPECT_EQ(ssl_info.handshake_type, SSLInfo::HANDSHAKE_FULL); |
| 586 SSLInfo ssl_server_info; | 591 SSLInfo ssl_server_info; |
| 587 ASSERT_TRUE(server_socket_->GetSSLInfo(&ssl_server_info)); | 592 ASSERT_TRUE(server_socket_->GetSSLInfo(&ssl_server_info)); |
| 588 EXPECT_EQ(ssl_server_info.handshake_type, SSLInfo::HANDSHAKE_FULL); | 593 EXPECT_EQ(ssl_server_info.handshake_type, SSLInfo::HANDSHAKE_FULL); |
| 589 | 594 |
| 590 // Make sure the second connection is cached. | 595 // Make sure the second connection is cached. |
| 591 ASSERT_NO_FATAL_FAILURE(CreateSockets()); | 596 ASSERT_NO_FATAL_FAILURE(CreateSockets()); |
| 592 TestCompletionCallback handshake_callback2; | 597 TestCompletionCallback handshake_callback2; |
| 593 int server_ret2 = server_socket_->Handshake(handshake_callback2.callback()); | 598 int server_ret2 = server_socket_->Handshake(handshake_callback2.callback()); |
| 594 | 599 |
| 595 TestCompletionCallback connect_callback2; | 600 TestCompletionCallback connect_callback2; |
| 596 int client_ret2 = client_socket_->Connect(connect_callback2.callback()); | 601 int client_ret2 = client_socket_->Connect(connect_callback2.callback()); |
| 597 | 602 |
| 598 client_ret2 = connect_callback2.GetResult(client_ret2); | 603 client_ret2 = connect_callback2.GetResult(client_ret2); |
| 599 server_ret2 = handshake_callback2.GetResult(server_ret2); | 604 server_ret2 = handshake_callback2.GetResult(server_ret2); |
| 600 | 605 |
| 601 ASSERT_EQ(OK, client_ret2); | 606 ASSERT_THAT(client_ret2, IsOk()); |
| 602 ASSERT_EQ(OK, server_ret2); | 607 ASSERT_THAT(server_ret2, IsOk()); |
| 603 | 608 |
| 604 // Make sure the cert status is expected. | 609 // Make sure the cert status is expected. |
| 605 SSLInfo ssl_info2; | 610 SSLInfo ssl_info2; |
| 606 ASSERT_TRUE(client_socket_->GetSSLInfo(&ssl_info2)); | 611 ASSERT_TRUE(client_socket_->GetSSLInfo(&ssl_info2)); |
| 607 EXPECT_EQ(ssl_info2.handshake_type, SSLInfo::HANDSHAKE_RESUME); | 612 EXPECT_EQ(ssl_info2.handshake_type, SSLInfo::HANDSHAKE_RESUME); |
| 608 SSLInfo ssl_server_info2; | 613 SSLInfo ssl_server_info2; |
| 609 ASSERT_TRUE(server_socket_->GetSSLInfo(&ssl_server_info2)); | 614 ASSERT_TRUE(server_socket_->GetSSLInfo(&ssl_server_info2)); |
| 610 EXPECT_EQ(ssl_server_info2.handshake_type, SSLInfo::HANDSHAKE_RESUME); | 615 EXPECT_EQ(ssl_server_info2.handshake_type, SSLInfo::HANDSHAKE_RESUME); |
| 611 } | 616 } |
| 612 | 617 |
| 613 // This test makes sure the session cache separates out by server context. | 618 // This test makes sure the session cache separates out by server context. |
| 614 TEST_F(SSLServerSocketTest, HandshakeCachedContextSwitch) { | 619 TEST_F(SSLServerSocketTest, HandshakeCachedContextSwitch) { |
| 615 ASSERT_NO_FATAL_FAILURE(CreateContext()); | 620 ASSERT_NO_FATAL_FAILURE(CreateContext()); |
| 616 ASSERT_NO_FATAL_FAILURE(CreateSockets()); | 621 ASSERT_NO_FATAL_FAILURE(CreateSockets()); |
| 617 | 622 |
| 618 TestCompletionCallback handshake_callback; | 623 TestCompletionCallback handshake_callback; |
| 619 int server_ret = server_socket_->Handshake(handshake_callback.callback()); | 624 int server_ret = server_socket_->Handshake(handshake_callback.callback()); |
| 620 | 625 |
| 621 TestCompletionCallback connect_callback; | 626 TestCompletionCallback connect_callback; |
| 622 int client_ret = client_socket_->Connect(connect_callback.callback()); | 627 int client_ret = client_socket_->Connect(connect_callback.callback()); |
| 623 | 628 |
| 624 client_ret = connect_callback.GetResult(client_ret); | 629 client_ret = connect_callback.GetResult(client_ret); |
| 625 server_ret = handshake_callback.GetResult(server_ret); | 630 server_ret = handshake_callback.GetResult(server_ret); |
| 626 | 631 |
| 627 ASSERT_EQ(OK, client_ret); | 632 ASSERT_THAT(client_ret, IsOk()); |
| 628 ASSERT_EQ(OK, server_ret); | 633 ASSERT_THAT(server_ret, IsOk()); |
| 629 | 634 |
| 630 // Make sure the cert status is expected. | 635 // Make sure the cert status is expected. |
| 631 SSLInfo ssl_info; | 636 SSLInfo ssl_info; |
| 632 ASSERT_TRUE(client_socket_->GetSSLInfo(&ssl_info)); | 637 ASSERT_TRUE(client_socket_->GetSSLInfo(&ssl_info)); |
| 633 EXPECT_EQ(ssl_info.handshake_type, SSLInfo::HANDSHAKE_FULL); | 638 EXPECT_EQ(ssl_info.handshake_type, SSLInfo::HANDSHAKE_FULL); |
| 634 SSLInfo ssl_server_info; | 639 SSLInfo ssl_server_info; |
| 635 ASSERT_TRUE(server_socket_->GetSSLInfo(&ssl_server_info)); | 640 ASSERT_TRUE(server_socket_->GetSSLInfo(&ssl_server_info)); |
| 636 EXPECT_EQ(ssl_server_info.handshake_type, SSLInfo::HANDSHAKE_FULL); | 641 EXPECT_EQ(ssl_server_info.handshake_type, SSLInfo::HANDSHAKE_FULL); |
| 637 | 642 |
| 638 // Make sure the second connection is NOT cached when using a new context. | 643 // Make sure the second connection is NOT cached when using a new context. |
| 639 ASSERT_NO_FATAL_FAILURE(CreateContext()); | 644 ASSERT_NO_FATAL_FAILURE(CreateContext()); |
| 640 ASSERT_NO_FATAL_FAILURE(CreateSockets()); | 645 ASSERT_NO_FATAL_FAILURE(CreateSockets()); |
| 641 | 646 |
| 642 TestCompletionCallback handshake_callback2; | 647 TestCompletionCallback handshake_callback2; |
| 643 int server_ret2 = server_socket_->Handshake(handshake_callback2.callback()); | 648 int server_ret2 = server_socket_->Handshake(handshake_callback2.callback()); |
| 644 | 649 |
| 645 TestCompletionCallback connect_callback2; | 650 TestCompletionCallback connect_callback2; |
| 646 int client_ret2 = client_socket_->Connect(connect_callback2.callback()); | 651 int client_ret2 = client_socket_->Connect(connect_callback2.callback()); |
| 647 | 652 |
| 648 client_ret2 = connect_callback2.GetResult(client_ret2); | 653 client_ret2 = connect_callback2.GetResult(client_ret2); |
| 649 server_ret2 = handshake_callback2.GetResult(server_ret2); | 654 server_ret2 = handshake_callback2.GetResult(server_ret2); |
| 650 | 655 |
| 651 ASSERT_EQ(OK, client_ret2); | 656 ASSERT_THAT(client_ret2, IsOk()); |
| 652 ASSERT_EQ(OK, server_ret2); | 657 ASSERT_THAT(server_ret2, IsOk()); |
| 653 | 658 |
| 654 // Make sure the cert status is expected. | 659 // Make sure the cert status is expected. |
| 655 SSLInfo ssl_info2; | 660 SSLInfo ssl_info2; |
| 656 ASSERT_TRUE(client_socket_->GetSSLInfo(&ssl_info2)); | 661 ASSERT_TRUE(client_socket_->GetSSLInfo(&ssl_info2)); |
| 657 EXPECT_EQ(ssl_info2.handshake_type, SSLInfo::HANDSHAKE_FULL); | 662 EXPECT_EQ(ssl_info2.handshake_type, SSLInfo::HANDSHAKE_FULL); |
| 658 SSLInfo ssl_server_info2; | 663 SSLInfo ssl_server_info2; |
| 659 ASSERT_TRUE(server_socket_->GetSSLInfo(&ssl_server_info2)); | 664 ASSERT_TRUE(server_socket_->GetSSLInfo(&ssl_server_info2)); |
| 660 EXPECT_EQ(ssl_server_info2.handshake_type, SSLInfo::HANDSHAKE_FULL); | 665 EXPECT_EQ(ssl_server_info2.handshake_type, SSLInfo::HANDSHAKE_FULL); |
| 661 } | 666 } |
| 662 | 667 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 674 | 679 |
| 675 TestCompletionCallback handshake_callback; | 680 TestCompletionCallback handshake_callback; |
| 676 int server_ret = server_socket_->Handshake(handshake_callback.callback()); | 681 int server_ret = server_socket_->Handshake(handshake_callback.callback()); |
| 677 | 682 |
| 678 TestCompletionCallback connect_callback; | 683 TestCompletionCallback connect_callback; |
| 679 int client_ret = client_socket_->Connect(connect_callback.callback()); | 684 int client_ret = client_socket_->Connect(connect_callback.callback()); |
| 680 | 685 |
| 681 client_ret = connect_callback.GetResult(client_ret); | 686 client_ret = connect_callback.GetResult(client_ret); |
| 682 server_ret = handshake_callback.GetResult(server_ret); | 687 server_ret = handshake_callback.GetResult(server_ret); |
| 683 | 688 |
| 684 ASSERT_EQ(OK, client_ret); | 689 ASSERT_THAT(client_ret, IsOk()); |
| 685 ASSERT_EQ(OK, server_ret); | 690 ASSERT_THAT(server_ret, IsOk()); |
| 686 | 691 |
| 687 // Make sure the cert status is expected. | 692 // Make sure the cert status is expected. |
| 688 SSLInfo ssl_info; | 693 SSLInfo ssl_info; |
| 689 client_socket_->GetSSLInfo(&ssl_info); | 694 client_socket_->GetSSLInfo(&ssl_info); |
| 690 EXPECT_EQ(CERT_STATUS_AUTHORITY_INVALID, ssl_info.cert_status); | 695 EXPECT_EQ(CERT_STATUS_AUTHORITY_INVALID, ssl_info.cert_status); |
| 691 server_socket_->GetSSLInfo(&ssl_info); | 696 server_socket_->GetSSLInfo(&ssl_info); |
| 692 ASSERT_TRUE(ssl_info.cert.get()); | 697 ASSERT_TRUE(ssl_info.cert.get()); |
| 693 EXPECT_TRUE(client_cert->Equals(ssl_info.cert.get())); | 698 EXPECT_TRUE(client_cert->Equals(ssl_info.cert.get())); |
| 694 } | 699 } |
| 695 | 700 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 708 | 713 |
| 709 TestCompletionCallback handshake_callback; | 714 TestCompletionCallback handshake_callback; |
| 710 int server_ret = server_socket_->Handshake(handshake_callback.callback()); | 715 int server_ret = server_socket_->Handshake(handshake_callback.callback()); |
| 711 | 716 |
| 712 TestCompletionCallback connect_callback; | 717 TestCompletionCallback connect_callback; |
| 713 int client_ret = client_socket_->Connect(connect_callback.callback()); | 718 int client_ret = client_socket_->Connect(connect_callback.callback()); |
| 714 | 719 |
| 715 client_ret = connect_callback.GetResult(client_ret); | 720 client_ret = connect_callback.GetResult(client_ret); |
| 716 server_ret = handshake_callback.GetResult(server_ret); | 721 server_ret = handshake_callback.GetResult(server_ret); |
| 717 | 722 |
| 718 ASSERT_EQ(OK, client_ret); | 723 ASSERT_THAT(client_ret, IsOk()); |
| 719 ASSERT_EQ(OK, server_ret); | 724 ASSERT_THAT(server_ret, IsOk()); |
| 720 | 725 |
| 721 // Make sure the cert status is expected. | 726 // Make sure the cert status is expected. |
| 722 SSLInfo ssl_info; | 727 SSLInfo ssl_info; |
| 723 ASSERT_TRUE(client_socket_->GetSSLInfo(&ssl_info)); | 728 ASSERT_TRUE(client_socket_->GetSSLInfo(&ssl_info)); |
| 724 EXPECT_EQ(ssl_info.handshake_type, SSLInfo::HANDSHAKE_FULL); | 729 EXPECT_EQ(ssl_info.handshake_type, SSLInfo::HANDSHAKE_FULL); |
| 725 SSLInfo ssl_server_info; | 730 SSLInfo ssl_server_info; |
| 726 ASSERT_TRUE(server_socket_->GetSSLInfo(&ssl_server_info)); | 731 ASSERT_TRUE(server_socket_->GetSSLInfo(&ssl_server_info)); |
| 727 ASSERT_TRUE(ssl_server_info.cert.get()); | 732 ASSERT_TRUE(ssl_server_info.cert.get()); |
| 728 EXPECT_TRUE(client_cert->Equals(ssl_server_info.cert.get())); | 733 EXPECT_TRUE(client_cert->Equals(ssl_server_info.cert.get())); |
| 729 EXPECT_EQ(ssl_server_info.handshake_type, SSLInfo::HANDSHAKE_FULL); | 734 EXPECT_EQ(ssl_server_info.handshake_type, SSLInfo::HANDSHAKE_FULL); |
| 730 server_socket_->Disconnect(); | 735 server_socket_->Disconnect(); |
| 731 client_socket_->Disconnect(); | 736 client_socket_->Disconnect(); |
| 732 | 737 |
| 733 // Create the connection again. | 738 // Create the connection again. |
| 734 ASSERT_NO_FATAL_FAILURE(CreateSockets()); | 739 ASSERT_NO_FATAL_FAILURE(CreateSockets()); |
| 735 TestCompletionCallback handshake_callback2; | 740 TestCompletionCallback handshake_callback2; |
| 736 int server_ret2 = server_socket_->Handshake(handshake_callback2.callback()); | 741 int server_ret2 = server_socket_->Handshake(handshake_callback2.callback()); |
| 737 | 742 |
| 738 TestCompletionCallback connect_callback2; | 743 TestCompletionCallback connect_callback2; |
| 739 int client_ret2 = client_socket_->Connect(connect_callback2.callback()); | 744 int client_ret2 = client_socket_->Connect(connect_callback2.callback()); |
| 740 | 745 |
| 741 client_ret2 = connect_callback2.GetResult(client_ret2); | 746 client_ret2 = connect_callback2.GetResult(client_ret2); |
| 742 server_ret2 = handshake_callback2.GetResult(server_ret2); | 747 server_ret2 = handshake_callback2.GetResult(server_ret2); |
| 743 | 748 |
| 744 ASSERT_EQ(OK, client_ret2); | 749 ASSERT_THAT(client_ret2, IsOk()); |
| 745 ASSERT_EQ(OK, server_ret2); | 750 ASSERT_THAT(server_ret2, IsOk()); |
| 746 | 751 |
| 747 // Make sure the cert status is expected. | 752 // Make sure the cert status is expected. |
| 748 SSLInfo ssl_info2; | 753 SSLInfo ssl_info2; |
| 749 ASSERT_TRUE(client_socket_->GetSSLInfo(&ssl_info2)); | 754 ASSERT_TRUE(client_socket_->GetSSLInfo(&ssl_info2)); |
| 750 EXPECT_EQ(ssl_info2.handshake_type, SSLInfo::HANDSHAKE_RESUME); | 755 EXPECT_EQ(ssl_info2.handshake_type, SSLInfo::HANDSHAKE_RESUME); |
| 751 SSLInfo ssl_server_info2; | 756 SSLInfo ssl_server_info2; |
| 752 ASSERT_TRUE(server_socket_->GetSSLInfo(&ssl_server_info2)); | 757 ASSERT_TRUE(server_socket_->GetSSLInfo(&ssl_server_info2)); |
| 753 ASSERT_TRUE(ssl_server_info2.cert.get()); | 758 ASSERT_TRUE(ssl_server_info2.cert.get()); |
| 754 EXPECT_TRUE(client_cert->Equals(ssl_server_info2.cert.get())); | 759 EXPECT_TRUE(client_cert->Equals(ssl_server_info2.cert.get())); |
| 755 EXPECT_EQ(ssl_server_info2.handshake_type, SSLInfo::HANDSHAKE_RESUME); | 760 EXPECT_EQ(ssl_server_info2.handshake_type, SSLInfo::HANDSHAKE_RESUME); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 778 | 783 |
| 779 // Check that the authority name that arrived in the CertificateRequest | 784 // Check that the authority name that arrived in the CertificateRequest |
| 780 // handshake message is as expected. | 785 // handshake message is as expected. |
| 781 scoped_refptr<X509Certificate> client_cert = | 786 scoped_refptr<X509Certificate> client_cert = |
| 782 ImportCertFromFile(GetTestCertsDirectory(), kClientCertFileName); | 787 ImportCertFromFile(GetTestCertsDirectory(), kClientCertFileName); |
| 783 ASSERT_TRUE(client_cert); | 788 ASSERT_TRUE(client_cert); |
| 784 EXPECT_TRUE(client_cert->IsIssuedByEncoded(request_info->cert_authorities)); | 789 EXPECT_TRUE(client_cert->IsIssuedByEncoded(request_info->cert_authorities)); |
| 785 | 790 |
| 786 client_socket_->Disconnect(); | 791 client_socket_->Disconnect(); |
| 787 | 792 |
| 788 EXPECT_EQ(ERR_FAILED, handshake_callback.GetResult(server_ret)); | 793 EXPECT_THAT(handshake_callback.GetResult(server_ret), IsError(ERR_FAILED)); |
| 789 } | 794 } |
| 790 | 795 |
| 791 TEST_F(SSLServerSocketTest, HandshakeWithClientCertRequiredNotSuppliedCached) { | 796 TEST_F(SSLServerSocketTest, HandshakeWithClientCertRequiredNotSuppliedCached) { |
| 792 ASSERT_NO_FATAL_FAILURE(ConfigureClientCertsForServer()); | 797 ASSERT_NO_FATAL_FAILURE(ConfigureClientCertsForServer()); |
| 793 ASSERT_NO_FATAL_FAILURE(CreateContext()); | 798 ASSERT_NO_FATAL_FAILURE(CreateContext()); |
| 794 ASSERT_NO_FATAL_FAILURE(CreateSockets()); | 799 ASSERT_NO_FATAL_FAILURE(CreateSockets()); |
| 795 // Use the default setting for the client socket, which is to not send | 800 // Use the default setting for the client socket, which is to not send |
| 796 // a client certificate. This will cause the client to receive an | 801 // a client certificate. This will cause the client to receive an |
| 797 // ERR_SSL_CLIENT_AUTH_CERT_NEEDED error, and allow for inspecting the | 802 // ERR_SSL_CLIENT_AUTH_CERT_NEEDED error, and allow for inspecting the |
| 798 // requested cert_authorities from the CertificateRequest sent by the | 803 // requested cert_authorities from the CertificateRequest sent by the |
| (...skipping 12 matching lines...) Expand all Loading... |
| 811 | 816 |
| 812 // Check that the authority name that arrived in the CertificateRequest | 817 // Check that the authority name that arrived in the CertificateRequest |
| 813 // handshake message is as expected. | 818 // handshake message is as expected. |
| 814 scoped_refptr<X509Certificate> client_cert = | 819 scoped_refptr<X509Certificate> client_cert = |
| 815 ImportCertFromFile(GetTestCertsDirectory(), kClientCertFileName); | 820 ImportCertFromFile(GetTestCertsDirectory(), kClientCertFileName); |
| 816 ASSERT_TRUE(client_cert); | 821 ASSERT_TRUE(client_cert); |
| 817 EXPECT_TRUE(client_cert->IsIssuedByEncoded(request_info->cert_authorities)); | 822 EXPECT_TRUE(client_cert->IsIssuedByEncoded(request_info->cert_authorities)); |
| 818 | 823 |
| 819 client_socket_->Disconnect(); | 824 client_socket_->Disconnect(); |
| 820 | 825 |
| 821 EXPECT_EQ(ERR_FAILED, handshake_callback.GetResult(server_ret)); | 826 EXPECT_THAT(handshake_callback.GetResult(server_ret), IsError(ERR_FAILED)); |
| 822 server_socket_->Disconnect(); | 827 server_socket_->Disconnect(); |
| 823 | 828 |
| 824 // Below, check that the cache didn't store the result of a failed handshake. | 829 // Below, check that the cache didn't store the result of a failed handshake. |
| 825 ASSERT_NO_FATAL_FAILURE(CreateSockets()); | 830 ASSERT_NO_FATAL_FAILURE(CreateSockets()); |
| 826 TestCompletionCallback handshake_callback2; | 831 TestCompletionCallback handshake_callback2; |
| 827 int server_ret2 = server_socket_->Handshake(handshake_callback2.callback()); | 832 int server_ret2 = server_socket_->Handshake(handshake_callback2.callback()); |
| 828 | 833 |
| 829 TestCompletionCallback connect_callback2; | 834 TestCompletionCallback connect_callback2; |
| 830 EXPECT_EQ(ERR_SSL_CLIENT_AUTH_CERT_NEEDED, | 835 EXPECT_EQ(ERR_SSL_CLIENT_AUTH_CERT_NEEDED, |
| 831 connect_callback2.GetResult( | 836 connect_callback2.GetResult( |
| 832 client_socket_->Connect(connect_callback2.callback()))); | 837 client_socket_->Connect(connect_callback2.callback()))); |
| 833 | 838 |
| 834 scoped_refptr<SSLCertRequestInfo> request_info2 = new SSLCertRequestInfo(); | 839 scoped_refptr<SSLCertRequestInfo> request_info2 = new SSLCertRequestInfo(); |
| 835 client_socket_->GetSSLCertRequestInfo(request_info2.get()); | 840 client_socket_->GetSSLCertRequestInfo(request_info2.get()); |
| 836 | 841 |
| 837 // Check that the authority name that arrived in the CertificateRequest | 842 // Check that the authority name that arrived in the CertificateRequest |
| 838 // handshake message is as expected. | 843 // handshake message is as expected. |
| 839 EXPECT_TRUE(client_cert->IsIssuedByEncoded(request_info2->cert_authorities)); | 844 EXPECT_TRUE(client_cert->IsIssuedByEncoded(request_info2->cert_authorities)); |
| 840 | 845 |
| 841 client_socket_->Disconnect(); | 846 client_socket_->Disconnect(); |
| 842 | 847 |
| 843 EXPECT_EQ(ERR_FAILED, handshake_callback2.GetResult(server_ret2)); | 848 EXPECT_THAT(handshake_callback2.GetResult(server_ret2), IsError(ERR_FAILED)); |
| 844 } | 849 } |
| 845 | 850 |
| 846 TEST_F(SSLServerSocketTest, HandshakeWithWrongClientCertSupplied) { | 851 TEST_F(SSLServerSocketTest, HandshakeWithWrongClientCertSupplied) { |
| 847 scoped_refptr<X509Certificate> client_cert = | 852 scoped_refptr<X509Certificate> client_cert = |
| 848 ImportCertFromFile(GetTestCertsDirectory(), kClientCertFileName); | 853 ImportCertFromFile(GetTestCertsDirectory(), kClientCertFileName); |
| 849 ASSERT_TRUE(client_cert); | 854 ASSERT_TRUE(client_cert); |
| 850 | 855 |
| 851 ASSERT_NO_FATAL_FAILURE(ConfigureClientCertsForClient( | 856 ASSERT_NO_FATAL_FAILURE(ConfigureClientCertsForClient( |
| 852 kWrongClientCertFileName, kWrongClientPrivateKeyFileName)); | 857 kWrongClientCertFileName, kWrongClientPrivateKeyFileName)); |
| 853 ASSERT_NO_FATAL_FAILURE(ConfigureClientCertsForServer()); | 858 ASSERT_NO_FATAL_FAILURE(ConfigureClientCertsForServer()); |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 912 // Establish connection. | 917 // Establish connection. |
| 913 TestCompletionCallback connect_callback; | 918 TestCompletionCallback connect_callback; |
| 914 int client_ret = client_socket_->Connect(connect_callback.callback()); | 919 int client_ret = client_socket_->Connect(connect_callback.callback()); |
| 915 ASSERT_TRUE(client_ret == OK || client_ret == ERR_IO_PENDING); | 920 ASSERT_TRUE(client_ret == OK || client_ret == ERR_IO_PENDING); |
| 916 | 921 |
| 917 TestCompletionCallback handshake_callback; | 922 TestCompletionCallback handshake_callback; |
| 918 int server_ret = server_socket_->Handshake(handshake_callback.callback()); | 923 int server_ret = server_socket_->Handshake(handshake_callback.callback()); |
| 919 ASSERT_TRUE(server_ret == OK || server_ret == ERR_IO_PENDING); | 924 ASSERT_TRUE(server_ret == OK || server_ret == ERR_IO_PENDING); |
| 920 | 925 |
| 921 client_ret = connect_callback.GetResult(client_ret); | 926 client_ret = connect_callback.GetResult(client_ret); |
| 922 ASSERT_EQ(OK, client_ret); | 927 ASSERT_THAT(client_ret, IsOk()); |
| 923 server_ret = handshake_callback.GetResult(server_ret); | 928 server_ret = handshake_callback.GetResult(server_ret); |
| 924 ASSERT_EQ(OK, server_ret); | 929 ASSERT_THAT(server_ret, IsOk()); |
| 925 | 930 |
| 926 const int kReadBufSize = 1024; | 931 const int kReadBufSize = 1024; |
| 927 scoped_refptr<StringIOBuffer> write_buf = | 932 scoped_refptr<StringIOBuffer> write_buf = |
| 928 new StringIOBuffer("testing123"); | 933 new StringIOBuffer("testing123"); |
| 929 scoped_refptr<DrainableIOBuffer> read_buf = | 934 scoped_refptr<DrainableIOBuffer> read_buf = |
| 930 new DrainableIOBuffer(new IOBuffer(kReadBufSize), kReadBufSize); | 935 new DrainableIOBuffer(new IOBuffer(kReadBufSize), kReadBufSize); |
| 931 | 936 |
| 932 // Write then read. | 937 // Write then read. |
| 933 TestCompletionCallback write_callback; | 938 TestCompletionCallback write_callback; |
| 934 TestCompletionCallback read_callback; | 939 TestCompletionCallback read_callback; |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 996 // Establish connection. | 1001 // Establish connection. |
| 997 TestCompletionCallback connect_callback; | 1002 TestCompletionCallback connect_callback; |
| 998 int client_ret = client_socket_->Connect(connect_callback.callback()); | 1003 int client_ret = client_socket_->Connect(connect_callback.callback()); |
| 999 ASSERT_TRUE(client_ret == OK || client_ret == ERR_IO_PENDING); | 1004 ASSERT_TRUE(client_ret == OK || client_ret == ERR_IO_PENDING); |
| 1000 | 1005 |
| 1001 TestCompletionCallback handshake_callback; | 1006 TestCompletionCallback handshake_callback; |
| 1002 int server_ret = server_socket_->Handshake(handshake_callback.callback()); | 1007 int server_ret = server_socket_->Handshake(handshake_callback.callback()); |
| 1003 ASSERT_TRUE(server_ret == OK || server_ret == ERR_IO_PENDING); | 1008 ASSERT_TRUE(server_ret == OK || server_ret == ERR_IO_PENDING); |
| 1004 | 1009 |
| 1005 client_ret = connect_callback.GetResult(client_ret); | 1010 client_ret = connect_callback.GetResult(client_ret); |
| 1006 ASSERT_EQ(OK, client_ret); | 1011 ASSERT_THAT(client_ret, IsOk()); |
| 1007 server_ret = handshake_callback.GetResult(server_ret); | 1012 server_ret = handshake_callback.GetResult(server_ret); |
| 1008 ASSERT_EQ(OK, server_ret); | 1013 ASSERT_THAT(server_ret, IsOk()); |
| 1009 | 1014 |
| 1010 scoped_refptr<StringIOBuffer> write_buf = new StringIOBuffer("testing123"); | 1015 scoped_refptr<StringIOBuffer> write_buf = new StringIOBuffer("testing123"); |
| 1011 | 1016 |
| 1012 // The server closes the connection. The server needs to write some | 1017 // The server closes the connection. The server needs to write some |
| 1013 // data first so that the client's Read() calls from the transport | 1018 // data first so that the client's Read() calls from the transport |
| 1014 // socket won't return ERR_IO_PENDING. This ensures that the client | 1019 // socket won't return ERR_IO_PENDING. This ensures that the client |
| 1015 // will call Read() on the transport socket again. | 1020 // will call Read() on the transport socket again. |
| 1016 TestCompletionCallback write_callback; | 1021 TestCompletionCallback write_callback; |
| 1017 server_ret = server_socket_->Write(write_buf.get(), write_buf->size(), | 1022 server_ret = server_socket_->Write(write_buf.get(), write_buf->size(), |
| 1018 write_callback.callback()); | 1023 write_callback.callback()); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1046 | 1051 |
| 1047 TestCompletionCallback connect_callback; | 1052 TestCompletionCallback connect_callback; |
| 1048 int client_ret = client_socket_->Connect(connect_callback.callback()); | 1053 int client_ret = client_socket_->Connect(connect_callback.callback()); |
| 1049 ASSERT_TRUE(client_ret == OK || client_ret == ERR_IO_PENDING); | 1054 ASSERT_TRUE(client_ret == OK || client_ret == ERR_IO_PENDING); |
| 1050 | 1055 |
| 1051 TestCompletionCallback handshake_callback; | 1056 TestCompletionCallback handshake_callback; |
| 1052 int server_ret = server_socket_->Handshake(handshake_callback.callback()); | 1057 int server_ret = server_socket_->Handshake(handshake_callback.callback()); |
| 1053 ASSERT_TRUE(server_ret == OK || server_ret == ERR_IO_PENDING); | 1058 ASSERT_TRUE(server_ret == OK || server_ret == ERR_IO_PENDING); |
| 1054 | 1059 |
| 1055 if (client_ret == ERR_IO_PENDING) { | 1060 if (client_ret == ERR_IO_PENDING) { |
| 1056 ASSERT_EQ(OK, connect_callback.WaitForResult()); | 1061 ASSERT_THAT(connect_callback.WaitForResult(), IsOk()); |
| 1057 } | 1062 } |
| 1058 if (server_ret == ERR_IO_PENDING) { | 1063 if (server_ret == ERR_IO_PENDING) { |
| 1059 ASSERT_EQ(OK, handshake_callback.WaitForResult()); | 1064 ASSERT_THAT(handshake_callback.WaitForResult(), IsOk()); |
| 1060 } | 1065 } |
| 1061 | 1066 |
| 1062 const int kKeyingMaterialSize = 32; | 1067 const int kKeyingMaterialSize = 32; |
| 1063 const char kKeyingLabel[] = "EXPERIMENTAL-server-socket-test"; | 1068 const char kKeyingLabel[] = "EXPERIMENTAL-server-socket-test"; |
| 1064 const char kKeyingContext[] = ""; | 1069 const char kKeyingContext[] = ""; |
| 1065 unsigned char server_out[kKeyingMaterialSize]; | 1070 unsigned char server_out[kKeyingMaterialSize]; |
| 1066 int rv = server_socket_->ExportKeyingMaterial( | 1071 int rv = server_socket_->ExportKeyingMaterial( |
| 1067 kKeyingLabel, false, kKeyingContext, server_out, sizeof(server_out)); | 1072 kKeyingLabel, false, kKeyingContext, server_out, sizeof(server_out)); |
| 1068 ASSERT_EQ(OK, rv); | 1073 ASSERT_THAT(rv, IsOk()); |
| 1069 | 1074 |
| 1070 unsigned char client_out[kKeyingMaterialSize]; | 1075 unsigned char client_out[kKeyingMaterialSize]; |
| 1071 rv = client_socket_->ExportKeyingMaterial(kKeyingLabel, false, kKeyingContext, | 1076 rv = client_socket_->ExportKeyingMaterial(kKeyingLabel, false, kKeyingContext, |
| 1072 client_out, sizeof(client_out)); | 1077 client_out, sizeof(client_out)); |
| 1073 ASSERT_EQ(OK, rv); | 1078 ASSERT_THAT(rv, IsOk()); |
| 1074 EXPECT_EQ(0, memcmp(server_out, client_out, sizeof(server_out))); | 1079 EXPECT_EQ(0, memcmp(server_out, client_out, sizeof(server_out))); |
| 1075 | 1080 |
| 1076 const char kKeyingLabelBad[] = "EXPERIMENTAL-server-socket-test-bad"; | 1081 const char kKeyingLabelBad[] = "EXPERIMENTAL-server-socket-test-bad"; |
| 1077 unsigned char client_bad[kKeyingMaterialSize]; | 1082 unsigned char client_bad[kKeyingMaterialSize]; |
| 1078 rv = client_socket_->ExportKeyingMaterial( | 1083 rv = client_socket_->ExportKeyingMaterial( |
| 1079 kKeyingLabelBad, false, kKeyingContext, client_bad, sizeof(client_bad)); | 1084 kKeyingLabelBad, false, kKeyingContext, client_bad, sizeof(client_bad)); |
| 1080 ASSERT_EQ(rv, OK); | 1085 ASSERT_EQ(rv, OK); |
| 1081 EXPECT_NE(0, memcmp(server_out, client_bad, sizeof(server_out))); | 1086 EXPECT_NE(0, memcmp(server_out, client_bad, sizeof(server_out))); |
| 1082 } | 1087 } |
| 1083 | 1088 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1107 | 1112 |
| 1108 TestCompletionCallback connect_callback; | 1113 TestCompletionCallback connect_callback; |
| 1109 int client_ret = client_socket_->Connect(connect_callback.callback()); | 1114 int client_ret = client_socket_->Connect(connect_callback.callback()); |
| 1110 | 1115 |
| 1111 TestCompletionCallback handshake_callback; | 1116 TestCompletionCallback handshake_callback; |
| 1112 int server_ret = server_socket_->Handshake(handshake_callback.callback()); | 1117 int server_ret = server_socket_->Handshake(handshake_callback.callback()); |
| 1113 | 1118 |
| 1114 client_ret = connect_callback.GetResult(client_ret); | 1119 client_ret = connect_callback.GetResult(client_ret); |
| 1115 server_ret = handshake_callback.GetResult(server_ret); | 1120 server_ret = handshake_callback.GetResult(server_ret); |
| 1116 | 1121 |
| 1117 ASSERT_EQ(ERR_SSL_VERSION_OR_CIPHER_MISMATCH, client_ret); | 1122 ASSERT_THAT(client_ret, IsError(ERR_SSL_VERSION_OR_CIPHER_MISMATCH)); |
| 1118 ASSERT_EQ(ERR_SSL_VERSION_OR_CIPHER_MISMATCH, server_ret); | 1123 ASSERT_THAT(server_ret, IsError(ERR_SSL_VERSION_OR_CIPHER_MISMATCH)); |
| 1119 } | 1124 } |
| 1120 | 1125 |
| 1121 } // namespace net | 1126 } // namespace net |
| OLD | NEW |