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

Unified Diff: net/http/http_cache_unittest.cc

Issue 22926031: Sparse IO: Allow failover to network in debug builds (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years, 4 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_cache_unittest.cc
diff --git a/net/http/http_cache_unittest.cc b/net/http/http_cache_unittest.cc
index 82d461ca0aca2887cf12d6b00cd11a3f462efae1..d75001f0e26d4c2d0ac004b4545e98dbaf0b57f6 100644
--- a/net/http/http_cache_unittest.cc
+++ b/net/http/http_cache_unittest.cc
@@ -501,6 +501,26 @@ const MockTransaction kRangeGET_TransactionOK = {
net::OK
};
+const MockTransaction kRangeGET_NotReallyARange = {
+ "http://www.google.com/range",
+ "GET",
+ base::Time(),
+ EXTRA_HEADER,
+ net::LOAD_NORMAL,
+ "HTTP/1.1 200 OK",
+ "Last-Modified: Sat, 18 Apr 2007 01:10:43 GMT\n"
+ "ETag: \"foo\"\n"
+ "Accept-Ranges: bytes\n"
+ "Content-Length: 10\n"
+ "Cache-Control: max-age=10000\n",
+ base::Time(),
+ "Not a range",
+ TEST_MODE_NORMAL,
+ &FastTransactionServer::FastNoStoreHandler,
+ 0,
+ net::OK
+};
+
// Verifies the response headers (|response|) match a partial content
// response for the range starting at |start| and ending at |end|.
void Verify206Response(std::string response, int start, int end) {
@@ -3394,6 +3414,56 @@ TEST(HttpCache, RangeGET_OK) {
RemoveMockTransaction(&kRangeGET_TransactionOK);
}
+#if defined(OS_ANDROID)
+
+// Tests that with a cache backend that does not implement Sparse IO the cache
+// entry would be re-created on each transaction.
+// TODO(pasko): remove when the SimpleBackendImpl implements Sparse IO.
+TEST(HttpCache, RangeGET_SparseNotImplemented) {
+ MockHttpCache cache;
+ cache.disk_cache()->set_fail_sparse_requests();
+ AddMockTransaction(&kRangeGET_TransactionOK);
+ std::string headers;
+
+ // Run a cacheable request to prime the cache.
+ RunTransactionTestWithResponse(cache.http_cache(), kRangeGET_NotReallyARange,
rvargas (doing something else) 2013/08/28 21:35:47 I would actually prefer following HttpCache.RangeG
pasko 2013/08/28 21:56:28 Done.
pasko 2013/08/28 22:01:43 huh, misunderstood you here. I thought you suggest
rvargas (doing something else) 2013/08/28 22:33:40 Not really following the whole pattern of that tes
+ &headers);
+
+ EXPECT_EQ(1, cache.network_layer()->transaction_count());
+ EXPECT_EQ(0, cache.disk_cache()->open_count());
+ EXPECT_EQ(1, cache.disk_cache()->create_count());
+ EXPECT_EQ(0, cache.disk_cache()->sparse_count());
+
+ // Write to the cache (40-49).
+ RunTransactionTestWithResponse(cache.http_cache(), kRangeGET_TransactionOK,
+ &headers);
+
+ Verify206Response(headers, 40, 49);
+ EXPECT_EQ(2, cache.network_layer()->transaction_count());
+ EXPECT_EQ(1, cache.disk_cache()->open_count());
+ EXPECT_EQ(2, cache.disk_cache()->create_count());
+
+ // Two sparse operations are expected: ReadyForSparseIO() and
+ // WriteSparseData().
+ EXPECT_EQ(2, cache.disk_cache()->sparse_count());
+
+ // Run the transaction again.
+ RunTransactionTestWithResponse(cache.http_cache(), kRangeGET_TransactionOK,
+ &headers);
+
+ Verify206Response(headers, 40, 49);
+ EXPECT_EQ(3, cache.network_layer()->transaction_count());
+ EXPECT_EQ(1, cache.disk_cache()->open_count());
+ EXPECT_EQ(3, cache.disk_cache()->create_count());
+
+ // WriteSparseData() must be invoked.
+ EXPECT_EQ(3, cache.disk_cache()->sparse_count());
+
+ RemoveMockTransaction(&kRangeGET_TransactionOK);
+}
+
+#endif // OS_ANDROID
+
// Tests that we can cache range requests and fetch random blocks from the
// cache and the network, with synchronous responses.
TEST(HttpCache, RangeGET_SyncOK) {

Powered by Google App Engine
This is Rietveld 408576698