| OLD | NEW | 
|---|
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/base/net_log_unittest.h" | 
|  | 6 #include "net/http/http_transaction_unittest.h" | 
|  | 7 #include "net/spdy/spdy_http_stream.h" | 
| 5 #include "net/spdy/spdy_network_transaction.h" | 8 #include "net/spdy/spdy_network_transaction.h" | 
| 6 |  | 
| 7 #include "base/basictypes.h" |  | 
| 8 #include "base/ref_counted.h" |  | 
| 9 #include "base/string_util.h" |  | 
| 10 #include "net/base/completion_callback.h" |  | 
| 11 #include "net/base/mock_host_resolver.h" |  | 
| 12 #include "net/base/net_log_unittest.h" |  | 
| 13 #include "net/base/request_priority.h" |  | 
| 14 #include "net/base/ssl_config_service_defaults.h" |  | 
| 15 #include "net/base/test_completion_callback.h" |  | 
| 16 #include "net/base/upload_data.h" |  | 
| 17 #include "net/http/http_auth_handler_factory.h" |  | 
| 18 #include "net/http/http_network_session.h" |  | 
| 19 #include "net/http/http_transaction_unittest.h" |  | 
| 20 #include "net/proxy/proxy_config_service_fixed.h" |  | 
| 21 #include "net/socket/socket_test_util.h" |  | 
| 22 #include "net/spdy/spdy_framer.h" |  | 
| 23 #include "net/spdy/spdy_http_stream.h" |  | 
| 24 #include "net/spdy/spdy_protocol.h" |  | 
| 25 #include "net/spdy/spdy_test_util.h" | 9 #include "net/spdy/spdy_test_util.h" | 
| 26 #include "testing/platform_test.h" | 10 #include "testing/platform_test.h" | 
| 27 | 11 | 
| 28 //----------------------------------------------------------------------------- | 12 //----------------------------------------------------------------------------- | 
| 29 | 13 | 
| 30 namespace net { | 14 namespace net { | 
| 31 | 15 | 
| 32 class SpdyNetworkTransactionTest : public PlatformTest { | 16 class SpdyNetworkTransactionTest : public PlatformTest { | 
| 33  protected: | 17  protected: | 
| 34   virtual void SetUp() { | 18   virtual void SetUp() { | 
| (...skipping 20 matching lines...) Expand all  Loading... | 
| 55     HttpResponseInfo response_info; | 39     HttpResponseInfo response_info; | 
| 56   }; | 40   }; | 
| 57 | 41 | 
| 58   void EnableCompression(bool enabled) { | 42   void EnableCompression(bool enabled) { | 
| 59     spdy::SpdyFramer::set_enable_compression_default(enabled); | 43     spdy::SpdyFramer::set_enable_compression_default(enabled); | 
| 60   } | 44   } | 
| 61 | 45 | 
| 62   class StartTransactionCallback; | 46   class StartTransactionCallback; | 
| 63   class DeleteSessionCallback; | 47   class DeleteSessionCallback; | 
| 64 | 48 | 
| 65   // Helper to manage the lifetimes of the dependencies for a |  | 
| 66   // HttpNetworkTransaction. |  | 
| 67   class SessionDependencies { |  | 
| 68    public: |  | 
| 69     // Default set of dependencies -- "null" proxy service. |  | 
| 70     SessionDependencies() |  | 
| 71         : host_resolver(new MockHostResolver), |  | 
| 72           proxy_service(ProxyService::CreateNull()), |  | 
| 73           ssl_config_service(new SSLConfigServiceDefaults), |  | 
| 74           http_auth_handler_factory(HttpAuthHandlerFactory::CreateDefault()), |  | 
| 75           spdy_session_pool(new SpdySessionPool()) { |  | 
| 76           // Note: The CancelledTransaction test does cleanup by running all |  | 
| 77           // tasks in the message loop (RunAllPending).  Unfortunately, that |  | 
| 78           // doesn't clean up tasks on the host resolver thread; and |  | 
| 79           // TCPConnectJob is currently not cancellable.  Using synchronous |  | 
| 80           // lookups allows the test to shutdown cleanly.  Until we have |  | 
| 81           // cancellable TCPConnectJobs, use synchronous lookups. |  | 
| 82           host_resolver->set_synchronous_mode(true); |  | 
| 83         } |  | 
| 84 |  | 
| 85     // Custom proxy service dependency. |  | 
| 86     explicit SessionDependencies(ProxyService* proxy_service) |  | 
| 87         : host_resolver(new MockHostResolver), |  | 
| 88           proxy_service(proxy_service), |  | 
| 89           ssl_config_service(new SSLConfigServiceDefaults), |  | 
| 90           http_auth_handler_factory(HttpAuthHandlerFactory::CreateDefault()), |  | 
| 91           spdy_session_pool(new SpdySessionPool()) {} |  | 
| 92 |  | 
| 93     scoped_refptr<MockHostResolverBase> host_resolver; |  | 
| 94     scoped_refptr<ProxyService> proxy_service; |  | 
| 95     scoped_refptr<SSLConfigService> ssl_config_service; |  | 
| 96     MockClientSocketFactory socket_factory; |  | 
| 97     scoped_ptr<HttpAuthHandlerFactory> http_auth_handler_factory; |  | 
| 98     scoped_refptr<SpdySessionPool> spdy_session_pool; |  | 
| 99   }; |  | 
| 100 |  | 
| 101   static HttpNetworkSession* CreateSession(SessionDependencies* session_deps) { |  | 
| 102     return new HttpNetworkSession(session_deps->host_resolver, |  | 
| 103                                   session_deps->proxy_service, |  | 
| 104                                   &session_deps->socket_factory, |  | 
| 105                                   session_deps->ssl_config_service, |  | 
| 106                                   session_deps->spdy_session_pool, |  | 
| 107                                   session_deps->http_auth_handler_factory.get(), |  | 
| 108                                   NULL, |  | 
| 109                                   NULL); |  | 
| 110   } |  | 
| 111 |  | 
| 112   // A helper class that handles all the initial npn/ssl setup. | 49   // A helper class that handles all the initial npn/ssl setup. | 
| 113   class NormalSpdyTransactionHelper { | 50   class NormalSpdyTransactionHelper { | 
| 114    public: | 51    public: | 
| 115     NormalSpdyTransactionHelper(const HttpRequestInfo& request, | 52     NormalSpdyTransactionHelper(const HttpRequestInfo& request, | 
| 116                                 const BoundNetLog& log) | 53                                 const BoundNetLog& log) | 
| 117         : request_(request), session_(CreateSession(&session_deps_)), | 54         : request_(request), | 
|  | 55           session_(SpdySessionDependencies::SpdyCreateSession(&session_deps_)), | 
| 118           log_(log), add_data_allowed_(true) {} | 56           log_(log), add_data_allowed_(true) {} | 
| 119 | 57 | 
| 120     void RunPreTestSetup() { | 58     void RunPreTestSetup() { | 
| 121       // Disallow future calls to AddData | 59       // Disallow future calls to AddData | 
| 122       add_data_allowed_ = false; | 60       add_data_allowed_ = false; | 
| 123 | 61 | 
| 124       // Set up http data. | 62       // Set up http data. | 
| 125       MockRead data_reads[] = { | 63       MockRead data_reads[] = { | 
| 126         MockRead("HTTP/1.1 200 OK\r\n"), | 64         MockRead("HTTP/1.1 200 OK\r\n"), | 
| 127         MockRead("Alternate-Protocol: 443:npn-spdy/1\r\n\r\n"), | 65         MockRead("Alternate-Protocol: 443:npn-spdy/1\r\n\r\n"), | 
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 258     HttpNetworkTransaction* trans() { return trans_.get(); } | 196     HttpNetworkTransaction* trans() { return trans_.get(); } | 
| 259     void ResetTrans() { trans_.reset(); } | 197     void ResetTrans() { trans_.reset(); } | 
| 260     TransactionHelperResult& output() { return output_; } | 198     TransactionHelperResult& output() { return output_; } | 
| 261     HttpRequestInfo& request() { return request_; } | 199     HttpRequestInfo& request() { return request_; } | 
| 262     scoped_refptr<HttpNetworkSession>& session() { return session_; } | 200     scoped_refptr<HttpNetworkSession>& session() { return session_; } | 
| 263 | 201 | 
| 264    private: | 202    private: | 
| 265     typedef std::vector<StaticSocketDataProvider*> DataVector; | 203     typedef std::vector<StaticSocketDataProvider*> DataVector; | 
| 266     typedef std::vector<linked_ptr<SSLSocketDataProvider> > SSLVector; | 204     typedef std::vector<linked_ptr<SSLSocketDataProvider> > SSLVector; | 
| 267     HttpRequestInfo request_; | 205     HttpRequestInfo request_; | 
| 268     SessionDependencies session_deps_; | 206     SpdySessionDependencies session_deps_; | 
| 269     scoped_refptr<HttpNetworkSession> session_; | 207     scoped_refptr<HttpNetworkSession> session_; | 
| 270     TransactionHelperResult output_; | 208     TransactionHelperResult output_; | 
| 271     scoped_ptr<StaticSocketDataProvider> first_transaction_; | 209     scoped_ptr<StaticSocketDataProvider> first_transaction_; | 
| 272     SSLVector ssl_vector_; | 210     SSLVector ssl_vector_; | 
| 273     TestCompletionCallback callback; | 211     TestCompletionCallback callback; | 
| 274     scoped_ptr<HttpNetworkTransaction> trans_; | 212     scoped_ptr<HttpNetworkTransaction> trans_; | 
| 275     scoped_ptr<HttpNetworkTransaction> trans_http_; | 213     scoped_ptr<HttpNetworkTransaction> trans_http_; | 
| 276     DataVector data_vector_; | 214     DataVector data_vector_; | 
| 277     const BoundNetLog& log_; | 215     const BoundNetLog& log_; | 
| 278     bool add_data_allowed_; | 216     bool add_data_allowed_; | 
| (...skipping 16 matching lines...) Expand all  Loading... | 
| 295 | 233 | 
| 296  private: | 234  private: | 
| 297   bool google_get_request_initialized_; | 235   bool google_get_request_initialized_; | 
| 298   HttpRequestInfo google_get_request_; | 236   HttpRequestInfo google_get_request_; | 
| 299 }; | 237 }; | 
| 300 | 238 | 
| 301 //----------------------------------------------------------------------------- | 239 //----------------------------------------------------------------------------- | 
| 302 | 240 | 
| 303 // Verify HttpNetworkTransaction constructor. | 241 // Verify HttpNetworkTransaction constructor. | 
| 304 TEST_F(SpdyNetworkTransactionTest, Constructor) { | 242 TEST_F(SpdyNetworkTransactionTest, Constructor) { | 
| 305   SessionDependencies session_deps; | 243   SpdySessionDependencies session_deps; | 
| 306   scoped_refptr<HttpNetworkSession> session = | 244   scoped_refptr<HttpNetworkSession> session = | 
| 307       CreateSession(&session_deps); | 245       SpdySessionDependencies::SpdyCreateSession(&session_deps); | 
| 308   scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 246   scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(session)); | 
| 309 } | 247 } | 
| 310 | 248 | 
| 311 TEST_F(SpdyNetworkTransactionTest, Get) { | 249 TEST_F(SpdyNetworkTransactionTest, Get) { | 
| 312   // Construct the request. | 250   // Construct the request. | 
| 313   scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); | 251   scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); | 
| 314   MockWrite writes[] = { CreateMockWrite(*req) }; | 252   MockWrite writes[] = { CreateMockWrite(*req) }; | 
| 315 | 253 | 
| 316   scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); | 254   scoped_ptr<spdy::SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); | 
| 317   scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, true)); | 255   scoped_ptr<spdy::SpdyFrame> body(ConstructSpdyBodyFrame(1, true)); | 
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 378     MockRead(true, 0, 0),  // EOF | 316     MockRead(true, 0, 0),  // EOF | 
| 379   }; | 317   }; | 
| 380 | 318 | 
| 381   scoped_refptr<OrderedSocketData> data( | 319   scoped_refptr<OrderedSocketData> data( | 
| 382       new OrderedSocketData(reads, arraysize(reads), | 320       new OrderedSocketData(reads, arraysize(reads), | 
| 383                             writes, arraysize(writes))); | 321                             writes, arraysize(writes))); | 
| 384 | 322 | 
| 385   BoundNetLog log; | 323   BoundNetLog log; | 
| 386   TransactionHelperResult out; | 324   TransactionHelperResult out; | 
| 387   { | 325   { | 
| 388     SessionDependencies session_deps; | 326     SpdySessionDependencies session_deps; | 
| 389     HttpNetworkSession* session = CreateSession(&session_deps); | 327     HttpNetworkSession* session = | 
|  | 328         SpdySessionDependencies::SpdyCreateSession(&session_deps); | 
| 390     SpdySession::SetSSLMode(false); | 329     SpdySession::SetSSLMode(false); | 
| 391     scoped_ptr<SpdyNetworkTransaction> trans1( | 330     scoped_ptr<SpdyNetworkTransaction> trans1( | 
| 392         new SpdyNetworkTransaction(session)); | 331         new SpdyNetworkTransaction(session)); | 
| 393     scoped_ptr<SpdyNetworkTransaction> trans2( | 332     scoped_ptr<SpdyNetworkTransaction> trans2( | 
| 394         new SpdyNetworkTransaction(session)); | 333         new SpdyNetworkTransaction(session)); | 
| 395     scoped_ptr<SpdyNetworkTransaction> trans3( | 334     scoped_ptr<SpdyNetworkTransaction> trans3( | 
| 396         new SpdyNetworkTransaction(session)); | 335         new SpdyNetworkTransaction(session)); | 
| 397 | 336 | 
| 398     session_deps.socket_factory.AddSocketDataProvider(data); | 337     session_deps.socket_factory.AddSocketDataProvider(data); | 
| 399 | 338 | 
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 487     MockRead(true, 0, 0),  // EOF | 426     MockRead(true, 0, 0),  // EOF | 
| 488   }; | 427   }; | 
| 489 | 428 | 
| 490   scoped_refptr<OrderedSocketData> data( | 429   scoped_refptr<OrderedSocketData> data( | 
| 491       new OrderedSocketData(reads, arraysize(reads), | 430       new OrderedSocketData(reads, arraysize(reads), | 
| 492                             writes, arraysize(writes))); | 431                             writes, arraysize(writes))); | 
| 493 | 432 | 
| 494   BoundNetLog log; | 433   BoundNetLog log; | 
| 495   TransactionHelperResult out; | 434   TransactionHelperResult out; | 
| 496   { | 435   { | 
| 497     SessionDependencies session_deps; | 436     SpdySessionDependencies session_deps; | 
| 498     HttpNetworkSession* session = CreateSession(&session_deps); | 437     HttpNetworkSession* session = | 
|  | 438         SpdySessionDependencies::SpdyCreateSession(&session_deps); | 
| 499     SpdySession::SetSSLMode(false); | 439     SpdySession::SetSSLMode(false); | 
| 500     scoped_ptr<SpdyNetworkTransaction> trans1( | 440     scoped_ptr<SpdyNetworkTransaction> trans1( | 
| 501         new SpdyNetworkTransaction(session)); | 441         new SpdyNetworkTransaction(session)); | 
| 502     scoped_ptr<SpdyNetworkTransaction> trans2( | 442     scoped_ptr<SpdyNetworkTransaction> trans2( | 
| 503         new SpdyNetworkTransaction(session)); | 443         new SpdyNetworkTransaction(session)); | 
| 504     scoped_ptr<SpdyNetworkTransaction> trans3( | 444     scoped_ptr<SpdyNetworkTransaction> trans3( | 
| 505         new SpdyNetworkTransaction(session)); | 445         new SpdyNetworkTransaction(session)); | 
| 506 | 446 | 
| 507     session_deps.socket_factory.AddSocketDataProvider(data); | 447     session_deps.socket_factory.AddSocketDataProvider(data); | 
| 508 | 448 | 
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 621     MockRead(true, 0, 0),  // EOF | 561     MockRead(true, 0, 0),  // EOF | 
| 622   }; | 562   }; | 
| 623 | 563 | 
| 624   scoped_refptr<OrderedSocketData> data( | 564   scoped_refptr<OrderedSocketData> data( | 
| 625       new OrderedSocketData(reads, arraysize(reads), | 565       new OrderedSocketData(reads, arraysize(reads), | 
| 626                             writes, arraysize(writes))); | 566                             writes, arraysize(writes))); | 
| 627 | 567 | 
| 628   BoundNetLog log; | 568   BoundNetLog log; | 
| 629   TransactionHelperResult out; | 569   TransactionHelperResult out; | 
| 630   { | 570   { | 
| 631     SessionDependencies session_deps; | 571     SpdySessionDependencies session_deps; | 
| 632     HttpNetworkSession* session = CreateSession(&session_deps); | 572     HttpNetworkSession* session = | 
|  | 573         SpdySessionDependencies::SpdyCreateSession(&session_deps); | 
| 633     SpdySession::SetSSLMode(false); | 574     SpdySession::SetSSLMode(false); | 
| 634     scoped_ptr<SpdyNetworkTransaction> trans1( | 575     scoped_ptr<SpdyNetworkTransaction> trans1( | 
| 635         new SpdyNetworkTransaction(session)); | 576         new SpdyNetworkTransaction(session)); | 
| 636     scoped_ptr<SpdyNetworkTransaction> trans2( | 577     scoped_ptr<SpdyNetworkTransaction> trans2( | 
| 637         new SpdyNetworkTransaction(session)); | 578         new SpdyNetworkTransaction(session)); | 
| 638     scoped_ptr<SpdyNetworkTransaction> trans3( | 579     scoped_ptr<SpdyNetworkTransaction> trans3( | 
| 639         new SpdyNetworkTransaction(session)); | 580         new SpdyNetworkTransaction(session)); | 
| 640     scoped_ptr<SpdyNetworkTransaction> trans4( | 581     scoped_ptr<SpdyNetworkTransaction> trans4( | 
| 641         new SpdyNetworkTransaction(session)); | 582         new SpdyNetworkTransaction(session)); | 
| 642 | 583 | 
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 761     MockRead(true, 0, 0),  // EOF | 702     MockRead(true, 0, 0),  // EOF | 
| 762   }; | 703   }; | 
| 763 | 704 | 
| 764   scoped_refptr<OrderedSocketData> data( | 705   scoped_refptr<OrderedSocketData> data( | 
| 765       new OrderedSocketData(reads, arraysize(reads), | 706       new OrderedSocketData(reads, arraysize(reads), | 
| 766                             writes, arraysize(writes))); | 707                             writes, arraysize(writes))); | 
| 767 | 708 | 
| 768   BoundNetLog log; | 709   BoundNetLog log; | 
| 769   TransactionHelperResult out; | 710   TransactionHelperResult out; | 
| 770   { | 711   { | 
| 771     SessionDependencies session_deps; | 712     SpdySessionDependencies session_deps; | 
| 772     HttpNetworkSession* session = CreateSession(&session_deps); | 713     HttpNetworkSession* session = | 
|  | 714         SpdySessionDependencies::SpdyCreateSession(&session_deps); | 
| 773     SpdySession::SetSSLMode(false); | 715     SpdySession::SetSSLMode(false); | 
| 774     scoped_ptr<SpdyNetworkTransaction> trans1( | 716     scoped_ptr<SpdyNetworkTransaction> trans1( | 
| 775         new SpdyNetworkTransaction(session)); | 717         new SpdyNetworkTransaction(session)); | 
| 776     scoped_ptr<SpdyNetworkTransaction> trans2( | 718     scoped_ptr<SpdyNetworkTransaction> trans2( | 
| 777         new SpdyNetworkTransaction(session)); | 719         new SpdyNetworkTransaction(session)); | 
| 778     scoped_ptr<SpdyNetworkTransaction> trans3( | 720     scoped_ptr<SpdyNetworkTransaction> trans3( | 
| 779         new SpdyNetworkTransaction(session)); | 721         new SpdyNetworkTransaction(session)); | 
| 780 | 722 | 
| 781     session_deps.socket_factory.AddSocketDataProvider(data); | 723     session_deps.socket_factory.AddSocketDataProvider(data); | 
| 782 | 724 | 
| (...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 993   EXPECT_TRUE(response->was_fetched_via_spdy); | 935   EXPECT_TRUE(response->was_fetched_via_spdy); | 
| 994   std::string response_data; | 936   std::string response_data; | 
| 995   rv = ReadTransaction(trans, &response_data); | 937   rv = ReadTransaction(trans, &response_data); | 
| 996   EXPECT_EQ(ERR_SPDY_PROTOCOL_ERROR, rv); | 938   EXPECT_EQ(ERR_SPDY_PROTOCOL_ERROR, rv); | 
| 997 | 939 | 
| 998   helper.VerifyDataConsumed(); | 940   helper.VerifyDataConsumed(); | 
| 999 } | 941 } | 
| 1000 | 942 | 
| 1001 // Test that WINDOW_UPDATE frames change window_size correctly. | 943 // Test that WINDOW_UPDATE frames change window_size correctly. | 
| 1002 TEST_F(SpdyNetworkTransactionTest, WindowUpdate) { | 944 TEST_F(SpdyNetworkTransactionTest, WindowUpdate) { | 
| 1003   SessionDependencies session_deps; | 945   SpdySessionDependencies session_deps; | 
| 1004   scoped_refptr<HttpNetworkSession> session = CreateSession(&session_deps); | 946   scoped_refptr<HttpNetworkSession> session = | 
|  | 947       SpdySessionDependencies::SpdyCreateSession(&session_deps); | 
| 1005 | 948 | 
| 1006   // We disable SSL for this test. | 949   // We disable SSL for this test. | 
| 1007   SpdySession::SetSSLMode(false); | 950   SpdySession::SetSSLMode(false); | 
| 1008 | 951 | 
| 1009   // Setup the request | 952   // Setup the request | 
| 1010   static const char upload[] = { "hello!" }; | 953   static const char upload[] = { "hello!" }; | 
| 1011   HttpRequestInfo request; | 954   HttpRequestInfo request; | 
| 1012   request.method = "POST"; | 955   request.method = "POST"; | 
| 1013   request.url = GURL("http://www.google.com/"); | 956   request.url = GURL("http://www.google.com/"); | 
| 1014   request.upload_data = new UploadData(); | 957   request.upload_data = new UploadData(); | 
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1055   ASSERT_TRUE(trans->stream_ != NULL); | 998   ASSERT_TRUE(trans->stream_ != NULL); | 
| 1056   ASSERT_TRUE(trans->stream_->stream() != NULL); | 999   ASSERT_TRUE(trans->stream_->stream() != NULL); | 
| 1057   EXPECT_EQ(spdy::kInitialWindowSize + kDeltaWindowSize, | 1000   EXPECT_EQ(spdy::kInitialWindowSize + kDeltaWindowSize, | 
| 1058             trans->stream_->stream()->window_size()); | 1001             trans->stream_->stream()->window_size()); | 
| 1059   EXPECT_TRUE(data->at_read_eof()); | 1002   EXPECT_TRUE(data->at_read_eof()); | 
| 1060   EXPECT_TRUE(data->at_write_eof()); | 1003   EXPECT_TRUE(data->at_write_eof()); | 
| 1061 } | 1004 } | 
| 1062 | 1005 | 
| 1063 // Test that WINDOW_UPDATE frame causing overflow is handled correctly. | 1006 // Test that WINDOW_UPDATE frame causing overflow is handled correctly. | 
| 1064 TEST_F(SpdyNetworkTransactionTest, WindowUpdateOverflow) { | 1007 TEST_F(SpdyNetworkTransactionTest, WindowUpdateOverflow) { | 
| 1065   SessionDependencies session_deps; | 1008   SpdySessionDependencies session_deps; | 
| 1066   scoped_refptr<HttpNetworkSession> session = CreateSession(&session_deps); | 1009   scoped_refptr<HttpNetworkSession> session = | 
|  | 1010       SpdySessionDependencies::SpdyCreateSession(&session_deps); | 
| 1067 | 1011 | 
| 1068   // We disable SSL for this test. | 1012   // We disable SSL for this test. | 
| 1069   SpdySession::SetSSLMode(false); | 1013   SpdySession::SetSSLMode(false); | 
| 1070 | 1014 | 
| 1071   // Setup the request | 1015   // Setup the request | 
| 1072   static const char upload[] = { "hello!" }; | 1016   static const char upload[] = { "hello!" }; | 
| 1073   HttpRequestInfo request; | 1017   HttpRequestInfo request; | 
| 1074   request.method = "POST"; | 1018   request.method = "POST"; | 
| 1075   request.url = GURL("http://www.google.com/"); | 1019   request.url = GURL("http://www.google.com/"); | 
| 1076   request.upload_data = new UploadData(); | 1020   request.upload_data = new UploadData(); | 
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1149                                      BoundNetLog()); | 1093                                      BoundNetLog()); | 
| 1150   helper.AddData(&data); | 1094   helper.AddData(&data); | 
| 1151   helper.RunPreTestSetup(); | 1095   helper.RunPreTestSetup(); | 
| 1152   HttpNetworkTransaction* trans = helper.trans(); | 1096   HttpNetworkTransaction* trans = helper.trans(); | 
| 1153 | 1097 | 
| 1154   TestCompletionCallback callback; | 1098   TestCompletionCallback callback; | 
| 1155   int rv = trans->Start(&CreateGetRequest(), &callback, BoundNetLog()); | 1099   int rv = trans->Start(&CreateGetRequest(), &callback, BoundNetLog()); | 
| 1156   EXPECT_EQ(ERR_IO_PENDING, rv); | 1100   EXPECT_EQ(ERR_IO_PENDING, rv); | 
| 1157   helper.ResetTrans();  // Cancel the transaction. | 1101   helper.ResetTrans();  // Cancel the transaction. | 
| 1158 | 1102 | 
| 1159   // Flush the MessageLoop while the SessionDependencies (in particular, the | 1103   // Flush the MessageLoop while the SpdySessionDependencies (in particular, the | 
| 1160   // MockClientSocketFactory) are still alive. | 1104   // MockClientSocketFactory) are still alive. | 
| 1161   MessageLoop::current()->RunAllPending(); | 1105   MessageLoop::current()->RunAllPending(); | 
| 1162   helper.VerifyDataNotConsumed(); | 1106   helper.VerifyDataNotConsumed(); | 
| 1163 } | 1107 } | 
| 1164 | 1108 | 
| 1165 class SpdyNetworkTransactionTest::StartTransactionCallback | 1109 class SpdyNetworkTransactionTest::StartTransactionCallback | 
| 1166     : public CallbackRunner< Tuple1<int> > { | 1110     : public CallbackRunner< Tuple1<int> > { | 
| 1167  public: | 1111  public: | 
| 1168   explicit StartTransactionCallback( | 1112   explicit StartTransactionCallback( | 
| 1169       scoped_refptr<HttpNetworkSession>& session, | 1113       scoped_refptr<HttpNetworkSession>& session, | 
| (...skipping 713 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1883     } | 1827     } | 
| 1884     if (rv > 0) { | 1828     if (rv > 0) { | 
| 1885       content.append(buf->data(), rv); | 1829       content.append(buf->data(), rv); | 
| 1886     } else if (rv < 0) { | 1830     } else if (rv < 0) { | 
| 1887       NOTREACHED(); | 1831       NOTREACHED(); | 
| 1888     } | 1832     } | 
| 1889   } while (rv > 0); | 1833   } while (rv > 0); | 
| 1890 | 1834 | 
| 1891   out.response_data.swap(content); | 1835   out.response_data.swap(content); | 
| 1892 | 1836 | 
| 1893   // Flush the MessageLoop while the SessionDependencies (in particular, the | 1837   // Flush the MessageLoop while the SpdySessionDependencies (in particular, the | 
| 1894   // MockClientSocketFactory) are still alive. | 1838   // MockClientSocketFactory) are still alive. | 
| 1895   MessageLoop::current()->RunAllPending(); | 1839   MessageLoop::current()->RunAllPending(); | 
| 1896 | 1840 | 
| 1897   // Verify that we consumed all test data. | 1841   // Verify that we consumed all test data. | 
| 1898   helper.VerifyDataConsumed(); | 1842   helper.VerifyDataConsumed(); | 
| 1899 | 1843 | 
| 1900   EXPECT_EQ(OK, out.rv); | 1844   EXPECT_EQ(OK, out.rv); | 
| 1901   EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); | 1845   EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); | 
| 1902   EXPECT_EQ("goodbye world", out.response_data); | 1846   EXPECT_EQ("goodbye world", out.response_data); | 
| 1903 } | 1847 } | 
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2047     } else if (rv < 0) { | 1991     } else if (rv < 0) { | 
| 2048       FAIL() << "Unexpected read error: " << rv; | 1992       FAIL() << "Unexpected read error: " << rv; | 
| 2049     } | 1993     } | 
| 2050     reads_completed++; | 1994     reads_completed++; | 
| 2051   } while (rv > 0); | 1995   } while (rv > 0); | 
| 2052 | 1996 | 
| 2053   EXPECT_EQ(3, reads_completed);  // Reads are: 14 bytes, 14 bytes, 0 bytes. | 1997   EXPECT_EQ(3, reads_completed);  // Reads are: 14 bytes, 14 bytes, 0 bytes. | 
| 2054 | 1998 | 
| 2055   out.response_data.swap(content); | 1999   out.response_data.swap(content); | 
| 2056 | 2000 | 
| 2057   // Flush the MessageLoop while the SessionDependencies (in particular, the | 2001   // Flush the MessageLoop while the SpdySessionDependencies (in particular, the | 
| 2058   // MockClientSocketFactory) are still alive. | 2002   // MockClientSocketFactory) are still alive. | 
| 2059   MessageLoop::current()->RunAllPending(); | 2003   MessageLoop::current()->RunAllPending(); | 
| 2060 | 2004 | 
| 2061   // Verify that we consumed all test data. | 2005   // Verify that we consumed all test data. | 
| 2062   helper.VerifyDataConsumed(); | 2006   helper.VerifyDataConsumed(); | 
| 2063 | 2007 | 
| 2064   EXPECT_EQ(OK, out.rv); | 2008   EXPECT_EQ(OK, out.rv); | 
| 2065   EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); | 2009   EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); | 
| 2066   EXPECT_EQ("messagemessagemessagemessage", out.response_data); | 2010   EXPECT_EQ("messagemessagemessagemessage", out.response_data); | 
| 2067 } | 2011 } | 
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2138     } else if (rv < 0) { | 2082     } else if (rv < 0) { | 
| 2139       FAIL() << "Unexpected read error: " << rv; | 2083       FAIL() << "Unexpected read error: " << rv; | 
| 2140     } | 2084     } | 
| 2141     reads_completed++; | 2085     reads_completed++; | 
| 2142   } while (rv > 0); | 2086   } while (rv > 0); | 
| 2143 | 2087 | 
| 2144   EXPECT_EQ(3, reads_completed); | 2088   EXPECT_EQ(3, reads_completed); | 
| 2145 | 2089 | 
| 2146   out.response_data.swap(content); | 2090   out.response_data.swap(content); | 
| 2147 | 2091 | 
| 2148   // Flush the MessageLoop while the SessionDependencies (in particular, the | 2092   // Flush the MessageLoop while the SpdySessionDependencies (in particular, the | 
| 2149   // MockClientSocketFactory) are still alive. | 2093   // MockClientSocketFactory) are still alive. | 
| 2150   MessageLoop::current()->RunAllPending(); | 2094   MessageLoop::current()->RunAllPending(); | 
| 2151 | 2095 | 
| 2152   // Verify that we consumed all test data. | 2096   // Verify that we consumed all test data. | 
| 2153   helper.VerifyDataConsumed(); | 2097   helper.VerifyDataConsumed(); | 
| 2154 | 2098 | 
| 2155   EXPECT_EQ(OK, out.rv); | 2099   EXPECT_EQ(OK, out.rv); | 
| 2156   EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); | 2100   EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); | 
| 2157   EXPECT_EQ("messagemessagemessagemessage", out.response_data); | 2101   EXPECT_EQ("messagemessagemessagemessage", out.response_data); | 
| 2158 } | 2102 } | 
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2232       EXPECT_EQ(ERR_CONNECTION_CLOSED, rv); | 2176       EXPECT_EQ(ERR_CONNECTION_CLOSED, rv); | 
| 2233       break; | 2177       break; | 
| 2234     } | 2178     } | 
| 2235     reads_completed++; | 2179     reads_completed++; | 
| 2236   } while (rv > 0); | 2180   } while (rv > 0); | 
| 2237 | 2181 | 
| 2238   EXPECT_EQ(0, reads_completed); | 2182   EXPECT_EQ(0, reads_completed); | 
| 2239 | 2183 | 
| 2240   out.response_data.swap(content); | 2184   out.response_data.swap(content); | 
| 2241 | 2185 | 
| 2242   // Flush the MessageLoop while the SessionDependencies (in particular, the | 2186   // Flush the MessageLoop while the SpdySessionDependencies (in particular, the | 
| 2243   // MockClientSocketFactory) are still alive. | 2187   // MockClientSocketFactory) are still alive. | 
| 2244   MessageLoop::current()->RunAllPending(); | 2188   MessageLoop::current()->RunAllPending(); | 
| 2245 | 2189 | 
| 2246   // Verify that we consumed all test data. | 2190   // Verify that we consumed all test data. | 
| 2247   helper.VerifyDataConsumed(); | 2191   helper.VerifyDataConsumed(); | 
| 2248 } | 2192 } | 
| 2249 | 2193 | 
| 2250 // Verify the case where we buffer data and cancel the transaction. | 2194 // Verify the case where we buffer data and cancel the transaction. | 
| 2251 TEST_F(SpdyNetworkTransactionTest, BufferedCancelled) { | 2195 TEST_F(SpdyNetworkTransactionTest, BufferedCancelled) { | 
| 2252   spdy::SpdyFramer framer; | 2196   spdy::SpdyFramer framer; | 
| (...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2581   EXPECT_TRUE(response->headers != NULL); | 2525   EXPECT_TRUE(response->headers != NULL); | 
| 2582   EXPECT_TRUE(response->was_fetched_via_spdy); | 2526   EXPECT_TRUE(response->was_fetched_via_spdy); | 
| 2583   out.rv = ReadTransaction(trans, &out.response_data); | 2527   out.rv = ReadTransaction(trans, &out.response_data); | 
| 2584   EXPECT_EQ(ERR_CONNECTION_CLOSED, out.rv); | 2528   EXPECT_EQ(ERR_CONNECTION_CLOSED, out.rv); | 
| 2585 | 2529 | 
| 2586   // Verify that we consumed all test data. | 2530   // Verify that we consumed all test data. | 
| 2587   helper.VerifyDataConsumed(); | 2531   helper.VerifyDataConsumed(); | 
| 2588 } | 2532 } | 
| 2589 | 2533 | 
| 2590 }  // namespace net | 2534 }  // namespace net | 
| OLD | NEW | 
|---|