Index: net/quic/chromium/quic_network_transaction_unittest.cc |
diff --git a/net/quic/chromium/quic_network_transaction_unittest.cc b/net/quic/chromium/quic_network_transaction_unittest.cc |
index 027b5ba61753755484dfa3621b139d7c41f503b2..ce5ead7dbda94d09fa9cb95e9d5fd395bc993614 100644 |
--- a/net/quic/chromium/quic_network_transaction_unittest.cc |
+++ b/net/quic/chromium/quic_network_transaction_unittest.cc |
@@ -58,6 +58,9 @@ |
#include "net/test/cert_test_util.h" |
#include "net/test/gtest_util.h" |
#include "net/test/test_data_directory.h" |
+#include "net/url_request/url_request.h" |
+#include "net/url_request/url_request_job_factory_impl.h" |
+#include "net/url_request/url_request_test_util.h" |
#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include "testing/platform_test.h" |
@@ -2479,8 +2482,8 @@ TEST_P(QuicNetworkTransactionTest, QuicServerPush) { |
mock_quic_data.AddWrite(ConstructClientAckPacket(3, 4, 3, 1)); |
mock_quic_data.AddRead(ConstructServerDataPacket( |
5, kServerDataStreamId1, false, true, 0, "and hello!")); |
- mock_quic_data.AddWrite( |
- ConstructClientAckAndRstPacket(4, 4, QUIC_RST_ACKNOWLEDGEMENT, 5, 5, 1)); |
+ mock_quic_data.AddWrite(ConstructClientAckAndRstPacket( |
+ 4, kServerDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT, 5, 5, 1)); |
allada
2016/08/31 23:21:39
I was using this area as a sample and realized it
|
mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
mock_quic_data.AddRead(ASYNC, 0); // EOF |
mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
@@ -2559,6 +2562,149 @@ TEST_P(QuicNetworkTransactionTest, QuicForceHolBlocking) { |
SendRequestAndExpectQuicResponse("hello!"); |
} |
+class QuicURLRequestContext : public URLRequestContext { |
+ public: |
+ QuicURLRequestContext(std::unique_ptr<HttpNetworkSession> session, |
+ MockClientSocketFactory* socket_factory) |
+ : storage_(this) { |
+ socket_factory_ = socket_factory; |
+ storage_.set_host_resolver( |
+ std::unique_ptr<HostResolver>(new MockHostResolver)); |
+ storage_.set_cert_verifier(base::WrapUnique(new MockCertVerifier)); |
+ storage_.set_transport_security_state( |
+ base::WrapUnique(new TransportSecurityState)); |
+ storage_.set_proxy_service(ProxyService::CreateDirect()); |
+ storage_.set_ssl_config_service(new SSLConfigServiceDefaults); |
+ storage_.set_http_auth_handler_factory( |
+ HttpAuthHandlerFactory::CreateDefault(host_resolver())); |
+ storage_.set_http_server_properties( |
+ std::unique_ptr<HttpServerProperties>(new HttpServerPropertiesImpl())); |
+ storage_.set_job_factory(base::WrapUnique(new URLRequestJobFactoryImpl())); |
+ storage_.set_http_network_session(std::move(session)); |
+ storage_.set_http_transaction_factory(base::WrapUnique( |
+ new HttpCache(storage_.http_network_session(), |
+ HttpCache::DefaultBackend::InMemory(0), false))); |
+ } |
+ |
+ ~QuicURLRequestContext() override { AssertNoURLRequests(); } |
+ |
+ MockClientSocketFactory& socket_factory() { return *socket_factory_; } |
+ |
+ private: |
+ MockClientSocketFactory* socket_factory_; |
+ URLRequestContextStorage storage_; |
+}; |
+ |
+TEST_P(QuicNetworkTransactionTest, TestRawHeaderSizeSuccessfullRequest) { |
Ryan Hamilton
2016/09/06 19:54:51
nit: Fwiw, our tests typically don't start with "T
allada
2016/09/07 06:01:11
Done.
|
+ params_.origins_to_force_quic_on.insert( |
+ HostPortPair::FromString("mail.example.org:443")); |
+ |
+ MockQuicData mock_quic_data; |
+ SpdyHeaderBlock headers(GetRequestHeaders("GET", "https", "/")); |
+ headers["user-agent"] = ""; |
+ headers["accept-encoding"] = "gzip, deflate"; |
+ mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
+ 1, kClientDataStreamId1, true, true, std::move(headers))); |
+ |
+ mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
+ 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); |
+ |
+ mock_quic_data.AddRead(ConstructServerDataPacket( |
+ 2, kClientDataStreamId1, false, true, 0, "Main Resource Data")); |
+ mock_quic_data.AddWrite(ConstructClientAckPacket(2, 1)); |
+ |
+ mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
+ mock_quic_data.AddRead(ASYNC, 0); // EOF |
+ |
+ CreateSession(); |
+ |
+ TestDelegate d; |
+ QuicURLRequestContext quic_url_request_context(std::move(session_), |
+ &socket_factory_); |
+ |
+ mock_quic_data.AddSocketDataToFactory( |
+ &quic_url_request_context.socket_factory()); |
+ TestNetworkDelegate network_delegate_; |
+ quic_url_request_context.set_network_delegate(&network_delegate_); |
+ |
+ std::unique_ptr<URLRequest> r(quic_url_request_context.CreateRequest( |
Ryan Hamilton
2016/09/06 19:54:51
nit: instead of "r" how 'about "request"?
allada
2016/09/07 06:01:11
Done.
|
+ GURL("https://mail.example.org/"), DEFAULT_PRIORITY, &d)); |
+ quic_url_request_context.socket_factory().AddSSLSocketDataProvider( |
+ &ssl_data_); |
+ |
+ r->Start(); |
+ base::RunLoop().Run(); |
+ |
+ EXPECT_EQ(33, r->GetTotalSentBytes()); |
+ EXPECT_EQ(33, network_delegate_.total_network_bytes_sent()); |
+ EXPECT_EQ(49, r->GetTotalReceivedBytes()); |
+ EXPECT_EQ(31, r->raw_header_size()); |
Ryan Hamilton
2016/09/06 19:54:51
Where do these magic numbers come from? Can we com
allada
2016/09/07 06:01:11
Done.
|
+} |
+ |
+TEST_P(QuicNetworkTransactionTest, |
+ TestRawHeaderSizeSuccessfullPushHeadersFirst) { |
+ params_.origins_to_force_quic_on.insert( |
+ HostPortPair::FromString("mail.example.org:443")); |
+ |
+ MockQuicData mock_quic_data; |
+ SpdyHeaderBlock headers(GetRequestHeaders("GET", "https", "/")); |
+ headers["user-agent"] = ""; |
+ headers["accept-encoding"] = "gzip, deflate"; |
+ mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
+ 1, kClientDataStreamId1, true, true, std::move(headers))); |
+ |
+ QuicStreamOffset server_header_offset = 0; |
+ mock_quic_data.AddRead(ConstructServerPushPromisePacket( |
+ 1, kClientDataStreamId1, kServerDataStreamId1, false, |
+ GetRequestHeaders("GET", "https", "/pushed.jpg"), &server_header_offset, |
+ &server_maker_)); |
+ |
+ mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
+ 2, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"), |
+ &server_header_offset)); |
+ mock_quic_data.AddWrite(ConstructClientAckPacket(2, 2, 1, 1)); |
+ |
+ mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
+ 3, kServerDataStreamId1, false, false, GetResponseHeaders("200 OK"), |
+ &server_header_offset)); |
+ mock_quic_data.AddRead(ConstructServerDataPacket( |
+ 4, kServerDataStreamId1, false, true, 0, "Pushed Resource Data")); |
+ |
+ mock_quic_data.AddWrite(ConstructClientAckPacket(3, 4, 3, 1)); |
+ mock_quic_data.AddRead(ConstructServerDataPacket( |
+ 5, kClientDataStreamId1, false, true, 0, "Main Resource Data")); |
+ |
+ mock_quic_data.AddWrite(ConstructClientAckAndRstPacket( |
+ 4, kServerDataStreamId1, QUIC_RST_ACKNOWLEDGEMENT, 5, 5, 1)); |
+ |
+ mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
+ mock_quic_data.AddRead(ASYNC, 0); // EOF |
+ |
+ CreateSession(); |
+ |
+ TestDelegate d; |
+ QuicURLRequestContext quic_url_request_context(std::move(session_), |
+ &socket_factory_); |
+ |
+ mock_quic_data.AddSocketDataToFactory( |
+ &quic_url_request_context.socket_factory()); |
+ TestNetworkDelegate network_delegate_; |
+ quic_url_request_context.set_network_delegate(&network_delegate_); |
+ |
+ std::unique_ptr<URLRequest> r(quic_url_request_context.CreateRequest( |
Ryan Hamilton
2016/09/06 19:54:51
ditto about "r"
allada
2016/09/07 06:01:12
Done.
|
+ GURL("https://mail.example.org/"), DEFAULT_PRIORITY, &d)); |
+ quic_url_request_context.socket_factory().AddSSLSocketDataProvider( |
+ &ssl_data_); |
+ |
+ r->Start(); |
+ base::RunLoop().Run(); |
+ |
+ EXPECT_EQ(33, r->GetTotalSentBytes()); |
+ EXPECT_EQ(33, network_delegate_.total_network_bytes_sent()); |
+ EXPECT_EQ(49, r->GetTotalReceivedBytes()); |
+ EXPECT_EQ(31, r->raw_header_size()); |
+} |
+ |
class QuicNetworkTransactionWithDestinationTest |
: public PlatformTest, |
public ::testing::WithParamInterface<PoolingTestParams> { |