Index: net/quic/quic_client_session_test.cc |
diff --git a/net/quic/quic_client_session_test.cc b/net/quic/quic_client_session_test.cc |
index ae1aea6e9a6712f4a74a473237d38d9782549ea4..1e13e89ae49920f850a9c7dd36ef582b227375a8 100644 |
--- a/net/quic/quic_client_session_test.cc |
+++ b/net/quic/quic_client_session_test.cc |
@@ -6,12 +6,14 @@ |
#include <vector> |
+#include "base/base64.h" |
#include "base/files/file_path.h" |
#include "base/rand_util.h" |
#include "net/base/capturing_net_log.h" |
#include "net/base/test_completion_callback.h" |
#include "net/base/test_data_directory.h" |
#include "net/cert/cert_verify_result.h" |
+#include "net/http/transport_security_state.h" |
#include "net/quic/crypto/aes_128_gcm_12_encrypter.h" |
#include "net/quic/crypto/crypto_protocol.h" |
#include "net/quic/crypto/proof_verifier_chromium.h" |
@@ -24,6 +26,7 @@ |
#include "net/quic/test_tools/quic_test_utils.h" |
#include "net/quic/test_tools/simple_quic_framer.h" |
#include "net/socket/socket_test_util.h" |
+#include "net/spdy/spdy_test_utils.h" |
#include "net/test/cert_test_util.h" |
#include "net/udp/datagram_client_socket.h" |
@@ -73,6 +76,7 @@ class QuicClientSessionTest : public ::testing::TestWithParam<QuicVersion> { |
connection_( |
new PacketSavingConnection(false, SupportedVersions(GetParam()))), |
session_(connection_, GetSocket().Pass(), writer_.Pass(), NULL, NULL, |
+ &transport_security_state_, |
make_scoped_ptr((QuicServerInfo*)NULL), |
QuicServerId(kServerHostname, kServerPort, false, |
PRIVACY_MODE_DISABLED), |
@@ -108,6 +112,7 @@ class QuicClientSessionTest : public ::testing::TestWithParam<QuicVersion> { |
CapturingNetLog net_log_; |
MockClientSocketFactory socket_factory_; |
StaticSocketDataProvider socket_data_; |
+ TransportSecurityState transport_security_state_; |
QuicClientSession session_; |
MockClock clock_; |
MockRandom random_; |
@@ -172,18 +177,15 @@ TEST_P(QuicClientSessionTest, GoAwayReceived) { |
EXPECT_EQ(NULL, session_.CreateOutgoingDataStream()); |
} |
-// TODO(rch): re-enable this. |
-TEST_P(QuicClientSessionTest, DISABLED_CanPool) { |
+TEST_P(QuicClientSessionTest, CanPool) { |
// Load a cert that is valid for: |
// www.example.org |
// mail.example.org |
// www.example.com |
- base::FilePath certs_dir = GetTestCertsDirectory(); |
- CertVerifyResult result; |
ProofVerifyDetailsChromium details; |
details.cert_verify_result.verified_cert = |
- ImportCertFromFile(certs_dir, "spdy_pooling.pem"); |
+ ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); |
ASSERT_TRUE(details.cert_verify_result.verified_cert); |
session_.OnProofVerifyDetailsAvailable(details); |
@@ -196,18 +198,15 @@ TEST_P(QuicClientSessionTest, DISABLED_CanPool) { |
EXPECT_FALSE(session_.CanPool("mail.google.com")); |
} |
-// TODO(rch): re-enable this. |
-TEST_P(QuicClientSessionTest, DISABLED_ConnectionPooledWithTlsChannelId) { |
+TEST_P(QuicClientSessionTest, ConnectionPooledWithTlsChannelId) { |
// Load a cert that is valid for: |
// www.example.org |
// mail.example.org |
// www.example.com |
- base::FilePath certs_dir = GetTestCertsDirectory(); |
- CertVerifyResult result; |
ProofVerifyDetailsChromium details; |
details.cert_verify_result.verified_cert = |
- ImportCertFromFile(certs_dir, "spdy_pooling.pem"); |
+ ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); |
ASSERT_TRUE(details.cert_verify_result.verified_cert); |
session_.OnProofVerifyDetailsAvailable(details); |
@@ -220,6 +219,51 @@ TEST_P(QuicClientSessionTest, DISABLED_ConnectionPooledWithTlsChannelId) { |
EXPECT_FALSE(session_.CanPool("mail.google.com")); |
} |
+TEST_P(QuicClientSessionTest, ConnectionNotPooledWithDifferentPin) { |
+ uint8 primary_pin = 1; |
+ uint8 backup_pin = 2; |
+ uint8 bad_pin = 3; |
+ AddPin(&transport_security_state_, "mail.example.org", primary_pin, |
+ backup_pin); |
+ |
+ ProofVerifyDetailsChromium details; |
+ details.cert_verify_result.verified_cert = |
+ ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); |
+ details.cert_verify_result.is_issued_by_known_root = true; |
+ details.cert_verify_result.public_key_hashes.push_back( |
+ GetTestHashValue(bad_pin)); |
+ |
+ ASSERT_TRUE(details.cert_verify_result.verified_cert); |
+ |
+ session_.OnProofVerifyDetailsAvailable(details); |
+ CompleteCryptoHandshake(); |
+ QuicClientSessionPeer::SetChannelIDSent(&session_, true); |
+ |
+ EXPECT_FALSE(session_.CanPool("mail.example.org")); |
+} |
+ |
+TEST_P(QuicClientSessionTest, ConnectionPooledWithMatchingPin) { |
+ uint8 primary_pin = 1; |
+ uint8 backup_pin = 2; |
+ AddPin(&transport_security_state_, "mail.example.org", primary_pin, |
+ backup_pin); |
+ |
+ ProofVerifyDetailsChromium details; |
+ details.cert_verify_result.verified_cert = |
+ ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); |
+ details.cert_verify_result.is_issued_by_known_root = true; |
+ details.cert_verify_result.public_key_hashes.push_back( |
+ GetTestHashValue(primary_pin)); |
+ |
+ ASSERT_TRUE(details.cert_verify_result.verified_cert); |
+ |
+ session_.OnProofVerifyDetailsAvailable(details); |
+ CompleteCryptoHandshake(); |
+ QuicClientSessionPeer::SetChannelIDSent(&session_, true); |
+ |
+ EXPECT_TRUE(session_.CanPool("mail.example.org")); |
+} |
+ |
} // namespace |
} // namespace test |
} // namespace net |