| 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 #include "net/quic/quic_stream_factory.h" | 5 #include "net/quic/quic_stream_factory.h" |
| 6 | 6 |
| 7 #include "base/run_loop.h" | 7 #include "base/run_loop.h" |
| 8 #include "base/strings/string_util.h" | 8 #include "base/strings/string_util.h" |
| 9 #include "net/base/test_data_directory.h" | 9 #include "net/base/test_data_directory.h" |
| 10 #include "net/cert/cert_verifier.h" | 10 #include "net/cert/cert_verifier.h" |
| (...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 298 return port; | 298 return port; |
| 299 } | 299 } |
| 300 | 300 |
| 301 scoped_ptr<QuicEncryptedPacket> ConstructRstPacket() { | 301 scoped_ptr<QuicEncryptedPacket> ConstructRstPacket() { |
| 302 QuicStreamId stream_id = kClientDataStreamId1; | 302 QuicStreamId stream_id = kClientDataStreamId1; |
| 303 return maker_.MakeRstPacket( | 303 return maker_.MakeRstPacket( |
| 304 1, true, stream_id, | 304 1, true, stream_id, |
| 305 AdjustErrorForVersion(QUIC_RST_ACKNOWLEDGEMENT, GetParam().version)); | 305 AdjustErrorForVersion(QUIC_RST_ACKNOWLEDGEMENT, GetParam().version)); |
| 306 } | 306 } |
| 307 | 307 |
| 308 static ProofVerifyDetailsChromium DefaultProofVerifyDetails() { |
| 309 // Load a certificate that is valid for www.example.org, mail.example.org, |
| 310 // and mail.example.com. |
| 311 scoped_refptr<X509Certificate> test_cert( |
| 312 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem")); |
| 313 EXPECT_TRUE(test_cert.get()); |
| 314 ProofVerifyDetailsChromium verify_details; |
| 315 verify_details.cert_verify_result.verified_cert = test_cert; |
| 316 verify_details.cert_verify_result.is_issued_by_known_root = true; |
| 317 return verify_details; |
| 318 } |
| 319 |
| 308 MockQuicServerInfoFactory quic_server_info_factory_; | 320 MockQuicServerInfoFactory quic_server_info_factory_; |
| 309 MockHostResolver host_resolver_; | 321 MockHostResolver host_resolver_; |
| 310 DeterministicMockClientSocketFactory socket_factory_; | 322 DeterministicMockClientSocketFactory socket_factory_; |
| 311 MockCryptoClientStreamFactory crypto_client_stream_factory_; | 323 MockCryptoClientStreamFactory crypto_client_stream_factory_; |
| 312 MockRandom random_generator_; | 324 MockRandom random_generator_; |
| 313 MockClock* clock_; // Owned by factory_. | 325 MockClock* clock_; // Owned by factory_. |
| 314 scoped_refptr<TestTaskRunner> runner_; | 326 scoped_refptr<TestTaskRunner> runner_; |
| 315 QuicTestPacketMaker maker_; | 327 QuicTestPacketMaker maker_; |
| 316 scoped_ptr<CertVerifier> cert_verifier_; | 328 scoped_ptr<CertVerifier> cert_verifier_; |
| 317 scoped_ptr<ChannelIDService> channel_id_service_; | 329 scoped_ptr<ChannelIDService> channel_id_service_; |
| (...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 645 MockRead reads[] = { | 657 MockRead reads[] = { |
| 646 MockRead(ASYNC, OK, 0) // EOF | 658 MockRead(ASYNC, OK, 0) // EOF |
| 647 }; | 659 }; |
| 648 DeterministicSocketData socket_data(reads, arraysize(reads), nullptr, 0); | 660 DeterministicSocketData socket_data(reads, arraysize(reads), nullptr, 0); |
| 649 socket_factory_.AddSocketDataProvider(&socket_data); | 661 socket_factory_.AddSocketDataProvider(&socket_data); |
| 650 socket_data.StopAfter(1); | 662 socket_data.StopAfter(1); |
| 651 | 663 |
| 652 HostPortPair server1("www.example.org", 443); | 664 HostPortPair server1("www.example.org", 443); |
| 653 HostPortPair server2("mail.example.org", 443); | 665 HostPortPair server2("mail.example.org", 443); |
| 654 | 666 |
| 655 // Load a cert that is valid for: | 667 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); |
| 656 // www.example.org (server1) | |
| 657 // mail.example.org (server2) | |
| 658 // www.example.com | |
| 659 base::FilePath certs_dir = GetTestCertsDirectory(); | |
| 660 scoped_refptr<X509Certificate> test_cert( | |
| 661 ImportCertFromFile(certs_dir, "spdy_pooling.pem")); | |
| 662 ASSERT_NE(static_cast<X509Certificate*>(nullptr), test_cert.get()); | |
| 663 ProofVerifyDetailsChromium verify_details; | |
| 664 verify_details.cert_verify_result.verified_cert = test_cert; | |
| 665 verify_details.cert_verify_result.is_issued_by_known_root = true; | |
| 666 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | 668 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
| 667 | 669 |
| 668 host_resolver_.set_synchronous_mode(true); | 670 host_resolver_.set_synchronous_mode(true); |
| 669 host_resolver_.rules()->AddIPLiteralRule(server1.host(), "192.168.0.1", ""); | 671 host_resolver_.rules()->AddIPLiteralRule(server1.host(), "192.168.0.1", ""); |
| 670 host_resolver_.rules()->AddIPLiteralRule(server2.host(), "192.168.0.1", ""); | 672 host_resolver_.rules()->AddIPLiteralRule(server2.host(), "192.168.0.1", ""); |
| 671 | 673 |
| 672 QuicStreamRequest request(&factory_); | 674 QuicStreamRequest request(&factory_); |
| 673 is_https_ = true; | 675 is_https_ = true; |
| 674 EXPECT_EQ(OK, | 676 EXPECT_EQ(OK, |
| 675 request.Request(server1, is_https_, privacy_mode_, server1.host(), | 677 request.Request(server1, is_https_, privacy_mode_, server1.host(), |
| (...skipping 25 matching lines...) Expand all Loading... |
| 701 DeterministicSocketData socket_data1(reads, arraysize(reads), nullptr, 0); | 703 DeterministicSocketData socket_data1(reads, arraysize(reads), nullptr, 0); |
| 702 DeterministicSocketData socket_data2(reads, arraysize(reads), nullptr, 0); | 704 DeterministicSocketData socket_data2(reads, arraysize(reads), nullptr, 0); |
| 703 socket_factory_.AddSocketDataProvider(&socket_data1); | 705 socket_factory_.AddSocketDataProvider(&socket_data1); |
| 704 socket_factory_.AddSocketDataProvider(&socket_data2); | 706 socket_factory_.AddSocketDataProvider(&socket_data2); |
| 705 socket_data1.StopAfter(1); | 707 socket_data1.StopAfter(1); |
| 706 socket_data2.StopAfter(1); | 708 socket_data2.StopAfter(1); |
| 707 | 709 |
| 708 HostPortPair server1("www.example.org", 443); | 710 HostPortPair server1("www.example.org", 443); |
| 709 HostPortPair server2("mail.example.org", 443); | 711 HostPortPair server2("mail.example.org", 443); |
| 710 | 712 |
| 711 // Load a cert that is valid for: | 713 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); |
| 712 // www.example.org (server1) | |
| 713 // mail.example.org (server2) | |
| 714 // www.example.com | |
| 715 base::FilePath certs_dir = GetTestCertsDirectory(); | |
| 716 scoped_refptr<X509Certificate> test_cert( | |
| 717 ImportCertFromFile(certs_dir, "spdy_pooling.pem")); | |
| 718 ASSERT_NE(static_cast<X509Certificate*>(nullptr), test_cert.get()); | |
| 719 ProofVerifyDetailsChromium verify_details; | |
| 720 verify_details.cert_verify_result.verified_cert = test_cert; | |
| 721 verify_details.cert_verify_result.is_issued_by_known_root = true; | |
| 722 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | 714 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
| 723 | 715 |
| 724 host_resolver_.set_synchronous_mode(true); | 716 host_resolver_.set_synchronous_mode(true); |
| 725 host_resolver_.rules()->AddIPLiteralRule(server1.host(), "192.168.0.1", ""); | 717 host_resolver_.rules()->AddIPLiteralRule(server1.host(), "192.168.0.1", ""); |
| 726 host_resolver_.rules()->AddIPLiteralRule(server2.host(), "192.168.0.1", ""); | 718 host_resolver_.rules()->AddIPLiteralRule(server2.host(), "192.168.0.1", ""); |
| 727 | 719 |
| 728 // Disable connection pooling. | 720 // Disable connection pooling. |
| 729 QuicStreamFactoryPeer::DisableConnectionPooling(&factory_); | 721 QuicStreamFactoryPeer::DisableConnectionPooling(&factory_); |
| 730 | 722 |
| 731 QuicStreamRequest request(&factory_); | 723 QuicStreamRequest request(&factory_); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 762 DeterministicSocketData socket_data1(reads, arraysize(reads), nullptr, 0); | 754 DeterministicSocketData socket_data1(reads, arraysize(reads), nullptr, 0); |
| 763 DeterministicSocketData socket_data2(reads, arraysize(reads), nullptr, 0); | 755 DeterministicSocketData socket_data2(reads, arraysize(reads), nullptr, 0); |
| 764 socket_factory_.AddSocketDataProvider(&socket_data1); | 756 socket_factory_.AddSocketDataProvider(&socket_data1); |
| 765 socket_factory_.AddSocketDataProvider(&socket_data2); | 757 socket_factory_.AddSocketDataProvider(&socket_data2); |
| 766 socket_data1.StopAfter(1); | 758 socket_data1.StopAfter(1); |
| 767 socket_data2.StopAfter(1); | 759 socket_data2.StopAfter(1); |
| 768 | 760 |
| 769 HostPortPair server1("www.example.org", 443); | 761 HostPortPair server1("www.example.org", 443); |
| 770 HostPortPair server2("mail.google.com", 443); | 762 HostPortPair server2("mail.google.com", 443); |
| 771 | 763 |
| 772 // Load a cert that is valid for: | 764 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); |
| 773 // www.example.org (server1) | |
| 774 // mail.example.org | |
| 775 // www.example.com | |
| 776 // But is not valid for mail.google.com (server2). | |
| 777 base::FilePath certs_dir = GetTestCertsDirectory(); | |
| 778 scoped_refptr<X509Certificate> test_cert( | |
| 779 ImportCertFromFile(certs_dir, "spdy_pooling.pem")); | |
| 780 ASSERT_NE(static_cast<X509Certificate*>(nullptr), test_cert.get()); | |
| 781 ProofVerifyDetailsChromium verify_details; | |
| 782 verify_details.cert_verify_result.verified_cert = test_cert; | |
| 783 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | 765 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
| 784 | 766 |
| 785 host_resolver_.set_synchronous_mode(true); | 767 host_resolver_.set_synchronous_mode(true); |
| 786 host_resolver_.rules()->AddIPLiteralRule(server1.host(), "192.168.0.1", ""); | 768 host_resolver_.rules()->AddIPLiteralRule(server1.host(), "192.168.0.1", ""); |
| 787 host_resolver_.rules()->AddIPLiteralRule(server2.host(), "192.168.0.1", ""); | 769 host_resolver_.rules()->AddIPLiteralRule(server2.host(), "192.168.0.1", ""); |
| 788 | 770 |
| 789 QuicStreamRequest request(&factory_); | 771 QuicStreamRequest request(&factory_); |
| 790 is_https_ = true; | 772 is_https_ = true; |
| 791 EXPECT_EQ(OK, | 773 EXPECT_EQ(OK, |
| 792 request.Request(server1, is_https_, privacy_mode_, server1.host(), | 774 request.Request(server1, is_https_, privacy_mode_, server1.host(), |
| (...skipping 28 matching lines...) Expand all Loading... |
| 821 socket_factory_.AddSocketDataProvider(&socket_data); | 803 socket_factory_.AddSocketDataProvider(&socket_data); |
| 822 socket_data.StopAfter(1); | 804 socket_data.StopAfter(1); |
| 823 | 805 |
| 824 HostPortPair server1("www.example.org", 443); | 806 HostPortPair server1("www.example.org", 443); |
| 825 HostPortPair server2("mail.example.org", 443); | 807 HostPortPair server2("mail.example.org", 443); |
| 826 uint8 primary_pin = 1; | 808 uint8 primary_pin = 1; |
| 827 uint8 backup_pin = 2; | 809 uint8 backup_pin = 2; |
| 828 test::AddPin(&transport_security_state_, "mail.example.org", primary_pin, | 810 test::AddPin(&transport_security_state_, "mail.example.org", primary_pin, |
| 829 backup_pin); | 811 backup_pin); |
| 830 | 812 |
| 831 // Load a cert that is valid for: | 813 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); |
| 832 // www.example.org (server1) | |
| 833 // mail.example.org (server2) | |
| 834 base::FilePath certs_dir = GetTestCertsDirectory(); | |
| 835 scoped_refptr<X509Certificate> test_cert( | |
| 836 ImportCertFromFile(certs_dir, "spdy_pooling.pem")); | |
| 837 ASSERT_NE(static_cast<X509Certificate*>(nullptr), test_cert.get()); | |
| 838 ProofVerifyDetailsChromium verify_details; | |
| 839 verify_details.cert_verify_result.verified_cert = test_cert; | |
| 840 verify_details.cert_verify_result.is_issued_by_known_root = true; | |
| 841 verify_details.cert_verify_result.public_key_hashes.push_back( | 814 verify_details.cert_verify_result.public_key_hashes.push_back( |
| 842 test::GetTestHashValue(primary_pin)); | 815 test::GetTestHashValue(primary_pin)); |
| 843 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | 816 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
| 844 | 817 |
| 845 host_resolver_.set_synchronous_mode(true); | 818 host_resolver_.set_synchronous_mode(true); |
| 846 host_resolver_.rules()->AddIPLiteralRule(server1.host(), "192.168.0.1", ""); | 819 host_resolver_.rules()->AddIPLiteralRule(server1.host(), "192.168.0.1", ""); |
| 847 host_resolver_.rules()->AddIPLiteralRule(server2.host(), "192.168.0.1", ""); | 820 host_resolver_.rules()->AddIPLiteralRule(server2.host(), "192.168.0.1", ""); |
| 848 | 821 |
| 849 QuicStreamRequest request(&factory_); | 822 QuicStreamRequest request(&factory_); |
| 850 is_https_ = true; | 823 is_https_ = true; |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 882 socket_data1.StopAfter(1); | 855 socket_data1.StopAfter(1); |
| 883 socket_data2.StopAfter(1); | 856 socket_data2.StopAfter(1); |
| 884 | 857 |
| 885 HostPortPair server1("www.example.org", 443); | 858 HostPortPair server1("www.example.org", 443); |
| 886 HostPortPair server2("mail.example.org", 443); | 859 HostPortPair server2("mail.example.org", 443); |
| 887 uint8 primary_pin = 1; | 860 uint8 primary_pin = 1; |
| 888 uint8 backup_pin = 2; | 861 uint8 backup_pin = 2; |
| 889 test::AddPin(&transport_security_state_, "mail.example.org", primary_pin, | 862 test::AddPin(&transport_security_state_, "mail.example.org", primary_pin, |
| 890 backup_pin); | 863 backup_pin); |
| 891 | 864 |
| 892 // Load a cert that is valid for: | 865 ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); |
| 893 // www.example.org (server1) | |
| 894 // mail.example.org (server2) | |
| 895 base::FilePath certs_dir = GetTestCertsDirectory(); | |
| 896 scoped_refptr<X509Certificate> test_cert( | |
| 897 ImportCertFromFile(certs_dir, "spdy_pooling.pem")); | |
| 898 ASSERT_NE(static_cast<X509Certificate*>(nullptr), test_cert.get()); | |
| 899 ProofVerifyDetailsChromium verify_details; | |
| 900 verify_details.cert_verify_result.verified_cert = test_cert; | |
| 901 verify_details.cert_verify_result.is_issued_by_known_root = true; | |
| 902 verify_details.cert_verify_result.public_key_hashes.push_back( | 866 verify_details.cert_verify_result.public_key_hashes.push_back( |
| 903 test::GetTestHashValue(primary_pin)); | 867 test::GetTestHashValue(primary_pin)); |
| 904 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); | 868 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); |
| 905 | 869 |
| 906 host_resolver_.set_synchronous_mode(true); | 870 host_resolver_.set_synchronous_mode(true); |
| 907 host_resolver_.rules()->AddIPLiteralRule(server1.host(), "192.168.0.1", ""); | 871 host_resolver_.rules()->AddIPLiteralRule(server1.host(), "192.168.0.1", ""); |
| 908 host_resolver_.rules()->AddIPLiteralRule(server2.host(), "192.168.0.1", ""); | 872 host_resolver_.rules()->AddIPLiteralRule(server2.host(), "192.168.0.1", ""); |
| 909 | 873 |
| 910 // Disable connection pooling. | 874 // Disable connection pooling. |
| 911 QuicStreamFactoryPeer::DisableConnectionPooling(&factory_); | 875 QuicStreamFactoryPeer::DisableConnectionPooling(&factory_); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 949 socket_data2.StopAfter(1); | 913 socket_data2.StopAfter(1); |
| 950 | 914 |
| 951 HostPortPair server1("www.example.org", 443); | 915 HostPortPair server1("www.example.org", 443); |
| 952 HostPortPair server2("mail.example.org", 443); | 916 HostPortPair server2("mail.example.org", 443); |
| 953 uint8 primary_pin = 1; | 917 uint8 primary_pin = 1; |
| 954 uint8 backup_pin = 2; | 918 uint8 backup_pin = 2; |
| 955 uint8 bad_pin = 3; | 919 uint8 bad_pin = 3; |
| 956 test::AddPin(&transport_security_state_, "mail.example.org", primary_pin, | 920 test::AddPin(&transport_security_state_, "mail.example.org", primary_pin, |
| 957 backup_pin); | 921 backup_pin); |
| 958 | 922 |
| 959 // Load a cert that is valid for: | 923 ProofVerifyDetailsChromium verify_details1 = DefaultProofVerifyDetails(); |
| 960 // www.example.org (server1) | |
| 961 // mail.example.org (server2) | |
| 962 base::FilePath certs_dir = GetTestCertsDirectory(); | |
| 963 scoped_refptr<X509Certificate> test_cert( | |
| 964 ImportCertFromFile(certs_dir, "spdy_pooling.pem")); | |
| 965 ASSERT_NE(static_cast<X509Certificate*>(nullptr), test_cert.get()); | |
| 966 | |
| 967 ProofVerifyDetailsChromium verify_details1; | |
| 968 verify_details1.cert_verify_result.verified_cert = test_cert; | |
| 969 verify_details1.cert_verify_result.is_issued_by_known_root = true; | |
| 970 verify_details1.cert_verify_result.public_key_hashes.push_back( | 924 verify_details1.cert_verify_result.public_key_hashes.push_back( |
| 971 test::GetTestHashValue(bad_pin)); | 925 test::GetTestHashValue(bad_pin)); |
| 972 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details1); | 926 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details1); |
| 973 | 927 |
| 974 ProofVerifyDetailsChromium verify_details2; | 928 ProofVerifyDetailsChromium verify_details2 = DefaultProofVerifyDetails(); |
| 975 verify_details2.cert_verify_result.verified_cert = test_cert; | |
| 976 verify_details2.cert_verify_result.is_issued_by_known_root = true; | |
| 977 verify_details2.cert_verify_result.public_key_hashes.push_back( | 929 verify_details2.cert_verify_result.public_key_hashes.push_back( |
| 978 test::GetTestHashValue(primary_pin)); | 930 test::GetTestHashValue(primary_pin)); |
| 979 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details2); | 931 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details2); |
| 980 | 932 |
| 981 host_resolver_.set_synchronous_mode(true); | 933 host_resolver_.set_synchronous_mode(true); |
| 982 host_resolver_.rules()->AddIPLiteralRule(server1.host(), "192.168.0.1", ""); | 934 host_resolver_.rules()->AddIPLiteralRule(server1.host(), "192.168.0.1", ""); |
| 983 host_resolver_.rules()->AddIPLiteralRule(server2.host(), "192.168.0.1", ""); | 935 host_resolver_.rules()->AddIPLiteralRule(server2.host(), "192.168.0.1", ""); |
| 984 | 936 |
| 985 QuicStreamRequest request(&factory_); | 937 QuicStreamRequest request(&factory_); |
| 986 is_https_ = true; | 938 is_https_ = true; |
| (...skipping 740 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1727 EXPECT_TRUE(socket_data.AllReadDataConsumed()); | 1679 EXPECT_TRUE(socket_data.AllReadDataConsumed()); |
| 1728 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); | 1680 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); |
| 1729 EXPECT_TRUE(socket_data2.AllReadDataConsumed()); | 1681 EXPECT_TRUE(socket_data2.AllReadDataConsumed()); |
| 1730 EXPECT_TRUE(socket_data2.AllWriteDataConsumed()); | 1682 EXPECT_TRUE(socket_data2.AllWriteDataConsumed()); |
| 1731 EXPECT_TRUE(socket_data3.AllReadDataConsumed()); | 1683 EXPECT_TRUE(socket_data3.AllReadDataConsumed()); |
| 1732 EXPECT_TRUE(socket_data3.AllWriteDataConsumed()); | 1684 EXPECT_TRUE(socket_data3.AllWriteDataConsumed()); |
| 1733 } | 1685 } |
| 1734 | 1686 |
| 1735 } // namespace test | 1687 } // namespace test |
| 1736 } // namespace net | 1688 } // namespace net |
| OLD | NEW |