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

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

Issue 23702024: SimpleCache: have tests run on all three streams (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed a test issue with optimistic operations on stream 0 Created 6 years, 11 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/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
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
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
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
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
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
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
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
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)
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698