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/file_util.h" | 6 #include "base/file_util.h" |
7 #include "base/string_util.h" | 7 #include "base/string_util.h" |
8 #include "base/stringprintf.h" | 8 #include "base/stringprintf.h" |
9 #include "base/third_party/dynamic_annotations/dynamic_annotations.h" | 9 #include "base/third_party/dynamic_annotations/dynamic_annotations.h" |
10 #include "base/threading/platform_thread.h" | 10 #include "base/threading/platform_thread.h" |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
131 TEST_F(DiskCacheBackendTest, MemoryOnlyBasics) { | 131 TEST_F(DiskCacheBackendTest, MemoryOnlyBasics) { |
132 SetMemoryOnlyMode(); | 132 SetMemoryOnlyMode(); |
133 BackendBasics(); | 133 BackendBasics(); |
134 } | 134 } |
135 | 135 |
136 TEST_F(DiskCacheBackendTest, AppCacheBasics) { | 136 TEST_F(DiskCacheBackendTest, AppCacheBasics) { |
137 SetCacheType(net::APP_CACHE); | 137 SetCacheType(net::APP_CACHE); |
138 BackendBasics(); | 138 BackendBasics(); |
139 } | 139 } |
140 | 140 |
141 TEST_F(DiskCacheBackendTest, ShaderCacheBasics) { | |
142 SetCacheType(net::SHADER_CACHE); | |
143 BackendBasics(); | |
144 } | |
145 | |
141 void DiskCacheBackendTest::BackendKeying() { | 146 void DiskCacheBackendTest::BackendKeying() { |
142 InitCache(); | 147 InitCache(); |
143 const char* kName1 = "the first key"; | 148 const char* kName1 = "the first key"; |
144 const char* kName2 = "the first Key"; | 149 const char* kName2 = "the first Key"; |
145 disk_cache::Entry *entry1, *entry2; | 150 disk_cache::Entry *entry1, *entry2; |
146 ASSERT_EQ(net::OK, CreateEntry(kName1, &entry1)); | 151 ASSERT_EQ(net::OK, CreateEntry(kName1, &entry1)); |
147 | 152 |
148 ASSERT_EQ(net::OK, CreateEntry(kName2, &entry2)); | 153 ASSERT_EQ(net::OK, CreateEntry(kName2, &entry2)); |
149 EXPECT_TRUE(entry1 != entry2) << "Case sensitive"; | 154 EXPECT_TRUE(entry1 != entry2) << "Case sensitive"; |
150 entry2->Close(); | 155 entry2->Close(); |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
191 TEST_F(DiskCacheBackendTest, MemoryOnlyKeying) { | 196 TEST_F(DiskCacheBackendTest, MemoryOnlyKeying) { |
192 SetMemoryOnlyMode(); | 197 SetMemoryOnlyMode(); |
193 BackendKeying(); | 198 BackendKeying(); |
194 } | 199 } |
195 | 200 |
196 TEST_F(DiskCacheBackendTest, AppCacheKeying) { | 201 TEST_F(DiskCacheBackendTest, AppCacheKeying) { |
197 SetCacheType(net::APP_CACHE); | 202 SetCacheType(net::APP_CACHE); |
198 BackendKeying(); | 203 BackendKeying(); |
199 } | 204 } |
200 | 205 |
206 TEST_F(DiskCacheBackendTest, ShaderCacheKeying) { | |
207 SetCacheType(net::SHADER_CACHE); | |
208 BackendKeying(); | |
209 } | |
210 | |
201 TEST_F(DiskCacheTest, CreateBackend) { | 211 TEST_F(DiskCacheTest, CreateBackend) { |
202 net::TestCompletionCallback cb; | 212 net::TestCompletionCallback cb; |
203 | 213 |
204 { | 214 { |
205 ASSERT_TRUE(CleanupCacheDir()); | 215 ASSERT_TRUE(CleanupCacheDir()); |
206 base::Thread cache_thread("CacheThread"); | 216 base::Thread cache_thread("CacheThread"); |
207 ASSERT_TRUE(cache_thread.StartWithOptions( | 217 ASSERT_TRUE(cache_thread.StartWithOptions( |
208 base::Thread::Options(MessageLoop::TYPE_IO, 0))); | 218 base::Thread::Options(MessageLoop::TYPE_IO, 0))); |
209 | 219 |
210 // Test the private factory methods. | 220 // Test the private factory methods. |
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
584 } | 594 } |
585 | 595 |
586 TEST_F(DiskCacheBackendTest, AppCacheLoad) { | 596 TEST_F(DiskCacheBackendTest, AppCacheLoad) { |
587 SetCacheType(net::APP_CACHE); | 597 SetCacheType(net::APP_CACHE); |
588 // Work with a tiny index table (16 entries) | 598 // Work with a tiny index table (16 entries) |
589 SetMask(0xf); | 599 SetMask(0xf); |
590 SetMaxSize(0x100000); | 600 SetMaxSize(0x100000); |
591 BackendLoad(); | 601 BackendLoad(); |
592 } | 602 } |
593 | 603 |
604 TEST_F(DiskCacheBackendTest, ShaderCacheLoad) { | |
605 SetCacheType(net::SHADER_CACHE); | |
606 // Work with a tiny index table (16 entries) | |
607 SetMask(0xf); | |
608 SetMaxSize(0x100000); | |
609 BackendLoad(); | |
610 } | |
611 | |
594 // Tests the chaining of an entry to the current head. | 612 // Tests the chaining of an entry to the current head. |
595 void DiskCacheBackendTest::BackendChain() { | 613 void DiskCacheBackendTest::BackendChain() { |
596 SetMask(0x1); // 2-entry table. | 614 SetMask(0x1); // 2-entry table. |
597 SetMaxSize(0x3000); // 12 kB. | 615 SetMaxSize(0x3000); // 12 kB. |
598 InitCache(); | 616 InitCache(); |
599 | 617 |
600 disk_cache::Entry* entry; | 618 disk_cache::Entry* entry; |
601 ASSERT_EQ(net::OK, CreateEntry("The first key", &entry)); | 619 ASSERT_EQ(net::OK, CreateEntry("The first key", &entry)); |
602 entry->Close(); | 620 entry->Close(); |
603 ASSERT_EQ(net::OK, CreateEntry("The Second key", &entry)); | 621 ASSERT_EQ(net::OK, CreateEntry("The Second key", &entry)); |
604 entry->Close(); | 622 entry->Close(); |
605 } | 623 } |
606 | 624 |
607 TEST_F(DiskCacheBackendTest, Chain) { | 625 TEST_F(DiskCacheBackendTest, Chain) { |
608 BackendChain(); | 626 BackendChain(); |
609 } | 627 } |
610 | 628 |
611 TEST_F(DiskCacheBackendTest, NewEvictionChain) { | 629 TEST_F(DiskCacheBackendTest, NewEvictionChain) { |
612 SetNewEviction(); | 630 SetNewEviction(); |
613 BackendChain(); | 631 BackendChain(); |
614 } | 632 } |
615 | 633 |
616 TEST_F(DiskCacheBackendTest, AppCacheChain) { | 634 TEST_F(DiskCacheBackendTest, AppCacheChain) { |
617 SetCacheType(net::APP_CACHE); | 635 SetCacheType(net::APP_CACHE); |
618 BackendChain(); | 636 BackendChain(); |
619 } | 637 } |
620 | 638 |
639 TEST_F(DiskCacheBackendTest, ShaderCacheChain) { | |
640 SetCacheType(net::SHADER_CACHE); | |
641 BackendChain(); | |
642 } | |
643 | |
621 TEST_F(DiskCacheBackendTest, NewEvictionTrim) { | 644 TEST_F(DiskCacheBackendTest, NewEvictionTrim) { |
622 SetNewEviction(); | 645 SetNewEviction(); |
623 SetDirectMode(); | 646 SetDirectMode(); |
624 InitCache(); | 647 InitCache(); |
625 | 648 |
626 disk_cache::Entry* entry; | 649 disk_cache::Entry* entry; |
627 for (int i = 0; i < 100; i++) { | 650 for (int i = 0; i < 100; i++) { |
628 std::string name(StringPrintf("Key %d", i)); | 651 std::string name(StringPrintf("Key %d", i)); |
629 ASSERT_EQ(net::OK, CreateEntry(name, &entry)); | 652 ASSERT_EQ(net::OK, CreateEntry(name, &entry)); |
630 entry->Close(); | 653 entry->Close(); |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
721 SetNewEviction(); | 744 SetNewEviction(); |
722 BackendInvalidEntry(); | 745 BackendInvalidEntry(); |
723 } | 746 } |
724 | 747 |
725 // We'll be leaking memory from this test. | 748 // We'll be leaking memory from this test. |
726 TEST_F(DiskCacheBackendTest, AppCacheInvalidEntry) { | 749 TEST_F(DiskCacheBackendTest, AppCacheInvalidEntry) { |
727 SetCacheType(net::APP_CACHE); | 750 SetCacheType(net::APP_CACHE); |
728 BackendInvalidEntry(); | 751 BackendInvalidEntry(); |
729 } | 752 } |
730 | 753 |
754 // We'll be leaking memory from this test. | |
755 TEST_F(DiskCacheBackendTest, ShaderCacheInvalidEntry) { | |
756 SetCacheType(net::SHADER_CACHE); | |
757 BackendInvalidEntry(); | |
758 } | |
759 | |
731 // Almost the same test, but this time crash the cache after reading an entry. | 760 // Almost the same test, but this time crash the cache after reading an entry. |
732 // We'll be leaking memory from this test. | 761 // We'll be leaking memory from this test. |
733 void DiskCacheBackendTest::BackendInvalidEntryRead() { | 762 void DiskCacheBackendTest::BackendInvalidEntryRead() { |
734 // Use the implementation directly... we need to simulate a crash. | 763 // Use the implementation directly... we need to simulate a crash. |
735 SetDirectMode(); | 764 SetDirectMode(); |
736 InitCache(); | 765 InitCache(); |
737 | 766 |
738 std::string key("Some key"); | 767 std::string key("Some key"); |
739 disk_cache::Entry* entry; | 768 disk_cache::Entry* entry; |
740 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 769 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
772 BackendInvalidEntryRead(); | 801 BackendInvalidEntryRead(); |
773 } | 802 } |
774 | 803 |
775 // We'll be leaking memory from this test. | 804 // We'll be leaking memory from this test. |
776 TEST_F(DiskCacheBackendTest, AppCacheInvalidEntryRead) { | 805 TEST_F(DiskCacheBackendTest, AppCacheInvalidEntryRead) { |
777 SetCacheType(net::APP_CACHE); | 806 SetCacheType(net::APP_CACHE); |
778 BackendInvalidEntryRead(); | 807 BackendInvalidEntryRead(); |
779 } | 808 } |
780 | 809 |
781 // We'll be leaking memory from this test. | 810 // We'll be leaking memory from this test. |
811 TEST_F(DiskCacheBackendTest, ShaderCacheInvalidEntryRead) { | |
812 SetCacheType(net::SHADER_CACHE); | |
813 BackendInvalidEntryRead(); | |
814 } | |
815 | |
816 // We'll be leaking memory from this test. | |
782 void DiskCacheBackendTest::BackendInvalidEntryWithLoad() { | 817 void DiskCacheBackendTest::BackendInvalidEntryWithLoad() { |
783 // Work with a tiny index table (16 entries) | 818 // Work with a tiny index table (16 entries) |
784 SetMask(0xf); | 819 SetMask(0xf); |
785 SetMaxSize(0x100000); | 820 SetMaxSize(0x100000); |
786 InitCache(); | 821 InitCache(); |
787 | 822 |
788 int seed = static_cast<int>(Time::Now().ToInternalValue()); | 823 int seed = static_cast<int>(Time::Now().ToInternalValue()); |
789 srand(seed); | 824 srand(seed); |
790 | 825 |
791 const int kNumEntries = 100; | 826 const int kNumEntries = 100; |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
838 BackendInvalidEntryWithLoad(); | 873 BackendInvalidEntryWithLoad(); |
839 } | 874 } |
840 | 875 |
841 // We'll be leaking memory from this test. | 876 // We'll be leaking memory from this test. |
842 TEST_F(DiskCacheBackendTest, AppCacheInvalidEntryWithLoad) { | 877 TEST_F(DiskCacheBackendTest, AppCacheInvalidEntryWithLoad) { |
843 SetCacheType(net::APP_CACHE); | 878 SetCacheType(net::APP_CACHE); |
844 BackendInvalidEntryWithLoad(); | 879 BackendInvalidEntryWithLoad(); |
845 } | 880 } |
846 | 881 |
847 // We'll be leaking memory from this test. | 882 // We'll be leaking memory from this test. |
883 TEST_F(DiskCacheBackendTest, ShaderCacheInvalidEntryWithLoad) { | |
884 SetCacheType(net::SHADER_CACHE); | |
885 BackendInvalidEntryWithLoad(); | |
886 } | |
887 | |
888 // We'll be leaking memory from this test. | |
848 void DiskCacheBackendTest::BackendTrimInvalidEntry() { | 889 void DiskCacheBackendTest::BackendTrimInvalidEntry() { |
849 // Use the implementation directly... we need to simulate a crash. | 890 // Use the implementation directly... we need to simulate a crash. |
850 SetDirectMode(); | 891 SetDirectMode(); |
851 | 892 |
852 const int kSize = 0x3000; // 12 kB | 893 const int kSize = 0x3000; // 12 kB |
853 SetMaxSize(kSize * 10); | 894 SetMaxSize(kSize * 10); |
854 InitCache(); | 895 InitCache(); |
855 | 896 |
856 std::string first("some key"); | 897 std::string first("some key"); |
857 std::string second("something else"); | 898 std::string second("something else"); |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1020 TEST_F(DiskCacheBackendTest, NewEvictionEnumerations) { | 1061 TEST_F(DiskCacheBackendTest, NewEvictionEnumerations) { |
1021 SetNewEviction(); | 1062 SetNewEviction(); |
1022 BackendEnumerations(); | 1063 BackendEnumerations(); |
1023 } | 1064 } |
1024 | 1065 |
1025 TEST_F(DiskCacheBackendTest, MemoryOnlyEnumerations) { | 1066 TEST_F(DiskCacheBackendTest, MemoryOnlyEnumerations) { |
1026 SetMemoryOnlyMode(); | 1067 SetMemoryOnlyMode(); |
1027 BackendEnumerations(); | 1068 BackendEnumerations(); |
1028 } | 1069 } |
1029 | 1070 |
1071 TEST_F(DiskCacheBackendTest, ShaderCacheEnumerations) { | |
1072 SetCacheType(net::SHADER_CACHE); | |
1073 BackendEnumerations(); | |
1074 } | |
1075 | |
1030 TEST_F(DiskCacheBackendTest, AppCacheEnumerations) { | 1076 TEST_F(DiskCacheBackendTest, AppCacheEnumerations) { |
1031 SetCacheType(net::APP_CACHE); | 1077 SetCacheType(net::APP_CACHE); |
1032 BackendEnumerations(); | 1078 BackendEnumerations(); |
1033 } | 1079 } |
1034 | 1080 |
1035 // Verifies enumerations while entries are open. | 1081 // Verifies enumerations while entries are open. |
1036 void DiskCacheBackendTest::BackendEnumerations2() { | 1082 void DiskCacheBackendTest::BackendEnumerations2() { |
1037 InitCache(); | 1083 InitCache(); |
1038 const std::string first("first"); | 1084 const std::string first("first"); |
1039 const std::string second("second"); | 1085 const std::string second("second"); |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1089 TEST_F(DiskCacheBackendTest, MemoryOnlyEnumerations2) { | 1135 TEST_F(DiskCacheBackendTest, MemoryOnlyEnumerations2) { |
1090 SetMemoryOnlyMode(); | 1136 SetMemoryOnlyMode(); |
1091 BackendEnumerations2(); | 1137 BackendEnumerations2(); |
1092 } | 1138 } |
1093 | 1139 |
1094 TEST_F(DiskCacheBackendTest, AppCacheEnumerations2) { | 1140 TEST_F(DiskCacheBackendTest, AppCacheEnumerations2) { |
1095 SetCacheType(net::APP_CACHE); | 1141 SetCacheType(net::APP_CACHE); |
1096 BackendEnumerations2(); | 1142 BackendEnumerations2(); |
1097 } | 1143 } |
1098 | 1144 |
1145 TEST_F(DiskCacheBackendTest, ShaderCacheEnumerations2) { | |
1146 SetCacheType(net::SHADER_CACHE); | |
1147 BackendEnumerations2(); | |
1148 } | |
1149 | |
1150 TEST_F(DiskCacheBackendTest, ShaderCacheEnumerationReadData) { | |
rvargas (doing something else)
2013/02/06 20:06:39
nit: add a comment saying what is this about (veri
dsinclair
2013/02/07 18:03:07
Done.
| |
1151 SetCacheType(net::SHADER_CACHE); | |
1152 InitCache(); | |
1153 const std::string first("first"); | |
1154 const std::string second("second"); | |
1155 disk_cache::Entry *entry1, *entry2; | |
1156 const int kSize = 50; | |
1157 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize)); | |
1158 | |
1159 ASSERT_EQ(net::OK, CreateEntry(first, &entry1)); | |
1160 memset(buffer1->data(), 0, kSize); | |
1161 base::strlcpy(buffer1->data(), "And the data to save", kSize); | |
1162 EXPECT_EQ(kSize, WriteData(entry1, 0, 0, buffer1, kSize, false)); | |
1163 entry1->Close(); | |
1164 | |
1165 ASSERT_EQ(net::OK, CreateEntry(second, &entry2)); | |
1166 entry2->Close(); | |
1167 FlushQueueForTest(); | |
1168 | |
1169 // Make sure that the timestamp is not the same. | |
1170 AddDelay(); | |
1171 ASSERT_EQ(net::OK, OpenEntry(second, &entry1)); | |
1172 void* iter = NULL; | |
1173 ASSERT_EQ(net::OK, OpenNextEntry(&iter, &entry2)); | |
1174 EXPECT_EQ(entry2->GetKey(), second); | |
1175 | |
1176 // Two entries and the iterator pointing at "first". | |
rvargas (doing something else)
2013/02/06 20:06:39
The iterator points at "second"
dsinclair
2013/02/07 18:03:07
Simplified the test case, should be more readable
| |
1177 entry1->Close(); | |
1178 entry2->Close(); | |
1179 cache_->EndEnumeration(&iter); | |
1180 | |
1181 // Read the oldest entry and get the newest element. | |
1182 ASSERT_EQ(net::OK, OpenEntry(first, &entry1)); | |
1183 EXPECT_EQ(kSize, ReadData(entry1, 0, 0, buffer1, kSize)); | |
1184 | |
1185 ASSERT_EQ(net::OK, OpenNextEntry(&iter, &entry2)); | |
1186 | |
1187 // The list is not updated. | |
1188 EXPECT_EQ(entry2->GetKey(), second); | |
1189 | |
1190 entry1->Close(); | |
1191 entry2->Close(); | |
1192 cache_->EndEnumeration(&iter); | |
1193 } | |
1194 | |
1099 // Verify handling of invalid entries while doing enumerations. | 1195 // Verify handling of invalid entries while doing enumerations. |
1100 // We'll be leaking memory from this test. | 1196 // We'll be leaking memory from this test. |
1101 void DiskCacheBackendTest::BackendInvalidEntryEnumeration() { | 1197 void DiskCacheBackendTest::BackendInvalidEntryEnumeration() { |
1102 // Use the implementation directly... we need to simulate a crash. | 1198 // Use the implementation directly... we need to simulate a crash. |
1103 SetDirectMode(); | 1199 SetDirectMode(); |
1104 InitCache(); | 1200 InitCache(); |
1105 | 1201 |
1106 std::string key("Some key"); | 1202 std::string key("Some key"); |
1107 disk_cache::Entry *entry, *entry1, *entry2; | 1203 disk_cache::Entry *entry, *entry1, *entry2; |
1108 ASSERT_EQ(net::OK, CreateEntry(key, &entry1)); | 1204 ASSERT_EQ(net::OK, CreateEntry(key, &entry1)); |
(...skipping 1208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2317 TEST_F(DiskCacheBackendTest, MemoryOnlyDoomAll) { | 2413 TEST_F(DiskCacheBackendTest, MemoryOnlyDoomAll) { |
2318 SetMemoryOnlyMode(); | 2414 SetMemoryOnlyMode(); |
2319 BackendDoomAll(); | 2415 BackendDoomAll(); |
2320 } | 2416 } |
2321 | 2417 |
2322 TEST_F(DiskCacheBackendTest, AppCacheOnlyDoomAll) { | 2418 TEST_F(DiskCacheBackendTest, AppCacheOnlyDoomAll) { |
2323 SetCacheType(net::APP_CACHE); | 2419 SetCacheType(net::APP_CACHE); |
2324 BackendDoomAll(); | 2420 BackendDoomAll(); |
2325 } | 2421 } |
2326 | 2422 |
2423 TEST_F(DiskCacheBackendTest, ShaderCacheOnlyDoomAll) { | |
2424 SetCacheType(net::SHADER_CACHE); | |
2425 BackendDoomAll(); | |
2426 } | |
2427 | |
2327 // If the index size changes when we doom the cache, we should not crash. | 2428 // If the index size changes when we doom the cache, we should not crash. |
2328 void DiskCacheBackendTest::BackendDoomAll2() { | 2429 void DiskCacheBackendTest::BackendDoomAll2() { |
2329 EXPECT_EQ(2, cache_->GetEntryCount()); | 2430 EXPECT_EQ(2, cache_->GetEntryCount()); |
2330 EXPECT_EQ(net::OK, DoomAllEntries()); | 2431 EXPECT_EQ(net::OK, DoomAllEntries()); |
2331 | 2432 |
2332 disk_cache::Entry* entry; | 2433 disk_cache::Entry* entry; |
2333 ASSERT_EQ(net::OK, CreateEntry("Something new", &entry)); | 2434 ASSERT_EQ(net::OK, CreateEntry("Something new", &entry)); |
2334 entry->Close(); | 2435 entry->Close(); |
2335 | 2436 |
2336 EXPECT_EQ(1, cache_->GetEntryCount()); | 2437 EXPECT_EQ(1, cache_->GetEntryCount()); |
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2568 // Ping the oldest entry. | 2669 // Ping the oldest entry. |
2569 cache_->OnExternalCacheHit("key0"); | 2670 cache_->OnExternalCacheHit("key0"); |
2570 | 2671 |
2571 TrimForTest(false); | 2672 TrimForTest(false); |
2572 | 2673 |
2573 // Make sure the older key remains. | 2674 // Make sure the older key remains. |
2574 EXPECT_EQ(1, cache_->GetEntryCount()); | 2675 EXPECT_EQ(1, cache_->GetEntryCount()); |
2575 ASSERT_EQ(net::OK, OpenEntry("key0", &entry)); | 2676 ASSERT_EQ(net::OK, OpenEntry("key0", &entry)); |
2576 entry->Close(); | 2677 entry->Close(); |
2577 } | 2678 } |
OLD | NEW |