Index: net/disk_cache/entry_unittest.cc |
diff --git a/net/disk_cache/entry_unittest.cc b/net/disk_cache/entry_unittest.cc |
index 47b70d0e14eb45890378df46e65314e9b7001632..803642d34eee52ee4ae955933a44a497aa11068a 100644 |
--- a/net/disk_cache/entry_unittest.cc |
+++ b/net/disk_cache/entry_unittest.cc |
@@ -833,3 +833,100 @@ TEST_F(DiskCacheEntryTest, MemoryOnlyDoomedEntry) { |
DoomEntry(); |
} |
+// Check that we can hint an entry to use external file and the return value |
+// is a valid file handle. |
+TEST_F(DiskCacheEntryTest, UseExternalFile) { |
+ InitCache(); |
+ |
+ disk_cache::Entry* entry; |
+ ASSERT_TRUE(cache_->CreateEntry("key", &entry)); |
+ base::PlatformFile cache_file = entry->UseExternalFile(0); |
+ |
+ // We should have a valid file handle. |
+ EXPECT_NE(base::kInvalidPlatformFileValue, cache_file); |
+ scoped_refptr<disk_cache::File> file(new disk_cache::File(cache_file)); |
+ |
+ // 4KB. |
+ size_t kDataSize = 0x1000; |
+ scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(kDataSize); |
+ |
+ CacheTestFillBuffer(buffer->data(), kDataSize, false); |
+ ASSERT_EQ(0U, file->GetLength()); |
+ ASSERT_EQ(kDataSize, static_cast<size_t>( |
+ entry->WriteData(0, 0, buffer, kDataSize, NULL, false))); |
+ ASSERT_EQ(kDataSize, file->GetLength()); |
+ entry->Close(); |
+} |
+ |
+// Make sure we can use Entry::GetPlatformFile on an entry stored in an external |
+// file and get a valid file handle. |
+TEST_F(DiskCacheEntryTest, GetPlatformFile) { |
+ InitCache(); |
+ |
+ disk_cache::Entry* entry; |
+ ASSERT_TRUE(cache_->CreateEntry("key", &entry)); |
+ EXPECT_NE(base::kInvalidPlatformFileValue, entry->UseExternalFile(0)); |
+ |
+ size_t kDataSize = 50; |
+ scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(kDataSize); |
+ |
+ // Fill the data buffer and write it to cache. |
+ CacheTestFillBuffer(buffer->data(), kDataSize, false); |
+ ASSERT_EQ(kDataSize, entry->WriteData(0, 0, buffer, kDataSize, NULL, false)); |
+ |
+ // Close the entry. |
+ entry->Close(); |
+ |
+ // Open the entry again and get it's file handle. |
+ ASSERT_TRUE(cache_->OpenEntry("key", &entry)); |
+ base::PlatformFile cache_file = entry->GetPlatformFile(0); |
+ |
+ // Make sure it's a valid file handle and verify the size of the file. |
+ scoped_refptr<disk_cache::File> file(new disk_cache::File(cache_file)); |
+ ASSERT_EQ(kDataSize, file->GetLength()); |
+ |
+ entry->Close(); |
+} |
+ |
+// Test the behavior of EntryImpl that small entries are kept in block files |
+// or buffer, and only entries above certain size would be stored in an |
+// external file, make sure GetPlatformFile() works with both cases without |
+// using UseExternalFile(). |
+TEST_F(DiskCacheEntryTest, GetPlatformFileVariableEntrySize) { |
+ InitCache(); |
+ |
+ disk_cache::Entry* entry; |
+ |
+ // Make the buffer just larger than disk_cache::kMaxBlockSize. |
+ const size_t kLargeDataSize = disk_cache::kMaxBlockSize + 1; |
+ const size_t kSmallDataSize = kLargeDataSize / 2; |
+ scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(kLargeDataSize); |
+ |
+ // 1. First test with small entry. |
+ ASSERT_TRUE(cache_->CreateEntry("small_entry", &entry)); |
+ |
+ CacheTestFillBuffer(buffer->data(), kSmallDataSize, false); |
+ ASSERT_EQ(kSmallDataSize, |
+ entry->WriteData(0, 0, buffer, kSmallDataSize, NULL, false)); |
+ |
+ // Make sure we don't get an external file. |
+ ASSERT_EQ(base::kInvalidPlatformFileValue, entry->GetPlatformFile(0)); |
+ |
+ entry->Close(); |
+ |
+ // 2. Test with large entry. |
+ ASSERT_TRUE(cache_->CreateEntry("large_entry", &entry)); |
+ |
+ CacheTestFillBuffer(buffer->data(), kLargeDataSize, false); |
+ ASSERT_EQ(kLargeDataSize, |
+ entry->WriteData(0, 0, buffer, kLargeDataSize, NULL, false)); |
+ |
+ base::PlatformFile cache_file = entry->GetPlatformFile(0); |
+ EXPECT_NE(base::kInvalidPlatformFileValue, cache_file); |
+ |
+ // Make sure it's a valid file handle and verify the size of the file. |
+ scoped_refptr<disk_cache::File> file(new disk_cache::File(cache_file)); |
+ ASSERT_EQ(kLargeDataSize, file->GetLength()); |
+ |
+ entry->Close(); |
+} |