| 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 <stddef.h> |     5 #include <stddef.h> | 
|     6 #include <sys/epoll.h> |     6 #include <sys/epoll.h> | 
|     7  |     7  | 
|     8 #include <cstdint> |     8 #include <cstdint> | 
|     9 #include <list> |     9 #include <list> | 
|    10 #include <memory> |    10 #include <memory> | 
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|    47 #include "net/tools/quic/quic_in_memory_cache.h" |    47 #include "net/tools/quic/quic_in_memory_cache.h" | 
|    48 #include "net/tools/quic/quic_packet_writer_wrapper.h" |    48 #include "net/tools/quic/quic_packet_writer_wrapper.h" | 
|    49 #include "net/tools/quic/quic_server.h" |    49 #include "net/tools/quic/quic_server.h" | 
|    50 #include "net/tools/quic/quic_simple_server_stream.h" |    50 #include "net/tools/quic/quic_simple_server_stream.h" | 
|    51 #include "net/tools/quic/quic_socket_utils.h" |    51 #include "net/tools/quic/quic_socket_utils.h" | 
|    52 #include "net/tools/quic/quic_spdy_client_stream.h" |    52 #include "net/tools/quic/quic_spdy_client_stream.h" | 
|    53 #include "net/tools/quic/test_tools/packet_dropping_test_writer.h" |    53 #include "net/tools/quic/test_tools/packet_dropping_test_writer.h" | 
|    54 #include "net/tools/quic/test_tools/packet_reordering_writer.h" |    54 #include "net/tools/quic/test_tools/packet_reordering_writer.h" | 
|    55 #include "net/tools/quic/test_tools/quic_client_peer.h" |    55 #include "net/tools/quic/test_tools/quic_client_peer.h" | 
|    56 #include "net/tools/quic/test_tools/quic_dispatcher_peer.h" |    56 #include "net/tools/quic/test_tools/quic_dispatcher_peer.h" | 
|    57 #include "net/tools/quic/test_tools/quic_in_memory_cache_peer.h" |  | 
|    58 #include "net/tools/quic/test_tools/quic_server_peer.h" |    57 #include "net/tools/quic/test_tools/quic_server_peer.h" | 
|    59 #include "net/tools/quic/test_tools/quic_test_client.h" |    58 #include "net/tools/quic/test_tools/quic_test_client.h" | 
|    60 #include "net/tools/quic/test_tools/quic_test_server.h" |    59 #include "net/tools/quic/test_tools/quic_test_server.h" | 
|    61 #include "net/tools/quic/test_tools/server_thread.h" |    60 #include "net/tools/quic/test_tools/server_thread.h" | 
|    62 #include "testing/gtest/include/gtest/gtest.h" |    61 #include "testing/gtest/include/gtest/gtest.h" | 
|    63  |    62  | 
|    64 using base::IntToString; |    63 using base::IntToString; | 
|    65 using base::StringPiece; |    64 using base::StringPiece; | 
|    66 using base::WaitableEvent; |    65 using base::WaitableEvent; | 
|    67 using net::EpollServer; |    66 using net::EpollServer; | 
| (...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   298         3 * kInitialSessionFlowControlWindowForTest); |   297         3 * kInitialSessionFlowControlWindowForTest); | 
|   299  |   298  | 
|   300     // The default idle timeouts can be too strict when running on a busy |   299     // The default idle timeouts can be too strict when running on a busy | 
|   301     // machine. |   300     // machine. | 
|   302     const QuicTime::Delta timeout = QuicTime::Delta::FromSeconds(30); |   301     const QuicTime::Delta timeout = QuicTime::Delta::FromSeconds(30); | 
|   303     client_config_.set_max_time_before_crypto_handshake(timeout); |   302     client_config_.set_max_time_before_crypto_handshake(timeout); | 
|   304     client_config_.set_max_idle_time_before_crypto_handshake(timeout); |   303     client_config_.set_max_idle_time_before_crypto_handshake(timeout); | 
|   305     server_config_.set_max_time_before_crypto_handshake(timeout); |   304     server_config_.set_max_time_before_crypto_handshake(timeout); | 
|   306     server_config_.set_max_idle_time_before_crypto_handshake(timeout); |   305     server_config_.set_max_idle_time_before_crypto_handshake(timeout); | 
|   307  |   306  | 
|   308     QuicInMemoryCachePeer::ResetForTests(); |  | 
|   309     AddToCache("/foo", 200, kFooResponseBody); |   307     AddToCache("/foo", 200, kFooResponseBody); | 
|   310     AddToCache("/bar", 200, kBarResponseBody); |   308     AddToCache("/bar", 200, kBarResponseBody); | 
|   311   } |   309   } | 
|   312  |   310  | 
|   313   ~EndToEndTest() override { |   311   ~EndToEndTest() override { | 
|   314     // TODO(rtenneti): port RecycleUnusedPort if needed. |   312     // TODO(rtenneti): port RecycleUnusedPort if needed. | 
|   315     // RecycleUnusedPort(server_address_.port()); |   313     // RecycleUnusedPort(server_address_.port()); | 
|   316     QuicInMemoryCachePeer::ResetForTests(); |  | 
|   317   } |   314   } | 
|   318  |   315  | 
|   319   virtual void CreateClientWithWriter() { |   316   virtual void CreateClientWithWriter() { | 
|   320     client_.reset(CreateQuicClient(client_writer_)); |   317     client_.reset(CreateQuicClient(client_writer_)); | 
|   321   } |   318   } | 
|   322  |   319  | 
|   323   QuicTestClient* CreateQuicClient(QuicPacketWriterWrapper* writer) { |   320   QuicTestClient* CreateQuicClient(QuicPacketWriterWrapper* writer) { | 
|   324     QuicTestClient* client = new QuicTestClient( |   321     QuicTestClient* client = new QuicTestClient( | 
|   325         server_address_, server_hostname_, client_config_, |   322         server_address_, server_hostname_, client_config_, | 
|   326         client_supported_versions_, CryptoTestUtils::ProofVerifierForTesting()); |   323         client_supported_versions_, CryptoTestUtils::ProofVerifierForTesting()); | 
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   423   void TearDown() override { |   420   void TearDown() override { | 
|   424     ASSERT_TRUE(initialized_) << "You must call Initialize() in every test " |   421     ASSERT_TRUE(initialized_) << "You must call Initialize() in every test " | 
|   425                               << "case. Otherwise, your test will leak memory."; |   422                               << "case. Otherwise, your test will leak memory."; | 
|   426     StopServer(); |   423     StopServer(); | 
|   427   } |   424   } | 
|   428  |   425  | 
|   429   void StartServer() { |   426   void StartServer() { | 
|   430     FLAGS_quic_use_cheap_stateless_rejects = |   427     FLAGS_quic_use_cheap_stateless_rejects = | 
|   431         GetParam().use_cheap_stateless_reject; |   428         GetParam().use_cheap_stateless_reject; | 
|   432  |   429  | 
|   433     auto test_server = |   430     auto test_server = new QuicTestServer( | 
|   434         new QuicTestServer(CryptoTestUtils::ProofSourceForTesting(), |   431         CryptoTestUtils::ProofSourceForTesting(), server_config_, | 
|   435                            server_config_, server_supported_versions_); |   432         server_supported_versions_, &in_memory_cache_); | 
|   436     server_thread_.reset(new ServerThread(test_server, server_address_)); |   433     server_thread_.reset(new ServerThread(test_server, server_address_)); | 
|   437     if (chlo_multiplier_ != 0) { |   434     if (chlo_multiplier_ != 0) { | 
|   438       server_thread_->server()->SetChloMultiplier(chlo_multiplier_); |   435       server_thread_->server()->SetChloMultiplier(chlo_multiplier_); | 
|   439     } |   436     } | 
|   440     server_thread_->Initialize(); |   437     server_thread_->Initialize(); | 
|   441     server_address_ = |   438     server_address_ = | 
|   442         QuicSocketAddress(server_address_.host(), server_thread_->GetPort()); |   439         QuicSocketAddress(server_address_.host(), server_thread_->GetPort()); | 
|   443     QuicDispatcher* dispatcher = |   440     QuicDispatcher* dispatcher = | 
|   444         QuicServerPeer::GetDispatcher(server_thread_->server()); |   441         QuicServerPeer::GetDispatcher(server_thread_->server()); | 
|   445     QuicDispatcherPeer::UseWriter(dispatcher, server_writer_); |   442     QuicDispatcherPeer::UseWriter(dispatcher, server_writer_); | 
| (...skipping 16 matching lines...) Expand all  Loading... | 
|   462   void StopServer() { |   459   void StopServer() { | 
|   463     if (!server_started_) |   460     if (!server_started_) | 
|   464       return; |   461       return; | 
|   465     if (server_thread_.get()) { |   462     if (server_thread_.get()) { | 
|   466       server_thread_->Quit(); |   463       server_thread_->Quit(); | 
|   467       server_thread_->Join(); |   464       server_thread_->Join(); | 
|   468     } |   465     } | 
|   469   } |   466   } | 
|   470  |   467  | 
|   471   void AddToCache(StringPiece path, int response_code, StringPiece body) { |   468   void AddToCache(StringPiece path, int response_code, StringPiece body) { | 
|   472     QuicInMemoryCache::GetInstance()->AddSimpleResponse(server_hostname_, path, |   469     in_memory_cache_.AddSimpleResponse(server_hostname_, path, response_code, | 
|   473                                                         response_code, body); |   470                                        body); | 
|   474   } |   471   } | 
|   475  |   472  | 
|   476   void SetPacketLossPercentage(int32_t loss) { |   473   void SetPacketLossPercentage(int32_t loss) { | 
|   477     // TODO(rtenneti): enable when we can do random packet loss tests in |   474     // TODO(rtenneti): enable when we can do random packet loss tests in | 
|   478     // chrome's tree. |   475     // chrome's tree. | 
|   479     if (loss != 0 && loss != 100) |   476     if (loss != 0 && loss != 100) | 
|   480       return; |   477       return; | 
|   481     client_writer_->set_fake_packet_loss_percentage(loss); |   478     client_writer_->set_fake_packet_loss_percentage(loss); | 
|   482     server_writer_->set_fake_packet_loss_percentage(loss); |   479     server_writer_->set_fake_packet_loss_percentage(loss); | 
|   483   } |   480   } | 
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   553  |   550  | 
|   554   // Must be called before Initialize to have effect. |   551   // Must be called before Initialize to have effect. | 
|   555   void SetSpdyStreamFactory(QuicTestServer::StreamFactory* factory) { |   552   void SetSpdyStreamFactory(QuicTestServer::StreamFactory* factory) { | 
|   556     stream_factory_ = factory; |   553     stream_factory_ = factory; | 
|   557   } |   554   } | 
|   558  |   555  | 
|   559   QuicFlagSaver flags_;  // Save/restore all QUIC flag values. |   556   QuicFlagSaver flags_;  // Save/restore all QUIC flag values. | 
|   560   bool initialized_; |   557   bool initialized_; | 
|   561   QuicSocketAddress server_address_; |   558   QuicSocketAddress server_address_; | 
|   562   string server_hostname_; |   559   string server_hostname_; | 
 |   560   QuicInMemoryCache in_memory_cache_; | 
|   563   std::unique_ptr<ServerThread> server_thread_; |   561   std::unique_ptr<ServerThread> server_thread_; | 
|   564   std::unique_ptr<QuicTestClient> client_; |   562   std::unique_ptr<QuicTestClient> client_; | 
|   565   PacketDroppingTestWriter* client_writer_; |   563   PacketDroppingTestWriter* client_writer_; | 
|   566   PacketDroppingTestWriter* server_writer_; |   564   PacketDroppingTestWriter* server_writer_; | 
|   567   bool server_started_; |   565   bool server_started_; | 
|   568   QuicConfig client_config_; |   566   QuicConfig client_config_; | 
|   569   QuicConfig server_config_; |   567   QuicConfig server_config_; | 
|   570   QuicVersionVector client_supported_versions_; |   568   QuicVersionVector client_supported_versions_; | 
|   571   QuicVersionVector server_supported_versions_; |   569   QuicVersionVector server_supported_versions_; | 
|   572   QuicVersion negotiated_version_; |   570   QuicVersion negotiated_version_; | 
| (...skipping 1569 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  2142   // The connection should not be terminated. |  2140   // The connection should not be terminated. | 
|  2143   EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo")); |  2141   EXPECT_EQ(kFooResponseBody, client_->SendSynchronousRequest("/foo")); | 
|  2144   EXPECT_EQ("200", client_->response_headers()->find(":status")->second); |  2142   EXPECT_EQ("200", client_->response_headers()->find(":status")->second); | 
|  2145 } |  2143 } | 
|  2146  |  2144  | 
|  2147 // A test stream that gives |response_body_| as an error response body. |  2145 // A test stream that gives |response_body_| as an error response body. | 
|  2148 class ServerStreamWithErrorResponseBody : public QuicSimpleServerStream { |  2146 class ServerStreamWithErrorResponseBody : public QuicSimpleServerStream { | 
|  2149  public: |  2147  public: | 
|  2150   ServerStreamWithErrorResponseBody(QuicStreamId id, |  2148   ServerStreamWithErrorResponseBody(QuicStreamId id, | 
|  2151                                     QuicSpdySession* session, |  2149                                     QuicSpdySession* session, | 
 |  2150                                     QuicInMemoryCache* in_memory_cache, | 
|  2152                                     string response_body) |  2151                                     string response_body) | 
|  2153       : QuicSimpleServerStream(id, session), |  2152       : QuicSimpleServerStream(id, session, in_memory_cache), | 
|  2154         response_body_(std::move(response_body)) {} |  2153         response_body_(std::move(response_body)) {} | 
|  2155  |  2154  | 
|  2156   ~ServerStreamWithErrorResponseBody() override {} |  2155   ~ServerStreamWithErrorResponseBody() override {} | 
|  2157  |  2156  | 
|  2158  protected: |  2157  protected: | 
|  2159   void SendErrorResponse() override { |  2158   void SendErrorResponse() override { | 
|  2160     DVLOG(1) << "Sending error response for stream " << id(); |  2159     DVLOG(1) << "Sending error response for stream " << id(); | 
|  2161     SpdyHeaderBlock headers; |  2160     SpdyHeaderBlock headers; | 
|  2162     headers[":status"] = "500"; |  2161     headers[":status"] = "500"; | 
|  2163     headers["content-length"] = base::UintToString(response_body_.size()); |  2162     headers["content-length"] = base::UintToString(response_body_.size()); | 
|  2164     // This method must call CloseReadSide to cause the test case, StopReading |  2163     // This method must call CloseReadSide to cause the test case, StopReading | 
|  2165     // is not sufficient. |  2164     // is not sufficient. | 
|  2166     QuicStreamPeer::CloseReadSide(this); |  2165     QuicStreamPeer::CloseReadSide(this); | 
|  2167     SendHeadersAndBody(std::move(headers), response_body_); |  2166     SendHeadersAndBody(std::move(headers), response_body_); | 
|  2168   } |  2167   } | 
|  2169  |  2168  | 
|  2170   string response_body_; |  2169   string response_body_; | 
|  2171 }; |  2170 }; | 
|  2172  |  2171  | 
|  2173 class StreamWithErrorFactory : public QuicTestServer::StreamFactory { |  2172 class StreamWithErrorFactory : public QuicTestServer::StreamFactory { | 
|  2174  public: |  2173  public: | 
|  2175   explicit StreamWithErrorFactory(string response_body) |  2174   explicit StreamWithErrorFactory(string response_body) | 
|  2176       : response_body_(std::move(response_body)) {} |  2175       : response_body_(std::move(response_body)) {} | 
|  2177  |  2176  | 
|  2178   ~StreamWithErrorFactory() override {} |  2177   ~StreamWithErrorFactory() override {} | 
|  2179  |  2178  | 
|  2180   QuicSimpleServerStream* CreateStream(QuicStreamId id, |  2179   QuicSimpleServerStream* CreateStream( | 
|  2181                                        QuicSpdySession* session) override { |  2180       QuicStreamId id, | 
|  2182     return new ServerStreamWithErrorResponseBody(id, session, response_body_); |  2181       QuicSpdySession* session, | 
 |  2182       QuicInMemoryCache* in_memory_cache) override { | 
 |  2183     return new ServerStreamWithErrorResponseBody(id, session, in_memory_cache, | 
 |  2184                                                  response_body_); | 
|  2183   } |  2185   } | 
|  2184  |  2186  | 
|  2185  private: |  2187  private: | 
|  2186   string response_body_; |  2188   string response_body_; | 
|  2187 }; |  2189 }; | 
|  2188  |  2190  | 
|  2189 // A test server stream that drops all received body. |  2191 // A test server stream that drops all received body. | 
|  2190 class ServerStreamThatDropsBody : public QuicSimpleServerStream { |  2192 class ServerStreamThatDropsBody : public QuicSimpleServerStream { | 
|  2191  public: |  2193  public: | 
|  2192   ServerStreamThatDropsBody(QuicStreamId id, QuicSpdySession* session) |  2194   ServerStreamThatDropsBody(QuicStreamId id, | 
|  2193       : QuicSimpleServerStream(id, session) {} |  2195                             QuicSpdySession* session, | 
 |  2196                             QuicInMemoryCache* in_memory_cache) | 
 |  2197       : QuicSimpleServerStream(id, session, in_memory_cache) {} | 
|  2194  |  2198  | 
|  2195   ~ServerStreamThatDropsBody() override {} |  2199   ~ServerStreamThatDropsBody() override {} | 
|  2196  |  2200  | 
|  2197  protected: |  2201  protected: | 
|  2198   void OnDataAvailable() override { |  2202   void OnDataAvailable() override { | 
|  2199     while (HasBytesToRead()) { |  2203     while (HasBytesToRead()) { | 
|  2200       struct iovec iov; |  2204       struct iovec iov; | 
|  2201       if (GetReadableRegions(&iov, 1) == 0) { |  2205       if (GetReadableRegions(&iov, 1) == 0) { | 
|  2202         // No more data to read. |  2206         // No more data to read. | 
|  2203         break; |  2207         break; | 
| (...skipping 18 matching lines...) Expand all  Loading... | 
|  2222     SendResponse(); |  2226     SendResponse(); | 
|  2223   } |  2227   } | 
|  2224 }; |  2228 }; | 
|  2225  |  2229  | 
|  2226 class ServerStreamThatDropsBodyFactory : public QuicTestServer::StreamFactory { |  2230 class ServerStreamThatDropsBodyFactory : public QuicTestServer::StreamFactory { | 
|  2227  public: |  2231  public: | 
|  2228   ServerStreamThatDropsBodyFactory() {} |  2232   ServerStreamThatDropsBodyFactory() {} | 
|  2229  |  2233  | 
|  2230   ~ServerStreamThatDropsBodyFactory() override{}; |  2234   ~ServerStreamThatDropsBodyFactory() override{}; | 
|  2231  |  2235  | 
|  2232   QuicSimpleServerStream* CreateStream(QuicStreamId id, |  2236   QuicSimpleServerStream* CreateStream( | 
|  2233                                        QuicSpdySession* session) override { |  2237       QuicStreamId id, | 
|  2234     return new ServerStreamThatDropsBody(id, session); |  2238       QuicSpdySession* session, | 
 |  2239       QuicInMemoryCache* in_memory_cache) override { | 
 |  2240     return new ServerStreamThatDropsBody(id, session, in_memory_cache); | 
|  2235   } |  2241   } | 
|  2236 }; |  2242 }; | 
|  2237  |  2243  | 
|  2238 // A test server stream that sends response with body size greater than 4GB. |  2244 // A test server stream that sends response with body size greater than 4GB. | 
|  2239 class ServerStreamThatSendsHugeResponse : public QuicSimpleServerStream { |  2245 class ServerStreamThatSendsHugeResponse : public QuicSimpleServerStream { | 
|  2240  public: |  2246  public: | 
|  2241   ServerStreamThatSendsHugeResponse(QuicStreamId id, |  2247   ServerStreamThatSendsHugeResponse(QuicStreamId id, | 
|  2242                                     QuicSpdySession* session, |  2248                                     QuicSpdySession* session, | 
 |  2249                                     QuicInMemoryCache* in_memory_cache, | 
|  2243                                     int64_t body_bytes) |  2250                                     int64_t body_bytes) | 
|  2244       : QuicSimpleServerStream(id, session), body_bytes_(body_bytes) {} |  2251       : QuicSimpleServerStream(id, session, in_memory_cache), | 
 |  2252         body_bytes_(body_bytes) {} | 
|  2245  |  2253  | 
|  2246   ~ServerStreamThatSendsHugeResponse() override {} |  2254   ~ServerStreamThatSendsHugeResponse() override {} | 
|  2247  |  2255  | 
|  2248  protected: |  2256  protected: | 
|  2249   void SendResponse() override { |  2257   void SendResponse() override { | 
|  2250     QuicInMemoryCache::Response response; |  2258     QuicInMemoryCache::Response response; | 
|  2251     string body; |  2259     string body; | 
|  2252     GenerateBody(&body, body_bytes_); |  2260     GenerateBody(&body, body_bytes_); | 
|  2253     response.set_body(body); |  2261     response.set_body(body); | 
|  2254     SendHeadersAndBodyAndTrailers(response.headers().Clone(), response.body(), |  2262     SendHeadersAndBodyAndTrailers(response.headers().Clone(), response.body(), | 
|  2255                                   response.trailers().Clone()); |  2263                                   response.trailers().Clone()); | 
|  2256   } |  2264   } | 
|  2257  |  2265  | 
|  2258  private: |  2266  private: | 
|  2259   // Use a explicit int64_t rather than size_t to simulate a 64-bit server |  2267   // Use a explicit int64_t rather than size_t to simulate a 64-bit server | 
|  2260   // talking to a 32-bit client. |  2268   // talking to a 32-bit client. | 
|  2261   int64_t body_bytes_; |  2269   int64_t body_bytes_; | 
|  2262 }; |  2270 }; | 
|  2263  |  2271  | 
|  2264 class ServerStreamThatSendsHugeResponseFactory |  2272 class ServerStreamThatSendsHugeResponseFactory | 
|  2265     : public QuicTestServer::StreamFactory { |  2273     : public QuicTestServer::StreamFactory { | 
|  2266  public: |  2274  public: | 
|  2267   explicit ServerStreamThatSendsHugeResponseFactory(int64_t body_bytes) |  2275   explicit ServerStreamThatSendsHugeResponseFactory(int64_t body_bytes) | 
|  2268       : body_bytes_(body_bytes) {} |  2276       : body_bytes_(body_bytes) {} | 
|  2269  |  2277  | 
|  2270   ~ServerStreamThatSendsHugeResponseFactory() override{}; |  2278   ~ServerStreamThatSendsHugeResponseFactory() override{}; | 
|  2271  |  2279  | 
|  2272   QuicSimpleServerStream* CreateStream(QuicStreamId id, |  2280   QuicSimpleServerStream* CreateStream( | 
|  2273                                        QuicSpdySession* session) override { |  2281       QuicStreamId id, | 
|  2274     return new ServerStreamThatSendsHugeResponse(id, session, body_bytes_); |  2282       QuicSpdySession* session, | 
 |  2283       QuicInMemoryCache* in_memory_cache) override { | 
 |  2284     return new ServerStreamThatSendsHugeResponse(id, session, in_memory_cache, | 
 |  2285                                                  body_bytes_); | 
|  2275   } |  2286   } | 
|  2276  |  2287  | 
|  2277   int64_t body_bytes_; |  2288   int64_t body_bytes_; | 
|  2278 }; |  2289 }; | 
|  2279  |  2290  | 
|  2280 // A test client stream that drops all received body. |  2291 // A test client stream that drops all received body. | 
|  2281 class ClientStreamThatDropsBody : public QuicSpdyClientStream { |  2292 class ClientStreamThatDropsBody : public QuicSpdyClientStream { | 
|  2282  public: |  2293  public: | 
|  2283   ClientStreamThatDropsBody(QuicStreamId id, QuicClientSession* session) |  2294   ClientStreamThatDropsBody(QuicStreamId id, QuicClientSession* session) | 
|  2284       : QuicSpdyClientStream(id, session) {} |  2295       : QuicSpdyClientStream(id, session) {} | 
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  2482   const string kBody = "body content"; |  2493   const string kBody = "body content"; | 
|  2483  |  2494  | 
|  2484   SpdyHeaderBlock headers; |  2495   SpdyHeaderBlock headers; | 
|  2485   headers[":status"] = "200"; |  2496   headers[":status"] = "200"; | 
|  2486   headers[":version"] = "HTTP/1.1"; |  2497   headers[":version"] = "HTTP/1.1"; | 
|  2487   headers["content-length"] = IntToString(kBody.size()); |  2498   headers["content-length"] = IntToString(kBody.size()); | 
|  2488  |  2499  | 
|  2489   SpdyHeaderBlock trailers; |  2500   SpdyHeaderBlock trailers; | 
|  2490   trailers["some-trailing-header"] = "trailing-header-value"; |  2501   trailers["some-trailing-header"] = "trailing-header-value"; | 
|  2491  |  2502  | 
|  2492   QuicInMemoryCache::GetInstance()->AddResponse( |  2503   in_memory_cache_.AddResponse(server_hostname_, "/trailer_url", | 
|  2493       server_hostname_, "/trailer_url", std::move(headers), kBody, |  2504                                std::move(headers), kBody, trailers.Clone()); | 
|  2494       trailers.Clone()); |  | 
|  2495  |  2505  | 
|  2496   EXPECT_EQ(kBody, client_->SendSynchronousRequest("/trailer_url")); |  2506   EXPECT_EQ(kBody, client_->SendSynchronousRequest("/trailer_url")); | 
|  2497   EXPECT_EQ("200", client_->response_headers()->find(":status")->second); |  2507   EXPECT_EQ("200", client_->response_headers()->find(":status")->second); | 
|  2498   EXPECT_EQ(trailers, client_->response_trailers()); |  2508   EXPECT_EQ(trailers, client_->response_trailers()); | 
|  2499 } |  2509 } | 
|  2500  |  2510  | 
|  2501 class EndToEndTestServerPush : public EndToEndTest { |  2511 class EndToEndTestServerPush : public EndToEndTest { | 
|  2502  protected: |  2512  protected: | 
|  2503   const size_t kNumMaxStreams = 10; |  2513   const size_t kNumMaxStreams = 10; | 
|  2504  |  2514  | 
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  2536                         ? large_resource |  2546                         ? large_resource | 
|  2537                         : "This is server push response body for " + url; |  2547                         : "This is server push response body for " + url; | 
|  2538       SpdyHeaderBlock response_headers; |  2548       SpdyHeaderBlock response_headers; | 
|  2539       response_headers[":version"] = "HTTP/1.1"; |  2549       response_headers[":version"] = "HTTP/1.1"; | 
|  2540       response_headers[":status"] = "200"; |  2550       response_headers[":status"] = "200"; | 
|  2541       response_headers["content-length"] = IntToString(body.size()); |  2551       response_headers["content-length"] = IntToString(body.size()); | 
|  2542       push_resources.push_back(QuicInMemoryCache::ServerPushInfo( |  2552       push_resources.push_back(QuicInMemoryCache::ServerPushInfo( | 
|  2543           resource_url, std::move(response_headers), kV3LowestPriority, body)); |  2553           resource_url, std::move(response_headers), kV3LowestPriority, body)); | 
|  2544     } |  2554     } | 
|  2545  |  2555  | 
|  2546     QuicInMemoryCache::GetInstance()->AddSimpleResponseWithServerPushResources( |  2556     in_memory_cache_.AddSimpleResponseWithServerPushResources( | 
|  2547         host, path, 200, response_body, push_resources); |  2557         host, path, 200, response_body, push_resources); | 
|  2548   } |  2558   } | 
|  2549 }; |  2559 }; | 
|  2550  |  2560  | 
|  2551 // Run all server push end to end tests with all supported versions. |  2561 // Run all server push end to end tests with all supported versions. | 
|  2552 INSTANTIATE_TEST_CASE_P(EndToEndTestsServerPush, |  2562 INSTANTIATE_TEST_CASE_P(EndToEndTestsServerPush, | 
|  2553                         EndToEndTestServerPush, |  2563                         EndToEndTestServerPush, | 
|  2554                         ::testing::ValuesIn(GetTestParams())); |  2564                         ::testing::ValuesIn(GetTestParams())); | 
|  2555  |  2565  | 
|  2556 TEST_P(EndToEndTestServerPush, ServerPush) { |  2566 TEST_P(EndToEndTestServerPush, ServerPush) { | 
| (...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  2947   client_->WaitForResponse(); |  2957   client_->WaitForResponse(); | 
|  2948   EXPECT_EQ(kBarResponseBody, client_->response_body()); |  2958   EXPECT_EQ(kBarResponseBody, client_->response_body()); | 
|  2949   QuicConnectionStats client_stats = |  2959   QuicConnectionStats client_stats = | 
|  2950       client_->client()->session()->connection()->GetStats(); |  2960       client_->client()->session()->connection()->GetStats(); | 
|  2951   EXPECT_EQ(0u, client_stats.packets_lost); |  2961   EXPECT_EQ(0u, client_stats.packets_lost); | 
|  2952   EXPECT_EQ(1, client_->client()->GetNumSentClientHellos()); |  2962   EXPECT_EQ(1, client_->client()->GetNumSentClientHellos()); | 
|  2953 } |  2963 } | 
|  2954 }  // namespace |  2964 }  // namespace | 
|  2955 }  // namespace test |  2965 }  // namespace test | 
|  2956 }  // namespace net |  2966 }  // namespace net | 
| OLD | NEW |