| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/basictypes.h" | 5 #include "base/basictypes.h" |
| 6 #include "base/bind.h" | 6 #include "base/bind.h" |
| 7 #include "base/bind_helpers.h" | 7 #include "base/bind_helpers.h" |
| 8 #include "base/file_util.h" | 8 #include "base/file_util.h" |
| 9 #include "base/strings/string_util.h" | 9 #include "base/strings/string_util.h" |
| 10 #include "base/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 class DiskCacheEntryTest : public DiskCacheTestWithCache { | 33 class DiskCacheEntryTest : public DiskCacheTestWithCache { |
| 34 public: | 34 public: |
| 35 void InternalSyncIOBackground(disk_cache::Entry* entry); | 35 void InternalSyncIOBackground(disk_cache::Entry* entry); |
| 36 void ExternalSyncIOBackground(disk_cache::Entry* entry); | 36 void ExternalSyncIOBackground(disk_cache::Entry* entry); |
| 37 | 37 |
| 38 protected: | 38 protected: |
| 39 void InternalSyncIO(); | 39 void InternalSyncIO(); |
| 40 void InternalAsyncIO(); | 40 void InternalAsyncIO(); |
| 41 void ExternalSyncIO(); | 41 void ExternalSyncIO(); |
| 42 void ExternalAsyncIO(); | 42 void ExternalAsyncIO(); |
| 43 void ReleaseBuffer(); | 43 void ReleaseBuffer(int stream_index); |
| 44 void StreamAccess(); | 44 void StreamAccess(); |
| 45 void GetKey(); | 45 void GetKey(); |
| 46 void GetTimes(); | 46 void GetTimes(int stream_index); |
| 47 void GrowData(); | 47 void GrowData(int stream_index); |
| 48 void TruncateData(); | 48 void TruncateData(int stream_index); |
| 49 void ZeroLengthIO(); | 49 void ZeroLengthIO(int stream_index); |
| 50 void Buffering(); | 50 void Buffering(); |
| 51 void SizeAtCreate(); | 51 void SizeAtCreate(); |
| 52 void SizeChanges(); | 52 void SizeChanges(int stream_index); |
| 53 void ReuseEntry(int size); | 53 void ReuseEntry(int size, int stream_index); |
| 54 void InvalidData(); | 54 void InvalidData(int stream_index); |
| 55 void ReadWriteDestroyBuffer(); | 55 void ReadWriteDestroyBuffer(int stream_index); |
| 56 void DoomNormalEntry(); | 56 void DoomNormalEntry(); |
| 57 void DoomEntryNextToOpenEntry(); | 57 void DoomEntryNextToOpenEntry(); |
| 58 void DoomedEntry(); | 58 void DoomedEntry(int stream_index); |
| 59 void BasicSparseIO(); | 59 void BasicSparseIO(); |
| 60 void HugeSparseIO(); | 60 void HugeSparseIO(); |
| 61 void GetAvailableRange(); | 61 void GetAvailableRange(); |
| 62 void CouldBeSparse(); | 62 void CouldBeSparse(); |
| 63 void UpdateSparseEntry(); | 63 void UpdateSparseEntry(); |
| 64 void DoomSparseEntry(); | 64 void DoomSparseEntry(); |
| 65 void PartialSparseEntry(); | 65 void PartialSparseEntry(); |
| 66 bool SimpleCacheMakeBadChecksumEntry(const std::string& key, int* data_size); | 66 bool SimpleCacheMakeBadChecksumEntry(const std::string& key, int* data_size); |
| 67 bool SimpleCacheThirdStreamFileExists(const char* key); | 67 bool SimpleCacheThirdStreamFileExists(const char* key); |
| 68 void SyncDoomEntry(const char* key); | 68 void SyncDoomEntry(const char* key); |
| (...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 604 ExternalAsyncIO(); | 604 ExternalAsyncIO(); |
| 605 } | 605 } |
| 606 | 606 |
| 607 TEST_F(DiskCacheEntryTest, MemoryOnlyExternalAsyncIO) { | 607 TEST_F(DiskCacheEntryTest, MemoryOnlyExternalAsyncIO) { |
| 608 SetMemoryOnlyMode(); | 608 SetMemoryOnlyMode(); |
| 609 InitCache(); | 609 InitCache(); |
| 610 ExternalAsyncIO(); | 610 ExternalAsyncIO(); |
| 611 } | 611 } |
| 612 | 612 |
| 613 // Tests that IOBuffers are not referenced after IO completes. | 613 // Tests that IOBuffers are not referenced after IO completes. |
| 614 void DiskCacheEntryTest::ReleaseBuffer() { | 614 void DiskCacheEntryTest::ReleaseBuffer(int stream_index) { |
| 615 disk_cache::Entry* entry = NULL; | 615 disk_cache::Entry* entry = NULL; |
| 616 ASSERT_EQ(net::OK, CreateEntry("the first key", &entry)); | 616 ASSERT_EQ(net::OK, CreateEntry("the first key", &entry)); |
| 617 ASSERT_TRUE(NULL != entry); | 617 ASSERT_TRUE(NULL != entry); |
| 618 | 618 |
| 619 const int kBufferSize = 1024; | 619 const int kBufferSize = 1024; |
| 620 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kBufferSize)); | 620 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kBufferSize)); |
| 621 CacheTestFillBuffer(buffer->data(), kBufferSize, false); | 621 CacheTestFillBuffer(buffer->data(), kBufferSize, false); |
| 622 | 622 |
| 623 net::ReleaseBufferCompletionCallback cb(buffer.get()); | 623 net::ReleaseBufferCompletionCallback cb(buffer.get()); |
| 624 int rv = | 624 int rv = entry->WriteData( |
| 625 entry->WriteData(0, 0, buffer.get(), kBufferSize, cb.callback(), false); | 625 stream_index, 0, buffer.get(), kBufferSize, cb.callback(), false); |
| 626 EXPECT_EQ(kBufferSize, cb.GetResult(rv)); | 626 EXPECT_EQ(kBufferSize, cb.GetResult(rv)); |
| 627 entry->Close(); | 627 entry->Close(); |
| 628 } | 628 } |
| 629 | 629 |
| 630 TEST_F(DiskCacheEntryTest, ReleaseBuffer) { | 630 TEST_F(DiskCacheEntryTest, ReleaseBuffer) { |
| 631 InitCache(); | 631 InitCache(); |
| 632 cache_impl_->SetFlags(disk_cache::kNoBuffering); | 632 cache_impl_->SetFlags(disk_cache::kNoBuffering); |
| 633 ReleaseBuffer(); | 633 ReleaseBuffer(0); |
| 634 } | 634 } |
| 635 | 635 |
| 636 TEST_F(DiskCacheEntryTest, MemoryOnlyReleaseBuffer) { | 636 TEST_F(DiskCacheEntryTest, MemoryOnlyReleaseBuffer) { |
| 637 SetMemoryOnlyMode(); | 637 SetMemoryOnlyMode(); |
| 638 InitCache(); | 638 InitCache(); |
| 639 ReleaseBuffer(); | 639 ReleaseBuffer(0); |
| 640 } | 640 } |
| 641 | 641 |
| 642 void DiskCacheEntryTest::StreamAccess() { | 642 void DiskCacheEntryTest::StreamAccess() { |
| 643 disk_cache::Entry* entry = NULL; | 643 disk_cache::Entry* entry = NULL; |
| 644 ASSERT_EQ(net::OK, CreateEntry("the first key", &entry)); | 644 ASSERT_EQ(net::OK, CreateEntry("the first key", &entry)); |
| 645 ASSERT_TRUE(NULL != entry); | 645 ASSERT_TRUE(NULL != entry); |
| 646 | 646 |
| 647 const int kBufferSize = 1024; | 647 const int kBufferSize = 1024; |
| 648 const int kNumStreams = 3; | 648 const int kNumStreams = 3; |
| 649 scoped_refptr<net::IOBuffer> reference_buffers[kNumStreams]; | 649 scoped_refptr<net::IOBuffer> reference_buffers[kNumStreams]; |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 751 InitCache(); | 751 InitCache(); |
| 752 GetKey(); | 752 GetKey(); |
| 753 } | 753 } |
| 754 | 754 |
| 755 TEST_F(DiskCacheEntryTest, MemoryOnlyGetKey) { | 755 TEST_F(DiskCacheEntryTest, MemoryOnlyGetKey) { |
| 756 SetMemoryOnlyMode(); | 756 SetMemoryOnlyMode(); |
| 757 InitCache(); | 757 InitCache(); |
| 758 GetKey(); | 758 GetKey(); |
| 759 } | 759 } |
| 760 | 760 |
| 761 void DiskCacheEntryTest::GetTimes() { | 761 void DiskCacheEntryTest::GetTimes(int stream_index) { |
| 762 std::string key("the first key"); | 762 std::string key("the first key"); |
| 763 disk_cache::Entry* entry; | 763 disk_cache::Entry* entry; |
| 764 | 764 |
| 765 Time t1 = Time::Now(); | 765 Time t1 = Time::Now(); |
| 766 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 766 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 767 EXPECT_TRUE(entry->GetLastModified() >= t1); | 767 EXPECT_TRUE(entry->GetLastModified() >= t1); |
| 768 EXPECT_TRUE(entry->GetLastModified() == entry->GetLastUsed()); | 768 EXPECT_TRUE(entry->GetLastModified() == entry->GetLastUsed()); |
| 769 | 769 |
| 770 AddDelay(); | 770 AddDelay(); |
| 771 Time t2 = Time::Now(); | 771 Time t2 = Time::Now(); |
| 772 EXPECT_TRUE(t2 > t1); | 772 EXPECT_TRUE(t2 > t1); |
| 773 EXPECT_EQ(0, WriteData(entry, 0, 200, NULL, 0, false)); | 773 EXPECT_EQ(0, WriteData(entry, stream_index, 200, NULL, 0, false)); |
| 774 if (type_ == net::APP_CACHE) { | 774 if (type_ == net::APP_CACHE) { |
| 775 EXPECT_TRUE(entry->GetLastModified() < t2); | 775 EXPECT_TRUE(entry->GetLastModified() < t2); |
| 776 } else { | 776 } else { |
| 777 EXPECT_TRUE(entry->GetLastModified() >= t2); | 777 EXPECT_TRUE(entry->GetLastModified() >= t2); |
| 778 } | 778 } |
| 779 EXPECT_TRUE(entry->GetLastModified() == entry->GetLastUsed()); | 779 EXPECT_TRUE(entry->GetLastModified() == entry->GetLastUsed()); |
| 780 | 780 |
| 781 AddDelay(); | 781 AddDelay(); |
| 782 Time t3 = Time::Now(); | 782 Time t3 = Time::Now(); |
| 783 EXPECT_TRUE(t3 > t2); | 783 EXPECT_TRUE(t3 > t2); |
| 784 const int kSize = 200; | 784 const int kSize = 200; |
| 785 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); | 785 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); |
| 786 EXPECT_EQ(kSize, ReadData(entry, 0, 0, buffer.get(), kSize)); | 786 EXPECT_EQ(kSize, ReadData(entry, stream_index, 0, buffer.get(), kSize)); |
| 787 if (type_ == net::APP_CACHE) { | 787 if (type_ == net::APP_CACHE) { |
| 788 EXPECT_TRUE(entry->GetLastUsed() < t2); | 788 EXPECT_TRUE(entry->GetLastUsed() < t2); |
| 789 EXPECT_TRUE(entry->GetLastModified() < t2); | 789 EXPECT_TRUE(entry->GetLastModified() < t2); |
| 790 } else if (type_ == net::SHADER_CACHE) { | 790 } else if (type_ == net::SHADER_CACHE) { |
| 791 EXPECT_TRUE(entry->GetLastUsed() < t3); | 791 EXPECT_TRUE(entry->GetLastUsed() < t3); |
| 792 EXPECT_TRUE(entry->GetLastModified() < t3); | 792 EXPECT_TRUE(entry->GetLastModified() < t3); |
| 793 } else { | 793 } else { |
| 794 EXPECT_TRUE(entry->GetLastUsed() >= t3); | 794 EXPECT_TRUE(entry->GetLastUsed() >= t3); |
| 795 EXPECT_TRUE(entry->GetLastModified() < t3); | 795 EXPECT_TRUE(entry->GetLastModified() < t3); |
| 796 } | 796 } |
| 797 entry->Close(); | 797 entry->Close(); |
| 798 } | 798 } |
| 799 | 799 |
| 800 TEST_F(DiskCacheEntryTest, GetTimes) { | 800 TEST_F(DiskCacheEntryTest, GetTimes) { |
| 801 InitCache(); | 801 InitCache(); |
| 802 GetTimes(); | 802 GetTimes(0); |
| 803 } | 803 } |
| 804 | 804 |
| 805 TEST_F(DiskCacheEntryTest, MemoryOnlyGetTimes) { | 805 TEST_F(DiskCacheEntryTest, MemoryOnlyGetTimes) { |
| 806 SetMemoryOnlyMode(); | 806 SetMemoryOnlyMode(); |
| 807 InitCache(); | 807 InitCache(); |
| 808 GetTimes(); | 808 GetTimes(0); |
| 809 } | 809 } |
| 810 | 810 |
| 811 TEST_F(DiskCacheEntryTest, AppCacheGetTimes) { | 811 TEST_F(DiskCacheEntryTest, AppCacheGetTimes) { |
| 812 SetCacheType(net::APP_CACHE); | 812 SetCacheType(net::APP_CACHE); |
| 813 InitCache(); | 813 InitCache(); |
| 814 GetTimes(); | 814 GetTimes(0); |
| 815 } | 815 } |
| 816 | 816 |
| 817 TEST_F(DiskCacheEntryTest, ShaderCacheGetTimes) { | 817 TEST_F(DiskCacheEntryTest, ShaderCacheGetTimes) { |
| 818 SetCacheType(net::SHADER_CACHE); | 818 SetCacheType(net::SHADER_CACHE); |
| 819 InitCache(); | 819 InitCache(); |
| 820 GetTimes(); | 820 GetTimes(0); |
| 821 } | 821 } |
| 822 | 822 |
| 823 void DiskCacheEntryTest::GrowData() { | 823 void DiskCacheEntryTest::GrowData(int stream_index) { |
| 824 std::string key1("the first key"); | 824 std::string key1("the first key"); |
| 825 disk_cache::Entry* entry; | 825 disk_cache::Entry* entry; |
| 826 ASSERT_EQ(net::OK, CreateEntry(key1, &entry)); | 826 ASSERT_EQ(net::OK, CreateEntry(key1, &entry)); |
| 827 | 827 |
| 828 const int kSize = 20000; | 828 const int kSize = 20000; |
| 829 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize)); | 829 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize)); |
| 830 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize)); | 830 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize)); |
| 831 CacheTestFillBuffer(buffer1->data(), kSize, false); | 831 CacheTestFillBuffer(buffer1->data(), kSize, false); |
| 832 memset(buffer2->data(), 0, kSize); | 832 memset(buffer2->data(), 0, kSize); |
| 833 | 833 |
| 834 base::strlcpy(buffer1->data(), "the data", kSize); | 834 base::strlcpy(buffer1->data(), "the data", kSize); |
| 835 EXPECT_EQ(10, WriteData(entry, 0, 0, buffer1.get(), 10, false)); | 835 EXPECT_EQ(10, WriteData(entry, stream_index, 0, buffer1.get(), 10, false)); |
| 836 EXPECT_EQ(10, ReadData(entry, 0, 0, buffer2.get(), 10)); | 836 EXPECT_EQ(10, ReadData(entry, stream_index, 0, buffer2.get(), 10)); |
| 837 EXPECT_STREQ("the data", buffer2->data()); | 837 EXPECT_STREQ("the data", buffer2->data()); |
| 838 EXPECT_EQ(10, entry->GetDataSize(0)); | 838 EXPECT_EQ(10, entry->GetDataSize(stream_index)); |
| 839 | 839 |
| 840 EXPECT_EQ(2000, WriteData(entry, 0, 0, buffer1.get(), 2000, false)); | 840 EXPECT_EQ(2000, |
| 841 EXPECT_EQ(2000, entry->GetDataSize(0)); | 841 WriteData(entry, stream_index, 0, buffer1.get(), 2000, false)); |
| 842 EXPECT_EQ(2000, ReadData(entry, 0, 0, buffer2.get(), 2000)); | 842 EXPECT_EQ(2000, entry->GetDataSize(stream_index)); |
| 843 EXPECT_EQ(2000, ReadData(entry, stream_index, 0, buffer2.get(), 2000)); |
| 843 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 2000)); | 844 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 2000)); |
| 844 | 845 |
| 845 EXPECT_EQ(20000, WriteData(entry, 0, 0, buffer1.get(), kSize, false)); | 846 EXPECT_EQ(20000, |
| 846 EXPECT_EQ(20000, entry->GetDataSize(0)); | 847 WriteData(entry, stream_index, 0, buffer1.get(), kSize, false)); |
| 847 EXPECT_EQ(20000, ReadData(entry, 0, 0, buffer2.get(), kSize)); | 848 EXPECT_EQ(20000, entry->GetDataSize(stream_index)); |
| 849 EXPECT_EQ(20000, ReadData(entry, stream_index, 0, buffer2.get(), kSize)); |
| 848 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), kSize)); | 850 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), kSize)); |
| 849 entry->Close(); | 851 entry->Close(); |
| 850 | 852 |
| 851 memset(buffer2->data(), 0, kSize); | 853 memset(buffer2->data(), 0, kSize); |
| 852 std::string key2("Second key"); | 854 std::string key2("Second key"); |
| 853 ASSERT_EQ(net::OK, CreateEntry(key2, &entry)); | 855 ASSERT_EQ(net::OK, CreateEntry(key2, &entry)); |
| 854 EXPECT_EQ(10, WriteData(entry, 0, 0, buffer1.get(), 10, false)); | 856 EXPECT_EQ(10, WriteData(entry, stream_index, 0, buffer1.get(), 10, false)); |
| 855 EXPECT_EQ(10, entry->GetDataSize(0)); | 857 EXPECT_EQ(10, entry->GetDataSize(stream_index)); |
| 856 entry->Close(); | 858 entry->Close(); |
| 857 | 859 |
| 858 // Go from an internal address to a bigger block size. | 860 // Go from an internal address to a bigger block size. |
| 859 ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); | 861 ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); |
| 860 EXPECT_EQ(2000, WriteData(entry, 0, 0, buffer1.get(), 2000, false)); | 862 EXPECT_EQ(2000, |
| 861 EXPECT_EQ(2000, entry->GetDataSize(0)); | 863 WriteData(entry, stream_index, 0, buffer1.get(), 2000, false)); |
| 862 EXPECT_EQ(2000, ReadData(entry, 0, 0, buffer2.get(), 2000)); | 864 EXPECT_EQ(2000, entry->GetDataSize(stream_index)); |
| 865 EXPECT_EQ(2000, ReadData(entry, stream_index, 0, buffer2.get(), 2000)); |
| 863 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 2000)); | 866 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 2000)); |
| 864 entry->Close(); | 867 entry->Close(); |
| 865 memset(buffer2->data(), 0, kSize); | 868 memset(buffer2->data(), 0, kSize); |
| 866 | 869 |
| 867 // Go from an internal address to an external one. | 870 // Go from an internal address to an external one. |
| 868 ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); | 871 ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); |
| 869 EXPECT_EQ(20000, WriteData(entry, 0, 0, buffer1.get(), kSize, false)); | 872 EXPECT_EQ(20000, |
| 870 EXPECT_EQ(20000, entry->GetDataSize(0)); | 873 WriteData(entry, stream_index, 0, buffer1.get(), kSize, false)); |
| 871 EXPECT_EQ(20000, ReadData(entry, 0, 0, buffer2.get(), kSize)); | 874 EXPECT_EQ(20000, entry->GetDataSize(stream_index)); |
| 875 EXPECT_EQ(20000, ReadData(entry, stream_index, 0, buffer2.get(), kSize)); |
| 872 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), kSize)); | 876 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), kSize)); |
| 873 entry->Close(); | 877 entry->Close(); |
| 874 | 878 |
| 875 // Double check the size from disk. | 879 // Double check the size from disk. |
| 876 ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); | 880 ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); |
| 877 EXPECT_EQ(20000, entry->GetDataSize(0)); | 881 EXPECT_EQ(20000, entry->GetDataSize(stream_index)); |
| 878 | 882 |
| 879 // Now extend the entry without actual data. | 883 // Now extend the entry without actual data. |
| 880 EXPECT_EQ(0, WriteData(entry, 0, 45500, buffer1.get(), 0, false)); | 884 EXPECT_EQ(0, WriteData(entry, stream_index, 45500, buffer1.get(), 0, false)); |
| 881 entry->Close(); | 885 entry->Close(); |
| 882 | 886 |
| 883 // And check again from disk. | 887 // And check again from disk. |
| 884 ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); | 888 ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); |
| 885 EXPECT_EQ(45500, entry->GetDataSize(0)); | 889 EXPECT_EQ(45500, entry->GetDataSize(stream_index)); |
| 886 entry->Close(); | 890 entry->Close(); |
| 887 } | 891 } |
| 888 | 892 |
| 889 TEST_F(DiskCacheEntryTest, GrowData) { | 893 TEST_F(DiskCacheEntryTest, GrowData) { |
| 890 InitCache(); | 894 InitCache(); |
| 891 GrowData(); | 895 GrowData(0); |
| 892 } | 896 } |
| 893 | 897 |
| 894 TEST_F(DiskCacheEntryTest, GrowDataNoBuffer) { | 898 TEST_F(DiskCacheEntryTest, GrowDataNoBuffer) { |
| 895 InitCache(); | 899 InitCache(); |
| 896 cache_impl_->SetFlags(disk_cache::kNoBuffering); | 900 cache_impl_->SetFlags(disk_cache::kNoBuffering); |
| 897 GrowData(); | 901 GrowData(0); |
| 898 } | 902 } |
| 899 | 903 |
| 900 TEST_F(DiskCacheEntryTest, MemoryOnlyGrowData) { | 904 TEST_F(DiskCacheEntryTest, MemoryOnlyGrowData) { |
| 901 SetMemoryOnlyMode(); | 905 SetMemoryOnlyMode(); |
| 902 InitCache(); | 906 InitCache(); |
| 903 GrowData(); | 907 GrowData(0); |
| 904 } | 908 } |
| 905 | 909 |
| 906 void DiskCacheEntryTest::TruncateData() { | 910 void DiskCacheEntryTest::TruncateData(int stream_index) { |
| 907 std::string key("the first key"); | 911 std::string key("the first key"); |
| 908 disk_cache::Entry* entry; | 912 disk_cache::Entry* entry; |
| 909 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 913 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 910 | 914 |
| 911 const int kSize1 = 20000; | 915 const int kSize1 = 20000; |
| 912 const int kSize2 = 20000; | 916 const int kSize2 = 20000; |
| 913 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); | 917 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); |
| 914 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); | 918 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); |
| 915 | 919 |
| 916 CacheTestFillBuffer(buffer1->data(), kSize1, false); | 920 CacheTestFillBuffer(buffer1->data(), kSize1, false); |
| 917 memset(buffer2->data(), 0, kSize2); | 921 memset(buffer2->data(), 0, kSize2); |
| 918 | 922 |
| 919 // Simple truncation: | 923 // Simple truncation: |
| 920 EXPECT_EQ(200, WriteData(entry, 0, 0, buffer1.get(), 200, false)); | 924 EXPECT_EQ(200, WriteData(entry, stream_index, 0, buffer1.get(), 200, false)); |
| 921 EXPECT_EQ(200, entry->GetDataSize(0)); | 925 EXPECT_EQ(200, entry->GetDataSize(stream_index)); |
| 922 EXPECT_EQ(100, WriteData(entry, 0, 0, buffer1.get(), 100, false)); | 926 EXPECT_EQ(100, WriteData(entry, stream_index, 0, buffer1.get(), 100, false)); |
| 923 EXPECT_EQ(200, entry->GetDataSize(0)); | 927 EXPECT_EQ(200, entry->GetDataSize(stream_index)); |
| 924 EXPECT_EQ(100, WriteData(entry, 0, 0, buffer1.get(), 100, true)); | 928 EXPECT_EQ(100, WriteData(entry, stream_index, 0, buffer1.get(), 100, true)); |
| 925 EXPECT_EQ(100, entry->GetDataSize(0)); | 929 EXPECT_EQ(100, entry->GetDataSize(stream_index)); |
| 926 EXPECT_EQ(0, WriteData(entry, 0, 50, buffer1.get(), 0, true)); | 930 EXPECT_EQ(0, WriteData(entry, stream_index, 50, buffer1.get(), 0, true)); |
| 927 EXPECT_EQ(50, entry->GetDataSize(0)); | 931 EXPECT_EQ(50, entry->GetDataSize(stream_index)); |
| 928 EXPECT_EQ(0, WriteData(entry, 0, 0, buffer1.get(), 0, true)); | 932 EXPECT_EQ(0, WriteData(entry, stream_index, 0, buffer1.get(), 0, true)); |
| 929 EXPECT_EQ(0, entry->GetDataSize(0)); | 933 EXPECT_EQ(0, entry->GetDataSize(stream_index)); |
| 930 entry->Close(); | 934 entry->Close(); |
| 931 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 935 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
| 932 | 936 |
| 933 // Go to an external file. | 937 // Go to an external file. |
| 934 EXPECT_EQ(20000, WriteData(entry, 0, 0, buffer1.get(), 20000, true)); | 938 EXPECT_EQ(20000, |
| 935 EXPECT_EQ(20000, entry->GetDataSize(0)); | 939 WriteData(entry, stream_index, 0, buffer1.get(), 20000, true)); |
| 936 EXPECT_EQ(20000, ReadData(entry, 0, 0, buffer2.get(), 20000)); | 940 EXPECT_EQ(20000, entry->GetDataSize(stream_index)); |
| 941 EXPECT_EQ(20000, ReadData(entry, stream_index, 0, buffer2.get(), 20000)); |
| 937 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 20000)); | 942 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 20000)); |
| 938 memset(buffer2->data(), 0, kSize2); | 943 memset(buffer2->data(), 0, kSize2); |
| 939 | 944 |
| 940 // External file truncation | 945 // External file truncation |
| 941 EXPECT_EQ(18000, WriteData(entry, 0, 0, buffer1.get(), 18000, false)); | 946 EXPECT_EQ(18000, |
| 942 EXPECT_EQ(20000, entry->GetDataSize(0)); | 947 WriteData(entry, stream_index, 0, buffer1.get(), 18000, false)); |
| 943 EXPECT_EQ(18000, WriteData(entry, 0, 0, buffer1.get(), 18000, true)); | 948 EXPECT_EQ(20000, entry->GetDataSize(stream_index)); |
| 944 EXPECT_EQ(18000, entry->GetDataSize(0)); | 949 EXPECT_EQ(18000, |
| 945 EXPECT_EQ(0, WriteData(entry, 0, 17500, buffer1.get(), 0, true)); | 950 WriteData(entry, stream_index, 0, buffer1.get(), 18000, true)); |
| 946 EXPECT_EQ(17500, entry->GetDataSize(0)); | 951 EXPECT_EQ(18000, entry->GetDataSize(stream_index)); |
| 952 EXPECT_EQ(0, WriteData(entry, stream_index, 17500, buffer1.get(), 0, true)); |
| 953 EXPECT_EQ(17500, entry->GetDataSize(stream_index)); |
| 947 | 954 |
| 948 // And back to an internal block. | 955 // And back to an internal block. |
| 949 EXPECT_EQ(600, WriteData(entry, 0, 1000, buffer1.get(), 600, true)); | 956 EXPECT_EQ(600, |
| 950 EXPECT_EQ(1600, entry->GetDataSize(0)); | 957 WriteData(entry, stream_index, 1000, buffer1.get(), 600, true)); |
| 951 EXPECT_EQ(600, ReadData(entry, 0, 1000, buffer2.get(), 600)); | 958 EXPECT_EQ(1600, entry->GetDataSize(stream_index)); |
| 959 EXPECT_EQ(600, ReadData(entry, stream_index, 1000, buffer2.get(), 600)); |
| 952 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 600)); | 960 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 600)); |
| 953 EXPECT_EQ(1000, ReadData(entry, 0, 0, buffer2.get(), 1000)); | 961 EXPECT_EQ(1000, ReadData(entry, stream_index, 0, buffer2.get(), 1000)); |
| 954 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 1000)) | 962 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 1000)) |
| 955 << "Preserves previous data"; | 963 << "Preserves previous data"; |
| 956 | 964 |
| 957 // Go from external file to zero length. | 965 // Go from external file to zero length. |
| 958 EXPECT_EQ(20000, WriteData(entry, 0, 0, buffer1.get(), 20000, true)); | 966 EXPECT_EQ(20000, |
| 959 EXPECT_EQ(20000, entry->GetDataSize(0)); | 967 WriteData(entry, stream_index, 0, buffer1.get(), 20000, true)); |
| 960 EXPECT_EQ(0, WriteData(entry, 0, 0, buffer1.get(), 0, true)); | 968 EXPECT_EQ(20000, entry->GetDataSize(stream_index)); |
| 961 EXPECT_EQ(0, entry->GetDataSize(0)); | 969 EXPECT_EQ(0, WriteData(entry, stream_index, 0, buffer1.get(), 0, true)); |
| 970 EXPECT_EQ(0, entry->GetDataSize(stream_index)); |
| 962 | 971 |
| 963 entry->Close(); | 972 entry->Close(); |
| 964 } | 973 } |
| 965 | 974 |
| 966 TEST_F(DiskCacheEntryTest, TruncateData) { | 975 TEST_F(DiskCacheEntryTest, TruncateData) { |
| 967 InitCache(); | 976 InitCache(); |
| 968 TruncateData(); | 977 TruncateData(0); |
| 969 } | 978 } |
| 970 | 979 |
| 971 TEST_F(DiskCacheEntryTest, TruncateDataNoBuffer) { | 980 TEST_F(DiskCacheEntryTest, TruncateDataNoBuffer) { |
| 972 InitCache(); | 981 InitCache(); |
| 973 cache_impl_->SetFlags(disk_cache::kNoBuffering); | 982 cache_impl_->SetFlags(disk_cache::kNoBuffering); |
| 974 TruncateData(); | 983 TruncateData(0); |
| 975 } | 984 } |
| 976 | 985 |
| 977 TEST_F(DiskCacheEntryTest, MemoryOnlyTruncateData) { | 986 TEST_F(DiskCacheEntryTest, MemoryOnlyTruncateData) { |
| 978 SetMemoryOnlyMode(); | 987 SetMemoryOnlyMode(); |
| 979 InitCache(); | 988 InitCache(); |
| 980 TruncateData(); | 989 TruncateData(0); |
| 981 } | 990 } |
| 982 | 991 |
| 983 void DiskCacheEntryTest::ZeroLengthIO() { | 992 void DiskCacheEntryTest::ZeroLengthIO(int stream_index) { |
| 984 std::string key("the first key"); | 993 std::string key("the first key"); |
| 985 disk_cache::Entry* entry; | 994 disk_cache::Entry* entry; |
| 986 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 995 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 987 | 996 |
| 988 EXPECT_EQ(0, ReadData(entry, 0, 0, NULL, 0)); | 997 EXPECT_EQ(0, ReadData(entry, stream_index, 0, NULL, 0)); |
| 989 EXPECT_EQ(0, WriteData(entry, 0, 0, NULL, 0, false)); | 998 EXPECT_EQ(0, WriteData(entry, stream_index, 0, NULL, 0, false)); |
| 990 | 999 |
| 991 // This write should extend the entry. | 1000 // This write should extend the entry. |
| 992 EXPECT_EQ(0, WriteData(entry, 0, 1000, NULL, 0, false)); | 1001 EXPECT_EQ(0, WriteData(entry, stream_index, 1000, NULL, 0, false)); |
| 993 EXPECT_EQ(0, ReadData(entry, 0, 500, NULL, 0)); | 1002 EXPECT_EQ(0, ReadData(entry, stream_index, 500, NULL, 0)); |
| 994 EXPECT_EQ(0, ReadData(entry, 0, 2000, NULL, 0)); | 1003 EXPECT_EQ(0, ReadData(entry, stream_index, 2000, NULL, 0)); |
| 995 EXPECT_EQ(1000, entry->GetDataSize(0)); | 1004 EXPECT_EQ(1000, entry->GetDataSize(stream_index)); |
| 996 | 1005 |
| 997 EXPECT_EQ(0, WriteData(entry, 0, 100000, NULL, 0, true)); | 1006 EXPECT_EQ(0, WriteData(entry, stream_index, 100000, NULL, 0, true)); |
| 998 EXPECT_EQ(0, ReadData(entry, 0, 50000, NULL, 0)); | 1007 EXPECT_EQ(0, ReadData(entry, stream_index, 50000, NULL, 0)); |
| 999 EXPECT_EQ(100000, entry->GetDataSize(0)); | 1008 EXPECT_EQ(100000, entry->GetDataSize(stream_index)); |
| 1000 | 1009 |
| 1001 // Let's verify the actual content. | 1010 // Let's verify the actual content. |
| 1002 const int kSize = 20; | 1011 const int kSize = 20; |
| 1003 const char zeros[kSize] = {}; | 1012 const char zeros[kSize] = {}; |
| 1004 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); | 1013 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); |
| 1005 | 1014 |
| 1006 CacheTestFillBuffer(buffer->data(), kSize, false); | 1015 CacheTestFillBuffer(buffer->data(), kSize, false); |
| 1007 EXPECT_EQ(kSize, ReadData(entry, 0, 500, buffer.get(), kSize)); | 1016 EXPECT_EQ(kSize, ReadData(entry, stream_index, 500, buffer.get(), kSize)); |
| 1008 EXPECT_TRUE(!memcmp(buffer->data(), zeros, kSize)); | 1017 EXPECT_TRUE(!memcmp(buffer->data(), zeros, kSize)); |
| 1009 | 1018 |
| 1010 CacheTestFillBuffer(buffer->data(), kSize, false); | 1019 CacheTestFillBuffer(buffer->data(), kSize, false); |
| 1011 EXPECT_EQ(kSize, ReadData(entry, 0, 5000, buffer.get(), kSize)); | 1020 EXPECT_EQ(kSize, ReadData(entry, stream_index, 5000, buffer.get(), kSize)); |
| 1012 EXPECT_TRUE(!memcmp(buffer->data(), zeros, kSize)); | 1021 EXPECT_TRUE(!memcmp(buffer->data(), zeros, kSize)); |
| 1013 | 1022 |
| 1014 CacheTestFillBuffer(buffer->data(), kSize, false); | 1023 CacheTestFillBuffer(buffer->data(), kSize, false); |
| 1015 EXPECT_EQ(kSize, ReadData(entry, 0, 50000, buffer.get(), kSize)); | 1024 EXPECT_EQ(kSize, ReadData(entry, stream_index, 50000, buffer.get(), kSize)); |
| 1016 EXPECT_TRUE(!memcmp(buffer->data(), zeros, kSize)); | 1025 EXPECT_TRUE(!memcmp(buffer->data(), zeros, kSize)); |
| 1017 | 1026 |
| 1018 entry->Close(); | 1027 entry->Close(); |
| 1019 } | 1028 } |
| 1020 | 1029 |
| 1021 TEST_F(DiskCacheEntryTest, ZeroLengthIO) { | 1030 TEST_F(DiskCacheEntryTest, ZeroLengthIO) { |
| 1022 InitCache(); | 1031 InitCache(); |
| 1023 ZeroLengthIO(); | 1032 ZeroLengthIO(0); |
| 1024 } | 1033 } |
| 1025 | 1034 |
| 1026 TEST_F(DiskCacheEntryTest, ZeroLengthIONoBuffer) { | 1035 TEST_F(DiskCacheEntryTest, ZeroLengthIONoBuffer) { |
| 1027 InitCache(); | 1036 InitCache(); |
| 1028 cache_impl_->SetFlags(disk_cache::kNoBuffering); | 1037 cache_impl_->SetFlags(disk_cache::kNoBuffering); |
| 1029 ZeroLengthIO(); | 1038 ZeroLengthIO(0); |
| 1030 } | 1039 } |
| 1031 | 1040 |
| 1032 TEST_F(DiskCacheEntryTest, MemoryOnlyZeroLengthIO) { | 1041 TEST_F(DiskCacheEntryTest, MemoryOnlyZeroLengthIO) { |
| 1033 SetMemoryOnlyMode(); | 1042 SetMemoryOnlyMode(); |
| 1034 InitCache(); | 1043 InitCache(); |
| 1035 ZeroLengthIO(); | 1044 ZeroLengthIO(0); |
| 1036 } | 1045 } |
| 1037 | 1046 |
| 1038 // Tests that we handle the content correctly when buffering, a feature of the | 1047 // Tests that we handle the content correctly when buffering, a feature of the |
| 1039 // standard cache that permits fast responses to certain reads. | 1048 // standard cache that permits fast responses to certain reads. |
| 1040 void DiskCacheEntryTest::Buffering() { | 1049 void DiskCacheEntryTest::Buffering() { |
| 1041 std::string key("the first key"); | 1050 std::string key("the first key"); |
| 1042 disk_cache::Entry* entry; | 1051 disk_cache::Entry* entry; |
| 1043 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 1052 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 1044 | 1053 |
| 1045 const int kSize = 200; | 1054 const int kSize = 200; |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1142 } | 1151 } |
| 1143 | 1152 |
| 1144 TEST_F(DiskCacheEntryTest, MemoryOnlySizeAtCreate) { | 1153 TEST_F(DiskCacheEntryTest, MemoryOnlySizeAtCreate) { |
| 1145 SetMemoryOnlyMode(); | 1154 SetMemoryOnlyMode(); |
| 1146 InitCache(); | 1155 InitCache(); |
| 1147 SizeAtCreate(); | 1156 SizeAtCreate(); |
| 1148 } | 1157 } |
| 1149 | 1158 |
| 1150 // Some extra tests to make sure that buffering works properly when changing | 1159 // Some extra tests to make sure that buffering works properly when changing |
| 1151 // the entry size. | 1160 // the entry size. |
| 1152 void DiskCacheEntryTest::SizeChanges() { | 1161 void DiskCacheEntryTest::SizeChanges(int stream_index) { |
| 1153 std::string key("the first key"); | 1162 std::string key("the first key"); |
| 1154 disk_cache::Entry* entry; | 1163 disk_cache::Entry* entry; |
| 1155 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 1164 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 1156 | 1165 |
| 1157 const int kSize = 200; | 1166 const int kSize = 200; |
| 1158 const char zeros[kSize] = {}; | 1167 const char zeros[kSize] = {}; |
| 1159 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize)); | 1168 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize)); |
| 1160 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize)); | 1169 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize)); |
| 1161 CacheTestFillBuffer(buffer1->data(), kSize, true); | 1170 CacheTestFillBuffer(buffer1->data(), kSize, true); |
| 1162 CacheTestFillBuffer(buffer2->data(), kSize, true); | 1171 CacheTestFillBuffer(buffer2->data(), kSize, true); |
| 1163 | 1172 |
| 1164 EXPECT_EQ(kSize, WriteData(entry, 1, 0, buffer1.get(), kSize, true)); | 1173 EXPECT_EQ(kSize, |
| 1165 EXPECT_EQ(kSize, WriteData(entry, 1, 17000, buffer1.get(), kSize, true)); | 1174 WriteData(entry, stream_index, 0, buffer1.get(), kSize, true)); |
| 1166 EXPECT_EQ(kSize, WriteData(entry, 1, 23000, buffer1.get(), kSize, true)); | 1175 EXPECT_EQ(kSize, |
| 1176 WriteData(entry, stream_index, 17000, buffer1.get(), kSize, true)); |
| 1177 EXPECT_EQ(kSize, |
| 1178 WriteData(entry, stream_index, 23000, buffer1.get(), kSize, true)); |
| 1167 entry->Close(); | 1179 entry->Close(); |
| 1168 | 1180 |
| 1169 // Extend the file and read between the old size and the new write. | 1181 // Extend the file and read between the old size and the new write. |
| 1170 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 1182 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
| 1171 EXPECT_EQ(23000 + kSize, entry->GetDataSize(1)); | 1183 EXPECT_EQ(23000 + kSize, entry->GetDataSize(stream_index)); |
| 1172 EXPECT_EQ(kSize, WriteData(entry, 1, 25000, buffer1.get(), kSize, true)); | 1184 EXPECT_EQ(kSize, |
| 1173 EXPECT_EQ(25000 + kSize, entry->GetDataSize(1)); | 1185 WriteData(entry, stream_index, 25000, buffer1.get(), kSize, true)); |
| 1174 EXPECT_EQ(kSize, ReadData(entry, 1, 24000, buffer2.get(), kSize)); | 1186 EXPECT_EQ(25000 + kSize, entry->GetDataSize(stream_index)); |
| 1187 EXPECT_EQ(kSize, ReadData(entry, stream_index, 24000, buffer2.get(), kSize)); |
| 1175 EXPECT_TRUE(!memcmp(buffer2->data(), zeros, kSize)); | 1188 EXPECT_TRUE(!memcmp(buffer2->data(), zeros, kSize)); |
| 1176 | 1189 |
| 1177 // Read at the end of the old file size. | 1190 // Read at the end of the old file size. |
| 1178 EXPECT_EQ(kSize, | 1191 EXPECT_EQ( |
| 1179 ReadData(entry, 1, 23000 + kSize - 35, buffer2.get(), kSize)); | 1192 kSize, |
| 1193 ReadData(entry, stream_index, 23000 + kSize - 35, buffer2.get(), kSize)); |
| 1180 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data() + kSize - 35, 35)); | 1194 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data() + kSize - 35, 35)); |
| 1181 | 1195 |
| 1182 // Read slightly before the last write. | 1196 // Read slightly before the last write. |
| 1183 CacheTestFillBuffer(buffer2->data(), kSize, true); | 1197 CacheTestFillBuffer(buffer2->data(), kSize, true); |
| 1184 EXPECT_EQ(kSize, ReadData(entry, 1, 24900, buffer2.get(), kSize)); | 1198 EXPECT_EQ(kSize, ReadData(entry, stream_index, 24900, buffer2.get(), kSize)); |
| 1185 EXPECT_TRUE(!memcmp(buffer2->data(), zeros, 100)); | 1199 EXPECT_TRUE(!memcmp(buffer2->data(), zeros, 100)); |
| 1186 EXPECT_TRUE(!memcmp(buffer2->data() + 100, buffer1->data(), kSize - 100)); | 1200 EXPECT_TRUE(!memcmp(buffer2->data() + 100, buffer1->data(), kSize - 100)); |
| 1187 | 1201 |
| 1188 // Extend the entry a little more. | 1202 // Extend the entry a little more. |
| 1189 EXPECT_EQ(kSize, WriteData(entry, 1, 26000, buffer1.get(), kSize, true)); | 1203 EXPECT_EQ(kSize, |
| 1190 EXPECT_EQ(26000 + kSize, entry->GetDataSize(1)); | 1204 WriteData(entry, stream_index, 26000, buffer1.get(), kSize, true)); |
| 1205 EXPECT_EQ(26000 + kSize, entry->GetDataSize(stream_index)); |
| 1191 CacheTestFillBuffer(buffer2->data(), kSize, true); | 1206 CacheTestFillBuffer(buffer2->data(), kSize, true); |
| 1192 EXPECT_EQ(kSize, ReadData(entry, 1, 25900, buffer2.get(), kSize)); | 1207 EXPECT_EQ(kSize, ReadData(entry, stream_index, 25900, buffer2.get(), kSize)); |
| 1193 EXPECT_TRUE(!memcmp(buffer2->data(), zeros, 100)); | 1208 EXPECT_TRUE(!memcmp(buffer2->data(), zeros, 100)); |
| 1194 EXPECT_TRUE(!memcmp(buffer2->data() + 100, buffer1->data(), kSize - 100)); | 1209 EXPECT_TRUE(!memcmp(buffer2->data() + 100, buffer1->data(), kSize - 100)); |
| 1195 | 1210 |
| 1196 // And now reduce the size. | 1211 // And now reduce the size. |
| 1197 EXPECT_EQ(kSize, WriteData(entry, 1, 25000, buffer1.get(), kSize, true)); | 1212 EXPECT_EQ(kSize, |
| 1198 EXPECT_EQ(25000 + kSize, entry->GetDataSize(1)); | 1213 WriteData(entry, stream_index, 25000, buffer1.get(), kSize, true)); |
| 1199 EXPECT_EQ(28, ReadData(entry, 1, 25000 + kSize - 28, buffer2.get(), kSize)); | 1214 EXPECT_EQ(25000 + kSize, entry->GetDataSize(stream_index)); |
| 1215 EXPECT_EQ( |
| 1216 28, |
| 1217 ReadData(entry, stream_index, 25000 + kSize - 28, buffer2.get(), kSize)); |
| 1200 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data() + kSize - 28, 28)); | 1218 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data() + kSize - 28, 28)); |
| 1201 | 1219 |
| 1202 // Reduce the size with a buffer that is not extending the size. | 1220 // Reduce the size with a buffer that is not extending the size. |
| 1203 EXPECT_EQ(kSize, WriteData(entry, 1, 24000, buffer1.get(), kSize, false)); | 1221 EXPECT_EQ(kSize, |
| 1204 EXPECT_EQ(25000 + kSize, entry->GetDataSize(1)); | 1222 WriteData(entry, stream_index, 24000, buffer1.get(), kSize, false)); |
| 1205 EXPECT_EQ(kSize, WriteData(entry, 1, 24500, buffer1.get(), kSize, true)); | 1223 EXPECT_EQ(25000 + kSize, entry->GetDataSize(stream_index)); |
| 1206 EXPECT_EQ(24500 + kSize, entry->GetDataSize(1)); | 1224 EXPECT_EQ(kSize, |
| 1207 EXPECT_EQ(kSize, ReadData(entry, 1, 23900, buffer2.get(), kSize)); | 1225 WriteData(entry, stream_index, 24500, buffer1.get(), kSize, true)); |
| 1226 EXPECT_EQ(24500 + kSize, entry->GetDataSize(stream_index)); |
| 1227 EXPECT_EQ(kSize, ReadData(entry, stream_index, 23900, buffer2.get(), kSize)); |
| 1208 EXPECT_TRUE(!memcmp(buffer2->data(), zeros, 100)); | 1228 EXPECT_TRUE(!memcmp(buffer2->data(), zeros, 100)); |
| 1209 EXPECT_TRUE(!memcmp(buffer2->data() + 100, buffer1->data(), kSize - 100)); | 1229 EXPECT_TRUE(!memcmp(buffer2->data() + 100, buffer1->data(), kSize - 100)); |
| 1210 | 1230 |
| 1211 // And now reduce the size below the old size. | 1231 // And now reduce the size below the old size. |
| 1212 EXPECT_EQ(kSize, WriteData(entry, 1, 19000, buffer1.get(), kSize, true)); | 1232 EXPECT_EQ(kSize, |
| 1213 EXPECT_EQ(19000 + kSize, entry->GetDataSize(1)); | 1233 WriteData(entry, stream_index, 19000, buffer1.get(), kSize, true)); |
| 1214 EXPECT_EQ(kSize, ReadData(entry, 1, 18900, buffer2.get(), kSize)); | 1234 EXPECT_EQ(19000 + kSize, entry->GetDataSize(stream_index)); |
| 1235 EXPECT_EQ(kSize, ReadData(entry, stream_index, 18900, buffer2.get(), kSize)); |
| 1215 EXPECT_TRUE(!memcmp(buffer2->data(), zeros, 100)); | 1236 EXPECT_TRUE(!memcmp(buffer2->data(), zeros, 100)); |
| 1216 EXPECT_TRUE(!memcmp(buffer2->data() + 100, buffer1->data(), kSize - 100)); | 1237 EXPECT_TRUE(!memcmp(buffer2->data() + 100, buffer1->data(), kSize - 100)); |
| 1217 | 1238 |
| 1218 // Verify that the actual file is truncated. | 1239 // Verify that the actual file is truncated. |
| 1219 entry->Close(); | 1240 entry->Close(); |
| 1220 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 1241 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
| 1221 EXPECT_EQ(19000 + kSize, entry->GetDataSize(1)); | 1242 EXPECT_EQ(19000 + kSize, entry->GetDataSize(stream_index)); |
| 1222 | 1243 |
| 1223 // Extend the newly opened file with a zero length write, expect zero fill. | 1244 // Extend the newly opened file with a zero length write, expect zero fill. |
| 1224 EXPECT_EQ(0, WriteData(entry, 1, 20000 + kSize, buffer1.get(), 0, false)); | 1245 EXPECT_EQ( |
| 1225 EXPECT_EQ(kSize, ReadData(entry, 1, 19000 + kSize, buffer1.get(), kSize)); | 1246 0, |
| 1247 WriteData(entry, stream_index, 20000 + kSize, buffer1.get(), 0, false)); |
| 1248 EXPECT_EQ(kSize, |
| 1249 ReadData(entry, stream_index, 19000 + kSize, buffer1.get(), kSize)); |
| 1226 EXPECT_EQ(0, memcmp(buffer1->data(), zeros, kSize)); | 1250 EXPECT_EQ(0, memcmp(buffer1->data(), zeros, kSize)); |
| 1227 | 1251 |
| 1228 entry->Close(); | 1252 entry->Close(); |
| 1229 } | 1253 } |
| 1230 | 1254 |
| 1231 TEST_F(DiskCacheEntryTest, SizeChanges) { | 1255 TEST_F(DiskCacheEntryTest, SizeChanges) { |
| 1232 InitCache(); | 1256 InitCache(); |
| 1233 SizeChanges(); | 1257 SizeChanges(1); |
| 1234 } | 1258 } |
| 1235 | 1259 |
| 1236 TEST_F(DiskCacheEntryTest, SizeChangesNoBuffer) { | 1260 TEST_F(DiskCacheEntryTest, SizeChangesNoBuffer) { |
| 1237 InitCache(); | 1261 InitCache(); |
| 1238 cache_impl_->SetFlags(disk_cache::kNoBuffering); | 1262 cache_impl_->SetFlags(disk_cache::kNoBuffering); |
| 1239 SizeChanges(); | 1263 SizeChanges(1); |
| 1240 } | 1264 } |
| 1241 | 1265 |
| 1242 // Write more than the total cache capacity but to a single entry. |size| is the | 1266 // Write more than the total cache capacity but to a single entry. |size| is the |
| 1243 // amount of bytes to write each time. | 1267 // amount of bytes to write each time. |
| 1244 void DiskCacheEntryTest::ReuseEntry(int size) { | 1268 void DiskCacheEntryTest::ReuseEntry(int size, int stream_index) { |
| 1245 std::string key1("the first key"); | 1269 std::string key1("the first key"); |
| 1246 disk_cache::Entry* entry; | 1270 disk_cache::Entry* entry; |
| 1247 ASSERT_EQ(net::OK, CreateEntry(key1, &entry)); | 1271 ASSERT_EQ(net::OK, CreateEntry(key1, &entry)); |
| 1248 | 1272 |
| 1249 entry->Close(); | 1273 entry->Close(); |
| 1250 std::string key2("the second key"); | 1274 std::string key2("the second key"); |
| 1251 ASSERT_EQ(net::OK, CreateEntry(key2, &entry)); | 1275 ASSERT_EQ(net::OK, CreateEntry(key2, &entry)); |
| 1252 | 1276 |
| 1253 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(size)); | 1277 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(size)); |
| 1254 CacheTestFillBuffer(buffer->data(), size, false); | 1278 CacheTestFillBuffer(buffer->data(), size, false); |
| 1255 | 1279 |
| 1256 for (int i = 0; i < 15; i++) { | 1280 for (int i = 0; i < 15; i++) { |
| 1257 EXPECT_EQ(0, WriteData(entry, 0, 0, buffer.get(), 0, true)); | 1281 EXPECT_EQ(0, WriteData(entry, stream_index, 0, buffer.get(), 0, true)); |
| 1258 EXPECT_EQ(size, WriteData(entry, 0, 0, buffer.get(), size, false)); | 1282 EXPECT_EQ(size, |
| 1283 WriteData(entry, stream_index, 0, buffer.get(), size, false)); |
| 1259 entry->Close(); | 1284 entry->Close(); |
| 1260 ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); | 1285 ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); |
| 1261 } | 1286 } |
| 1262 | 1287 |
| 1263 entry->Close(); | 1288 entry->Close(); |
| 1264 ASSERT_EQ(net::OK, OpenEntry(key1, &entry)) << "have not evicted this entry"; | 1289 ASSERT_EQ(net::OK, OpenEntry(key1, &entry)) << "have not evicted this entry"; |
| 1265 entry->Close(); | 1290 entry->Close(); |
| 1266 } | 1291 } |
| 1267 | 1292 |
| 1268 TEST_F(DiskCacheEntryTest, ReuseExternalEntry) { | 1293 TEST_F(DiskCacheEntryTest, ReuseExternalEntry) { |
| 1269 SetMaxSize(200 * 1024); | 1294 SetMaxSize(200 * 1024); |
| 1270 InitCache(); | 1295 InitCache(); |
| 1271 ReuseEntry(20 * 1024); | 1296 ReuseEntry(20 * 1024, 0); |
| 1272 } | 1297 } |
| 1273 | 1298 |
| 1274 TEST_F(DiskCacheEntryTest, MemoryOnlyReuseExternalEntry) { | 1299 TEST_F(DiskCacheEntryTest, MemoryOnlyReuseExternalEntry) { |
| 1275 SetMemoryOnlyMode(); | 1300 SetMemoryOnlyMode(); |
| 1276 SetMaxSize(200 * 1024); | 1301 SetMaxSize(200 * 1024); |
| 1277 InitCache(); | 1302 InitCache(); |
| 1278 ReuseEntry(20 * 1024); | 1303 ReuseEntry(20 * 1024, 0); |
| 1279 } | 1304 } |
| 1280 | 1305 |
| 1281 TEST_F(DiskCacheEntryTest, ReuseInternalEntry) { | 1306 TEST_F(DiskCacheEntryTest, ReuseInternalEntry) { |
| 1282 SetMaxSize(100 * 1024); | 1307 SetMaxSize(100 * 1024); |
| 1283 InitCache(); | 1308 InitCache(); |
| 1284 ReuseEntry(10 * 1024); | 1309 ReuseEntry(10 * 1024, 0); |
| 1285 } | 1310 } |
| 1286 | 1311 |
| 1287 TEST_F(DiskCacheEntryTest, MemoryOnlyReuseInternalEntry) { | 1312 TEST_F(DiskCacheEntryTest, MemoryOnlyReuseInternalEntry) { |
| 1288 SetMemoryOnlyMode(); | 1313 SetMemoryOnlyMode(); |
| 1289 SetMaxSize(100 * 1024); | 1314 SetMaxSize(100 * 1024); |
| 1290 InitCache(); | 1315 InitCache(); |
| 1291 ReuseEntry(10 * 1024); | 1316 ReuseEntry(10 * 1024, 0); |
| 1292 } | 1317 } |
| 1293 | 1318 |
| 1294 // Reading somewhere that was not written should return zeros. | 1319 // Reading somewhere that was not written should return zeros. |
| 1295 void DiskCacheEntryTest::InvalidData() { | 1320 void DiskCacheEntryTest::InvalidData(int stream_index) { |
| 1296 std::string key("the first key"); | 1321 std::string key("the first key"); |
| 1297 disk_cache::Entry* entry; | 1322 disk_cache::Entry* entry; |
| 1298 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 1323 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 1299 | 1324 |
| 1300 const int kSize1 = 20000; | 1325 const int kSize1 = 20000; |
| 1301 const int kSize2 = 20000; | 1326 const int kSize2 = 20000; |
| 1302 const int kSize3 = 20000; | 1327 const int kSize3 = 20000; |
| 1303 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); | 1328 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); |
| 1304 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); | 1329 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); |
| 1305 scoped_refptr<net::IOBuffer> buffer3(new net::IOBuffer(kSize3)); | 1330 scoped_refptr<net::IOBuffer> buffer3(new net::IOBuffer(kSize3)); |
| 1306 | 1331 |
| 1307 CacheTestFillBuffer(buffer1->data(), kSize1, false); | 1332 CacheTestFillBuffer(buffer1->data(), kSize1, false); |
| 1308 memset(buffer2->data(), 0, kSize2); | 1333 memset(buffer2->data(), 0, kSize2); |
| 1309 | 1334 |
| 1310 // Simple data grow: | 1335 // Simple data grow: |
| 1311 EXPECT_EQ(200, WriteData(entry, 0, 400, buffer1.get(), 200, false)); | 1336 EXPECT_EQ(200, |
| 1312 EXPECT_EQ(600, entry->GetDataSize(0)); | 1337 WriteData(entry, stream_index, 400, buffer1.get(), 200, false)); |
| 1313 EXPECT_EQ(100, ReadData(entry, 0, 300, buffer3.get(), 100)); | 1338 EXPECT_EQ(600, entry->GetDataSize(stream_index)); |
| 1339 EXPECT_EQ(100, ReadData(entry, stream_index, 300, buffer3.get(), 100)); |
| 1314 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100)); | 1340 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100)); |
| 1315 entry->Close(); | 1341 entry->Close(); |
| 1316 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 1342 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
| 1317 | 1343 |
| 1318 // The entry is now on disk. Load it and extend it. | 1344 // The entry is now on disk. Load it and extend it. |
| 1319 EXPECT_EQ(200, WriteData(entry, 0, 800, buffer1.get(), 200, false)); | 1345 EXPECT_EQ(200, |
| 1320 EXPECT_EQ(1000, entry->GetDataSize(0)); | 1346 WriteData(entry, stream_index, 800, buffer1.get(), 200, false)); |
| 1321 EXPECT_EQ(100, ReadData(entry, 0, 700, buffer3.get(), 100)); | 1347 EXPECT_EQ(1000, entry->GetDataSize(stream_index)); |
| 1348 EXPECT_EQ(100, ReadData(entry, stream_index, 700, buffer3.get(), 100)); |
| 1322 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100)); | 1349 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100)); |
| 1323 entry->Close(); | 1350 entry->Close(); |
| 1324 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 1351 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
| 1325 | 1352 |
| 1326 // This time using truncate. | 1353 // This time using truncate. |
| 1327 EXPECT_EQ(200, WriteData(entry, 0, 1800, buffer1.get(), 200, true)); | 1354 EXPECT_EQ(200, |
| 1328 EXPECT_EQ(2000, entry->GetDataSize(0)); | 1355 WriteData(entry, stream_index, 1800, buffer1.get(), 200, true)); |
| 1329 EXPECT_EQ(100, ReadData(entry, 0, 1500, buffer3.get(), 100)); | 1356 EXPECT_EQ(2000, entry->GetDataSize(stream_index)); |
| 1357 EXPECT_EQ(100, ReadData(entry, stream_index, 1500, buffer3.get(), 100)); |
| 1330 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100)); | 1358 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100)); |
| 1331 | 1359 |
| 1332 // Go to an external file. | 1360 // Go to an external file. |
| 1333 EXPECT_EQ(200, WriteData(entry, 0, 19800, buffer1.get(), 200, false)); | 1361 EXPECT_EQ(200, |
| 1334 EXPECT_EQ(20000, entry->GetDataSize(0)); | 1362 WriteData(entry, stream_index, 19800, buffer1.get(), 200, false)); |
| 1335 EXPECT_EQ(4000, ReadData(entry, 0, 14000, buffer3.get(), 4000)); | 1363 EXPECT_EQ(20000, entry->GetDataSize(stream_index)); |
| 1364 EXPECT_EQ(4000, ReadData(entry, stream_index, 14000, buffer3.get(), 4000)); |
| 1336 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 4000)); | 1365 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 4000)); |
| 1337 | 1366 |
| 1338 // And back to an internal block. | 1367 // And back to an internal block. |
| 1339 EXPECT_EQ(600, WriteData(entry, 0, 1000, buffer1.get(), 600, true)); | 1368 EXPECT_EQ(600, |
| 1340 EXPECT_EQ(1600, entry->GetDataSize(0)); | 1369 WriteData(entry, stream_index, 1000, buffer1.get(), 600, true)); |
| 1341 EXPECT_EQ(600, ReadData(entry, 0, 1000, buffer3.get(), 600)); | 1370 EXPECT_EQ(1600, entry->GetDataSize(stream_index)); |
| 1371 EXPECT_EQ(600, ReadData(entry, stream_index, 1000, buffer3.get(), 600)); |
| 1342 EXPECT_TRUE(!memcmp(buffer3->data(), buffer1->data(), 600)); | 1372 EXPECT_TRUE(!memcmp(buffer3->data(), buffer1->data(), 600)); |
| 1343 | 1373 |
| 1344 // Extend it again. | 1374 // Extend it again. |
| 1345 EXPECT_EQ(600, WriteData(entry, 0, 2000, buffer1.get(), 600, false)); | 1375 EXPECT_EQ(600, |
| 1346 EXPECT_EQ(2600, entry->GetDataSize(0)); | 1376 WriteData(entry, stream_index, 2000, buffer1.get(), 600, false)); |
| 1347 EXPECT_EQ(200, ReadData(entry, 0, 1800, buffer3.get(), 200)); | 1377 EXPECT_EQ(2600, entry->GetDataSize(stream_index)); |
| 1378 EXPECT_EQ(200, ReadData(entry, stream_index, 1800, buffer3.get(), 200)); |
| 1348 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 200)); | 1379 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 200)); |
| 1349 | 1380 |
| 1350 // And again (with truncation flag). | 1381 // And again (with truncation flag). |
| 1351 EXPECT_EQ(600, WriteData(entry, 0, 3000, buffer1.get(), 600, true)); | 1382 EXPECT_EQ(600, |
| 1352 EXPECT_EQ(3600, entry->GetDataSize(0)); | 1383 WriteData(entry, stream_index, 3000, buffer1.get(), 600, true)); |
| 1353 EXPECT_EQ(200, ReadData(entry, 0, 2800, buffer3.get(), 200)); | 1384 EXPECT_EQ(3600, entry->GetDataSize(stream_index)); |
| 1385 EXPECT_EQ(200, ReadData(entry, stream_index, 2800, buffer3.get(), 200)); |
| 1354 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 200)); | 1386 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 200)); |
| 1355 | 1387 |
| 1356 entry->Close(); | 1388 entry->Close(); |
| 1357 } | 1389 } |
| 1358 | 1390 |
| 1359 TEST_F(DiskCacheEntryTest, InvalidData) { | 1391 TEST_F(DiskCacheEntryTest, InvalidData) { |
| 1360 InitCache(); | 1392 InitCache(); |
| 1361 InvalidData(); | 1393 InvalidData(0); |
| 1362 } | 1394 } |
| 1363 | 1395 |
| 1364 TEST_F(DiskCacheEntryTest, InvalidDataNoBuffer) { | 1396 TEST_F(DiskCacheEntryTest, InvalidDataNoBuffer) { |
| 1365 InitCache(); | 1397 InitCache(); |
| 1366 cache_impl_->SetFlags(disk_cache::kNoBuffering); | 1398 cache_impl_->SetFlags(disk_cache::kNoBuffering); |
| 1367 InvalidData(); | 1399 InvalidData(0); |
| 1368 } | 1400 } |
| 1369 | 1401 |
| 1370 TEST_F(DiskCacheEntryTest, MemoryOnlyInvalidData) { | 1402 TEST_F(DiskCacheEntryTest, MemoryOnlyInvalidData) { |
| 1371 SetMemoryOnlyMode(); | 1403 SetMemoryOnlyMode(); |
| 1372 InitCache(); | 1404 InitCache(); |
| 1373 InvalidData(); | 1405 InvalidData(0); |
| 1374 } | 1406 } |
| 1375 | 1407 |
| 1376 // Tests that the cache preserves the buffer of an IO operation. | 1408 // Tests that the cache preserves the buffer of an IO operation. |
| 1377 void DiskCacheEntryTest::ReadWriteDestroyBuffer() { | 1409 void DiskCacheEntryTest::ReadWriteDestroyBuffer(int stream_index) { |
| 1378 std::string key("the first key"); | 1410 std::string key("the first key"); |
| 1379 disk_cache::Entry* entry; | 1411 disk_cache::Entry* entry; |
| 1380 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 1412 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 1381 | 1413 |
| 1382 const int kSize = 200; | 1414 const int kSize = 200; |
| 1383 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); | 1415 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); |
| 1384 CacheTestFillBuffer(buffer->data(), kSize, false); | 1416 CacheTestFillBuffer(buffer->data(), kSize, false); |
| 1385 | 1417 |
| 1386 net::TestCompletionCallback cb; | 1418 net::TestCompletionCallback cb; |
| 1387 EXPECT_EQ(net::ERR_IO_PENDING, | 1419 EXPECT_EQ(net::ERR_IO_PENDING, |
| 1388 entry->WriteData(0, 0, buffer.get(), kSize, cb.callback(), false)); | 1420 entry->WriteData( |
| 1421 stream_index, 0, buffer.get(), kSize, cb.callback(), false)); |
| 1389 | 1422 |
| 1390 // Release our reference to the buffer. | 1423 // Release our reference to the buffer. |
| 1391 buffer = NULL; | 1424 buffer = NULL; |
| 1392 EXPECT_EQ(kSize, cb.WaitForResult()); | 1425 EXPECT_EQ(kSize, cb.WaitForResult()); |
| 1393 | 1426 |
| 1394 // And now test with a Read(). | 1427 // And now test with a Read(). |
| 1395 buffer = new net::IOBuffer(kSize); | 1428 buffer = new net::IOBuffer(kSize); |
| 1396 CacheTestFillBuffer(buffer->data(), kSize, false); | 1429 CacheTestFillBuffer(buffer->data(), kSize, false); |
| 1397 | 1430 |
| 1398 EXPECT_EQ(net::ERR_IO_PENDING, | 1431 EXPECT_EQ( |
| 1399 entry->ReadData(0, 0, buffer.get(), kSize, cb.callback())); | 1432 net::ERR_IO_PENDING, |
| 1433 entry->ReadData(stream_index, 0, buffer.get(), kSize, cb.callback())); |
| 1400 buffer = NULL; | 1434 buffer = NULL; |
| 1401 EXPECT_EQ(kSize, cb.WaitForResult()); | 1435 EXPECT_EQ(kSize, cb.WaitForResult()); |
| 1402 | 1436 |
| 1403 entry->Close(); | 1437 entry->Close(); |
| 1404 } | 1438 } |
| 1405 | 1439 |
| 1406 TEST_F(DiskCacheEntryTest, ReadWriteDestroyBuffer) { | 1440 TEST_F(DiskCacheEntryTest, ReadWriteDestroyBuffer) { |
| 1407 InitCache(); | 1441 InitCache(); |
| 1408 ReadWriteDestroyBuffer(); | 1442 ReadWriteDestroyBuffer(0); |
| 1409 } | 1443 } |
| 1410 | 1444 |
| 1411 void DiskCacheEntryTest::DoomNormalEntry() { | 1445 void DiskCacheEntryTest::DoomNormalEntry() { |
| 1412 std::string key("the first key"); | 1446 std::string key("the first key"); |
| 1413 disk_cache::Entry* entry; | 1447 disk_cache::Entry* entry; |
| 1414 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 1448 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 1415 entry->Doom(); | 1449 entry->Doom(); |
| 1416 entry->Close(); | 1450 entry->Close(); |
| 1417 | 1451 |
| 1418 const int kSize = 20000; | 1452 const int kSize = 20000; |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1478 DoomEntryNextToOpenEntry(); | 1512 DoomEntryNextToOpenEntry(); |
| 1479 } | 1513 } |
| 1480 | 1514 |
| 1481 TEST_F(DiskCacheEntryTest, AppCacheDoomEntryNextToOpenEntry) { | 1515 TEST_F(DiskCacheEntryTest, AppCacheDoomEntryNextToOpenEntry) { |
| 1482 SetCacheType(net::APP_CACHE); | 1516 SetCacheType(net::APP_CACHE); |
| 1483 InitCache(); | 1517 InitCache(); |
| 1484 DoomEntryNextToOpenEntry(); | 1518 DoomEntryNextToOpenEntry(); |
| 1485 } | 1519 } |
| 1486 | 1520 |
| 1487 // Verify that basic operations work as expected with doomed entries. | 1521 // Verify that basic operations work as expected with doomed entries. |
| 1488 void DiskCacheEntryTest::DoomedEntry() { | 1522 void DiskCacheEntryTest::DoomedEntry(int stream_index) { |
| 1489 std::string key("the first key"); | 1523 std::string key("the first key"); |
| 1490 disk_cache::Entry* entry; | 1524 disk_cache::Entry* entry; |
| 1491 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 1525 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 1492 entry->Doom(); | 1526 entry->Doom(); |
| 1493 | 1527 |
| 1494 FlushQueueForTest(); | 1528 FlushQueueForTest(); |
| 1495 EXPECT_EQ(0, cache_->GetEntryCount()); | 1529 EXPECT_EQ(0, cache_->GetEntryCount()); |
| 1496 Time initial = Time::Now(); | 1530 Time initial = Time::Now(); |
| 1497 AddDelay(); | 1531 AddDelay(); |
| 1498 | 1532 |
| 1499 const int kSize1 = 2000; | 1533 const int kSize1 = 2000; |
| 1500 const int kSize2 = 2000; | 1534 const int kSize2 = 2000; |
| 1501 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); | 1535 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); |
| 1502 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); | 1536 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); |
| 1503 CacheTestFillBuffer(buffer1->data(), kSize1, false); | 1537 CacheTestFillBuffer(buffer1->data(), kSize1, false); |
| 1504 memset(buffer2->data(), 0, kSize2); | 1538 memset(buffer2->data(), 0, kSize2); |
| 1505 | 1539 |
| 1506 EXPECT_EQ(2000, WriteData(entry, 0, 0, buffer1.get(), 2000, false)); | 1540 EXPECT_EQ(2000, |
| 1507 EXPECT_EQ(2000, ReadData(entry, 0, 0, buffer2.get(), 2000)); | 1541 WriteData(entry, stream_index, 0, buffer1.get(), 2000, false)); |
| 1542 EXPECT_EQ(2000, ReadData(entry, stream_index, 0, buffer2.get(), 2000)); |
| 1508 EXPECT_EQ(0, memcmp(buffer1->data(), buffer2->data(), kSize1)); | 1543 EXPECT_EQ(0, memcmp(buffer1->data(), buffer2->data(), kSize1)); |
| 1509 EXPECT_EQ(key, entry->GetKey()); | 1544 EXPECT_EQ(key, entry->GetKey()); |
| 1510 EXPECT_TRUE(initial < entry->GetLastModified()); | 1545 EXPECT_TRUE(initial < entry->GetLastModified()); |
| 1511 EXPECT_TRUE(initial < entry->GetLastUsed()); | 1546 EXPECT_TRUE(initial < entry->GetLastUsed()); |
| 1512 | 1547 |
| 1513 entry->Close(); | 1548 entry->Close(); |
| 1514 } | 1549 } |
| 1515 | 1550 |
| 1516 TEST_F(DiskCacheEntryTest, DoomedEntry) { | 1551 TEST_F(DiskCacheEntryTest, DoomedEntry) { |
| 1517 InitCache(); | 1552 InitCache(); |
| 1518 DoomedEntry(); | 1553 DoomedEntry(0); |
| 1519 } | 1554 } |
| 1520 | 1555 |
| 1521 TEST_F(DiskCacheEntryTest, MemoryOnlyDoomedEntry) { | 1556 TEST_F(DiskCacheEntryTest, MemoryOnlyDoomedEntry) { |
| 1522 SetMemoryOnlyMode(); | 1557 SetMemoryOnlyMode(); |
| 1523 InitCache(); | 1558 InitCache(); |
| 1524 DoomedEntry(); | 1559 DoomedEntry(0); |
| 1525 } | 1560 } |
| 1526 | 1561 |
| 1527 // Tests that we discard entries if the data is missing. | 1562 // Tests that we discard entries if the data is missing. |
| 1528 TEST_F(DiskCacheEntryTest, MissingData) { | 1563 TEST_F(DiskCacheEntryTest, MissingData) { |
| 1529 InitCache(); | 1564 InitCache(); |
| 1530 | 1565 |
| 1531 std::string key("the first key"); | 1566 std::string key("the first key"); |
| 1532 disk_cache::Entry* entry; | 1567 disk_cache::Entry* entry; |
| 1533 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 1568 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 1534 | 1569 |
| (...skipping 773 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2308 | 2343 |
| 2309 TEST_F(DiskCacheEntryTest, SimpleCacheExternalAsyncIO) { | 2344 TEST_F(DiskCacheEntryTest, SimpleCacheExternalAsyncIO) { |
| 2310 SetSimpleCacheMode(); | 2345 SetSimpleCacheMode(); |
| 2311 InitCache(); | 2346 InitCache(); |
| 2312 ExternalAsyncIO(); | 2347 ExternalAsyncIO(); |
| 2313 } | 2348 } |
| 2314 | 2349 |
| 2315 TEST_F(DiskCacheEntryTest, SimpleCacheReleaseBuffer) { | 2350 TEST_F(DiskCacheEntryTest, SimpleCacheReleaseBuffer) { |
| 2316 SetSimpleCacheMode(); | 2351 SetSimpleCacheMode(); |
| 2317 InitCache(); | 2352 InitCache(); |
| 2318 ReleaseBuffer(); | 2353 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount; ++i) { |
| 2354 EXPECT_EQ(net::OK, DoomAllEntries()); |
| 2355 CleanupCacheDir(); |
| 2356 ReleaseBuffer(i); |
| 2357 } |
| 2319 } | 2358 } |
| 2320 | 2359 |
| 2321 TEST_F(DiskCacheEntryTest, SimpleCacheStreamAccess) { | 2360 TEST_F(DiskCacheEntryTest, SimpleCacheStreamAccess) { |
| 2322 SetSimpleCacheMode(); | 2361 SetSimpleCacheMode(); |
| 2323 InitCache(); | 2362 InitCache(); |
| 2324 StreamAccess(); | 2363 StreamAccess(); |
| 2325 } | 2364 } |
| 2326 | 2365 |
| 2327 TEST_F(DiskCacheEntryTest, SimpleCacheGetKey) { | 2366 TEST_F(DiskCacheEntryTest, SimpleCacheGetKey) { |
| 2328 SetSimpleCacheMode(); | 2367 SetSimpleCacheMode(); |
| 2329 InitCache(); | 2368 InitCache(); |
| 2330 GetKey(); | 2369 GetKey(); |
| 2331 } | 2370 } |
| 2332 | 2371 |
| 2333 TEST_F(DiskCacheEntryTest, SimpleCacheGetTimes) { | 2372 TEST_F(DiskCacheEntryTest, SimpleCacheGetTimes) { |
| 2334 SetSimpleCacheMode(); | 2373 SetSimpleCacheMode(); |
| 2335 InitCache(); | 2374 InitCache(); |
| 2336 GetTimes(); | 2375 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount; ++i) { |
| 2376 EXPECT_EQ(net::OK, DoomAllEntries()); |
| 2377 CleanupCacheDir(); |
| 2378 GetTimes(i); |
| 2379 } |
| 2337 } | 2380 } |
| 2338 | 2381 |
| 2339 TEST_F(DiskCacheEntryTest, SimpleCacheGrowData) { | 2382 TEST_F(DiskCacheEntryTest, SimpleCacheGrowData) { |
| 2340 SetSimpleCacheMode(); | 2383 SetSimpleCacheMode(); |
| 2341 InitCache(); | 2384 InitCache(); |
| 2342 GrowData(); | 2385 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount; ++i) { |
| 2386 EXPECT_EQ(net::OK, DoomAllEntries()); |
| 2387 CleanupCacheDir(); |
| 2388 GrowData(i); |
| 2389 } |
| 2343 } | 2390 } |
| 2344 | 2391 |
| 2345 TEST_F(DiskCacheEntryTest, SimpleCacheTruncateData) { | 2392 TEST_F(DiskCacheEntryTest, SimpleCacheTruncateData) { |
| 2346 SetSimpleCacheMode(); | 2393 SetSimpleCacheMode(); |
| 2347 InitCache(); | 2394 InitCache(); |
| 2348 TruncateData(); | 2395 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount; ++i) { |
| 2396 EXPECT_EQ(net::OK, DoomAllEntries()); |
| 2397 CleanupCacheDir(); |
| 2398 TruncateData(i); |
| 2399 } |
| 2349 } | 2400 } |
| 2350 | 2401 |
| 2351 TEST_F(DiskCacheEntryTest, SimpleCacheZeroLengthIO) { | 2402 TEST_F(DiskCacheEntryTest, SimpleCacheZeroLengthIO) { |
| 2352 SetSimpleCacheMode(); | 2403 SetSimpleCacheMode(); |
| 2353 InitCache(); | 2404 InitCache(); |
| 2354 ZeroLengthIO(); | 2405 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount; ++i) { |
| 2406 EXPECT_EQ(net::OK, DoomAllEntries()); |
| 2407 CleanupCacheDir(); |
| 2408 ZeroLengthIO(i); |
| 2409 } |
| 2355 } | 2410 } |
| 2356 | 2411 |
| 2357 TEST_F(DiskCacheEntryTest, SimpleCacheSizeAtCreate) { | 2412 TEST_F(DiskCacheEntryTest, SimpleCacheSizeAtCreate) { |
| 2358 SetSimpleCacheMode(); | 2413 SetSimpleCacheMode(); |
| 2359 InitCache(); | 2414 InitCache(); |
| 2360 SizeAtCreate(); | 2415 SizeAtCreate(); |
| 2361 } | 2416 } |
| 2362 | 2417 |
| 2363 TEST_F(DiskCacheEntryTest, SimpleCacheReuseExternalEntry) { | 2418 TEST_F(DiskCacheEntryTest, SimpleCacheReuseExternalEntry) { |
| 2364 SetSimpleCacheMode(); | 2419 SetSimpleCacheMode(); |
| 2365 SetMaxSize(200 * 1024); | 2420 SetMaxSize(200 * 1024); |
| 2366 InitCache(); | 2421 InitCache(); |
| 2367 ReuseEntry(20 * 1024); | 2422 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount; ++i) { |
| 2423 EXPECT_EQ(net::OK, DoomAllEntries()); |
| 2424 CleanupCacheDir(); |
| 2425 ReuseEntry(20 * 1024, i); |
| 2426 } |
| 2368 } | 2427 } |
| 2369 | 2428 |
| 2370 TEST_F(DiskCacheEntryTest, SimpleCacheReuseInternalEntry) { | 2429 TEST_F(DiskCacheEntryTest, SimpleCacheReuseInternalEntry) { |
| 2371 SetSimpleCacheMode(); | 2430 SetSimpleCacheMode(); |
| 2372 SetMaxSize(100 * 1024); | 2431 SetMaxSize(100 * 1024); |
| 2373 InitCache(); | 2432 InitCache(); |
| 2374 ReuseEntry(10 * 1024); | 2433 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount; ++i) { |
| 2434 EXPECT_EQ(net::OK, DoomAllEntries()); |
| 2435 CleanupCacheDir(); |
| 2436 ReuseEntry(10 * 1024, i); |
| 2437 } |
| 2375 } | 2438 } |
| 2376 | 2439 |
| 2377 TEST_F(DiskCacheEntryTest, SimpleCacheSizeChanges) { | 2440 TEST_F(DiskCacheEntryTest, SimpleCacheSizeChanges) { |
| 2378 SetSimpleCacheMode(); | 2441 SetSimpleCacheMode(); |
| 2379 InitCache(); | 2442 InitCache(); |
| 2380 SizeChanges(); | 2443 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount; ++i) { |
| 2444 EXPECT_EQ(net::OK, DoomAllEntries()); |
| 2445 CleanupCacheDir(); |
| 2446 SizeChanges(i); |
| 2447 } |
| 2381 } | 2448 } |
| 2382 | 2449 |
| 2383 TEST_F(DiskCacheEntryTest, SimpleCacheInvalidData) { | 2450 TEST_F(DiskCacheEntryTest, SimpleCacheInvalidData) { |
| 2384 SetSimpleCacheMode(); | 2451 SetSimpleCacheMode(); |
| 2385 InitCache(); | 2452 InitCache(); |
| 2386 InvalidData(); | 2453 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount; ++i) { |
| 2454 EXPECT_EQ(net::OK, DoomAllEntries()); |
| 2455 CleanupCacheDir(); |
| 2456 InvalidData(i); |
| 2457 } |
| 2387 } | 2458 } |
| 2388 | 2459 |
| 2389 TEST_F(DiskCacheEntryTest, SimpleCacheReadWriteDestroyBuffer) { | 2460 TEST_F(DiskCacheEntryTest, SimpleCacheReadWriteDestroyBuffer) { |
| 2461 // Proving that the test works well with optimistic operations enabled is |
| 2462 // subtle, instead run only in APP_CACHE mode to disable optimistic |
| 2463 // operations. Stream 0 always uses optimistic operations, so the test is not |
| 2464 // run on stream 0. |
| 2465 SetCacheType(net::APP_CACHE); |
| 2390 SetSimpleCacheMode(); | 2466 SetSimpleCacheMode(); |
| 2391 InitCache(); | 2467 InitCache(); |
| 2392 ReadWriteDestroyBuffer(); | 2468 for (int i = 1; i < disk_cache::kSimpleEntryStreamCount; ++i) { |
| 2469 EXPECT_EQ(net::OK, DoomAllEntries()); |
| 2470 CleanupCacheDir(); |
| 2471 ReadWriteDestroyBuffer(i); |
| 2472 } |
| 2393 } | 2473 } |
| 2394 | 2474 |
| 2395 TEST_F(DiskCacheEntryTest, SimpleCacheDoomEntry) { | 2475 TEST_F(DiskCacheEntryTest, SimpleCacheDoomEntry) { |
| 2396 SetSimpleCacheMode(); | 2476 SetSimpleCacheMode(); |
| 2397 InitCache(); | 2477 InitCache(); |
| 2398 DoomNormalEntry(); | 2478 DoomNormalEntry(); |
| 2399 } | 2479 } |
| 2400 | 2480 |
| 2401 TEST_F(DiskCacheEntryTest, SimpleCacheDoomEntryNextToOpenEntry) { | 2481 TEST_F(DiskCacheEntryTest, SimpleCacheDoomEntryNextToOpenEntry) { |
| 2402 SetSimpleCacheMode(); | 2482 SetSimpleCacheMode(); |
| 2403 InitCache(); | 2483 InitCache(); |
| 2404 DoomEntryNextToOpenEntry(); | 2484 DoomEntryNextToOpenEntry(); |
| 2405 } | 2485 } |
| 2406 | 2486 |
| 2407 TEST_F(DiskCacheEntryTest, SimpleCacheDoomedEntry) { | 2487 TEST_F(DiskCacheEntryTest, SimpleCacheDoomedEntry) { |
| 2408 SetSimpleCacheMode(); | 2488 SetSimpleCacheMode(); |
| 2409 InitCache(); | 2489 InitCache(); |
| 2410 DoomedEntry(); | 2490 // Stream 2 is excluded because the implementation does not support writing to |
| 2491 // it on a doomed entry, if it was previously lazily omitted. |
| 2492 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount - 1; ++i) { |
| 2493 EXPECT_EQ(net::OK, DoomAllEntries()); |
| 2494 CleanupCacheDir(); |
| 2495 DoomedEntry(i); |
| 2496 } |
| 2411 } | 2497 } |
| 2412 | 2498 |
| 2413 // Creates an entry with corrupted last byte in stream 0. | 2499 // Creates an entry with corrupted last byte in stream 0. |
| 2414 // Requires SimpleCacheMode. | 2500 // Requires SimpleCacheMode. |
| 2415 bool DiskCacheEntryTest::SimpleCacheMakeBadChecksumEntry(const std::string& key, | 2501 bool DiskCacheEntryTest::SimpleCacheMakeBadChecksumEntry(const std::string& key, |
| 2416 int* data_size) { | 2502 int* data_size) { |
| 2417 disk_cache::Entry* entry = NULL; | 2503 disk_cache::Entry* entry = NULL; |
| 2418 | 2504 |
| 2419 if (CreateEntry(key, &entry) != net::OK || !entry) { | 2505 if (CreateEntry(key, &entry) != net::OK || !entry) { |
| 2420 LOG(ERROR) << "Could not create entry"; | 2506 LOG(ERROR) << "Could not create entry"; |
| (...skipping 1020 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3441 disk_cache::Entry* null = NULL; | 3527 disk_cache::Entry* null = NULL; |
| 3442 const char key[] = "the first key"; | 3528 const char key[] = "the first key"; |
| 3443 | 3529 |
| 3444 const int kHalfSize = 200; | 3530 const int kHalfSize = 200; |
| 3445 const int kSize = 2 * kHalfSize; | 3531 const int kSize = 2 * kHalfSize; |
| 3446 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize)); | 3532 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize)); |
| 3447 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize)); | 3533 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize)); |
| 3448 CacheTestFillBuffer(buffer1->data(), kSize, false); | 3534 CacheTestFillBuffer(buffer1->data(), kSize, false); |
| 3449 char* buffer1_data = buffer1->data() + kHalfSize; | 3535 char* buffer1_data = buffer1->data() + kHalfSize; |
| 3450 memcpy(buffer2->data(), buffer1_data, kHalfSize); | 3536 memcpy(buffer2->data(), buffer1_data, kHalfSize); |
| 3537 |
| 3451 disk_cache::Entry* entry = NULL; | 3538 disk_cache::Entry* entry = NULL; |
| 3539 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 3540 entry->Close(); |
| 3541 for (int i = 0; i < disk_cache::kSimpleEntryStreamCount; ++i) { |
| 3542 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
| 3543 EXPECT_NE(null, entry); |
| 3452 | 3544 |
| 3453 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 3545 int offset = kHalfSize; |
| 3454 EXPECT_NE(null, entry); | 3546 int buf_len = kHalfSize; |
| 3455 | 3547 |
| 3456 int offset = kHalfSize; | 3548 EXPECT_EQ(buf_len, |
| 3457 int buf_len = kHalfSize; | 3549 WriteData(entry, i, offset, buffer2.get(), buf_len, false)); |
| 3550 offset = 0; |
| 3551 buf_len = kHalfSize; |
| 3552 EXPECT_EQ(buf_len, |
| 3553 WriteData(entry, i, offset, buffer1.get(), buf_len, false)); |
| 3554 entry->Close(); |
| 3458 | 3555 |
| 3459 EXPECT_EQ(buf_len, | 3556 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
| 3460 WriteData(entry, 0, offset, buffer2.get(), buf_len, false)); | |
| 3461 offset = 0; | |
| 3462 buf_len = kHalfSize; | |
| 3463 EXPECT_EQ(buf_len, | |
| 3464 WriteData(entry, 0, offset, buffer1.get(), buf_len, false)); | |
| 3465 entry->Close(); | |
| 3466 | 3557 |
| 3467 disk_cache::Entry* entry2 = NULL; | 3558 scoped_refptr<net::IOBuffer> buffer1_read1(new net::IOBuffer(kSize)); |
| 3468 ASSERT_EQ(net::OK, OpenEntry(key, &entry2)); | 3559 EXPECT_EQ(kSize, ReadData(entry, i, 0, buffer1_read1.get(), kSize)); |
| 3469 EXPECT_EQ(entry, entry2); | 3560 EXPECT_EQ(0, memcmp(buffer1->data(), buffer1_read1->data(), kSize)); |
| 3470 | 3561 // Check that we are not leaking. |
| 3471 scoped_refptr<net::IOBuffer> buffer1_read1(new net::IOBuffer(kSize)); | 3562 ASSERT_NE(entry, null); |
| 3472 EXPECT_EQ(kSize, ReadData(entry2, 0, 0, buffer1_read1.get(), kSize)); | 3563 EXPECT_TRUE(static_cast<disk_cache::SimpleEntryImpl*>(entry)->HasOneRef()); |
| 3473 EXPECT_EQ(0, memcmp(buffer1->data(), buffer1_read1->data(), kSize)); | 3564 entry->Close(); |
| 3474 | 3565 } |
| 3475 // Check that we are not leaking. | |
| 3476 ASSERT_NE(entry, null); | |
| 3477 EXPECT_TRUE( | |
| 3478 static_cast<disk_cache::SimpleEntryImpl*>(entry)->HasOneRef()); | |
| 3479 entry->Close(); | |
| 3480 entry = NULL; | |
| 3481 } | 3566 } |
| 3482 | 3567 |
| 3483 // Test that changing stream1 size does not affect stream0 (stream0 and stream1 | 3568 // Test that changing stream1 size does not affect stream0 (stream0 and stream1 |
| 3484 // are stored in the same file in Simple Cache). | 3569 // are stored in the same file in Simple Cache). |
| 3485 TEST_F(DiskCacheEntryTest, SimpleCacheStream1SizeChanges) { | 3570 TEST_F(DiskCacheEntryTest, SimpleCacheStream1SizeChanges) { |
| 3486 SetSimpleCacheMode(); | 3571 SetSimpleCacheMode(); |
| 3487 InitCache(); | 3572 InitCache(); |
| 3488 disk_cache::Entry* entry = NULL; | 3573 disk_cache::Entry* entry = NULL; |
| 3489 const char key[] = "the key"; | 3574 const char key[] = "the key"; |
| 3490 const int kSize = 100; | 3575 const int kSize = 100; |
| (...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3892 EXPECT_EQ(kSize, callback.GetResult(ret)); | 3977 EXPECT_EQ(kSize, callback.GetResult(ret)); |
| 3893 | 3978 |
| 3894 // Make sure the first range was removed when the second was written. | 3979 // Make sure the first range was removed when the second was written. |
| 3895 ret = entry->ReadSparseData(0, buffer, kSize, callback.callback()); | 3980 ret = entry->ReadSparseData(0, buffer, kSize, callback.callback()); |
| 3896 EXPECT_EQ(0, callback.GetResult(ret)); | 3981 EXPECT_EQ(0, callback.GetResult(ret)); |
| 3897 | 3982 |
| 3898 entry->Close(); | 3983 entry->Close(); |
| 3899 } | 3984 } |
| 3900 | 3985 |
| 3901 #endif // defined(OS_POSIX) | 3986 #endif // defined(OS_POSIX) |
| OLD | NEW |