| Index: net/quic/quic_network_transaction_unittest.cc
|
| diff --git a/net/quic/quic_network_transaction_unittest.cc b/net/quic/quic_network_transaction_unittest.cc
|
| index 4ae59afff1dbb62d543b22b75206c28eaf50d6eb..ed7d8819295865a06052aaa2cb84837cb1bcfa5e 100644
|
| --- a/net/quic/quic_network_transaction_unittest.cc
|
| +++ b/net/quic/quic_network_transaction_unittest.cc
|
| @@ -9,6 +9,7 @@
|
| #include "base/memory/scoped_ptr.h"
|
| #include "base/stl_util.h"
|
| #include "net/base/test_completion_callback.h"
|
| +#include "net/base/test_data_directory.h"
|
| #include "net/cert/mock_cert_verifier.h"
|
| #include "net/dns/mock_host_resolver.h"
|
| #include "net/http/http_auth_handler_factory.h"
|
| @@ -25,6 +26,7 @@
|
| #include "net/proxy/proxy_config_service_fixed.h"
|
| #include "net/proxy/proxy_resolver.h"
|
| #include "net/proxy/proxy_service.h"
|
| +#include "net/quic/crypto/proof_verifier_chromium.h"
|
| #include "net/quic/crypto/quic_decrypter.h"
|
| #include "net/quic/crypto/quic_encrypter.h"
|
| #include "net/quic/quic_framer.h"
|
| @@ -42,10 +44,12 @@
|
| #include "net/spdy/spdy_frame_builder.h"
|
| #include "net/spdy/spdy_framer.h"
|
| #include "net/ssl/ssl_config_service_defaults.h"
|
| +#include "net/test/cert_test_util.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "testing/platform_test.h"
|
|
|
| -//-----------------------------------------------------------------------------
|
| +namespace net {
|
| +namespace test {
|
|
|
| namespace {
|
|
|
| @@ -61,9 +65,6 @@ static const char kQuicAlternateProtocolHttpsHeader[] =
|
|
|
| } // namespace
|
|
|
| -namespace net {
|
| -namespace test {
|
| -
|
| // Helper class to encapsulate MockReads and MockWrites for QUIC.
|
| // Simplify ownership issues and the interaction with the MockSocketFactory.
|
| class MockQuicData {
|
| @@ -1200,5 +1201,60 @@ TEST_P(QuicNetworkTransactionTest, ConnectionCloseDuringConnect) {
|
| SendRequestAndExpectHttpResponse("hello world");
|
| }
|
|
|
| +// Test that a secure request over an insecure QUIC connection fails with
|
| +// the appropriate error code. Note that this never happens in production,
|
| +// because the handshake (which this test mocks) would fail in this scenario.
|
| +TEST_P(QuicNetworkTransactionTest, SecureResourceOverInsecureQuic) {
|
| + MockQuicData mock_quic_data;
|
| + mock_quic_data.AddWrite(
|
| + ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true,
|
| + GetRequestHeaders("GET", "https", "/")));
|
| + mock_quic_data.AddRead(ConstructResponseHeadersPacket(
|
| + 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
|
| + mock_quic_data.AddRead(
|
| + ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
|
| + mock_quic_data.AddWrite(ConstructAckPacket(2, 1));
|
| + mock_quic_data.AddRead(SYNCHRONOUS, 0);
|
| + mock_quic_data.AddSocketDataToFactory(&socket_factory_);
|
| +
|
| + request_.url = GURL("https://www.google.com:443");
|
| + AddHangingNonAlternateProtocolSocketData();
|
| + CreateSessionWithNextProtos();
|
| + AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE);
|
| + scoped_ptr<HttpNetworkTransaction> trans(
|
| + new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get()));
|
| + TestCompletionCallback callback;
|
| + int rv = trans->Start(&request_, callback.callback(), net_log_.bound());
|
| + EXPECT_EQ(ERR_REQUEST_FOR_SECURE_RESOURCE_OVER_INSECURE_QUIC,
|
| + callback.GetResult(rv));
|
| +}
|
| +
|
| +TEST_P(QuicNetworkTransactionTest, SecureResourceOverSecureQuic) {
|
| + MockQuicData mock_quic_data;
|
| + mock_quic_data.AddWrite(
|
| + ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true,
|
| + GetRequestHeaders("GET", "https", "/")));
|
| + mock_quic_data.AddRead(ConstructResponseHeadersPacket(
|
| + 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK")));
|
| + mock_quic_data.AddRead(
|
| + ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!"));
|
| + mock_quic_data.AddWrite(ConstructAckPacket(2, 1));
|
| + mock_quic_data.AddRead(SYNCHRONOUS, 0);
|
| + mock_quic_data.AddSocketDataToFactory(&socket_factory_);
|
| +
|
| + scoped_refptr<X509Certificate> cert(
|
| + ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"));
|
| + ASSERT_TRUE(cert.get());
|
| + ProofVerifyDetailsChromium verify_details;
|
| + verify_details.cert_verify_result.verified_cert = cert;
|
| + crypto_client_stream_factory_.set_proof_verify_details(&verify_details);
|
| +
|
| + request_.url = GURL("https://www.google.com:443");
|
| + AddHangingNonAlternateProtocolSocketData();
|
| + CreateSessionWithNextProtos();
|
| + AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE);
|
| + SendRequestAndExpectQuicResponse("hello!");
|
| +}
|
| +
|
| } // namespace test
|
| } // namespace net
|
|
|