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>2009-06-23 22:07:36 +0000
committerrvargas@google.com <rvargas@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-23 22:07:36 +0000
commit5e892c20535dcbeae099f92148feea8473cf1445 (patch)
treee8d81957e354d53c94a5f99f5eea3ca1fdb71ea7 /net/disk_cache/entry_unittest.cc
parent1ca4a8b5e7fea30a0cd7437000e8381002f546af (diff)
downloadchromium_src-5e892c20535dcbeae099f92148feea8473cf1445.zip
chromium_src-5e892c20535dcbeae099f92148feea8473cf1445.tar.gz
chromium_src-5e892c20535dcbeae099f92148feea8473cf1445.tar.bz2
Disk Cache: Implement GetAvailableRange for the regular disk cache.
This is required to enable sparse caching. BUG=12258 TEST=unittest Review URL: http://codereview.chromium.org/146005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@19069 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/disk_cache/entry_unittest.cc')
-rw-r--r--net/disk_cache/entry_unittest.cc56
1 files changed, 55 insertions, 1 deletions
diff --git a/net/disk_cache/entry_unittest.cc b/net/disk_cache/entry_unittest.cc
index de9b153..7b7d5d3 100644
--- a/net/disk_cache/entry_unittest.cc
+++ b/net/disk_cache/entry_unittest.cc
@@ -37,6 +37,7 @@ class DiskCacheEntryTest : public DiskCacheTestWithCache {
void DoomedEntry();
void BasicSparseIO(bool async);
void HugeSparseIO(bool async);
+ void GetAvailableRange();
};
void DiskCacheEntryTest::InternalSyncIO() {
@@ -967,7 +968,7 @@ void DiskCacheEntryTest::HugeSparseIO(bool async) {
scoped_refptr<net::IOBuffer> buf_2 = new net::IOBuffer(kSize);
CacheTestFillBuffer(buf_1->data(), kSize, false);
- // Write at offset 0x20F0000 (20 MB - 64 KB).
+ // Write at offset 0x20F0000 (33 MB - 64 KB).
VerifySparseIO(entry, 0x20F0000, buf_1, kSize, async, buf_2);
entry->Close();
@@ -998,3 +999,56 @@ TEST_F(DiskCacheEntryTest, DISABLED_MemoryOnlyHugeSparseAsyncIO) {
InitCache();
HugeSparseIO(true);
}
+
+void DiskCacheEntryTest::GetAvailableRange() {
+ std::string key("the first key");
+ disk_cache::Entry* entry;
+ ASSERT_TRUE(cache_->CreateEntry(key, &entry));
+
+ const int kSize = 16 * 1024;
+ scoped_refptr<net::IOBuffer> buf = new net::IOBuffer(kSize);
+ CacheTestFillBuffer(buf->data(), kSize, false);
+
+ // Write at offset 0x20F0000 (33 MB - 64 KB), and 0x20F4400 (33 MB - 47 KB).
+ EXPECT_EQ(kSize, entry->WriteSparseData(0x20F0000, buf, kSize, NULL));
+ EXPECT_EQ(kSize, entry->WriteSparseData(0x20F4400, buf, kSize, NULL));
+
+ // We stop at the first empty block.
+ int64 start;
+ EXPECT_EQ(kSize, entry->GetAvailableRange(0x20F0000, kSize * 2, &start));
+ EXPECT_EQ(0x20F0000, start);
+
+ start = 0;
+ EXPECT_EQ(0, entry->GetAvailableRange(0, kSize, &start));
+ EXPECT_EQ(0, entry->GetAvailableRange(0x20F0000 - kSize, kSize, &start));
+ EXPECT_EQ(kSize, entry->GetAvailableRange(0, 0x2100000, &start));
+ EXPECT_EQ(0x20F0000, start);
+
+ // We should be able to Read based on the results of GetAvailableRange.
+ start = -1;
+ EXPECT_EQ(0, entry->GetAvailableRange(0x2100000, kSize, &start));
+ EXPECT_EQ(0, entry->ReadSparseData(start, buf, kSize, NULL));
+
+ start = 0;
+ EXPECT_EQ(0x2000, entry->GetAvailableRange(0x20F2000, kSize, &start));
+ EXPECT_EQ(0x20F2000, start);
+ EXPECT_EQ(0x2000, entry->ReadSparseData(start, buf, kSize, NULL));
+
+ // Make sure that we respect the |len| argument.
+ start = 0;
+ EXPECT_EQ(1, entry->GetAvailableRange(0x20F0001 - kSize, kSize, &start));
+ EXPECT_EQ(0x20F0000, start);
+
+ entry->Close();
+}
+
+TEST_F(DiskCacheEntryTest, GetAvailableRange) {
+ InitCache();
+ GetAvailableRange();
+}
+
+TEST_F(DiskCacheEntryTest, DISABLED_MemoryOnlyGetAvailableRange) {
+ SetMemoryOnlyMode();
+ InitCache();
+ GetAvailableRange();
+}