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

Unified Diff: net/http/http_response_headers_unittest.cc

Issue 154243006: Add GetExpirationTimes() to HttpResponseHeader. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: move a function body Created 4 years, 8 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/http/http_response_headers_unittest.cc
diff --git a/net/http/http_response_headers_unittest.cc b/net/http/http_response_headers_unittest.cc
index a9567c6512a4333cda0ff0f86a302b921c39fa58..f47da3877ad27d8766ea29b5d6a755bdfab21824 100644
--- a/net/http/http_response_headers_unittest.cc
+++ b/net/http/http_response_headers_unittest.cc
@@ -765,18 +765,23 @@ INSTANTIATE_TEST_CASE_P(HttpResponseHeaders,
ContentTypeTest,
testing::ValuesIn(mimetype_tests));
-struct RequiresValidationTestData {
+enum TestValidationType {
+ TEST_VALIDATION_NONE,
+ TEST_VALIDATION_ASYNCHRONOUS,
+ TEST_VALIDATION_SYNCHRONOUS,
+};
+
+struct ExpirationTimesTestData {
const char* headers;
- ValidationType validation_type;
+ TestValidationType validation_type;
};
-class RequiresValidationTest
+class ExpirationTimesTest
: public HttpResponseHeadersTest,
- public ::testing::WithParamInterface<RequiresValidationTestData> {
-};
+ public ::testing::WithParamInterface<ExpirationTimesTestData> {};
-TEST_P(RequiresValidationTest, RequiresValidation) {
- const RequiresValidationTestData test = GetParam();
+TEST_P(ExpirationTimesTest, ExpirationTimes) {
+ const ExpirationTimesTestData test = GetParam();
base::Time request_time, response_time, current_time;
base::Time::FromString("Wed, 28 Nov 2007 00:40:09 GMT", &request_time);
@@ -787,204 +792,185 @@ TEST_P(RequiresValidationTest, RequiresValidation) {
HeadersToRaw(&headers);
scoped_refptr<HttpResponseHeaders> parsed(new HttpResponseHeaders(headers));
- ValidationType validation_type =
- parsed->RequiresValidation(request_time, response_time, current_time);
+ HttpResponseHeaders::ExpirationTimes expiration_times =
+ parsed->GetExpirationTimes(request_time, response_time);
+ TestValidationType validation_type;
+ if (current_time < expiration_times.GetExpirationTime())
+ validation_type = TEST_VALIDATION_NONE;
+ else if (current_time < expiration_times.GetAsyncExpirationTime())
+ validation_type = TEST_VALIDATION_ASYNCHRONOUS;
+ else
+ validation_type = TEST_VALIDATION_SYNCHRONOUS;
EXPECT_EQ(test.validation_type, validation_type);
}
-const struct RequiresValidationTestData requires_validation_tests[] = {
- // No expiry info: expires immediately.
- { "HTTP/1.1 200 OK\n"
- "\n",
- VALIDATION_SYNCHRONOUS
- },
- // No expiry info: expires immediately.
- { "HTTP/1.1 200 OK\n"
- "\n",
- VALIDATION_SYNCHRONOUS
- },
- // Valid for a little while.
- { "HTTP/1.1 200 OK\n"
- "cache-control: max-age=10000\n"
- "\n",
- VALIDATION_NONE
- },
- // Expires in the future.
- { "HTTP/1.1 200 OK\n"
- "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
- "expires: Wed, 28 Nov 2007 01:00:00 GMT\n"
- "\n",
- VALIDATION_NONE
- },
- // Already expired.
- { "HTTP/1.1 200 OK\n"
- "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
- "expires: Wed, 28 Nov 2007 00:00:00 GMT\n"
- "\n",
- VALIDATION_SYNCHRONOUS
- },
- // Max-age trumps expires.
- { "HTTP/1.1 200 OK\n"
- "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
- "expires: Wed, 28 Nov 2007 00:00:00 GMT\n"
- "cache-control: max-age=10000\n"
- "\n",
- VALIDATION_NONE
- },
- // Last-modified heuristic: modified a while ago.
- { "HTTP/1.1 200 OK\n"
- "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
- "last-modified: Wed, 27 Nov 2007 08:00:00 GMT\n"
- "\n",
- VALIDATION_NONE
- },
- { "HTTP/1.1 203 Non-Authoritative Information\n"
- "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
- "last-modified: Wed, 27 Nov 2007 08:00:00 GMT\n"
- "\n",
- VALIDATION_NONE
- },
- { "HTTP/1.1 206 Partial Content\n"
- "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
- "last-modified: Wed, 27 Nov 2007 08:00:00 GMT\n"
- "\n",
- VALIDATION_NONE
- },
- // Last-modified heuristic: modified recently.
- { "HTTP/1.1 200 OK\n"
- "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
- "last-modified: Wed, 28 Nov 2007 00:40:10 GMT\n"
- "\n",
- VALIDATION_SYNCHRONOUS
- },
- { "HTTP/1.1 203 Non-Authoritative Information\n"
- "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
- "last-modified: Wed, 28 Nov 2007 00:40:10 GMT\n"
- "\n",
- VALIDATION_SYNCHRONOUS
- },
- { "HTTP/1.1 206 Partial Content\n"
- "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
- "last-modified: Wed, 28 Nov 2007 00:40:10 GMT\n"
- "\n",
- VALIDATION_SYNCHRONOUS
- },
- // Cached permanent redirect.
- { "HTTP/1.1 301 Moved Permanently\n"
- "\n",
- VALIDATION_NONE
- },
- // Another cached permanent redirect.
- { "HTTP/1.1 308 Permanent Redirect\n"
- "\n",
- VALIDATION_NONE
- },
- // Cached redirect: not reusable even though by default it would be.
- { "HTTP/1.1 300 Multiple Choices\n"
- "Cache-Control: no-cache\n"
- "\n",
- VALIDATION_SYNCHRONOUS
- },
- // Cached forever by default.
- { "HTTP/1.1 410 Gone\n"
- "\n",
- VALIDATION_NONE
- },
- // Cached temporary redirect: not reusable.
- { "HTTP/1.1 302 Found\n"
- "\n",
- VALIDATION_SYNCHRONOUS
- },
- // Cached temporary redirect: reusable.
- { "HTTP/1.1 302 Found\n"
- "cache-control: max-age=10000\n"
- "\n",
- VALIDATION_NONE
- },
- // Cache-control: max-age=N overrides expires: date in the past.
- { "HTTP/1.1 200 OK\n"
- "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
- "expires: Wed, 28 Nov 2007 00:20:11 GMT\n"
- "cache-control: max-age=10000\n"
- "\n",
- VALIDATION_NONE
- },
- // Cache-control: no-store overrides expires: in the future.
- { "HTTP/1.1 200 OK\n"
- "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
- "expires: Wed, 29 Nov 2007 00:40:11 GMT\n"
- "cache-control: no-store,private,no-cache=\"foo\"\n"
- "\n",
- VALIDATION_SYNCHRONOUS
- },
- // Pragma: no-cache overrides last-modified heuristic.
- { "HTTP/1.1 200 OK\n"
- "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
- "last-modified: Wed, 27 Nov 2007 08:00:00 GMT\n"
- "pragma: no-cache\n"
- "\n",
- VALIDATION_SYNCHRONOUS
- },
- // max-age has expired, needs synchronous revalidation
- { "HTTP/1.1 200 OK\n"
- "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
- "cache-control: max-age=300\n"
- "\n",
- VALIDATION_SYNCHRONOUS
- },
- // max-age has expired, stale-while-revalidate has not, eligible for
- // asynchronous revalidation
- { "HTTP/1.1 200 OK\n"
- "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
- "cache-control: max-age=300, stale-while-revalidate=3600\n"
- "\n",
- VALIDATION_ASYNCHRONOUS
- },
- // max-age and stale-while-revalidate have expired, needs synchronous
- // revalidation
- { "HTTP/1.1 200 OK\n"
- "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
- "cache-control: max-age=300, stale-while-revalidate=5\n"
- "\n",
- VALIDATION_SYNCHRONOUS
- },
- // max-age is 0, stale-while-revalidate is large enough to permit
- // asynchronous revalidation
- { "HTTP/1.1 200 OK\n"
- "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
- "cache-control: max-age=0, stale-while-revalidate=360\n"
- "\n",
- VALIDATION_ASYNCHRONOUS
- },
- // stale-while-revalidate must not override no-cache or similar directives.
- { "HTTP/1.1 200 OK\n"
- "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
- "cache-control: no-cache, stale-while-revalidate=360\n"
- "\n",
- VALIDATION_SYNCHRONOUS
- },
- // max-age has not expired, so no revalidation is needed.
- { "HTTP/1.1 200 OK\n"
- "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
- "cache-control: max-age=3600, stale-while-revalidate=3600\n"
- "\n",
- VALIDATION_NONE
- },
- // must-revalidate overrides stale-while-revalidate, so synchronous validation
- // is needed.
- { "HTTP/1.1 200 OK\n"
- "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
- "cache-control: must-revalidate, max-age=300, stale-while-revalidate=3600\n"
- "\n",
- VALIDATION_SYNCHRONOUS
- },
+const struct ExpirationTimesTestData expiration_times_tests[] = {
+ // No expiry info: expires immediately.
+ {"HTTP/1.1 200 OK\n"
+ "\n",
+ TEST_VALIDATION_SYNCHRONOUS},
+ // No expiry info: expires immediately.
+ {"HTTP/1.1 200 OK\n"
+ "\n",
+ TEST_VALIDATION_SYNCHRONOUS},
+ // Valid for a little while.
+ {"HTTP/1.1 200 OK\n"
+ "cache-control: max-age=10000\n"
+ "\n",
+ TEST_VALIDATION_NONE},
+ // Expires in the future.
+ {"HTTP/1.1 200 OK\n"
+ "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
+ "expires: Wed, 28 Nov 2007 01:00:00 GMT\n"
+ "\n",
+ TEST_VALIDATION_NONE},
+ // Already expired.
+ {"HTTP/1.1 200 OK\n"
+ "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
+ "expires: Wed, 28 Nov 2007 00:00:00 GMT\n"
+ "\n",
+ TEST_VALIDATION_SYNCHRONOUS},
+ // Max-age trumps expires.
+ {"HTTP/1.1 200 OK\n"
+ "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
+ "expires: Wed, 28 Nov 2007 00:00:00 GMT\n"
+ "cache-control: max-age=10000\n"
+ "\n",
+ TEST_VALIDATION_NONE},
+ // Last-modified heuristic: modified a while ago.
+ {"HTTP/1.1 200 OK\n"
+ "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
+ "last-modified: Wed, 27 Nov 2007 08:00:00 GMT\n"
+ "\n",
+ TEST_VALIDATION_NONE},
+ {"HTTP/1.1 203 Non-Authoritative Information\n"
+ "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
+ "last-modified: Wed, 27 Nov 2007 08:00:00 GMT\n"
+ "\n",
+ TEST_VALIDATION_NONE},
+ {"HTTP/1.1 206 Partial Content\n"
+ "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
+ "last-modified: Wed, 27 Nov 2007 08:00:00 GMT\n"
+ "\n",
+ TEST_VALIDATION_NONE},
+ // Last-modified heuristic: modified recently.
+ {"HTTP/1.1 200 OK\n"
+ "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
+ "last-modified: Wed, 28 Nov 2007 00:40:10 GMT\n"
+ "\n",
+ TEST_VALIDATION_SYNCHRONOUS},
+ {"HTTP/1.1 203 Non-Authoritative Information\n"
+ "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
+ "last-modified: Wed, 28 Nov 2007 00:40:10 GMT\n"
+ "\n",
+ TEST_VALIDATION_SYNCHRONOUS},
+ {"HTTP/1.1 206 Partial Content\n"
+ "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
+ "last-modified: Wed, 28 Nov 2007 00:40:10 GMT\n"
+ "\n",
+ TEST_VALIDATION_SYNCHRONOUS},
+ // Cached permanent redirect.
+ {"HTTP/1.1 301 Moved Permanently\n"
+ "\n",
+ TEST_VALIDATION_NONE},
+ // Another cached permanent redirect.
+ {"HTTP/1.1 308 Permanent Redirect\n"
+ "\n",
+ TEST_VALIDATION_NONE},
+ // Cached redirect: not reusable even though by default it would be.
+ {"HTTP/1.1 300 Multiple Choices\n"
+ "Cache-Control: no-cache\n"
+ "\n",
+ TEST_VALIDATION_SYNCHRONOUS},
+ // Cached forever by default.
+ {"HTTP/1.1 410 Gone\n"
+ "\n",
+ TEST_VALIDATION_NONE},
+ // Cached temporary redirect: not reusable.
+ {"HTTP/1.1 302 Found\n"
+ "\n",
+ TEST_VALIDATION_SYNCHRONOUS},
+ // Cached temporary redirect: reusable.
+ {"HTTP/1.1 302 Found\n"
+ "cache-control: max-age=10000\n"
+ "\n",
+ TEST_VALIDATION_NONE},
+ // Cache-control: max-age=N overrides expires: date in the past.
+ {"HTTP/1.1 200 OK\n"
+ "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
+ "expires: Wed, 28 Nov 2007 00:20:11 GMT\n"
+ "cache-control: max-age=10000\n"
+ "\n",
+ TEST_VALIDATION_NONE},
+ // Cache-control: no-store overrides expires: in the future.
+ {"HTTP/1.1 200 OK\n"
+ "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
+ "expires: Wed, 29 Nov 2007 00:40:11 GMT\n"
+ "cache-control: no-store,private,no-cache=\"foo\"\n"
+ "\n",
+ TEST_VALIDATION_SYNCHRONOUS},
+ // Pragma: no-cache overrides last-modified heuristic.
+ {"HTTP/1.1 200 OK\n"
+ "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
+ "last-modified: Wed, 27 Nov 2007 08:00:00 GMT\n"
+ "pragma: no-cache\n"
+ "\n",
+ TEST_VALIDATION_SYNCHRONOUS},
+ // max-age has expired, needs synchronous revalidation
+ {"HTTP/1.1 200 OK\n"
+ "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
+ "cache-control: max-age=300\n"
+ "\n",
+ TEST_VALIDATION_SYNCHRONOUS},
+ // max-age has expired, stale-while-revalidate has not, eligible for
+ // asynchronous revalidation
+ {"HTTP/1.1 200 OK\n"
+ "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
+ "cache-control: max-age=300, stale-while-revalidate=3600\n"
+ "\n",
+ TEST_VALIDATION_ASYNCHRONOUS},
+ // max-age and stale-while-revalidate have expired, needs synchronous
+ // revalidation
+ {"HTTP/1.1 200 OK\n"
+ "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
+ "cache-control: max-age=300, stale-while-revalidate=5\n"
+ "\n",
+ TEST_VALIDATION_SYNCHRONOUS},
+ // max-age is 0, stale-while-revalidate is large enough to permit
+ // asynchronous revalidation
+ {"HTTP/1.1 200 OK\n"
+ "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
+ "cache-control: max-age=0, stale-while-revalidate=360\n"
+ "\n",
+ TEST_VALIDATION_ASYNCHRONOUS},
+ // stale-while-revalidate must not override no-cache or similar directives.
+ {"HTTP/1.1 200 OK\n"
+ "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
+ "cache-control: no-cache, stale-while-revalidate=360\n"
+ "\n",
+ TEST_VALIDATION_SYNCHRONOUS},
+ // max-age has not expired, so no revalidation is needed.
+ {"HTTP/1.1 200 OK\n"
+ "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
+ "cache-control: max-age=3600, stale-while-revalidate=3600\n"
+ "\n",
+ TEST_VALIDATION_NONE},
+ // must-revalidate overrides stale-while-revalidate, so synchronous
+ // validation
+ // is needed.
+ {"HTTP/1.1 200 OK\n"
+ "date: Wed, 28 Nov 2007 00:40:11 GMT\n"
+ "cache-control: must-revalidate, max-age=300, "
+ "stale-while-revalidate=3600\n"
+ "\n",
+ TEST_VALIDATION_SYNCHRONOUS},
- // TODO(darin): Add many many more tests here.
+ // TODO(darin): Add many many more tests here.
};
INSTANTIATE_TEST_CASE_P(HttpResponseHeaders,
- RequiresValidationTest,
- testing::ValuesIn(requires_validation_tests));
+ ExpirationTimesTest,
+ testing::ValuesIn(expiration_times_tests));
struct UpdateTestData {
const char* orig_headers;

Powered by Google App Engine
This is Rietveld 408576698