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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/file_util.h" 6 #include "base/file_util.h"
7 #include "base/string_util.h" 7 #include "base/string_util.h"
8 #include "base/stringprintf.h" 8 #include "base/stringprintf.h"
9 #include "base/third_party/dynamic_annotations/dynamic_annotations.h" 9 #include "base/third_party/dynamic_annotations/dynamic_annotations.h"
10 #include "base/threading/platform_thread.h" 10 #include "base/threading/platform_thread.h"
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 void BackendInvalidEntry(); 43 void BackendInvalidEntry();
44 void BackendInvalidEntryRead(); 44 void BackendInvalidEntryRead();
45 void BackendInvalidEntryWithLoad(); 45 void BackendInvalidEntryWithLoad();
46 void BackendTrimInvalidEntry(); 46 void BackendTrimInvalidEntry();
47 void BackendTrimInvalidEntry2(); 47 void BackendTrimInvalidEntry2();
48 void BackendEnumerations(); 48 void BackendEnumerations();
49 void BackendEnumerations2(); 49 void BackendEnumerations2();
50 void BackendInvalidEntryEnumeration(); 50 void BackendInvalidEntryEnumeration();
51 void BackendFixEnumerators(); 51 void BackendFixEnumerators();
52 void BackendDoomRecent(); 52 void BackendDoomRecent();
53
54 // Adds 3 sparse entries. |doomed_start| and |doomed_end| if not NULL,
55 // will be filled with times, used by DoomEntriesSince and DoomEntriesBetween
56 // to doom last two entries.
57 void InitSparseCache(base::Time* doomed_start, base::Time* doomed_end);
58
53 void BackendDoomBetween(); 59 void BackendDoomBetween();
54 void BackendTransaction(const std::string& name, int num_entries, bool load); 60 void BackendTransaction(const std::string& name, int num_entries, bool load);
55 void BackendRecoverInsert(); 61 void BackendRecoverInsert();
56 void BackendRecoverRemove(); 62 void BackendRecoverRemove();
57 void BackendRecoverWithEviction(); 63 void BackendRecoverWithEviction();
58 void BackendInvalidEntry2(); 64 void BackendInvalidEntry2();
59 void BackendInvalidEntry3(); 65 void BackendInvalidEntry3();
60 void BackendInvalidEntry7(); 66 void BackendInvalidEntry7();
61 void BackendInvalidEntry8(); 67 void BackendInvalidEntry8();
62 void BackendInvalidEntry9(bool eviction); 68 void BackendInvalidEntry9(bool eviction);
(...skipping 1275 matching lines...) Expand 10 before | Expand all | Expand 10 after
1338 TEST_F(DiskCacheBackendTest, NewEvictionDoomRecent) { 1344 TEST_F(DiskCacheBackendTest, NewEvictionDoomRecent) {
1339 SetNewEviction(); 1345 SetNewEviction();
1340 BackendDoomRecent(); 1346 BackendDoomRecent();
1341 } 1347 }
1342 1348
1343 TEST_F(DiskCacheBackendTest, MemoryOnlyDoomRecent) { 1349 TEST_F(DiskCacheBackendTest, MemoryOnlyDoomRecent) {
1344 SetMemoryOnlyMode(); 1350 SetMemoryOnlyMode();
1345 BackendDoomRecent(); 1351 BackendDoomRecent();
1346 } 1352 }
1347 1353
1354 void DiskCacheBackendTest::InitSparseCache(base::Time* doomed_start,
1355 base::Time* doomed_end) {
1356 InitCache();
1357
1358 const int kSize = 50;
1359 // This must be greater then MemEntryImpl::kMaxSparseEntrySize.
1360 const int kOffset = 10 + 1024 * 1024;
1361
1362 disk_cache::Entry* entry0 = NULL;
1363 disk_cache::Entry* entry1 = NULL;
1364 disk_cache::Entry* entry2 = NULL;
1365
1366 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize));
1367 CacheTestFillBuffer(buffer->data(), kSize, false);
1368
1369 // entry0 is the only entry whish left after
1370 // DoomEntriesSince and DoomEntriesBetween.
1371 ASSERT_EQ(net::OK, CreateEntry("zeroth", &entry0));
1372 ASSERT_EQ(kSize, WriteSparseData(entry0, 0, buffer.get(), kSize));
1373 ASSERT_EQ(kSize,
1374 WriteSparseData(entry0, kOffset + kSize, buffer.get(), kSize));
1375 entry0->Close();
1376
1377 AddDelay();
1378 if (doomed_start)
1379 *doomed_start = base::Time::Now();
1380
1381 // Order in rankings list:
1382 // first_part1, first_part2, second_part1, second_part2
1383 ASSERT_EQ(net::OK, CreateEntry("first", &entry1));
1384 ASSERT_EQ(kSize, WriteSparseData(entry1, 0, buffer.get(), kSize));
1385 ASSERT_EQ(kSize,
1386 WriteSparseData(entry1, kOffset + kSize, buffer.get(), kSize));
1387 entry1->Close();
1388
1389 ASSERT_EQ(net::OK, CreateEntry("second", &entry2));
1390 ASSERT_EQ(kSize, WriteSparseData(entry2, 0, buffer.get(), kSize));
1391 ASSERT_EQ(kSize,
1392 WriteSparseData(entry2, kOffset + kSize, buffer.get(), kSize));
1393 entry2->Close();
1394
1395 // Order in rankings list:
1396 // 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.
1397 disk_cache::Entry* entry3 = NULL;
1398 disk_cache::Entry* entry4 = NULL;
1399 ASSERT_EQ(net::OK, CreateEntry("third", &entry3));
1400 ASSERT_EQ(kSize, WriteSparseData(entry3, 0, buffer.get(), kSize));
1401 ASSERT_EQ(net::OK, CreateEntry("fourth", &entry4));
1402 ASSERT_EQ(kSize, WriteSparseData(entry4, 0, buffer.get(), kSize));
1403 ASSERT_EQ(kSize,
1404 WriteSparseData(entry3, kOffset + kSize, buffer.get(), kSize));
1405 ASSERT_EQ(kSize,
1406 WriteSparseData(entry4, kOffset + kSize, buffer.get(), kSize));
1407 entry3->Close();
1408 entry4->Close();
1409
1410 AddDelay();
1411 if (doomed_end)
1412 *doomed_end = base::Time::Now();
1413 }
1414
1415 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
1416 SetMemoryOnlyMode();
1417 base::Time start;
1418 InitSparseCache(&start, NULL);
1419 DoomEntriesSince(start);
1420 EXPECT_EQ(1, cache_->GetEntryCount());
1421 }
1422
1423 TEST_F(DiskCacheBackendTest, MemoryOnlyDoomAllSparse) {
1424 SetMemoryOnlyMode();
1425 InitSparseCache(NULL, NULL);
1426 EXPECT_EQ(net::OK, DoomAllEntries());
1427 EXPECT_EQ(0, cache_->GetEntryCount());
1428 }
1429
1348 void DiskCacheBackendTest::BackendDoomBetween() { 1430 void DiskCacheBackendTest::BackendDoomBetween() {
1349 InitCache(); 1431 InitCache();
1350 1432
1351 disk_cache::Entry *entry; 1433 disk_cache::Entry *entry;
1352 ASSERT_EQ(net::OK, CreateEntry("first", &entry)); 1434 ASSERT_EQ(net::OK, CreateEntry("first", &entry));
1353 entry->Close(); 1435 entry->Close();
1354 FlushQueueForTest(); 1436 FlushQueueForTest();
1355 1437
1356 AddDelay(); 1438 AddDelay();
1357 Time middle_start = Time::Now(); 1439 Time middle_start = Time::Now();
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1395 TEST_F(DiskCacheBackendTest, NewEvictionDoomBetween) { 1477 TEST_F(DiskCacheBackendTest, NewEvictionDoomBetween) {
1396 SetNewEviction(); 1478 SetNewEviction();
1397 BackendDoomBetween(); 1479 BackendDoomBetween();
1398 } 1480 }
1399 1481
1400 TEST_F(DiskCacheBackendTest, MemoryOnlyDoomBetween) { 1482 TEST_F(DiskCacheBackendTest, MemoryOnlyDoomBetween) {
1401 SetMemoryOnlyMode(); 1483 SetMemoryOnlyMode();
1402 BackendDoomBetween(); 1484 BackendDoomBetween();
1403 } 1485 }
1404 1486
1487 TEST_F(DiskCacheBackendTest, MemoryOnlyDoomEntriesBetweenSparse) {
1488 SetMemoryOnlyMode();
1489 base::Time start, end;
1490 InitSparseCache(&start, &end);
1491 DoomEntriesBetween(start, end);
1492 EXPECT_EQ(1, cache_->GetEntryCount());
1493 }
1494
1405 void DiskCacheBackendTest::BackendTransaction(const std::string& name, 1495 void DiskCacheBackendTest::BackendTransaction(const std::string& name,
1406 int num_entries, bool load) { 1496 int num_entries, bool load) {
1407 success_ = false; 1497 success_ = false;
1408 ASSERT_TRUE(CopyTestCache(name)); 1498 ASSERT_TRUE(CopyTestCache(name));
1409 DisableFirstCleanup(); 1499 DisableFirstCleanup();
1410 1500
1411 uint32 mask; 1501 uint32 mask;
1412 if (load) { 1502 if (load) {
1413 mask = 0xf; 1503 mask = 0xf;
1414 SetMaxSize(0x100000); 1504 SetMaxSize(0x100000);
(...skipping 1269 matching lines...) Expand 10 before | Expand all | Expand 10 after
2684 // Ping the oldest entry. 2774 // Ping the oldest entry.
2685 cache_->OnExternalCacheHit("key0"); 2775 cache_->OnExternalCacheHit("key0");
2686 2776
2687 TrimForTest(false); 2777 TrimForTest(false);
2688 2778
2689 // Make sure the older key remains. 2779 // Make sure the older key remains.
2690 EXPECT_EQ(1, cache_->GetEntryCount()); 2780 EXPECT_EQ(1, cache_->GetEntryCount());
2691 ASSERT_EQ(net::OK, OpenEntry("key0", &entry)); 2781 ASSERT_EQ(net::OK, OpenEntry("key0", &entry));
2692 entry->Close(); 2782 entry->Close();
2693 } 2783 }
OLDNEW
« 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