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 |