diff options
author | rvargas@google.com <rvargas@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-22 18:36:19 +0000 |
---|---|---|
committer | rvargas@google.com <rvargas@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-22 18:36:19 +0000 |
commit | 73cae57f1b63a1979790881960ca7615cd779cd0 (patch) | |
tree | 39b12bde09b9210d3e015e741d57f2ec35977000 /net/http/http_cache_unittest.cc | |
parent | 204e18e9f7fabcbe467c7dcf015fac2ed0567e66 (diff) | |
download | chromium_src-73cae57f1b63a1979790881960ca7615cd779cd0.zip chromium_src-73cae57f1b63a1979790881960ca7615cd779cd0.tar.gz chromium_src-73cae57f1b63a1979790881960ca7615cd779cd0.tar.bz2 |
Http Cache: Convert data writes from sysnchronous to asynchronous.
BUG=21383
TEST=unit tests
(original review for r25873: http://codereview.chromium.org/201065)
Review URL: http://codereview.chromium.org/313013
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@29792 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/http/http_cache_unittest.cc')
-rw-r--r-- | net/http/http_cache_unittest.cc | 74 |
1 files changed, 61 insertions, 13 deletions
diff --git a/net/http/http_cache_unittest.cc b/net/http/http_cache_unittest.cc index 9df19c2..371ef2586 100644 --- a/net/http/http_cache_unittest.cc +++ b/net/http/http_cache_unittest.cc @@ -128,7 +128,12 @@ class MockDiskEntry : public disk_cache::Entry, data_[index].resize(offset + buf_len); if (buf_len) memcpy(&data_[index][offset], buf->data(), buf_len); - return buf_len; + + if (!callback || (test_mode_ & TEST_MODE_SYNC_CACHE_WRITE)) + return buf_len; + + CallbackLater(callback, buf_len); + return net::ERR_IO_PENDING; } virtual int ReadSparseData(int64 offset, net::IOBuffer* buf, int buf_len, @@ -183,7 +188,11 @@ class MockDiskEntry : public disk_cache::Entry, data_[1].resize(real_offset + buf_len); memcpy(&data_[1][real_offset], buf->data(), buf_len); - return buf_len; + if (!completion_callback || (test_mode_ & TEST_MODE_SYNC_CACHE_WRITE)) + return buf_len; + + CallbackLater(completion_callback, buf_len); + return net::ERR_IO_PENDING; } virtual int GetAvailableRange(int64 offset, int len, int64* start) { @@ -691,6 +700,14 @@ struct Response { const char* body; }; +struct Context { + Context() : result(net::ERR_IO_PENDING) {} + + int result; + TestCompletionCallback callback; + scoped_ptr<net::HttpTransaction> trans; +}; + } // namespace @@ -765,6 +782,44 @@ TEST(HttpCache, SimpleGETWithDiskFailures) { EXPECT_EQ(2, cache.disk_cache()->create_count()); } +// Tests that disk failures after the transaction has started don't cause the +// request to fail. +TEST(HttpCache, SimpleGETWithDiskFailures2) { + MockHttpCache cache; + + MockHttpRequest request(kSimpleGET_Transaction); + + scoped_ptr<Context> c(new Context()); + int rv = cache.http_cache()->CreateTransaction(&c->trans); + EXPECT_EQ(net::OK, rv); + + rv = c->trans->Start(&request, &c->callback, NULL); + EXPECT_EQ(net::ERR_IO_PENDING, rv); + rv = c->callback.WaitForResult(); + + // Start failing request now. + cache.disk_cache()->set_soft_failures(true); + + // We have to open the entry again to propagate the failure flag. + disk_cache::Entry* en; + ASSERT_TRUE(cache.disk_cache()->OpenEntry(kSimpleGET_Transaction.url, &en)); + en->Close(); + + ReadAndVerifyTransaction(c->trans.get(), kSimpleGET_Transaction); + c.reset(); + + EXPECT_EQ(1, cache.network_layer()->transaction_count()); + EXPECT_EQ(1, cache.disk_cache()->open_count()); + EXPECT_EQ(1, cache.disk_cache()->create_count()); + + // This one should see an empty cache again. + RunTransactionTest(cache.http_cache(), kSimpleGET_Transaction); + + EXPECT_EQ(2, cache.network_layer()->transaction_count()); + EXPECT_EQ(1, cache.disk_cache()->open_count()); + EXPECT_EQ(2, cache.disk_cache()->create_count()); +} + TEST(HttpCache, SimpleGET_LoadOnlyFromCache_Hit) { MockHttpCache cache; @@ -965,15 +1020,6 @@ TEST(HttpCache, SimpleGET_LoadValidateCache_Implicit) { EXPECT_EQ(1, cache.disk_cache()->create_count()); } -struct Context { - int result; - TestCompletionCallback callback; - scoped_ptr<net::HttpTransaction> trans; - - Context() : result(net::ERR_IO_PENDING) { - } -}; - TEST(HttpCache, SimpleGET_ManyReaders) { MockHttpCache cache; @@ -2022,7 +2068,8 @@ TEST(HttpCache, UnknownRangeGET_2) { MockTransaction transaction(kRangeGET_TransactionOK); transaction.test_mode = TEST_MODE_SYNC_CACHE_START | - TEST_MODE_SYNC_CACHE_READ; + TEST_MODE_SYNC_CACHE_READ | + TEST_MODE_SYNC_CACHE_WRITE; AddMockTransaction(&transaction); // Write to the cache (70-79). @@ -2823,7 +2870,8 @@ TEST(HttpCache, SyncRead) { ScopedMockTransaction transaction(kSimpleGET_Transaction); transaction.test_mode |= (TEST_MODE_SYNC_CACHE_START | - TEST_MODE_SYNC_CACHE_READ); + TEST_MODE_SYNC_CACHE_READ | + TEST_MODE_SYNC_CACHE_WRITE); MockHttpRequest r1(transaction), r2(transaction), |