diff options
author | rvargas@google.com <rvargas@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-09-29 17:32:40 +0000 |
---|---|---|
committer | rvargas@google.com <rvargas@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-09-29 17:32:40 +0000 |
commit | 9cb851f3e229cf290497c040d2fef79f59bcaf14 (patch) | |
tree | fa1ffa3b6321e12ffbf337240d00f194532fc664 /net/disk_cache/entry_unittest.cc | |
parent | b57286fc2f87bc9da060db89c23c1c7f413fe52e (diff) | |
download | chromium_src-9cb851f3e229cf290497c040d2fef79f59bcaf14.zip chromium_src-9cb851f3e229cf290497c040d2fef79f59bcaf14.tar.gz chromium_src-9cb851f3e229cf290497c040d2fef79f59bcaf14.tar.bz2 |
Disk cache: Handle failures growing the user_buffer that
should result in data going to an external file.
After PrepareBuffer() we must always have either a buffer
that will receive the user data, or an initialized address
that points to the correct block or external file to
receive the data.
This CL makes sure that when we end up without a buffer, the
second condition is met.
BUG=56872
TEST=net_unittests
Review URL: http://codereview.chromium.org/3471016
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@60958 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/disk_cache/entry_unittest.cc')
-rw-r--r-- | net/disk_cache/entry_unittest.cc | 80 |
1 files changed, 76 insertions, 4 deletions
diff --git a/net/disk_cache/entry_unittest.cc b/net/disk_cache/entry_unittest.cc index ce0c11f..c4dc705f 100644 --- a/net/disk_cache/entry_unittest.cc +++ b/net/disk_cache/entry_unittest.cc @@ -9,6 +9,7 @@ #include "net/base/io_buffer.h" #include "net/base/net_errors.h" #include "net/base/test_completion_callback.h" +#include "net/disk_cache/backend_impl.h" #include "net/disk_cache/disk_cache_test_base.h" #include "net/disk_cache/disk_cache_test_util.h" #include "net/disk_cache/entry_impl.h" @@ -37,6 +38,8 @@ class DiskCacheEntryTest : public DiskCacheTestWithCache { void GrowData(); void TruncateData(); void ZeroLengthIO(); + void Buffering(); + void SizeChanges(); void ReuseEntry(int size); void InvalidData(); void DoomNormalEntry(); @@ -343,6 +346,13 @@ TEST_F(DiskCacheEntryTest, ExternalSyncIO) { ExternalSyncIO(); } +TEST_F(DiskCacheEntryTest, ExternalSyncIONoBuffer) { + SetDirectMode(); + InitCache(); + cache_impl_->SetFlags(disk_cache::kNoBuffering); + ExternalSyncIO(); +} + TEST_F(DiskCacheEntryTest, MemoryOnlyExternalSyncIO) { SetMemoryOnlyMode(); InitCache(); @@ -452,6 +462,13 @@ TEST_F(DiskCacheEntryTest, ExternalAsyncIO) { ExternalAsyncIO(); } +TEST_F(DiskCacheEntryTest, ExternalAsyncIONoBuffer) { + SetDirectMode(); + InitCache(); + cache_impl_->SetFlags(disk_cache::kNoBuffering); + ExternalAsyncIO(); +} + TEST_F(DiskCacheEntryTest, MemoryOnlyExternalAsyncIO) { SetMemoryOnlyMode(); InitCache(); @@ -662,6 +679,13 @@ TEST_F(DiskCacheEntryTest, GrowData) { GrowData(); } +TEST_F(DiskCacheEntryTest, GrowDataNoBuffer) { + SetDirectMode(); + InitCache(); + cache_impl_->SetFlags(disk_cache::kNoBuffering); + GrowData(); +} + TEST_F(DiskCacheEntryTest, MemoryOnlyGrowData) { SetMemoryOnlyMode(); InitCache(); @@ -738,6 +762,18 @@ TEST_F(DiskCacheEntryTest, TruncateData) { helper.WaitUntilCacheIoFinished(1); } +TEST_F(DiskCacheEntryTest, TruncateDataNoBuffer) { + SetDirectMode(); + InitCache(); + cache_impl_->SetFlags(disk_cache::kNoBuffering); + TruncateData(); + + // We generate asynchronous IO that is not really tracked until completion + // so we just wait here before running the next test. + MessageLoopHelper helper; + helper.WaitUntilCacheIoFinished(1); +} + TEST_F(DiskCacheEntryTest, MemoryOnlyTruncateData) { SetMemoryOnlyMode(); InitCache(); @@ -787,6 +823,13 @@ TEST_F(DiskCacheEntryTest, ZeroLengthIO) { ZeroLengthIO(); } +TEST_F(DiskCacheEntryTest, ZeroLengthIONoBuffer) { + SetDirectMode(); + InitCache(); + cache_impl_->SetFlags(disk_cache::kNoBuffering); + ZeroLengthIO(); +} + TEST_F(DiskCacheEntryTest, MemoryOnlyZeroLengthIO) { SetMemoryOnlyMode(); InitCache(); @@ -794,8 +837,7 @@ TEST_F(DiskCacheEntryTest, MemoryOnlyZeroLengthIO) { } // Tests that we handle the content correctly when buffering. -TEST_F(DiskCacheEntryTest, Buffering) { - InitCache(); +void DiskCacheEntryTest::Buffering() { std::string key("the first key"); disk_cache::Entry* entry; ASSERT_EQ(net::OK, CreateEntry(key, &entry)); @@ -861,10 +903,21 @@ TEST_F(DiskCacheEntryTest, Buffering) { entry->Close(); } +TEST_F(DiskCacheEntryTest, Buffering) { + InitCache(); + Buffering(); +} + +TEST_F(DiskCacheEntryTest, BufferingNoBuffer) { + SetDirectMode(); + InitCache(); + cache_impl_->SetFlags(disk_cache::kNoBuffering); + Buffering(); +} + // Some extra tests to make sure that buffering works properly when changing // the entry size. -TEST_F(DiskCacheEntryTest, SizeChanges) { - InitCache(); +void DiskCacheEntryTest::SizeChanges() { std::string key("the first key"); disk_cache::Entry* entry; ASSERT_EQ(net::OK, CreateEntry(key, &entry)); @@ -937,6 +990,18 @@ TEST_F(DiskCacheEntryTest, SizeChanges) { entry->Close(); } +TEST_F(DiskCacheEntryTest, SizeChanges) { + InitCache(); + SizeChanges(); +} + +TEST_F(DiskCacheEntryTest, SizeChangesNoBuffer) { + SetDirectMode(); + InitCache(); + cache_impl_->SetFlags(disk_cache::kNoBuffering); + SizeChanges(); +} + // Write more than the total cache capacity but to a single entry. |size| is the // amount of bytes to write each time. void DiskCacheEntryTest::ReuseEntry(int size) { @@ -1063,6 +1128,13 @@ TEST_F(DiskCacheEntryTest, InvalidData) { InvalidData(); } +TEST_F(DiskCacheEntryTest, InvalidDataNoBuffer) { + SetDirectMode(); + InitCache(); + cache_impl_->SetFlags(disk_cache::kNoBuffering); + InvalidData(); +} + TEST_F(DiskCacheEntryTest, MemoryOnlyInvalidData) { SetMemoryOnlyMode(); InitCache(); |