Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(246)

Unified Diff: net/url_request/url_request_http_job_unittest.cc

Issue 1153093002: Implement URLRequestBackoffManager for managing Backoff headers (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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) {
« net/url_request/url_request_context_builder.cc ('K') | « net/url_request/url_request_http_job.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698