summaryrefslogtreecommitdiffstats
path: root/net/disk_cache/entry_unittest.cc
diff options
context:
space:
mode:
authorrvargas@google.com <rvargas@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-09-29 17:32:40 +0000
committerrvargas@google.com <rvargas@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-09-29 17:32:40 +0000
commit9cb851f3e229cf290497c040d2fef79f59bcaf14 (patch)
treefa1ffa3b6321e12ffbf337240d00f194532fc664 /net/disk_cache/entry_unittest.cc
parentb57286fc2f87bc9da060db89c23c1c7f413fe52e (diff)
downloadchromium_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.cc80
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();