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

Side by Side Diff: net/disk_cache/entry_unittest.cc

Issue 2109503009: Refactor net tests to use GMock matchers for checking net::Error results (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Revert changes to contents.txt files Created 4 years, 5 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
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 <utility> 5 #include <utility>
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/files/file.h" 9 #include "base/files/file.h"
10 #include "base/files/file_util.h" 10 #include "base/files/file_util.h"
(...skipping 10 matching lines...) Expand all
21 #include "net/disk_cache/blockfile/entry_impl.h" 21 #include "net/disk_cache/blockfile/entry_impl.h"
22 #include "net/disk_cache/disk_cache_test_base.h" 22 #include "net/disk_cache/disk_cache_test_base.h"
23 #include "net/disk_cache/disk_cache_test_util.h" 23 #include "net/disk_cache/disk_cache_test_util.h"
24 #include "net/disk_cache/memory/mem_entry_impl.h" 24 #include "net/disk_cache/memory/mem_entry_impl.h"
25 #include "net/disk_cache/simple/simple_backend_impl.h" 25 #include "net/disk_cache/simple/simple_backend_impl.h"
26 #include "net/disk_cache/simple/simple_entry_format.h" 26 #include "net/disk_cache/simple/simple_entry_format.h"
27 #include "net/disk_cache/simple/simple_entry_impl.h" 27 #include "net/disk_cache/simple/simple_entry_impl.h"
28 #include "net/disk_cache/simple/simple_synchronous_entry.h" 28 #include "net/disk_cache/simple/simple_synchronous_entry.h"
29 #include "net/disk_cache/simple/simple_test_util.h" 29 #include "net/disk_cache/simple/simple_test_util.h"
30 #include "net/disk_cache/simple/simple_util.h" 30 #include "net/disk_cache/simple/simple_util.h"
31 #include "net/test/gtest_util.h"
32 #include "testing/gmock/include/gmock/gmock.h"
31 #include "testing/gtest/include/gtest/gtest.h" 33 #include "testing/gtest/include/gtest/gtest.h"
32 34
35 using net::test::IsError;
36 using net::test::IsOk;
37
33 using base::Time; 38 using base::Time;
34 using disk_cache::ScopedEntryPtr; 39 using disk_cache::ScopedEntryPtr;
35 40
36 // Tests that can run with different types of caches. 41 // Tests that can run with different types of caches.
37 class DiskCacheEntryTest : public DiskCacheTestWithCache { 42 class DiskCacheEntryTest : public DiskCacheTestWithCache {
38 public: 43 public:
39 void InternalSyncIOBackground(disk_cache::Entry* entry); 44 void InternalSyncIOBackground(disk_cache::Entry* entry);
40 void ExternalSyncIOBackground(disk_cache::Entry* entry); 45 void ExternalSyncIOBackground(disk_cache::Entry* entry);
41 46
42 protected: 47 protected:
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 EXPECT_EQ(0, entry->WriteData( 139 EXPECT_EQ(0, entry->WriteData(
135 1, 0, NULL, 0, net::CompletionCallback(), true)); 140 1, 0, NULL, 0, net::CompletionCallback(), true));
136 } 141 }
137 142
138 // We need to support synchronous IO even though it is not a supported operation 143 // We need to support synchronous IO even though it is not a supported operation
139 // from the point of view of the disk cache's public interface, because we use 144 // from the point of view of the disk cache's public interface, because we use
140 // it internally, not just by a few tests, but as part of the implementation 145 // it internally, not just by a few tests, but as part of the implementation
141 // (see sparse_control.cc, for example). 146 // (see sparse_control.cc, for example).
142 void DiskCacheEntryTest::InternalSyncIO() { 147 void DiskCacheEntryTest::InternalSyncIO() {
143 disk_cache::Entry* entry = NULL; 148 disk_cache::Entry* entry = NULL;
144 ASSERT_EQ(net::OK, CreateEntry("the first key", &entry)); 149 ASSERT_THAT(CreateEntry("the first key", &entry), IsOk());
145 ASSERT_TRUE(NULL != entry); 150 ASSERT_TRUE(NULL != entry);
146 151
147 // The bulk of the test runs from within the callback, on the cache thread. 152 // The bulk of the test runs from within the callback, on the cache thread.
148 RunTaskForTest(base::Bind(&DiskCacheEntryTest::InternalSyncIOBackground, 153 RunTaskForTest(base::Bind(&DiskCacheEntryTest::InternalSyncIOBackground,
149 base::Unretained(this), 154 base::Unretained(this),
150 entry)); 155 entry));
151 156
152 157
153 entry->Doom(); 158 entry->Doom();
154 entry->Close(); 159 entry->Close();
155 FlushQueueForTest(); 160 FlushQueueForTest();
156 EXPECT_EQ(0, cache_->GetEntryCount()); 161 EXPECT_EQ(0, cache_->GetEntryCount());
157 } 162 }
158 163
159 TEST_F(DiskCacheEntryTest, InternalSyncIO) { 164 TEST_F(DiskCacheEntryTest, InternalSyncIO) {
160 InitCache(); 165 InitCache();
161 InternalSyncIO(); 166 InternalSyncIO();
162 } 167 }
163 168
164 TEST_F(DiskCacheEntryTest, MemoryOnlyInternalSyncIO) { 169 TEST_F(DiskCacheEntryTest, MemoryOnlyInternalSyncIO) {
165 SetMemoryOnlyMode(); 170 SetMemoryOnlyMode();
166 InitCache(); 171 InitCache();
167 InternalSyncIO(); 172 InternalSyncIO();
168 } 173 }
169 174
170 void DiskCacheEntryTest::InternalAsyncIO() { 175 void DiskCacheEntryTest::InternalAsyncIO() {
171 disk_cache::Entry* entry = NULL; 176 disk_cache::Entry* entry = NULL;
172 ASSERT_EQ(net::OK, CreateEntry("the first key", &entry)); 177 ASSERT_THAT(CreateEntry("the first key", &entry), IsOk());
173 ASSERT_TRUE(NULL != entry); 178 ASSERT_TRUE(NULL != entry);
174 179
175 // Avoid using internal buffers for the test. We have to write something to 180 // Avoid using internal buffers for the test. We have to write something to
176 // the entry and close it so that we flush the internal buffer to disk. After 181 // the entry and close it so that we flush the internal buffer to disk. After
177 // that, IO operations will be really hitting the disk. We don't care about 182 // that, IO operations will be really hitting the disk. We don't care about
178 // the content, so just extending the entry is enough (all extensions zero- 183 // the content, so just extending the entry is enough (all extensions zero-
179 // fill any holes). 184 // fill any holes).
180 EXPECT_EQ(0, WriteData(entry, 0, 15 * 1024, NULL, 0, false)); 185 EXPECT_EQ(0, WriteData(entry, 0, 15 * 1024, NULL, 0, false));
181 EXPECT_EQ(0, WriteData(entry, 1, 15 * 1024, NULL, 0, false)); 186 EXPECT_EQ(0, WriteData(entry, 1, 15 * 1024, NULL, 0, false));
182 entry->Close(); 187 entry->Close();
183 ASSERT_EQ(net::OK, OpenEntry("the first key", &entry)); 188 ASSERT_THAT(OpenEntry("the first key", &entry), IsOk());
184 189
185 MessageLoopHelper helper; 190 MessageLoopHelper helper;
186 // Let's verify that each IO goes to the right callback object. 191 // Let's verify that each IO goes to the right callback object.
187 CallbackTest callback1(&helper, false); 192 CallbackTest callback1(&helper, false);
188 CallbackTest callback2(&helper, false); 193 CallbackTest callback2(&helper, false);
189 CallbackTest callback3(&helper, false); 194 CallbackTest callback3(&helper, false);
190 CallbackTest callback4(&helper, false); 195 CallbackTest callback4(&helper, false);
191 CallbackTest callback5(&helper, false); 196 CallbackTest callback5(&helper, false);
192 CallbackTest callback6(&helper, false); 197 CallbackTest callback6(&helper, false);
193 CallbackTest callback7(&helper, false); 198 CallbackTest callback7(&helper, false);
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
417 422
418 // We need to delete the memory buffer on this thread. 423 // We need to delete the memory buffer on this thread.
419 EXPECT_EQ(0, entry->WriteData( 424 EXPECT_EQ(0, entry->WriteData(
420 0, 0, NULL, 0, net::CompletionCallback(), true)); 425 0, 0, NULL, 0, net::CompletionCallback(), true));
421 EXPECT_EQ(0, entry->WriteData( 426 EXPECT_EQ(0, entry->WriteData(
422 1, 0, NULL, 0, net::CompletionCallback(), true)); 427 1, 0, NULL, 0, net::CompletionCallback(), true));
423 } 428 }
424 429
425 void DiskCacheEntryTest::ExternalSyncIO() { 430 void DiskCacheEntryTest::ExternalSyncIO() {
426 disk_cache::Entry* entry; 431 disk_cache::Entry* entry;
427 ASSERT_EQ(net::OK, CreateEntry("the first key", &entry)); 432 ASSERT_THAT(CreateEntry("the first key", &entry), IsOk());
428 433
429 // The bulk of the test runs from within the callback, on the cache thread. 434 // The bulk of the test runs from within the callback, on the cache thread.
430 RunTaskForTest(base::Bind(&DiskCacheEntryTest::ExternalSyncIOBackground, 435 RunTaskForTest(base::Bind(&DiskCacheEntryTest::ExternalSyncIOBackground,
431 base::Unretained(this), 436 base::Unretained(this),
432 entry)); 437 entry));
433 438
434 entry->Doom(); 439 entry->Doom();
435 entry->Close(); 440 entry->Close();
436 FlushQueueForTest(); 441 FlushQueueForTest();
437 EXPECT_EQ(0, cache_->GetEntryCount()); 442 EXPECT_EQ(0, cache_->GetEntryCount());
(...skipping 11 matching lines...) Expand all
449 } 454 }
450 455
451 TEST_F(DiskCacheEntryTest, MemoryOnlyExternalSyncIO) { 456 TEST_F(DiskCacheEntryTest, MemoryOnlyExternalSyncIO) {
452 SetMemoryOnlyMode(); 457 SetMemoryOnlyMode();
453 InitCache(); 458 InitCache();
454 ExternalSyncIO(); 459 ExternalSyncIO();
455 } 460 }
456 461
457 void DiskCacheEntryTest::ExternalAsyncIO() { 462 void DiskCacheEntryTest::ExternalAsyncIO() {
458 disk_cache::Entry* entry; 463 disk_cache::Entry* entry;
459 ASSERT_EQ(net::OK, CreateEntry("the first key", &entry)); 464 ASSERT_THAT(CreateEntry("the first key", &entry), IsOk());
460 465
461 int expected = 0; 466 int expected = 0;
462 467
463 MessageLoopHelper helper; 468 MessageLoopHelper helper;
464 // Let's verify that each IO goes to the right callback object. 469 // Let's verify that each IO goes to the right callback object.
465 CallbackTest callback1(&helper, false); 470 CallbackTest callback1(&helper, false);
466 CallbackTest callback2(&helper, false); 471 CallbackTest callback2(&helper, false);
467 CallbackTest callback3(&helper, false); 472 CallbackTest callback3(&helper, false);
468 CallbackTest callback4(&helper, false); 473 CallbackTest callback4(&helper, false);
469 CallbackTest callback5(&helper, false); 474 CallbackTest callback5(&helper, false);
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
616 621
617 TEST_F(DiskCacheEntryTest, MemoryOnlyExternalAsyncIO) { 622 TEST_F(DiskCacheEntryTest, MemoryOnlyExternalAsyncIO) {
618 SetMemoryOnlyMode(); 623 SetMemoryOnlyMode();
619 InitCache(); 624 InitCache();
620 ExternalAsyncIO(); 625 ExternalAsyncIO();
621 } 626 }
622 627
623 // Tests that IOBuffers are not referenced after IO completes. 628 // Tests that IOBuffers are not referenced after IO completes.
624 void DiskCacheEntryTest::ReleaseBuffer(int stream_index) { 629 void DiskCacheEntryTest::ReleaseBuffer(int stream_index) {
625 disk_cache::Entry* entry = NULL; 630 disk_cache::Entry* entry = NULL;
626 ASSERT_EQ(net::OK, CreateEntry("the first key", &entry)); 631 ASSERT_THAT(CreateEntry("the first key", &entry), IsOk());
627 ASSERT_TRUE(NULL != entry); 632 ASSERT_TRUE(NULL != entry);
628 633
629 const int kBufferSize = 1024; 634 const int kBufferSize = 1024;
630 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kBufferSize)); 635 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kBufferSize));
631 CacheTestFillBuffer(buffer->data(), kBufferSize, false); 636 CacheTestFillBuffer(buffer->data(), kBufferSize, false);
632 637
633 net::ReleaseBufferCompletionCallback cb(buffer.get()); 638 net::ReleaseBufferCompletionCallback cb(buffer.get());
634 int rv = entry->WriteData( 639 int rv = entry->WriteData(
635 stream_index, 0, buffer.get(), kBufferSize, cb.callback(), false); 640 stream_index, 0, buffer.get(), kBufferSize, cb.callback(), false);
636 EXPECT_EQ(kBufferSize, cb.GetResult(rv)); 641 EXPECT_EQ(kBufferSize, cb.GetResult(rv));
637 entry->Close(); 642 entry->Close();
638 } 643 }
639 644
640 TEST_F(DiskCacheEntryTest, ReleaseBuffer) { 645 TEST_F(DiskCacheEntryTest, ReleaseBuffer) {
641 InitCache(); 646 InitCache();
642 cache_impl_->SetFlags(disk_cache::kNoBuffering); 647 cache_impl_->SetFlags(disk_cache::kNoBuffering);
643 ReleaseBuffer(0); 648 ReleaseBuffer(0);
644 } 649 }
645 650
646 TEST_F(DiskCacheEntryTest, MemoryOnlyReleaseBuffer) { 651 TEST_F(DiskCacheEntryTest, MemoryOnlyReleaseBuffer) {
647 SetMemoryOnlyMode(); 652 SetMemoryOnlyMode();
648 InitCache(); 653 InitCache();
649 ReleaseBuffer(0); 654 ReleaseBuffer(0);
650 } 655 }
651 656
652 void DiskCacheEntryTest::StreamAccess() { 657 void DiskCacheEntryTest::StreamAccess() {
653 disk_cache::Entry* entry = NULL; 658 disk_cache::Entry* entry = NULL;
654 ASSERT_EQ(net::OK, CreateEntry("the first key", &entry)); 659 ASSERT_THAT(CreateEntry("the first key", &entry), IsOk());
655 ASSERT_TRUE(NULL != entry); 660 ASSERT_TRUE(NULL != entry);
656 661
657 const int kBufferSize = 1024; 662 const int kBufferSize = 1024;
658 const int kNumStreams = 3; 663 const int kNumStreams = 3;
659 scoped_refptr<net::IOBuffer> reference_buffers[kNumStreams]; 664 scoped_refptr<net::IOBuffer> reference_buffers[kNumStreams];
660 for (int i = 0; i < kNumStreams; i++) { 665 for (int i = 0; i < kNumStreams; i++) {
661 reference_buffers[i] = new net::IOBuffer(kBufferSize); 666 reference_buffers[i] = new net::IOBuffer(kBufferSize);
662 CacheTestFillBuffer(reference_buffers[i]->data(), kBufferSize, false); 667 CacheTestFillBuffer(reference_buffers[i]->data(), kBufferSize, false);
663 } 668 }
664 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kBufferSize)); 669 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kBufferSize));
665 for (int i = 0; i < kNumStreams; i++) { 670 for (int i = 0; i < kNumStreams; i++) {
666 EXPECT_EQ( 671 EXPECT_EQ(
667 kBufferSize, 672 kBufferSize,
668 WriteData(entry, i, 0, reference_buffers[i].get(), kBufferSize, false)); 673 WriteData(entry, i, 0, reference_buffers[i].get(), kBufferSize, false));
669 memset(buffer1->data(), 0, kBufferSize); 674 memset(buffer1->data(), 0, kBufferSize);
670 EXPECT_EQ(kBufferSize, ReadData(entry, i, 0, buffer1.get(), kBufferSize)); 675 EXPECT_EQ(kBufferSize, ReadData(entry, i, 0, buffer1.get(), kBufferSize));
671 EXPECT_EQ( 676 EXPECT_EQ(
672 0, memcmp(reference_buffers[i]->data(), buffer1->data(), kBufferSize)); 677 0, memcmp(reference_buffers[i]->data(), buffer1->data(), kBufferSize));
673 } 678 }
674 EXPECT_EQ(net::ERR_INVALID_ARGUMENT, 679 EXPECT_EQ(net::ERR_INVALID_ARGUMENT,
675 ReadData(entry, kNumStreams, 0, buffer1.get(), kBufferSize)); 680 ReadData(entry, kNumStreams, 0, buffer1.get(), kBufferSize));
676 entry->Close(); 681 entry->Close();
677 682
678 // Open the entry and read it in chunks, including a read past the end. 683 // Open the entry and read it in chunks, including a read past the end.
679 ASSERT_EQ(net::OK, OpenEntry("the first key", &entry)); 684 ASSERT_THAT(OpenEntry("the first key", &entry), IsOk());
680 ASSERT_TRUE(NULL != entry); 685 ASSERT_TRUE(NULL != entry);
681 const int kReadBufferSize = 600; 686 const int kReadBufferSize = 600;
682 const int kFinalReadSize = kBufferSize - kReadBufferSize; 687 const int kFinalReadSize = kBufferSize - kReadBufferSize;
683 static_assert(kFinalReadSize < kReadBufferSize, 688 static_assert(kFinalReadSize < kReadBufferSize,
684 "should be exactly two reads"); 689 "should be exactly two reads");
685 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kReadBufferSize)); 690 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kReadBufferSize));
686 for (int i = 0; i < kNumStreams; i++) { 691 for (int i = 0; i < kNumStreams; i++) {
687 memset(buffer2->data(), 0, kReadBufferSize); 692 memset(buffer2->data(), 0, kReadBufferSize);
688 EXPECT_EQ(kReadBufferSize, 693 EXPECT_EQ(kReadBufferSize,
689 ReadData(entry, i, 0, buffer2.get(), kReadBufferSize)); 694 ReadData(entry, i, 0, buffer2.get(), kReadBufferSize));
(...skipping 21 matching lines...) Expand all
711 716
712 TEST_F(DiskCacheEntryTest, MemoryOnlyStreamAccess) { 717 TEST_F(DiskCacheEntryTest, MemoryOnlyStreamAccess) {
713 SetMemoryOnlyMode(); 718 SetMemoryOnlyMode();
714 InitCache(); 719 InitCache();
715 StreamAccess(); 720 StreamAccess();
716 } 721 }
717 722
718 void DiskCacheEntryTest::GetKey() { 723 void DiskCacheEntryTest::GetKey() {
719 std::string key("the first key"); 724 std::string key("the first key");
720 disk_cache::Entry* entry; 725 disk_cache::Entry* entry;
721 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 726 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
722 EXPECT_EQ(key, entry->GetKey()) << "short key"; 727 EXPECT_EQ(key, entry->GetKey()) << "short key";
723 entry->Close(); 728 entry->Close();
724 729
725 int seed = static_cast<int>(Time::Now().ToInternalValue()); 730 int seed = static_cast<int>(Time::Now().ToInternalValue());
726 srand(seed); 731 srand(seed);
727 char key_buffer[20000]; 732 char key_buffer[20000];
728 733
729 CacheTestFillBuffer(key_buffer, 3000, true); 734 CacheTestFillBuffer(key_buffer, 3000, true);
730 key_buffer[1000] = '\0'; 735 key_buffer[1000] = '\0';
731 736
732 key = key_buffer; 737 key = key_buffer;
733 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 738 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
734 EXPECT_TRUE(key == entry->GetKey()) << "1000 bytes key"; 739 EXPECT_TRUE(key == entry->GetKey()) << "1000 bytes key";
735 entry->Close(); 740 entry->Close();
736 741
737 key_buffer[1000] = 'p'; 742 key_buffer[1000] = 'p';
738 key_buffer[3000] = '\0'; 743 key_buffer[3000] = '\0';
739 key = key_buffer; 744 key = key_buffer;
740 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 745 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
741 EXPECT_TRUE(key == entry->GetKey()) << "medium size key"; 746 EXPECT_TRUE(key == entry->GetKey()) << "medium size key";
742 entry->Close(); 747 entry->Close();
743 748
744 CacheTestFillBuffer(key_buffer, sizeof(key_buffer), true); 749 CacheTestFillBuffer(key_buffer, sizeof(key_buffer), true);
745 key_buffer[19999] = '\0'; 750 key_buffer[19999] = '\0';
746 751
747 key = key_buffer; 752 key = key_buffer;
748 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 753 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
749 EXPECT_TRUE(key == entry->GetKey()) << "long key"; 754 EXPECT_TRUE(key == entry->GetKey()) << "long key";
750 entry->Close(); 755 entry->Close();
751 756
752 CacheTestFillBuffer(key_buffer, 0x4000, true); 757 CacheTestFillBuffer(key_buffer, 0x4000, true);
753 key_buffer[0x4000] = '\0'; 758 key_buffer[0x4000] = '\0';
754 759
755 key = key_buffer; 760 key = key_buffer;
756 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 761 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
757 EXPECT_TRUE(key == entry->GetKey()) << "16KB key"; 762 EXPECT_TRUE(key == entry->GetKey()) << "16KB key";
758 entry->Close(); 763 entry->Close();
759 } 764 }
760 765
761 TEST_F(DiskCacheEntryTest, GetKey) { 766 TEST_F(DiskCacheEntryTest, GetKey) {
762 InitCache(); 767 InitCache();
763 GetKey(); 768 GetKey();
764 } 769 }
765 770
766 TEST_F(DiskCacheEntryTest, MemoryOnlyGetKey) { 771 TEST_F(DiskCacheEntryTest, MemoryOnlyGetKey) {
767 SetMemoryOnlyMode(); 772 SetMemoryOnlyMode();
768 InitCache(); 773 InitCache();
769 GetKey(); 774 GetKey();
770 } 775 }
771 776
772 void DiskCacheEntryTest::GetTimes(int stream_index) { 777 void DiskCacheEntryTest::GetTimes(int stream_index) {
773 std::string key("the first key"); 778 std::string key("the first key");
774 disk_cache::Entry* entry; 779 disk_cache::Entry* entry;
775 780
776 Time t1 = Time::Now(); 781 Time t1 = Time::Now();
777 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 782 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
778 EXPECT_TRUE(entry->GetLastModified() >= t1); 783 EXPECT_TRUE(entry->GetLastModified() >= t1);
779 EXPECT_TRUE(entry->GetLastModified() == entry->GetLastUsed()); 784 EXPECT_TRUE(entry->GetLastModified() == entry->GetLastUsed());
780 785
781 AddDelay(); 786 AddDelay();
782 Time t2 = Time::Now(); 787 Time t2 = Time::Now();
783 EXPECT_TRUE(t2 > t1); 788 EXPECT_TRUE(t2 > t1);
784 EXPECT_EQ(0, WriteData(entry, stream_index, 200, NULL, 0, false)); 789 EXPECT_EQ(0, WriteData(entry, stream_index, 200, NULL, 0, false));
785 if (type_ == net::APP_CACHE) { 790 if (type_ == net::APP_CACHE) {
786 EXPECT_TRUE(entry->GetLastModified() < t2); 791 EXPECT_TRUE(entry->GetLastModified() < t2);
787 } else { 792 } else {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
827 832
828 TEST_F(DiskCacheEntryTest, ShaderCacheGetTimes) { 833 TEST_F(DiskCacheEntryTest, ShaderCacheGetTimes) {
829 SetCacheType(net::SHADER_CACHE); 834 SetCacheType(net::SHADER_CACHE);
830 InitCache(); 835 InitCache();
831 GetTimes(0); 836 GetTimes(0);
832 } 837 }
833 838
834 void DiskCacheEntryTest::GrowData(int stream_index) { 839 void DiskCacheEntryTest::GrowData(int stream_index) {
835 std::string key1("the first key"); 840 std::string key1("the first key");
836 disk_cache::Entry* entry; 841 disk_cache::Entry* entry;
837 ASSERT_EQ(net::OK, CreateEntry(key1, &entry)); 842 ASSERT_THAT(CreateEntry(key1, &entry), IsOk());
838 843
839 const int kSize = 20000; 844 const int kSize = 20000;
840 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize)); 845 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize));
841 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize)); 846 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize));
842 CacheTestFillBuffer(buffer1->data(), kSize, false); 847 CacheTestFillBuffer(buffer1->data(), kSize, false);
843 memset(buffer2->data(), 0, kSize); 848 memset(buffer2->data(), 0, kSize);
844 849
845 base::strlcpy(buffer1->data(), "the data", kSize); 850 base::strlcpy(buffer1->data(), "the data", kSize);
846 EXPECT_EQ(10, WriteData(entry, stream_index, 0, buffer1.get(), 10, false)); 851 EXPECT_EQ(10, WriteData(entry, stream_index, 0, buffer1.get(), 10, false));
847 EXPECT_EQ(10, ReadData(entry, stream_index, 0, buffer2.get(), 10)); 852 EXPECT_EQ(10, ReadData(entry, stream_index, 0, buffer2.get(), 10));
848 EXPECT_STREQ("the data", buffer2->data()); 853 EXPECT_STREQ("the data", buffer2->data());
849 EXPECT_EQ(10, entry->GetDataSize(stream_index)); 854 EXPECT_EQ(10, entry->GetDataSize(stream_index));
850 855
851 EXPECT_EQ(2000, 856 EXPECT_EQ(2000,
852 WriteData(entry, stream_index, 0, buffer1.get(), 2000, false)); 857 WriteData(entry, stream_index, 0, buffer1.get(), 2000, false));
853 EXPECT_EQ(2000, entry->GetDataSize(stream_index)); 858 EXPECT_EQ(2000, entry->GetDataSize(stream_index));
854 EXPECT_EQ(2000, ReadData(entry, stream_index, 0, buffer2.get(), 2000)); 859 EXPECT_EQ(2000, ReadData(entry, stream_index, 0, buffer2.get(), 2000));
855 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 2000)); 860 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 2000));
856 861
857 EXPECT_EQ(20000, 862 EXPECT_EQ(20000,
858 WriteData(entry, stream_index, 0, buffer1.get(), kSize, false)); 863 WriteData(entry, stream_index, 0, buffer1.get(), kSize, false));
859 EXPECT_EQ(20000, entry->GetDataSize(stream_index)); 864 EXPECT_EQ(20000, entry->GetDataSize(stream_index));
860 EXPECT_EQ(20000, ReadData(entry, stream_index, 0, buffer2.get(), kSize)); 865 EXPECT_EQ(20000, ReadData(entry, stream_index, 0, buffer2.get(), kSize));
861 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), kSize)); 866 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), kSize));
862 entry->Close(); 867 entry->Close();
863 868
864 memset(buffer2->data(), 0, kSize); 869 memset(buffer2->data(), 0, kSize);
865 std::string key2("Second key"); 870 std::string key2("Second key");
866 ASSERT_EQ(net::OK, CreateEntry(key2, &entry)); 871 ASSERT_THAT(CreateEntry(key2, &entry), IsOk());
867 EXPECT_EQ(10, WriteData(entry, stream_index, 0, buffer1.get(), 10, false)); 872 EXPECT_EQ(10, WriteData(entry, stream_index, 0, buffer1.get(), 10, false));
868 EXPECT_EQ(10, entry->GetDataSize(stream_index)); 873 EXPECT_EQ(10, entry->GetDataSize(stream_index));
869 entry->Close(); 874 entry->Close();
870 875
871 // Go from an internal address to a bigger block size. 876 // Go from an internal address to a bigger block size.
872 ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); 877 ASSERT_THAT(OpenEntry(key2, &entry), IsOk());
873 EXPECT_EQ(2000, 878 EXPECT_EQ(2000,
874 WriteData(entry, stream_index, 0, buffer1.get(), 2000, false)); 879 WriteData(entry, stream_index, 0, buffer1.get(), 2000, false));
875 EXPECT_EQ(2000, entry->GetDataSize(stream_index)); 880 EXPECT_EQ(2000, entry->GetDataSize(stream_index));
876 EXPECT_EQ(2000, ReadData(entry, stream_index, 0, buffer2.get(), 2000)); 881 EXPECT_EQ(2000, ReadData(entry, stream_index, 0, buffer2.get(), 2000));
877 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 2000)); 882 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 2000));
878 entry->Close(); 883 entry->Close();
879 memset(buffer2->data(), 0, kSize); 884 memset(buffer2->data(), 0, kSize);
880 885
881 // Go from an internal address to an external one. 886 // Go from an internal address to an external one.
882 ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); 887 ASSERT_THAT(OpenEntry(key2, &entry), IsOk());
883 EXPECT_EQ(20000, 888 EXPECT_EQ(20000,
884 WriteData(entry, stream_index, 0, buffer1.get(), kSize, false)); 889 WriteData(entry, stream_index, 0, buffer1.get(), kSize, false));
885 EXPECT_EQ(20000, entry->GetDataSize(stream_index)); 890 EXPECT_EQ(20000, entry->GetDataSize(stream_index));
886 EXPECT_EQ(20000, ReadData(entry, stream_index, 0, buffer2.get(), kSize)); 891 EXPECT_EQ(20000, ReadData(entry, stream_index, 0, buffer2.get(), kSize));
887 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), kSize)); 892 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), kSize));
888 entry->Close(); 893 entry->Close();
889 894
890 // Double check the size from disk. 895 // Double check the size from disk.
891 ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); 896 ASSERT_THAT(OpenEntry(key2, &entry), IsOk());
892 EXPECT_EQ(20000, entry->GetDataSize(stream_index)); 897 EXPECT_EQ(20000, entry->GetDataSize(stream_index));
893 898
894 // Now extend the entry without actual data. 899 // Now extend the entry without actual data.
895 EXPECT_EQ(0, WriteData(entry, stream_index, 45500, buffer1.get(), 0, false)); 900 EXPECT_EQ(0, WriteData(entry, stream_index, 45500, buffer1.get(), 0, false));
896 entry->Close(); 901 entry->Close();
897 902
898 // And check again from disk. 903 // And check again from disk.
899 ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); 904 ASSERT_THAT(OpenEntry(key2, &entry), IsOk());
900 EXPECT_EQ(45500, entry->GetDataSize(stream_index)); 905 EXPECT_EQ(45500, entry->GetDataSize(stream_index));
901 entry->Close(); 906 entry->Close();
902 } 907 }
903 908
904 TEST_F(DiskCacheEntryTest, GrowData) { 909 TEST_F(DiskCacheEntryTest, GrowData) {
905 InitCache(); 910 InitCache();
906 GrowData(0); 911 GrowData(0);
907 } 912 }
908 913
909 TEST_F(DiskCacheEntryTest, GrowDataNoBuffer) { 914 TEST_F(DiskCacheEntryTest, GrowDataNoBuffer) {
910 InitCache(); 915 InitCache();
911 cache_impl_->SetFlags(disk_cache::kNoBuffering); 916 cache_impl_->SetFlags(disk_cache::kNoBuffering);
912 GrowData(0); 917 GrowData(0);
913 } 918 }
914 919
915 TEST_F(DiskCacheEntryTest, MemoryOnlyGrowData) { 920 TEST_F(DiskCacheEntryTest, MemoryOnlyGrowData) {
916 SetMemoryOnlyMode(); 921 SetMemoryOnlyMode();
917 InitCache(); 922 InitCache();
918 GrowData(0); 923 GrowData(0);
919 } 924 }
920 925
921 void DiskCacheEntryTest::TruncateData(int stream_index) { 926 void DiskCacheEntryTest::TruncateData(int stream_index) {
922 std::string key("the first key"); 927 std::string key("the first key");
923 disk_cache::Entry* entry; 928 disk_cache::Entry* entry;
924 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 929 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
925 930
926 const int kSize1 = 20000; 931 const int kSize1 = 20000;
927 const int kSize2 = 20000; 932 const int kSize2 = 20000;
928 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); 933 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1));
929 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); 934 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2));
930 935
931 CacheTestFillBuffer(buffer1->data(), kSize1, false); 936 CacheTestFillBuffer(buffer1->data(), kSize1, false);
932 memset(buffer2->data(), 0, kSize2); 937 memset(buffer2->data(), 0, kSize2);
933 938
934 // Simple truncation: 939 // Simple truncation:
935 EXPECT_EQ(200, WriteData(entry, stream_index, 0, buffer1.get(), 200, false)); 940 EXPECT_EQ(200, WriteData(entry, stream_index, 0, buffer1.get(), 200, false));
936 EXPECT_EQ(200, entry->GetDataSize(stream_index)); 941 EXPECT_EQ(200, entry->GetDataSize(stream_index));
937 EXPECT_EQ(100, WriteData(entry, stream_index, 0, buffer1.get(), 100, false)); 942 EXPECT_EQ(100, WriteData(entry, stream_index, 0, buffer1.get(), 100, false));
938 EXPECT_EQ(200, entry->GetDataSize(stream_index)); 943 EXPECT_EQ(200, entry->GetDataSize(stream_index));
939 EXPECT_EQ(100, WriteData(entry, stream_index, 0, buffer1.get(), 100, true)); 944 EXPECT_EQ(100, WriteData(entry, stream_index, 0, buffer1.get(), 100, true));
940 EXPECT_EQ(100, entry->GetDataSize(stream_index)); 945 EXPECT_EQ(100, entry->GetDataSize(stream_index));
941 EXPECT_EQ(0, WriteData(entry, stream_index, 50, buffer1.get(), 0, true)); 946 EXPECT_EQ(0, WriteData(entry, stream_index, 50, buffer1.get(), 0, true));
942 EXPECT_EQ(50, entry->GetDataSize(stream_index)); 947 EXPECT_EQ(50, entry->GetDataSize(stream_index));
943 EXPECT_EQ(0, WriteData(entry, stream_index, 0, buffer1.get(), 0, true)); 948 EXPECT_EQ(0, WriteData(entry, stream_index, 0, buffer1.get(), 0, true));
944 EXPECT_EQ(0, entry->GetDataSize(stream_index)); 949 EXPECT_EQ(0, entry->GetDataSize(stream_index));
945 entry->Close(); 950 entry->Close();
946 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 951 ASSERT_THAT(OpenEntry(key, &entry), IsOk());
947 952
948 // Go to an external file. 953 // Go to an external file.
949 EXPECT_EQ(20000, 954 EXPECT_EQ(20000,
950 WriteData(entry, stream_index, 0, buffer1.get(), 20000, true)); 955 WriteData(entry, stream_index, 0, buffer1.get(), 20000, true));
951 EXPECT_EQ(20000, entry->GetDataSize(stream_index)); 956 EXPECT_EQ(20000, entry->GetDataSize(stream_index));
952 EXPECT_EQ(20000, ReadData(entry, stream_index, 0, buffer2.get(), 20000)); 957 EXPECT_EQ(20000, ReadData(entry, stream_index, 0, buffer2.get(), 20000));
953 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 20000)); 958 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 20000));
954 memset(buffer2->data(), 0, kSize2); 959 memset(buffer2->data(), 0, kSize2);
955 960
956 // External file truncation 961 // External file truncation
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
996 1001
997 TEST_F(DiskCacheEntryTest, MemoryOnlyTruncateData) { 1002 TEST_F(DiskCacheEntryTest, MemoryOnlyTruncateData) {
998 SetMemoryOnlyMode(); 1003 SetMemoryOnlyMode();
999 InitCache(); 1004 InitCache();
1000 TruncateData(0); 1005 TruncateData(0);
1001 } 1006 }
1002 1007
1003 void DiskCacheEntryTest::ZeroLengthIO(int stream_index) { 1008 void DiskCacheEntryTest::ZeroLengthIO(int stream_index) {
1004 std::string key("the first key"); 1009 std::string key("the first key");
1005 disk_cache::Entry* entry; 1010 disk_cache::Entry* entry;
1006 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 1011 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
1007 1012
1008 EXPECT_EQ(0, ReadData(entry, stream_index, 0, NULL, 0)); 1013 EXPECT_EQ(0, ReadData(entry, stream_index, 0, NULL, 0));
1009 EXPECT_EQ(0, WriteData(entry, stream_index, 0, NULL, 0, false)); 1014 EXPECT_EQ(0, WriteData(entry, stream_index, 0, NULL, 0, false));
1010 1015
1011 // This write should extend the entry. 1016 // This write should extend the entry.
1012 EXPECT_EQ(0, WriteData(entry, stream_index, 1000, NULL, 0, false)); 1017 EXPECT_EQ(0, WriteData(entry, stream_index, 1000, NULL, 0, false));
1013 EXPECT_EQ(0, ReadData(entry, stream_index, 500, NULL, 0)); 1018 EXPECT_EQ(0, ReadData(entry, stream_index, 500, NULL, 0));
1014 EXPECT_EQ(0, ReadData(entry, stream_index, 2000, NULL, 0)); 1019 EXPECT_EQ(0, ReadData(entry, stream_index, 2000, NULL, 0));
1015 EXPECT_EQ(1000, entry->GetDataSize(stream_index)); 1020 EXPECT_EQ(1000, entry->GetDataSize(stream_index));
1016 1021
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1053 SetMemoryOnlyMode(); 1058 SetMemoryOnlyMode();
1054 InitCache(); 1059 InitCache();
1055 ZeroLengthIO(0); 1060 ZeroLengthIO(0);
1056 } 1061 }
1057 1062
1058 // Tests that we handle the content correctly when buffering, a feature of the 1063 // Tests that we handle the content correctly when buffering, a feature of the
1059 // standard cache that permits fast responses to certain reads. 1064 // standard cache that permits fast responses to certain reads.
1060 void DiskCacheEntryTest::Buffering() { 1065 void DiskCacheEntryTest::Buffering() {
1061 std::string key("the first key"); 1066 std::string key("the first key");
1062 disk_cache::Entry* entry; 1067 disk_cache::Entry* entry;
1063 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 1068 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
1064 1069
1065 const int kSize = 200; 1070 const int kSize = 200;
1066 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize)); 1071 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize));
1067 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize)); 1072 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize));
1068 CacheTestFillBuffer(buffer1->data(), kSize, true); 1073 CacheTestFillBuffer(buffer1->data(), kSize, true);
1069 CacheTestFillBuffer(buffer2->data(), kSize, true); 1074 CacheTestFillBuffer(buffer2->data(), kSize, true);
1070 1075
1071 EXPECT_EQ(kSize, WriteData(entry, 1, 0, buffer1.get(), kSize, false)); 1076 EXPECT_EQ(kSize, WriteData(entry, 1, 0, buffer1.get(), kSize, false));
1072 entry->Close(); 1077 entry->Close();
1073 1078
1074 // Write a little more and read what we wrote before. 1079 // Write a little more and read what we wrote before.
1075 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 1080 ASSERT_THAT(OpenEntry(key, &entry), IsOk());
1076 EXPECT_EQ(kSize, WriteData(entry, 1, 5000, buffer1.get(), kSize, false)); 1081 EXPECT_EQ(kSize, WriteData(entry, 1, 5000, buffer1.get(), kSize, false));
1077 EXPECT_EQ(kSize, ReadData(entry, 1, 0, buffer2.get(), kSize)); 1082 EXPECT_EQ(kSize, ReadData(entry, 1, 0, buffer2.get(), kSize));
1078 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); 1083 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize));
1079 1084
1080 // Now go to an external file. 1085 // Now go to an external file.
1081 EXPECT_EQ(kSize, WriteData(entry, 1, 18000, buffer1.get(), kSize, false)); 1086 EXPECT_EQ(kSize, WriteData(entry, 1, 18000, buffer1.get(), kSize, false));
1082 entry->Close(); 1087 entry->Close();
1083 1088
1084 // Write something else and verify old data. 1089 // Write something else and verify old data.
1085 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 1090 ASSERT_THAT(OpenEntry(key, &entry), IsOk());
1086 EXPECT_EQ(kSize, WriteData(entry, 1, 10000, buffer1.get(), kSize, false)); 1091 EXPECT_EQ(kSize, WriteData(entry, 1, 10000, buffer1.get(), kSize, false));
1087 CacheTestFillBuffer(buffer2->data(), kSize, true); 1092 CacheTestFillBuffer(buffer2->data(), kSize, true);
1088 EXPECT_EQ(kSize, ReadData(entry, 1, 5000, buffer2.get(), kSize)); 1093 EXPECT_EQ(kSize, ReadData(entry, 1, 5000, buffer2.get(), kSize));
1089 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); 1094 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize));
1090 CacheTestFillBuffer(buffer2->data(), kSize, true); 1095 CacheTestFillBuffer(buffer2->data(), kSize, true);
1091 EXPECT_EQ(kSize, ReadData(entry, 1, 0, buffer2.get(), kSize)); 1096 EXPECT_EQ(kSize, ReadData(entry, 1, 0, buffer2.get(), kSize));
1092 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); 1097 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize));
1093 CacheTestFillBuffer(buffer2->data(), kSize, true); 1098 CacheTestFillBuffer(buffer2->data(), kSize, true);
1094 EXPECT_EQ(kSize, ReadData(entry, 1, 18000, buffer2.get(), kSize)); 1099 EXPECT_EQ(kSize, ReadData(entry, 1, 18000, buffer2.get(), kSize));
1095 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); 1100 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize));
1096 1101
1097 // Extend the file some more. 1102 // Extend the file some more.
1098 EXPECT_EQ(kSize, WriteData(entry, 1, 23000, buffer1.get(), kSize, false)); 1103 EXPECT_EQ(kSize, WriteData(entry, 1, 23000, buffer1.get(), kSize, false));
1099 entry->Close(); 1104 entry->Close();
1100 1105
1101 // And now make sure that we can deal with data in both places (ram/disk). 1106 // And now make sure that we can deal with data in both places (ram/disk).
1102 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 1107 ASSERT_THAT(OpenEntry(key, &entry), IsOk());
1103 EXPECT_EQ(kSize, WriteData(entry, 1, 17000, buffer1.get(), kSize, false)); 1108 EXPECT_EQ(kSize, WriteData(entry, 1, 17000, buffer1.get(), kSize, false));
1104 1109
1105 // We should not overwrite the data at 18000 with this. 1110 // We should not overwrite the data at 18000 with this.
1106 EXPECT_EQ(kSize, WriteData(entry, 1, 19000, buffer1.get(), kSize, false)); 1111 EXPECT_EQ(kSize, WriteData(entry, 1, 19000, buffer1.get(), kSize, false));
1107 CacheTestFillBuffer(buffer2->data(), kSize, true); 1112 CacheTestFillBuffer(buffer2->data(), kSize, true);
1108 EXPECT_EQ(kSize, ReadData(entry, 1, 18000, buffer2.get(), kSize)); 1113 EXPECT_EQ(kSize, ReadData(entry, 1, 18000, buffer2.get(), kSize));
1109 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); 1114 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize));
1110 CacheTestFillBuffer(buffer2->data(), kSize, true); 1115 CacheTestFillBuffer(buffer2->data(), kSize, true);
1111 EXPECT_EQ(kSize, ReadData(entry, 1, 17000, buffer2.get(), kSize)); 1116 EXPECT_EQ(kSize, ReadData(entry, 1, 17000, buffer2.get(), kSize));
1112 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); 1117 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize));
(...skipping 28 matching lines...) Expand all
1141 TEST_F(DiskCacheEntryTest, BufferingNoBuffer) { 1146 TEST_F(DiskCacheEntryTest, BufferingNoBuffer) {
1142 InitCache(); 1147 InitCache();
1143 cache_impl_->SetFlags(disk_cache::kNoBuffering); 1148 cache_impl_->SetFlags(disk_cache::kNoBuffering);
1144 Buffering(); 1149 Buffering();
1145 } 1150 }
1146 1151
1147 // Checks that entries are zero length when created. 1152 // Checks that entries are zero length when created.
1148 void DiskCacheEntryTest::SizeAtCreate() { 1153 void DiskCacheEntryTest::SizeAtCreate() {
1149 const char key[] = "the first key"; 1154 const char key[] = "the first key";
1150 disk_cache::Entry* entry; 1155 disk_cache::Entry* entry;
1151 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 1156 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
1152 1157
1153 const int kNumStreams = 3; 1158 const int kNumStreams = 3;
1154 for (int i = 0; i < kNumStreams; ++i) 1159 for (int i = 0; i < kNumStreams; ++i)
1155 EXPECT_EQ(0, entry->GetDataSize(i)); 1160 EXPECT_EQ(0, entry->GetDataSize(i));
1156 entry->Close(); 1161 entry->Close();
1157 } 1162 }
1158 1163
1159 TEST_F(DiskCacheEntryTest, SizeAtCreate) { 1164 TEST_F(DiskCacheEntryTest, SizeAtCreate) {
1160 InitCache(); 1165 InitCache();
1161 SizeAtCreate(); 1166 SizeAtCreate();
1162 } 1167 }
1163 1168
1164 TEST_F(DiskCacheEntryTest, MemoryOnlySizeAtCreate) { 1169 TEST_F(DiskCacheEntryTest, MemoryOnlySizeAtCreate) {
1165 SetMemoryOnlyMode(); 1170 SetMemoryOnlyMode();
1166 InitCache(); 1171 InitCache();
1167 SizeAtCreate(); 1172 SizeAtCreate();
1168 } 1173 }
1169 1174
1170 // Some extra tests to make sure that buffering works properly when changing 1175 // Some extra tests to make sure that buffering works properly when changing
1171 // the entry size. 1176 // the entry size.
1172 void DiskCacheEntryTest::SizeChanges(int stream_index) { 1177 void DiskCacheEntryTest::SizeChanges(int stream_index) {
1173 std::string key("the first key"); 1178 std::string key("the first key");
1174 disk_cache::Entry* entry; 1179 disk_cache::Entry* entry;
1175 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 1180 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
1176 1181
1177 const int kSize = 200; 1182 const int kSize = 200;
1178 const char zeros[kSize] = {}; 1183 const char zeros[kSize] = {};
1179 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize)); 1184 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize));
1180 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize)); 1185 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize));
1181 CacheTestFillBuffer(buffer1->data(), kSize, true); 1186 CacheTestFillBuffer(buffer1->data(), kSize, true);
1182 CacheTestFillBuffer(buffer2->data(), kSize, true); 1187 CacheTestFillBuffer(buffer2->data(), kSize, true);
1183 1188
1184 EXPECT_EQ(kSize, 1189 EXPECT_EQ(kSize,
1185 WriteData(entry, stream_index, 0, buffer1.get(), kSize, true)); 1190 WriteData(entry, stream_index, 0, buffer1.get(), kSize, true));
1186 EXPECT_EQ(kSize, 1191 EXPECT_EQ(kSize,
1187 WriteData(entry, stream_index, 17000, buffer1.get(), kSize, true)); 1192 WriteData(entry, stream_index, 17000, buffer1.get(), kSize, true));
1188 EXPECT_EQ(kSize, 1193 EXPECT_EQ(kSize,
1189 WriteData(entry, stream_index, 23000, buffer1.get(), kSize, true)); 1194 WriteData(entry, stream_index, 23000, buffer1.get(), kSize, true));
1190 entry->Close(); 1195 entry->Close();
1191 1196
1192 // Extend the file and read between the old size and the new write. 1197 // Extend the file and read between the old size and the new write.
1193 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 1198 ASSERT_THAT(OpenEntry(key, &entry), IsOk());
1194 EXPECT_EQ(23000 + kSize, entry->GetDataSize(stream_index)); 1199 EXPECT_EQ(23000 + kSize, entry->GetDataSize(stream_index));
1195 EXPECT_EQ(kSize, 1200 EXPECT_EQ(kSize,
1196 WriteData(entry, stream_index, 25000, buffer1.get(), kSize, true)); 1201 WriteData(entry, stream_index, 25000, buffer1.get(), kSize, true));
1197 EXPECT_EQ(25000 + kSize, entry->GetDataSize(stream_index)); 1202 EXPECT_EQ(25000 + kSize, entry->GetDataSize(stream_index));
1198 EXPECT_EQ(kSize, ReadData(entry, stream_index, 24000, buffer2.get(), kSize)); 1203 EXPECT_EQ(kSize, ReadData(entry, stream_index, 24000, buffer2.get(), kSize));
1199 EXPECT_TRUE(!memcmp(buffer2->data(), zeros, kSize)); 1204 EXPECT_TRUE(!memcmp(buffer2->data(), zeros, kSize));
1200 1205
1201 // Read at the end of the old file size. 1206 // Read at the end of the old file size.
1202 EXPECT_EQ( 1207 EXPECT_EQ(
1203 kSize, 1208 kSize,
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1242 // And now reduce the size below the old size. 1247 // And now reduce the size below the old size.
1243 EXPECT_EQ(kSize, 1248 EXPECT_EQ(kSize,
1244 WriteData(entry, stream_index, 19000, buffer1.get(), kSize, true)); 1249 WriteData(entry, stream_index, 19000, buffer1.get(), kSize, true));
1245 EXPECT_EQ(19000 + kSize, entry->GetDataSize(stream_index)); 1250 EXPECT_EQ(19000 + kSize, entry->GetDataSize(stream_index));
1246 EXPECT_EQ(kSize, ReadData(entry, stream_index, 18900, buffer2.get(), kSize)); 1251 EXPECT_EQ(kSize, ReadData(entry, stream_index, 18900, buffer2.get(), kSize));
1247 EXPECT_TRUE(!memcmp(buffer2->data(), zeros, 100)); 1252 EXPECT_TRUE(!memcmp(buffer2->data(), zeros, 100));
1248 EXPECT_TRUE(!memcmp(buffer2->data() + 100, buffer1->data(), kSize - 100)); 1253 EXPECT_TRUE(!memcmp(buffer2->data() + 100, buffer1->data(), kSize - 100));
1249 1254
1250 // Verify that the actual file is truncated. 1255 // Verify that the actual file is truncated.
1251 entry->Close(); 1256 entry->Close();
1252 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 1257 ASSERT_THAT(OpenEntry(key, &entry), IsOk());
1253 EXPECT_EQ(19000 + kSize, entry->GetDataSize(stream_index)); 1258 EXPECT_EQ(19000 + kSize, entry->GetDataSize(stream_index));
1254 1259
1255 // Extend the newly opened file with a zero length write, expect zero fill. 1260 // Extend the newly opened file with a zero length write, expect zero fill.
1256 EXPECT_EQ( 1261 EXPECT_EQ(
1257 0, 1262 0,
1258 WriteData(entry, stream_index, 20000 + kSize, buffer1.get(), 0, false)); 1263 WriteData(entry, stream_index, 20000 + kSize, buffer1.get(), 0, false));
1259 EXPECT_EQ(kSize, 1264 EXPECT_EQ(kSize,
1260 ReadData(entry, stream_index, 19000 + kSize, buffer1.get(), kSize)); 1265 ReadData(entry, stream_index, 19000 + kSize, buffer1.get(), kSize));
1261 EXPECT_EQ(0, memcmp(buffer1->data(), zeros, kSize)); 1266 EXPECT_EQ(0, memcmp(buffer1->data(), zeros, kSize));
1262 1267
1263 entry->Close(); 1268 entry->Close();
1264 } 1269 }
1265 1270
1266 TEST_F(DiskCacheEntryTest, SizeChanges) { 1271 TEST_F(DiskCacheEntryTest, SizeChanges) {
1267 InitCache(); 1272 InitCache();
1268 SizeChanges(1); 1273 SizeChanges(1);
1269 } 1274 }
1270 1275
1271 TEST_F(DiskCacheEntryTest, SizeChangesNoBuffer) { 1276 TEST_F(DiskCacheEntryTest, SizeChangesNoBuffer) {
1272 InitCache(); 1277 InitCache();
1273 cache_impl_->SetFlags(disk_cache::kNoBuffering); 1278 cache_impl_->SetFlags(disk_cache::kNoBuffering);
1274 SizeChanges(1); 1279 SizeChanges(1);
1275 } 1280 }
1276 1281
1277 // Write more than the total cache capacity but to a single entry. |size| is the 1282 // Write more than the total cache capacity but to a single entry. |size| is the
1278 // amount of bytes to write each time. 1283 // amount of bytes to write each time.
1279 void DiskCacheEntryTest::ReuseEntry(int size, int stream_index) { 1284 void DiskCacheEntryTest::ReuseEntry(int size, int stream_index) {
1280 std::string key1("the first key"); 1285 std::string key1("the first key");
1281 disk_cache::Entry* entry; 1286 disk_cache::Entry* entry;
1282 ASSERT_EQ(net::OK, CreateEntry(key1, &entry)); 1287 ASSERT_THAT(CreateEntry(key1, &entry), IsOk());
1283 1288
1284 entry->Close(); 1289 entry->Close();
1285 std::string key2("the second key"); 1290 std::string key2("the second key");
1286 ASSERT_EQ(net::OK, CreateEntry(key2, &entry)); 1291 ASSERT_THAT(CreateEntry(key2, &entry), IsOk());
1287 1292
1288 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(size)); 1293 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(size));
1289 CacheTestFillBuffer(buffer->data(), size, false); 1294 CacheTestFillBuffer(buffer->data(), size, false);
1290 1295
1291 for (int i = 0; i < 15; i++) { 1296 for (int i = 0; i < 15; i++) {
1292 EXPECT_EQ(0, WriteData(entry, stream_index, 0, buffer.get(), 0, true)); 1297 EXPECT_EQ(0, WriteData(entry, stream_index, 0, buffer.get(), 0, true));
1293 EXPECT_EQ(size, 1298 EXPECT_EQ(size,
1294 WriteData(entry, stream_index, 0, buffer.get(), size, false)); 1299 WriteData(entry, stream_index, 0, buffer.get(), size, false));
1295 entry->Close(); 1300 entry->Close();
1296 ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); 1301 ASSERT_THAT(OpenEntry(key2, &entry), IsOk());
1297 } 1302 }
1298 1303
1299 entry->Close(); 1304 entry->Close();
1300 ASSERT_EQ(net::OK, OpenEntry(key1, &entry)) << "have not evicted this entry"; 1305 ASSERT_EQ(net::OK, OpenEntry(key1, &entry)) << "have not evicted this entry";
1301 entry->Close(); 1306 entry->Close();
1302 } 1307 }
1303 1308
1304 TEST_F(DiskCacheEntryTest, ReuseExternalEntry) { 1309 TEST_F(DiskCacheEntryTest, ReuseExternalEntry) {
1305 SetMaxSize(200 * 1024); 1310 SetMaxSize(200 * 1024);
1306 InitCache(); 1311 InitCache();
(...skipping 17 matching lines...) Expand all
1324 SetMemoryOnlyMode(); 1329 SetMemoryOnlyMode();
1325 SetMaxSize(100 * 1024); 1330 SetMaxSize(100 * 1024);
1326 InitCache(); 1331 InitCache();
1327 ReuseEntry(10 * 1024, 0); 1332 ReuseEntry(10 * 1024, 0);
1328 } 1333 }
1329 1334
1330 // Reading somewhere that was not written should return zeros. 1335 // Reading somewhere that was not written should return zeros.
1331 void DiskCacheEntryTest::InvalidData(int stream_index) { 1336 void DiskCacheEntryTest::InvalidData(int stream_index) {
1332 std::string key("the first key"); 1337 std::string key("the first key");
1333 disk_cache::Entry* entry; 1338 disk_cache::Entry* entry;
1334 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 1339 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
1335 1340
1336 const int kSize1 = 20000; 1341 const int kSize1 = 20000;
1337 const int kSize2 = 20000; 1342 const int kSize2 = 20000;
1338 const int kSize3 = 20000; 1343 const int kSize3 = 20000;
1339 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); 1344 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1));
1340 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); 1345 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2));
1341 scoped_refptr<net::IOBuffer> buffer3(new net::IOBuffer(kSize3)); 1346 scoped_refptr<net::IOBuffer> buffer3(new net::IOBuffer(kSize3));
1342 1347
1343 CacheTestFillBuffer(buffer1->data(), kSize1, false); 1348 CacheTestFillBuffer(buffer1->data(), kSize1, false);
1344 memset(buffer2->data(), 0, kSize2); 1349 memset(buffer2->data(), 0, kSize2);
1345 1350
1346 // Simple data grow: 1351 // Simple data grow:
1347 EXPECT_EQ(200, 1352 EXPECT_EQ(200,
1348 WriteData(entry, stream_index, 400, buffer1.get(), 200, false)); 1353 WriteData(entry, stream_index, 400, buffer1.get(), 200, false));
1349 EXPECT_EQ(600, entry->GetDataSize(stream_index)); 1354 EXPECT_EQ(600, entry->GetDataSize(stream_index));
1350 EXPECT_EQ(100, ReadData(entry, stream_index, 300, buffer3.get(), 100)); 1355 EXPECT_EQ(100, ReadData(entry, stream_index, 300, buffer3.get(), 100));
1351 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100)); 1356 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100));
1352 entry->Close(); 1357 entry->Close();
1353 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 1358 ASSERT_THAT(OpenEntry(key, &entry), IsOk());
1354 1359
1355 // The entry is now on disk. Load it and extend it. 1360 // The entry is now on disk. Load it and extend it.
1356 EXPECT_EQ(200, 1361 EXPECT_EQ(200,
1357 WriteData(entry, stream_index, 800, buffer1.get(), 200, false)); 1362 WriteData(entry, stream_index, 800, buffer1.get(), 200, false));
1358 EXPECT_EQ(1000, entry->GetDataSize(stream_index)); 1363 EXPECT_EQ(1000, entry->GetDataSize(stream_index));
1359 EXPECT_EQ(100, ReadData(entry, stream_index, 700, buffer3.get(), 100)); 1364 EXPECT_EQ(100, ReadData(entry, stream_index, 700, buffer3.get(), 100));
1360 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100)); 1365 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100));
1361 entry->Close(); 1366 entry->Close();
1362 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 1367 ASSERT_THAT(OpenEntry(key, &entry), IsOk());
1363 1368
1364 // This time using truncate. 1369 // This time using truncate.
1365 EXPECT_EQ(200, 1370 EXPECT_EQ(200,
1366 WriteData(entry, stream_index, 1800, buffer1.get(), 200, true)); 1371 WriteData(entry, stream_index, 1800, buffer1.get(), 200, true));
1367 EXPECT_EQ(2000, entry->GetDataSize(stream_index)); 1372 EXPECT_EQ(2000, entry->GetDataSize(stream_index));
1368 EXPECT_EQ(100, ReadData(entry, stream_index, 1500, buffer3.get(), 100)); 1373 EXPECT_EQ(100, ReadData(entry, stream_index, 1500, buffer3.get(), 100));
1369 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100)); 1374 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100));
1370 1375
1371 // Go to an external file. 1376 // Go to an external file.
1372 EXPECT_EQ(200, 1377 EXPECT_EQ(200,
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1413 TEST_F(DiskCacheEntryTest, MemoryOnlyInvalidData) { 1418 TEST_F(DiskCacheEntryTest, MemoryOnlyInvalidData) {
1414 SetMemoryOnlyMode(); 1419 SetMemoryOnlyMode();
1415 InitCache(); 1420 InitCache();
1416 InvalidData(0); 1421 InvalidData(0);
1417 } 1422 }
1418 1423
1419 // Tests that the cache preserves the buffer of an IO operation. 1424 // Tests that the cache preserves the buffer of an IO operation.
1420 void DiskCacheEntryTest::ReadWriteDestroyBuffer(int stream_index) { 1425 void DiskCacheEntryTest::ReadWriteDestroyBuffer(int stream_index) {
1421 std::string key("the first key"); 1426 std::string key("the first key");
1422 disk_cache::Entry* entry; 1427 disk_cache::Entry* entry;
1423 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 1428 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
1424 1429
1425 const int kSize = 200; 1430 const int kSize = 200;
1426 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); 1431 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize));
1427 CacheTestFillBuffer(buffer->data(), kSize, false); 1432 CacheTestFillBuffer(buffer->data(), kSize, false);
1428 1433
1429 net::TestCompletionCallback cb; 1434 net::TestCompletionCallback cb;
1430 EXPECT_EQ(net::ERR_IO_PENDING, 1435 EXPECT_EQ(net::ERR_IO_PENDING,
1431 entry->WriteData( 1436 entry->WriteData(
1432 stream_index, 0, buffer.get(), kSize, cb.callback(), false)); 1437 stream_index, 0, buffer.get(), kSize, cb.callback(), false));
1433 1438
(...skipping 15 matching lines...) Expand all
1449 } 1454 }
1450 1455
1451 TEST_F(DiskCacheEntryTest, ReadWriteDestroyBuffer) { 1456 TEST_F(DiskCacheEntryTest, ReadWriteDestroyBuffer) {
1452 InitCache(); 1457 InitCache();
1453 ReadWriteDestroyBuffer(0); 1458 ReadWriteDestroyBuffer(0);
1454 } 1459 }
1455 1460
1456 void DiskCacheEntryTest::DoomNormalEntry() { 1461 void DiskCacheEntryTest::DoomNormalEntry() {
1457 std::string key("the first key"); 1462 std::string key("the first key");
1458 disk_cache::Entry* entry; 1463 disk_cache::Entry* entry;
1459 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 1464 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
1460 entry->Doom(); 1465 entry->Doom();
1461 entry->Close(); 1466 entry->Close();
1462 1467
1463 const int kSize = 20000; 1468 const int kSize = 20000;
1464 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); 1469 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize));
1465 CacheTestFillBuffer(buffer->data(), kSize, true); 1470 CacheTestFillBuffer(buffer->data(), kSize, true);
1466 buffer->data()[19999] = '\0'; 1471 buffer->data()[19999] = '\0';
1467 1472
1468 key = buffer->data(); 1473 key = buffer->data();
1469 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 1474 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
1470 EXPECT_EQ(20000, WriteData(entry, 0, 0, buffer.get(), kSize, false)); 1475 EXPECT_EQ(20000, WriteData(entry, 0, 0, buffer.get(), kSize, false));
1471 EXPECT_EQ(20000, WriteData(entry, 1, 0, buffer.get(), kSize, false)); 1476 EXPECT_EQ(20000, WriteData(entry, 1, 0, buffer.get(), kSize, false));
1472 entry->Doom(); 1477 entry->Doom();
1473 entry->Close(); 1478 entry->Close();
1474 1479
1475 FlushQueueForTest(); 1480 FlushQueueForTest();
1476 EXPECT_EQ(0, cache_->GetEntryCount()); 1481 EXPECT_EQ(0, cache_->GetEntryCount());
1477 } 1482 }
1478 1483
1479 TEST_F(DiskCacheEntryTest, DoomEntry) { 1484 TEST_F(DiskCacheEntryTest, DoomEntry) {
1480 InitCache(); 1485 InitCache();
1481 DoomNormalEntry(); 1486 DoomNormalEntry();
1482 } 1487 }
1483 1488
1484 TEST_F(DiskCacheEntryTest, MemoryOnlyDoomEntry) { 1489 TEST_F(DiskCacheEntryTest, MemoryOnlyDoomEntry) {
1485 SetMemoryOnlyMode(); 1490 SetMemoryOnlyMode();
1486 InitCache(); 1491 InitCache();
1487 DoomNormalEntry(); 1492 DoomNormalEntry();
1488 } 1493 }
1489 1494
1490 // Tests dooming an entry that's linked to an open entry. 1495 // Tests dooming an entry that's linked to an open entry.
1491 void DiskCacheEntryTest::DoomEntryNextToOpenEntry() { 1496 void DiskCacheEntryTest::DoomEntryNextToOpenEntry() {
1492 disk_cache::Entry* entry1; 1497 disk_cache::Entry* entry1;
1493 disk_cache::Entry* entry2; 1498 disk_cache::Entry* entry2;
1494 ASSERT_EQ(net::OK, CreateEntry("fixed", &entry1)); 1499 ASSERT_THAT(CreateEntry("fixed", &entry1), IsOk());
1495 entry1->Close(); 1500 entry1->Close();
1496 ASSERT_EQ(net::OK, CreateEntry("foo", &entry1)); 1501 ASSERT_THAT(CreateEntry("foo", &entry1), IsOk());
1497 entry1->Close(); 1502 entry1->Close();
1498 ASSERT_EQ(net::OK, CreateEntry("bar", &entry1)); 1503 ASSERT_THAT(CreateEntry("bar", &entry1), IsOk());
1499 entry1->Close(); 1504 entry1->Close();
1500 1505
1501 ASSERT_EQ(net::OK, OpenEntry("foo", &entry1)); 1506 ASSERT_THAT(OpenEntry("foo", &entry1), IsOk());
1502 ASSERT_EQ(net::OK, OpenEntry("bar", &entry2)); 1507 ASSERT_THAT(OpenEntry("bar", &entry2), IsOk());
1503 entry2->Doom(); 1508 entry2->Doom();
1504 entry2->Close(); 1509 entry2->Close();
1505 1510
1506 ASSERT_EQ(net::OK, OpenEntry("foo", &entry2)); 1511 ASSERT_THAT(OpenEntry("foo", &entry2), IsOk());
1507 entry2->Doom(); 1512 entry2->Doom();
1508 entry2->Close(); 1513 entry2->Close();
1509 entry1->Close(); 1514 entry1->Close();
1510 1515
1511 ASSERT_EQ(net::OK, OpenEntry("fixed", &entry1)); 1516 ASSERT_THAT(OpenEntry("fixed", &entry1), IsOk());
1512 entry1->Close(); 1517 entry1->Close();
1513 } 1518 }
1514 1519
1515 TEST_F(DiskCacheEntryTest, DoomEntryNextToOpenEntry) { 1520 TEST_F(DiskCacheEntryTest, DoomEntryNextToOpenEntry) {
1516 InitCache(); 1521 InitCache();
1517 DoomEntryNextToOpenEntry(); 1522 DoomEntryNextToOpenEntry();
1518 } 1523 }
1519 1524
1520 TEST_F(DiskCacheEntryTest, NewEvictionDoomEntryNextToOpenEntry) { 1525 TEST_F(DiskCacheEntryTest, NewEvictionDoomEntryNextToOpenEntry) {
1521 SetNewEviction(); 1526 SetNewEviction();
1522 InitCache(); 1527 InitCache();
1523 DoomEntryNextToOpenEntry(); 1528 DoomEntryNextToOpenEntry();
1524 } 1529 }
1525 1530
1526 TEST_F(DiskCacheEntryTest, AppCacheDoomEntryNextToOpenEntry) { 1531 TEST_F(DiskCacheEntryTest, AppCacheDoomEntryNextToOpenEntry) {
1527 SetCacheType(net::APP_CACHE); 1532 SetCacheType(net::APP_CACHE);
1528 InitCache(); 1533 InitCache();
1529 DoomEntryNextToOpenEntry(); 1534 DoomEntryNextToOpenEntry();
1530 } 1535 }
1531 1536
1532 // Verify that basic operations work as expected with doomed entries. 1537 // Verify that basic operations work as expected with doomed entries.
1533 void DiskCacheEntryTest::DoomedEntry(int stream_index) { 1538 void DiskCacheEntryTest::DoomedEntry(int stream_index) {
1534 std::string key("the first key"); 1539 std::string key("the first key");
1535 disk_cache::Entry* entry; 1540 disk_cache::Entry* entry;
1536 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 1541 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
1537 entry->Doom(); 1542 entry->Doom();
1538 1543
1539 FlushQueueForTest(); 1544 FlushQueueForTest();
1540 EXPECT_EQ(0, cache_->GetEntryCount()); 1545 EXPECT_EQ(0, cache_->GetEntryCount());
1541 Time initial = Time::Now(); 1546 Time initial = Time::Now();
1542 AddDelay(); 1547 AddDelay();
1543 1548
1544 const int kSize1 = 2000; 1549 const int kSize1 = 2000;
1545 const int kSize2 = 2000; 1550 const int kSize2 = 2000;
1546 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); 1551 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1));
(...skipping 22 matching lines...) Expand all
1569 InitCache(); 1574 InitCache();
1570 DoomedEntry(0); 1575 DoomedEntry(0);
1571 } 1576 }
1572 1577
1573 // Tests that we discard entries if the data is missing. 1578 // Tests that we discard entries if the data is missing.
1574 TEST_F(DiskCacheEntryTest, MissingData) { 1579 TEST_F(DiskCacheEntryTest, MissingData) {
1575 InitCache(); 1580 InitCache();
1576 1581
1577 std::string key("the first key"); 1582 std::string key("the first key");
1578 disk_cache::Entry* entry; 1583 disk_cache::Entry* entry;
1579 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 1584 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
1580 1585
1581 // Write to an external file. 1586 // Write to an external file.
1582 const int kSize = 20000; 1587 const int kSize = 20000;
1583 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); 1588 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize));
1584 CacheTestFillBuffer(buffer->data(), kSize, false); 1589 CacheTestFillBuffer(buffer->data(), kSize, false);
1585 EXPECT_EQ(kSize, WriteData(entry, 0, 0, buffer.get(), kSize, false)); 1590 EXPECT_EQ(kSize, WriteData(entry, 0, 0, buffer.get(), kSize, false));
1586 entry->Close(); 1591 entry->Close();
1587 FlushQueueForTest(); 1592 FlushQueueForTest();
1588 1593
1589 disk_cache::Addr address(0x80000001); 1594 disk_cache::Addr address(0x80000001);
1590 base::FilePath name = cache_impl_->GetFileName(address); 1595 base::FilePath name = cache_impl_->GetFileName(address);
1591 EXPECT_TRUE(base::DeleteFile(name, false)); 1596 EXPECT_TRUE(base::DeleteFile(name, false));
1592 1597
1593 // Attempt to read the data. 1598 // Attempt to read the data.
1594 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 1599 ASSERT_THAT(OpenEntry(key, &entry), IsOk());
1595 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, 1600 EXPECT_EQ(net::ERR_FILE_NOT_FOUND,
1596 ReadData(entry, 0, 0, buffer.get(), kSize)); 1601 ReadData(entry, 0, 0, buffer.get(), kSize));
1597 entry->Close(); 1602 entry->Close();
1598 1603
1599 // The entry should be gone. 1604 // The entry should be gone.
1600 ASSERT_NE(net::OK, OpenEntry(key, &entry)); 1605 ASSERT_NE(net::OK, OpenEntry(key, &entry));
1601 } 1606 }
1602 1607
1603 // Test that child entries in a memory cache backend are not visible from 1608 // Test that child entries in a memory cache backend are not visible from
1604 // enumerations. 1609 // enumerations.
1605 TEST_F(DiskCacheEntryTest, MemoryOnlyEnumerationWithSparseEntries) { 1610 TEST_F(DiskCacheEntryTest, MemoryOnlyEnumerationWithSparseEntries) {
1606 SetMemoryOnlyMode(); 1611 SetMemoryOnlyMode();
1607 InitCache(); 1612 InitCache();
1608 1613
1609 const int kSize = 4096; 1614 const int kSize = 4096;
1610 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); 1615 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize));
1611 CacheTestFillBuffer(buf->data(), kSize, false); 1616 CacheTestFillBuffer(buf->data(), kSize, false);
1612 1617
1613 std::string key("the first key"); 1618 std::string key("the first key");
1614 disk_cache::Entry* parent_entry; 1619 disk_cache::Entry* parent_entry;
1615 ASSERT_EQ(net::OK, CreateEntry(key, &parent_entry)); 1620 ASSERT_THAT(CreateEntry(key, &parent_entry), IsOk());
1616 1621
1617 // Writes to the parent entry. 1622 // Writes to the parent entry.
1618 EXPECT_EQ(kSize, 1623 EXPECT_EQ(kSize,
1619 parent_entry->WriteSparseData( 1624 parent_entry->WriteSparseData(
1620 0, buf.get(), kSize, net::CompletionCallback())); 1625 0, buf.get(), kSize, net::CompletionCallback()));
1621 1626
1622 // This write creates a child entry and writes to it. 1627 // This write creates a child entry and writes to it.
1623 EXPECT_EQ(kSize, 1628 EXPECT_EQ(kSize,
1624 parent_entry->WriteSparseData( 1629 parent_entry->WriteSparseData(
1625 8192, buf.get(), kSize, net::CompletionCallback())); 1630 8192, buf.get(), kSize, net::CompletionCallback()));
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1673 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(size)); 1678 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(size));
1674 memset(buf_1->data(), 0, size); 1679 memset(buf_1->data(), 0, size);
1675 int ret = entry->ReadSparseData(offset, buf_1.get(), size, cb.callback()); 1680 int ret = entry->ReadSparseData(offset, buf_1.get(), size, cb.callback());
1676 EXPECT_EQ(size, cb.GetResult(ret)); 1681 EXPECT_EQ(size, cb.GetResult(ret));
1677 EXPECT_EQ(0, memcmp(buf_1->data(), buffer, size)); 1682 EXPECT_EQ(0, memcmp(buf_1->data(), buffer, size));
1678 } 1683 }
1679 1684
1680 void DiskCacheEntryTest::BasicSparseIO() { 1685 void DiskCacheEntryTest::BasicSparseIO() {
1681 std::string key("the first key"); 1686 std::string key("the first key");
1682 disk_cache::Entry* entry; 1687 disk_cache::Entry* entry;
1683 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 1688 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
1684 1689
1685 const int kSize = 2048; 1690 const int kSize = 2048;
1686 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(kSize)); 1691 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(kSize));
1687 scoped_refptr<net::IOBuffer> buf_2(new net::IOBuffer(kSize)); 1692 scoped_refptr<net::IOBuffer> buf_2(new net::IOBuffer(kSize));
1688 CacheTestFillBuffer(buf_1->data(), kSize, false); 1693 CacheTestFillBuffer(buf_1->data(), kSize, false);
1689 1694
1690 // Write at offset 0. 1695 // Write at offset 0.
1691 VerifySparseIO(entry, 0, buf_1.get(), kSize, buf_2.get()); 1696 VerifySparseIO(entry, 0, buf_1.get(), kSize, buf_2.get());
1692 1697
1693 // Write at offset 0x400000 (4 MB). 1698 // Write at offset 0x400000 (4 MB).
1694 VerifySparseIO(entry, 0x400000, buf_1.get(), kSize, buf_2.get()); 1699 VerifySparseIO(entry, 0x400000, buf_1.get(), kSize, buf_2.get());
1695 1700
1696 // Write at offset 0x800000000 (32 GB). 1701 // Write at offset 0x800000000 (32 GB).
1697 VerifySparseIO(entry, 0x800000000LL, buf_1.get(), kSize, buf_2.get()); 1702 VerifySparseIO(entry, 0x800000000LL, buf_1.get(), kSize, buf_2.get());
1698 1703
1699 entry->Close(); 1704 entry->Close();
1700 1705
1701 // Check everything again. 1706 // Check everything again.
1702 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 1707 ASSERT_THAT(OpenEntry(key, &entry), IsOk());
1703 VerifyContentSparseIO(entry, 0, buf_1->data(), kSize); 1708 VerifyContentSparseIO(entry, 0, buf_1->data(), kSize);
1704 VerifyContentSparseIO(entry, 0x400000, buf_1->data(), kSize); 1709 VerifyContentSparseIO(entry, 0x400000, buf_1->data(), kSize);
1705 VerifyContentSparseIO(entry, 0x800000000LL, buf_1->data(), kSize); 1710 VerifyContentSparseIO(entry, 0x800000000LL, buf_1->data(), kSize);
1706 entry->Close(); 1711 entry->Close();
1707 } 1712 }
1708 1713
1709 TEST_F(DiskCacheEntryTest, BasicSparseIO) { 1714 TEST_F(DiskCacheEntryTest, BasicSparseIO) {
1710 InitCache(); 1715 InitCache();
1711 BasicSparseIO(); 1716 BasicSparseIO();
1712 } 1717 }
1713 1718
1714 TEST_F(DiskCacheEntryTest, MemoryOnlyBasicSparseIO) { 1719 TEST_F(DiskCacheEntryTest, MemoryOnlyBasicSparseIO) {
1715 SetMemoryOnlyMode(); 1720 SetMemoryOnlyMode();
1716 InitCache(); 1721 InitCache();
1717 BasicSparseIO(); 1722 BasicSparseIO();
1718 } 1723 }
1719 1724
1720 void DiskCacheEntryTest::HugeSparseIO() { 1725 void DiskCacheEntryTest::HugeSparseIO() {
1721 std::string key("the first key"); 1726 std::string key("the first key");
1722 disk_cache::Entry* entry; 1727 disk_cache::Entry* entry;
1723 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 1728 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
1724 1729
1725 // Write 1.2 MB so that we cover multiple entries. 1730 // Write 1.2 MB so that we cover multiple entries.
1726 const int kSize = 1200 * 1024; 1731 const int kSize = 1200 * 1024;
1727 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(kSize)); 1732 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(kSize));
1728 scoped_refptr<net::IOBuffer> buf_2(new net::IOBuffer(kSize)); 1733 scoped_refptr<net::IOBuffer> buf_2(new net::IOBuffer(kSize));
1729 CacheTestFillBuffer(buf_1->data(), kSize, false); 1734 CacheTestFillBuffer(buf_1->data(), kSize, false);
1730 1735
1731 // Write at offset 0x20F0000 (33 MB - 64 KB). 1736 // Write at offset 0x20F0000 (33 MB - 64 KB).
1732 VerifySparseIO(entry, 0x20F0000, buf_1.get(), kSize, buf_2.get()); 1737 VerifySparseIO(entry, 0x20F0000, buf_1.get(), kSize, buf_2.get());
1733 entry->Close(); 1738 entry->Close();
1734 1739
1735 // Check it again. 1740 // Check it again.
1736 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 1741 ASSERT_THAT(OpenEntry(key, &entry), IsOk());
1737 VerifyContentSparseIO(entry, 0x20F0000, buf_1->data(), kSize); 1742 VerifyContentSparseIO(entry, 0x20F0000, buf_1->data(), kSize);
1738 entry->Close(); 1743 entry->Close();
1739 } 1744 }
1740 1745
1741 TEST_F(DiskCacheEntryTest, HugeSparseIO) { 1746 TEST_F(DiskCacheEntryTest, HugeSparseIO) {
1742 InitCache(); 1747 InitCache();
1743 HugeSparseIO(); 1748 HugeSparseIO();
1744 } 1749 }
1745 1750
1746 TEST_F(DiskCacheEntryTest, MemoryOnlyHugeSparseIO) { 1751 TEST_F(DiskCacheEntryTest, MemoryOnlyHugeSparseIO) {
1747 SetMemoryOnlyMode(); 1752 SetMemoryOnlyMode();
1748 InitCache(); 1753 InitCache();
1749 HugeSparseIO(); 1754 HugeSparseIO();
1750 } 1755 }
1751 1756
1752 void DiskCacheEntryTest::GetAvailableRange() { 1757 void DiskCacheEntryTest::GetAvailableRange() {
1753 std::string key("the first key"); 1758 std::string key("the first key");
1754 disk_cache::Entry* entry; 1759 disk_cache::Entry* entry;
1755 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 1760 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
1756 1761
1757 const int kSize = 16 * 1024; 1762 const int kSize = 16 * 1024;
1758 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); 1763 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize));
1759 CacheTestFillBuffer(buf->data(), kSize, false); 1764 CacheTestFillBuffer(buf->data(), kSize, false);
1760 1765
1761 // Write at offset 0x20F0000 (33 MB - 64 KB), and 0x20F4400 (33 MB - 47 KB). 1766 // Write at offset 0x20F0000 (33 MB - 64 KB), and 0x20F4400 (33 MB - 47 KB).
1762 EXPECT_EQ(kSize, WriteSparseData(entry, 0x20F0000, buf.get(), kSize)); 1767 EXPECT_EQ(kSize, WriteSparseData(entry, 0x20F0000, buf.get(), kSize));
1763 EXPECT_EQ(kSize, WriteSparseData(entry, 0x20F4400, buf.get(), kSize)); 1768 EXPECT_EQ(kSize, WriteSparseData(entry, 0x20F4400, buf.get(), kSize));
1764 1769
1765 // We stop at the first empty block. 1770 // We stop at the first empty block.
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1822 InitCache(); 1827 InitCache();
1823 GetAvailableRange(); 1828 GetAvailableRange();
1824 } 1829 }
1825 1830
1826 // Tests that non-sequential writes that are not aligned with the minimum sparse 1831 // Tests that non-sequential writes that are not aligned with the minimum sparse
1827 // data granularity (1024 bytes) do in fact result in dropped data. 1832 // data granularity (1024 bytes) do in fact result in dropped data.
1828 TEST_F(DiskCacheEntryTest, SparseWriteDropped) { 1833 TEST_F(DiskCacheEntryTest, SparseWriteDropped) {
1829 InitCache(); 1834 InitCache();
1830 std::string key("the first key"); 1835 std::string key("the first key");
1831 disk_cache::Entry* entry; 1836 disk_cache::Entry* entry;
1832 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 1837 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
1833 1838
1834 const int kSize = 180; 1839 const int kSize = 180;
1835 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(kSize)); 1840 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(kSize));
1836 scoped_refptr<net::IOBuffer> buf_2(new net::IOBuffer(kSize)); 1841 scoped_refptr<net::IOBuffer> buf_2(new net::IOBuffer(kSize));
1837 CacheTestFillBuffer(buf_1->data(), kSize, false); 1842 CacheTestFillBuffer(buf_1->data(), kSize, false);
1838 1843
1839 // Do small writes (180 bytes) that get increasingly close to a 1024-byte 1844 // Do small writes (180 bytes) that get increasingly close to a 1024-byte
1840 // boundary. All data should be dropped until a boundary is crossed, at which 1845 // boundary. All data should be dropped until a boundary is crossed, at which
1841 // point the data after the boundary is saved (at least for a while). 1846 // point the data after the boundary is saved (at least for a while).
1842 int offset = 1024 - 500; 1847 int offset = 1024 - 500;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1879 rv = entry->GetAvailableRange(offset, kSize, &start, cb.callback()); 1884 rv = entry->GetAvailableRange(offset, kSize, &start, cb.callback());
1880 EXPECT_EQ(0, cb.GetResult(rv)); 1885 EXPECT_EQ(0, cb.GetResult(rv));
1881 entry->Close(); 1886 entry->Close();
1882 } 1887 }
1883 1888
1884 // Tests that small sequential writes are not dropped. 1889 // Tests that small sequential writes are not dropped.
1885 TEST_F(DiskCacheEntryTest, SparseSquentialWriteNotDropped) { 1890 TEST_F(DiskCacheEntryTest, SparseSquentialWriteNotDropped) {
1886 InitCache(); 1891 InitCache();
1887 std::string key("the first key"); 1892 std::string key("the first key");
1888 disk_cache::Entry* entry; 1893 disk_cache::Entry* entry;
1889 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 1894 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
1890 1895
1891 const int kSize = 180; 1896 const int kSize = 180;
1892 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(kSize)); 1897 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(kSize));
1893 scoped_refptr<net::IOBuffer> buf_2(new net::IOBuffer(kSize)); 1898 scoped_refptr<net::IOBuffer> buf_2(new net::IOBuffer(kSize));
1894 CacheTestFillBuffer(buf_1->data(), kSize, false); 1899 CacheTestFillBuffer(buf_1->data(), kSize, false);
1895 1900
1896 // Any starting offset is fine as long as it is 1024-bytes aligned. 1901 // Any starting offset is fine as long as it is 1024-bytes aligned.
1897 int rv = 0; 1902 int rv = 0;
1898 net::TestCompletionCallback cb; 1903 net::TestCompletionCallback cb;
1899 int64_t start; 1904 int64_t start;
1900 int64_t offset = 1024 * 11; 1905 int64_t offset = 1024 * 11;
1901 for (; offset < 20000; offset += kSize) { 1906 for (; offset < 20000; offset += kSize) {
1902 rv = entry->WriteSparseData(offset, buf_1.get(), kSize, cb.callback()); 1907 rv = entry->WriteSparseData(offset, buf_1.get(), kSize, cb.callback());
1903 EXPECT_EQ(kSize, cb.GetResult(rv)); 1908 EXPECT_EQ(kSize, cb.GetResult(rv));
1904 1909
1905 rv = entry->GetAvailableRange(offset, kSize, &start, cb.callback()); 1910 rv = entry->GetAvailableRange(offset, kSize, &start, cb.callback());
1906 EXPECT_EQ(kSize, cb.GetResult(rv)); 1911 EXPECT_EQ(kSize, cb.GetResult(rv));
1907 EXPECT_EQ(offset, start); 1912 EXPECT_EQ(offset, start);
1908 1913
1909 rv = entry->ReadSparseData(offset, buf_2.get(), kSize, cb.callback()); 1914 rv = entry->ReadSparseData(offset, buf_2.get(), kSize, cb.callback());
1910 EXPECT_EQ(kSize, cb.GetResult(rv)); 1915 EXPECT_EQ(kSize, cb.GetResult(rv));
1911 EXPECT_EQ(0, memcmp(buf_1.get()->data(), buf_2.get()->data(), kSize)); 1916 EXPECT_EQ(0, memcmp(buf_1.get()->data(), buf_2.get()->data(), kSize));
1912 } 1917 }
1913 1918
1914 entry->Close(); 1919 entry->Close();
1915 FlushQueueForTest(); 1920 FlushQueueForTest();
1916 1921
1917 // Verify again the last write made. 1922 // Verify again the last write made.
1918 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 1923 ASSERT_THAT(OpenEntry(key, &entry), IsOk());
1919 offset -= kSize; 1924 offset -= kSize;
1920 rv = entry->GetAvailableRange(offset, kSize, &start, cb.callback()); 1925 rv = entry->GetAvailableRange(offset, kSize, &start, cb.callback());
1921 EXPECT_EQ(kSize, cb.GetResult(rv)); 1926 EXPECT_EQ(kSize, cb.GetResult(rv));
1922 EXPECT_EQ(offset, start); 1927 EXPECT_EQ(offset, start);
1923 1928
1924 rv = entry->ReadSparseData(offset, buf_2.get(), kSize, cb.callback()); 1929 rv = entry->ReadSparseData(offset, buf_2.get(), kSize, cb.callback());
1925 EXPECT_EQ(kSize, cb.GetResult(rv)); 1930 EXPECT_EQ(kSize, cb.GetResult(rv));
1926 EXPECT_EQ(0, memcmp(buf_1.get()->data(), buf_2.get()->data(), kSize)); 1931 EXPECT_EQ(0, memcmp(buf_1.get()->data(), buf_2.get()->data(), kSize));
1927 1932
1928 entry->Close(); 1933 entry->Close();
1929 } 1934 }
1930 1935
1931 void DiskCacheEntryTest::CouldBeSparse() { 1936 void DiskCacheEntryTest::CouldBeSparse() {
1932 std::string key("the first key"); 1937 std::string key("the first key");
1933 disk_cache::Entry* entry; 1938 disk_cache::Entry* entry;
1934 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 1939 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
1935 1940
1936 const int kSize = 16 * 1024; 1941 const int kSize = 16 * 1024;
1937 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); 1942 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize));
1938 CacheTestFillBuffer(buf->data(), kSize, false); 1943 CacheTestFillBuffer(buf->data(), kSize, false);
1939 1944
1940 // Write at offset 0x20F0000 (33 MB - 64 KB). 1945 // Write at offset 0x20F0000 (33 MB - 64 KB).
1941 EXPECT_EQ(kSize, WriteSparseData(entry, 0x20F0000, buf.get(), kSize)); 1946 EXPECT_EQ(kSize, WriteSparseData(entry, 0x20F0000, buf.get(), kSize));
1942 1947
1943 EXPECT_TRUE(entry->CouldBeSparse()); 1948 EXPECT_TRUE(entry->CouldBeSparse());
1944 entry->Close(); 1949 entry->Close();
1945 1950
1946 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 1951 ASSERT_THAT(OpenEntry(key, &entry), IsOk());
1947 EXPECT_TRUE(entry->CouldBeSparse()); 1952 EXPECT_TRUE(entry->CouldBeSparse());
1948 entry->Close(); 1953 entry->Close();
1949 1954
1950 // Now verify a regular entry. 1955 // Now verify a regular entry.
1951 key.assign("another key"); 1956 key.assign("another key");
1952 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 1957 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
1953 EXPECT_FALSE(entry->CouldBeSparse()); 1958 EXPECT_FALSE(entry->CouldBeSparse());
1954 1959
1955 EXPECT_EQ(kSize, WriteData(entry, 0, 0, buf.get(), kSize, false)); 1960 EXPECT_EQ(kSize, WriteData(entry, 0, 0, buf.get(), kSize, false));
1956 EXPECT_EQ(kSize, WriteData(entry, 1, 0, buf.get(), kSize, false)); 1961 EXPECT_EQ(kSize, WriteData(entry, 1, 0, buf.get(), kSize, false));
1957 EXPECT_EQ(kSize, WriteData(entry, 2, 0, buf.get(), kSize, false)); 1962 EXPECT_EQ(kSize, WriteData(entry, 2, 0, buf.get(), kSize, false));
1958 1963
1959 EXPECT_FALSE(entry->CouldBeSparse()); 1964 EXPECT_FALSE(entry->CouldBeSparse());
1960 entry->Close(); 1965 entry->Close();
1961 1966
1962 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 1967 ASSERT_THAT(OpenEntry(key, &entry), IsOk());
1963 EXPECT_FALSE(entry->CouldBeSparse()); 1968 EXPECT_FALSE(entry->CouldBeSparse());
1964 entry->Close(); 1969 entry->Close();
1965 } 1970 }
1966 1971
1967 TEST_F(DiskCacheEntryTest, CouldBeSparse) { 1972 TEST_F(DiskCacheEntryTest, CouldBeSparse) {
1968 InitCache(); 1973 InitCache();
1969 CouldBeSparse(); 1974 CouldBeSparse();
1970 } 1975 }
1971 1976
1972 TEST_F(DiskCacheEntryTest, MemoryCouldBeSparse) { 1977 TEST_F(DiskCacheEntryTest, MemoryCouldBeSparse) {
1973 SetMemoryOnlyMode(); 1978 SetMemoryOnlyMode();
1974 InitCache(); 1979 InitCache();
1975 CouldBeSparse(); 1980 CouldBeSparse();
1976 } 1981 }
1977 1982
1978 TEST_F(DiskCacheEntryTest, MemoryOnlyMisalignedSparseIO) { 1983 TEST_F(DiskCacheEntryTest, MemoryOnlyMisalignedSparseIO) {
1979 SetMemoryOnlyMode(); 1984 SetMemoryOnlyMode();
1980 InitCache(); 1985 InitCache();
1981 1986
1982 const int kSize = 8192; 1987 const int kSize = 8192;
1983 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(kSize)); 1988 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(kSize));
1984 scoped_refptr<net::IOBuffer> buf_2(new net::IOBuffer(kSize)); 1989 scoped_refptr<net::IOBuffer> buf_2(new net::IOBuffer(kSize));
1985 CacheTestFillBuffer(buf_1->data(), kSize, false); 1990 CacheTestFillBuffer(buf_1->data(), kSize, false);
1986 1991
1987 std::string key("the first key"); 1992 std::string key("the first key");
1988 disk_cache::Entry* entry; 1993 disk_cache::Entry* entry;
1989 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 1994 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
1990 1995
1991 // This loop writes back to back starting from offset 0 and 9000. 1996 // This loop writes back to back starting from offset 0 and 9000.
1992 for (int i = 0; i < kSize; i += 1024) { 1997 for (int i = 0; i < kSize; i += 1024) {
1993 scoped_refptr<net::WrappedIOBuffer> buf_3( 1998 scoped_refptr<net::WrappedIOBuffer> buf_3(
1994 new net::WrappedIOBuffer(buf_1->data() + i)); 1999 new net::WrappedIOBuffer(buf_1->data() + i));
1995 VerifySparseIO(entry, i, buf_3.get(), 1024, buf_2.get()); 2000 VerifySparseIO(entry, i, buf_3.get(), 1024, buf_2.get());
1996 VerifySparseIO(entry, 9000 + i, buf_3.get(), 1024, buf_2.get()); 2001 VerifySparseIO(entry, 9000 + i, buf_3.get(), 1024, buf_2.get());
1997 } 2002 }
1998 2003
1999 // Make sure we have data written. 2004 // Make sure we have data written.
2000 VerifyContentSparseIO(entry, 0, buf_1->data(), kSize); 2005 VerifyContentSparseIO(entry, 0, buf_1->data(), kSize);
2001 VerifyContentSparseIO(entry, 9000, buf_1->data(), kSize); 2006 VerifyContentSparseIO(entry, 9000, buf_1->data(), kSize);
2002 2007
2003 // This tests a large write that spans 3 entries from a misaligned offset. 2008 // This tests a large write that spans 3 entries from a misaligned offset.
2004 VerifySparseIO(entry, 20481, buf_1.get(), 8192, buf_2.get()); 2009 VerifySparseIO(entry, 20481, buf_1.get(), 8192, buf_2.get());
2005 2010
2006 entry->Close(); 2011 entry->Close();
2007 } 2012 }
2008 2013
2009 TEST_F(DiskCacheEntryTest, MemoryOnlyMisalignedGetAvailableRange) { 2014 TEST_F(DiskCacheEntryTest, MemoryOnlyMisalignedGetAvailableRange) {
2010 SetMemoryOnlyMode(); 2015 SetMemoryOnlyMode();
2011 InitCache(); 2016 InitCache();
2012 2017
2013 const int kSize = 8192; 2018 const int kSize = 8192;
2014 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); 2019 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize));
2015 CacheTestFillBuffer(buf->data(), kSize, false); 2020 CacheTestFillBuffer(buf->data(), kSize, false);
2016 2021
2017 disk_cache::Entry* entry; 2022 disk_cache::Entry* entry;
2018 std::string key("the first key"); 2023 std::string key("the first key");
2019 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 2024 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
2020 2025
2021 // Writes in the middle of an entry. 2026 // Writes in the middle of an entry.
2022 EXPECT_EQ( 2027 EXPECT_EQ(
2023 1024, 2028 1024,
2024 entry->WriteSparseData(0, buf.get(), 1024, net::CompletionCallback())); 2029 entry->WriteSparseData(0, buf.get(), 1024, net::CompletionCallback()));
2025 EXPECT_EQ( 2030 EXPECT_EQ(
2026 1024, 2031 1024,
2027 entry->WriteSparseData(5120, buf.get(), 1024, net::CompletionCallback())); 2032 entry->WriteSparseData(5120, buf.get(), 1024, net::CompletionCallback()));
2028 EXPECT_EQ(1024, 2033 EXPECT_EQ(1024,
2029 entry->WriteSparseData( 2034 entry->WriteSparseData(
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
2068 rv = entry->GetAvailableRange(40000, 20000, &start, cb.callback()); 2073 rv = entry->GetAvailableRange(40000, 20000, &start, cb.callback());
2069 EXPECT_EQ(8192, cb.GetResult(rv)); 2074 EXPECT_EQ(8192, cb.GetResult(rv));
2070 EXPECT_EQ(50000, start); 2075 EXPECT_EQ(50000, start);
2071 2076
2072 entry->Close(); 2077 entry->Close();
2073 } 2078 }
2074 2079
2075 void DiskCacheEntryTest::UpdateSparseEntry() { 2080 void DiskCacheEntryTest::UpdateSparseEntry() {
2076 std::string key("the first key"); 2081 std::string key("the first key");
2077 disk_cache::Entry* entry1; 2082 disk_cache::Entry* entry1;
2078 ASSERT_EQ(net::OK, CreateEntry(key, &entry1)); 2083 ASSERT_THAT(CreateEntry(key, &entry1), IsOk());
2079 2084
2080 const int kSize = 2048; 2085 const int kSize = 2048;
2081 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(kSize)); 2086 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(kSize));
2082 scoped_refptr<net::IOBuffer> buf_2(new net::IOBuffer(kSize)); 2087 scoped_refptr<net::IOBuffer> buf_2(new net::IOBuffer(kSize));
2083 CacheTestFillBuffer(buf_1->data(), kSize, false); 2088 CacheTestFillBuffer(buf_1->data(), kSize, false);
2084 2089
2085 // Write at offset 0. 2090 // Write at offset 0.
2086 VerifySparseIO(entry1, 0, buf_1.get(), kSize, buf_2.get()); 2091 VerifySparseIO(entry1, 0, buf_1.get(), kSize, buf_2.get());
2087 entry1->Close(); 2092 entry1->Close();
2088 2093
2089 // Write at offset 2048. 2094 // Write at offset 2048.
2090 ASSERT_EQ(net::OK, OpenEntry(key, &entry1)); 2095 ASSERT_THAT(OpenEntry(key, &entry1), IsOk());
2091 VerifySparseIO(entry1, 2048, buf_1.get(), kSize, buf_2.get()); 2096 VerifySparseIO(entry1, 2048, buf_1.get(), kSize, buf_2.get());
2092 2097
2093 disk_cache::Entry* entry2; 2098 disk_cache::Entry* entry2;
2094 ASSERT_EQ(net::OK, CreateEntry("the second key", &entry2)); 2099 ASSERT_THAT(CreateEntry("the second key", &entry2), IsOk());
2095 2100
2096 entry1->Close(); 2101 entry1->Close();
2097 entry2->Close(); 2102 entry2->Close();
2098 FlushQueueForTest(); 2103 FlushQueueForTest();
2099 if (memory_only_ || simple_cache_mode_) 2104 if (memory_only_ || simple_cache_mode_)
2100 EXPECT_EQ(2, cache_->GetEntryCount()); 2105 EXPECT_EQ(2, cache_->GetEntryCount());
2101 else 2106 else
2102 EXPECT_EQ(3, cache_->GetEntryCount()); 2107 EXPECT_EQ(3, cache_->GetEntryCount());
2103 } 2108 }
2104 2109
2105 TEST_F(DiskCacheEntryTest, UpdateSparseEntry) { 2110 TEST_F(DiskCacheEntryTest, UpdateSparseEntry) {
2106 SetCacheType(net::MEDIA_CACHE); 2111 SetCacheType(net::MEDIA_CACHE);
2107 InitCache(); 2112 InitCache();
2108 UpdateSparseEntry(); 2113 UpdateSparseEntry();
2109 } 2114 }
2110 2115
2111 TEST_F(DiskCacheEntryTest, MemoryOnlyUpdateSparseEntry) { 2116 TEST_F(DiskCacheEntryTest, MemoryOnlyUpdateSparseEntry) {
2112 SetMemoryOnlyMode(); 2117 SetMemoryOnlyMode();
2113 SetCacheType(net::MEDIA_CACHE); 2118 SetCacheType(net::MEDIA_CACHE);
2114 InitCache(); 2119 InitCache();
2115 UpdateSparseEntry(); 2120 UpdateSparseEntry();
2116 } 2121 }
2117 2122
2118 void DiskCacheEntryTest::DoomSparseEntry() { 2123 void DiskCacheEntryTest::DoomSparseEntry() {
2119 std::string key1("the first key"); 2124 std::string key1("the first key");
2120 std::string key2("the second key"); 2125 std::string key2("the second key");
2121 disk_cache::Entry *entry1, *entry2; 2126 disk_cache::Entry *entry1, *entry2;
2122 ASSERT_EQ(net::OK, CreateEntry(key1, &entry1)); 2127 ASSERT_THAT(CreateEntry(key1, &entry1), IsOk());
2123 ASSERT_EQ(net::OK, CreateEntry(key2, &entry2)); 2128 ASSERT_THAT(CreateEntry(key2, &entry2), IsOk());
2124 2129
2125 const int kSize = 4 * 1024; 2130 const int kSize = 4 * 1024;
2126 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); 2131 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize));
2127 CacheTestFillBuffer(buf->data(), kSize, false); 2132 CacheTestFillBuffer(buf->data(), kSize, false);
2128 2133
2129 int64_t offset = 1024; 2134 int64_t offset = 1024;
2130 // Write to a bunch of ranges. 2135 // Write to a bunch of ranges.
2131 for (int i = 0; i < 12; i++) { 2136 for (int i = 0; i < 12; i++) {
2132 EXPECT_EQ(kSize, WriteSparseData(entry1, offset, buf.get(), kSize)); 2137 EXPECT_EQ(kSize, WriteSparseData(entry1, offset, buf.get(), kSize));
2133 // Keep the second map under the default size. 2138 // Keep the second map under the default size.
2134 if (i < 9) 2139 if (i < 9)
2135 EXPECT_EQ(kSize, WriteSparseData(entry2, offset, buf.get(), kSize)); 2140 EXPECT_EQ(kSize, WriteSparseData(entry2, offset, buf.get(), kSize));
2136 2141
2137 offset *= 4; 2142 offset *= 4;
2138 } 2143 }
2139 2144
2140 if (memory_only_ || simple_cache_mode_) 2145 if (memory_only_ || simple_cache_mode_)
2141 EXPECT_EQ(2, cache_->GetEntryCount()); 2146 EXPECT_EQ(2, cache_->GetEntryCount());
2142 else 2147 else
2143 EXPECT_EQ(15, cache_->GetEntryCount()); 2148 EXPECT_EQ(15, cache_->GetEntryCount());
2144 2149
2145 // Doom the first entry while it's still open. 2150 // Doom the first entry while it's still open.
2146 entry1->Doom(); 2151 entry1->Doom();
2147 entry1->Close(); 2152 entry1->Close();
2148 entry2->Close(); 2153 entry2->Close();
2149 2154
2150 // Doom the second entry after it's fully saved. 2155 // Doom the second entry after it's fully saved.
2151 EXPECT_EQ(net::OK, DoomEntry(key2)); 2156 EXPECT_THAT(DoomEntry(key2), IsOk());
2152 2157
2153 // Make sure we do all needed work. This may fail for entry2 if between Close 2158 // Make sure we do all needed work. This may fail for entry2 if between Close
2154 // and DoomEntry the system decides to remove all traces of the file from the 2159 // and DoomEntry the system decides to remove all traces of the file from the
2155 // system cache so we don't see that there is pending IO. 2160 // system cache so we don't see that there is pending IO.
2156 base::RunLoop().RunUntilIdle(); 2161 base::RunLoop().RunUntilIdle();
2157 2162
2158 if (memory_only_) { 2163 if (memory_only_) {
2159 EXPECT_EQ(0, cache_->GetEntryCount()); 2164 EXPECT_EQ(0, cache_->GetEntryCount());
2160 } else { 2165 } else {
2161 if (5 == cache_->GetEntryCount()) { 2166 if (5 == cache_->GetEntryCount()) {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
2201 DISALLOW_COPY_AND_ASSIGN(SparseTestCompletionCallback); 2206 DISALLOW_COPY_AND_ASSIGN(SparseTestCompletionCallback);
2202 }; 2207 };
2203 2208
2204 // Tests that we don't crash when the backend is deleted while we are working 2209 // Tests that we don't crash when the backend is deleted while we are working
2205 // deleting the sub-entries of a sparse entry. 2210 // deleting the sub-entries of a sparse entry.
2206 TEST_F(DiskCacheEntryTest, DoomSparseEntry2) { 2211 TEST_F(DiskCacheEntryTest, DoomSparseEntry2) {
2207 UseCurrentThread(); 2212 UseCurrentThread();
2208 InitCache(); 2213 InitCache();
2209 std::string key("the key"); 2214 std::string key("the key");
2210 disk_cache::Entry* entry; 2215 disk_cache::Entry* entry;
2211 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 2216 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
2212 2217
2213 const int kSize = 4 * 1024; 2218 const int kSize = 4 * 1024;
2214 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); 2219 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize));
2215 CacheTestFillBuffer(buf->data(), kSize, false); 2220 CacheTestFillBuffer(buf->data(), kSize, false);
2216 2221
2217 int64_t offset = 1024; 2222 int64_t offset = 1024;
2218 // Write to a bunch of ranges. 2223 // Write to a bunch of ranges.
2219 for (int i = 0; i < 12; i++) { 2224 for (int i = 0; i < 12; i++) {
2220 EXPECT_EQ(kSize, 2225 EXPECT_EQ(kSize,
2221 entry->WriteSparseData( 2226 entry->WriteSparseData(
2222 offset, buf.get(), kSize, net::CompletionCallback())); 2227 offset, buf.get(), kSize, net::CompletionCallback()));
2223 offset *= 4; 2228 offset *= 4;
2224 } 2229 }
2225 EXPECT_EQ(9, cache_->GetEntryCount()); 2230 EXPECT_EQ(9, cache_->GetEntryCount());
2226 2231
2227 entry->Close(); 2232 entry->Close();
2228 disk_cache::Backend* cache = cache_.get(); 2233 disk_cache::Backend* cache = cache_.get();
2229 SparseTestCompletionCallback cb(std::move(cache_)); 2234 SparseTestCompletionCallback cb(std::move(cache_));
2230 int rv = cache->DoomEntry(key, cb.callback()); 2235 int rv = cache->DoomEntry(key, cb.callback());
2231 EXPECT_EQ(net::ERR_IO_PENDING, rv); 2236 EXPECT_THAT(rv, IsError(net::ERR_IO_PENDING));
2232 EXPECT_EQ(net::OK, cb.WaitForResult()); 2237 EXPECT_THAT(cb.WaitForResult(), IsOk());
2233 } 2238 }
2234 2239
2235 void DiskCacheEntryTest::PartialSparseEntry() { 2240 void DiskCacheEntryTest::PartialSparseEntry() {
2236 std::string key("the first key"); 2241 std::string key("the first key");
2237 disk_cache::Entry* entry; 2242 disk_cache::Entry* entry;
2238 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 2243 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
2239 2244
2240 // We should be able to deal with IO that is not aligned to the block size 2245 // We should be able to deal with IO that is not aligned to the block size
2241 // of a sparse entry, at least to write a big range without leaving holes. 2246 // of a sparse entry, at least to write a big range without leaving holes.
2242 const int kSize = 4 * 1024; 2247 const int kSize = 4 * 1024;
2243 const int kSmallSize = 128; 2248 const int kSmallSize = 128;
2244 scoped_refptr<net::IOBuffer> buf1(new net::IOBuffer(kSize)); 2249 scoped_refptr<net::IOBuffer> buf1(new net::IOBuffer(kSize));
2245 CacheTestFillBuffer(buf1->data(), kSize, false); 2250 CacheTestFillBuffer(buf1->data(), kSize, false);
2246 2251
2247 // The first write is just to extend the entry. The third write occupies 2252 // The first write is just to extend the entry. The third write occupies
2248 // a 1KB block partially, it may not be written internally depending on the 2253 // a 1KB block partially, it may not be written internally depending on the
2249 // implementation. 2254 // implementation.
2250 EXPECT_EQ(kSize, WriteSparseData(entry, 20000, buf1.get(), kSize)); 2255 EXPECT_EQ(kSize, WriteSparseData(entry, 20000, buf1.get(), kSize));
2251 EXPECT_EQ(kSize, WriteSparseData(entry, 500, buf1.get(), kSize)); 2256 EXPECT_EQ(kSize, WriteSparseData(entry, 500, buf1.get(), kSize));
2252 EXPECT_EQ(kSmallSize, 2257 EXPECT_EQ(kSmallSize,
2253 WriteSparseData(entry, 1080321, buf1.get(), kSmallSize)); 2258 WriteSparseData(entry, 1080321, buf1.get(), kSmallSize));
2254 entry->Close(); 2259 entry->Close();
2255 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 2260 ASSERT_THAT(OpenEntry(key, &entry), IsOk());
2256 2261
2257 scoped_refptr<net::IOBuffer> buf2(new net::IOBuffer(kSize)); 2262 scoped_refptr<net::IOBuffer> buf2(new net::IOBuffer(kSize));
2258 memset(buf2->data(), 0, kSize); 2263 memset(buf2->data(), 0, kSize);
2259 EXPECT_EQ(0, ReadSparseData(entry, 8000, buf2.get(), kSize)); 2264 EXPECT_EQ(0, ReadSparseData(entry, 8000, buf2.get(), kSize));
2260 2265
2261 EXPECT_EQ(500, ReadSparseData(entry, kSize, buf2.get(), kSize)); 2266 EXPECT_EQ(500, ReadSparseData(entry, kSize, buf2.get(), kSize));
2262 EXPECT_EQ(0, memcmp(buf2->data(), buf1->data() + kSize - 500, 500)); 2267 EXPECT_EQ(0, memcmp(buf2->data(), buf1->data() + kSize - 500, 500));
2263 EXPECT_EQ(0, ReadSparseData(entry, 0, buf2.get(), kSize)); 2268 EXPECT_EQ(0, ReadSparseData(entry, 0, buf2.get(), kSize));
2264 2269
2265 // This read should not change anything. 2270 // This read should not change anything.
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
2334 SetMemoryOnlyMode(); 2339 SetMemoryOnlyMode();
2335 InitCache(); 2340 InitCache();
2336 PartialSparseEntry(); 2341 PartialSparseEntry();
2337 } 2342 }
2338 2343
2339 // Tests that corrupt sparse children are removed automatically. 2344 // Tests that corrupt sparse children are removed automatically.
2340 TEST_F(DiskCacheEntryTest, CleanupSparseEntry) { 2345 TEST_F(DiskCacheEntryTest, CleanupSparseEntry) {
2341 InitCache(); 2346 InitCache();
2342 std::string key("the first key"); 2347 std::string key("the first key");
2343 disk_cache::Entry* entry; 2348 disk_cache::Entry* entry;
2344 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 2349 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
2345 2350
2346 const int kSize = 4 * 1024; 2351 const int kSize = 4 * 1024;
2347 scoped_refptr<net::IOBuffer> buf1(new net::IOBuffer(kSize)); 2352 scoped_refptr<net::IOBuffer> buf1(new net::IOBuffer(kSize));
2348 CacheTestFillBuffer(buf1->data(), kSize, false); 2353 CacheTestFillBuffer(buf1->data(), kSize, false);
2349 2354
2350 const int k1Meg = 1024 * 1024; 2355 const int k1Meg = 1024 * 1024;
2351 EXPECT_EQ(kSize, WriteSparseData(entry, 8192, buf1.get(), kSize)); 2356 EXPECT_EQ(kSize, WriteSparseData(entry, 8192, buf1.get(), kSize));
2352 EXPECT_EQ(kSize, WriteSparseData(entry, k1Meg + 8192, buf1.get(), kSize)); 2357 EXPECT_EQ(kSize, WriteSparseData(entry, k1Meg + 8192, buf1.get(), kSize));
2353 EXPECT_EQ(kSize, WriteSparseData(entry, 2 * k1Meg + 8192, buf1.get(), kSize)); 2358 EXPECT_EQ(kSize, WriteSparseData(entry, 2 * k1Meg + 8192, buf1.get(), kSize));
2354 entry->Close(); 2359 entry->Close();
2355 EXPECT_EQ(4, cache_->GetEntryCount()); 2360 EXPECT_EQ(4, cache_->GetEntryCount());
2356 2361
2357 std::unique_ptr<TestIterator> iter = CreateIterator(); 2362 std::unique_ptr<TestIterator> iter = CreateIterator();
2358 int count = 0; 2363 int count = 0;
2359 std::string child_key[2]; 2364 std::string child_key[2];
2360 while (iter->OpenNextEntry(&entry) == net::OK) { 2365 while (iter->OpenNextEntry(&entry) == net::OK) {
2361 ASSERT_TRUE(entry != NULL); 2366 ASSERT_TRUE(entry != NULL);
2362 // Writing to an entry will alter the LRU list and invalidate the iterator. 2367 // Writing to an entry will alter the LRU list and invalidate the iterator.
2363 if (entry->GetKey() != key && count < 2) 2368 if (entry->GetKey() != key && count < 2)
2364 child_key[count++] = entry->GetKey(); 2369 child_key[count++] = entry->GetKey();
2365 entry->Close(); 2370 entry->Close();
2366 } 2371 }
2367 for (int i = 0; i < 2; i++) { 2372 for (int i = 0; i < 2; i++) {
2368 ASSERT_EQ(net::OK, OpenEntry(child_key[i], &entry)); 2373 ASSERT_THAT(OpenEntry(child_key[i], &entry), IsOk());
2369 // Overwrite the header's magic and signature. 2374 // Overwrite the header's magic and signature.
2370 EXPECT_EQ(12, WriteData(entry, 2, 0, buf1.get(), 12, false)); 2375 EXPECT_EQ(12, WriteData(entry, 2, 0, buf1.get(), 12, false));
2371 entry->Close(); 2376 entry->Close();
2372 } 2377 }
2373 2378
2374 EXPECT_EQ(4, cache_->GetEntryCount()); 2379 EXPECT_EQ(4, cache_->GetEntryCount());
2375 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 2380 ASSERT_THAT(OpenEntry(key, &entry), IsOk());
2376 2381
2377 // Two children should be gone. One while reading and one while writing. 2382 // Two children should be gone. One while reading and one while writing.
2378 EXPECT_EQ(0, ReadSparseData(entry, 2 * k1Meg + 8192, buf1.get(), kSize)); 2383 EXPECT_EQ(0, ReadSparseData(entry, 2 * k1Meg + 8192, buf1.get(), kSize));
2379 EXPECT_EQ(kSize, WriteSparseData(entry, k1Meg + 16384, buf1.get(), kSize)); 2384 EXPECT_EQ(kSize, WriteSparseData(entry, k1Meg + 16384, buf1.get(), kSize));
2380 EXPECT_EQ(0, ReadSparseData(entry, k1Meg + 8192, buf1.get(), kSize)); 2385 EXPECT_EQ(0, ReadSparseData(entry, k1Meg + 8192, buf1.get(), kSize));
2381 2386
2382 // We never touched this one. 2387 // We never touched this one.
2383 EXPECT_EQ(kSize, ReadSparseData(entry, 8192, buf1.get(), kSize)); 2388 EXPECT_EQ(kSize, ReadSparseData(entry, 8192, buf1.get(), kSize));
2384 entry->Close(); 2389 entry->Close();
2385 2390
2386 // We re-created one of the corrupt children. 2391 // We re-created one of the corrupt children.
2387 EXPECT_EQ(3, cache_->GetEntryCount()); 2392 EXPECT_EQ(3, cache_->GetEntryCount());
2388 } 2393 }
2389 2394
2390 TEST_F(DiskCacheEntryTest, CancelSparseIO) { 2395 TEST_F(DiskCacheEntryTest, CancelSparseIO) {
2391 UseCurrentThread(); 2396 UseCurrentThread();
2392 InitCache(); 2397 InitCache();
2393 std::string key("the first key"); 2398 std::string key("the first key");
2394 disk_cache::Entry* entry; 2399 disk_cache::Entry* entry;
2395 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 2400 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
2396 2401
2397 const int kSize = 40 * 1024; 2402 const int kSize = 40 * 1024;
2398 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); 2403 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize));
2399 CacheTestFillBuffer(buf->data(), kSize, false); 2404 CacheTestFillBuffer(buf->data(), kSize, false);
2400 2405
2401 // This will open and write two "real" entries. 2406 // This will open and write two "real" entries.
2402 net::TestCompletionCallback cb1, cb2, cb3, cb4, cb5; 2407 net::TestCompletionCallback cb1, cb2, cb3, cb4, cb5;
2403 int rv = entry->WriteSparseData( 2408 int rv = entry->WriteSparseData(
2404 1024 * 1024 - 4096, buf.get(), kSize, cb1.callback()); 2409 1024 * 1024 - 4096, buf.get(), kSize, cb1.callback());
2405 EXPECT_EQ(net::ERR_IO_PENDING, rv); 2410 EXPECT_THAT(rv, IsError(net::ERR_IO_PENDING));
2406 2411
2407 int64_t offset = 0; 2412 int64_t offset = 0;
2408 rv = entry->GetAvailableRange(offset, kSize, &offset, cb5.callback()); 2413 rv = entry->GetAvailableRange(offset, kSize, &offset, cb5.callback());
2409 rv = cb5.GetResult(rv); 2414 rv = cb5.GetResult(rv);
2410 if (!cb1.have_result()) { 2415 if (!cb1.have_result()) {
2411 // We may or may not have finished writing to the entry. If we have not, 2416 // We may or may not have finished writing to the entry. If we have not,
2412 // we cannot start another operation at this time. 2417 // we cannot start another operation at this time.
2413 EXPECT_EQ(net::ERR_CACHE_OPERATION_NOT_SUPPORTED, rv); 2418 EXPECT_THAT(rv, IsError(net::ERR_CACHE_OPERATION_NOT_SUPPORTED));
2414 } 2419 }
2415 2420
2416 // We cancel the pending operation, and register multiple notifications. 2421 // We cancel the pending operation, and register multiple notifications.
2417 entry->CancelSparseIO(); 2422 entry->CancelSparseIO();
2418 EXPECT_EQ(net::ERR_IO_PENDING, entry->ReadyForSparseIO(cb2.callback())); 2423 EXPECT_THAT(entry->ReadyForSparseIO(cb2.callback()),
2419 EXPECT_EQ(net::ERR_IO_PENDING, entry->ReadyForSparseIO(cb3.callback())); 2424 IsError(net::ERR_IO_PENDING));
2425 EXPECT_THAT(entry->ReadyForSparseIO(cb3.callback()),
2426 IsError(net::ERR_IO_PENDING));
2420 entry->CancelSparseIO(); // Should be a no op at this point. 2427 entry->CancelSparseIO(); // Should be a no op at this point.
2421 EXPECT_EQ(net::ERR_IO_PENDING, entry->ReadyForSparseIO(cb4.callback())); 2428 EXPECT_THAT(entry->ReadyForSparseIO(cb4.callback()),
2429 IsError(net::ERR_IO_PENDING));
2422 2430
2423 if (!cb1.have_result()) { 2431 if (!cb1.have_result()) {
2424 EXPECT_EQ(net::ERR_CACHE_OPERATION_NOT_SUPPORTED, 2432 EXPECT_EQ(net::ERR_CACHE_OPERATION_NOT_SUPPORTED,
2425 entry->ReadSparseData( 2433 entry->ReadSparseData(
2426 offset, buf.get(), kSize, net::CompletionCallback())); 2434 offset, buf.get(), kSize, net::CompletionCallback()));
2427 EXPECT_EQ(net::ERR_CACHE_OPERATION_NOT_SUPPORTED, 2435 EXPECT_EQ(net::ERR_CACHE_OPERATION_NOT_SUPPORTED,
2428 entry->WriteSparseData( 2436 entry->WriteSparseData(
2429 offset, buf.get(), kSize, net::CompletionCallback())); 2437 offset, buf.get(), kSize, net::CompletionCallback()));
2430 } 2438 }
2431 2439
2432 // Now see if we receive all notifications. Note that we should not be able 2440 // Now see if we receive all notifications. Note that we should not be able
2433 // to write everything (unless the timing of the system is really weird). 2441 // to write everything (unless the timing of the system is really weird).
2434 rv = cb1.WaitForResult(); 2442 rv = cb1.WaitForResult();
2435 EXPECT_TRUE(rv == 4096 || rv == kSize); 2443 EXPECT_TRUE(rv == 4096 || rv == kSize);
2436 EXPECT_EQ(net::OK, cb2.WaitForResult()); 2444 EXPECT_THAT(cb2.WaitForResult(), IsOk());
2437 EXPECT_EQ(net::OK, cb3.WaitForResult()); 2445 EXPECT_THAT(cb3.WaitForResult(), IsOk());
2438 EXPECT_EQ(net::OK, cb4.WaitForResult()); 2446 EXPECT_THAT(cb4.WaitForResult(), IsOk());
2439 2447
2440 rv = entry->GetAvailableRange(offset, kSize, &offset, cb5.callback()); 2448 rv = entry->GetAvailableRange(offset, kSize, &offset, cb5.callback());
2441 EXPECT_EQ(0, cb5.GetResult(rv)); 2449 EXPECT_EQ(0, cb5.GetResult(rv));
2442 entry->Close(); 2450 entry->Close();
2443 } 2451 }
2444 2452
2445 // Tests that we perform sanity checks on an entry's key. Note that there are 2453 // Tests that we perform sanity checks on an entry's key. Note that there are
2446 // other tests that exercise sanity checks by using saved corrupt files. 2454 // other tests that exercise sanity checks by using saved corrupt files.
2447 TEST_F(DiskCacheEntryTest, KeySanityCheck) { 2455 TEST_F(DiskCacheEntryTest, KeySanityCheck) {
2448 UseCurrentThread(); 2456 UseCurrentThread();
2449 InitCache(); 2457 InitCache();
2450 std::string key("the first key"); 2458 std::string key("the first key");
2451 disk_cache::Entry* entry; 2459 disk_cache::Entry* entry;
2452 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 2460 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
2453 2461
2454 disk_cache::EntryImpl* entry_impl = 2462 disk_cache::EntryImpl* entry_impl =
2455 static_cast<disk_cache::EntryImpl*>(entry); 2463 static_cast<disk_cache::EntryImpl*>(entry);
2456 disk_cache::EntryStore* store = entry_impl->entry()->Data(); 2464 disk_cache::EntryStore* store = entry_impl->entry()->Data();
2457 2465
2458 // We have reserved space for a short key (one block), let's say that the key 2466 // We have reserved space for a short key (one block), let's say that the key
2459 // takes more than one block, and remove the NULLs after the actual key. 2467 // takes more than one block, and remove the NULLs after the actual key.
2460 store->key_len = 800; 2468 store->key_len = 800;
2461 memset(store->key + key.size(), 'k', sizeof(store->key) - key.size()); 2469 memset(store->key + key.size(), 'k', sizeof(store->key) - key.size());
2462 entry_impl->entry()->set_modified(); 2470 entry_impl->entry()->set_modified();
(...skipping 14 matching lines...) Expand all
2477 TEST_F(DiskCacheEntryTest, SimpleCacheExternalAsyncIO) { 2485 TEST_F(DiskCacheEntryTest, SimpleCacheExternalAsyncIO) {
2478 SetSimpleCacheMode(); 2486 SetSimpleCacheMode();
2479 InitCache(); 2487 InitCache();
2480 ExternalAsyncIO(); 2488 ExternalAsyncIO();
2481 } 2489 }
2482 2490
2483 TEST_F(DiskCacheEntryTest, SimpleCacheReleaseBuffer) { 2491 TEST_F(DiskCacheEntryTest, SimpleCacheReleaseBuffer) {
2484 SetSimpleCacheMode(); 2492 SetSimpleCacheMode();
2485 InitCache(); 2493 InitCache();
2486 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount; ++i) { 2494 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount; ++i) {
2487 EXPECT_EQ(net::OK, DoomAllEntries()); 2495 EXPECT_THAT(DoomAllEntries(), IsOk());
2488 ReleaseBuffer(i); 2496 ReleaseBuffer(i);
2489 } 2497 }
2490 } 2498 }
2491 2499
2492 TEST_F(DiskCacheEntryTest, SimpleCacheStreamAccess) { 2500 TEST_F(DiskCacheEntryTest, SimpleCacheStreamAccess) {
2493 SetSimpleCacheMode(); 2501 SetSimpleCacheMode();
2494 InitCache(); 2502 InitCache();
2495 StreamAccess(); 2503 StreamAccess();
2496 } 2504 }
2497 2505
2498 TEST_F(DiskCacheEntryTest, SimpleCacheGetKey) { 2506 TEST_F(DiskCacheEntryTest, SimpleCacheGetKey) {
2499 SetSimpleCacheMode(); 2507 SetSimpleCacheMode();
2500 InitCache(); 2508 InitCache();
2501 GetKey(); 2509 GetKey();
2502 } 2510 }
2503 2511
2504 TEST_F(DiskCacheEntryTest, SimpleCacheGetTimes) { 2512 TEST_F(DiskCacheEntryTest, SimpleCacheGetTimes) {
2505 SetSimpleCacheMode(); 2513 SetSimpleCacheMode();
2506 InitCache(); 2514 InitCache();
2507 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount; ++i) { 2515 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount; ++i) {
2508 EXPECT_EQ(net::OK, DoomAllEntries()); 2516 EXPECT_THAT(DoomAllEntries(), IsOk());
2509 GetTimes(i); 2517 GetTimes(i);
2510 } 2518 }
2511 } 2519 }
2512 2520
2513 TEST_F(DiskCacheEntryTest, SimpleCacheGrowData) { 2521 TEST_F(DiskCacheEntryTest, SimpleCacheGrowData) {
2514 SetSimpleCacheMode(); 2522 SetSimpleCacheMode();
2515 InitCache(); 2523 InitCache();
2516 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount; ++i) { 2524 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount; ++i) {
2517 EXPECT_EQ(net::OK, DoomAllEntries()); 2525 EXPECT_THAT(DoomAllEntries(), IsOk());
2518 GrowData(i); 2526 GrowData(i);
2519 } 2527 }
2520 } 2528 }
2521 2529
2522 TEST_F(DiskCacheEntryTest, SimpleCacheTruncateData) { 2530 TEST_F(DiskCacheEntryTest, SimpleCacheTruncateData) {
2523 SetSimpleCacheMode(); 2531 SetSimpleCacheMode();
2524 InitCache(); 2532 InitCache();
2525 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount; ++i) { 2533 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount; ++i) {
2526 EXPECT_EQ(net::OK, DoomAllEntries()); 2534 EXPECT_THAT(DoomAllEntries(), IsOk());
2527 TruncateData(i); 2535 TruncateData(i);
2528 } 2536 }
2529 } 2537 }
2530 2538
2531 TEST_F(DiskCacheEntryTest, SimpleCacheZeroLengthIO) { 2539 TEST_F(DiskCacheEntryTest, SimpleCacheZeroLengthIO) {
2532 SetSimpleCacheMode(); 2540 SetSimpleCacheMode();
2533 InitCache(); 2541 InitCache();
2534 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount; ++i) { 2542 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount; ++i) {
2535 EXPECT_EQ(net::OK, DoomAllEntries()); 2543 EXPECT_THAT(DoomAllEntries(), IsOk());
2536 ZeroLengthIO(i); 2544 ZeroLengthIO(i);
2537 } 2545 }
2538 } 2546 }
2539 2547
2540 TEST_F(DiskCacheEntryTest, SimpleCacheSizeAtCreate) { 2548 TEST_F(DiskCacheEntryTest, SimpleCacheSizeAtCreate) {
2541 SetSimpleCacheMode(); 2549 SetSimpleCacheMode();
2542 InitCache(); 2550 InitCache();
2543 SizeAtCreate(); 2551 SizeAtCreate();
2544 } 2552 }
2545 2553
2546 TEST_F(DiskCacheEntryTest, SimpleCacheReuseExternalEntry) { 2554 TEST_F(DiskCacheEntryTest, SimpleCacheReuseExternalEntry) {
2547 SetSimpleCacheMode(); 2555 SetSimpleCacheMode();
2548 SetMaxSize(200 * 1024); 2556 SetMaxSize(200 * 1024);
2549 InitCache(); 2557 InitCache();
2550 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount; ++i) { 2558 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount; ++i) {
2551 EXPECT_EQ(net::OK, DoomAllEntries()); 2559 EXPECT_THAT(DoomAllEntries(), IsOk());
2552 ReuseEntry(20 * 1024, i); 2560 ReuseEntry(20 * 1024, i);
2553 } 2561 }
2554 } 2562 }
2555 2563
2556 TEST_F(DiskCacheEntryTest, SimpleCacheReuseInternalEntry) { 2564 TEST_F(DiskCacheEntryTest, SimpleCacheReuseInternalEntry) {
2557 SetSimpleCacheMode(); 2565 SetSimpleCacheMode();
2558 SetMaxSize(100 * 1024); 2566 SetMaxSize(100 * 1024);
2559 InitCache(); 2567 InitCache();
2560 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount; ++i) { 2568 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount; ++i) {
2561 EXPECT_EQ(net::OK, DoomAllEntries()); 2569 EXPECT_THAT(DoomAllEntries(), IsOk());
2562 ReuseEntry(10 * 1024, i); 2570 ReuseEntry(10 * 1024, i);
2563 } 2571 }
2564 } 2572 }
2565 2573
2566 TEST_F(DiskCacheEntryTest, SimpleCacheSizeChanges) { 2574 TEST_F(DiskCacheEntryTest, SimpleCacheSizeChanges) {
2567 SetSimpleCacheMode(); 2575 SetSimpleCacheMode();
2568 InitCache(); 2576 InitCache();
2569 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount; ++i) { 2577 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount; ++i) {
2570 EXPECT_EQ(net::OK, DoomAllEntries()); 2578 EXPECT_THAT(DoomAllEntries(), IsOk());
2571 SizeChanges(i); 2579 SizeChanges(i);
2572 } 2580 }
2573 } 2581 }
2574 2582
2575 TEST_F(DiskCacheEntryTest, SimpleCacheInvalidData) { 2583 TEST_F(DiskCacheEntryTest, SimpleCacheInvalidData) {
2576 SetSimpleCacheMode(); 2584 SetSimpleCacheMode();
2577 InitCache(); 2585 InitCache();
2578 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount; ++i) { 2586 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount; ++i) {
2579 EXPECT_EQ(net::OK, DoomAllEntries()); 2587 EXPECT_THAT(DoomAllEntries(), IsOk());
2580 InvalidData(i); 2588 InvalidData(i);
2581 } 2589 }
2582 } 2590 }
2583 2591
2584 TEST_F(DiskCacheEntryTest, SimpleCacheReadWriteDestroyBuffer) { 2592 TEST_F(DiskCacheEntryTest, SimpleCacheReadWriteDestroyBuffer) {
2585 // Proving that the test works well with optimistic operations enabled is 2593 // Proving that the test works well with optimistic operations enabled is
2586 // subtle, instead run only in APP_CACHE mode to disable optimistic 2594 // subtle, instead run only in APP_CACHE mode to disable optimistic
2587 // operations. Stream 0 always uses optimistic operations, so the test is not 2595 // operations. Stream 0 always uses optimistic operations, so the test is not
2588 // run on stream 0. 2596 // run on stream 0.
2589 SetCacheType(net::APP_CACHE); 2597 SetCacheType(net::APP_CACHE);
2590 SetSimpleCacheMode(); 2598 SetSimpleCacheMode();
2591 InitCache(); 2599 InitCache();
2592 for (int i = 1; i < disk_cache::kSimpleEntryStreamCount; ++i) { 2600 for (int i = 1; i < disk_cache::kSimpleEntryStreamCount; ++i) {
2593 EXPECT_EQ(net::OK, DoomAllEntries()); 2601 EXPECT_THAT(DoomAllEntries(), IsOk());
2594 ReadWriteDestroyBuffer(i); 2602 ReadWriteDestroyBuffer(i);
2595 } 2603 }
2596 } 2604 }
2597 2605
2598 TEST_F(DiskCacheEntryTest, SimpleCacheDoomEntry) { 2606 TEST_F(DiskCacheEntryTest, SimpleCacheDoomEntry) {
2599 SetSimpleCacheMode(); 2607 SetSimpleCacheMode();
2600 InitCache(); 2608 InitCache();
2601 DoomNormalEntry(); 2609 DoomNormalEntry();
2602 } 2610 }
2603 2611
2604 TEST_F(DiskCacheEntryTest, SimpleCacheDoomEntryNextToOpenEntry) { 2612 TEST_F(DiskCacheEntryTest, SimpleCacheDoomEntryNextToOpenEntry) {
2605 SetSimpleCacheMode(); 2613 SetSimpleCacheMode();
2606 InitCache(); 2614 InitCache();
2607 DoomEntryNextToOpenEntry(); 2615 DoomEntryNextToOpenEntry();
2608 } 2616 }
2609 2617
2610 TEST_F(DiskCacheEntryTest, SimpleCacheDoomedEntry) { 2618 TEST_F(DiskCacheEntryTest, SimpleCacheDoomedEntry) {
2611 SetSimpleCacheMode(); 2619 SetSimpleCacheMode();
2612 InitCache(); 2620 InitCache();
2613 // Stream 2 is excluded because the implementation does not support writing to 2621 // Stream 2 is excluded because the implementation does not support writing to
2614 // it on a doomed entry, if it was previously lazily omitted. 2622 // it on a doomed entry, if it was previously lazily omitted.
2615 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount - 1; ++i) { 2623 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount - 1; ++i) {
2616 EXPECT_EQ(net::OK, DoomAllEntries()); 2624 EXPECT_THAT(DoomAllEntries(), IsOk());
2617 DoomedEntry(i); 2625 DoomedEntry(i);
2618 } 2626 }
2619 } 2627 }
2620 2628
2621 // Creates an entry with corrupted last byte in stream 0. 2629 // Creates an entry with corrupted last byte in stream 0.
2622 // Requires SimpleCacheMode. 2630 // Requires SimpleCacheMode.
2623 bool DiskCacheEntryTest::SimpleCacheMakeBadChecksumEntry(const std::string& key, 2631 bool DiskCacheEntryTest::SimpleCacheMakeBadChecksumEntry(const std::string& key,
2624 int* data_size) { 2632 int* data_size) {
2625 disk_cache::Entry* entry = NULL; 2633 disk_cache::Entry* entry = NULL;
2626 2634
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
2658 SetSimpleCacheMode(); 2666 SetSimpleCacheMode();
2659 InitCache(); 2667 InitCache();
2660 2668
2661 const char key[] = "the first key"; 2669 const char key[] = "the first key";
2662 int size_unused; 2670 int size_unused;
2663 ASSERT_TRUE(SimpleCacheMakeBadChecksumEntry(key, &size_unused)); 2671 ASSERT_TRUE(SimpleCacheMakeBadChecksumEntry(key, &size_unused));
2664 2672
2665 disk_cache::Entry* entry = NULL; 2673 disk_cache::Entry* entry = NULL;
2666 2674
2667 // Open the entry. 2675 // Open the entry.
2668 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 2676 ASSERT_THAT(OpenEntry(key, &entry), IsOk());
2669 ScopedEntryPtr entry_closer(entry); 2677 ScopedEntryPtr entry_closer(entry);
2670 2678
2671 const int kReadBufferSize = 200; 2679 const int kReadBufferSize = 200;
2672 EXPECT_GE(kReadBufferSize, entry->GetDataSize(1)); 2680 EXPECT_GE(kReadBufferSize, entry->GetDataSize(1));
2673 scoped_refptr<net::IOBuffer> read_buffer(new net::IOBuffer(kReadBufferSize)); 2681 scoped_refptr<net::IOBuffer> read_buffer(new net::IOBuffer(kReadBufferSize));
2674 EXPECT_EQ(net::ERR_CACHE_CHECKSUM_MISMATCH, 2682 EXPECT_EQ(net::ERR_CACHE_CHECKSUM_MISMATCH,
2675 ReadData(entry, 1, 0, read_buffer.get(), kReadBufferSize)); 2683 ReadData(entry, 1, 0, read_buffer.get(), kReadBufferSize));
2676 } 2684 }
2677 2685
2678 // Tests that an entry that has had an IO error occur can still be Doomed(). 2686 // Tests that an entry that has had an IO error occur can still be Doomed().
2679 TEST_F(DiskCacheEntryTest, SimpleCacheErrorThenDoom) { 2687 TEST_F(DiskCacheEntryTest, SimpleCacheErrorThenDoom) {
2680 SetSimpleCacheMode(); 2688 SetSimpleCacheMode();
2681 InitCache(); 2689 InitCache();
2682 2690
2683 const char key[] = "the first key"; 2691 const char key[] = "the first key";
2684 int size_unused; 2692 int size_unused;
2685 ASSERT_TRUE(SimpleCacheMakeBadChecksumEntry(key, &size_unused)); 2693 ASSERT_TRUE(SimpleCacheMakeBadChecksumEntry(key, &size_unused));
2686 2694
2687 disk_cache::Entry* entry = NULL; 2695 disk_cache::Entry* entry = NULL;
2688 2696
2689 // Open the entry, forcing an IO error. 2697 // Open the entry, forcing an IO error.
2690 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 2698 ASSERT_THAT(OpenEntry(key, &entry), IsOk());
2691 ScopedEntryPtr entry_closer(entry); 2699 ScopedEntryPtr entry_closer(entry);
2692 2700
2693 const int kReadBufferSize = 200; 2701 const int kReadBufferSize = 200;
2694 EXPECT_GE(kReadBufferSize, entry->GetDataSize(1)); 2702 EXPECT_GE(kReadBufferSize, entry->GetDataSize(1));
2695 scoped_refptr<net::IOBuffer> read_buffer(new net::IOBuffer(kReadBufferSize)); 2703 scoped_refptr<net::IOBuffer> read_buffer(new net::IOBuffer(kReadBufferSize));
2696 EXPECT_EQ(net::ERR_CACHE_CHECKSUM_MISMATCH, 2704 EXPECT_EQ(net::ERR_CACHE_CHECKSUM_MISMATCH,
2697 ReadData(entry, 1, 0, read_buffer.get(), kReadBufferSize)); 2705 ReadData(entry, 1, 0, read_buffer.get(), kReadBufferSize));
2698 2706
2699 entry->Doom(); // Should not crash. 2707 entry->Doom(); // Should not crash.
2700 } 2708 }
2701 2709
2702 bool TruncatePath(const base::FilePath& file_path, int64_t length) { 2710 bool TruncatePath(const base::FilePath& file_path, int64_t length) {
2703 base::File file(file_path, base::File::FLAG_WRITE | base::File::FLAG_OPEN); 2711 base::File file(file_path, base::File::FLAG_WRITE | base::File::FLAG_OPEN);
2704 if (!file.IsValid()) 2712 if (!file.IsValid())
2705 return false; 2713 return false;
2706 return file.SetLength(length); 2714 return file.SetLength(length);
2707 } 2715 }
2708 2716
2709 TEST_F(DiskCacheEntryTest, SimpleCacheNoEOF) { 2717 TEST_F(DiskCacheEntryTest, SimpleCacheNoEOF) {
2710 SetSimpleCacheMode(); 2718 SetSimpleCacheMode();
2711 InitCache(); 2719 InitCache();
2712 2720
2713 const std::string key("the first key"); 2721 const std::string key("the first key");
2714 2722
2715 disk_cache::Entry* entry = NULL; 2723 disk_cache::Entry* entry = NULL;
2716 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 2724 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
2717 disk_cache::Entry* null = NULL; 2725 disk_cache::Entry* null = NULL;
2718 EXPECT_NE(null, entry); 2726 EXPECT_NE(null, entry);
2719 entry->Close(); 2727 entry->Close();
2720 entry = NULL; 2728 entry = NULL;
2721 2729
2722 // Force the entry to flush to disk, so subsequent platform file operations 2730 // Force the entry to flush to disk, so subsequent platform file operations
2723 // succed. 2731 // succed.
2724 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 2732 ASSERT_THAT(OpenEntry(key, &entry), IsOk());
2725 entry->Close(); 2733 entry->Close();
2726 entry = NULL; 2734 entry = NULL;
2727 2735
2728 // Truncate the file such that the length isn't sufficient to have an EOF 2736 // Truncate the file such that the length isn't sufficient to have an EOF
2729 // record. 2737 // record.
2730 int kTruncationBytes = -static_cast<int>(sizeof(disk_cache::SimpleFileEOF)); 2738 int kTruncationBytes = -static_cast<int>(sizeof(disk_cache::SimpleFileEOF));
2731 const base::FilePath entry_path = cache_path_.AppendASCII( 2739 const base::FilePath entry_path = cache_path_.AppendASCII(
2732 disk_cache::simple_util::GetFilenameFromKeyAndFileIndex(key, 0)); 2740 disk_cache::simple_util::GetFilenameFromKeyAndFileIndex(key, 0));
2733 const int64_t invalid_size = disk_cache::simple_util::GetFileSizeFromDataSize( 2741 const int64_t invalid_size = disk_cache::simple_util::GetFileSizeFromDataSize(
2734 key.size(), kTruncationBytes); 2742 key.size(), kTruncationBytes);
2735 EXPECT_TRUE(TruncatePath(entry_path, invalid_size)); 2743 EXPECT_TRUE(TruncatePath(entry_path, invalid_size));
2736 EXPECT_EQ(net::ERR_FAILED, OpenEntry(key, &entry)); 2744 EXPECT_THAT(OpenEntry(key, &entry), IsError(net::ERR_FAILED));
2737 DisableIntegrityCheck(); 2745 DisableIntegrityCheck();
2738 } 2746 }
2739 2747
2740 TEST_F(DiskCacheEntryTest, SimpleCacheNonOptimisticOperationsBasic) { 2748 TEST_F(DiskCacheEntryTest, SimpleCacheNonOptimisticOperationsBasic) {
2741 // Test sequence: 2749 // Test sequence:
2742 // Create, Write, Read, Close. 2750 // Create, Write, Read, Close.
2743 SetCacheType(net::APP_CACHE); // APP_CACHE doesn't use optimistic operations. 2751 SetCacheType(net::APP_CACHE); // APP_CACHE doesn't use optimistic operations.
2744 SetSimpleCacheMode(); 2752 SetSimpleCacheMode();
2745 InitCache(); 2753 InitCache();
2746 disk_cache::Entry* const null_entry = NULL; 2754 disk_cache::Entry* const null_entry = NULL;
2747 2755
2748 disk_cache::Entry* entry = NULL; 2756 disk_cache::Entry* entry = NULL;
2749 EXPECT_EQ(net::OK, CreateEntry("my key", &entry)); 2757 EXPECT_THAT(CreateEntry("my key", &entry), IsOk());
2750 ASSERT_NE(null_entry, entry); 2758 ASSERT_NE(null_entry, entry);
2751 ScopedEntryPtr entry_closer(entry); 2759 ScopedEntryPtr entry_closer(entry);
2752 2760
2753 const int kBufferSize = 10; 2761 const int kBufferSize = 10;
2754 scoped_refptr<net::IOBufferWithSize> write_buffer( 2762 scoped_refptr<net::IOBufferWithSize> write_buffer(
2755 new net::IOBufferWithSize(kBufferSize)); 2763 new net::IOBufferWithSize(kBufferSize));
2756 CacheTestFillBuffer(write_buffer->data(), write_buffer->size(), false); 2764 CacheTestFillBuffer(write_buffer->data(), write_buffer->size(), false);
2757 EXPECT_EQ( 2765 EXPECT_EQ(
2758 write_buffer->size(), 2766 write_buffer->size(),
2759 WriteData(entry, 1, 0, write_buffer.get(), write_buffer->size(), false)); 2767 WriteData(entry, 1, 0, write_buffer.get(), write_buffer->size(), false));
(...skipping 14 matching lines...) Expand all
2774 2782
2775 MessageLoopHelper helper; 2783 MessageLoopHelper helper;
2776 CallbackTest create_callback(&helper, false); 2784 CallbackTest create_callback(&helper, false);
2777 2785
2778 int expected_callback_runs = 0; 2786 int expected_callback_runs = 0;
2779 const int kBufferSize = 10; 2787 const int kBufferSize = 10;
2780 scoped_refptr<net::IOBufferWithSize> write_buffer( 2788 scoped_refptr<net::IOBufferWithSize> write_buffer(
2781 new net::IOBufferWithSize(kBufferSize)); 2789 new net::IOBufferWithSize(kBufferSize));
2782 2790
2783 disk_cache::Entry* entry = NULL; 2791 disk_cache::Entry* entry = NULL;
2784 EXPECT_EQ(net::OK, CreateEntry("my key", &entry)); 2792 EXPECT_THAT(CreateEntry("my key", &entry), IsOk());
2785 ASSERT_NE(null_entry, entry); 2793 ASSERT_NE(null_entry, entry);
2786 ScopedEntryPtr entry_closer(entry); 2794 ScopedEntryPtr entry_closer(entry);
2787 2795
2788 CacheTestFillBuffer(write_buffer->data(), write_buffer->size(), false); 2796 CacheTestFillBuffer(write_buffer->data(), write_buffer->size(), false);
2789 CallbackTest write_callback(&helper, false); 2797 CallbackTest write_callback(&helper, false);
2790 int ret = entry->WriteData( 2798 int ret = entry->WriteData(
2791 1, 2799 1,
2792 0, 2800 0,
2793 write_buffer.get(), 2801 write_buffer.get(),
2794 write_buffer->size(), 2802 write_buffer->size(),
2795 base::Bind(&CallbackTest::Run, base::Unretained(&write_callback)), 2803 base::Bind(&CallbackTest::Run, base::Unretained(&write_callback)),
2796 false); 2804 false);
2797 ASSERT_EQ(net::ERR_IO_PENDING, ret); 2805 ASSERT_THAT(ret, IsError(net::ERR_IO_PENDING));
2798 helper.WaitUntilCacheIoFinished(++expected_callback_runs); 2806 helper.WaitUntilCacheIoFinished(++expected_callback_runs);
2799 } 2807 }
2800 2808
2801 TEST_F(DiskCacheEntryTest, 2809 TEST_F(DiskCacheEntryTest,
2802 SimpleCacheNonOptimisticOperationsBasicsWithoutWaiting) { 2810 SimpleCacheNonOptimisticOperationsBasicsWithoutWaiting) {
2803 // Test sequence: 2811 // Test sequence:
2804 // Create, Write, Read, Close. 2812 // Create, Write, Read, Close.
2805 SetCacheType(net::APP_CACHE); // APP_CACHE doesn't use optimistic operations. 2813 SetCacheType(net::APP_CACHE); // APP_CACHE doesn't use optimistic operations.
2806 SetSimpleCacheMode(); 2814 SetSimpleCacheMode();
2807 InitCache(); 2815 InitCache();
2808 disk_cache::Entry* const null_entry = NULL; 2816 disk_cache::Entry* const null_entry = NULL;
2809 MessageLoopHelper helper; 2817 MessageLoopHelper helper;
2810 2818
2811 disk_cache::Entry* entry = NULL; 2819 disk_cache::Entry* entry = NULL;
2812 // Note that |entry| is only set once CreateEntry() completed which is why we 2820 // Note that |entry| is only set once CreateEntry() completed which is why we
2813 // have to wait (i.e. use the helper CreateEntry() function). 2821 // have to wait (i.e. use the helper CreateEntry() function).
2814 EXPECT_EQ(net::OK, CreateEntry("my key", &entry)); 2822 EXPECT_THAT(CreateEntry("my key", &entry), IsOk());
2815 ASSERT_NE(null_entry, entry); 2823 ASSERT_NE(null_entry, entry);
2816 ScopedEntryPtr entry_closer(entry); 2824 ScopedEntryPtr entry_closer(entry);
2817 2825
2818 const int kBufferSize = 10; 2826 const int kBufferSize = 10;
2819 scoped_refptr<net::IOBufferWithSize> write_buffer( 2827 scoped_refptr<net::IOBufferWithSize> write_buffer(
2820 new net::IOBufferWithSize(kBufferSize)); 2828 new net::IOBufferWithSize(kBufferSize));
2821 CacheTestFillBuffer(write_buffer->data(), write_buffer->size(), false); 2829 CacheTestFillBuffer(write_buffer->data(), write_buffer->size(), false);
2822 CallbackTest write_callback(&helper, false); 2830 CallbackTest write_callback(&helper, false);
2823 int ret = entry->WriteData( 2831 int ret = entry->WriteData(
2824 1, 2832 1,
2825 0, 2833 0,
2826 write_buffer.get(), 2834 write_buffer.get(),
2827 write_buffer->size(), 2835 write_buffer->size(),
2828 base::Bind(&CallbackTest::Run, base::Unretained(&write_callback)), 2836 base::Bind(&CallbackTest::Run, base::Unretained(&write_callback)),
2829 false); 2837 false);
2830 EXPECT_EQ(net::ERR_IO_PENDING, ret); 2838 EXPECT_THAT(ret, IsError(net::ERR_IO_PENDING));
2831 int expected_callback_runs = 1; 2839 int expected_callback_runs = 1;
2832 2840
2833 scoped_refptr<net::IOBufferWithSize> read_buffer( 2841 scoped_refptr<net::IOBufferWithSize> read_buffer(
2834 new net::IOBufferWithSize(kBufferSize)); 2842 new net::IOBufferWithSize(kBufferSize));
2835 CallbackTest read_callback(&helper, false); 2843 CallbackTest read_callback(&helper, false);
2836 ret = entry->ReadData( 2844 ret = entry->ReadData(
2837 1, 2845 1,
2838 0, 2846 0,
2839 read_buffer.get(), 2847 read_buffer.get(),
2840 read_buffer->size(), 2848 read_buffer->size(),
2841 base::Bind(&CallbackTest::Run, base::Unretained(&read_callback))); 2849 base::Bind(&CallbackTest::Run, base::Unretained(&read_callback)));
2842 EXPECT_EQ(net::ERR_IO_PENDING, ret); 2850 EXPECT_THAT(ret, IsError(net::ERR_IO_PENDING));
2843 ++expected_callback_runs; 2851 ++expected_callback_runs;
2844 2852
2845 helper.WaitUntilCacheIoFinished(expected_callback_runs); 2853 helper.WaitUntilCacheIoFinished(expected_callback_runs);
2846 ASSERT_EQ(read_buffer->size(), write_buffer->size()); 2854 ASSERT_EQ(read_buffer->size(), write_buffer->size());
2847 EXPECT_EQ( 2855 EXPECT_EQ(
2848 0, 2856 0,
2849 memcmp(read_buffer->data(), write_buffer->data(), read_buffer->size())); 2857 memcmp(read_buffer->data(), write_buffer->data(), read_buffer->size()));
2850 } 2858 }
2851 2859
2852 TEST_F(DiskCacheEntryTest, SimpleCacheOptimistic) { 2860 TEST_F(DiskCacheEntryTest, SimpleCacheOptimistic) {
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
2988 disk_cache::Entry* entry = NULL; 2996 disk_cache::Entry* entry = NULL;
2989 ASSERT_EQ(net::OK, 2997 ASSERT_EQ(net::OK,
2990 cache_->CreateEntry(key, &entry, net::CompletionCallback())); 2998 cache_->CreateEntry(key, &entry, net::CompletionCallback()));
2991 EXPECT_NE(null, entry); 2999 EXPECT_NE(null, entry);
2992 entry->Close(); 3000 entry->Close();
2993 3001
2994 net::TestCompletionCallback cb; 3002 net::TestCompletionCallback cb;
2995 disk_cache::Entry* entry2 = NULL; 3003 disk_cache::Entry* entry2 = NULL;
2996 ASSERT_EQ(net::ERR_IO_PENDING, 3004 ASSERT_EQ(net::ERR_IO_PENDING,
2997 cache_->OpenEntry(key, &entry2, cb.callback())); 3005 cache_->OpenEntry(key, &entry2, cb.callback()));
2998 ASSERT_EQ(net::OK, cb.GetResult(net::ERR_IO_PENDING)); 3006 ASSERT_THAT(cb.GetResult(net::ERR_IO_PENDING), IsOk());
2999 ScopedEntryPtr entry_closer(entry2); 3007 ScopedEntryPtr entry_closer(entry2);
3000 3008
3001 EXPECT_NE(null, entry2); 3009 EXPECT_NE(null, entry2);
3002 EXPECT_EQ(entry, entry2); 3010 EXPECT_EQ(entry, entry2);
3003 3011
3004 // Check that we are not leaking. 3012 // Check that we are not leaking.
3005 EXPECT_TRUE( 3013 EXPECT_TRUE(
3006 static_cast<disk_cache::SimpleEntryImpl*>(entry2)->HasOneRef()); 3014 static_cast<disk_cache::SimpleEntryImpl*>(entry2)->HasOneRef());
3007 } 3015 }
3008 3016
(...skipping 14 matching lines...) Expand all
3023 ASSERT_EQ(net::OK, 3031 ASSERT_EQ(net::OK,
3024 cache_->CreateEntry(key, &entry, net::CompletionCallback())); 3032 cache_->CreateEntry(key, &entry, net::CompletionCallback()));
3025 EXPECT_NE(null, entry); 3033 EXPECT_NE(null, entry);
3026 entry->Close(); 3034 entry->Close();
3027 3035
3028 // Lets do a Write so we block until both the Close and the Write 3036 // Lets do a Write so we block until both the Close and the Write
3029 // operation finishes. Write must fail since we are writing in a closed entry. 3037 // operation finishes. Write must fail since we are writing in a closed entry.
3030 EXPECT_EQ( 3038 EXPECT_EQ(
3031 net::ERR_IO_PENDING, 3039 net::ERR_IO_PENDING,
3032 entry->WriteData(1, 0, buffer1.get(), kSize1, cb.callback(), false)); 3040 entry->WriteData(1, 0, buffer1.get(), kSize1, cb.callback(), false));
3033 EXPECT_EQ(net::ERR_FAILED, cb.GetResult(net::ERR_IO_PENDING)); 3041 EXPECT_THAT(cb.GetResult(net::ERR_IO_PENDING), IsError(net::ERR_FAILED));
3034 3042
3035 // Finish running the pending tasks so that we fully complete the close 3043 // Finish running the pending tasks so that we fully complete the close
3036 // operation and destroy the entry object. 3044 // operation and destroy the entry object.
3037 base::RunLoop().RunUntilIdle(); 3045 base::RunLoop().RunUntilIdle();
3038 3046
3039 // At this point the |entry| must have been destroyed, and called 3047 // At this point the |entry| must have been destroyed, and called
3040 // RemoveSelfFromBackend(). 3048 // RemoveSelfFromBackend().
3041 disk_cache::Entry* entry2 = NULL; 3049 disk_cache::Entry* entry2 = NULL;
3042 ASSERT_EQ(net::ERR_IO_PENDING, 3050 ASSERT_EQ(net::ERR_IO_PENDING,
3043 cache_->OpenEntry(key, &entry2, cb.callback())); 3051 cache_->OpenEntry(key, &entry2, cb.callback()));
3044 ASSERT_EQ(net::OK, cb.GetResult(net::ERR_IO_PENDING)); 3052 ASSERT_THAT(cb.GetResult(net::ERR_IO_PENDING), IsOk());
3045 EXPECT_NE(null, entry2); 3053 EXPECT_NE(null, entry2);
3046 3054
3047 disk_cache::Entry* entry3 = NULL; 3055 disk_cache::Entry* entry3 = NULL;
3048 ASSERT_EQ(net::ERR_IO_PENDING, 3056 ASSERT_EQ(net::ERR_IO_PENDING,
3049 cache_->OpenEntry(key, &entry3, cb.callback())); 3057 cache_->OpenEntry(key, &entry3, cb.callback()));
3050 ASSERT_EQ(net::OK, cb.GetResult(net::ERR_IO_PENDING)); 3058 ASSERT_THAT(cb.GetResult(net::ERR_IO_PENDING), IsOk());
3051 EXPECT_NE(null, entry3); 3059 EXPECT_NE(null, entry3);
3052 EXPECT_EQ(entry2, entry3); 3060 EXPECT_EQ(entry2, entry3);
3053 entry3->Close(); 3061 entry3->Close();
3054 3062
3055 // The previous Close doesn't actually closes the entry since we opened it 3063 // The previous Close doesn't actually closes the entry since we opened it
3056 // twice, so the next Write operation must succeed and it must be able to 3064 // twice, so the next Write operation must succeed and it must be able to
3057 // perform it optimistically, since there is no operation running on this 3065 // perform it optimistically, since there is no operation running on this
3058 // entry. 3066 // entry.
3059 EXPECT_EQ(kSize1, 3067 EXPECT_EQ(kSize1,
3060 entry2->WriteData( 3068 entry2->WriteData(
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
3190 net::TestCompletionCallback cb; 3198 net::TestCompletionCallback cb;
3191 const int kSize1 = 10; 3199 const int kSize1 = 10;
3192 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); 3200 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1));
3193 CacheTestFillBuffer(buffer1->data(), kSize1, false); 3201 CacheTestFillBuffer(buffer1->data(), kSize1, false);
3194 disk_cache::Entry* entry = NULL; 3202 disk_cache::Entry* entry = NULL;
3195 3203
3196 ASSERT_EQ(net::OK, 3204 ASSERT_EQ(net::OK,
3197 cache_->CreateEntry(key, &entry, net::CompletionCallback())); 3205 cache_->CreateEntry(key, &entry, net::CompletionCallback()));
3198 EXPECT_NE(null, entry); 3206 EXPECT_NE(null, entry);
3199 3207
3200 EXPECT_EQ(net::ERR_IO_PENDING, cache_->DoomEntry(key, cb.callback())); 3208 EXPECT_THAT(cache_->DoomEntry(key, cb.callback()),
3201 EXPECT_EQ(net::OK, cb.GetResult(net::ERR_IO_PENDING)); 3209 IsError(net::ERR_IO_PENDING));
3210 EXPECT_THAT(cb.GetResult(net::ERR_IO_PENDING), IsOk());
3202 3211
3203 EXPECT_EQ( 3212 EXPECT_EQ(
3204 kSize1, 3213 kSize1,
3205 entry->WriteData(0, 0, buffer1.get(), kSize1, cb.callback(), false)); 3214 entry->WriteData(0, 0, buffer1.get(), kSize1, cb.callback(), false));
3206 3215
3207 entry->Close(); 3216 entry->Close();
3208 3217
3209 // Finish running the pending tasks so that we fully complete the close 3218 // Finish running the pending tasks so that we fully complete the close
3210 // operation and destroy the entry object. 3219 // operation and destroy the entry object.
3211 base::RunLoop().RunUntilIdle(); 3220 base::RunLoop().RunUntilIdle();
(...skipping 27 matching lines...) Expand all
3239 3248
3240 net::TestCompletionCallback doom_callback; 3249 net::TestCompletionCallback doom_callback;
3241 EXPECT_EQ(net::ERR_IO_PENDING, 3250 EXPECT_EQ(net::ERR_IO_PENDING,
3242 cache_->DoomEntry(key, doom_callback.callback())); 3251 cache_->DoomEntry(key, doom_callback.callback()));
3243 3252
3244 disk_cache::Entry* entry2 = NULL; 3253 disk_cache::Entry* entry2 = NULL;
3245 ASSERT_EQ(net::OK, 3254 ASSERT_EQ(net::OK,
3246 create_callback.GetResult( 3255 create_callback.GetResult(
3247 cache_->CreateEntry(key, &entry2, create_callback.callback()))); 3256 cache_->CreateEntry(key, &entry2, create_callback.callback())));
3248 ScopedEntryPtr entry2_closer(entry2); 3257 ScopedEntryPtr entry2_closer(entry2);
3249 EXPECT_EQ(net::OK, doom_callback.GetResult(net::ERR_IO_PENDING)); 3258 EXPECT_THAT(doom_callback.GetResult(net::ERR_IO_PENDING), IsOk());
3250 } 3259 }
3251 3260
3252 TEST_F(DiskCacheEntryTest, SimpleCacheDoomDoom) { 3261 TEST_F(DiskCacheEntryTest, SimpleCacheDoomDoom) {
3253 // Test sequence: 3262 // Test sequence:
3254 // Create, Doom, Create, Doom (1st entry), Open. 3263 // Create, Doom, Create, Doom (1st entry), Open.
3255 SetSimpleCacheMode(); 3264 SetSimpleCacheMode();
3256 InitCache(); 3265 InitCache();
3257 disk_cache::Entry* null = NULL; 3266 disk_cache::Entry* null = NULL;
3258 3267
3259 const char key[] = "the first key"; 3268 const char key[] = "the first key";
3260 3269
3261 disk_cache::Entry* entry1 = NULL; 3270 disk_cache::Entry* entry1 = NULL;
3262 ASSERT_EQ(net::OK, CreateEntry(key, &entry1)); 3271 ASSERT_THAT(CreateEntry(key, &entry1), IsOk());
3263 ScopedEntryPtr entry1_closer(entry1); 3272 ScopedEntryPtr entry1_closer(entry1);
3264 EXPECT_NE(null, entry1); 3273 EXPECT_NE(null, entry1);
3265 3274
3266 EXPECT_EQ(net::OK, DoomEntry(key)); 3275 EXPECT_THAT(DoomEntry(key), IsOk());
3267 3276
3268 disk_cache::Entry* entry2 = NULL; 3277 disk_cache::Entry* entry2 = NULL;
3269 ASSERT_EQ(net::OK, CreateEntry(key, &entry2)); 3278 ASSERT_THAT(CreateEntry(key, &entry2), IsOk());
3270 ScopedEntryPtr entry2_closer(entry2); 3279 ScopedEntryPtr entry2_closer(entry2);
3271 EXPECT_NE(null, entry2); 3280 EXPECT_NE(null, entry2);
3272 3281
3273 // Redundantly dooming entry1 should not delete entry2. 3282 // Redundantly dooming entry1 should not delete entry2.
3274 disk_cache::SimpleEntryImpl* simple_entry1 = 3283 disk_cache::SimpleEntryImpl* simple_entry1 =
3275 static_cast<disk_cache::SimpleEntryImpl*>(entry1); 3284 static_cast<disk_cache::SimpleEntryImpl*>(entry1);
3276 net::TestCompletionCallback cb; 3285 net::TestCompletionCallback cb;
3277 EXPECT_EQ(net::OK, 3286 EXPECT_EQ(net::OK,
3278 cb.GetResult(simple_entry1->DoomEntry(cb.callback()))); 3287 cb.GetResult(simple_entry1->DoomEntry(cb.callback())));
3279 3288
3280 disk_cache::Entry* entry3 = NULL; 3289 disk_cache::Entry* entry3 = NULL;
3281 ASSERT_EQ(net::OK, OpenEntry(key, &entry3)); 3290 ASSERT_THAT(OpenEntry(key, &entry3), IsOk());
3282 ScopedEntryPtr entry3_closer(entry3); 3291 ScopedEntryPtr entry3_closer(entry3);
3283 EXPECT_NE(null, entry3); 3292 EXPECT_NE(null, entry3);
3284 } 3293 }
3285 3294
3286 TEST_F(DiskCacheEntryTest, SimpleCacheDoomCreateDoom) { 3295 TEST_F(DiskCacheEntryTest, SimpleCacheDoomCreateDoom) {
3287 // Test sequence: 3296 // Test sequence:
3288 // Create, Doom, Create, Doom. 3297 // Create, Doom, Create, Doom.
3289 SetSimpleCacheMode(); 3298 SetSimpleCacheMode();
3290 InitCache(); 3299 InitCache();
3291 3300
3292 disk_cache::Entry* null = NULL; 3301 disk_cache::Entry* null = NULL;
3293 3302
3294 const char key[] = "the first key"; 3303 const char key[] = "the first key";
3295 3304
3296 disk_cache::Entry* entry1 = NULL; 3305 disk_cache::Entry* entry1 = NULL;
3297 ASSERT_EQ(net::OK, CreateEntry(key, &entry1)); 3306 ASSERT_THAT(CreateEntry(key, &entry1), IsOk());
3298 ScopedEntryPtr entry1_closer(entry1); 3307 ScopedEntryPtr entry1_closer(entry1);
3299 EXPECT_NE(null, entry1); 3308 EXPECT_NE(null, entry1);
3300 3309
3301 entry1->Doom(); 3310 entry1->Doom();
3302 3311
3303 disk_cache::Entry* entry2 = NULL; 3312 disk_cache::Entry* entry2 = NULL;
3304 ASSERT_EQ(net::OK, CreateEntry(key, &entry2)); 3313 ASSERT_THAT(CreateEntry(key, &entry2), IsOk());
3305 ScopedEntryPtr entry2_closer(entry2); 3314 ScopedEntryPtr entry2_closer(entry2);
3306 EXPECT_NE(null, entry2); 3315 EXPECT_NE(null, entry2);
3307 3316
3308 entry2->Doom(); 3317 entry2->Doom();
3309 3318
3310 // This test passes if it doesn't crash. 3319 // This test passes if it doesn't crash.
3311 } 3320 }
3312 3321
3313 TEST_F(DiskCacheEntryTest, SimpleCacheDoomCloseCreateCloseOpen) { 3322 TEST_F(DiskCacheEntryTest, SimpleCacheDoomCloseCreateCloseOpen) {
3314 // Test sequence: Create, Doom, Close, Create, Close, Open. 3323 // Test sequence: Create, Doom, Close, Create, Close, Open.
3315 SetSimpleCacheMode(); 3324 SetSimpleCacheMode();
3316 InitCache(); 3325 InitCache();
3317 3326
3318 disk_cache::Entry* null = NULL; 3327 disk_cache::Entry* null = NULL;
3319 3328
3320 const char key[] = "this is a key"; 3329 const char key[] = "this is a key";
3321 3330
3322 disk_cache::Entry* entry1 = NULL; 3331 disk_cache::Entry* entry1 = NULL;
3323 ASSERT_EQ(net::OK, CreateEntry(key, &entry1)); 3332 ASSERT_THAT(CreateEntry(key, &entry1), IsOk());
3324 ScopedEntryPtr entry1_closer(entry1); 3333 ScopedEntryPtr entry1_closer(entry1);
3325 EXPECT_NE(null, entry1); 3334 EXPECT_NE(null, entry1);
3326 3335
3327 entry1->Doom(); 3336 entry1->Doom();
3328 entry1_closer.reset(); 3337 entry1_closer.reset();
3329 entry1 = NULL; 3338 entry1 = NULL;
3330 3339
3331 disk_cache::Entry* entry2 = NULL; 3340 disk_cache::Entry* entry2 = NULL;
3332 ASSERT_EQ(net::OK, CreateEntry(key, &entry2)); 3341 ASSERT_THAT(CreateEntry(key, &entry2), IsOk());
3333 ScopedEntryPtr entry2_closer(entry2); 3342 ScopedEntryPtr entry2_closer(entry2);
3334 EXPECT_NE(null, entry2); 3343 EXPECT_NE(null, entry2);
3335 3344
3336 entry2_closer.reset(); 3345 entry2_closer.reset();
3337 entry2 = NULL; 3346 entry2 = NULL;
3338 3347
3339 disk_cache::Entry* entry3 = NULL; 3348 disk_cache::Entry* entry3 = NULL;
3340 ASSERT_EQ(net::OK, OpenEntry(key, &entry3)); 3349 ASSERT_THAT(OpenEntry(key, &entry3), IsOk());
3341 ScopedEntryPtr entry3_closer(entry3); 3350 ScopedEntryPtr entry3_closer(entry3);
3342 EXPECT_NE(null, entry3); 3351 EXPECT_NE(null, entry3);
3343 } 3352 }
3344 3353
3345 // Checks that an optimistic Create would fail later on a racing Open. 3354 // Checks that an optimistic Create would fail later on a racing Open.
3346 TEST_F(DiskCacheEntryTest, SimpleCacheOptimisticCreateFailsOnOpen) { 3355 TEST_F(DiskCacheEntryTest, SimpleCacheOptimisticCreateFailsOnOpen) {
3347 SetSimpleCacheMode(); 3356 SetSimpleCacheMode();
3348 InitCache(); 3357 InitCache();
3349 3358
3350 // Create a corrupt file in place of a future entry. Optimistic create should 3359 // Create a corrupt file in place of a future entry. Optimistic create should
3351 // initially succeed, but realize later that creation failed. 3360 // initially succeed, but realize later that creation failed.
3352 const std::string key = "the key"; 3361 const std::string key = "the key";
3353 net::TestCompletionCallback cb; 3362 net::TestCompletionCallback cb;
3354 disk_cache::Entry* entry = NULL; 3363 disk_cache::Entry* entry = NULL;
3355 disk_cache::Entry* entry2 = NULL; 3364 disk_cache::Entry* entry2 = NULL;
3356 3365
3357 EXPECT_TRUE(disk_cache::simple_util::CreateCorruptFileForTests( 3366 EXPECT_TRUE(disk_cache::simple_util::CreateCorruptFileForTests(
3358 key, cache_path_)); 3367 key, cache_path_));
3359 EXPECT_EQ(net::OK, cache_->CreateEntry(key, &entry, cb.callback())); 3368 EXPECT_THAT(cache_->CreateEntry(key, &entry, cb.callback()), IsOk());
3360 ASSERT_TRUE(entry); 3369 ASSERT_TRUE(entry);
3361 ScopedEntryPtr entry_closer(entry); 3370 ScopedEntryPtr entry_closer(entry);
3362 ASSERT_NE(net::OK, OpenEntry(key, &entry2)); 3371 ASSERT_NE(net::OK, OpenEntry(key, &entry2));
3363 3372
3364 // Check that we are not leaking. 3373 // Check that we are not leaking.
3365 EXPECT_TRUE( 3374 EXPECT_TRUE(
3366 static_cast<disk_cache::SimpleEntryImpl*>(entry)->HasOneRef()); 3375 static_cast<disk_cache::SimpleEntryImpl*>(entry)->HasOneRef());
3367 3376
3368 DisableIntegrityCheck(); 3377 DisableIntegrityCheck();
3369 } 3378 }
3370 3379
3371 // Tests that old entries are evicted while new entries remain in the index. 3380 // Tests that old entries are evicted while new entries remain in the index.
3372 // This test relies on non-mandatory properties of the simple Cache Backend: 3381 // This test relies on non-mandatory properties of the simple Cache Backend:
3373 // LRU eviction, specific values of high-watermark and low-watermark etc. 3382 // LRU eviction, specific values of high-watermark and low-watermark etc.
3374 // When changing the eviction algorithm, the test will have to be re-engineered. 3383 // When changing the eviction algorithm, the test will have to be re-engineered.
3375 TEST_F(DiskCacheEntryTest, SimpleCacheEvictOldEntries) { 3384 TEST_F(DiskCacheEntryTest, SimpleCacheEvictOldEntries) {
3376 const int kMaxSize = 200 * 1024; 3385 const int kMaxSize = 200 * 1024;
3377 const int kWriteSize = kMaxSize / 10; 3386 const int kWriteSize = kMaxSize / 10;
3378 const int kNumExtraEntries = 12; 3387 const int kNumExtraEntries = 12;
3379 SetSimpleCacheMode(); 3388 SetSimpleCacheMode();
3380 SetMaxSize(kMaxSize); 3389 SetMaxSize(kMaxSize);
3381 InitCache(); 3390 InitCache();
3382 3391
3383 std::string key1("the first key"); 3392 std::string key1("the first key");
3384 disk_cache::Entry* entry; 3393 disk_cache::Entry* entry;
3385 ASSERT_EQ(net::OK, CreateEntry(key1, &entry)); 3394 ASSERT_THAT(CreateEntry(key1, &entry), IsOk());
3386 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kWriteSize)); 3395 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kWriteSize));
3387 CacheTestFillBuffer(buffer->data(), kWriteSize, false); 3396 CacheTestFillBuffer(buffer->data(), kWriteSize, false);
3388 EXPECT_EQ(kWriteSize, 3397 EXPECT_EQ(kWriteSize,
3389 WriteData(entry, 1, 0, buffer.get(), kWriteSize, false)); 3398 WriteData(entry, 1, 0, buffer.get(), kWriteSize, false));
3390 entry->Close(); 3399 entry->Close();
3391 AddDelay(); 3400 AddDelay();
3392 3401
3393 std::string key2("the key prefix"); 3402 std::string key2("the key prefix");
3394 for (int i = 0; i < kNumExtraEntries; i++) { 3403 for (int i = 0; i < kNumExtraEntries; i++) {
3395 if (i == kNumExtraEntries - 2) { 3404 if (i == kNumExtraEntries - 2) {
3396 // Create a distinct timestamp for the last two entries. These entries 3405 // Create a distinct timestamp for the last two entries. These entries
3397 // will be checked for outliving the eviction. 3406 // will be checked for outliving the eviction.
3398 AddDelay(); 3407 AddDelay();
3399 } 3408 }
3400 ASSERT_EQ(net::OK, CreateEntry(key2 + base::IntToString(i), &entry)); 3409 ASSERT_THAT(CreateEntry(key2 + base::IntToString(i), &entry), IsOk());
3401 ScopedEntryPtr entry_closer(entry); 3410 ScopedEntryPtr entry_closer(entry);
3402 EXPECT_EQ(kWriteSize, 3411 EXPECT_EQ(kWriteSize,
3403 WriteData(entry, 1, 0, buffer.get(), kWriteSize, false)); 3412 WriteData(entry, 1, 0, buffer.get(), kWriteSize, false));
3404 } 3413 }
3405 3414
3406 // TODO(pasko): Find a way to wait for the eviction task(s) to finish by using 3415 // TODO(pasko): Find a way to wait for the eviction task(s) to finish by using
3407 // the internal knowledge about |SimpleBackendImpl|. 3416 // the internal knowledge about |SimpleBackendImpl|.
3408 ASSERT_NE(net::OK, OpenEntry(key1, &entry)) 3417 ASSERT_NE(net::OK, OpenEntry(key1, &entry))
3409 << "Should have evicted the old entry"; 3418 << "Should have evicted the old entry";
3410 for (int i = 0; i < 2; i++) { 3419 for (int i = 0; i < 2; i++) {
(...skipping 14 matching lines...) Expand all
3425 SetSimpleCacheMode(); 3434 SetSimpleCacheMode();
3426 InitCache(); 3435 InitCache();
3427 3436
3428 const char key[] = "the first key"; 3437 const char key[] = "the first key";
3429 3438
3430 const int kBufferSize = 1024; 3439 const int kBufferSize = 1024;
3431 scoped_refptr<net::IOBuffer> write_buffer(new net::IOBuffer(kBufferSize)); 3440 scoped_refptr<net::IOBuffer> write_buffer(new net::IOBuffer(kBufferSize));
3432 CacheTestFillBuffer(write_buffer->data(), kBufferSize, false); 3441 CacheTestFillBuffer(write_buffer->data(), kBufferSize, false);
3433 3442
3434 disk_cache::Entry* entry = NULL; 3443 disk_cache::Entry* entry = NULL;
3435 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 3444 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
3436 3445
3437 EXPECT_EQ(kBufferSize, 3446 EXPECT_EQ(kBufferSize,
3438 WriteData(entry, 1, 0, write_buffer.get(), kBufferSize, false)); 3447 WriteData(entry, 1, 0, write_buffer.get(), kBufferSize, false));
3439 entry->Close(); 3448 entry->Close();
3440 entry = NULL; 3449 entry = NULL;
3441 3450
3442 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 3451 ASSERT_THAT(OpenEntry(key, &entry), IsOk());
3443 ScopedEntryPtr entry_closer(entry); 3452 ScopedEntryPtr entry_closer(entry);
3444 3453
3445 MessageLoopHelper helper; 3454 MessageLoopHelper helper;
3446 int expected = 0; 3455 int expected = 0;
3447 3456
3448 // Make a short read. 3457 // Make a short read.
3449 const int kReadBufferSize = 512; 3458 const int kReadBufferSize = 512;
3450 scoped_refptr<net::IOBuffer> read_buffer(new net::IOBuffer(kReadBufferSize)); 3459 scoped_refptr<net::IOBuffer> read_buffer(new net::IOBuffer(kReadBufferSize));
3451 CallbackTest read_callback(&helper, false); 3460 CallbackTest read_callback(&helper, false);
3452 EXPECT_EQ(net::ERR_IO_PENDING, 3461 EXPECT_EQ(net::ERR_IO_PENDING,
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
3538 3547
3539 // Assume the index is not initialized, which is likely, since we are blocking 3548 // Assume the index is not initialized, which is likely, since we are blocking
3540 // the IO thread from executing the index finalization step. 3549 // the IO thread from executing the index finalization step.
3541 disk_cache::Entry* entry1; 3550 disk_cache::Entry* entry1;
3542 net::TestCompletionCallback cb1; 3551 net::TestCompletionCallback cb1;
3543 disk_cache::Entry* entry2; 3552 disk_cache::Entry* entry2;
3544 net::TestCompletionCallback cb2; 3553 net::TestCompletionCallback cb2;
3545 int rv1 = cache_->OpenEntry("key", &entry1, cb1.callback()); 3554 int rv1 = cache_->OpenEntry("key", &entry1, cb1.callback());
3546 int rv2 = cache_->CreateEntry("key", &entry2, cb2.callback()); 3555 int rv2 = cache_->CreateEntry("key", &entry2, cb2.callback());
3547 3556
3548 EXPECT_EQ(net::ERR_FAILED, cb1.GetResult(rv1)); 3557 EXPECT_THAT(cb1.GetResult(rv1), IsError(net::ERR_FAILED));
3549 ASSERT_EQ(net::OK, cb2.GetResult(rv2)); 3558 ASSERT_THAT(cb2.GetResult(rv2), IsOk());
3550 entry2->Close(); 3559 entry2->Close();
3551 } 3560 }
3552 3561
3553 // Checking one more scenario of overlapped reading of a bad entry. 3562 // Checking one more scenario of overlapped reading of a bad entry.
3554 // Differs from the |SimpleCacheMultipleReadersCheckCRC| only by the order of 3563 // Differs from the |SimpleCacheMultipleReadersCheckCRC| only by the order of
3555 // last two reads. 3564 // last two reads.
3556 TEST_F(DiskCacheEntryTest, SimpleCacheMultipleReadersCheckCRC2) { 3565 TEST_F(DiskCacheEntryTest, SimpleCacheMultipleReadersCheckCRC2) {
3557 SetSimpleCacheMode(); 3566 SetSimpleCacheMode();
3558 InitCache(); 3567 InitCache();
3559 3568
3560 const char key[] = "key"; 3569 const char key[] = "key";
3561 int size; 3570 int size;
3562 ASSERT_TRUE(SimpleCacheMakeBadChecksumEntry(key, &size)); 3571 ASSERT_TRUE(SimpleCacheMakeBadChecksumEntry(key, &size));
3563 3572
3564 scoped_refptr<net::IOBuffer> read_buffer1(new net::IOBuffer(size)); 3573 scoped_refptr<net::IOBuffer> read_buffer1(new net::IOBuffer(size));
3565 scoped_refptr<net::IOBuffer> read_buffer2(new net::IOBuffer(size)); 3574 scoped_refptr<net::IOBuffer> read_buffer2(new net::IOBuffer(size));
3566 3575
3567 // Advance the first reader a little. 3576 // Advance the first reader a little.
3568 disk_cache::Entry* entry = NULL; 3577 disk_cache::Entry* entry = NULL;
3569 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 3578 ASSERT_THAT(OpenEntry(key, &entry), IsOk());
3570 ScopedEntryPtr entry_closer(entry); 3579 ScopedEntryPtr entry_closer(entry);
3571 EXPECT_EQ(1, ReadData(entry, 1, 0, read_buffer1.get(), 1)); 3580 EXPECT_EQ(1, ReadData(entry, 1, 0, read_buffer1.get(), 1));
3572 3581
3573 // Advance the 2nd reader by the same amount. 3582 // Advance the 2nd reader by the same amount.
3574 disk_cache::Entry* entry2 = NULL; 3583 disk_cache::Entry* entry2 = NULL;
3575 EXPECT_EQ(net::OK, OpenEntry(key, &entry2)); 3584 EXPECT_THAT(OpenEntry(key, &entry2), IsOk());
3576 ScopedEntryPtr entry2_closer(entry2); 3585 ScopedEntryPtr entry2_closer(entry2);
3577 EXPECT_EQ(1, ReadData(entry2, 1, 0, read_buffer2.get(), 1)); 3586 EXPECT_EQ(1, ReadData(entry2, 1, 0, read_buffer2.get(), 1));
3578 3587
3579 // Continue reading 1st. 3588 // Continue reading 1st.
3580 EXPECT_GT(0, ReadData(entry, 1, 1, read_buffer1.get(), size)); 3589 EXPECT_GT(0, ReadData(entry, 1, 1, read_buffer1.get(), size));
3581 3590
3582 // This read should fail as well because we have previous read failures. 3591 // This read should fail as well because we have previous read failures.
3583 EXPECT_GT(0, ReadData(entry2, 1, 1, read_buffer2.get(), 1)); 3592 EXPECT_GT(0, ReadData(entry2, 1, 1, read_buffer2.get(), 1));
3584 DisableIntegrityCheck(); 3593 DisableIntegrityCheck();
3585 } 3594 }
3586 3595
3587 // Test if we can sequentially read each subset of the data until all the data 3596 // Test if we can sequentially read each subset of the data until all the data
3588 // is read, then the CRC is calculated correctly and the reads are successful. 3597 // is read, then the CRC is calculated correctly and the reads are successful.
3589 TEST_F(DiskCacheEntryTest, SimpleCacheReadCombineCRC) { 3598 TEST_F(DiskCacheEntryTest, SimpleCacheReadCombineCRC) {
3590 // Test sequence: 3599 // Test sequence:
3591 // Create, Write, Read (first half of data), Read (second half of data), 3600 // Create, Write, Read (first half of data), Read (second half of data),
3592 // Close. 3601 // Close.
3593 SetSimpleCacheMode(); 3602 SetSimpleCacheMode();
3594 InitCache(); 3603 InitCache();
3595 disk_cache::Entry* null = NULL; 3604 disk_cache::Entry* null = NULL;
3596 const char key[] = "the first key"; 3605 const char key[] = "the first key";
3597 3606
3598 const int kHalfSize = 200; 3607 const int kHalfSize = 200;
3599 const int kSize = 2 * kHalfSize; 3608 const int kSize = 2 * kHalfSize;
3600 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize)); 3609 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize));
3601 CacheTestFillBuffer(buffer1->data(), kSize, false); 3610 CacheTestFillBuffer(buffer1->data(), kSize, false);
3602 disk_cache::Entry* entry = NULL; 3611 disk_cache::Entry* entry = NULL;
3603 3612
3604 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 3613 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
3605 EXPECT_NE(null, entry); 3614 EXPECT_NE(null, entry);
3606 3615
3607 EXPECT_EQ(kSize, WriteData(entry, 1, 0, buffer1.get(), kSize, false)); 3616 EXPECT_EQ(kSize, WriteData(entry, 1, 0, buffer1.get(), kSize, false));
3608 entry->Close(); 3617 entry->Close();
3609 3618
3610 disk_cache::Entry* entry2 = NULL; 3619 disk_cache::Entry* entry2 = NULL;
3611 ASSERT_EQ(net::OK, OpenEntry(key, &entry2)); 3620 ASSERT_THAT(OpenEntry(key, &entry2), IsOk());
3612 EXPECT_EQ(entry, entry2); 3621 EXPECT_EQ(entry, entry2);
3613 3622
3614 // Read the first half of the data. 3623 // Read the first half of the data.
3615 int offset = 0; 3624 int offset = 0;
3616 int buf_len = kHalfSize; 3625 int buf_len = kHalfSize;
3617 scoped_refptr<net::IOBuffer> buffer1_read1(new net::IOBuffer(buf_len)); 3626 scoped_refptr<net::IOBuffer> buffer1_read1(new net::IOBuffer(buf_len));
3618 EXPECT_EQ(buf_len, ReadData(entry2, 1, offset, buffer1_read1.get(), buf_len)); 3627 EXPECT_EQ(buf_len, ReadData(entry2, 1, offset, buffer1_read1.get(), buf_len));
3619 EXPECT_EQ(0, memcmp(buffer1->data(), buffer1_read1->data(), buf_len)); 3628 EXPECT_EQ(0, memcmp(buffer1->data(), buffer1_read1->data(), buf_len));
3620 3629
3621 // Read the second half of the data. 3630 // Read the second half of the data.
(...skipping 25 matching lines...) Expand all
3647 3656
3648 const int kHalfSize = 200; 3657 const int kHalfSize = 200;
3649 const int kSize = 2 * kHalfSize; 3658 const int kSize = 2 * kHalfSize;
3650 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize)); 3659 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize));
3651 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize)); 3660 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize));
3652 CacheTestFillBuffer(buffer1->data(), kSize, false); 3661 CacheTestFillBuffer(buffer1->data(), kSize, false);
3653 char* buffer1_data = buffer1->data() + kHalfSize; 3662 char* buffer1_data = buffer1->data() + kHalfSize;
3654 memcpy(buffer2->data(), buffer1_data, kHalfSize); 3663 memcpy(buffer2->data(), buffer1_data, kHalfSize);
3655 3664
3656 disk_cache::Entry* entry = NULL; 3665 disk_cache::Entry* entry = NULL;
3657 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 3666 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
3658 entry->Close(); 3667 entry->Close();
3659 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount; ++i) { 3668 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount; ++i) {
3660 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 3669 ASSERT_THAT(OpenEntry(key, &entry), IsOk());
3661 EXPECT_NE(null, entry); 3670 EXPECT_NE(null, entry);
3662 3671
3663 int offset = kHalfSize; 3672 int offset = kHalfSize;
3664 int buf_len = kHalfSize; 3673 int buf_len = kHalfSize;
3665 3674
3666 EXPECT_EQ(buf_len, 3675 EXPECT_EQ(buf_len,
3667 WriteData(entry, i, offset, buffer2.get(), buf_len, false)); 3676 WriteData(entry, i, offset, buffer2.get(), buf_len, false));
3668 offset = 0; 3677 offset = 0;
3669 buf_len = kHalfSize; 3678 buf_len = kHalfSize;
3670 EXPECT_EQ(buf_len, 3679 EXPECT_EQ(buf_len,
3671 WriteData(entry, i, offset, buffer1.get(), buf_len, false)); 3680 WriteData(entry, i, offset, buffer1.get(), buf_len, false));
3672 entry->Close(); 3681 entry->Close();
3673 3682
3674 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 3683 ASSERT_THAT(OpenEntry(key, &entry), IsOk());
3675 3684
3676 scoped_refptr<net::IOBuffer> buffer1_read1(new net::IOBuffer(kSize)); 3685 scoped_refptr<net::IOBuffer> buffer1_read1(new net::IOBuffer(kSize));
3677 EXPECT_EQ(kSize, ReadData(entry, i, 0, buffer1_read1.get(), kSize)); 3686 EXPECT_EQ(kSize, ReadData(entry, i, 0, buffer1_read1.get(), kSize));
3678 EXPECT_EQ(0, memcmp(buffer1->data(), buffer1_read1->data(), kSize)); 3687 EXPECT_EQ(0, memcmp(buffer1->data(), buffer1_read1->data(), kSize));
3679 // Check that we are not leaking. 3688 // Check that we are not leaking.
3680 ASSERT_NE(entry, null); 3689 ASSERT_NE(entry, null);
3681 EXPECT_TRUE(static_cast<disk_cache::SimpleEntryImpl*>(entry)->HasOneRef()); 3690 EXPECT_TRUE(static_cast<disk_cache::SimpleEntryImpl*>(entry)->HasOneRef());
3682 entry->Close(); 3691 entry->Close();
3683 } 3692 }
3684 } 3693 }
3685 3694
3686 // Test that changing stream1 size does not affect stream0 (stream0 and stream1 3695 // Test that changing stream1 size does not affect stream0 (stream0 and stream1
3687 // are stored in the same file in Simple Cache). 3696 // are stored in the same file in Simple Cache).
3688 TEST_F(DiskCacheEntryTest, SimpleCacheStream1SizeChanges) { 3697 TEST_F(DiskCacheEntryTest, SimpleCacheStream1SizeChanges) {
3689 SetSimpleCacheMode(); 3698 SetSimpleCacheMode();
3690 InitCache(); 3699 InitCache();
3691 disk_cache::Entry* entry = NULL; 3700 disk_cache::Entry* entry = NULL;
3692 const std::string key("the key"); 3701 const std::string key("the key");
3693 const int kSize = 100; 3702 const int kSize = 100;
3694 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); 3703 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize));
3695 scoped_refptr<net::IOBuffer> buffer_read(new net::IOBuffer(kSize)); 3704 scoped_refptr<net::IOBuffer> buffer_read(new net::IOBuffer(kSize));
3696 CacheTestFillBuffer(buffer->data(), kSize, false); 3705 CacheTestFillBuffer(buffer->data(), kSize, false);
3697 3706
3698 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 3707 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
3699 EXPECT_TRUE(entry); 3708 EXPECT_TRUE(entry);
3700 3709
3701 // Write something into stream0. 3710 // Write something into stream0.
3702 EXPECT_EQ(kSize, WriteData(entry, 0, 0, buffer.get(), kSize, false)); 3711 EXPECT_EQ(kSize, WriteData(entry, 0, 0, buffer.get(), kSize, false));
3703 EXPECT_EQ(kSize, ReadData(entry, 0, 0, buffer_read.get(), kSize)); 3712 EXPECT_EQ(kSize, ReadData(entry, 0, 0, buffer_read.get(), kSize));
3704 EXPECT_EQ(0, memcmp(buffer->data(), buffer_read->data(), kSize)); 3713 EXPECT_EQ(0, memcmp(buffer->data(), buffer_read->data(), kSize));
3705 entry->Close(); 3714 entry->Close();
3706 3715
3707 // Extend stream1. 3716 // Extend stream1.
3708 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 3717 ASSERT_THAT(OpenEntry(key, &entry), IsOk());
3709 int stream1_size = 100; 3718 int stream1_size = 100;
3710 EXPECT_EQ(0, WriteData(entry, 1, stream1_size, buffer.get(), 0, false)); 3719 EXPECT_EQ(0, WriteData(entry, 1, stream1_size, buffer.get(), 0, false));
3711 EXPECT_EQ(stream1_size, entry->GetDataSize(1)); 3720 EXPECT_EQ(stream1_size, entry->GetDataSize(1));
3712 entry->Close(); 3721 entry->Close();
3713 3722
3714 // Check that stream0 data has not been modified and that the EOF record for 3723 // Check that stream0 data has not been modified and that the EOF record for
3715 // stream 0 contains a crc. 3724 // stream 0 contains a crc.
3716 // The entry needs to be reopened before checking the crc: Open will perform 3725 // The entry needs to be reopened before checking the crc: Open will perform
3717 // the synchronization with the previous Close. This ensures the EOF records 3726 // the synchronization with the previous Close. This ensures the EOF records
3718 // have been written to disk before we attempt to read them independently. 3727 // have been written to disk before we attempt to read them independently.
3719 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 3728 ASSERT_THAT(OpenEntry(key, &entry), IsOk());
3720 base::FilePath entry_file0_path = cache_path_.AppendASCII( 3729 base::FilePath entry_file0_path = cache_path_.AppendASCII(
3721 disk_cache::simple_util::GetFilenameFromKeyAndFileIndex(key, 0)); 3730 disk_cache::simple_util::GetFilenameFromKeyAndFileIndex(key, 0));
3722 base::File entry_file0(entry_file0_path, 3731 base::File entry_file0(entry_file0_path,
3723 base::File::FLAG_READ | base::File::FLAG_OPEN); 3732 base::File::FLAG_READ | base::File::FLAG_OPEN);
3724 ASSERT_TRUE(entry_file0.IsValid()); 3733 ASSERT_TRUE(entry_file0.IsValid());
3725 3734
3726 int data_size[disk_cache::kSimpleEntryStreamCount] = {kSize, stream1_size, 0}; 3735 int data_size[disk_cache::kSimpleEntryStreamCount] = {kSize, stream1_size, 0};
3727 int sparse_data_size = 0; 3736 int sparse_data_size = 0;
3728 disk_cache::SimpleEntryStat entry_stat( 3737 disk_cache::SimpleEntryStat entry_stat(
3729 base::Time::Now(), base::Time::Now(), data_size, sparse_data_size); 3738 base::Time::Now(), base::Time::Now(), data_size, sparse_data_size);
(...skipping 11 matching lines...) Expand all
3741 EXPECT_EQ(0, memcmp(buffer->data(), buffer_read->data(), kSize)); 3750 EXPECT_EQ(0, memcmp(buffer->data(), buffer_read->data(), kSize));
3742 3751
3743 // Shrink stream1. 3752 // Shrink stream1.
3744 stream1_size = 50; 3753 stream1_size = 50;
3745 EXPECT_EQ(0, WriteData(entry, 1, stream1_size, buffer.get(), 0, true)); 3754 EXPECT_EQ(0, WriteData(entry, 1, stream1_size, buffer.get(), 0, true));
3746 EXPECT_EQ(stream1_size, entry->GetDataSize(1)); 3755 EXPECT_EQ(stream1_size, entry->GetDataSize(1));
3747 entry->Close(); 3756 entry->Close();
3748 3757
3749 // Check that stream0 data has not been modified. 3758 // Check that stream0 data has not been modified.
3750 buffer_read = new net::IOBuffer(kSize); 3759 buffer_read = new net::IOBuffer(kSize);
3751 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 3760 ASSERT_THAT(OpenEntry(key, &entry), IsOk());
3752 EXPECT_EQ(kSize, ReadData(entry, 0, 0, buffer_read.get(), kSize)); 3761 EXPECT_EQ(kSize, ReadData(entry, 0, 0, buffer_read.get(), kSize));
3753 EXPECT_EQ(0, memcmp(buffer->data(), buffer_read->data(), kSize)); 3762 EXPECT_EQ(0, memcmp(buffer->data(), buffer_read->data(), kSize));
3754 entry->Close(); 3763 entry->Close();
3755 entry = NULL; 3764 entry = NULL;
3756 } 3765 }
3757 3766
3758 // Test that writing within the range for which the crc has already been 3767 // Test that writing within the range for which the crc has already been
3759 // computed will properly invalidate the computed crc. 3768 // computed will properly invalidate the computed crc.
3760 TEST_F(DiskCacheEntryTest, SimpleCacheCRCRewrite) { 3769 TEST_F(DiskCacheEntryTest, SimpleCacheCRCRewrite) {
3761 // Test sequence: 3770 // Test sequence:
3762 // Create, Write (big data), Write (small data in the middle), Close. 3771 // Create, Write (big data), Write (small data in the middle), Close.
3763 // Open, Read (all), Close. 3772 // Open, Read (all), Close.
3764 SetSimpleCacheMode(); 3773 SetSimpleCacheMode();
3765 InitCache(); 3774 InitCache();
3766 disk_cache::Entry* null = NULL; 3775 disk_cache::Entry* null = NULL;
3767 const char key[] = "the first key"; 3776 const char key[] = "the first key";
3768 3777
3769 const int kHalfSize = 200; 3778 const int kHalfSize = 200;
3770 const int kSize = 2 * kHalfSize; 3779 const int kSize = 2 * kHalfSize;
3771 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize)); 3780 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize));
3772 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kHalfSize)); 3781 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kHalfSize));
3773 CacheTestFillBuffer(buffer1->data(), kSize, false); 3782 CacheTestFillBuffer(buffer1->data(), kSize, false);
3774 CacheTestFillBuffer(buffer2->data(), kHalfSize, false); 3783 CacheTestFillBuffer(buffer2->data(), kHalfSize, false);
3775 3784
3776 disk_cache::Entry* entry = NULL; 3785 disk_cache::Entry* entry = NULL;
3777 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 3786 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
3778 EXPECT_NE(null, entry); 3787 EXPECT_NE(null, entry);
3779 entry->Close(); 3788 entry->Close();
3780 3789
3781 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount; ++i) { 3790 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount; ++i) {
3782 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 3791 ASSERT_THAT(OpenEntry(key, &entry), IsOk());
3783 int offset = 0; 3792 int offset = 0;
3784 int buf_len = kSize; 3793 int buf_len = kSize;
3785 3794
3786 EXPECT_EQ(buf_len, 3795 EXPECT_EQ(buf_len,
3787 WriteData(entry, i, offset, buffer1.get(), buf_len, false)); 3796 WriteData(entry, i, offset, buffer1.get(), buf_len, false));
3788 offset = kHalfSize; 3797 offset = kHalfSize;
3789 buf_len = kHalfSize; 3798 buf_len = kHalfSize;
3790 EXPECT_EQ(buf_len, 3799 EXPECT_EQ(buf_len,
3791 WriteData(entry, i, offset, buffer2.get(), buf_len, false)); 3800 WriteData(entry, i, offset, buffer2.get(), buf_len, false));
3792 entry->Close(); 3801 entry->Close();
3793 3802
3794 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 3803 ASSERT_THAT(OpenEntry(key, &entry), IsOk());
3795 3804
3796 scoped_refptr<net::IOBuffer> buffer1_read1(new net::IOBuffer(kSize)); 3805 scoped_refptr<net::IOBuffer> buffer1_read1(new net::IOBuffer(kSize));
3797 EXPECT_EQ(kSize, ReadData(entry, i, 0, buffer1_read1.get(), kSize)); 3806 EXPECT_EQ(kSize, ReadData(entry, i, 0, buffer1_read1.get(), kSize));
3798 EXPECT_EQ(0, memcmp(buffer1->data(), buffer1_read1->data(), kHalfSize)); 3807 EXPECT_EQ(0, memcmp(buffer1->data(), buffer1_read1->data(), kHalfSize));
3799 EXPECT_EQ( 3808 EXPECT_EQ(
3800 0, 3809 0,
3801 memcmp(buffer2->data(), buffer1_read1->data() + kHalfSize, kHalfSize)); 3810 memcmp(buffer2->data(), buffer1_read1->data() + kHalfSize, kHalfSize));
3802 3811
3803 entry->Close(); 3812 entry->Close();
3804 } 3813 }
(...skipping 19 matching lines...) Expand all
3824 TEST_F(DiskCacheEntryTest, SimpleCacheOmittedThirdStream1) { 3833 TEST_F(DiskCacheEntryTest, SimpleCacheOmittedThirdStream1) {
3825 SetSimpleCacheMode(); 3834 SetSimpleCacheMode();
3826 InitCache(); 3835 InitCache();
3827 3836
3828 const char key[] = "key"; 3837 const char key[] = "key";
3829 3838
3830 disk_cache::Entry* entry; 3839 disk_cache::Entry* entry;
3831 3840
3832 // Create entry and close without writing: third stream file should be 3841 // Create entry and close without writing: third stream file should be
3833 // omitted, since the stream is empty. 3842 // omitted, since the stream is empty.
3834 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 3843 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
3835 entry->Close(); 3844 entry->Close();
3836 EXPECT_FALSE(SimpleCacheThirdStreamFileExists(key)); 3845 EXPECT_FALSE(SimpleCacheThirdStreamFileExists(key));
3837 3846
3838 SyncDoomEntry(key); 3847 SyncDoomEntry(key);
3839 EXPECT_FALSE(SimpleCacheThirdStreamFileExists(key)); 3848 EXPECT_FALSE(SimpleCacheThirdStreamFileExists(key));
3840 } 3849 }
3841 3850
3842 // Check that a newly-created entry with only a single zero-offset, zero-length 3851 // Check that a newly-created entry with only a single zero-offset, zero-length
3843 // write omits the third stream file. 3852 // write omits the third stream file.
3844 TEST_F(DiskCacheEntryTest, SimpleCacheOmittedThirdStream2) { 3853 TEST_F(DiskCacheEntryTest, SimpleCacheOmittedThirdStream2) {
3845 SetSimpleCacheMode(); 3854 SetSimpleCacheMode();
3846 InitCache(); 3855 InitCache();
3847 3856
3848 const int kHalfSize = 8; 3857 const int kHalfSize = 8;
3849 const int kSize = kHalfSize * 2; 3858 const int kSize = kHalfSize * 2;
3850 const char key[] = "key"; 3859 const char key[] = "key";
3851 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); 3860 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize));
3852 CacheTestFillBuffer(buffer->data(), kHalfSize, false); 3861 CacheTestFillBuffer(buffer->data(), kHalfSize, false);
3853 3862
3854 disk_cache::Entry* entry; 3863 disk_cache::Entry* entry;
3855 3864
3856 // Create entry, write empty buffer to third stream, and close: third stream 3865 // Create entry, write empty buffer to third stream, and close: third stream
3857 // should still be omitted, since the entry ignores writes that don't modify 3866 // should still be omitted, since the entry ignores writes that don't modify
3858 // data or change the length. 3867 // data or change the length.
3859 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 3868 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
3860 EXPECT_EQ(0, WriteData(entry, 2, 0, buffer.get(), 0, true)); 3869 EXPECT_EQ(0, WriteData(entry, 2, 0, buffer.get(), 0, true));
3861 entry->Close(); 3870 entry->Close();
3862 EXPECT_FALSE(SimpleCacheThirdStreamFileExists(key)); 3871 EXPECT_FALSE(SimpleCacheThirdStreamFileExists(key));
3863 3872
3864 SyncDoomEntry(key); 3873 SyncDoomEntry(key);
3865 EXPECT_FALSE(SimpleCacheThirdStreamFileExists(key)); 3874 EXPECT_FALSE(SimpleCacheThirdStreamFileExists(key));
3866 } 3875 }
3867 3876
3868 // Check that we can read back data written to the third stream. 3877 // Check that we can read back data written to the third stream.
3869 TEST_F(DiskCacheEntryTest, SimpleCacheOmittedThirdStream3) { 3878 TEST_F(DiskCacheEntryTest, SimpleCacheOmittedThirdStream3) {
3870 SetSimpleCacheMode(); 3879 SetSimpleCacheMode();
3871 InitCache(); 3880 InitCache();
3872 3881
3873 const int kHalfSize = 8; 3882 const int kHalfSize = 8;
3874 const int kSize = kHalfSize * 2; 3883 const int kSize = kHalfSize * 2;
3875 const char key[] = "key"; 3884 const char key[] = "key";
3876 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize)); 3885 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize));
3877 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize)); 3886 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize));
3878 CacheTestFillBuffer(buffer1->data(), kHalfSize, false); 3887 CacheTestFillBuffer(buffer1->data(), kHalfSize, false);
3879 3888
3880 disk_cache::Entry* entry; 3889 disk_cache::Entry* entry;
3881 3890
3882 // Create entry, write data to third stream, and close: third stream should 3891 // Create entry, write data to third stream, and close: third stream should
3883 // not be omitted, since it contains data. Re-open entry and ensure there 3892 // not be omitted, since it contains data. Re-open entry and ensure there
3884 // are that many bytes in the third stream. 3893 // are that many bytes in the third stream.
3885 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 3894 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
3886 EXPECT_EQ(kHalfSize, WriteData(entry, 2, 0, buffer1.get(), kHalfSize, true)); 3895 EXPECT_EQ(kHalfSize, WriteData(entry, 2, 0, buffer1.get(), kHalfSize, true));
3887 entry->Close(); 3896 entry->Close();
3888 EXPECT_TRUE(SimpleCacheThirdStreamFileExists(key)); 3897 EXPECT_TRUE(SimpleCacheThirdStreamFileExists(key));
3889 3898
3890 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 3899 ASSERT_THAT(OpenEntry(key, &entry), IsOk());
3891 EXPECT_EQ(kHalfSize, ReadData(entry, 2, 0, buffer2.get(), kSize)); 3900 EXPECT_EQ(kHalfSize, ReadData(entry, 2, 0, buffer2.get(), kSize));
3892 EXPECT_EQ(0, memcmp(buffer1->data(), buffer2->data(), kHalfSize)); 3901 EXPECT_EQ(0, memcmp(buffer1->data(), buffer2->data(), kHalfSize));
3893 entry->Close(); 3902 entry->Close();
3894 EXPECT_TRUE(SimpleCacheThirdStreamFileExists(key)); 3903 EXPECT_TRUE(SimpleCacheThirdStreamFileExists(key));
3895 3904
3896 SyncDoomEntry(key); 3905 SyncDoomEntry(key);
3897 EXPECT_FALSE(SimpleCacheThirdStreamFileExists(key)); 3906 EXPECT_FALSE(SimpleCacheThirdStreamFileExists(key));
3898 } 3907 }
3899 3908
3900 // Check that we remove the third stream file upon opening an entry and finding 3909 // Check that we remove the third stream file upon opening an entry and finding
(...skipping 10 matching lines...) Expand all
3911 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize)); 3920 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize));
3912 CacheTestFillBuffer(buffer1->data(), kHalfSize, false); 3921 CacheTestFillBuffer(buffer1->data(), kHalfSize, false);
3913 3922
3914 disk_cache::Entry* entry; 3923 disk_cache::Entry* entry;
3915 3924
3916 // Create entry, write data to third stream, truncate third stream back to 3925 // Create entry, write data to third stream, truncate third stream back to
3917 // empty, and close: third stream will not initially be omitted, since entry 3926 // empty, and close: third stream will not initially be omitted, since entry
3918 // creates the file when the first significant write comes in, and only 3927 // creates the file when the first significant write comes in, and only
3919 // removes it on open if it is empty. Reopen, ensure that the file is 3928 // removes it on open if it is empty. Reopen, ensure that the file is
3920 // deleted, and that there's no data in the third stream. 3929 // deleted, and that there's no data in the third stream.
3921 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 3930 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
3922 EXPECT_EQ(kHalfSize, WriteData(entry, 2, 0, buffer1.get(), kHalfSize, true)); 3931 EXPECT_EQ(kHalfSize, WriteData(entry, 2, 0, buffer1.get(), kHalfSize, true));
3923 EXPECT_EQ(0, WriteData(entry, 2, 0, buffer1.get(), 0, true)); 3932 EXPECT_EQ(0, WriteData(entry, 2, 0, buffer1.get(), 0, true));
3924 entry->Close(); 3933 entry->Close();
3925 EXPECT_TRUE(SimpleCacheThirdStreamFileExists(key)); 3934 EXPECT_TRUE(SimpleCacheThirdStreamFileExists(key));
3926 3935
3927 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 3936 ASSERT_THAT(OpenEntry(key, &entry), IsOk());
3928 EXPECT_FALSE(SimpleCacheThirdStreamFileExists(key)); 3937 EXPECT_FALSE(SimpleCacheThirdStreamFileExists(key));
3929 EXPECT_EQ(0, ReadData(entry, 2, 0, buffer2.get(), kSize)); 3938 EXPECT_EQ(0, ReadData(entry, 2, 0, buffer2.get(), kSize));
3930 entry->Close(); 3939 entry->Close();
3931 EXPECT_FALSE(SimpleCacheThirdStreamFileExists(key)); 3940 EXPECT_FALSE(SimpleCacheThirdStreamFileExists(key));
3932 3941
3933 SyncDoomEntry(key); 3942 SyncDoomEntry(key);
3934 EXPECT_FALSE(SimpleCacheThirdStreamFileExists(key)); 3943 EXPECT_FALSE(SimpleCacheThirdStreamFileExists(key));
3935 } 3944 }
3936 3945
3937 // Check that we don't accidentally create the third stream file once the entry 3946 // Check that we don't accidentally create the third stream file once the entry
3938 // has been doomed. 3947 // has been doomed.
3939 TEST_F(DiskCacheEntryTest, SimpleCacheOmittedThirdStream5) { 3948 TEST_F(DiskCacheEntryTest, SimpleCacheOmittedThirdStream5) {
3940 SetSimpleCacheMode(); 3949 SetSimpleCacheMode();
3941 InitCache(); 3950 InitCache();
3942 3951
3943 const int kHalfSize = 8; 3952 const int kHalfSize = 8;
3944 const int kSize = kHalfSize * 2; 3953 const int kSize = kHalfSize * 2;
3945 const char key[] = "key"; 3954 const char key[] = "key";
3946 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); 3955 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize));
3947 CacheTestFillBuffer(buffer->data(), kHalfSize, false); 3956 CacheTestFillBuffer(buffer->data(), kHalfSize, false);
3948 3957
3949 disk_cache::Entry* entry; 3958 disk_cache::Entry* entry;
3950 3959
3951 // Create entry, doom entry, write data to third stream, and close: third 3960 // Create entry, doom entry, write data to third stream, and close: third
3952 // stream should not exist. (Note: We don't care if the write fails, just 3961 // stream should not exist. (Note: We don't care if the write fails, just
3953 // that it doesn't cause the file to be created on disk.) 3962 // that it doesn't cause the file to be created on disk.)
3954 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 3963 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
3955 entry->Doom(); 3964 entry->Doom();
3956 WriteData(entry, 2, 0, buffer.get(), kHalfSize, true); 3965 WriteData(entry, 2, 0, buffer.get(), kHalfSize, true);
3957 entry->Close(); 3966 entry->Close();
3958 EXPECT_FALSE(SimpleCacheThirdStreamFileExists(key)); 3967 EXPECT_FALSE(SimpleCacheThirdStreamFileExists(key));
3959 } 3968 }
3960 3969
3961 // There could be a race between Doom and an optimistic write. 3970 // There could be a race between Doom and an optimistic write.
3962 TEST_F(DiskCacheEntryTest, SimpleCacheDoomOptimisticWritesRace) { 3971 TEST_F(DiskCacheEntryTest, SimpleCacheDoomOptimisticWritesRace) {
3963 // Test sequence: 3972 // Test sequence:
3964 // Create, first Write, second Write, Close. 3973 // Create, first Write, second Write, Close.
3965 // Open, Close. 3974 // Open, Close.
3966 SetSimpleCacheMode(); 3975 SetSimpleCacheMode();
3967 InitCache(); 3976 InitCache();
3968 disk_cache::Entry* null = NULL; 3977 disk_cache::Entry* null = NULL;
3969 const char key[] = "the first key"; 3978 const char key[] = "the first key";
3970 3979
3971 const int kSize = 200; 3980 const int kSize = 200;
3972 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize)); 3981 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize));
3973 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize)); 3982 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize));
3974 CacheTestFillBuffer(buffer1->data(), kSize, false); 3983 CacheTestFillBuffer(buffer1->data(), kSize, false);
3975 CacheTestFillBuffer(buffer2->data(), kSize, false); 3984 CacheTestFillBuffer(buffer2->data(), kSize, false);
3976 3985
3977 // The race only happens on stream 1 and stream 2. 3986 // The race only happens on stream 1 and stream 2.
3978 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount; ++i) { 3987 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount; ++i) {
3979 ASSERT_EQ(net::OK, DoomAllEntries()); 3988 ASSERT_THAT(DoomAllEntries(), IsOk());
3980 disk_cache::Entry* entry = NULL; 3989 disk_cache::Entry* entry = NULL;
3981 3990
3982 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 3991 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
3983 EXPECT_NE(null, entry); 3992 EXPECT_NE(null, entry);
3984 entry->Close(); 3993 entry->Close();
3985 entry = NULL; 3994 entry = NULL;
3986 3995
3987 ASSERT_EQ(net::OK, DoomAllEntries()); 3996 ASSERT_THAT(DoomAllEntries(), IsOk());
3988 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 3997 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
3989 EXPECT_NE(null, entry); 3998 EXPECT_NE(null, entry);
3990 3999
3991 int offset = 0; 4000 int offset = 0;
3992 int buf_len = kSize; 4001 int buf_len = kSize;
3993 // This write should not be optimistic (since create is). 4002 // This write should not be optimistic (since create is).
3994 EXPECT_EQ(buf_len, 4003 EXPECT_EQ(buf_len,
3995 WriteData(entry, i, offset, buffer1.get(), buf_len, false)); 4004 WriteData(entry, i, offset, buffer1.get(), buf_len, false));
3996 4005
3997 offset = kSize; 4006 offset = kSize;
3998 // This write should be optimistic. 4007 // This write should be optimistic.
3999 EXPECT_EQ(buf_len, 4008 EXPECT_EQ(buf_len,
4000 WriteData(entry, i, offset, buffer2.get(), buf_len, false)); 4009 WriteData(entry, i, offset, buffer2.get(), buf_len, false));
4001 entry->Close(); 4010 entry->Close();
4002 4011
4003 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 4012 ASSERT_THAT(OpenEntry(key, &entry), IsOk());
4004 EXPECT_NE(null, entry); 4013 EXPECT_NE(null, entry);
4005 4014
4006 entry->Close(); 4015 entry->Close();
4007 entry = NULL; 4016 entry = NULL;
4008 } 4017 }
4009 } 4018 }
4010 4019
4011 // Tests for a regression in crbug.com/317138 , in which deleting an already 4020 // Tests for a regression in crbug.com/317138 , in which deleting an already
4012 // doomed entry was removing the active entry from the index. 4021 // doomed entry was removing the active entry from the index.
4013 TEST_F(DiskCacheEntryTest, SimpleCachePreserveActiveEntries) { 4022 TEST_F(DiskCacheEntryTest, SimpleCachePreserveActiveEntries) {
4014 SetSimpleCacheMode(); 4023 SetSimpleCacheMode();
4015 InitCache(); 4024 InitCache();
4016 4025
4017 disk_cache::Entry* null = NULL; 4026 disk_cache::Entry* null = NULL;
4018 4027
4019 const char key[] = "this is a key"; 4028 const char key[] = "this is a key";
4020 4029
4021 disk_cache::Entry* entry1 = NULL; 4030 disk_cache::Entry* entry1 = NULL;
4022 ASSERT_EQ(net::OK, CreateEntry(key, &entry1)); 4031 ASSERT_THAT(CreateEntry(key, &entry1), IsOk());
4023 ScopedEntryPtr entry1_closer(entry1); 4032 ScopedEntryPtr entry1_closer(entry1);
4024 EXPECT_NE(null, entry1); 4033 EXPECT_NE(null, entry1);
4025 entry1->Doom(); 4034 entry1->Doom();
4026 4035
4027 disk_cache::Entry* entry2 = NULL; 4036 disk_cache::Entry* entry2 = NULL;
4028 ASSERT_EQ(net::OK, CreateEntry(key, &entry2)); 4037 ASSERT_THAT(CreateEntry(key, &entry2), IsOk());
4029 ScopedEntryPtr entry2_closer(entry2); 4038 ScopedEntryPtr entry2_closer(entry2);
4030 EXPECT_NE(null, entry2); 4039 EXPECT_NE(null, entry2);
4031 entry2_closer.reset(); 4040 entry2_closer.reset();
4032 4041
4033 // Closing then reopening entry2 insures that entry2 is serialized, and so 4042 // Closing then reopening entry2 insures that entry2 is serialized, and so
4034 // it can be opened from files without error. 4043 // it can be opened from files without error.
4035 entry2 = NULL; 4044 entry2 = NULL;
4036 ASSERT_EQ(net::OK, OpenEntry(key, &entry2)); 4045 ASSERT_THAT(OpenEntry(key, &entry2), IsOk());
4037 EXPECT_NE(null, entry2); 4046 EXPECT_NE(null, entry2);
4038 entry2_closer.reset(entry2); 4047 entry2_closer.reset(entry2);
4039 4048
4040 scoped_refptr<disk_cache::SimpleEntryImpl> 4049 scoped_refptr<disk_cache::SimpleEntryImpl>
4041 entry1_refptr = static_cast<disk_cache::SimpleEntryImpl*>(entry1); 4050 entry1_refptr = static_cast<disk_cache::SimpleEntryImpl*>(entry1);
4042 4051
4043 // If crbug.com/317138 has regressed, this will remove |entry2| from 4052 // If crbug.com/317138 has regressed, this will remove |entry2| from
4044 // the backend's |active_entries_| while |entry2| is still alive and its 4053 // the backend's |active_entries_| while |entry2| is still alive and its
4045 // files are still on disk. 4054 // files are still on disk.
4046 entry1_closer.reset(); 4055 entry1_closer.reset();
4047 entry1 = NULL; 4056 entry1 = NULL;
4048 4057
4049 // Close does not have a callback. However, we need to be sure the close is 4058 // Close does not have a callback. However, we need to be sure the close is
4050 // finished before we continue the test. We can take advantage of how the ref 4059 // finished before we continue the test. We can take advantage of how the ref
4051 // counting of a SimpleEntryImpl works to fake out a callback: When the 4060 // counting of a SimpleEntryImpl works to fake out a callback: When the
4052 // last Close() call is made to an entry, an IO operation is sent to the 4061 // last Close() call is made to an entry, an IO operation is sent to the
4053 // synchronous entry to close the platform files. This IO operation holds a 4062 // synchronous entry to close the platform files. This IO operation holds a
4054 // ref pointer to the entry, which expires when the operation is done. So, 4063 // ref pointer to the entry, which expires when the operation is done. So,
4055 // we take a refpointer, and watch the SimpleEntry object until it has only 4064 // we take a refpointer, and watch the SimpleEntry object until it has only
4056 // one ref; this indicates the IO operation is complete. 4065 // one ref; this indicates the IO operation is complete.
4057 while (!entry1_refptr->HasOneRef()) { 4066 while (!entry1_refptr->HasOneRef()) {
4058 base::PlatformThread::YieldCurrentThread(); 4067 base::PlatformThread::YieldCurrentThread();
4059 base::RunLoop().RunUntilIdle(); 4068 base::RunLoop().RunUntilIdle();
4060 } 4069 }
4061 entry1_refptr = NULL; 4070 entry1_refptr = NULL;
4062 4071
4063 // In the bug case, this new entry ends up being a duplicate object pointing 4072 // In the bug case, this new entry ends up being a duplicate object pointing
4064 // at the same underlying files. 4073 // at the same underlying files.
4065 disk_cache::Entry* entry3 = NULL; 4074 disk_cache::Entry* entry3 = NULL;
4066 EXPECT_EQ(net::OK, OpenEntry(key, &entry3)); 4075 EXPECT_THAT(OpenEntry(key, &entry3), IsOk());
4067 ScopedEntryPtr entry3_closer(entry3); 4076 ScopedEntryPtr entry3_closer(entry3);
4068 EXPECT_NE(null, entry3); 4077 EXPECT_NE(null, entry3);
4069 4078
4070 // The test passes if these two dooms do not crash. 4079 // The test passes if these two dooms do not crash.
4071 entry2->Doom(); 4080 entry2->Doom();
4072 entry3->Doom(); 4081 entry3->Doom();
4073 } 4082 }
4074 4083
4075 TEST_F(DiskCacheEntryTest, SimpleCacheBasicSparseIO) { 4084 TEST_F(DiskCacheEntryTest, SimpleCacheBasicSparseIO) {
4076 SetSimpleCacheMode(); 4085 SetSimpleCacheMode();
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
4113 4122
4114 SetSimpleCacheMode(); 4123 SetSimpleCacheMode();
4115 // An entry is allowed sparse data 1/10 the size of the cache, so this size 4124 // An entry is allowed sparse data 1/10 the size of the cache, so this size
4116 // allows for one |kSize|-sized range plus overhead, but not two ranges. 4125 // allows for one |kSize|-sized range plus overhead, but not two ranges.
4117 SetMaxSize(kSize * 15); 4126 SetMaxSize(kSize * 15);
4118 InitCache(); 4127 InitCache();
4119 4128
4120 const char key[] = "key"; 4129 const char key[] = "key";
4121 disk_cache::Entry* null = NULL; 4130 disk_cache::Entry* null = NULL;
4122 disk_cache::Entry* entry; 4131 disk_cache::Entry* entry;
4123 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 4132 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
4124 EXPECT_NE(null, entry); 4133 EXPECT_NE(null, entry);
4125 4134
4126 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); 4135 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize));
4127 CacheTestFillBuffer(buffer->data(), kSize, false); 4136 CacheTestFillBuffer(buffer->data(), kSize, false);
4128 net::TestCompletionCallback callback; 4137 net::TestCompletionCallback callback;
4129 int ret; 4138 int ret;
4130 4139
4131 // Verify initial conditions. 4140 // Verify initial conditions.
4132 ret = entry->ReadSparseData(0, buffer.get(), kSize, callback.callback()); 4141 ret = entry->ReadSparseData(0, buffer.get(), kSize, callback.callback());
4133 EXPECT_EQ(0, callback.GetResult(ret)); 4142 EXPECT_EQ(0, callback.GetResult(ret));
(...skipping 15 matching lines...) Expand all
4149 ret = entry->ReadSparseData(kSize, buffer.get(), kSize, callback.callback()); 4158 ret = entry->ReadSparseData(kSize, buffer.get(), kSize, callback.callback());
4150 EXPECT_EQ(kSize, callback.GetResult(ret)); 4159 EXPECT_EQ(kSize, callback.GetResult(ret));
4151 4160
4152 // Make sure the first range was removed when the second was written. 4161 // Make sure the first range was removed when the second was written.
4153 ret = entry->ReadSparseData(0, buffer.get(), kSize, callback.callback()); 4162 ret = entry->ReadSparseData(0, buffer.get(), kSize, callback.callback());
4154 EXPECT_EQ(0, callback.GetResult(ret)); 4163 EXPECT_EQ(0, callback.GetResult(ret));
4155 4164
4156 // Close and reopen the entry and make sure the first entry is still absent 4165 // Close and reopen the entry and make sure the first entry is still absent
4157 // and the second entry is still present. 4166 // and the second entry is still present.
4158 entry->Close(); 4167 entry->Close();
4159 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 4168 ASSERT_THAT(OpenEntry(key, &entry), IsOk());
4160 4169
4161 ret = entry->ReadSparseData(0, buffer.get(), kSize, callback.callback()); 4170 ret = entry->ReadSparseData(0, buffer.get(), kSize, callback.callback());
4162 EXPECT_EQ(0, callback.GetResult(ret)); 4171 EXPECT_EQ(0, callback.GetResult(ret));
4163 4172
4164 ret = entry->ReadSparseData(kSize, buffer.get(), kSize, callback.callback()); 4173 ret = entry->ReadSparseData(kSize, buffer.get(), kSize, callback.callback());
4165 EXPECT_EQ(kSize, callback.GetResult(ret)); 4174 EXPECT_EQ(kSize, callback.GetResult(ret));
4166 4175
4167 entry->Close(); 4176 entry->Close();
4168 } 4177 }
4169 4178
4170 TEST_F(DiskCacheEntryTest, SimpleCacheReadWithoutKeySHA256) { 4179 TEST_F(DiskCacheEntryTest, SimpleCacheReadWithoutKeySHA256) {
4171 // This test runs as APP_CACHE to make operations more synchronous. 4180 // This test runs as APP_CACHE to make operations more synchronous.
4172 SetCacheType(net::APP_CACHE); 4181 SetCacheType(net::APP_CACHE);
4173 SetSimpleCacheMode(); 4182 SetSimpleCacheMode();
4174 InitCache(); 4183 InitCache();
4175 disk_cache::Entry* entry; 4184 disk_cache::Entry* entry;
4176 std::string key("a key"); 4185 std::string key("a key");
4177 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 4186 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
4178 4187
4179 const std::string stream_0_data = "data for stream zero"; 4188 const std::string stream_0_data = "data for stream zero";
4180 scoped_refptr<net::IOBuffer> stream_0_iobuffer( 4189 scoped_refptr<net::IOBuffer> stream_0_iobuffer(
4181 new net::StringIOBuffer(stream_0_data)); 4190 new net::StringIOBuffer(stream_0_data));
4182 EXPECT_EQ(static_cast<int>(stream_0_data.size()), 4191 EXPECT_EQ(static_cast<int>(stream_0_data.size()),
4183 WriteData(entry, 0, 0, stream_0_iobuffer.get(), 4192 WriteData(entry, 0, 0, stream_0_iobuffer.get(),
4184 stream_0_data.size(), false)); 4193 stream_0_data.size(), false));
4185 const std::string stream_1_data = "FOR STREAM ONE, QUITE DIFFERENT THINGS"; 4194 const std::string stream_1_data = "FOR STREAM ONE, QUITE DIFFERENT THINGS";
4186 scoped_refptr<net::IOBuffer> stream_1_iobuffer( 4195 scoped_refptr<net::IOBuffer> stream_1_iobuffer(
4187 new net::StringIOBuffer(stream_1_data)); 4196 new net::StringIOBuffer(stream_1_data));
4188 EXPECT_EQ(static_cast<int>(stream_1_data.size()), 4197 EXPECT_EQ(static_cast<int>(stream_1_data.size()),
4189 WriteData(entry, 1, 0, stream_1_iobuffer.get(), 4198 WriteData(entry, 1, 0, stream_1_iobuffer.get(),
4190 stream_1_data.size(), false)); 4199 stream_1_data.size(), false));
4191 entry->Close(); 4200 entry->Close();
4192 4201
4193 base::RunLoop().RunUntilIdle(); 4202 base::RunLoop().RunUntilIdle();
4194 disk_cache::SimpleBackendImpl::FlushWorkerPoolForTesting(); 4203 disk_cache::SimpleBackendImpl::FlushWorkerPoolForTesting();
4195 base::RunLoop().RunUntilIdle(); 4204 base::RunLoop().RunUntilIdle();
4196 4205
4197 EXPECT_TRUE( 4206 EXPECT_TRUE(
4198 disk_cache::simple_util::RemoveKeySHA256FromEntry(key, cache_path_)); 4207 disk_cache::simple_util::RemoveKeySHA256FromEntry(key, cache_path_));
4199 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 4208 ASSERT_THAT(OpenEntry(key, &entry), IsOk());
4200 ScopedEntryPtr entry_closer(entry); 4209 ScopedEntryPtr entry_closer(entry);
4201 4210
4202 EXPECT_EQ(static_cast<int>(stream_0_data.size()), entry->GetDataSize(0)); 4211 EXPECT_EQ(static_cast<int>(stream_0_data.size()), entry->GetDataSize(0));
4203 scoped_refptr<net::IOBuffer> check_stream_0_data( 4212 scoped_refptr<net::IOBuffer> check_stream_0_data(
4204 new net::IOBuffer(stream_0_data.size())); 4213 new net::IOBuffer(stream_0_data.size()));
4205 EXPECT_EQ( 4214 EXPECT_EQ(
4206 static_cast<int>(stream_0_data.size()), 4215 static_cast<int>(stream_0_data.size()),
4207 ReadData(entry, 0, 0, check_stream_0_data.get(), stream_0_data.size())); 4216 ReadData(entry, 0, 0, check_stream_0_data.get(), stream_0_data.size()));
4208 EXPECT_EQ(0, stream_0_data.compare(0, std::string::npos, 4217 EXPECT_EQ(0, stream_0_data.compare(0, std::string::npos,
4209 check_stream_0_data->data(), 4218 check_stream_0_data->data(),
(...skipping 10 matching lines...) Expand all
4220 stream_1_data.size())); 4229 stream_1_data.size()));
4221 } 4230 }
4222 4231
4223 TEST_F(DiskCacheEntryTest, SimpleCacheDoubleOpenWithoutKeySHA256) { 4232 TEST_F(DiskCacheEntryTest, SimpleCacheDoubleOpenWithoutKeySHA256) {
4224 // This test runs as APP_CACHE to make operations more synchronous. 4233 // This test runs as APP_CACHE to make operations more synchronous.
4225 SetCacheType(net::APP_CACHE); 4234 SetCacheType(net::APP_CACHE);
4226 SetSimpleCacheMode(); 4235 SetSimpleCacheMode();
4227 InitCache(); 4236 InitCache();
4228 disk_cache::Entry* entry; 4237 disk_cache::Entry* entry;
4229 std::string key("a key"); 4238 std::string key("a key");
4230 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 4239 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
4231 entry->Close(); 4240 entry->Close();
4232 4241
4233 base::RunLoop().RunUntilIdle(); 4242 base::RunLoop().RunUntilIdle();
4234 disk_cache::SimpleBackendImpl::FlushWorkerPoolForTesting(); 4243 disk_cache::SimpleBackendImpl::FlushWorkerPoolForTesting();
4235 base::RunLoop().RunUntilIdle(); 4244 base::RunLoop().RunUntilIdle();
4236 4245
4237 EXPECT_TRUE( 4246 EXPECT_TRUE(
4238 disk_cache::simple_util::RemoveKeySHA256FromEntry(key, cache_path_)); 4247 disk_cache::simple_util::RemoveKeySHA256FromEntry(key, cache_path_));
4239 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 4248 ASSERT_THAT(OpenEntry(key, &entry), IsOk());
4240 entry->Close(); 4249 entry->Close();
4241 4250
4242 base::RunLoop().RunUntilIdle(); 4251 base::RunLoop().RunUntilIdle();
4243 disk_cache::SimpleBackendImpl::FlushWorkerPoolForTesting(); 4252 disk_cache::SimpleBackendImpl::FlushWorkerPoolForTesting();
4244 base::RunLoop().RunUntilIdle(); 4253 base::RunLoop().RunUntilIdle();
4245 4254
4246 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); 4255 ASSERT_THAT(OpenEntry(key, &entry), IsOk());
4247 entry->Close(); 4256 entry->Close();
4248 } 4257 }
4249 4258
4250 TEST_F(DiskCacheEntryTest, SimpleCacheReadCorruptKeySHA256) { 4259 TEST_F(DiskCacheEntryTest, SimpleCacheReadCorruptKeySHA256) {
4251 // This test runs as APP_CACHE to make operations more synchronous. 4260 // This test runs as APP_CACHE to make operations more synchronous.
4252 SetCacheType(net::APP_CACHE); 4261 SetCacheType(net::APP_CACHE);
4253 SetSimpleCacheMode(); 4262 SetSimpleCacheMode();
4254 InitCache(); 4263 InitCache();
4255 disk_cache::Entry* entry; 4264 disk_cache::Entry* entry;
4256 std::string key("a key"); 4265 std::string key("a key");
4257 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); 4266 ASSERT_THAT(CreateEntry(key, &entry), IsOk());
4258 entry->Close(); 4267 entry->Close();
4259 4268
4260 base::RunLoop().RunUntilIdle(); 4269 base::RunLoop().RunUntilIdle();
4261 disk_cache::SimpleBackendImpl::FlushWorkerPoolForTesting(); 4270 disk_cache::SimpleBackendImpl::FlushWorkerPoolForTesting();
4262 base::RunLoop().RunUntilIdle(); 4271 base::RunLoop().RunUntilIdle();
4263 4272
4264 EXPECT_TRUE( 4273 EXPECT_TRUE(
4265 disk_cache::simple_util::CorruptKeySHA256FromEntry(key, cache_path_)); 4274 disk_cache::simple_util::CorruptKeySHA256FromEntry(key, cache_path_));
4266 EXPECT_NE(net::OK, OpenEntry(key, &entry)); 4275 EXPECT_NE(net::OK, OpenEntry(key, &entry));
4267 } 4276 }
OLDNEW
« no previous file with comments | « net/disk_cache/disk_cache_test_base.cc ('k') | net/disk_cache/simple/simple_index_file_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698