| Index: net/url_request/url_request_http_job_unittest.cc
|
| diff --git a/net/url_request/url_request_http_job_unittest.cc b/net/url_request/url_request_http_job_unittest.cc
|
| index 5ca046fe9c158bdc78f5d3822e8e9f1706fe1387..968027c9e49902c201c01b7f193a9758eaf8ec16 100644
|
| --- a/net/url_request/url_request_http_job_unittest.cc
|
| +++ b/net/url_request/url_request_http_job_unittest.cc
|
| @@ -92,6 +92,114 @@ class URLRequestHttpJobTest : public ::testing::Test {
|
| scoped_ptr<URLRequest> req_;
|
| };
|
|
|
| +class URLRequestHttpJobBackoffTest : public ::testing::Test {
|
| + protected:
|
| + URLRequestHttpJobBackoffTest() : context_(new TestURLRequestContext(true)) {
|
| + context_->set_client_socket_factory(&socket_factory_);
|
| + context_->set_network_delegate(&network_delegate_);
|
| + context_->set_backoff_manager(&manager_);
|
| + context_->Init();
|
| + }
|
| +
|
| + MockClientSocketFactory socket_factory_;
|
| + TestNetworkDelegate network_delegate_;
|
| + URLRequestBackoffManager manager_;
|
| + scoped_ptr<TestURLRequestContext> context_;
|
| +};
|
| +
|
| +TEST_F(URLRequestHttpJobBackoffTest, BackoffHeader) {
|
| + MockWrite writes[] = {MockWrite(
|
| + "GET / HTTP/1.1\r\n"
|
| + "Host: www.example.com\r\n"
|
| + "Connection: keep-alive\r\n"
|
| + "User-Agent:\r\n"
|
| + "Accept-Encoding: gzip, deflate\r\n"
|
| + "Accept-Language: en-us,fr\r\n\r\n")};
|
| + MockRead reads[] = {MockRead(
|
| + "HTTP/1.1 200 OK\r\n"
|
| + "Backoff: 3600\r\n"
|
| + "Content-Length: 9\r\n\r\n"),
|
| + MockRead("test.html")};
|
| +
|
| + StaticSocketDataProvider socket_data(reads, arraysize(reads), writes,
|
| + arraysize(writes));
|
| + socket_factory_.AddSocketDataProvider(&socket_data);
|
| +
|
| + TestDelegate delegate1;
|
| + scoped_ptr<URLRequest> request1 =
|
| + context_->CreateRequest(GURL("http://www.example.com"), DEFAULT_PRIORITY,
|
| + &delegate1).Pass();
|
| +
|
| + request1->Start();
|
| + ASSERT_TRUE(request1->is_pending());
|
| + base::RunLoop().Run();
|
| +
|
| + EXPECT_TRUE(request1->status().is_success());
|
| + EXPECT_EQ("test.html", delegate1.data_received());
|
| + EXPECT_EQ(1, delegate1.received_before_network_start_count());
|
| +
|
| + // Issue another request, and backoff logic should apply.
|
| + TestDelegate delegate2;
|
| + scoped_ptr<URLRequest> request2 =
|
| + context_->CreateRequest(GURL("http://www.example.com"), DEFAULT_PRIORITY,
|
| + &delegate2).Pass();
|
| +
|
| + request2->Start();
|
| + ASSERT_TRUE(request2->is_pending());
|
| + base::RunLoop().Run();
|
| +
|
| + EXPECT_FALSE(request2->status().is_success());
|
| + EXPECT_EQ(ERR_TEMPORARY_BACKOFF, request2->status().error());
|
| + EXPECT_EQ(0, delegate2.received_before_network_start_count());
|
| +}
|
| +
|
| +TEST_F(URLRequestHttpJobBackoffTest, BackoffHeaderCachedResponse) {
|
| + MockWrite writes[] = {MockWrite(
|
| + "GET / HTTP/1.1\r\n"
|
| + "Host: www.example.com\r\n"
|
| + "Connection: keep-alive\r\n"
|
| + "User-Agent:\r\n"
|
| + "Accept-Encoding: gzip, deflate\r\n"
|
| + "Accept-Language: en-us,fr\r\n\r\n")};
|
| + MockRead reads[] = {MockRead(
|
| + "HTTP/1.1 200 OK\r\n"
|
| + "Backoff: 3600\r\n"
|
| + "Cache-Control: max-age=120\r\n"
|
| + "Content-Length: 9\r\n\r\n"),
|
| + MockRead("test.html")};
|
| +
|
| + StaticSocketDataProvider socket_data(reads, arraysize(reads), writes,
|
| + arraysize(writes));
|
| + socket_factory_.AddSocketDataProvider(&socket_data);
|
| +
|
| + TestDelegate delegate1;
|
| + scoped_ptr<URLRequest> request1 =
|
| + context_->CreateRequest(GURL("http://www.example.com"), DEFAULT_PRIORITY,
|
| + &delegate1).Pass();
|
| +
|
| + request1->Start();
|
| + ASSERT_TRUE(request1->is_pending());
|
| + base::RunLoop().Run();
|
| +
|
| + EXPECT_TRUE(request1->status().is_success());
|
| + EXPECT_EQ("test.html", delegate1.data_received());
|
| + EXPECT_EQ(1, delegate1.received_before_network_start_count());
|
| +
|
| + // Backoff logic does not apply to a second request, since it is fetched
|
| + // from cache.
|
| + TestDelegate delegate2;
|
| + scoped_ptr<URLRequest> request2 =
|
| + context_->CreateRequest(GURL("http://www.example.com"), DEFAULT_PRIORITY,
|
| + &delegate2).Pass();
|
| +
|
| + request2->Start();
|
| + ASSERT_TRUE(request2->is_pending());
|
| + base::RunLoop().Run();
|
| + EXPECT_TRUE(request2->was_cached());
|
| + EXPECT_TRUE(request2->status().is_success());
|
| + EXPECT_EQ(0, delegate2.received_before_network_start_count());
|
| +}
|
| +
|
| // Make sure that SetPriority actually sets the URLRequestHttpJob's
|
| // priority, both before and after start.
|
| TEST_F(URLRequestHttpJobTest, SetPriorityBasic) {
|
|
|