Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(246)

Unified Diff: net/disk_cache/backend_unittest.cc

Issue 12951014: Fix bug in MemEntryImpl, which caused browser crash during clearing (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: net/disk_cache/backend_unittest.cc
===================================================================
--- net/disk_cache/backend_unittest.cc (revision 189283)
+++ net/disk_cache/backend_unittest.cc (working copy)
@@ -50,6 +50,12 @@
void BackendInvalidEntryEnumeration();
void BackendFixEnumerators();
void BackendDoomRecent();
+
+ // Adds 3 sparse entries. |doomed_start| and |doomed_end| if not NULL,
+ // will be filled with times, used by DoomEntriesSince and DoomEntriesBetween
+ // to doom last two entries.
+ void InitSparseCache(base::Time* doomed_start, base::Time* doomed_end);
+
void BackendDoomBetween();
void BackendTransaction(const std::string& name, int num_entries, bool load);
void BackendRecoverInsert();
@@ -1345,6 +1351,82 @@
BackendDoomRecent();
}
+void DiskCacheBackendTest::InitSparseCache(base::Time* doomed_start,
+ base::Time* doomed_end) {
+ InitCache();
+
+ const int kSize = 50;
+ // This must be greater then MemEntryImpl::kMaxSparseEntrySize.
+ const int kOffset = 10 + 1024 * 1024;
+
+ disk_cache::Entry* entry0 = NULL;
+ disk_cache::Entry* entry1 = NULL;
+ disk_cache::Entry* entry2 = NULL;
+
+ scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize));
+ CacheTestFillBuffer(buffer->data(), kSize, false);
+
+ // entry0 is the only entry whish left after
+ // DoomEntriesSince and DoomEntriesBetween.
+ ASSERT_EQ(net::OK, CreateEntry("zeroth", &entry0));
+ ASSERT_EQ(kSize, WriteSparseData(entry0, 0, buffer.get(), kSize));
+ ASSERT_EQ(kSize,
+ WriteSparseData(entry0, kOffset + kSize, buffer.get(), kSize));
+ entry0->Close();
+
+ AddDelay();
+ if (doomed_start)
+ *doomed_start = base::Time::Now();
+
+ // Order in rankings list:
+ // first_part1, first_part2, second_part1, second_part2
+ ASSERT_EQ(net::OK, CreateEntry("first", &entry1));
+ ASSERT_EQ(kSize, WriteSparseData(entry1, 0, buffer.get(), kSize));
+ ASSERT_EQ(kSize,
+ WriteSparseData(entry1, kOffset + kSize, buffer.get(), kSize));
+ entry1->Close();
+
+ ASSERT_EQ(net::OK, CreateEntry("second", &entry2));
+ ASSERT_EQ(kSize, WriteSparseData(entry2, 0, buffer.get(), kSize));
+ ASSERT_EQ(kSize,
+ WriteSparseData(entry2, kOffset + kSize, buffer.get(), kSize));
+ entry2->Close();
+
+ // Order in rankings list:
+ // third_part1, fourth_part1, third_part2, fourth_part2
rvargas (doing something else) 2013/03/21 22:01:57 The second time stamp should be somewhere in the m
Slava Chigrin 2013/03/22 13:45:02 Done.
+ disk_cache::Entry* entry3 = NULL;
+ disk_cache::Entry* entry4 = NULL;
+ ASSERT_EQ(net::OK, CreateEntry("third", &entry3));
+ ASSERT_EQ(kSize, WriteSparseData(entry3, 0, buffer.get(), kSize));
+ ASSERT_EQ(net::OK, CreateEntry("fourth", &entry4));
+ ASSERT_EQ(kSize, WriteSparseData(entry4, 0, buffer.get(), kSize));
+ ASSERT_EQ(kSize,
+ WriteSparseData(entry3, kOffset + kSize, buffer.get(), kSize));
+ ASSERT_EQ(kSize,
+ WriteSparseData(entry4, kOffset + kSize, buffer.get(), kSize));
+ entry3->Close();
+ entry4->Close();
+
+ AddDelay();
+ if (doomed_end)
+ *doomed_end = base::Time::Now();
+}
+
+TEST_F(DiskCacheBackendTest, MemoryOnlyDoomEntriesSinceSparse) {
rvargas (doing something else) 2013/03/21 22:01:57 It would be nice to also add tests for the regular
Slava Chigrin 2013/03/22 13:45:02 I have added tests for BackendImpl here. I noticed
rvargas (doing something else) 2013/03/23 02:08:31 yes... the disk backend allows enumeration (and in
+ SetMemoryOnlyMode();
+ base::Time start;
+ InitSparseCache(&start, NULL);
+ DoomEntriesSince(start);
+ EXPECT_EQ(1, cache_->GetEntryCount());
+}
+
+TEST_F(DiskCacheBackendTest, MemoryOnlyDoomAllSparse) {
+ SetMemoryOnlyMode();
+ InitSparseCache(NULL, NULL);
+ EXPECT_EQ(net::OK, DoomAllEntries());
+ EXPECT_EQ(0, cache_->GetEntryCount());
+}
+
void DiskCacheBackendTest::BackendDoomBetween() {
InitCache();
@@ -1402,6 +1484,14 @@
BackendDoomBetween();
}
+TEST_F(DiskCacheBackendTest, MemoryOnlyDoomEntriesBetweenSparse) {
+ SetMemoryOnlyMode();
+ base::Time start, end;
+ InitSparseCache(&start, &end);
+ DoomEntriesBetween(start, end);
+ EXPECT_EQ(1, cache_->GetEntryCount());
+}
+
void DiskCacheBackendTest::BackendTransaction(const std::string& name,
int num_entries, bool load) {
success_ = false;
« no previous file with comments | « AUTHORS ('k') | net/disk_cache/mem_backend_impl.cc » ('j') | net/disk_cache/mem_backend_impl.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698