OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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/platform_thread.h" | 6 #include "base/platform_thread.h" |
7 #include "base/timer.h" | 7 #include "base/timer.h" |
8 #include "base/string_util.h" | 8 #include "base/string_util.h" |
| 9 #include "net/base/io_buffer.h" |
9 #include "net/base/net_errors.h" | 10 #include "net/base/net_errors.h" |
10 #include "net/disk_cache/disk_cache_test_base.h" | 11 #include "net/disk_cache/disk_cache_test_base.h" |
11 #include "net/disk_cache/disk_cache_test_util.h" | 12 #include "net/disk_cache/disk_cache_test_util.h" |
12 #include "net/disk_cache/entry_impl.h" | 13 #include "net/disk_cache/entry_impl.h" |
13 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
14 | 15 |
15 using base::Time; | 16 using base::Time; |
16 | 17 |
17 extern int g_cache_tests_max_id; | 18 extern int g_cache_tests_max_id; |
18 extern volatile int g_cache_tests_received; | 19 extern volatile int g_cache_tests_received; |
19 extern volatile bool g_cache_tests_error; | 20 extern volatile bool g_cache_tests_error; |
20 | 21 |
21 // Tests that can run with different types of caches. | 22 // Tests that can run with different types of caches. |
22 class DiskCacheEntryTest : public DiskCacheTestWithCache { | 23 class DiskCacheEntryTest : public DiskCacheTestWithCache { |
23 protected: | 24 protected: |
24 void InternalSyncIO(); | 25 void InternalSyncIO(); |
25 void InternalAsyncIO(); | 26 void InternalAsyncIO(); |
26 void ExternalSyncIO(); | 27 void ExternalSyncIO(); |
27 void ExternalAsyncIO(); | 28 void ExternalAsyncIO(); |
28 void StreamAccess(); | 29 void StreamAccess(); |
29 void GetKey(); | 30 void GetKey(); |
30 void GrowData(); | 31 void GrowData(); |
31 void TruncateData(); | 32 void TruncateData(); |
| 33 void ZeroLengthIO(); |
32 void ReuseEntry(int size); | 34 void ReuseEntry(int size); |
33 void InvalidData(); | 35 void InvalidData(); |
34 void DoomEntry(); | 36 void DoomEntry(); |
35 void DoomedEntry(); | 37 void DoomedEntry(); |
36 }; | 38 }; |
37 | 39 |
38 void DiskCacheEntryTest::InternalSyncIO() { | 40 void DiskCacheEntryTest::InternalSyncIO() { |
39 disk_cache::Entry *entry1 = NULL; | 41 disk_cache::Entry *entry1 = NULL; |
40 ASSERT_TRUE(cache_->CreateEntry("the first key", &entry1)); | 42 ASSERT_TRUE(cache_->CreateEntry("the first key", &entry1)); |
41 ASSERT_TRUE(NULL != entry1); | 43 ASSERT_TRUE(NULL != entry1); |
42 | 44 |
43 char buffer1[10]; | 45 const int kSize1 = 10; |
44 CacheTestFillBuffer(buffer1, sizeof(buffer1), false); | 46 scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize1); |
45 EXPECT_EQ(0, entry1->ReadData(0, 0, buffer1, sizeof(buffer1), NULL)); | 47 CacheTestFillBuffer(buffer1->data(), kSize1, false); |
46 base::strlcpy(buffer1, "the data", arraysize(buffer1)); | 48 EXPECT_EQ(0, entry1->ReadData(0, 0, buffer1, kSize1, NULL)); |
47 EXPECT_EQ(10, entry1->WriteData(0, 0, buffer1, sizeof(buffer1), NULL, false)); | 49 base::strlcpy(buffer1->data(), "the data", kSize1); |
48 memset(buffer1, 0, sizeof(buffer1)); | 50 EXPECT_EQ(10, entry1->WriteData(0, 0, buffer1, kSize1, NULL, false)); |
49 EXPECT_EQ(10, entry1->ReadData(0, 0, buffer1, sizeof(buffer1), NULL)); | 51 memset(buffer1->data(), 0, kSize1); |
50 EXPECT_STREQ("the data", buffer1); | 52 EXPECT_EQ(10, entry1->ReadData(0, 0, buffer1, kSize1, NULL)); |
| 53 EXPECT_STREQ("the data", buffer1->data()); |
51 | 54 |
52 char buffer2[5000]; | 55 const int kSize2 = 5000; |
53 char buffer3[10000] = {0}; | 56 const int kSize3 = 10000; |
54 CacheTestFillBuffer(buffer2, sizeof(buffer2), false); | 57 scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize2); |
55 base::strlcpy(buffer2, "The really big data goes here", arraysize(buffer2)); | 58 scoped_refptr<net::IOBuffer> buffer3 = new net::IOBuffer(kSize3); |
56 EXPECT_EQ(5000, entry1->WriteData(1, 1500, buffer2, sizeof(buffer2), NULL, | 59 memset(buffer3->data(), 0, kSize3); |
57 false)); | 60 CacheTestFillBuffer(buffer2->data(), kSize2, false); |
58 memset(buffer2, 0, sizeof(buffer2)); | 61 base::strlcpy(buffer2->data(), "The really big data goes here", kSize2); |
59 EXPECT_EQ(4989, entry1->ReadData(1, 1511, buffer2, sizeof(buffer2), NULL)); | 62 EXPECT_EQ(5000, entry1->WriteData(1, 1500, buffer2, kSize2, NULL, false)); |
60 EXPECT_STREQ("big data goes here", buffer2); | 63 memset(buffer2->data(), 0, kSize2); |
61 EXPECT_EQ(5000, entry1->ReadData(1, 0, buffer2, sizeof(buffer2), NULL)); | 64 EXPECT_EQ(4989, entry1->ReadData(1, 1511, buffer2, kSize2, NULL)); |
62 EXPECT_EQ(0, memcmp(buffer2, buffer3, 1500)); | 65 EXPECT_STREQ("big data goes here", buffer2->data()); |
63 EXPECT_EQ(1500, entry1->ReadData(1, 5000, buffer2, sizeof(buffer2), NULL)); | 66 EXPECT_EQ(5000, entry1->ReadData(1, 0, buffer2, kSize2, NULL)); |
| 67 EXPECT_EQ(0, memcmp(buffer2->data(), buffer3->data(), 1500)); |
| 68 EXPECT_EQ(1500, entry1->ReadData(1, 5000, buffer2, kSize2, NULL)); |
64 | 69 |
65 EXPECT_EQ(0, entry1->ReadData(1, 6500, buffer2, sizeof(buffer2), NULL)); | 70 EXPECT_EQ(0, entry1->ReadData(1, 6500, buffer2, kSize2, NULL)); |
66 EXPECT_EQ(6500, entry1->ReadData(1, 0, buffer3, sizeof(buffer3), NULL)); | 71 EXPECT_EQ(6500, entry1->ReadData(1, 0, buffer3, kSize3, NULL)); |
67 EXPECT_EQ(8192, entry1->WriteData(1, 0, buffer3, 8192, NULL, false)); | 72 EXPECT_EQ(8192, entry1->WriteData(1, 0, buffer3, 8192, NULL, false)); |
68 EXPECT_EQ(8192, entry1->ReadData(1, 0, buffer3, sizeof(buffer3), NULL)); | 73 EXPECT_EQ(8192, entry1->ReadData(1, 0, buffer3, kSize3, NULL)); |
69 EXPECT_EQ(8192, entry1->GetDataSize(1)); | 74 EXPECT_EQ(8192, entry1->GetDataSize(1)); |
70 | 75 |
71 entry1->Doom(); | 76 entry1->Doom(); |
72 entry1->Close(); | 77 entry1->Close(); |
73 EXPECT_EQ(0, cache_->GetEntryCount()); | 78 EXPECT_EQ(0, cache_->GetEntryCount()); |
74 } | 79 } |
75 | 80 |
76 TEST_F(DiskCacheEntryTest, InternalSyncIO) { | 81 TEST_F(DiskCacheEntryTest, InternalSyncIO) { |
77 InitCache(); | 82 InitCache(); |
78 InternalSyncIO(); | 83 InternalSyncIO(); |
(...skipping 24 matching lines...) Expand all Loading... |
103 CallbackTest callback11(11, false); | 108 CallbackTest callback11(11, false); |
104 CallbackTest callback12(12, false); | 109 CallbackTest callback12(12, false); |
105 CallbackTest callback13(13, false); | 110 CallbackTest callback13(13, false); |
106 | 111 |
107 g_cache_tests_error = false; | 112 g_cache_tests_error = false; |
108 g_cache_tests_max_id = 0; | 113 g_cache_tests_max_id = 0; |
109 g_cache_tests_received = 0; | 114 g_cache_tests_received = 0; |
110 | 115 |
111 MessageLoopHelper helper; | 116 MessageLoopHelper helper; |
112 | 117 |
113 char buffer1[10]; | 118 const int kSize1 = 10; |
114 char buffer2[5000]; | 119 const int kSize2 = 5000; |
115 char buffer3[10000]; | 120 const int kSize3 = 10000; |
116 CacheTestFillBuffer(buffer1, sizeof(buffer1), false); | 121 scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize1); |
117 CacheTestFillBuffer(buffer2, sizeof(buffer2), false); | 122 scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize2); |
118 CacheTestFillBuffer(buffer3, sizeof(buffer3), false); | 123 scoped_refptr<net::IOBuffer> buffer3 = new net::IOBuffer(kSize3); |
| 124 CacheTestFillBuffer(buffer1->data(), kSize1, false); |
| 125 CacheTestFillBuffer(buffer2->data(), kSize2, false); |
| 126 CacheTestFillBuffer(buffer3->data(), kSize3, false); |
119 | 127 |
120 EXPECT_EQ(0, entry1->ReadData(0, 0, buffer1, sizeof(buffer1), &callback1)); | 128 EXPECT_EQ(0, entry1->ReadData(0, 0, buffer1, kSize1, &callback1)); |
121 base::strlcpy(buffer1, "the data", arraysize(buffer1)); | 129 base::strlcpy(buffer1->data(), "the data", kSize1); |
122 int expected = 0; | 130 int expected = 0; |
123 int ret = entry1->WriteData(0, 0, buffer1, sizeof(buffer1), &callback2, | 131 int ret = entry1->WriteData(0, 0, buffer1, kSize1, &callback2, false); |
124 false); | |
125 EXPECT_TRUE(10 == ret || net::ERR_IO_PENDING == ret); | 132 EXPECT_TRUE(10 == ret || net::ERR_IO_PENDING == ret); |
126 if (net::ERR_IO_PENDING == ret) | 133 if (net::ERR_IO_PENDING == ret) |
127 expected++; | 134 expected++; |
128 | 135 |
129 memset(buffer2, 0, sizeof(buffer1)); | 136 memset(buffer2->data(), 0, kSize1); |
130 ret = entry1->ReadData(0, 0, buffer2, sizeof(buffer1), &callback3); | 137 ret = entry1->ReadData(0, 0, buffer2, kSize1, &callback3); |
131 EXPECT_TRUE(10 == ret || net::ERR_IO_PENDING == ret); | 138 EXPECT_TRUE(10 == ret || net::ERR_IO_PENDING == ret); |
132 if (net::ERR_IO_PENDING == ret) | 139 if (net::ERR_IO_PENDING == ret) |
133 expected++; | 140 expected++; |
134 | 141 |
135 g_cache_tests_max_id = 3; | 142 g_cache_tests_max_id = 3; |
136 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 143 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
137 EXPECT_STREQ("the data", buffer2); | 144 EXPECT_STREQ("the data", buffer2->data()); |
138 | 145 |
139 base::strlcpy(buffer2, "The really big data goes here", arraysize(buffer2)); | 146 base::strlcpy(buffer2->data(), "The really big data goes here", kSize2); |
140 ret = entry1->WriteData(1, 1500, buffer2, sizeof(buffer2), &callback4, false); | 147 ret = entry1->WriteData(1, 1500, buffer2, kSize2, &callback4, false); |
141 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); | 148 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); |
142 if (net::ERR_IO_PENDING == ret) | 149 if (net::ERR_IO_PENDING == ret) |
143 expected++; | 150 expected++; |
144 | 151 |
145 memset(buffer3, 0, sizeof(buffer2)); | 152 memset(buffer3->data(), 0, kSize2); |
146 ret = entry1->ReadData(1, 1511, buffer3, sizeof(buffer2), &callback5); | 153 ret = entry1->ReadData(1, 1511, buffer3, kSize2, &callback5); |
147 EXPECT_TRUE(4989 == ret || net::ERR_IO_PENDING == ret); | 154 EXPECT_TRUE(4989 == ret || net::ERR_IO_PENDING == ret); |
148 if (net::ERR_IO_PENDING == ret) | 155 if (net::ERR_IO_PENDING == ret) |
149 expected++; | 156 expected++; |
150 | 157 |
151 g_cache_tests_max_id = 5; | 158 g_cache_tests_max_id = 5; |
152 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 159 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
153 EXPECT_STREQ("big data goes here", buffer3); | 160 EXPECT_STREQ("big data goes here", buffer3->data()); |
154 ret = entry1->ReadData(1, 0, buffer2, sizeof(buffer2), &callback6); | 161 ret = entry1->ReadData(1, 0, buffer2, kSize2, &callback6); |
155 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); | 162 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); |
156 if (net::ERR_IO_PENDING == ret) | 163 if (net::ERR_IO_PENDING == ret) |
157 expected++; | 164 expected++; |
158 | 165 |
159 memset(buffer3, 0, sizeof(buffer3)); | 166 memset(buffer3->data(), 0, kSize3); |
160 | 167 |
161 g_cache_tests_max_id = 6; | 168 g_cache_tests_max_id = 6; |
162 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 169 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
163 EXPECT_EQ(0, memcmp(buffer2, buffer3, 1500)); | 170 EXPECT_EQ(0, memcmp(buffer2->data(), buffer3->data(), 1500)); |
164 ret = entry1->ReadData(1, 5000, buffer2, sizeof(buffer2), &callback7); | 171 ret = entry1->ReadData(1, 5000, buffer2, kSize2, &callback7); |
165 EXPECT_TRUE(1500 == ret || net::ERR_IO_PENDING == ret); | 172 EXPECT_TRUE(1500 == ret || net::ERR_IO_PENDING == ret); |
166 if (net::ERR_IO_PENDING == ret) | 173 if (net::ERR_IO_PENDING == ret) |
167 expected++; | 174 expected++; |
168 | 175 |
169 EXPECT_EQ(0, entry1->ReadData(1, 6500, buffer2, sizeof(buffer2), &callback8)); | 176 EXPECT_EQ(0, entry1->ReadData(1, 6500, buffer2, kSize2, &callback8)); |
170 ret = entry1->ReadData(1, 0, buffer3, sizeof(buffer3), &callback9); | 177 ret = entry1->ReadData(1, 0, buffer3, kSize3, &callback9); |
171 EXPECT_TRUE(6500 == ret || net::ERR_IO_PENDING == ret); | 178 EXPECT_TRUE(6500 == ret || net::ERR_IO_PENDING == ret); |
172 if (net::ERR_IO_PENDING == ret) | 179 if (net::ERR_IO_PENDING == ret) |
173 expected++; | 180 expected++; |
174 | 181 |
175 ret = entry1->WriteData(1, 0, buffer3, 8192, &callback10, false); | 182 ret = entry1->WriteData(1, 0, buffer3, 8192, &callback10, false); |
176 EXPECT_TRUE(8192 == ret || net::ERR_IO_PENDING == ret); | 183 EXPECT_TRUE(8192 == ret || net::ERR_IO_PENDING == ret); |
177 if (net::ERR_IO_PENDING == ret) | 184 if (net::ERR_IO_PENDING == ret) |
178 expected++; | 185 expected++; |
179 | 186 |
180 ret = entry1->ReadData(1, 0, buffer3, sizeof(buffer3), &callback11); | 187 ret = entry1->ReadData(1, 0, buffer3, kSize3, &callback11); |
181 EXPECT_TRUE(8192 == ret || net::ERR_IO_PENDING == ret); | 188 EXPECT_TRUE(8192 == ret || net::ERR_IO_PENDING == ret); |
182 if (net::ERR_IO_PENDING == ret) | 189 if (net::ERR_IO_PENDING == ret) |
183 expected++; | 190 expected++; |
184 | 191 |
185 EXPECT_EQ(8192, entry1->GetDataSize(1)); | 192 EXPECT_EQ(8192, entry1->GetDataSize(1)); |
186 | 193 |
187 ret = entry1->ReadData(0, 0, buffer1, sizeof(buffer1), &callback12); | 194 ret = entry1->ReadData(0, 0, buffer1, kSize1, &callback12); |
188 EXPECT_TRUE(10 == ret || net::ERR_IO_PENDING == ret); | 195 EXPECT_TRUE(10 == ret || net::ERR_IO_PENDING == ret); |
189 if (net::ERR_IO_PENDING == ret) | 196 if (net::ERR_IO_PENDING == ret) |
190 expected++; | 197 expected++; |
191 | 198 |
192 ret = entry1->ReadData(1, 0, buffer2, sizeof(buffer2), &callback13); | 199 ret = entry1->ReadData(1, 0, buffer2, kSize2, &callback13); |
193 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); | 200 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); |
194 if (net::ERR_IO_PENDING == ret) | 201 if (net::ERR_IO_PENDING == ret) |
195 expected++; | 202 expected++; |
196 | 203 |
197 g_cache_tests_max_id = 13; | 204 g_cache_tests_max_id = 13; |
198 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 205 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
199 | 206 |
200 EXPECT_FALSE(g_cache_tests_error); | 207 EXPECT_FALSE(g_cache_tests_error); |
201 EXPECT_EQ(expected, g_cache_tests_received); | 208 EXPECT_EQ(expected, g_cache_tests_received); |
202 | 209 |
(...skipping 10 matching lines...) Expand all Loading... |
213 TEST_F(DiskCacheEntryTest, MemoryOnlyInternalAsyncIO) { | 220 TEST_F(DiskCacheEntryTest, MemoryOnlyInternalAsyncIO) { |
214 SetMemoryOnlyMode(); | 221 SetMemoryOnlyMode(); |
215 InitCache(); | 222 InitCache(); |
216 InternalAsyncIO(); | 223 InternalAsyncIO(); |
217 } | 224 } |
218 | 225 |
219 void DiskCacheEntryTest::ExternalSyncIO() { | 226 void DiskCacheEntryTest::ExternalSyncIO() { |
220 disk_cache::Entry *entry1; | 227 disk_cache::Entry *entry1; |
221 ASSERT_TRUE(cache_->CreateEntry("the first key", &entry1)); | 228 ASSERT_TRUE(cache_->CreateEntry("the first key", &entry1)); |
222 | 229 |
223 char buffer1[17000], buffer2[25000]; | 230 const int kSize1 = 17000; |
224 CacheTestFillBuffer(buffer1, sizeof(buffer1), false); | 231 const int kSize2 = 25000; |
225 CacheTestFillBuffer(buffer2, sizeof(buffer2), false); | 232 scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize1); |
226 base::strlcpy(buffer1, "the data", arraysize(buffer1)); | 233 scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize2); |
227 EXPECT_EQ(17000, entry1->WriteData(0, 0, buffer1, sizeof(buffer1), NULL, | 234 CacheTestFillBuffer(buffer1->data(), kSize1, false); |
228 false)); | 235 CacheTestFillBuffer(buffer2->data(), kSize2, false); |
229 memset(buffer1, 0, sizeof(buffer1)); | 236 base::strlcpy(buffer1->data(), "the data", kSize1); |
230 EXPECT_EQ(17000, entry1->ReadData(0, 0, buffer1, sizeof(buffer1), NULL)); | 237 EXPECT_EQ(17000, entry1->WriteData(0, 0, buffer1, kSize1, NULL, false)); |
231 EXPECT_STREQ("the data", buffer1); | 238 memset(buffer1->data(), 0, kSize1); |
| 239 EXPECT_EQ(17000, entry1->ReadData(0, 0, buffer1, kSize1, NULL)); |
| 240 EXPECT_STREQ("the data", buffer1->data()); |
232 | 241 |
233 base::strlcpy(buffer2, "The really big data goes here", arraysize(buffer2)); | 242 base::strlcpy(buffer2->data(), "The really big data goes here", kSize2); |
234 EXPECT_EQ(25000, entry1->WriteData(1, 10000, buffer2, sizeof(buffer2), NULL, | 243 EXPECT_EQ(25000, entry1->WriteData(1, 10000, buffer2, kSize2, NULL, false)); |
235 false)); | 244 memset(buffer2->data(), 0, kSize2); |
236 memset(buffer2, 0, sizeof(buffer2)); | 245 EXPECT_EQ(24989, entry1->ReadData(1, 10011, buffer2, kSize2, NULL)); |
237 EXPECT_EQ(24989, entry1->ReadData(1, 10011, buffer2, sizeof(buffer2), NULL)); | 246 EXPECT_STREQ("big data goes here", buffer2->data()); |
238 EXPECT_STREQ("big data goes here", buffer2); | 247 EXPECT_EQ(25000, entry1->ReadData(1, 0, buffer2, kSize2, NULL)); |
239 EXPECT_EQ(25000, entry1->ReadData(1, 0, buffer2, sizeof(buffer2), NULL)); | 248 EXPECT_EQ(0, memcmp(buffer2->data(), buffer2->data(), 10000)); |
240 EXPECT_EQ(0, memcmp(buffer2, buffer2, 10000)); | 249 EXPECT_EQ(5000, entry1->ReadData(1, 30000, buffer2, kSize2, NULL)); |
241 EXPECT_EQ(5000, entry1->ReadData(1, 30000, buffer2, sizeof(buffer2), NULL)); | |
242 | 250 |
243 EXPECT_EQ(0, entry1->ReadData(1, 35000, buffer2, sizeof(buffer2), NULL)); | 251 EXPECT_EQ(0, entry1->ReadData(1, 35000, buffer2, kSize2, NULL)); |
244 EXPECT_EQ(17000, entry1->ReadData(1, 0, buffer1, sizeof(buffer1), NULL)); | 252 EXPECT_EQ(17000, entry1->ReadData(1, 0, buffer1, kSize1, NULL)); |
245 EXPECT_EQ(17000, entry1->WriteData(1, 20000, buffer1, sizeof(buffer1), NULL, | 253 EXPECT_EQ(17000, entry1->WriteData(1, 20000, buffer1, kSize1, NULL, false)); |
246 false)); | |
247 EXPECT_EQ(37000, entry1->GetDataSize(1)); | 254 EXPECT_EQ(37000, entry1->GetDataSize(1)); |
248 | 255 |
249 entry1->Doom(); | 256 entry1->Doom(); |
250 entry1->Close(); | 257 entry1->Close(); |
251 EXPECT_EQ(0, cache_->GetEntryCount()); | 258 EXPECT_EQ(0, cache_->GetEntryCount()); |
252 } | 259 } |
253 | 260 |
254 TEST_F(DiskCacheEntryTest, ExternalSyncIO) { | 261 TEST_F(DiskCacheEntryTest, ExternalSyncIO) { |
255 InitCache(); | 262 InitCache(); |
256 ExternalSyncIO(); | 263 ExternalSyncIO(); |
(...skipping 20 matching lines...) Expand all Loading... |
277 CallbackTest callback8(8, false); | 284 CallbackTest callback8(8, false); |
278 CallbackTest callback9(9, false); | 285 CallbackTest callback9(9, false); |
279 | 286 |
280 g_cache_tests_error = false; | 287 g_cache_tests_error = false; |
281 g_cache_tests_max_id = 0; | 288 g_cache_tests_max_id = 0; |
282 g_cache_tests_received = 0; | 289 g_cache_tests_received = 0; |
283 int expected = 0; | 290 int expected = 0; |
284 | 291 |
285 MessageLoopHelper helper; | 292 MessageLoopHelper helper; |
286 | 293 |
287 char buffer1[17000], buffer2[25000], buffer3[25000]; | 294 const int kSize1 = 17000; |
288 CacheTestFillBuffer(buffer1, sizeof(buffer1), false); | 295 const int kSize2 = 25000; |
289 CacheTestFillBuffer(buffer2, sizeof(buffer2), false); | 296 const int kSize3 = 25000; |
290 CacheTestFillBuffer(buffer3, sizeof(buffer3), false); | 297 scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize1); |
291 base::strlcpy(buffer1, "the data", arraysize(buffer1)); | 298 scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize2); |
292 int ret = entry1->WriteData(0, 0, buffer1, sizeof(buffer1), &callback1, | 299 scoped_refptr<net::IOBuffer> buffer3 = new net::IOBuffer(kSize3); |
293 false); | 300 CacheTestFillBuffer(buffer1->data(), kSize1, false); |
| 301 CacheTestFillBuffer(buffer2->data(), kSize2, false); |
| 302 CacheTestFillBuffer(buffer3->data(), kSize3, false); |
| 303 base::strlcpy(buffer1->data(), "the data", kSize1); |
| 304 int ret = entry1->WriteData(0, 0, buffer1, kSize1, &callback1, false); |
294 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); | 305 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); |
295 if (net::ERR_IO_PENDING == ret) | 306 if (net::ERR_IO_PENDING == ret) |
296 expected++; | 307 expected++; |
297 | 308 |
298 g_cache_tests_max_id = 1; | 309 g_cache_tests_max_id = 1; |
299 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 310 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
300 | 311 |
301 memset(buffer2, 0, sizeof(buffer1)); | 312 memset(buffer2->data(), 0, kSize1); |
302 ret = entry1->ReadData(0, 0, buffer2, sizeof(buffer1), &callback2); | 313 ret = entry1->ReadData(0, 0, buffer2, kSize1, &callback2); |
303 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); | 314 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); |
304 if (net::ERR_IO_PENDING == ret) | 315 if (net::ERR_IO_PENDING == ret) |
305 expected++; | 316 expected++; |
306 | 317 |
307 g_cache_tests_max_id = 2; | 318 g_cache_tests_max_id = 2; |
308 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 319 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
309 EXPECT_STREQ("the data", buffer1); | 320 EXPECT_STREQ("the data", buffer1->data()); |
310 | 321 |
311 base::strlcpy(buffer2, "The really big data goes here", arraysize(buffer2)); | 322 base::strlcpy(buffer2->data(), "The really big data goes here", kSize2); |
312 ret = entry1->WriteData(1, 10000, buffer2, sizeof(buffer2), &callback3, | 323 ret = entry1->WriteData(1, 10000, buffer2, kSize2, &callback3, false); |
313 false); | |
314 EXPECT_TRUE(25000 == ret || net::ERR_IO_PENDING == ret); | 324 EXPECT_TRUE(25000 == ret || net::ERR_IO_PENDING == ret); |
315 if (net::ERR_IO_PENDING == ret) | 325 if (net::ERR_IO_PENDING == ret) |
316 expected++; | 326 expected++; |
317 | 327 |
318 g_cache_tests_max_id = 3; | 328 g_cache_tests_max_id = 3; |
319 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 329 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
320 | 330 |
321 memset(buffer3, 0, sizeof(buffer3)); | 331 memset(buffer3->data(), 0, kSize3); |
322 ret = entry1->ReadData(1, 10011, buffer3, sizeof(buffer3), &callback4); | 332 ret = entry1->ReadData(1, 10011, buffer3, kSize3, &callback4); |
323 EXPECT_TRUE(24989 == ret || net::ERR_IO_PENDING == ret); | 333 EXPECT_TRUE(24989 == ret || net::ERR_IO_PENDING == ret); |
324 if (net::ERR_IO_PENDING == ret) | 334 if (net::ERR_IO_PENDING == ret) |
325 expected++; | 335 expected++; |
326 | 336 |
327 g_cache_tests_max_id = 4; | 337 g_cache_tests_max_id = 4; |
328 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 338 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
329 EXPECT_STREQ("big data goes here", buffer3); | 339 EXPECT_STREQ("big data goes here", buffer3->data()); |
330 ret = entry1->ReadData(1, 0, buffer2, sizeof(buffer2), &callback5); | 340 ret = entry1->ReadData(1, 0, buffer2, kSize2, &callback5); |
331 EXPECT_TRUE(25000 == ret || net::ERR_IO_PENDING == ret); | 341 EXPECT_TRUE(25000 == ret || net::ERR_IO_PENDING == ret); |
332 if (net::ERR_IO_PENDING == ret) | 342 if (net::ERR_IO_PENDING == ret) |
333 expected++; | 343 expected++; |
334 | 344 |
335 g_cache_tests_max_id = 5; | 345 g_cache_tests_max_id = 5; |
336 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 346 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
337 EXPECT_EQ(0, memcmp(buffer2, buffer2, 10000)); | 347 EXPECT_EQ(0, memcmp(buffer2->data(), buffer2->data(), 10000)); |
338 ret = entry1->ReadData(1, 30000, buffer2, sizeof(buffer2), &callback6); | 348 ret = entry1->ReadData(1, 30000, buffer2, kSize2, &callback6); |
339 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); | 349 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); |
340 if (net::ERR_IO_PENDING == ret) | 350 if (net::ERR_IO_PENDING == ret) |
341 expected++; | 351 expected++; |
342 | 352 |
343 EXPECT_EQ(0, entry1->ReadData(1, 35000, buffer2, sizeof(buffer2), | 353 EXPECT_EQ(0, entry1->ReadData(1, 35000, buffer2, kSize2, &callback7)); |
344 &callback7)); | 354 ret = entry1->ReadData(1, 0, buffer1, kSize1, &callback8); |
345 ret = entry1->ReadData(1, 0, buffer1, sizeof(buffer1), &callback8); | |
346 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); | 355 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); |
347 if (net::ERR_IO_PENDING == ret) | 356 if (net::ERR_IO_PENDING == ret) |
348 expected++; | 357 expected++; |
349 ret = entry1->WriteData(1, 20000, buffer1, sizeof(buffer1), &callback9, | 358 ret = entry1->WriteData(1, 20000, buffer1, kSize1, &callback9, false); |
350 false); | |
351 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); | 359 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); |
352 if (net::ERR_IO_PENDING == ret) | 360 if (net::ERR_IO_PENDING == ret) |
353 expected++; | 361 expected++; |
354 EXPECT_EQ(37000, entry1->GetDataSize(1)); | 362 EXPECT_EQ(37000, entry1->GetDataSize(1)); |
355 | 363 |
356 g_cache_tests_max_id = 9; | 364 g_cache_tests_max_id = 9; |
357 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 365 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
358 | 366 |
359 EXPECT_FALSE(g_cache_tests_error); | 367 EXPECT_FALSE(g_cache_tests_error); |
360 EXPECT_EQ(expected, g_cache_tests_received); | 368 EXPECT_EQ(expected, g_cache_tests_received); |
(...skipping 13 matching lines...) Expand all Loading... |
374 InitCache(); | 382 InitCache(); |
375 ExternalAsyncIO(); | 383 ExternalAsyncIO(); |
376 } | 384 } |
377 | 385 |
378 void DiskCacheEntryTest::StreamAccess() { | 386 void DiskCacheEntryTest::StreamAccess() { |
379 disk_cache::Entry *entry = NULL; | 387 disk_cache::Entry *entry = NULL; |
380 ASSERT_TRUE(cache_->CreateEntry("the first key", &entry)); | 388 ASSERT_TRUE(cache_->CreateEntry("the first key", &entry)); |
381 ASSERT_TRUE(NULL != entry); | 389 ASSERT_TRUE(NULL != entry); |
382 | 390 |
383 const int kBufferSize = 1024; | 391 const int kBufferSize = 1024; |
384 char buffer1[kBufferSize]; | 392 scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kBufferSize); |
385 char buffer2[kBufferSize]; | 393 scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kBufferSize); |
386 | 394 |
387 const int kNumStreams = 3; | 395 const int kNumStreams = 3; |
388 for (int i = 0; i < kNumStreams; i++) { | 396 for (int i = 0; i < kNumStreams; i++) { |
389 CacheTestFillBuffer(buffer1, kBufferSize, false); | 397 CacheTestFillBuffer(buffer1->data(), kBufferSize, false); |
390 EXPECT_EQ(kBufferSize, entry->WriteData(i, 0, buffer1, kBufferSize, NULL, | 398 EXPECT_EQ(kBufferSize, entry->WriteData(i, 0, buffer1, kBufferSize, NULL, |
391 false)); | 399 false)); |
392 memset(buffer2, 0, kBufferSize); | 400 memset(buffer2->data(), 0, kBufferSize); |
393 EXPECT_EQ(kBufferSize, entry->ReadData(i, 0, buffer2, kBufferSize, NULL)); | 401 EXPECT_EQ(kBufferSize, entry->ReadData(i, 0, buffer2, kBufferSize, NULL)); |
394 EXPECT_EQ(0, memcmp(buffer1, buffer2, kBufferSize)); | 402 EXPECT_EQ(0, memcmp(buffer1->data(), buffer2->data(), kBufferSize)); |
395 } | 403 } |
396 | 404 |
397 EXPECT_EQ(net::ERR_INVALID_ARGUMENT, | 405 EXPECT_EQ(net::ERR_INVALID_ARGUMENT, |
398 entry->ReadData(kNumStreams, 0, buffer1, kBufferSize, NULL)); | 406 entry->ReadData(kNumStreams, 0, buffer1, kBufferSize, NULL)); |
399 entry->Close(); | 407 entry->Close(); |
400 } | 408 } |
401 | 409 |
402 TEST_F(DiskCacheEntryTest, StreamAccess) { | 410 TEST_F(DiskCacheEntryTest, StreamAccess) { |
403 InitCache(); | 411 InitCache(); |
404 StreamAccess(); | 412 StreamAccess(); |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
454 SetMemoryOnlyMode(); | 462 SetMemoryOnlyMode(); |
455 InitCache(); | 463 InitCache(); |
456 GetKey(); | 464 GetKey(); |
457 } | 465 } |
458 | 466 |
459 void DiskCacheEntryTest::GrowData() { | 467 void DiskCacheEntryTest::GrowData() { |
460 std::string key1("the first key"); | 468 std::string key1("the first key"); |
461 disk_cache::Entry *entry1, *entry2; | 469 disk_cache::Entry *entry1, *entry2; |
462 ASSERT_TRUE(cache_->CreateEntry(key1, &entry1)); | 470 ASSERT_TRUE(cache_->CreateEntry(key1, &entry1)); |
463 | 471 |
464 char buffer1[20000]; | 472 const int kSize = 20000; |
465 char buffer2[20000]; | 473 scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize); |
466 CacheTestFillBuffer(buffer1, sizeof(buffer1), false); | 474 scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize); |
467 memset(buffer2, 0, sizeof(buffer2)); | 475 CacheTestFillBuffer(buffer1->data(), kSize, false); |
| 476 memset(buffer2->data(), 0, kSize); |
468 | 477 |
469 base::strlcpy(buffer1, "the data", arraysize(buffer1)); | 478 base::strlcpy(buffer1->data(), "the data", kSize); |
470 EXPECT_EQ(10, entry1->WriteData(0, 0, buffer1, 10, NULL, false)); | 479 EXPECT_EQ(10, entry1->WriteData(0, 0, buffer1, 10, NULL, false)); |
471 EXPECT_EQ(10, entry1->ReadData(0, 0, buffer2, 10, NULL)); | 480 EXPECT_EQ(10, entry1->ReadData(0, 0, buffer2, 10, NULL)); |
472 EXPECT_STREQ("the data", buffer2); | 481 EXPECT_STREQ("the data", buffer2->data()); |
473 EXPECT_EQ(10, entry1->GetDataSize(0)); | 482 EXPECT_EQ(10, entry1->GetDataSize(0)); |
474 | 483 |
475 EXPECT_EQ(2000, entry1->WriteData(0, 0, buffer1, 2000, NULL, false)); | 484 EXPECT_EQ(2000, entry1->WriteData(0, 0, buffer1, 2000, NULL, false)); |
476 EXPECT_EQ(2000, entry1->GetDataSize(0)); | 485 EXPECT_EQ(2000, entry1->GetDataSize(0)); |
477 EXPECT_EQ(2000, entry1->ReadData(0, 0, buffer2, 2000, NULL)); | 486 EXPECT_EQ(2000, entry1->ReadData(0, 0, buffer2, 2000, NULL)); |
478 EXPECT_TRUE(!memcmp(buffer1, buffer2, 2000)); | 487 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 2000)); |
479 | 488 |
480 EXPECT_EQ(20000, entry1->WriteData(0, 0, buffer1, sizeof(buffer1), NULL, | 489 EXPECT_EQ(20000, entry1->WriteData(0, 0, buffer1, kSize, NULL, false)); |
481 false)); | |
482 EXPECT_EQ(20000, entry1->GetDataSize(0)); | 490 EXPECT_EQ(20000, entry1->GetDataSize(0)); |
483 EXPECT_EQ(20000, entry1->ReadData(0, 0, buffer2, sizeof(buffer2), NULL)); | 491 EXPECT_EQ(20000, entry1->ReadData(0, 0, buffer2, kSize, NULL)); |
484 EXPECT_TRUE(!memcmp(buffer1, buffer2, sizeof(buffer1))); | 492 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), kSize)); |
485 entry1->Close(); | 493 entry1->Close(); |
486 | 494 |
487 memset(buffer2, 0, sizeof(buffer2)); | 495 memset(buffer2->data(), 0, kSize); |
488 ASSERT_TRUE(cache_->CreateEntry("Second key", &entry2)); | 496 ASSERT_TRUE(cache_->CreateEntry("Second key", &entry2)); |
489 EXPECT_EQ(10, entry2->WriteData(0, 0, buffer1, 10, NULL, false)); | 497 EXPECT_EQ(10, entry2->WriteData(0, 0, buffer1, 10, NULL, false)); |
490 EXPECT_EQ(10, entry2->GetDataSize(0)); | 498 EXPECT_EQ(10, entry2->GetDataSize(0)); |
491 entry2->Close(); | 499 entry2->Close(); |
492 | 500 |
493 // Go from an internal address to a bigger block size. | 501 // Go from an internal address to a bigger block size. |
494 ASSERT_TRUE(cache_->OpenEntry("Second key", &entry2)); | 502 ASSERT_TRUE(cache_->OpenEntry("Second key", &entry2)); |
495 EXPECT_EQ(2000, entry2->WriteData(0, 0, buffer1, 2000, NULL, false)); | 503 EXPECT_EQ(2000, entry2->WriteData(0, 0, buffer1, 2000, NULL, false)); |
496 EXPECT_EQ(2000, entry2->GetDataSize(0)); | 504 EXPECT_EQ(2000, entry2->GetDataSize(0)); |
497 EXPECT_EQ(2000, entry2->ReadData(0, 0, buffer2, 2000, NULL)); | 505 EXPECT_EQ(2000, entry2->ReadData(0, 0, buffer2, 2000, NULL)); |
498 EXPECT_TRUE(!memcmp(buffer1, buffer2, 2000)); | 506 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 2000)); |
499 entry2->Close(); | 507 entry2->Close(); |
500 memset(buffer2, 0, sizeof(buffer2)); | 508 memset(buffer2->data(), 0, kSize); |
501 | 509 |
502 // Go from an internal address to an external one. | 510 // Go from an internal address to an external one. |
503 ASSERT_TRUE(cache_->OpenEntry("Second key", &entry2)); | 511 ASSERT_TRUE(cache_->OpenEntry("Second key", &entry2)); |
504 EXPECT_EQ(20000, entry2->WriteData(0, 0, buffer1, sizeof(buffer1), NULL, | 512 EXPECT_EQ(20000, entry2->WriteData(0, 0, buffer1, kSize, NULL, false)); |
505 false)); | |
506 EXPECT_EQ(20000, entry2->GetDataSize(0)); | 513 EXPECT_EQ(20000, entry2->GetDataSize(0)); |
507 EXPECT_EQ(20000, entry2->ReadData(0, 0, buffer2, sizeof(buffer2), NULL)); | 514 EXPECT_EQ(20000, entry2->ReadData(0, 0, buffer2, kSize, NULL)); |
508 EXPECT_TRUE(!memcmp(buffer1, buffer2, sizeof(buffer1))); | 515 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), kSize)); |
509 entry2->Close(); | 516 entry2->Close(); |
510 } | 517 } |
511 | 518 |
512 TEST_F(DiskCacheEntryTest, GrowData) { | 519 TEST_F(DiskCacheEntryTest, GrowData) { |
513 InitCache(); | 520 InitCache(); |
514 GrowData(); | 521 GrowData(); |
515 } | 522 } |
516 | 523 |
517 TEST_F(DiskCacheEntryTest, MemoryOnlyGrowData) { | 524 TEST_F(DiskCacheEntryTest, MemoryOnlyGrowData) { |
518 SetMemoryOnlyMode(); | 525 SetMemoryOnlyMode(); |
519 InitCache(); | 526 InitCache(); |
520 GrowData(); | 527 GrowData(); |
521 } | 528 } |
522 | 529 |
523 void DiskCacheEntryTest::TruncateData() { | 530 void DiskCacheEntryTest::TruncateData() { |
524 std::string key1("the first key"); | 531 std::string key1("the first key"); |
525 disk_cache::Entry *entry1; | 532 disk_cache::Entry *entry1; |
526 ASSERT_TRUE(cache_->CreateEntry(key1, &entry1)); | 533 ASSERT_TRUE(cache_->CreateEntry(key1, &entry1)); |
527 | 534 |
528 char buffer1[20000]; | 535 const int kSize1 = 20000; |
529 char buffer2[20000]; | 536 const int kSize2 = 20000; |
| 537 scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize1); |
| 538 scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize2); |
530 | 539 |
531 CacheTestFillBuffer(buffer1, sizeof(buffer1), false); | 540 CacheTestFillBuffer(buffer1->data(), kSize1, false); |
532 memset(buffer2, 0, sizeof(buffer2)); | 541 memset(buffer2->data(), 0, kSize2); |
533 | 542 |
534 // Simple truncation: | 543 // Simple truncation: |
535 EXPECT_EQ(200, entry1->WriteData(0, 0, buffer1, 200, NULL, false)); | 544 EXPECT_EQ(200, entry1->WriteData(0, 0, buffer1, 200, NULL, false)); |
536 EXPECT_EQ(200, entry1->GetDataSize(0)); | 545 EXPECT_EQ(200, entry1->GetDataSize(0)); |
537 EXPECT_EQ(100, entry1->WriteData(0, 0, buffer1, 100, NULL, false)); | 546 EXPECT_EQ(100, entry1->WriteData(0, 0, buffer1, 100, NULL, false)); |
538 EXPECT_EQ(200, entry1->GetDataSize(0)); | 547 EXPECT_EQ(200, entry1->GetDataSize(0)); |
539 EXPECT_EQ(100, entry1->WriteData(0, 0, buffer1, 100, NULL, true)); | 548 EXPECT_EQ(100, entry1->WriteData(0, 0, buffer1, 100, NULL, true)); |
540 EXPECT_EQ(100, entry1->GetDataSize(0)); | 549 EXPECT_EQ(100, entry1->GetDataSize(0)); |
541 EXPECT_EQ(0, entry1->WriteData(0, 50, buffer1, 0, NULL, true)); | 550 EXPECT_EQ(0, entry1->WriteData(0, 50, buffer1, 0, NULL, true)); |
542 EXPECT_EQ(50, entry1->GetDataSize(0)); | 551 EXPECT_EQ(50, entry1->GetDataSize(0)); |
543 EXPECT_EQ(0, entry1->WriteData(0, 0, buffer1, 0, NULL, true)); | 552 EXPECT_EQ(0, entry1->WriteData(0, 0, buffer1, 0, NULL, true)); |
544 EXPECT_EQ(0, entry1->GetDataSize(0)); | 553 EXPECT_EQ(0, entry1->GetDataSize(0)); |
545 entry1->Close(); | 554 entry1->Close(); |
546 ASSERT_TRUE(cache_->OpenEntry(key1, &entry1)); | 555 ASSERT_TRUE(cache_->OpenEntry(key1, &entry1)); |
547 | 556 |
548 // Go to an external file. | 557 // Go to an external file. |
549 EXPECT_EQ(20000, entry1->WriteData(0, 0, buffer1, 20000, NULL, true)); | 558 EXPECT_EQ(20000, entry1->WriteData(0, 0, buffer1, 20000, NULL, true)); |
550 EXPECT_EQ(20000, entry1->GetDataSize(0)); | 559 EXPECT_EQ(20000, entry1->GetDataSize(0)); |
551 EXPECT_EQ(20000, entry1->ReadData(0, 0, buffer2, 20000, NULL)); | 560 EXPECT_EQ(20000, entry1->ReadData(0, 0, buffer2, 20000, NULL)); |
552 EXPECT_TRUE(!memcmp(buffer1, buffer2, 20000)); | 561 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 20000)); |
553 memset(buffer2, 0, sizeof(buffer2)); | 562 memset(buffer2->data(), 0, kSize2); |
554 | 563 |
555 // External file truncation | 564 // External file truncation |
556 EXPECT_EQ(18000, entry1->WriteData(0, 0, buffer1, 18000, NULL, false)); | 565 EXPECT_EQ(18000, entry1->WriteData(0, 0, buffer1, 18000, NULL, false)); |
557 EXPECT_EQ(20000, entry1->GetDataSize(0)); | 566 EXPECT_EQ(20000, entry1->GetDataSize(0)); |
558 EXPECT_EQ(18000, entry1->WriteData(0, 0, buffer1, 18000, NULL, true)); | 567 EXPECT_EQ(18000, entry1->WriteData(0, 0, buffer1, 18000, NULL, true)); |
559 EXPECT_EQ(18000, entry1->GetDataSize(0)); | 568 EXPECT_EQ(18000, entry1->GetDataSize(0)); |
560 EXPECT_EQ(0, entry1->WriteData(0, 17500, buffer1, 0, NULL, true)); | 569 EXPECT_EQ(0, entry1->WriteData(0, 17500, buffer1, 0, NULL, true)); |
561 EXPECT_EQ(17500, entry1->GetDataSize(0)); | 570 EXPECT_EQ(17500, entry1->GetDataSize(0)); |
562 | 571 |
563 // And back to an internal block. | 572 // And back to an internal block. |
564 EXPECT_EQ(600, entry1->WriteData(0, 1000, buffer1, 600, NULL, true)); | 573 EXPECT_EQ(600, entry1->WriteData(0, 1000, buffer1, 600, NULL, true)); |
565 EXPECT_EQ(1600, entry1->GetDataSize(0)); | 574 EXPECT_EQ(1600, entry1->GetDataSize(0)); |
566 EXPECT_EQ(600, entry1->ReadData(0, 1000, buffer2, 600, NULL)); | 575 EXPECT_EQ(600, entry1->ReadData(0, 1000, buffer2, 600, NULL)); |
567 EXPECT_TRUE(!memcmp(buffer1, buffer2, 600)); | 576 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 600)); |
568 EXPECT_EQ(1000, entry1->ReadData(0, 0, buffer2, 1000, NULL)); | 577 EXPECT_EQ(1000, entry1->ReadData(0, 0, buffer2, 1000, NULL)); |
569 EXPECT_TRUE(!memcmp(buffer1, buffer2, 1000)) << "Preserves previous data"; | 578 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 1000)) << |
| 579 "Preserves previous data"; |
570 | 580 |
571 // Go from external file to zero length. | 581 // Go from external file to zero length. |
572 EXPECT_EQ(20000, entry1->WriteData(0, 0, buffer1, 20000, NULL, true)); | 582 EXPECT_EQ(20000, entry1->WriteData(0, 0, buffer1, 20000, NULL, true)); |
573 EXPECT_EQ(20000, entry1->GetDataSize(0)); | 583 EXPECT_EQ(20000, entry1->GetDataSize(0)); |
574 EXPECT_EQ(0, entry1->WriteData(0, 0, buffer1, 0, NULL, true)); | 584 EXPECT_EQ(0, entry1->WriteData(0, 0, buffer1, 0, NULL, true)); |
575 EXPECT_EQ(0, entry1->GetDataSize(0)); | 585 EXPECT_EQ(0, entry1->GetDataSize(0)); |
576 | 586 |
577 entry1->Close(); | 587 entry1->Close(); |
578 } | 588 } |
579 | 589 |
580 TEST_F(DiskCacheEntryTest, TruncateData) { | 590 TEST_F(DiskCacheEntryTest, TruncateData) { |
581 InitCache(); | 591 InitCache(); |
582 TruncateData(); | 592 TruncateData(); |
583 | 593 |
584 // We generate asynchronous IO that is not really tracked until completion | 594 // We generate asynchronous IO that is not really tracked until completion |
585 // so we just wait here before running the next test. | 595 // so we just wait here before running the next test. |
586 MessageLoopHelper helper; | 596 MessageLoopHelper helper; |
587 helper.WaitUntilCacheIoFinished(1); | 597 helper.WaitUntilCacheIoFinished(1); |
588 } | 598 } |
589 | 599 |
590 TEST_F(DiskCacheEntryTest, MemoryOnlyTruncateData) { | 600 TEST_F(DiskCacheEntryTest, MemoryOnlyTruncateData) { |
591 SetMemoryOnlyMode(); | 601 SetMemoryOnlyMode(); |
592 InitCache(); | 602 InitCache(); |
593 TruncateData(); | 603 TruncateData(); |
594 } | 604 } |
595 | 605 |
| 606 void DiskCacheEntryTest::ZeroLengthIO() { |
| 607 std::string key1("the first key"); |
| 608 disk_cache::Entry *entry1; |
| 609 ASSERT_TRUE(cache_->CreateEntry(key1, &entry1)); |
| 610 |
| 611 EXPECT_EQ(0, entry1->ReadData(0, 0, NULL, 0, NULL)); |
| 612 EXPECT_EQ(0, entry1->WriteData(0, 0, NULL, 0, NULL, false)); |
| 613 |
| 614 // This write should extend the entry. |
| 615 EXPECT_EQ(0, entry1->WriteData(0, 1000, NULL, 0, NULL, false)); |
| 616 EXPECT_EQ(0, entry1->ReadData(0, 500, NULL, 0, NULL)); |
| 617 EXPECT_EQ(0, entry1->ReadData(0, 2000, NULL, 0, NULL)); |
| 618 EXPECT_EQ(1000, entry1->GetDataSize(0)); |
| 619 entry1->Close(); |
| 620 } |
| 621 |
| 622 TEST_F(DiskCacheEntryTest, ZeroLengthIO) { |
| 623 InitCache(); |
| 624 ZeroLengthIO(); |
| 625 } |
| 626 |
| 627 TEST_F(DiskCacheEntryTest, MemoryOnlyZeroLengthIO) { |
| 628 SetMemoryOnlyMode(); |
| 629 InitCache(); |
| 630 ZeroLengthIO(); |
| 631 } |
| 632 |
596 // Write more than the total cache capacity but to a single entry. |size| is the | 633 // Write more than the total cache capacity but to a single entry. |size| is the |
597 // amount of bytes to write each time. | 634 // amount of bytes to write each time. |
598 void DiskCacheEntryTest::ReuseEntry(int size) { | 635 void DiskCacheEntryTest::ReuseEntry(int size) { |
599 std::string key1("the first key"); | 636 std::string key1("the first key"); |
600 disk_cache::Entry *entry; | 637 disk_cache::Entry *entry; |
601 ASSERT_TRUE(cache_->CreateEntry(key1, &entry)); | 638 ASSERT_TRUE(cache_->CreateEntry(key1, &entry)); |
602 | 639 |
603 entry->Close(); | 640 entry->Close(); |
604 std::string key2("the second key"); | 641 std::string key2("the second key"); |
605 ASSERT_TRUE(cache_->CreateEntry(key2, &entry)); | 642 ASSERT_TRUE(cache_->CreateEntry(key2, &entry)); |
606 | 643 |
607 scoped_array<char> buffer(new char[size]); | 644 scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(size); |
608 CacheTestFillBuffer(buffer.get(), size, false); | 645 CacheTestFillBuffer(buffer->data(), size, false); |
609 | 646 |
610 for (int i = 0; i < 15; i++) { | 647 for (int i = 0; i < 15; i++) { |
611 EXPECT_EQ(0, entry->WriteData(0, 0, buffer.get(), 0, NULL, true)); | 648 EXPECT_EQ(0, entry->WriteData(0, 0, buffer, 0, NULL, true)); |
612 EXPECT_EQ(size, entry->WriteData(0, 0, buffer.get(), size, NULL, false)); | 649 EXPECT_EQ(size, entry->WriteData(0, 0, buffer, size, NULL, false)); |
613 entry->Close(); | 650 entry->Close(); |
614 ASSERT_TRUE(cache_->OpenEntry(key2, &entry)); | 651 ASSERT_TRUE(cache_->OpenEntry(key2, &entry)); |
615 } | 652 } |
616 | 653 |
617 entry->Close(); | 654 entry->Close(); |
618 ASSERT_TRUE(cache_->OpenEntry(key1, &entry)) << "have not evicted this entry"; | 655 ASSERT_TRUE(cache_->OpenEntry(key1, &entry)) << "have not evicted this entry"; |
619 entry->Close(); | 656 entry->Close(); |
620 } | 657 } |
621 | 658 |
622 TEST_F(DiskCacheEntryTest, ReuseExternalEntry) { | 659 TEST_F(DiskCacheEntryTest, ReuseExternalEntry) { |
(...skipping 25 matching lines...) Expand all Loading... |
648 InitCache(); | 685 InitCache(); |
649 ReuseEntry(10 * 1024); | 686 ReuseEntry(10 * 1024); |
650 } | 687 } |
651 | 688 |
652 // Reading somewhere that was not written should return zeros. | 689 // Reading somewhere that was not written should return zeros. |
653 void DiskCacheEntryTest::InvalidData() { | 690 void DiskCacheEntryTest::InvalidData() { |
654 std::string key1("the first key"); | 691 std::string key1("the first key"); |
655 disk_cache::Entry *entry1; | 692 disk_cache::Entry *entry1; |
656 ASSERT_TRUE(cache_->CreateEntry(key1, &entry1)); | 693 ASSERT_TRUE(cache_->CreateEntry(key1, &entry1)); |
657 | 694 |
658 char buffer1[20000]; | 695 const int kSize1 = 20000; |
659 char buffer2[20000]; | 696 const int kSize2 = 20000; |
660 char buffer3[20000]; | 697 const int kSize3 = 20000; |
| 698 scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize1); |
| 699 scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize2); |
| 700 scoped_refptr<net::IOBuffer> buffer3 = new net::IOBuffer(kSize3); |
661 | 701 |
662 CacheTestFillBuffer(buffer1, sizeof(buffer1), false); | 702 CacheTestFillBuffer(buffer1->data(), kSize1, false); |
663 memset(buffer2, 0, sizeof(buffer2)); | 703 memset(buffer2->data(), 0, kSize2); |
664 | 704 |
665 // Simple data grow: | 705 // Simple data grow: |
666 EXPECT_EQ(200, entry1->WriteData(0, 400, buffer1, 200, NULL, false)); | 706 EXPECT_EQ(200, entry1->WriteData(0, 400, buffer1, 200, NULL, false)); |
667 EXPECT_EQ(600, entry1->GetDataSize(0)); | 707 EXPECT_EQ(600, entry1->GetDataSize(0)); |
668 EXPECT_EQ(100, entry1->ReadData(0, 300, buffer3, 100, NULL)); | 708 EXPECT_EQ(100, entry1->ReadData(0, 300, buffer3, 100, NULL)); |
669 EXPECT_TRUE(!memcmp(buffer3, buffer2, 100)); | 709 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100)); |
670 entry1->Close(); | 710 entry1->Close(); |
671 ASSERT_TRUE(cache_->OpenEntry(key1, &entry1)); | 711 ASSERT_TRUE(cache_->OpenEntry(key1, &entry1)); |
672 | 712 |
673 // The entry is now on disk. Load it and extend it. | 713 // The entry is now on disk. Load it and extend it. |
674 EXPECT_EQ(200, entry1->WriteData(0, 800, buffer1, 200, NULL, false)); | 714 EXPECT_EQ(200, entry1->WriteData(0, 800, buffer1, 200, NULL, false)); |
675 EXPECT_EQ(1000, entry1->GetDataSize(0)); | 715 EXPECT_EQ(1000, entry1->GetDataSize(0)); |
676 EXPECT_EQ(100, entry1->ReadData(0, 700, buffer3, 100, NULL)); | 716 EXPECT_EQ(100, entry1->ReadData(0, 700, buffer3, 100, NULL)); |
677 EXPECT_TRUE(!memcmp(buffer3, buffer2, 100)); | 717 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100)); |
678 entry1->Close(); | 718 entry1->Close(); |
679 ASSERT_TRUE(cache_->OpenEntry(key1, &entry1)); | 719 ASSERT_TRUE(cache_->OpenEntry(key1, &entry1)); |
680 | 720 |
681 // This time using truncate. | 721 // This time using truncate. |
682 EXPECT_EQ(200, entry1->WriteData(0, 1800, buffer1, 200, NULL, true)); | 722 EXPECT_EQ(200, entry1->WriteData(0, 1800, buffer1, 200, NULL, true)); |
683 EXPECT_EQ(2000, entry1->GetDataSize(0)); | 723 EXPECT_EQ(2000, entry1->GetDataSize(0)); |
684 EXPECT_EQ(100, entry1->ReadData(0, 1500, buffer3, 100, NULL)); | 724 EXPECT_EQ(100, entry1->ReadData(0, 1500, buffer3, 100, NULL)); |
685 EXPECT_TRUE(!memcmp(buffer3, buffer2, 100)); | 725 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100)); |
686 | 726 |
687 // Go to an external file. | 727 // Go to an external file. |
688 EXPECT_EQ(200, entry1->WriteData(0, 19800, buffer1, 200, NULL, false)); | 728 EXPECT_EQ(200, entry1->WriteData(0, 19800, buffer1, 200, NULL, false)); |
689 EXPECT_EQ(20000, entry1->GetDataSize(0)); | 729 EXPECT_EQ(20000, entry1->GetDataSize(0)); |
690 EXPECT_EQ(4000, entry1->ReadData(0, 14000, buffer3, 4000, NULL)); | 730 EXPECT_EQ(4000, entry1->ReadData(0, 14000, buffer3, 4000, NULL)); |
691 EXPECT_TRUE(!memcmp(buffer3, buffer2, 4000)); | 731 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 4000)); |
692 | 732 |
693 // And back to an internal block. | 733 // And back to an internal block. |
694 EXPECT_EQ(600, entry1->WriteData(0, 1000, buffer1, 600, NULL, true)); | 734 EXPECT_EQ(600, entry1->WriteData(0, 1000, buffer1, 600, NULL, true)); |
695 EXPECT_EQ(1600, entry1->GetDataSize(0)); | 735 EXPECT_EQ(1600, entry1->GetDataSize(0)); |
696 EXPECT_EQ(600, entry1->ReadData(0, 1000, buffer3, 600, NULL)); | 736 EXPECT_EQ(600, entry1->ReadData(0, 1000, buffer3, 600, NULL)); |
697 EXPECT_TRUE(!memcmp(buffer3, buffer1, 600)); | 737 EXPECT_TRUE(!memcmp(buffer3->data(), buffer1->data(), 600)); |
698 | 738 |
699 // Extend it again. | 739 // Extend it again. |
700 EXPECT_EQ(600, entry1->WriteData(0, 2000, buffer1, 600, NULL, false)); | 740 EXPECT_EQ(600, entry1->WriteData(0, 2000, buffer1, 600, NULL, false)); |
701 EXPECT_EQ(2600, entry1->GetDataSize(0)); | 741 EXPECT_EQ(2600, entry1->GetDataSize(0)); |
702 EXPECT_EQ(200, entry1->ReadData(0, 1800, buffer3, 200, NULL)); | 742 EXPECT_EQ(200, entry1->ReadData(0, 1800, buffer3, 200, NULL)); |
703 EXPECT_TRUE(!memcmp(buffer3, buffer2, 200)); | 743 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 200)); |
704 | 744 |
705 // And again (with truncation flag). | 745 // And again (with truncation flag). |
706 EXPECT_EQ(600, entry1->WriteData(0, 3000, buffer1, 600, NULL, true)); | 746 EXPECT_EQ(600, entry1->WriteData(0, 3000, buffer1, 600, NULL, true)); |
707 EXPECT_EQ(3600, entry1->GetDataSize(0)); | 747 EXPECT_EQ(3600, entry1->GetDataSize(0)); |
708 EXPECT_EQ(200, entry1->ReadData(0, 2800, buffer3, 200, NULL)); | 748 EXPECT_EQ(200, entry1->ReadData(0, 2800, buffer3, 200, NULL)); |
709 EXPECT_TRUE(!memcmp(buffer3, buffer2, 200)); | 749 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 200)); |
710 | 750 |
711 entry1->Close(); | 751 entry1->Close(); |
712 } | 752 } |
713 | 753 |
714 TEST_F(DiskCacheEntryTest, InvalidData) { | 754 TEST_F(DiskCacheEntryTest, InvalidData) { |
715 InitCache(); | 755 InitCache(); |
716 InvalidData(); | 756 InvalidData(); |
717 } | 757 } |
718 | 758 |
719 TEST_F(DiskCacheEntryTest, MemoryOnlyInvalidData) { | 759 TEST_F(DiskCacheEntryTest, MemoryOnlyInvalidData) { |
720 SetMemoryOnlyMode(); | 760 SetMemoryOnlyMode(); |
721 InitCache(); | 761 InitCache(); |
722 InvalidData(); | 762 InvalidData(); |
723 } | 763 } |
724 | 764 |
725 void DiskCacheEntryTest::DoomEntry() { | 765 void DiskCacheEntryTest::DoomEntry() { |
726 std::string key1("the first key"); | 766 std::string key1("the first key"); |
727 disk_cache::Entry *entry1; | 767 disk_cache::Entry *entry1; |
728 ASSERT_TRUE(cache_->CreateEntry(key1, &entry1)); | 768 ASSERT_TRUE(cache_->CreateEntry(key1, &entry1)); |
729 entry1->Doom(); | 769 entry1->Doom(); |
730 entry1->Close(); | 770 entry1->Close(); |
731 | 771 |
732 char key_buffer[20000]; | 772 const int kSize = 20000; |
733 CacheTestFillBuffer(key_buffer, sizeof(key_buffer), true); | 773 scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(kSize); |
734 key_buffer[19999] = '\0'; | 774 CacheTestFillBuffer(buffer->data(), kSize, true); |
| 775 buffer->data()[19999] = '\0'; |
735 | 776 |
736 key1 = key_buffer; | 777 key1 = buffer->data(); |
737 ASSERT_TRUE(cache_->CreateEntry(key1, &entry1)); | 778 ASSERT_TRUE(cache_->CreateEntry(key1, &entry1)); |
738 EXPECT_EQ(20000, entry1->WriteData(0, 0, key_buffer, 20000, NULL, false)); | 779 EXPECT_EQ(20000, entry1->WriteData(0, 0, buffer, kSize, NULL, false)); |
739 EXPECT_EQ(20000, entry1->WriteData(1, 0, key_buffer, 20000, NULL, false)); | 780 EXPECT_EQ(20000, entry1->WriteData(1, 0, buffer, kSize, NULL, false)); |
740 entry1->Doom(); | 781 entry1->Doom(); |
741 entry1->Close(); | 782 entry1->Close(); |
742 | 783 |
743 EXPECT_EQ(0, cache_->GetEntryCount()); | 784 EXPECT_EQ(0, cache_->GetEntryCount()); |
744 } | 785 } |
745 | 786 |
746 TEST_F(DiskCacheEntryTest, DoomEntry) { | 787 TEST_F(DiskCacheEntryTest, DoomEntry) { |
747 InitCache(); | 788 InitCache(); |
748 DoomEntry(); | 789 DoomEntry(); |
749 } | 790 } |
750 | 791 |
751 TEST_F(DiskCacheEntryTest, MemoryOnlyDoomEntry) { | 792 TEST_F(DiskCacheEntryTest, MemoryOnlyDoomEntry) { |
752 SetMemoryOnlyMode(); | 793 SetMemoryOnlyMode(); |
753 InitCache(); | 794 InitCache(); |
754 DoomEntry(); | 795 DoomEntry(); |
755 } | 796 } |
756 | 797 |
757 // Verify that basic operations work as expected with doomed entries. | 798 // Verify that basic operations work as expected with doomed entries. |
758 void DiskCacheEntryTest::DoomedEntry() { | 799 void DiskCacheEntryTest::DoomedEntry() { |
759 std::string key("the first key"); | 800 std::string key("the first key"); |
760 disk_cache::Entry *entry; | 801 disk_cache::Entry *entry; |
761 ASSERT_TRUE(cache_->CreateEntry(key, &entry)); | 802 ASSERT_TRUE(cache_->CreateEntry(key, &entry)); |
762 entry->Doom(); | 803 entry->Doom(); |
763 | 804 |
764 EXPECT_EQ(0, cache_->GetEntryCount()); | 805 EXPECT_EQ(0, cache_->GetEntryCount()); |
765 Time initial = Time::Now(); | 806 Time initial = Time::Now(); |
766 PlatformThread::Sleep(20); | 807 PlatformThread::Sleep(20); |
767 | 808 |
768 char buffer1[2000]; | 809 const int kSize1 = 2000; |
769 char buffer2[2000]; | 810 const int kSize2 = 2000; |
770 CacheTestFillBuffer(buffer1, sizeof(buffer1), false); | 811 scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize1); |
771 memset(buffer2, 0, sizeof(buffer2)); | 812 scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize2); |
| 813 CacheTestFillBuffer(buffer1->data(), kSize1, false); |
| 814 memset(buffer2->data(), 0, kSize2); |
772 | 815 |
773 EXPECT_EQ(2000, entry->WriteData(0, 0, buffer1, 2000, NULL, false)); | 816 EXPECT_EQ(2000, entry->WriteData(0, 0, buffer1, 2000, NULL, false)); |
774 EXPECT_EQ(2000, entry->ReadData(0, 0, buffer2, 2000, NULL)); | 817 EXPECT_EQ(2000, entry->ReadData(0, 0, buffer2, 2000, NULL)); |
775 EXPECT_EQ(0, memcmp(buffer1, buffer2, sizeof(buffer1))); | 818 EXPECT_EQ(0, memcmp(buffer1->data(), buffer2->data(), kSize1)); |
776 EXPECT_TRUE(initial < entry->GetLastModified()); | 819 EXPECT_TRUE(initial < entry->GetLastModified()); |
777 EXPECT_TRUE(initial < entry->GetLastUsed()); | 820 EXPECT_TRUE(initial < entry->GetLastUsed()); |
778 | 821 |
779 entry->Close(); | 822 entry->Close(); |
780 } | 823 } |
781 | 824 |
782 TEST_F(DiskCacheEntryTest, DoomedEntry) { | 825 TEST_F(DiskCacheEntryTest, DoomedEntry) { |
783 InitCache(); | 826 InitCache(); |
784 DoomEntry(); | 827 DoomEntry(); |
785 } | 828 } |
786 | 829 |
787 TEST_F(DiskCacheEntryTest, MemoryOnlyDoomedEntry) { | 830 TEST_F(DiskCacheEntryTest, MemoryOnlyDoomedEntry) { |
788 SetMemoryOnlyMode(); | 831 SetMemoryOnlyMode(); |
789 InitCache(); | 832 InitCache(); |
790 DoomEntry(); | 833 DoomEntry(); |
791 } | 834 } |
792 | 835 |
OLD | NEW |