Chromium Code Reviews| OLD | NEW |
|---|---|
| 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/bind.h" | 6 #include "base/bind.h" |
| 7 #include "base/bind_helpers.h" | 7 #include "base/bind_helpers.h" |
| 8 #include "base/file_util.h" | 8 #include "base/file_util.h" |
| 9 #include "base/string_util.h" | |
| 10 #include "base/stringprintf.h" | |
| 9 #include "base/threading/platform_thread.h" | 11 #include "base/threading/platform_thread.h" |
| 10 #include "base/timer.h" | 12 #include "base/timer.h" |
| 11 #include "base/string_util.h" | |
| 12 #include "base/stringprintf.h" | |
| 13 #include "net/base/completion_callback.h" | 13 #include "net/base/completion_callback.h" |
| 14 #include "net/base/io_buffer.h" | 14 #include "net/base/io_buffer.h" |
| 15 #include "net/base/net_errors.h" | 15 #include "net/base/net_errors.h" |
| 16 #include "net/base/test_completion_callback.h" | 16 #include "net/base/test_completion_callback.h" |
| 17 #include "net/disk_cache/backend_impl.h" | 17 #include "net/disk_cache/backend_impl.h" |
| 18 #include "net/disk_cache/disk_cache_test_base.h" | 18 #include "net/disk_cache/disk_cache_test_base.h" |
| 19 #include "net/disk_cache/disk_cache_test_util.h" | 19 #include "net/disk_cache/disk_cache_test_util.h" |
| 20 #include "net/disk_cache/entry_impl.h" | 20 #include "net/disk_cache/entry_impl.h" |
| 21 #include "net/disk_cache/mem_entry_impl.h" | 21 #include "net/disk_cache/mem_entry_impl.h" |
| 22 #include "net/disk_cache/simple/simple_entry_format.h" | 22 #include "net/disk_cache/simple/simple_entry_format.h" |
| 23 #include "net/disk_cache/simple/simple_entry_impl.h" | |
| 23 #include "net/disk_cache/simple/simple_util.h" | 24 #include "net/disk_cache/simple/simple_util.h" |
| 24 #include "testing/gtest/include/gtest/gtest.h" | 25 #include "testing/gtest/include/gtest/gtest.h" |
| 25 | 26 |
| 26 using base::Time; | 27 using base::Time; |
| 27 | 28 |
| 28 // Tests that can run with different types of caches. | 29 // Tests that can run with different types of caches. |
| 29 class DiskCacheEntryTest : public DiskCacheTestWithCache { | 30 class DiskCacheEntryTest : public DiskCacheTestWithCache { |
| 30 public: | 31 public: |
| 31 void InternalSyncIOBackground(disk_cache::Entry* entry); | 32 void InternalSyncIOBackground(disk_cache::Entry* entry); |
| 32 void ExternalSyncIOBackground(disk_cache::Entry* entry); | 33 void ExternalSyncIOBackground(disk_cache::Entry* entry); |
| (...skipping 2385 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2418 const base::FilePath entry_path = cache_path_.AppendASCII( | 2419 const base::FilePath entry_path = cache_path_.AppendASCII( |
| 2419 disk_cache::simple_util::GetFilenameFromKeyAndIndex(key, 0)); | 2420 disk_cache::simple_util::GetFilenameFromKeyAndIndex(key, 0)); |
| 2420 const int64 invalid_size = | 2421 const int64 invalid_size = |
| 2421 disk_cache::simple_util::GetFileSizeFromKeyAndDataSize(key, | 2422 disk_cache::simple_util::GetFileSizeFromKeyAndDataSize(key, |
| 2422 kTruncationBytes); | 2423 kTruncationBytes); |
| 2423 EXPECT_TRUE(TruncatePath(entry_path, invalid_size)); | 2424 EXPECT_TRUE(TruncatePath(entry_path, invalid_size)); |
| 2424 EXPECT_EQ(net::ERR_FAILED, OpenEntry(key, &entry)); | 2425 EXPECT_EQ(net::ERR_FAILED, OpenEntry(key, &entry)); |
| 2425 DisableIntegrityCheck(); | 2426 DisableIntegrityCheck(); |
| 2426 } | 2427 } |
| 2427 | 2428 |
| 2429 TEST_F(DiskCacheEntryTest, SimpleCacheOptmisitc) { | |
|
gavinp
2013/05/01 13:11:22
speeling
felipeg
2013/05/02 09:49:27
Done.
| |
| 2430 // Test sequence: | |
| 2431 // Create, Write, Read, Write, Read, Close. | |
| 2432 SetSimpleCacheMode(); | |
| 2433 InitCache(); | |
| 2434 disk_cache::Entry* null = NULL; | |
| 2435 const char key[] = "the first key"; | |
| 2436 | |
| 2437 MessageLoopHelper helper; | |
| 2438 CallbackTest callback1(&helper, false); | |
| 2439 CallbackTest callback2(&helper, false); | |
| 2440 CallbackTest callback3(&helper, false); | |
| 2441 CallbackTest callback4(&helper, false); | |
| 2442 CallbackTest callback5(&helper, false); | |
| 2443 | |
| 2444 int expected = 0; | |
| 2445 const int kSize1 = 10; | |
| 2446 const int kSize2 = 20; | |
| 2447 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); | |
| 2448 scoped_refptr<net::IOBuffer> buffer1_read(new net::IOBuffer(kSize1)); | |
| 2449 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); | |
| 2450 scoped_refptr<net::IOBuffer> buffer2_read(new net::IOBuffer(kSize2)); | |
| 2451 CacheTestFillBuffer(buffer1->data(), kSize1, false); | |
| 2452 CacheTestFillBuffer(buffer2->data(), kSize2, false); | |
| 2453 | |
| 2454 disk_cache::Entry* entry = NULL; | |
| 2455 // Create is optimistic, must return OK. | |
| 2456 EXPECT_EQ(net::OK, | |
|
gavinp
2013/05/01 13:11:22
This should be an ASSERT_EQ, so the crash stops wh
felipeg
2013/05/02 09:49:27
Done.
| |
| 2457 cache_->CreateEntry(key, &entry, | |
| 2458 base::Bind(&CallbackTest::Run, | |
| 2459 base::Unretained(&callback1)))); | |
| 2460 EXPECT_NE(null, entry); | |
| 2461 | |
| 2462 // This write may or may not be optimistic (it depends if the previous | |
| 2463 // optimistic create already finished by the time we call the write here). | |
| 2464 int ret = entry->WriteData( | |
|
gavinp
2013/05/01 13:11:22
This seems wise. If we did an optimistic write aft
felipeg
2013/05/02 09:49:27
Done.
| |
| 2465 0, 0, buffer1, kSize1, | |
| 2466 base::Bind(&CallbackTest::Run, base::Unretained(&callback2)), false); | |
| 2467 EXPECT_TRUE(kSize1 == ret || net::ERR_IO_PENDING == ret); | |
| 2468 if (net::ERR_IO_PENDING == ret) | |
| 2469 expected++; | |
| 2470 | |
| 2471 // This Read must not be optimistic, since we don't support that yet. | |
| 2472 EXPECT_EQ(net::ERR_IO_PENDING, entry->ReadData( | |
| 2473 0, 0, buffer1_read, kSize1, | |
| 2474 base::Bind(&CallbackTest::Run, base::Unretained(&callback3)))); | |
| 2475 expected++; | |
| 2476 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | |
| 2477 EXPECT_EQ(0, memcmp(buffer1->data(), buffer1_read->data(), kSize1)); | |
| 2478 | |
| 2479 // At this point after waiting, the pending operations queue on the entry | |
| 2480 // should be empty, so the next Write operation must run as optimistic. | |
| 2481 EXPECT_EQ(kSize2, | |
| 2482 entry->WriteData( | |
| 2483 0, 0, buffer2, kSize2, | |
| 2484 base::Bind(&CallbackTest::Run, | |
| 2485 base::Unretained(&callback4)), false)); | |
| 2486 | |
| 2487 // Lets do another read so we block until both the write and the read | |
| 2488 // operation finishes and we can then test for HasOneRef() below. | |
| 2489 EXPECT_EQ(net::ERR_IO_PENDING, entry->ReadData( | |
| 2490 0, 0, buffer2_read, kSize2, | |
| 2491 base::Bind(&CallbackTest::Run, base::Unretained(&callback5)))); | |
| 2492 expected++; | |
| 2493 | |
| 2494 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | |
| 2495 EXPECT_EQ(0, memcmp(buffer2->data(), buffer2_read->data(), kSize2)); | |
| 2496 | |
| 2497 // Check that we are not leaking. | |
| 2498 EXPECT_NE(entry, null); | |
| 2499 EXPECT_TRUE( | |
| 2500 reinterpret_cast<disk_cache::SimpleEntryImpl*>(entry)->HasOneRef()); | |
| 2501 entry->Close(); | |
| 2502 entry = NULL; | |
| 2503 } | |
| 2504 | |
| 2505 TEST_F(DiskCacheEntryTest, SimpleCacheOptmisitc2) { | |
| 2506 // Test sequence: | |
| 2507 // Create, Open, Close, Close. | |
| 2508 SetSimpleCacheMode(); | |
| 2509 InitCache(); | |
| 2510 disk_cache::Entry* null = NULL; | |
| 2511 const char key[] = "the first key"; | |
| 2512 | |
| 2513 MessageLoopHelper helper; | |
| 2514 CallbackTest callback1(&helper, false); | |
| 2515 CallbackTest callback2(&helper, false); | |
| 2516 | |
| 2517 disk_cache::Entry* entry = NULL; | |
| 2518 EXPECT_EQ(net::OK, | |
| 2519 cache_->CreateEntry(key, &entry, | |
| 2520 base::Bind(&CallbackTest::Run, | |
| 2521 base::Unretained(&callback1)))); | |
| 2522 EXPECT_NE(null, entry); | |
| 2523 | |
| 2524 disk_cache::Entry* entry2 = NULL; | |
| 2525 EXPECT_EQ(net::ERR_IO_PENDING, | |
| 2526 cache_->OpenEntry(key, &entry2, | |
| 2527 base::Bind(&CallbackTest::Run, | |
| 2528 base::Unretained(&callback2)))); | |
| 2529 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(1)); | |
| 2530 | |
| 2531 EXPECT_NE(null, entry2); | |
| 2532 EXPECT_EQ(entry, entry2); | |
| 2533 | |
| 2534 // We have to call close twice, since we called create and open above. | |
| 2535 entry->Close(); | |
| 2536 | |
| 2537 // Check that we are not leaking. | |
| 2538 EXPECT_TRUE( | |
| 2539 reinterpret_cast<disk_cache::SimpleEntryImpl*>(entry)->HasOneRef()); | |
| 2540 entry->Close(); | |
| 2541 entry = NULL; | |
| 2542 } | |
| 2543 | |
| 2544 TEST_F(DiskCacheEntryTest, SimpleCacheOptmisitc3) { | |
| 2545 // Test sequence: | |
| 2546 // Create, Close, Open, Close. | |
| 2547 SetSimpleCacheMode(); | |
| 2548 InitCache(); | |
| 2549 disk_cache::Entry* null = NULL; | |
| 2550 const char key[] = "the first key"; | |
| 2551 | |
| 2552 disk_cache::Entry* entry = NULL; | |
| 2553 EXPECT_EQ(net::OK, | |
| 2554 cache_->CreateEntry(key, &entry, net::CompletionCallback())); | |
| 2555 EXPECT_NE(null, entry); | |
| 2556 entry->Close(); | |
| 2557 | |
| 2558 net::TestCompletionCallback cb; | |
| 2559 disk_cache::Entry* entry2 = NULL; | |
| 2560 EXPECT_EQ(net::ERR_IO_PENDING, | |
| 2561 cache_->OpenEntry(key, &entry2, cb.callback())); | |
| 2562 EXPECT_EQ(net::OK, cb.GetResult(net::ERR_IO_PENDING)); | |
| 2563 | |
| 2564 EXPECT_NE(null, entry2); | |
| 2565 EXPECT_EQ(entry, entry2); | |
| 2566 | |
| 2567 // Check that we are not leaking. | |
| 2568 EXPECT_TRUE( | |
| 2569 reinterpret_cast<disk_cache::SimpleEntryImpl*>(entry2)->HasOneRef()); | |
| 2570 entry2->Close(); | |
| 2571 } | |
| 2572 | |
| 2573 TEST_F(DiskCacheEntryTest, SimpleCacheOptmisitc4) { | |
| 2574 // Test sequence: | |
| 2575 // Create, Close, Write, Open, Open, Close, Write, Read, Close. | |
| 2576 SetSimpleCacheMode(); | |
| 2577 InitCache(); | |
| 2578 disk_cache::Entry* null = NULL; | |
| 2579 const char key[] = "the first key"; | |
| 2580 | |
| 2581 net::TestCompletionCallback cb; | |
| 2582 const int kSize1 = 10; | |
| 2583 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); | |
| 2584 CacheTestFillBuffer(buffer1->data(), kSize1, false); | |
| 2585 disk_cache::Entry* entry = NULL; | |
| 2586 | |
| 2587 EXPECT_EQ(net::OK, | |
| 2588 cache_->CreateEntry(key, &entry, net::CompletionCallback())); | |
| 2589 EXPECT_NE(null, entry); | |
| 2590 entry->Close(); | |
| 2591 | |
| 2592 // Lets do a Write so we block until both the Close and the Write | |
| 2593 // operation finishes. Write must fail since we are writing in a closed entry. | |
| 2594 EXPECT_EQ(net::ERR_IO_PENDING, entry->WriteData( | |
| 2595 0, 0, buffer1, kSize1, cb.callback(), false)); | |
| 2596 EXPECT_EQ(net::ERR_FAILED, cb.GetResult(net::ERR_IO_PENDING)); | |
| 2597 | |
| 2598 // Finish running the pending tasks so that we fully complete the close | |
| 2599 // operation and destroy the entry object. | |
| 2600 MessageLoop::current()->RunUntilIdle(); | |
| 2601 | |
| 2602 // At this point the |entry| must have been destroyed, and called | |
| 2603 // RemoveSelfFromBackend() so we check that the next Open will construct a new | |
| 2604 // SimpleEntryImpl object. | |
| 2605 disk_cache::Entry* entry2 = NULL; | |
| 2606 EXPECT_EQ(net::ERR_IO_PENDING, | |
| 2607 cache_->OpenEntry(key, &entry2, cb.callback())); | |
| 2608 EXPECT_EQ(net::OK, cb.GetResult(net::ERR_IO_PENDING)); | |
| 2609 EXPECT_NE(null, entry2); | |
| 2610 EXPECT_NE(entry, entry2); | |
| 2611 | |
| 2612 disk_cache::Entry* entry3 = NULL; | |
| 2613 EXPECT_EQ(net::ERR_IO_PENDING, | |
| 2614 cache_->OpenEntry(key, &entry3, cb.callback())); | |
| 2615 EXPECT_EQ(net::OK, cb.GetResult(net::ERR_IO_PENDING)); | |
| 2616 EXPECT_NE(null, entry3); | |
| 2617 EXPECT_EQ(entry2, entry3); | |
| 2618 entry3->Close(); | |
| 2619 | |
| 2620 // The previous Close doesn't actually closes the entry since we opened it | |
| 2621 // twice, so the next Write operation must succeed and it must be able to | |
| 2622 // perform it optimistically, since there is no operation running on this | |
| 2623 // entry. | |
| 2624 EXPECT_EQ(kSize1, entry2->WriteData( | |
| 2625 0, 0, buffer1, kSize1, net::CompletionCallback(), false)); | |
| 2626 | |
| 2627 // Lets do another read so we block until both the write and the read | |
| 2628 // operation finishes and we can then test for HasOneRef() below. | |
| 2629 EXPECT_EQ(net::ERR_IO_PENDING, entry2->ReadData( | |
| 2630 0, 0, buffer1, kSize1, cb.callback())); | |
| 2631 EXPECT_EQ(kSize1, cb.GetResult(net::ERR_IO_PENDING)); | |
| 2632 | |
| 2633 // Check that we are not leaking. | |
| 2634 EXPECT_TRUE( | |
| 2635 reinterpret_cast<disk_cache::SimpleEntryImpl*>(entry2)->HasOneRef()); | |
| 2636 entry2->Close(); | |
| 2637 } | |
| 2638 | |
| 2639 // This test is flaky because of the race of Create followed by a Doom. | |
| 2640 // See test SimpleCacheCreateDoomRace. | |
| 2641 TEST_F(DiskCacheEntryTest, DISABLED_SimpleCacheOptmisitc5) { | |
| 2642 // Test sequence: | |
| 2643 // Create, Doom, Write, Read, Close. | |
| 2644 SetSimpleCacheMode(); | |
| 2645 InitCache(); | |
| 2646 disk_cache::Entry* null = NULL; | |
| 2647 const char key[] = "the first key"; | |
| 2648 | |
| 2649 net::TestCompletionCallback cb; | |
| 2650 const int kSize1 = 10; | |
| 2651 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); | |
| 2652 CacheTestFillBuffer(buffer1->data(), kSize1, false); | |
| 2653 disk_cache::Entry* entry = NULL; | |
| 2654 | |
| 2655 EXPECT_EQ(net::OK, | |
| 2656 cache_->CreateEntry(key, &entry, net::CompletionCallback())); | |
| 2657 EXPECT_NE(null, entry); | |
| 2658 entry->Doom(); | |
| 2659 | |
| 2660 EXPECT_EQ(net::ERR_IO_PENDING, entry->WriteData( | |
| 2661 0, 0, buffer1, kSize1, cb.callback(), false)); | |
| 2662 EXPECT_EQ(kSize1, cb.GetResult(net::ERR_IO_PENDING)); | |
| 2663 | |
| 2664 EXPECT_EQ(net::ERR_IO_PENDING, entry->ReadData( | |
| 2665 0, 0, buffer1, kSize1, cb.callback())); | |
| 2666 EXPECT_EQ(kSize1, cb.GetResult(net::ERR_IO_PENDING)); | |
| 2667 | |
| 2668 // Check that we are not leaking. | |
| 2669 EXPECT_TRUE( | |
| 2670 reinterpret_cast<disk_cache::SimpleEntryImpl*>(entry)->HasOneRef()); | |
| 2671 entry->Close(); | |
| 2672 } | |
| 2673 | |
| 2674 TEST_F(DiskCacheEntryTest, SimpleCacheOptmisitc6) { | |
| 2675 // Test sequence: | |
| 2676 // Create, Write, Doom, Doom, Read, Doom, Close. | |
| 2677 SetSimpleCacheMode(); | |
| 2678 InitCache(); | |
| 2679 disk_cache::Entry* null = NULL; | |
| 2680 const char key[] = "the first key"; | |
| 2681 | |
| 2682 net::TestCompletionCallback cb; | |
| 2683 const int kSize1 = 10; | |
| 2684 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); | |
| 2685 scoped_refptr<net::IOBuffer> buffer1_read(new net::IOBuffer(kSize1)); | |
| 2686 CacheTestFillBuffer(buffer1->data(), kSize1, false); | |
| 2687 disk_cache::Entry* entry = NULL; | |
| 2688 | |
| 2689 EXPECT_EQ(net::OK, | |
| 2690 cache_->CreateEntry(key, &entry, net::CompletionCallback())); | |
| 2691 EXPECT_NE(null, entry); | |
| 2692 | |
| 2693 EXPECT_EQ(net::ERR_IO_PENDING, entry->WriteData( | |
| 2694 0, 0, buffer1, kSize1, cb.callback(), false)); | |
| 2695 EXPECT_EQ(kSize1, cb.GetResult(net::ERR_IO_PENDING)); | |
| 2696 | |
| 2697 entry->Doom(); | |
| 2698 entry->Doom(); | |
| 2699 | |
| 2700 // This Read must not be optimistic, since we don't support that yet. | |
| 2701 EXPECT_EQ(net::ERR_IO_PENDING, entry->ReadData( | |
| 2702 0, 0, buffer1_read, kSize1, cb.callback())); | |
| 2703 EXPECT_EQ(kSize1, cb.GetResult(net::ERR_IO_PENDING)); | |
| 2704 EXPECT_EQ(0, memcmp(buffer1->data(), buffer1_read->data(), kSize1)); | |
| 2705 | |
| 2706 entry->Doom(); | |
| 2707 | |
| 2708 // Check that we are not leaking. | |
| 2709 EXPECT_TRUE( | |
| 2710 reinterpret_cast<disk_cache::SimpleEntryImpl*>(entry)->HasOneRef()); | |
| 2711 entry->Close(); | |
| 2712 } | |
| 2713 | |
| 2714 TEST_F(DiskCacheEntryTest, DISABLED_SimpleCacheCreateDoomRace) { | |
| 2715 // Test sequence: | |
| 2716 // Create, Doom, Write, Close, Check files are not on disk anymore. | |
| 2717 SetSimpleCacheMode(); | |
| 2718 InitCache(); | |
| 2719 disk_cache::Entry* null = NULL; | |
| 2720 const char key[] = "the first key"; | |
| 2721 | |
| 2722 net::TestCompletionCallback cb; | |
| 2723 const int kSize1 = 10; | |
| 2724 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); | |
| 2725 CacheTestFillBuffer(buffer1->data(), kSize1, false); | |
| 2726 disk_cache::Entry* entry = NULL; | |
| 2727 | |
| 2728 EXPECT_EQ(net::OK, | |
| 2729 cache_->CreateEntry(key, &entry, net::CompletionCallback())); | |
| 2730 EXPECT_NE(null, entry); | |
| 2731 | |
| 2732 disk_cache::SimpleEntryImpl* simple_entry = | |
| 2733 reinterpret_cast<disk_cache::SimpleEntryImpl*>(entry); | |
| 2734 simple_entry->DoomEntry(cb.callback()); | |
|
gavinp
2013/05/02 09:49:34
This won't link right. Instead:
backend_->DoomE
felipeg
2013/05/02 09:55:06
Done.
| |
| 2735 EXPECT_EQ(net::OK, cb.GetResult(net::ERR_IO_PENDING)); | |
| 2736 | |
| 2737 // Lets do a Write so we block until all operations are done, so we can check | |
| 2738 // the HasOneRef() below. | |
| 2739 EXPECT_EQ(net::ERR_IO_PENDING, entry->WriteData( | |
|
gavinp
2013/05/01 13:11:22
Could we just use something like:
EXPECT_EQ(kSi
felipeg
2013/05/02 09:49:27
I would prefer not do that, because I want to make
gavinp
2013/05/02 12:47:39
Good point. Can you call out that this write can't
felipeg
2013/05/02 13:55:58
Done.
| |
| 2740 0, 0, buffer1, kSize1, cb.callback(), false)); | |
| 2741 EXPECT_EQ(kSize1, cb.GetResult(net::ERR_IO_PENDING)); | |
| 2742 | |
| 2743 // Check that we are not leaking. | |
| 2744 EXPECT_TRUE( | |
| 2745 reinterpret_cast<disk_cache::SimpleEntryImpl*>(entry)->HasOneRef()); | |
| 2746 entry->Close(); | |
| 2747 | |
| 2748 // Finish running the pending tasks so that we fully complete the close | |
| 2749 // operation and destroy the entry object. | |
| 2750 MessageLoop::current()->RunUntilIdle(); | |
| 2751 | |
| 2752 for (int i = 0; i < disk_cache::kSimpleEntryFileCount; ++i) { | |
| 2753 base::FilePath entry_file_path = cache_path_.AppendASCII( | |
| 2754 disk_cache::simple_util::GetFilenameFromKeyAndIndex(key, i)); | |
| 2755 base::PlatformFileInfo info; | |
| 2756 EXPECT_FALSE(file_util::GetFileInfo(entry_file_path, &info)); | |
| 2757 } | |
| 2758 } | |
| 2759 | |
| 2428 // Tests that old entries are evicted while new entries remain in the index. | 2760 // Tests that old entries are evicted while new entries remain in the index. |
| 2429 // This test relies on non-mandatory properties of the simple Cache Backend: | 2761 // This test relies on non-mandatory properties of the simple Cache Backend: |
| 2430 // LRU eviction, specific values of high-watermark and low-watermark etc. | 2762 // LRU eviction, specific values of high-watermark and low-watermark etc. |
| 2431 // When changing the eviction algorithm, the test will have to be re-engineered. | 2763 // When changing the eviction algorithm, the test will have to be re-engineered. |
| 2432 TEST_F(DiskCacheEntryTest, SimpleCacheEvictOldEntries) { | 2764 TEST_F(DiskCacheEntryTest, SimpleCacheEvictOldEntries) { |
| 2433 const int kMaxSize = 200 * 1024; | 2765 const int kMaxSize = 200 * 1024; |
| 2434 const int kWriteSize = kMaxSize / 10; | 2766 const int kWriteSize = kMaxSize / 10; |
| 2435 const int kNumExtraEntries = 12; | 2767 const int kNumExtraEntries = 12; |
| 2436 SetSimpleCacheMode(); | 2768 SetSimpleCacheMode(); |
| 2437 SetMaxSize(kMaxSize); | 2769 SetMaxSize(kMaxSize); |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 2462 // is finished. We are testing the positive case, i.e. when the eviction | 2794 // is finished. We are testing the positive case, i.e. when the eviction |
| 2463 // never reaches this entry, should be non-flaky. | 2795 // never reaches this entry, should be non-flaky. |
| 2464 ASSERT_EQ(net::OK, OpenEntry(key2 + base::StringPrintf("%d", entry_no), | 2796 ASSERT_EQ(net::OK, OpenEntry(key2 + base::StringPrintf("%d", entry_no), |
| 2465 &entry)) | 2797 &entry)) |
| 2466 << "Should not have evicted fresh entry " << entry_no; | 2798 << "Should not have evicted fresh entry " << entry_no; |
| 2467 entry->Close(); | 2799 entry->Close(); |
| 2468 } | 2800 } |
| 2469 } | 2801 } |
| 2470 | 2802 |
| 2471 #endif // defined(OS_POSIX) | 2803 #endif // defined(OS_POSIX) |
| OLD | NEW |