diff options
author | rvargas@google.com <rvargas@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-23 22:07:36 +0000 |
---|---|---|
committer | rvargas@google.com <rvargas@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-23 22:07:36 +0000 |
commit | 5e892c20535dcbeae099f92148feea8473cf1445 (patch) | |
tree | e8d81957e354d53c94a5f99f5eea3ca1fdb71ea7 /net/disk_cache/entry_unittest.cc | |
parent | 1ca4a8b5e7fea30a0cd7437000e8381002f546af (diff) | |
download | chromium_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.cc | 56 |
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(); +} |