OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/basictypes.h" | 5 #include "base/basictypes.h" |
6 #include "base/bind.h" | 6 #include "base/bind.h" |
7 #include "base/bind_helpers.h" | 7 #include "base/bind_helpers.h" |
8 #include "base/file_util.h" | 8 #include "base/file_util.h" |
9 #include "base/string_util.h" | 9 #include "base/string_util.h" |
10 #include "base/stringprintf.h" | 10 #include "base/stringprintf.h" |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
61 void DoomSparseEntry(); | 61 void DoomSparseEntry(); |
62 void PartialSparseEntry(); | 62 void PartialSparseEntry(); |
63 void SimpleCacheMakeBadChecksumEntry(const char* key); | 63 void SimpleCacheMakeBadChecksumEntry(const char* key); |
64 }; | 64 }; |
65 | 65 |
66 // This part of the test runs on the background thread. | 66 // This part of the test runs on the background thread. |
67 void DiskCacheEntryTest::InternalSyncIOBackground(disk_cache::Entry* entry) { | 67 void DiskCacheEntryTest::InternalSyncIOBackground(disk_cache::Entry* entry) { |
68 const int kSize1 = 10; | 68 const int kSize1 = 10; |
69 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); | 69 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); |
70 CacheTestFillBuffer(buffer1->data(), kSize1, false); | 70 CacheTestFillBuffer(buffer1->data(), kSize1, false); |
71 EXPECT_EQ(0, entry->ReadData( | 71 EXPECT_EQ( |
72 0, 0, buffer1, kSize1, net::CompletionCallback())); | 72 0, |
| 73 entry->ReadData(0, 0, buffer1.get(), kSize1, net::CompletionCallback())); |
73 base::strlcpy(buffer1->data(), "the data", kSize1); | 74 base::strlcpy(buffer1->data(), "the data", kSize1); |
74 EXPECT_EQ(10, entry->WriteData( | 75 EXPECT_EQ(10, |
75 0, 0, buffer1, kSize1, net::CompletionCallback(), false)); | 76 entry->WriteData( |
| 77 0, 0, buffer1.get(), kSize1, net::CompletionCallback(), false)); |
76 memset(buffer1->data(), 0, kSize1); | 78 memset(buffer1->data(), 0, kSize1); |
77 EXPECT_EQ(10, entry->ReadData( | 79 EXPECT_EQ( |
78 0, 0, buffer1, kSize1, net::CompletionCallback())); | 80 10, |
| 81 entry->ReadData(0, 0, buffer1.get(), kSize1, net::CompletionCallback())); |
79 EXPECT_STREQ("the data", buffer1->data()); | 82 EXPECT_STREQ("the data", buffer1->data()); |
80 | 83 |
81 const int kSize2 = 5000; | 84 const int kSize2 = 5000; |
82 const int kSize3 = 10000; | 85 const int kSize3 = 10000; |
83 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); | 86 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); |
84 scoped_refptr<net::IOBuffer> buffer3(new net::IOBuffer(kSize3)); | 87 scoped_refptr<net::IOBuffer> buffer3(new net::IOBuffer(kSize3)); |
85 memset(buffer3->data(), 0, kSize3); | 88 memset(buffer3->data(), 0, kSize3); |
86 CacheTestFillBuffer(buffer2->data(), kSize2, false); | 89 CacheTestFillBuffer(buffer2->data(), kSize2, false); |
87 base::strlcpy(buffer2->data(), "The really big data goes here", kSize2); | 90 base::strlcpy(buffer2->data(), "The really big data goes here", kSize2); |
88 EXPECT_EQ(5000, entry->WriteData( | 91 EXPECT_EQ( |
89 1, 1500, buffer2, kSize2, net::CompletionCallback(), false)); | 92 5000, |
| 93 entry->WriteData( |
| 94 1, 1500, buffer2.get(), kSize2, net::CompletionCallback(), false)); |
90 memset(buffer2->data(), 0, kSize2); | 95 memset(buffer2->data(), 0, kSize2); |
91 EXPECT_EQ(4989, entry->ReadData( | 96 EXPECT_EQ(4989, |
92 1, 1511, buffer2, kSize2, net::CompletionCallback())); | 97 entry->ReadData( |
| 98 1, 1511, buffer2.get(), kSize2, net::CompletionCallback())); |
93 EXPECT_STREQ("big data goes here", buffer2->data()); | 99 EXPECT_STREQ("big data goes here", buffer2->data()); |
94 EXPECT_EQ(5000, entry->ReadData( | 100 EXPECT_EQ( |
95 1, 0, buffer2, kSize2, net::CompletionCallback())); | 101 5000, |
| 102 entry->ReadData(1, 0, buffer2.get(), kSize2, net::CompletionCallback())); |
96 EXPECT_EQ(0, memcmp(buffer2->data(), buffer3->data(), 1500)); | 103 EXPECT_EQ(0, memcmp(buffer2->data(), buffer3->data(), 1500)); |
97 EXPECT_EQ(1500, entry->ReadData( | 104 EXPECT_EQ(1500, |
98 1, 5000, buffer2, kSize2, net::CompletionCallback())); | 105 entry->ReadData( |
| 106 1, 5000, buffer2.get(), kSize2, net::CompletionCallback())); |
99 | 107 |
100 EXPECT_EQ(0, entry->ReadData( | 108 EXPECT_EQ(0, |
101 1, 6500, buffer2, kSize2, net::CompletionCallback())); | 109 entry->ReadData( |
102 EXPECT_EQ(6500, entry->ReadData( | 110 1, 6500, buffer2.get(), kSize2, net::CompletionCallback())); |
103 1, 0, buffer3, kSize3, net::CompletionCallback())); | 111 EXPECT_EQ( |
104 EXPECT_EQ(8192, entry->WriteData( | 112 6500, |
105 1, 0, buffer3, 8192, net::CompletionCallback(), false)); | 113 entry->ReadData(1, 0, buffer3.get(), kSize3, net::CompletionCallback())); |
106 EXPECT_EQ(8192, entry->ReadData( | 114 EXPECT_EQ(8192, |
107 1, 0, buffer3, kSize3, net::CompletionCallback())); | 115 entry->WriteData( |
| 116 1, 0, buffer3.get(), 8192, net::CompletionCallback(), false)); |
| 117 EXPECT_EQ( |
| 118 8192, |
| 119 entry->ReadData(1, 0, buffer3.get(), kSize3, net::CompletionCallback())); |
108 EXPECT_EQ(8192, entry->GetDataSize(1)); | 120 EXPECT_EQ(8192, entry->GetDataSize(1)); |
109 | 121 |
110 // We need to delete the memory buffer on this thread. | 122 // We need to delete the memory buffer on this thread. |
111 EXPECT_EQ(0, entry->WriteData( | 123 EXPECT_EQ(0, entry->WriteData( |
112 0, 0, NULL, 0, net::CompletionCallback(), true)); | 124 0, 0, NULL, 0, net::CompletionCallback(), true)); |
113 EXPECT_EQ(0, entry->WriteData( | 125 EXPECT_EQ(0, entry->WriteData( |
114 1, 0, NULL, 0, net::CompletionCallback(), true)); | 126 1, 0, NULL, 0, net::CompletionCallback(), true)); |
115 } | 127 } |
116 | 128 |
117 // We need to support synchronous IO even though it is not a supported operation | 129 // We need to support synchronous IO even though it is not a supported operation |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
180 const int kSize1 = 10; | 192 const int kSize1 = 10; |
181 const int kSize2 = 5000; | 193 const int kSize2 = 5000; |
182 const int kSize3 = 10000; | 194 const int kSize3 = 10000; |
183 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); | 195 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); |
184 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); | 196 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); |
185 scoped_refptr<net::IOBuffer> buffer3(new net::IOBuffer(kSize3)); | 197 scoped_refptr<net::IOBuffer> buffer3(new net::IOBuffer(kSize3)); |
186 CacheTestFillBuffer(buffer1->data(), kSize1, false); | 198 CacheTestFillBuffer(buffer1->data(), kSize1, false); |
187 CacheTestFillBuffer(buffer2->data(), kSize2, false); | 199 CacheTestFillBuffer(buffer2->data(), kSize2, false); |
188 CacheTestFillBuffer(buffer3->data(), kSize3, false); | 200 CacheTestFillBuffer(buffer3->data(), kSize3, false); |
189 | 201 |
190 EXPECT_EQ(0, entry->ReadData( | 202 EXPECT_EQ(0, |
191 0, 15 * 1024, buffer1, kSize1, | 203 entry->ReadData( |
192 base::Bind(&CallbackTest::Run, base::Unretained(&callback1)))); | 204 0, |
| 205 15 * 1024, |
| 206 buffer1.get(), |
| 207 kSize1, |
| 208 base::Bind(&CallbackTest::Run, base::Unretained(&callback1)))); |
193 base::strlcpy(buffer1->data(), "the data", kSize1); | 209 base::strlcpy(buffer1->data(), "the data", kSize1); |
194 int expected = 0; | 210 int expected = 0; |
195 int ret = entry->WriteData( | 211 int ret = entry->WriteData( |
196 0, 0, buffer1, kSize1, | 212 0, |
197 base::Bind(&CallbackTest::Run, base::Unretained(&callback2)), false); | 213 0, |
| 214 buffer1.get(), |
| 215 kSize1, |
| 216 base::Bind(&CallbackTest::Run, base::Unretained(&callback2)), |
| 217 false); |
198 EXPECT_TRUE(10 == ret || net::ERR_IO_PENDING == ret); | 218 EXPECT_TRUE(10 == ret || net::ERR_IO_PENDING == ret); |
199 if (net::ERR_IO_PENDING == ret) | 219 if (net::ERR_IO_PENDING == ret) |
200 expected++; | 220 expected++; |
201 | 221 |
202 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 222 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
203 memset(buffer2->data(), 0, kSize2); | 223 memset(buffer2->data(), 0, kSize2); |
204 ret = entry->ReadData( | 224 ret = entry->ReadData( |
205 0, 0, buffer2, kSize1, | 225 0, |
| 226 0, |
| 227 buffer2.get(), |
| 228 kSize1, |
206 base::Bind(&CallbackTest::Run, base::Unretained(&callback3))); | 229 base::Bind(&CallbackTest::Run, base::Unretained(&callback3))); |
207 EXPECT_TRUE(10 == ret || net::ERR_IO_PENDING == ret); | 230 EXPECT_TRUE(10 == ret || net::ERR_IO_PENDING == ret); |
208 if (net::ERR_IO_PENDING == ret) | 231 if (net::ERR_IO_PENDING == ret) |
209 expected++; | 232 expected++; |
210 | 233 |
211 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 234 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
212 EXPECT_STREQ("the data", buffer2->data()); | 235 EXPECT_STREQ("the data", buffer2->data()); |
213 | 236 |
214 base::strlcpy(buffer2->data(), "The really big data goes here", kSize2); | 237 base::strlcpy(buffer2->data(), "The really big data goes here", kSize2); |
215 ret = entry->WriteData( | 238 ret = entry->WriteData( |
216 1, 1500, buffer2, kSize2, | 239 1, |
217 base::Bind(&CallbackTest::Run, base::Unretained(&callback4)), true); | 240 1500, |
| 241 buffer2.get(), |
| 242 kSize2, |
| 243 base::Bind(&CallbackTest::Run, base::Unretained(&callback4)), |
| 244 true); |
218 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); | 245 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); |
219 if (net::ERR_IO_PENDING == ret) | 246 if (net::ERR_IO_PENDING == ret) |
220 expected++; | 247 expected++; |
221 | 248 |
222 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 249 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
223 memset(buffer3->data(), 0, kSize3); | 250 memset(buffer3->data(), 0, kSize3); |
224 ret = entry->ReadData( | 251 ret = entry->ReadData( |
225 1, 1511, buffer3, kSize2, | 252 1, |
| 253 1511, |
| 254 buffer3.get(), |
| 255 kSize2, |
226 base::Bind(&CallbackTest::Run, base::Unretained(&callback5))); | 256 base::Bind(&CallbackTest::Run, base::Unretained(&callback5))); |
227 EXPECT_TRUE(4989 == ret || net::ERR_IO_PENDING == ret); | 257 EXPECT_TRUE(4989 == ret || net::ERR_IO_PENDING == ret); |
228 if (net::ERR_IO_PENDING == ret) | 258 if (net::ERR_IO_PENDING == ret) |
229 expected++; | 259 expected++; |
230 | 260 |
231 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 261 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
232 EXPECT_STREQ("big data goes here", buffer3->data()); | 262 EXPECT_STREQ("big data goes here", buffer3->data()); |
233 ret = entry->ReadData( | 263 ret = entry->ReadData( |
234 1, 0, buffer2, kSize2, | 264 1, |
| 265 0, |
| 266 buffer2.get(), |
| 267 kSize2, |
235 base::Bind(&CallbackTest::Run, base::Unretained(&callback6))); | 268 base::Bind(&CallbackTest::Run, base::Unretained(&callback6))); |
236 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); | 269 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); |
237 if (net::ERR_IO_PENDING == ret) | 270 if (net::ERR_IO_PENDING == ret) |
238 expected++; | 271 expected++; |
239 | 272 |
240 memset(buffer3->data(), 0, kSize3); | 273 memset(buffer3->data(), 0, kSize3); |
241 | 274 |
242 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 275 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
243 EXPECT_EQ(0, memcmp(buffer2->data(), buffer3->data(), 1500)); | 276 EXPECT_EQ(0, memcmp(buffer2->data(), buffer3->data(), 1500)); |
244 ret = entry->ReadData( | 277 ret = entry->ReadData( |
245 1, 5000, buffer2, kSize2, | 278 1, |
| 279 5000, |
| 280 buffer2.get(), |
| 281 kSize2, |
246 base::Bind(&CallbackTest::Run, base::Unretained(&callback7))); | 282 base::Bind(&CallbackTest::Run, base::Unretained(&callback7))); |
247 EXPECT_TRUE(1500 == ret || net::ERR_IO_PENDING == ret); | 283 EXPECT_TRUE(1500 == ret || net::ERR_IO_PENDING == ret); |
248 if (net::ERR_IO_PENDING == ret) | 284 if (net::ERR_IO_PENDING == ret) |
249 expected++; | 285 expected++; |
250 | 286 |
251 ret = entry->ReadData( | 287 ret = entry->ReadData( |
252 1, 0, buffer3, kSize3, | 288 1, |
| 289 0, |
| 290 buffer3.get(), |
| 291 kSize3, |
253 base::Bind(&CallbackTest::Run, base::Unretained(&callback9))); | 292 base::Bind(&CallbackTest::Run, base::Unretained(&callback9))); |
254 EXPECT_TRUE(6500 == ret || net::ERR_IO_PENDING == ret); | 293 EXPECT_TRUE(6500 == ret || net::ERR_IO_PENDING == ret); |
255 if (net::ERR_IO_PENDING == ret) | 294 if (net::ERR_IO_PENDING == ret) |
256 expected++; | 295 expected++; |
257 | 296 |
258 ret = entry->WriteData( | 297 ret = entry->WriteData( |
259 1, 0, buffer3, 8192, | 298 1, |
260 base::Bind(&CallbackTest::Run, base::Unretained(&callback10)), true); | 299 0, |
| 300 buffer3.get(), |
| 301 8192, |
| 302 base::Bind(&CallbackTest::Run, base::Unretained(&callback10)), |
| 303 true); |
261 EXPECT_TRUE(8192 == ret || net::ERR_IO_PENDING == ret); | 304 EXPECT_TRUE(8192 == ret || net::ERR_IO_PENDING == ret); |
262 if (net::ERR_IO_PENDING == ret) | 305 if (net::ERR_IO_PENDING == ret) |
263 expected++; | 306 expected++; |
264 | 307 |
265 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 308 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
266 ret = entry->ReadData( | 309 ret = entry->ReadData( |
267 1, 0, buffer3, kSize3, | 310 1, |
| 311 0, |
| 312 buffer3.get(), |
| 313 kSize3, |
268 base::Bind(&CallbackTest::Run, base::Unretained(&callback11))); | 314 base::Bind(&CallbackTest::Run, base::Unretained(&callback11))); |
269 EXPECT_TRUE(8192 == ret || net::ERR_IO_PENDING == ret); | 315 EXPECT_TRUE(8192 == ret || net::ERR_IO_PENDING == ret); |
270 if (net::ERR_IO_PENDING == ret) | 316 if (net::ERR_IO_PENDING == ret) |
271 expected++; | 317 expected++; |
272 | 318 |
273 EXPECT_EQ(8192, entry->GetDataSize(1)); | 319 EXPECT_EQ(8192, entry->GetDataSize(1)); |
274 | 320 |
275 ret = entry->ReadData( | 321 ret = entry->ReadData( |
276 0, 0, buffer1, kSize1, | 322 0, |
| 323 0, |
| 324 buffer1.get(), |
| 325 kSize1, |
277 base::Bind(&CallbackTest::Run, base::Unretained(&callback12))); | 326 base::Bind(&CallbackTest::Run, base::Unretained(&callback12))); |
278 EXPECT_TRUE(10 == ret || net::ERR_IO_PENDING == ret); | 327 EXPECT_TRUE(10 == ret || net::ERR_IO_PENDING == ret); |
279 if (net::ERR_IO_PENDING == ret) | 328 if (net::ERR_IO_PENDING == ret) |
280 expected++; | 329 expected++; |
281 | 330 |
282 ret = entry->ReadData( | 331 ret = entry->ReadData( |
283 1, 0, buffer2, kSize2, | 332 1, |
| 333 0, |
| 334 buffer2.get(), |
| 335 kSize2, |
284 base::Bind(&CallbackTest::Run, base::Unretained(&callback13))); | 336 base::Bind(&CallbackTest::Run, base::Unretained(&callback13))); |
285 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); | 337 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); |
286 if (net::ERR_IO_PENDING == ret) | 338 if (net::ERR_IO_PENDING == ret) |
287 expected++; | 339 expected++; |
288 | 340 |
289 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 341 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
290 | 342 |
291 EXPECT_FALSE(helper.callback_reused_error()); | 343 EXPECT_FALSE(helper.callback_reused_error()); |
292 | 344 |
293 entry->Doom(); | 345 entry->Doom(); |
(...skipping 15 matching lines...) Expand all Loading... |
309 | 361 |
310 // This part of the test runs on the background thread. | 362 // This part of the test runs on the background thread. |
311 void DiskCacheEntryTest::ExternalSyncIOBackground(disk_cache::Entry* entry) { | 363 void DiskCacheEntryTest::ExternalSyncIOBackground(disk_cache::Entry* entry) { |
312 const int kSize1 = 17000; | 364 const int kSize1 = 17000; |
313 const int kSize2 = 25000; | 365 const int kSize2 = 25000; |
314 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); | 366 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); |
315 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); | 367 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); |
316 CacheTestFillBuffer(buffer1->data(), kSize1, false); | 368 CacheTestFillBuffer(buffer1->data(), kSize1, false); |
317 CacheTestFillBuffer(buffer2->data(), kSize2, false); | 369 CacheTestFillBuffer(buffer2->data(), kSize2, false); |
318 base::strlcpy(buffer1->data(), "the data", kSize1); | 370 base::strlcpy(buffer1->data(), "the data", kSize1); |
319 EXPECT_EQ(17000, entry->WriteData( | 371 EXPECT_EQ(17000, |
320 0, 0, buffer1, kSize1, net::CompletionCallback(), false)); | 372 entry->WriteData( |
| 373 0, 0, buffer1.get(), kSize1, net::CompletionCallback(), false)); |
321 memset(buffer1->data(), 0, kSize1); | 374 memset(buffer1->data(), 0, kSize1); |
322 EXPECT_EQ(17000, entry->ReadData( | 375 EXPECT_EQ( |
323 0, 0, buffer1, kSize1, net::CompletionCallback())); | 376 17000, |
| 377 entry->ReadData(0, 0, buffer1.get(), kSize1, net::CompletionCallback())); |
324 EXPECT_STREQ("the data", buffer1->data()); | 378 EXPECT_STREQ("the data", buffer1->data()); |
325 | 379 |
326 base::strlcpy(buffer2->data(), "The really big data goes here", kSize2); | 380 base::strlcpy(buffer2->data(), "The really big data goes here", kSize2); |
327 EXPECT_EQ(25000, entry->WriteData( | 381 EXPECT_EQ( |
328 1, 10000, buffer2, kSize2, net::CompletionCallback(), false)); | 382 25000, |
| 383 entry->WriteData( |
| 384 1, 10000, buffer2.get(), kSize2, net::CompletionCallback(), false)); |
329 memset(buffer2->data(), 0, kSize2); | 385 memset(buffer2->data(), 0, kSize2); |
330 EXPECT_EQ(24989, entry->ReadData( | 386 EXPECT_EQ(24989, |
331 1, 10011, buffer2, kSize2, net::CompletionCallback())); | 387 entry->ReadData( |
| 388 1, 10011, buffer2.get(), kSize2, net::CompletionCallback())); |
332 EXPECT_STREQ("big data goes here", buffer2->data()); | 389 EXPECT_STREQ("big data goes here", buffer2->data()); |
333 EXPECT_EQ(25000, entry->ReadData( | 390 EXPECT_EQ( |
334 1, 0, buffer2, kSize2, net::CompletionCallback())); | 391 25000, |
| 392 entry->ReadData(1, 0, buffer2.get(), kSize2, net::CompletionCallback())); |
335 EXPECT_EQ(0, memcmp(buffer2->data(), buffer2->data(), 10000)); | 393 EXPECT_EQ(0, memcmp(buffer2->data(), buffer2->data(), 10000)); |
336 EXPECT_EQ(5000, entry->ReadData( | 394 EXPECT_EQ(5000, |
337 1, 30000, buffer2, kSize2, net::CompletionCallback())); | 395 entry->ReadData( |
| 396 1, 30000, buffer2.get(), kSize2, net::CompletionCallback())); |
338 | 397 |
339 EXPECT_EQ(0, entry->ReadData( | 398 EXPECT_EQ(0, |
340 1, 35000, buffer2, kSize2, net::CompletionCallback())); | 399 entry->ReadData( |
341 EXPECT_EQ(17000, entry->ReadData( | 400 1, 35000, buffer2.get(), kSize2, net::CompletionCallback())); |
342 1, 0, buffer1, kSize1, net::CompletionCallback())); | 401 EXPECT_EQ( |
343 EXPECT_EQ(17000, entry->WriteData( | 402 17000, |
344 1, 20000, buffer1, kSize1, net::CompletionCallback(), false)); | 403 entry->ReadData(1, 0, buffer1.get(), kSize1, net::CompletionCallback())); |
| 404 EXPECT_EQ( |
| 405 17000, |
| 406 entry->WriteData( |
| 407 1, 20000, buffer1.get(), kSize1, net::CompletionCallback(), false)); |
345 EXPECT_EQ(37000, entry->GetDataSize(1)); | 408 EXPECT_EQ(37000, entry->GetDataSize(1)); |
346 | 409 |
347 // We need to delete the memory buffer on this thread. | 410 // We need to delete the memory buffer on this thread. |
348 EXPECT_EQ(0, entry->WriteData( | 411 EXPECT_EQ(0, entry->WriteData( |
349 0, 0, NULL, 0, net::CompletionCallback(), true)); | 412 0, 0, NULL, 0, net::CompletionCallback(), true)); |
350 EXPECT_EQ(0, entry->WriteData( | 413 EXPECT_EQ(0, entry->WriteData( |
351 1, 0, NULL, 0, net::CompletionCallback(), true)); | 414 1, 0, NULL, 0, net::CompletionCallback(), true)); |
352 } | 415 } |
353 | 416 |
354 void DiskCacheEntryTest::ExternalSyncIO() { | 417 void DiskCacheEntryTest::ExternalSyncIO() { |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
405 const int kSize2 = 25000; | 468 const int kSize2 = 25000; |
406 const int kSize3 = 25000; | 469 const int kSize3 = 25000; |
407 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); | 470 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); |
408 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); | 471 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); |
409 scoped_refptr<net::IOBuffer> buffer3(new net::IOBuffer(kSize3)); | 472 scoped_refptr<net::IOBuffer> buffer3(new net::IOBuffer(kSize3)); |
410 CacheTestFillBuffer(buffer1->data(), kSize1, false); | 473 CacheTestFillBuffer(buffer1->data(), kSize1, false); |
411 CacheTestFillBuffer(buffer2->data(), kSize2, false); | 474 CacheTestFillBuffer(buffer2->data(), kSize2, false); |
412 CacheTestFillBuffer(buffer3->data(), kSize3, false); | 475 CacheTestFillBuffer(buffer3->data(), kSize3, false); |
413 base::strlcpy(buffer1->data(), "the data", kSize1); | 476 base::strlcpy(buffer1->data(), "the data", kSize1); |
414 int ret = entry->WriteData( | 477 int ret = entry->WriteData( |
415 0, 0, buffer1, kSize1, | 478 0, |
416 base::Bind(&CallbackTest::Run, base::Unretained(&callback1)), false); | 479 0, |
| 480 buffer1.get(), |
| 481 kSize1, |
| 482 base::Bind(&CallbackTest::Run, base::Unretained(&callback1)), |
| 483 false); |
417 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); | 484 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); |
418 if (net::ERR_IO_PENDING == ret) | 485 if (net::ERR_IO_PENDING == ret) |
419 expected++; | 486 expected++; |
420 | 487 |
421 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 488 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
422 | 489 |
423 memset(buffer2->data(), 0, kSize1); | 490 memset(buffer2->data(), 0, kSize1); |
424 ret = entry->ReadData( | 491 ret = entry->ReadData( |
425 0, 0, buffer2, kSize1, | 492 0, |
| 493 0, |
| 494 buffer2.get(), |
| 495 kSize1, |
426 base::Bind(&CallbackTest::Run, base::Unretained(&callback2))); | 496 base::Bind(&CallbackTest::Run, base::Unretained(&callback2))); |
427 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); | 497 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); |
428 if (net::ERR_IO_PENDING == ret) | 498 if (net::ERR_IO_PENDING == ret) |
429 expected++; | 499 expected++; |
430 | 500 |
431 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 501 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
432 EXPECT_STREQ("the data", buffer2->data()); | 502 EXPECT_STREQ("the data", buffer2->data()); |
433 | 503 |
434 base::strlcpy(buffer2->data(), "The really big data goes here", kSize2); | 504 base::strlcpy(buffer2->data(), "The really big data goes here", kSize2); |
435 ret = entry->WriteData( | 505 ret = entry->WriteData( |
436 1, 10000, buffer2, kSize2, | 506 1, |
437 base::Bind(&CallbackTest::Run, base::Unretained(&callback3)), false); | 507 10000, |
| 508 buffer2.get(), |
| 509 kSize2, |
| 510 base::Bind(&CallbackTest::Run, base::Unretained(&callback3)), |
| 511 false); |
438 EXPECT_TRUE(25000 == ret || net::ERR_IO_PENDING == ret); | 512 EXPECT_TRUE(25000 == ret || net::ERR_IO_PENDING == ret); |
439 if (net::ERR_IO_PENDING == ret) | 513 if (net::ERR_IO_PENDING == ret) |
440 expected++; | 514 expected++; |
441 | 515 |
442 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 516 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
443 | 517 |
444 memset(buffer3->data(), 0, kSize3); | 518 memset(buffer3->data(), 0, kSize3); |
445 ret = entry->ReadData( | 519 ret = entry->ReadData( |
446 1, 10011, buffer3, kSize3, | 520 1, |
| 521 10011, |
| 522 buffer3.get(), |
| 523 kSize3, |
447 base::Bind(&CallbackTest::Run, base::Unretained(&callback4))); | 524 base::Bind(&CallbackTest::Run, base::Unretained(&callback4))); |
448 EXPECT_TRUE(24989 == ret || net::ERR_IO_PENDING == ret); | 525 EXPECT_TRUE(24989 == ret || net::ERR_IO_PENDING == ret); |
449 if (net::ERR_IO_PENDING == ret) | 526 if (net::ERR_IO_PENDING == ret) |
450 expected++; | 527 expected++; |
451 | 528 |
452 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 529 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
453 EXPECT_STREQ("big data goes here", buffer3->data()); | 530 EXPECT_STREQ("big data goes here", buffer3->data()); |
454 ret = entry->ReadData( | 531 ret = entry->ReadData( |
455 1, 0, buffer2, kSize2, | 532 1, |
| 533 0, |
| 534 buffer2.get(), |
| 535 kSize2, |
456 base::Bind(&CallbackTest::Run, base::Unretained(&callback5))); | 536 base::Bind(&CallbackTest::Run, base::Unretained(&callback5))); |
457 EXPECT_TRUE(25000 == ret || net::ERR_IO_PENDING == ret); | 537 EXPECT_TRUE(25000 == ret || net::ERR_IO_PENDING == ret); |
458 if (net::ERR_IO_PENDING == ret) | 538 if (net::ERR_IO_PENDING == ret) |
459 expected++; | 539 expected++; |
460 | 540 |
461 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 541 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
462 memset(buffer3->data(), 0, kSize3); | 542 memset(buffer3->data(), 0, kSize3); |
463 EXPECT_EQ(0, memcmp(buffer2->data(), buffer3->data(), 10000)); | 543 EXPECT_EQ(0, memcmp(buffer2->data(), buffer3->data(), 10000)); |
464 ret = entry->ReadData( | 544 ret = entry->ReadData( |
465 1, 30000, buffer2, kSize2, | 545 1, |
| 546 30000, |
| 547 buffer2.get(), |
| 548 kSize2, |
466 base::Bind(&CallbackTest::Run, base::Unretained(&callback6))); | 549 base::Bind(&CallbackTest::Run, base::Unretained(&callback6))); |
467 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); | 550 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); |
468 if (net::ERR_IO_PENDING == ret) | 551 if (net::ERR_IO_PENDING == ret) |
469 expected++; | 552 expected++; |
470 | 553 |
471 EXPECT_EQ(0, entry->ReadData( | 554 EXPECT_EQ(0, |
472 1, 35000, buffer2, kSize2, | 555 entry->ReadData( |
473 base::Bind(&CallbackTest::Run, base::Unretained(&callback7)))); | 556 1, |
| 557 35000, |
| 558 buffer2.get(), |
| 559 kSize2, |
| 560 base::Bind(&CallbackTest::Run, base::Unretained(&callback7)))); |
474 ret = entry->ReadData( | 561 ret = entry->ReadData( |
475 1, 0, buffer1, kSize1, | 562 1, |
| 563 0, |
| 564 buffer1.get(), |
| 565 kSize1, |
476 base::Bind(&CallbackTest::Run, base::Unretained(&callback8))); | 566 base::Bind(&CallbackTest::Run, base::Unretained(&callback8))); |
477 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); | 567 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); |
478 if (net::ERR_IO_PENDING == ret) | 568 if (net::ERR_IO_PENDING == ret) |
479 expected++; | 569 expected++; |
480 ret = entry->WriteData( | 570 ret = entry->WriteData( |
481 1, 20000, buffer3, kSize1, | 571 1, |
482 base::Bind(&CallbackTest::Run, base::Unretained(&callback9)), false); | 572 20000, |
| 573 buffer3.get(), |
| 574 kSize1, |
| 575 base::Bind(&CallbackTest::Run, base::Unretained(&callback9)), |
| 576 false); |
483 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); | 577 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); |
484 if (net::ERR_IO_PENDING == ret) | 578 if (net::ERR_IO_PENDING == ret) |
485 expected++; | 579 expected++; |
486 | 580 |
487 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 581 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
488 EXPECT_EQ(37000, entry->GetDataSize(1)); | 582 EXPECT_EQ(37000, entry->GetDataSize(1)); |
489 | 583 |
490 EXPECT_FALSE(helper.callback_reused_error()); | 584 EXPECT_FALSE(helper.callback_reused_error()); |
491 | 585 |
492 entry->Doom(); | 586 entry->Doom(); |
(...skipping 22 matching lines...) Expand all Loading... |
515 // Tests that IOBuffers are not referenced after IO completes. | 609 // Tests that IOBuffers are not referenced after IO completes. |
516 void DiskCacheEntryTest::ReleaseBuffer() { | 610 void DiskCacheEntryTest::ReleaseBuffer() { |
517 disk_cache::Entry* entry = NULL; | 611 disk_cache::Entry* entry = NULL; |
518 ASSERT_EQ(net::OK, CreateEntry("the first key", &entry)); | 612 ASSERT_EQ(net::OK, CreateEntry("the first key", &entry)); |
519 ASSERT_TRUE(NULL != entry); | 613 ASSERT_TRUE(NULL != entry); |
520 | 614 |
521 const int kBufferSize = 1024; | 615 const int kBufferSize = 1024; |
522 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kBufferSize)); | 616 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kBufferSize)); |
523 CacheTestFillBuffer(buffer->data(), kBufferSize, false); | 617 CacheTestFillBuffer(buffer->data(), kBufferSize, false); |
524 | 618 |
525 net::ReleaseBufferCompletionCallback cb(buffer); | 619 net::ReleaseBufferCompletionCallback cb(buffer.get()); |
526 int rv = entry->WriteData(0, 0, buffer, kBufferSize, cb.callback(), false); | 620 int rv = |
| 621 entry->WriteData(0, 0, buffer.get(), kBufferSize, cb.callback(), false); |
527 EXPECT_EQ(kBufferSize, cb.GetResult(rv)); | 622 EXPECT_EQ(kBufferSize, cb.GetResult(rv)); |
528 entry->Close(); | 623 entry->Close(); |
529 } | 624 } |
530 | 625 |
531 TEST_F(DiskCacheEntryTest, ReleaseBuffer) { | 626 TEST_F(DiskCacheEntryTest, ReleaseBuffer) { |
532 InitCache(); | 627 InitCache(); |
533 cache_impl_->SetFlags(disk_cache::kNoBuffering); | 628 cache_impl_->SetFlags(disk_cache::kNoBuffering); |
534 ReleaseBuffer(); | 629 ReleaseBuffer(); |
535 } | 630 } |
536 | 631 |
(...skipping 10 matching lines...) Expand all Loading... |
547 | 642 |
548 const int kBufferSize = 1024; | 643 const int kBufferSize = 1024; |
549 const int kNumStreams = 3; | 644 const int kNumStreams = 3; |
550 scoped_refptr<net::IOBuffer> reference_buffers[kNumStreams]; | 645 scoped_refptr<net::IOBuffer> reference_buffers[kNumStreams]; |
551 for (int i = 0; i < kNumStreams; i++) { | 646 for (int i = 0; i < kNumStreams; i++) { |
552 reference_buffers[i] = new net::IOBuffer(kBufferSize); | 647 reference_buffers[i] = new net::IOBuffer(kBufferSize); |
553 CacheTestFillBuffer(reference_buffers[i]->data(), kBufferSize, false); | 648 CacheTestFillBuffer(reference_buffers[i]->data(), kBufferSize, false); |
554 } | 649 } |
555 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kBufferSize)); | 650 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kBufferSize)); |
556 for (int i = 0; i < kNumStreams; i++) { | 651 for (int i = 0; i < kNumStreams; i++) { |
557 EXPECT_EQ(kBufferSize, WriteData(entry, i, 0, reference_buffers[i], | 652 EXPECT_EQ( |
558 kBufferSize, false)); | 653 kBufferSize, |
| 654 WriteData(entry, i, 0, reference_buffers[i].get(), kBufferSize, false)); |
559 memset(buffer1->data(), 0, kBufferSize); | 655 memset(buffer1->data(), 0, kBufferSize); |
560 EXPECT_EQ(kBufferSize, ReadData(entry, i, 0, buffer1, kBufferSize)); | 656 EXPECT_EQ(kBufferSize, ReadData(entry, i, 0, buffer1.get(), kBufferSize)); |
561 EXPECT_EQ(0, memcmp(reference_buffers[i]->data(), buffer1->data(), | 657 EXPECT_EQ( |
562 kBufferSize)); | 658 0, memcmp(reference_buffers[i]->data(), buffer1->data(), kBufferSize)); |
563 } | 659 } |
564 EXPECT_EQ(net::ERR_INVALID_ARGUMENT, | 660 EXPECT_EQ(net::ERR_INVALID_ARGUMENT, |
565 ReadData(entry, kNumStreams, 0, buffer1, kBufferSize)); | 661 ReadData(entry, kNumStreams, 0, buffer1.get(), kBufferSize)); |
566 entry->Close(); | 662 entry->Close(); |
567 | 663 |
568 // Open the entry and read it in chunks, including a read past the end. | 664 // Open the entry and read it in chunks, including a read past the end. |
569 ASSERT_EQ(net::OK, OpenEntry("the first key", &entry)); | 665 ASSERT_EQ(net::OK, OpenEntry("the first key", &entry)); |
570 ASSERT_TRUE(NULL != entry); | 666 ASSERT_TRUE(NULL != entry); |
571 const int kReadBufferSize = 600; | 667 const int kReadBufferSize = 600; |
572 const int kFinalReadSize = kBufferSize - kReadBufferSize; | 668 const int kFinalReadSize = kBufferSize - kReadBufferSize; |
573 COMPILE_ASSERT(kFinalReadSize < kReadBufferSize, should_be_exactly_two_reads); | 669 COMPILE_ASSERT(kFinalReadSize < kReadBufferSize, should_be_exactly_two_reads); |
574 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kReadBufferSize)); | 670 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kReadBufferSize)); |
575 for (int i = 0; i < kNumStreams; i++) { | 671 for (int i = 0; i < kNumStreams; i++) { |
576 memset(buffer2->data(), 0, kReadBufferSize); | 672 memset(buffer2->data(), 0, kReadBufferSize); |
577 EXPECT_EQ(kReadBufferSize, ReadData(entry, i, 0, buffer2, kReadBufferSize)); | 673 EXPECT_EQ(kReadBufferSize, |
578 EXPECT_EQ(0, memcmp(reference_buffers[i]->data(), buffer2->data(), | 674 ReadData(entry, i, 0, buffer2.get(), kReadBufferSize)); |
579 kReadBufferSize)); | 675 EXPECT_EQ( |
| 676 0, |
| 677 memcmp(reference_buffers[i]->data(), buffer2->data(), kReadBufferSize)); |
580 | 678 |
581 memset(buffer2->data(), 0, kReadBufferSize); | 679 memset(buffer2->data(), 0, kReadBufferSize); |
582 EXPECT_EQ(kFinalReadSize, ReadData(entry, i, kReadBufferSize, | 680 EXPECT_EQ( |
583 buffer2, kReadBufferSize)); | 681 kFinalReadSize, |
584 EXPECT_EQ(0, memcmp(reference_buffers[i]->data() + kReadBufferSize, | 682 ReadData(entry, i, kReadBufferSize, buffer2.get(), kReadBufferSize)); |
585 buffer2->data(), kFinalReadSize)); | 683 EXPECT_EQ(0, |
| 684 memcmp(reference_buffers[i]->data() + kReadBufferSize, |
| 685 buffer2->data(), |
| 686 kFinalReadSize)); |
586 } | 687 } |
587 | 688 |
588 entry->Close(); | 689 entry->Close(); |
589 } | 690 } |
590 | 691 |
591 TEST_F(DiskCacheEntryTest, StreamAccess) { | 692 TEST_F(DiskCacheEntryTest, StreamAccess) { |
592 InitCache(); | 693 InitCache(); |
593 StreamAccess(); | 694 StreamAccess(); |
594 } | 695 } |
595 | 696 |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
671 } else { | 772 } else { |
672 EXPECT_TRUE(entry->GetLastModified() >= t2); | 773 EXPECT_TRUE(entry->GetLastModified() >= t2); |
673 } | 774 } |
674 EXPECT_TRUE(entry->GetLastModified() == entry->GetLastUsed()); | 775 EXPECT_TRUE(entry->GetLastModified() == entry->GetLastUsed()); |
675 | 776 |
676 AddDelay(); | 777 AddDelay(); |
677 Time t3 = Time::Now(); | 778 Time t3 = Time::Now(); |
678 EXPECT_TRUE(t3 > t2); | 779 EXPECT_TRUE(t3 > t2); |
679 const int kSize = 200; | 780 const int kSize = 200; |
680 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); | 781 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); |
681 EXPECT_EQ(kSize, ReadData(entry, 0, 0, buffer, kSize)); | 782 EXPECT_EQ(kSize, ReadData(entry, 0, 0, buffer.get(), kSize)); |
682 if (type_ == net::APP_CACHE) { | 783 if (type_ == net::APP_CACHE) { |
683 EXPECT_TRUE(entry->GetLastUsed() < t2); | 784 EXPECT_TRUE(entry->GetLastUsed() < t2); |
684 EXPECT_TRUE(entry->GetLastModified() < t2); | 785 EXPECT_TRUE(entry->GetLastModified() < t2); |
685 } else if (type_ == net::SHADER_CACHE) { | 786 } else if (type_ == net::SHADER_CACHE) { |
686 EXPECT_TRUE(entry->GetLastUsed() < t3); | 787 EXPECT_TRUE(entry->GetLastUsed() < t3); |
687 EXPECT_TRUE(entry->GetLastModified() < t3); | 788 EXPECT_TRUE(entry->GetLastModified() < t3); |
688 } else { | 789 } else { |
689 EXPECT_TRUE(entry->GetLastUsed() >= t3); | 790 EXPECT_TRUE(entry->GetLastUsed() >= t3); |
690 EXPECT_TRUE(entry->GetLastModified() < t3); | 791 EXPECT_TRUE(entry->GetLastModified() < t3); |
691 } | 792 } |
(...skipping 28 matching lines...) Expand all Loading... |
720 disk_cache::Entry* entry; | 821 disk_cache::Entry* entry; |
721 ASSERT_EQ(net::OK, CreateEntry(key1, &entry)); | 822 ASSERT_EQ(net::OK, CreateEntry(key1, &entry)); |
722 | 823 |
723 const int kSize = 20000; | 824 const int kSize = 20000; |
724 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize)); | 825 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize)); |
725 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize)); | 826 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize)); |
726 CacheTestFillBuffer(buffer1->data(), kSize, false); | 827 CacheTestFillBuffer(buffer1->data(), kSize, false); |
727 memset(buffer2->data(), 0, kSize); | 828 memset(buffer2->data(), 0, kSize); |
728 | 829 |
729 base::strlcpy(buffer1->data(), "the data", kSize); | 830 base::strlcpy(buffer1->data(), "the data", kSize); |
730 EXPECT_EQ(10, WriteData(entry, 0, 0, buffer1, 10, false)); | 831 EXPECT_EQ(10, WriteData(entry, 0, 0, buffer1.get(), 10, false)); |
731 EXPECT_EQ(10, ReadData(entry, 0, 0, buffer2, 10)); | 832 EXPECT_EQ(10, ReadData(entry, 0, 0, buffer2.get(), 10)); |
732 EXPECT_STREQ("the data", buffer2->data()); | 833 EXPECT_STREQ("the data", buffer2->data()); |
733 EXPECT_EQ(10, entry->GetDataSize(0)); | 834 EXPECT_EQ(10, entry->GetDataSize(0)); |
734 | 835 |
735 EXPECT_EQ(2000, WriteData(entry, 0, 0, buffer1, 2000, false)); | 836 EXPECT_EQ(2000, WriteData(entry, 0, 0, buffer1.get(), 2000, false)); |
736 EXPECT_EQ(2000, entry->GetDataSize(0)); | 837 EXPECT_EQ(2000, entry->GetDataSize(0)); |
737 EXPECT_EQ(2000, ReadData(entry, 0, 0, buffer2, 2000)); | 838 EXPECT_EQ(2000, ReadData(entry, 0, 0, buffer2.get(), 2000)); |
738 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 2000)); | 839 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 2000)); |
739 | 840 |
740 EXPECT_EQ(20000, WriteData(entry, 0, 0, buffer1, kSize, false)); | 841 EXPECT_EQ(20000, WriteData(entry, 0, 0, buffer1.get(), kSize, false)); |
741 EXPECT_EQ(20000, entry->GetDataSize(0)); | 842 EXPECT_EQ(20000, entry->GetDataSize(0)); |
742 EXPECT_EQ(20000, ReadData(entry, 0, 0, buffer2, kSize)); | 843 EXPECT_EQ(20000, ReadData(entry, 0, 0, buffer2.get(), kSize)); |
743 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), kSize)); | 844 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), kSize)); |
744 entry->Close(); | 845 entry->Close(); |
745 | 846 |
746 memset(buffer2->data(), 0, kSize); | 847 memset(buffer2->data(), 0, kSize); |
747 std::string key2("Second key"); | 848 std::string key2("Second key"); |
748 ASSERT_EQ(net::OK, CreateEntry(key2, &entry)); | 849 ASSERT_EQ(net::OK, CreateEntry(key2, &entry)); |
749 EXPECT_EQ(10, WriteData(entry, 0, 0, buffer1, 10, false)); | 850 EXPECT_EQ(10, WriteData(entry, 0, 0, buffer1.get(), 10, false)); |
750 EXPECT_EQ(10, entry->GetDataSize(0)); | 851 EXPECT_EQ(10, entry->GetDataSize(0)); |
751 entry->Close(); | 852 entry->Close(); |
752 | 853 |
753 // Go from an internal address to a bigger block size. | 854 // Go from an internal address to a bigger block size. |
754 ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); | 855 ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); |
755 EXPECT_EQ(2000, WriteData(entry, 0, 0, buffer1, 2000, false)); | 856 EXPECT_EQ(2000, WriteData(entry, 0, 0, buffer1.get(), 2000, false)); |
756 EXPECT_EQ(2000, entry->GetDataSize(0)); | 857 EXPECT_EQ(2000, entry->GetDataSize(0)); |
757 EXPECT_EQ(2000, ReadData(entry, 0, 0, buffer2, 2000)); | 858 EXPECT_EQ(2000, ReadData(entry, 0, 0, buffer2.get(), 2000)); |
758 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 2000)); | 859 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 2000)); |
759 entry->Close(); | 860 entry->Close(); |
760 memset(buffer2->data(), 0, kSize); | 861 memset(buffer2->data(), 0, kSize); |
761 | 862 |
762 // Go from an internal address to an external one. | 863 // Go from an internal address to an external one. |
763 ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); | 864 ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); |
764 EXPECT_EQ(20000, WriteData(entry, 0, 0, buffer1, kSize, false)); | 865 EXPECT_EQ(20000, WriteData(entry, 0, 0, buffer1.get(), kSize, false)); |
765 EXPECT_EQ(20000, entry->GetDataSize(0)); | 866 EXPECT_EQ(20000, entry->GetDataSize(0)); |
766 EXPECT_EQ(20000, ReadData(entry, 0, 0, buffer2, kSize)); | 867 EXPECT_EQ(20000, ReadData(entry, 0, 0, buffer2.get(), kSize)); |
767 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), kSize)); | 868 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), kSize)); |
768 entry->Close(); | 869 entry->Close(); |
769 | 870 |
770 // Double check the size from disk. | 871 // Double check the size from disk. |
771 ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); | 872 ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); |
772 EXPECT_EQ(20000, entry->GetDataSize(0)); | 873 EXPECT_EQ(20000, entry->GetDataSize(0)); |
773 | 874 |
774 // Now extend the entry without actual data. | 875 // Now extend the entry without actual data. |
775 EXPECT_EQ(0, WriteData(entry, 0, 45500, buffer1, 0, false)); | 876 EXPECT_EQ(0, WriteData(entry, 0, 45500, buffer1.get(), 0, false)); |
776 entry->Close(); | 877 entry->Close(); |
777 | 878 |
778 // And check again from disk. | 879 // And check again from disk. |
779 ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); | 880 ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); |
780 EXPECT_EQ(45500, entry->GetDataSize(0)); | 881 EXPECT_EQ(45500, entry->GetDataSize(0)); |
781 entry->Close(); | 882 entry->Close(); |
782 } | 883 } |
783 | 884 |
784 TEST_F(DiskCacheEntryTest, GrowData) { | 885 TEST_F(DiskCacheEntryTest, GrowData) { |
785 InitCache(); | 886 InitCache(); |
(...skipping 19 matching lines...) Expand all Loading... |
805 | 906 |
806 const int kSize1 = 20000; | 907 const int kSize1 = 20000; |
807 const int kSize2 = 20000; | 908 const int kSize2 = 20000; |
808 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); | 909 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); |
809 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); | 910 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); |
810 | 911 |
811 CacheTestFillBuffer(buffer1->data(), kSize1, false); | 912 CacheTestFillBuffer(buffer1->data(), kSize1, false); |
812 memset(buffer2->data(), 0, kSize2); | 913 memset(buffer2->data(), 0, kSize2); |
813 | 914 |
814 // Simple truncation: | 915 // Simple truncation: |
815 EXPECT_EQ(200, WriteData(entry, 0, 0, buffer1, 200, false)); | 916 EXPECT_EQ(200, WriteData(entry, 0, 0, buffer1.get(), 200, false)); |
816 EXPECT_EQ(200, entry->GetDataSize(0)); | 917 EXPECT_EQ(200, entry->GetDataSize(0)); |
817 EXPECT_EQ(100, WriteData(entry, 0, 0, buffer1, 100, false)); | 918 EXPECT_EQ(100, WriteData(entry, 0, 0, buffer1.get(), 100, false)); |
818 EXPECT_EQ(200, entry->GetDataSize(0)); | 919 EXPECT_EQ(200, entry->GetDataSize(0)); |
819 EXPECT_EQ(100, WriteData(entry, 0, 0, buffer1, 100, true)); | 920 EXPECT_EQ(100, WriteData(entry, 0, 0, buffer1.get(), 100, true)); |
820 EXPECT_EQ(100, entry->GetDataSize(0)); | 921 EXPECT_EQ(100, entry->GetDataSize(0)); |
821 EXPECT_EQ(0, WriteData(entry, 0, 50, buffer1, 0, true)); | 922 EXPECT_EQ(0, WriteData(entry, 0, 50, buffer1.get(), 0, true)); |
822 EXPECT_EQ(50, entry->GetDataSize(0)); | 923 EXPECT_EQ(50, entry->GetDataSize(0)); |
823 EXPECT_EQ(0, WriteData(entry, 0, 0, buffer1, 0, true)); | 924 EXPECT_EQ(0, WriteData(entry, 0, 0, buffer1.get(), 0, true)); |
824 EXPECT_EQ(0, entry->GetDataSize(0)); | 925 EXPECT_EQ(0, entry->GetDataSize(0)); |
825 entry->Close(); | 926 entry->Close(); |
826 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 927 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
827 | 928 |
828 // Go to an external file. | 929 // Go to an external file. |
829 EXPECT_EQ(20000, WriteData(entry, 0, 0, buffer1, 20000, true)); | 930 EXPECT_EQ(20000, WriteData(entry, 0, 0, buffer1.get(), 20000, true)); |
830 EXPECT_EQ(20000, entry->GetDataSize(0)); | 931 EXPECT_EQ(20000, entry->GetDataSize(0)); |
831 EXPECT_EQ(20000, ReadData(entry, 0, 0, buffer2, 20000)); | 932 EXPECT_EQ(20000, ReadData(entry, 0, 0, buffer2.get(), 20000)); |
832 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 20000)); | 933 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 20000)); |
833 memset(buffer2->data(), 0, kSize2); | 934 memset(buffer2->data(), 0, kSize2); |
834 | 935 |
835 // External file truncation | 936 // External file truncation |
836 EXPECT_EQ(18000, WriteData(entry, 0, 0, buffer1, 18000, false)); | 937 EXPECT_EQ(18000, WriteData(entry, 0, 0, buffer1.get(), 18000, false)); |
837 EXPECT_EQ(20000, entry->GetDataSize(0)); | 938 EXPECT_EQ(20000, entry->GetDataSize(0)); |
838 EXPECT_EQ(18000, WriteData(entry, 0, 0, buffer1, 18000, true)); | 939 EXPECT_EQ(18000, WriteData(entry, 0, 0, buffer1.get(), 18000, true)); |
839 EXPECT_EQ(18000, entry->GetDataSize(0)); | 940 EXPECT_EQ(18000, entry->GetDataSize(0)); |
840 EXPECT_EQ(0, WriteData(entry, 0, 17500, buffer1, 0, true)); | 941 EXPECT_EQ(0, WriteData(entry, 0, 17500, buffer1.get(), 0, true)); |
841 EXPECT_EQ(17500, entry->GetDataSize(0)); | 942 EXPECT_EQ(17500, entry->GetDataSize(0)); |
842 | 943 |
843 // And back to an internal block. | 944 // And back to an internal block. |
844 EXPECT_EQ(600, WriteData(entry, 0, 1000, buffer1, 600, true)); | 945 EXPECT_EQ(600, WriteData(entry, 0, 1000, buffer1.get(), 600, true)); |
845 EXPECT_EQ(1600, entry->GetDataSize(0)); | 946 EXPECT_EQ(1600, entry->GetDataSize(0)); |
846 EXPECT_EQ(600, ReadData(entry, 0, 1000, buffer2, 600)); | 947 EXPECT_EQ(600, ReadData(entry, 0, 1000, buffer2.get(), 600)); |
847 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 600)); | 948 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 600)); |
848 EXPECT_EQ(1000, ReadData(entry, 0, 0, buffer2, 1000)); | 949 EXPECT_EQ(1000, ReadData(entry, 0, 0, buffer2.get(), 1000)); |
849 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 1000)) << | 950 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 1000)) |
850 "Preserves previous data"; | 951 << "Preserves previous data"; |
851 | 952 |
852 // Go from external file to zero length. | 953 // Go from external file to zero length. |
853 EXPECT_EQ(20000, WriteData(entry, 0, 0, buffer1, 20000, true)); | 954 EXPECT_EQ(20000, WriteData(entry, 0, 0, buffer1.get(), 20000, true)); |
854 EXPECT_EQ(20000, entry->GetDataSize(0)); | 955 EXPECT_EQ(20000, entry->GetDataSize(0)); |
855 EXPECT_EQ(0, WriteData(entry, 0, 0, buffer1, 0, true)); | 956 EXPECT_EQ(0, WriteData(entry, 0, 0, buffer1.get(), 0, true)); |
856 EXPECT_EQ(0, entry->GetDataSize(0)); | 957 EXPECT_EQ(0, entry->GetDataSize(0)); |
857 | 958 |
858 entry->Close(); | 959 entry->Close(); |
859 } | 960 } |
860 | 961 |
861 TEST_F(DiskCacheEntryTest, TruncateData) { | 962 TEST_F(DiskCacheEntryTest, TruncateData) { |
862 InitCache(); | 963 InitCache(); |
863 TruncateData(); | 964 TruncateData(); |
864 } | 965 } |
865 | 966 |
(...skipping 26 matching lines...) Expand all Loading... |
892 EXPECT_EQ(0, WriteData(entry, 0, 100000, NULL, 0, true)); | 993 EXPECT_EQ(0, WriteData(entry, 0, 100000, NULL, 0, true)); |
893 EXPECT_EQ(0, ReadData(entry, 0, 50000, NULL, 0)); | 994 EXPECT_EQ(0, ReadData(entry, 0, 50000, NULL, 0)); |
894 EXPECT_EQ(100000, entry->GetDataSize(0)); | 995 EXPECT_EQ(100000, entry->GetDataSize(0)); |
895 | 996 |
896 // Let's verify the actual content. | 997 // Let's verify the actual content. |
897 const int kSize = 20; | 998 const int kSize = 20; |
898 const char zeros[kSize] = {}; | 999 const char zeros[kSize] = {}; |
899 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); | 1000 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); |
900 | 1001 |
901 CacheTestFillBuffer(buffer->data(), kSize, false); | 1002 CacheTestFillBuffer(buffer->data(), kSize, false); |
902 EXPECT_EQ(kSize, ReadData(entry, 0, 500, buffer, kSize)); | 1003 EXPECT_EQ(kSize, ReadData(entry, 0, 500, buffer.get(), kSize)); |
903 EXPECT_TRUE(!memcmp(buffer->data(), zeros, kSize)); | 1004 EXPECT_TRUE(!memcmp(buffer->data(), zeros, kSize)); |
904 | 1005 |
905 CacheTestFillBuffer(buffer->data(), kSize, false); | 1006 CacheTestFillBuffer(buffer->data(), kSize, false); |
906 EXPECT_EQ(kSize, ReadData(entry, 0, 5000, buffer, kSize)); | 1007 EXPECT_EQ(kSize, ReadData(entry, 0, 5000, buffer.get(), kSize)); |
907 EXPECT_TRUE(!memcmp(buffer->data(), zeros, kSize)); | 1008 EXPECT_TRUE(!memcmp(buffer->data(), zeros, kSize)); |
908 | 1009 |
909 CacheTestFillBuffer(buffer->data(), kSize, false); | 1010 CacheTestFillBuffer(buffer->data(), kSize, false); |
910 EXPECT_EQ(kSize, ReadData(entry, 0, 50000, buffer, kSize)); | 1011 EXPECT_EQ(kSize, ReadData(entry, 0, 50000, buffer.get(), kSize)); |
911 EXPECT_TRUE(!memcmp(buffer->data(), zeros, kSize)); | 1012 EXPECT_TRUE(!memcmp(buffer->data(), zeros, kSize)); |
912 | 1013 |
913 entry->Close(); | 1014 entry->Close(); |
914 } | 1015 } |
915 | 1016 |
916 TEST_F(DiskCacheEntryTest, ZeroLengthIO) { | 1017 TEST_F(DiskCacheEntryTest, ZeroLengthIO) { |
917 InitCache(); | 1018 InitCache(); |
918 ZeroLengthIO(); | 1019 ZeroLengthIO(); |
919 } | 1020 } |
920 | 1021 |
(...skipping 15 matching lines...) Expand all Loading... |
936 std::string key("the first key"); | 1037 std::string key("the first key"); |
937 disk_cache::Entry* entry; | 1038 disk_cache::Entry* entry; |
938 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 1039 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
939 | 1040 |
940 const int kSize = 200; | 1041 const int kSize = 200; |
941 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize)); | 1042 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize)); |
942 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize)); | 1043 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize)); |
943 CacheTestFillBuffer(buffer1->data(), kSize, true); | 1044 CacheTestFillBuffer(buffer1->data(), kSize, true); |
944 CacheTestFillBuffer(buffer2->data(), kSize, true); | 1045 CacheTestFillBuffer(buffer2->data(), kSize, true); |
945 | 1046 |
946 EXPECT_EQ(kSize, WriteData(entry, 1, 0, buffer1, kSize, false)); | 1047 EXPECT_EQ(kSize, WriteData(entry, 1, 0, buffer1.get(), kSize, false)); |
947 entry->Close(); | 1048 entry->Close(); |
948 | 1049 |
949 // Write a little more and read what we wrote before. | 1050 // Write a little more and read what we wrote before. |
950 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 1051 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
951 EXPECT_EQ(kSize, WriteData(entry, 1, 5000, buffer1, kSize, false)); | 1052 EXPECT_EQ(kSize, WriteData(entry, 1, 5000, buffer1.get(), kSize, false)); |
952 EXPECT_EQ(kSize, ReadData(entry, 1, 0, buffer2, kSize)); | 1053 EXPECT_EQ(kSize, ReadData(entry, 1, 0, buffer2.get(), kSize)); |
953 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); | 1054 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); |
954 | 1055 |
955 // Now go to an external file. | 1056 // Now go to an external file. |
956 EXPECT_EQ(kSize, WriteData(entry, 1, 18000, buffer1, kSize, false)); | 1057 EXPECT_EQ(kSize, WriteData(entry, 1, 18000, buffer1.get(), kSize, false)); |
957 entry->Close(); | 1058 entry->Close(); |
958 | 1059 |
959 // Write something else and verify old data. | 1060 // Write something else and verify old data. |
960 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 1061 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
961 EXPECT_EQ(kSize, WriteData(entry, 1, 10000, buffer1, kSize, false)); | 1062 EXPECT_EQ(kSize, WriteData(entry, 1, 10000, buffer1.get(), kSize, false)); |
962 CacheTestFillBuffer(buffer2->data(), kSize, true); | 1063 CacheTestFillBuffer(buffer2->data(), kSize, true); |
963 EXPECT_EQ(kSize, ReadData(entry, 1, 5000, buffer2, kSize)); | 1064 EXPECT_EQ(kSize, ReadData(entry, 1, 5000, buffer2.get(), kSize)); |
964 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); | 1065 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); |
965 CacheTestFillBuffer(buffer2->data(), kSize, true); | 1066 CacheTestFillBuffer(buffer2->data(), kSize, true); |
966 EXPECT_EQ(kSize, ReadData(entry, 1, 0, buffer2, kSize)); | 1067 EXPECT_EQ(kSize, ReadData(entry, 1, 0, buffer2.get(), kSize)); |
967 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); | 1068 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); |
968 CacheTestFillBuffer(buffer2->data(), kSize, true); | 1069 CacheTestFillBuffer(buffer2->data(), kSize, true); |
969 EXPECT_EQ(kSize, ReadData(entry, 1, 18000, buffer2, kSize)); | 1070 EXPECT_EQ(kSize, ReadData(entry, 1, 18000, buffer2.get(), kSize)); |
970 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); | 1071 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); |
971 | 1072 |
972 // Extend the file some more. | 1073 // Extend the file some more. |
973 EXPECT_EQ(kSize, WriteData(entry, 1, 23000, buffer1, kSize, false)); | 1074 EXPECT_EQ(kSize, WriteData(entry, 1, 23000, buffer1.get(), kSize, false)); |
974 entry->Close(); | 1075 entry->Close(); |
975 | 1076 |
976 // And now make sure that we can deal with data in both places (ram/disk). | 1077 // And now make sure that we can deal with data in both places (ram/disk). |
977 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 1078 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
978 EXPECT_EQ(kSize, WriteData(entry, 1, 17000, buffer1, kSize, false)); | 1079 EXPECT_EQ(kSize, WriteData(entry, 1, 17000, buffer1.get(), kSize, false)); |
979 | 1080 |
980 // We should not overwrite the data at 18000 with this. | 1081 // We should not overwrite the data at 18000 with this. |
981 EXPECT_EQ(kSize, WriteData(entry, 1, 19000, buffer1, kSize, false)); | 1082 EXPECT_EQ(kSize, WriteData(entry, 1, 19000, buffer1.get(), kSize, false)); |
982 CacheTestFillBuffer(buffer2->data(), kSize, true); | 1083 CacheTestFillBuffer(buffer2->data(), kSize, true); |
983 EXPECT_EQ(kSize, ReadData(entry, 1, 18000, buffer2, kSize)); | 1084 EXPECT_EQ(kSize, ReadData(entry, 1, 18000, buffer2.get(), kSize)); |
984 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); | 1085 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); |
985 CacheTestFillBuffer(buffer2->data(), kSize, true); | 1086 CacheTestFillBuffer(buffer2->data(), kSize, true); |
986 EXPECT_EQ(kSize, ReadData(entry, 1, 17000, buffer2, kSize)); | 1087 EXPECT_EQ(kSize, ReadData(entry, 1, 17000, buffer2.get(), kSize)); |
987 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); | 1088 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); |
988 | 1089 |
989 EXPECT_EQ(kSize, WriteData(entry, 1, 22900, buffer1, kSize, false)); | 1090 EXPECT_EQ(kSize, WriteData(entry, 1, 22900, buffer1.get(), kSize, false)); |
990 CacheTestFillBuffer(buffer2->data(), kSize, true); | 1091 CacheTestFillBuffer(buffer2->data(), kSize, true); |
991 EXPECT_EQ(100, ReadData(entry, 1, 23000, buffer2, kSize)); | 1092 EXPECT_EQ(100, ReadData(entry, 1, 23000, buffer2.get(), kSize)); |
992 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data() + 100, 100)); | 1093 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data() + 100, 100)); |
993 | 1094 |
994 CacheTestFillBuffer(buffer2->data(), kSize, true); | 1095 CacheTestFillBuffer(buffer2->data(), kSize, true); |
995 EXPECT_EQ(100, ReadData(entry, 1, 23100, buffer2, kSize)); | 1096 EXPECT_EQ(100, ReadData(entry, 1, 23100, buffer2.get(), kSize)); |
996 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data() + 100, 100)); | 1097 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data() + 100, 100)); |
997 | 1098 |
998 // Extend the file again and read before without closing the entry. | 1099 // Extend the file again and read before without closing the entry. |
999 EXPECT_EQ(kSize, WriteData(entry, 1, 25000, buffer1, kSize, false)); | 1100 EXPECT_EQ(kSize, WriteData(entry, 1, 25000, buffer1.get(), kSize, false)); |
1000 EXPECT_EQ(kSize, WriteData(entry, 1, 45000, buffer1, kSize, false)); | 1101 EXPECT_EQ(kSize, WriteData(entry, 1, 45000, buffer1.get(), kSize, false)); |
1001 CacheTestFillBuffer(buffer2->data(), kSize, true); | 1102 CacheTestFillBuffer(buffer2->data(), kSize, true); |
1002 EXPECT_EQ(kSize, ReadData(entry, 1, 25000, buffer2, kSize)); | 1103 EXPECT_EQ(kSize, ReadData(entry, 1, 25000, buffer2.get(), kSize)); |
1003 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); | 1104 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); |
1004 CacheTestFillBuffer(buffer2->data(), kSize, true); | 1105 CacheTestFillBuffer(buffer2->data(), kSize, true); |
1005 EXPECT_EQ(kSize, ReadData(entry, 1, 45000, buffer2, kSize)); | 1106 EXPECT_EQ(kSize, ReadData(entry, 1, 45000, buffer2.get(), kSize)); |
1006 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); | 1107 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); |
1007 | 1108 |
1008 entry->Close(); | 1109 entry->Close(); |
1009 } | 1110 } |
1010 | 1111 |
1011 TEST_F(DiskCacheEntryTest, Buffering) { | 1112 TEST_F(DiskCacheEntryTest, Buffering) { |
1012 InitCache(); | 1113 InitCache(); |
1013 Buffering(); | 1114 Buffering(); |
1014 } | 1115 } |
1015 | 1116 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1049 disk_cache::Entry* entry; | 1150 disk_cache::Entry* entry; |
1050 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 1151 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
1051 | 1152 |
1052 const int kSize = 200; | 1153 const int kSize = 200; |
1053 const char zeros[kSize] = {}; | 1154 const char zeros[kSize] = {}; |
1054 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize)); | 1155 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize)); |
1055 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize)); | 1156 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize)); |
1056 CacheTestFillBuffer(buffer1->data(), kSize, true); | 1157 CacheTestFillBuffer(buffer1->data(), kSize, true); |
1057 CacheTestFillBuffer(buffer2->data(), kSize, true); | 1158 CacheTestFillBuffer(buffer2->data(), kSize, true); |
1058 | 1159 |
1059 EXPECT_EQ(kSize, WriteData(entry, 1, 0, buffer1, kSize, true)); | 1160 EXPECT_EQ(kSize, WriteData(entry, 1, 0, buffer1.get(), kSize, true)); |
1060 EXPECT_EQ(kSize, WriteData(entry, 1, 17000, buffer1, kSize, true)); | 1161 EXPECT_EQ(kSize, WriteData(entry, 1, 17000, buffer1.get(), kSize, true)); |
1061 EXPECT_EQ(kSize, WriteData(entry, 1, 23000, buffer1, kSize, true)); | 1162 EXPECT_EQ(kSize, WriteData(entry, 1, 23000, buffer1.get(), kSize, true)); |
1062 entry->Close(); | 1163 entry->Close(); |
1063 | 1164 |
1064 // Extend the file and read between the old size and the new write. | 1165 // Extend the file and read between the old size and the new write. |
1065 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 1166 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
1066 EXPECT_EQ(23000 + kSize, entry->GetDataSize(1)); | 1167 EXPECT_EQ(23000 + kSize, entry->GetDataSize(1)); |
1067 EXPECT_EQ(kSize, WriteData(entry, 1, 25000, buffer1, kSize, true)); | 1168 EXPECT_EQ(kSize, WriteData(entry, 1, 25000, buffer1.get(), kSize, true)); |
1068 EXPECT_EQ(25000 + kSize, entry->GetDataSize(1)); | 1169 EXPECT_EQ(25000 + kSize, entry->GetDataSize(1)); |
1069 EXPECT_EQ(kSize, ReadData(entry, 1, 24000, buffer2, kSize)); | 1170 EXPECT_EQ(kSize, ReadData(entry, 1, 24000, buffer2.get(), kSize)); |
1070 EXPECT_TRUE(!memcmp(buffer2->data(), zeros, kSize)); | 1171 EXPECT_TRUE(!memcmp(buffer2->data(), zeros, kSize)); |
1071 | 1172 |
1072 // Read at the end of the old file size. | 1173 // Read at the end of the old file size. |
1073 EXPECT_EQ(kSize, ReadData(entry, 1, 23000 + kSize - 35, buffer2, kSize)); | 1174 EXPECT_EQ(kSize, |
| 1175 ReadData(entry, 1, 23000 + kSize - 35, buffer2.get(), kSize)); |
1074 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data() + kSize - 35, 35)); | 1176 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data() + kSize - 35, 35)); |
1075 | 1177 |
1076 // Read slightly before the last write. | 1178 // Read slightly before the last write. |
1077 CacheTestFillBuffer(buffer2->data(), kSize, true); | 1179 CacheTestFillBuffer(buffer2->data(), kSize, true); |
1078 EXPECT_EQ(kSize, ReadData(entry, 1, 24900, buffer2, kSize)); | 1180 EXPECT_EQ(kSize, ReadData(entry, 1, 24900, buffer2.get(), kSize)); |
1079 EXPECT_TRUE(!memcmp(buffer2->data(), zeros, 100)); | 1181 EXPECT_TRUE(!memcmp(buffer2->data(), zeros, 100)); |
1080 EXPECT_TRUE(!memcmp(buffer2->data() + 100, buffer1->data(), kSize - 100)); | 1182 EXPECT_TRUE(!memcmp(buffer2->data() + 100, buffer1->data(), kSize - 100)); |
1081 | 1183 |
1082 // Extend the entry a little more. | 1184 // Extend the entry a little more. |
1083 EXPECT_EQ(kSize, WriteData(entry, 1, 26000, buffer1, kSize, true)); | 1185 EXPECT_EQ(kSize, WriteData(entry, 1, 26000, buffer1.get(), kSize, true)); |
1084 EXPECT_EQ(26000 + kSize, entry->GetDataSize(1)); | 1186 EXPECT_EQ(26000 + kSize, entry->GetDataSize(1)); |
1085 CacheTestFillBuffer(buffer2->data(), kSize, true); | 1187 CacheTestFillBuffer(buffer2->data(), kSize, true); |
1086 EXPECT_EQ(kSize, ReadData(entry, 1, 25900, buffer2, kSize)); | 1188 EXPECT_EQ(kSize, ReadData(entry, 1, 25900, buffer2.get(), kSize)); |
1087 EXPECT_TRUE(!memcmp(buffer2->data(), zeros, 100)); | 1189 EXPECT_TRUE(!memcmp(buffer2->data(), zeros, 100)); |
1088 EXPECT_TRUE(!memcmp(buffer2->data() + 100, buffer1->data(), kSize - 100)); | 1190 EXPECT_TRUE(!memcmp(buffer2->data() + 100, buffer1->data(), kSize - 100)); |
1089 | 1191 |
1090 // And now reduce the size. | 1192 // And now reduce the size. |
1091 EXPECT_EQ(kSize, WriteData(entry, 1, 25000, buffer1, kSize, true)); | 1193 EXPECT_EQ(kSize, WriteData(entry, 1, 25000, buffer1.get(), kSize, true)); |
1092 EXPECT_EQ(25000 + kSize, entry->GetDataSize(1)); | 1194 EXPECT_EQ(25000 + kSize, entry->GetDataSize(1)); |
1093 EXPECT_EQ(28, ReadData(entry, 1, 25000 + kSize - 28, buffer2, kSize)); | 1195 EXPECT_EQ(28, ReadData(entry, 1, 25000 + kSize - 28, buffer2.get(), kSize)); |
1094 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data() + kSize - 28, 28)); | 1196 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data() + kSize - 28, 28)); |
1095 | 1197 |
1096 // Reduce the size with a buffer that is not extending the size. | 1198 // Reduce the size with a buffer that is not extending the size. |
1097 EXPECT_EQ(kSize, WriteData(entry, 1, 24000, buffer1, kSize, false)); | 1199 EXPECT_EQ(kSize, WriteData(entry, 1, 24000, buffer1.get(), kSize, false)); |
1098 EXPECT_EQ(25000 + kSize, entry->GetDataSize(1)); | 1200 EXPECT_EQ(25000 + kSize, entry->GetDataSize(1)); |
1099 EXPECT_EQ(kSize, WriteData(entry, 1, 24500, buffer1, kSize, true)); | 1201 EXPECT_EQ(kSize, WriteData(entry, 1, 24500, buffer1.get(), kSize, true)); |
1100 EXPECT_EQ(24500 + kSize, entry->GetDataSize(1)); | 1202 EXPECT_EQ(24500 + kSize, entry->GetDataSize(1)); |
1101 EXPECT_EQ(kSize, ReadData(entry, 1, 23900, buffer2, kSize)); | 1203 EXPECT_EQ(kSize, ReadData(entry, 1, 23900, buffer2.get(), kSize)); |
1102 EXPECT_TRUE(!memcmp(buffer2->data(), zeros, 100)); | 1204 EXPECT_TRUE(!memcmp(buffer2->data(), zeros, 100)); |
1103 EXPECT_TRUE(!memcmp(buffer2->data() + 100, buffer1->data(), kSize - 100)); | 1205 EXPECT_TRUE(!memcmp(buffer2->data() + 100, buffer1->data(), kSize - 100)); |
1104 | 1206 |
1105 // And now reduce the size below the old size. | 1207 // And now reduce the size below the old size. |
1106 EXPECT_EQ(kSize, WriteData(entry, 1, 19000, buffer1, kSize, true)); | 1208 EXPECT_EQ(kSize, WriteData(entry, 1, 19000, buffer1.get(), kSize, true)); |
1107 EXPECT_EQ(19000 + kSize, entry->GetDataSize(1)); | 1209 EXPECT_EQ(19000 + kSize, entry->GetDataSize(1)); |
1108 EXPECT_EQ(kSize, ReadData(entry, 1, 18900, buffer2, kSize)); | 1210 EXPECT_EQ(kSize, ReadData(entry, 1, 18900, buffer2.get(), kSize)); |
1109 EXPECT_TRUE(!memcmp(buffer2->data(), zeros, 100)); | 1211 EXPECT_TRUE(!memcmp(buffer2->data(), zeros, 100)); |
1110 EXPECT_TRUE(!memcmp(buffer2->data() + 100, buffer1->data(), kSize - 100)); | 1212 EXPECT_TRUE(!memcmp(buffer2->data() + 100, buffer1->data(), kSize - 100)); |
1111 | 1213 |
1112 // Verify that the actual file is truncated. | 1214 // Verify that the actual file is truncated. |
1113 entry->Close(); | 1215 entry->Close(); |
1114 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 1216 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
1115 EXPECT_EQ(19000 + kSize, entry->GetDataSize(1)); | 1217 EXPECT_EQ(19000 + kSize, entry->GetDataSize(1)); |
1116 | 1218 |
1117 // Extend the newly opened file with a zero length write, expect zero fill. | 1219 // Extend the newly opened file with a zero length write, expect zero fill. |
1118 EXPECT_EQ(0, WriteData(entry, 1, 20000 + kSize, buffer1, 0, false)); | 1220 EXPECT_EQ(0, WriteData(entry, 1, 20000 + kSize, buffer1.get(), 0, false)); |
1119 EXPECT_EQ(kSize, ReadData(entry, 1, 19000 + kSize, buffer1, kSize)); | 1221 EXPECT_EQ(kSize, ReadData(entry, 1, 19000 + kSize, buffer1.get(), kSize)); |
1120 EXPECT_EQ(0, memcmp(buffer1->data(), zeros, kSize)); | 1222 EXPECT_EQ(0, memcmp(buffer1->data(), zeros, kSize)); |
1121 | 1223 |
1122 entry->Close(); | 1224 entry->Close(); |
1123 } | 1225 } |
1124 | 1226 |
1125 TEST_F(DiskCacheEntryTest, SizeChanges) { | 1227 TEST_F(DiskCacheEntryTest, SizeChanges) { |
1126 InitCache(); | 1228 InitCache(); |
1127 SizeChanges(); | 1229 SizeChanges(); |
1128 } | 1230 } |
1129 | 1231 |
(...skipping 11 matching lines...) Expand all Loading... |
1141 ASSERT_EQ(net::OK, CreateEntry(key1, &entry)); | 1243 ASSERT_EQ(net::OK, CreateEntry(key1, &entry)); |
1142 | 1244 |
1143 entry->Close(); | 1245 entry->Close(); |
1144 std::string key2("the second key"); | 1246 std::string key2("the second key"); |
1145 ASSERT_EQ(net::OK, CreateEntry(key2, &entry)); | 1247 ASSERT_EQ(net::OK, CreateEntry(key2, &entry)); |
1146 | 1248 |
1147 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(size)); | 1249 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(size)); |
1148 CacheTestFillBuffer(buffer->data(), size, false); | 1250 CacheTestFillBuffer(buffer->data(), size, false); |
1149 | 1251 |
1150 for (int i = 0; i < 15; i++) { | 1252 for (int i = 0; i < 15; i++) { |
1151 EXPECT_EQ(0, WriteData(entry, 0, 0, buffer, 0, true)); | 1253 EXPECT_EQ(0, WriteData(entry, 0, 0, buffer.get(), 0, true)); |
1152 EXPECT_EQ(size, WriteData(entry, 0, 0, buffer, size, false)); | 1254 EXPECT_EQ(size, WriteData(entry, 0, 0, buffer.get(), size, false)); |
1153 entry->Close(); | 1255 entry->Close(); |
1154 ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); | 1256 ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); |
1155 } | 1257 } |
1156 | 1258 |
1157 entry->Close(); | 1259 entry->Close(); |
1158 ASSERT_EQ(net::OK, OpenEntry(key1, &entry)) << "have not evicted this entry"; | 1260 ASSERT_EQ(net::OK, OpenEntry(key1, &entry)) << "have not evicted this entry"; |
1159 entry->Close(); | 1261 entry->Close(); |
1160 } | 1262 } |
1161 | 1263 |
1162 TEST_F(DiskCacheEntryTest, ReuseExternalEntry) { | 1264 TEST_F(DiskCacheEntryTest, ReuseExternalEntry) { |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1195 const int kSize2 = 20000; | 1297 const int kSize2 = 20000; |
1196 const int kSize3 = 20000; | 1298 const int kSize3 = 20000; |
1197 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); | 1299 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); |
1198 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); | 1300 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); |
1199 scoped_refptr<net::IOBuffer> buffer3(new net::IOBuffer(kSize3)); | 1301 scoped_refptr<net::IOBuffer> buffer3(new net::IOBuffer(kSize3)); |
1200 | 1302 |
1201 CacheTestFillBuffer(buffer1->data(), kSize1, false); | 1303 CacheTestFillBuffer(buffer1->data(), kSize1, false); |
1202 memset(buffer2->data(), 0, kSize2); | 1304 memset(buffer2->data(), 0, kSize2); |
1203 | 1305 |
1204 // Simple data grow: | 1306 // Simple data grow: |
1205 EXPECT_EQ(200, WriteData(entry, 0, 400, buffer1, 200, false)); | 1307 EXPECT_EQ(200, WriteData(entry, 0, 400, buffer1.get(), 200, false)); |
1206 EXPECT_EQ(600, entry->GetDataSize(0)); | 1308 EXPECT_EQ(600, entry->GetDataSize(0)); |
1207 EXPECT_EQ(100, ReadData(entry, 0, 300, buffer3, 100)); | 1309 EXPECT_EQ(100, ReadData(entry, 0, 300, buffer3.get(), 100)); |
1208 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100)); | 1310 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100)); |
1209 entry->Close(); | 1311 entry->Close(); |
1210 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 1312 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
1211 | 1313 |
1212 // The entry is now on disk. Load it and extend it. | 1314 // The entry is now on disk. Load it and extend it. |
1213 EXPECT_EQ(200, WriteData(entry, 0, 800, buffer1, 200, false)); | 1315 EXPECT_EQ(200, WriteData(entry, 0, 800, buffer1.get(), 200, false)); |
1214 EXPECT_EQ(1000, entry->GetDataSize(0)); | 1316 EXPECT_EQ(1000, entry->GetDataSize(0)); |
1215 EXPECT_EQ(100, ReadData(entry, 0, 700, buffer3, 100)); | 1317 EXPECT_EQ(100, ReadData(entry, 0, 700, buffer3.get(), 100)); |
1216 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100)); | 1318 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100)); |
1217 entry->Close(); | 1319 entry->Close(); |
1218 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 1320 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
1219 | 1321 |
1220 // This time using truncate. | 1322 // This time using truncate. |
1221 EXPECT_EQ(200, WriteData(entry, 0, 1800, buffer1, 200, true)); | 1323 EXPECT_EQ(200, WriteData(entry, 0, 1800, buffer1.get(), 200, true)); |
1222 EXPECT_EQ(2000, entry->GetDataSize(0)); | 1324 EXPECT_EQ(2000, entry->GetDataSize(0)); |
1223 EXPECT_EQ(100, ReadData(entry, 0, 1500, buffer3, 100)); | 1325 EXPECT_EQ(100, ReadData(entry, 0, 1500, buffer3.get(), 100)); |
1224 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100)); | 1326 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100)); |
1225 | 1327 |
1226 // Go to an external file. | 1328 // Go to an external file. |
1227 EXPECT_EQ(200, WriteData(entry, 0, 19800, buffer1, 200, false)); | 1329 EXPECT_EQ(200, WriteData(entry, 0, 19800, buffer1.get(), 200, false)); |
1228 EXPECT_EQ(20000, entry->GetDataSize(0)); | 1330 EXPECT_EQ(20000, entry->GetDataSize(0)); |
1229 EXPECT_EQ(4000, ReadData(entry, 0, 14000, buffer3, 4000)); | 1331 EXPECT_EQ(4000, ReadData(entry, 0, 14000, buffer3.get(), 4000)); |
1230 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 4000)); | 1332 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 4000)); |
1231 | 1333 |
1232 // And back to an internal block. | 1334 // And back to an internal block. |
1233 EXPECT_EQ(600, WriteData(entry, 0, 1000, buffer1, 600, true)); | 1335 EXPECT_EQ(600, WriteData(entry, 0, 1000, buffer1.get(), 600, true)); |
1234 EXPECT_EQ(1600, entry->GetDataSize(0)); | 1336 EXPECT_EQ(1600, entry->GetDataSize(0)); |
1235 EXPECT_EQ(600, ReadData(entry, 0, 1000, buffer3, 600)); | 1337 EXPECT_EQ(600, ReadData(entry, 0, 1000, buffer3.get(), 600)); |
1236 EXPECT_TRUE(!memcmp(buffer3->data(), buffer1->data(), 600)); | 1338 EXPECT_TRUE(!memcmp(buffer3->data(), buffer1->data(), 600)); |
1237 | 1339 |
1238 // Extend it again. | 1340 // Extend it again. |
1239 EXPECT_EQ(600, WriteData(entry, 0, 2000, buffer1, 600, false)); | 1341 EXPECT_EQ(600, WriteData(entry, 0, 2000, buffer1.get(), 600, false)); |
1240 EXPECT_EQ(2600, entry->GetDataSize(0)); | 1342 EXPECT_EQ(2600, entry->GetDataSize(0)); |
1241 EXPECT_EQ(200, ReadData(entry, 0, 1800, buffer3, 200)); | 1343 EXPECT_EQ(200, ReadData(entry, 0, 1800, buffer3.get(), 200)); |
1242 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 200)); | 1344 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 200)); |
1243 | 1345 |
1244 // And again (with truncation flag). | 1346 // And again (with truncation flag). |
1245 EXPECT_EQ(600, WriteData(entry, 0, 3000, buffer1, 600, true)); | 1347 EXPECT_EQ(600, WriteData(entry, 0, 3000, buffer1.get(), 600, true)); |
1246 EXPECT_EQ(3600, entry->GetDataSize(0)); | 1348 EXPECT_EQ(3600, entry->GetDataSize(0)); |
1247 EXPECT_EQ(200, ReadData(entry, 0, 2800, buffer3, 200)); | 1349 EXPECT_EQ(200, ReadData(entry, 0, 2800, buffer3.get(), 200)); |
1248 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 200)); | 1350 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 200)); |
1249 | 1351 |
1250 entry->Close(); | 1352 entry->Close(); |
1251 } | 1353 } |
1252 | 1354 |
1253 TEST_F(DiskCacheEntryTest, InvalidData) { | 1355 TEST_F(DiskCacheEntryTest, InvalidData) { |
1254 InitCache(); | 1356 InitCache(); |
1255 InvalidData(); | 1357 InvalidData(); |
1256 } | 1358 } |
1257 | 1359 |
(...skipping 14 matching lines...) Expand all Loading... |
1272 std::string key("the first key"); | 1374 std::string key("the first key"); |
1273 disk_cache::Entry* entry; | 1375 disk_cache::Entry* entry; |
1274 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 1376 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
1275 | 1377 |
1276 const int kSize = 200; | 1378 const int kSize = 200; |
1277 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); | 1379 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); |
1278 CacheTestFillBuffer(buffer->data(), kSize, false); | 1380 CacheTestFillBuffer(buffer->data(), kSize, false); |
1279 | 1381 |
1280 net::TestCompletionCallback cb; | 1382 net::TestCompletionCallback cb; |
1281 EXPECT_EQ(net::ERR_IO_PENDING, | 1383 EXPECT_EQ(net::ERR_IO_PENDING, |
1282 entry->WriteData(0, 0, buffer, kSize, cb.callback(), false)); | 1384 entry->WriteData(0, 0, buffer.get(), kSize, cb.callback(), false)); |
1283 | 1385 |
1284 // Release our reference to the buffer. | 1386 // Release our reference to the buffer. |
1285 buffer = NULL; | 1387 buffer = NULL; |
1286 EXPECT_EQ(kSize, cb.WaitForResult()); | 1388 EXPECT_EQ(kSize, cb.WaitForResult()); |
1287 | 1389 |
1288 // And now test with a Read(). | 1390 // And now test with a Read(). |
1289 buffer = new net::IOBuffer(kSize); | 1391 buffer = new net::IOBuffer(kSize); |
1290 CacheTestFillBuffer(buffer->data(), kSize, false); | 1392 CacheTestFillBuffer(buffer->data(), kSize, false); |
1291 | 1393 |
1292 EXPECT_EQ(net::ERR_IO_PENDING, | 1394 EXPECT_EQ(net::ERR_IO_PENDING, |
1293 entry->ReadData(0, 0, buffer, kSize, cb.callback())); | 1395 entry->ReadData(0, 0, buffer.get(), kSize, cb.callback())); |
1294 buffer = NULL; | 1396 buffer = NULL; |
1295 EXPECT_EQ(kSize, cb.WaitForResult()); | 1397 EXPECT_EQ(kSize, cb.WaitForResult()); |
1296 | 1398 |
1297 entry->Close(); | 1399 entry->Close(); |
1298 } | 1400 } |
1299 | 1401 |
1300 TEST_F(DiskCacheEntryTest, ReadWriteDestroyBuffer) { | 1402 TEST_F(DiskCacheEntryTest, ReadWriteDestroyBuffer) { |
1301 InitCache(); | 1403 InitCache(); |
1302 ReadWriteDestroyBuffer(); | 1404 ReadWriteDestroyBuffer(); |
1303 } | 1405 } |
1304 | 1406 |
1305 void DiskCacheEntryTest::DoomNormalEntry() { | 1407 void DiskCacheEntryTest::DoomNormalEntry() { |
1306 std::string key("the first key"); | 1408 std::string key("the first key"); |
1307 disk_cache::Entry* entry; | 1409 disk_cache::Entry* entry; |
1308 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 1410 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
1309 entry->Doom(); | 1411 entry->Doom(); |
1310 entry->Close(); | 1412 entry->Close(); |
1311 | 1413 |
1312 const int kSize = 20000; | 1414 const int kSize = 20000; |
1313 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); | 1415 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); |
1314 CacheTestFillBuffer(buffer->data(), kSize, true); | 1416 CacheTestFillBuffer(buffer->data(), kSize, true); |
1315 buffer->data()[19999] = '\0'; | 1417 buffer->data()[19999] = '\0'; |
1316 | 1418 |
1317 key = buffer->data(); | 1419 key = buffer->data(); |
1318 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 1420 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
1319 EXPECT_EQ(20000, WriteData(entry, 0, 0, buffer, kSize, false)); | 1421 EXPECT_EQ(20000, WriteData(entry, 0, 0, buffer.get(), kSize, false)); |
1320 EXPECT_EQ(20000, WriteData(entry, 1, 0, buffer, kSize, false)); | 1422 EXPECT_EQ(20000, WriteData(entry, 1, 0, buffer.get(), kSize, false)); |
1321 entry->Doom(); | 1423 entry->Doom(); |
1322 entry->Close(); | 1424 entry->Close(); |
1323 | 1425 |
1324 FlushQueueForTest(); | 1426 FlushQueueForTest(); |
1325 EXPECT_EQ(0, cache_->GetEntryCount()); | 1427 EXPECT_EQ(0, cache_->GetEntryCount()); |
1326 } | 1428 } |
1327 | 1429 |
1328 TEST_F(DiskCacheEntryTest, DoomEntry) { | 1430 TEST_F(DiskCacheEntryTest, DoomEntry) { |
1329 InitCache(); | 1431 InitCache(); |
1330 DoomNormalEntry(); | 1432 DoomNormalEntry(); |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1390 Time initial = Time::Now(); | 1492 Time initial = Time::Now(); |
1391 AddDelay(); | 1493 AddDelay(); |
1392 | 1494 |
1393 const int kSize1 = 2000; | 1495 const int kSize1 = 2000; |
1394 const int kSize2 = 2000; | 1496 const int kSize2 = 2000; |
1395 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); | 1497 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); |
1396 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); | 1498 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); |
1397 CacheTestFillBuffer(buffer1->data(), kSize1, false); | 1499 CacheTestFillBuffer(buffer1->data(), kSize1, false); |
1398 memset(buffer2->data(), 0, kSize2); | 1500 memset(buffer2->data(), 0, kSize2); |
1399 | 1501 |
1400 EXPECT_EQ(2000, WriteData(entry, 0, 0, buffer1, 2000, false)); | 1502 EXPECT_EQ(2000, WriteData(entry, 0, 0, buffer1.get(), 2000, false)); |
1401 EXPECT_EQ(2000, ReadData(entry, 0, 0, buffer2, 2000)); | 1503 EXPECT_EQ(2000, ReadData(entry, 0, 0, buffer2.get(), 2000)); |
1402 EXPECT_EQ(0, memcmp(buffer1->data(), buffer2->data(), kSize1)); | 1504 EXPECT_EQ(0, memcmp(buffer1->data(), buffer2->data(), kSize1)); |
1403 EXPECT_EQ(key, entry->GetKey()); | 1505 EXPECT_EQ(key, entry->GetKey()); |
1404 EXPECT_TRUE(initial < entry->GetLastModified()); | 1506 EXPECT_TRUE(initial < entry->GetLastModified()); |
1405 EXPECT_TRUE(initial < entry->GetLastUsed()); | 1507 EXPECT_TRUE(initial < entry->GetLastUsed()); |
1406 | 1508 |
1407 entry->Close(); | 1509 entry->Close(); |
1408 } | 1510 } |
1409 | 1511 |
1410 TEST_F(DiskCacheEntryTest, DoomedEntry) { | 1512 TEST_F(DiskCacheEntryTest, DoomedEntry) { |
1411 InitCache(); | 1513 InitCache(); |
(...skipping 11 matching lines...) Expand all Loading... |
1423 InitCache(); | 1525 InitCache(); |
1424 | 1526 |
1425 std::string key("the first key"); | 1527 std::string key("the first key"); |
1426 disk_cache::Entry* entry; | 1528 disk_cache::Entry* entry; |
1427 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 1529 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
1428 | 1530 |
1429 // Write to an external file. | 1531 // Write to an external file. |
1430 const int kSize = 20000; | 1532 const int kSize = 20000; |
1431 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); | 1533 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); |
1432 CacheTestFillBuffer(buffer->data(), kSize, false); | 1534 CacheTestFillBuffer(buffer->data(), kSize, false); |
1433 EXPECT_EQ(kSize, WriteData(entry, 0, 0, buffer, kSize, false)); | 1535 EXPECT_EQ(kSize, WriteData(entry, 0, 0, buffer.get(), kSize, false)); |
1434 entry->Close(); | 1536 entry->Close(); |
1435 FlushQueueForTest(); | 1537 FlushQueueForTest(); |
1436 | 1538 |
1437 disk_cache::Addr address(0x80000001); | 1539 disk_cache::Addr address(0x80000001); |
1438 base::FilePath name = cache_impl_->GetFileName(address); | 1540 base::FilePath name = cache_impl_->GetFileName(address); |
1439 EXPECT_TRUE(file_util::Delete(name, false)); | 1541 EXPECT_TRUE(file_util::Delete(name, false)); |
1440 | 1542 |
1441 // Attempt to read the data. | 1543 // Attempt to read the data. |
1442 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 1544 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
1443 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, ReadData(entry, 0, 0, buffer, kSize)); | 1545 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, |
| 1546 ReadData(entry, 0, 0, buffer.get(), kSize)); |
1444 entry->Close(); | 1547 entry->Close(); |
1445 | 1548 |
1446 // The entry should be gone. | 1549 // The entry should be gone. |
1447 ASSERT_NE(net::OK, OpenEntry(key, &entry)); | 1550 ASSERT_NE(net::OK, OpenEntry(key, &entry)); |
1448 } | 1551 } |
1449 | 1552 |
1450 // Test that child entries in a memory cache backend are not visible from | 1553 // Test that child entries in a memory cache backend are not visible from |
1451 // enumerations. | 1554 // enumerations. |
1452 TEST_F(DiskCacheEntryTest, MemoryOnlyEnumerationWithSparseEntries) { | 1555 TEST_F(DiskCacheEntryTest, MemoryOnlyEnumerationWithSparseEntries) { |
1453 SetMemoryOnlyMode(); | 1556 SetMemoryOnlyMode(); |
1454 InitCache(); | 1557 InitCache(); |
1455 | 1558 |
1456 const int kSize = 4096; | 1559 const int kSize = 4096; |
1457 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); | 1560 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); |
1458 CacheTestFillBuffer(buf->data(), kSize, false); | 1561 CacheTestFillBuffer(buf->data(), kSize, false); |
1459 | 1562 |
1460 std::string key("the first key"); | 1563 std::string key("the first key"); |
1461 disk_cache::Entry* parent_entry; | 1564 disk_cache::Entry* parent_entry; |
1462 ASSERT_EQ(net::OK, CreateEntry(key, &parent_entry)); | 1565 ASSERT_EQ(net::OK, CreateEntry(key, &parent_entry)); |
1463 | 1566 |
1464 // Writes to the parent entry. | 1567 // Writes to the parent entry. |
1465 EXPECT_EQ(kSize, parent_entry->WriteSparseData(0, buf, kSize, | 1568 EXPECT_EQ(kSize, |
1466 net::CompletionCallback())); | 1569 parent_entry->WriteSparseData( |
| 1570 0, buf.get(), kSize, net::CompletionCallback())); |
1467 | 1571 |
1468 // This write creates a child entry and writes to it. | 1572 // This write creates a child entry and writes to it. |
1469 EXPECT_EQ(kSize, parent_entry->WriteSparseData(8192, buf, kSize, | 1573 EXPECT_EQ(kSize, |
1470 net::CompletionCallback())); | 1574 parent_entry->WriteSparseData( |
| 1575 8192, buf.get(), kSize, net::CompletionCallback())); |
1471 | 1576 |
1472 parent_entry->Close(); | 1577 parent_entry->Close(); |
1473 | 1578 |
1474 // Perform the enumerations. | 1579 // Perform the enumerations. |
1475 void* iter = NULL; | 1580 void* iter = NULL; |
1476 disk_cache::Entry* entry = NULL; | 1581 disk_cache::Entry* entry = NULL; |
1477 int count = 0; | 1582 int count = 0; |
1478 while (OpenNextEntry(&iter, &entry) == net::OK) { | 1583 while (OpenNextEntry(&iter, &entry) == net::OK) { |
1479 ASSERT_TRUE(entry != NULL); | 1584 ASSERT_TRUE(entry != NULL); |
1480 ++count; | 1585 ++count; |
(...skipping 24 matching lines...) Expand all Loading... |
1505 } | 1610 } |
1506 | 1611 |
1507 // Reads |size| bytes from |entry| at |offset| and verifies that they are the | 1612 // Reads |size| bytes from |entry| at |offset| and verifies that they are the |
1508 // same as the content of the provided |buffer|. | 1613 // same as the content of the provided |buffer|. |
1509 void VerifyContentSparseIO(disk_cache::Entry* entry, int64 offset, char* buffer, | 1614 void VerifyContentSparseIO(disk_cache::Entry* entry, int64 offset, char* buffer, |
1510 int size) { | 1615 int size) { |
1511 net::TestCompletionCallback cb; | 1616 net::TestCompletionCallback cb; |
1512 | 1617 |
1513 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(size)); | 1618 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(size)); |
1514 memset(buf_1->data(), 0, size); | 1619 memset(buf_1->data(), 0, size); |
1515 int ret = entry->ReadSparseData(offset, buf_1, size, cb.callback()); | 1620 int ret = entry->ReadSparseData(offset, buf_1.get(), size, cb.callback()); |
1516 EXPECT_EQ(size, cb.GetResult(ret)); | 1621 EXPECT_EQ(size, cb.GetResult(ret)); |
1517 EXPECT_EQ(0, memcmp(buf_1->data(), buffer, size)); | 1622 EXPECT_EQ(0, memcmp(buf_1->data(), buffer, size)); |
1518 } | 1623 } |
1519 | 1624 |
1520 void DiskCacheEntryTest::BasicSparseIO() { | 1625 void DiskCacheEntryTest::BasicSparseIO() { |
1521 std::string key("the first key"); | 1626 std::string key("the first key"); |
1522 disk_cache::Entry* entry; | 1627 disk_cache::Entry* entry; |
1523 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 1628 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
1524 | 1629 |
1525 const int kSize = 2048; | 1630 const int kSize = 2048; |
1526 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(kSize)); | 1631 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(kSize)); |
1527 scoped_refptr<net::IOBuffer> buf_2(new net::IOBuffer(kSize)); | 1632 scoped_refptr<net::IOBuffer> buf_2(new net::IOBuffer(kSize)); |
1528 CacheTestFillBuffer(buf_1->data(), kSize, false); | 1633 CacheTestFillBuffer(buf_1->data(), kSize, false); |
1529 | 1634 |
1530 // Write at offset 0. | 1635 // Write at offset 0. |
1531 VerifySparseIO(entry, 0, buf_1, kSize, buf_2); | 1636 VerifySparseIO(entry, 0, buf_1.get(), kSize, buf_2.get()); |
1532 | 1637 |
1533 // Write at offset 0x400000 (4 MB). | 1638 // Write at offset 0x400000 (4 MB). |
1534 VerifySparseIO(entry, 0x400000, buf_1, kSize, buf_2); | 1639 VerifySparseIO(entry, 0x400000, buf_1.get(), kSize, buf_2.get()); |
1535 | 1640 |
1536 // Write at offset 0x800000000 (32 GB). | 1641 // Write at offset 0x800000000 (32 GB). |
1537 VerifySparseIO(entry, 0x800000000LL, buf_1, kSize, buf_2); | 1642 VerifySparseIO(entry, 0x800000000LL, buf_1.get(), kSize, buf_2.get()); |
1538 | 1643 |
1539 entry->Close(); | 1644 entry->Close(); |
1540 | 1645 |
1541 // Check everything again. | 1646 // Check everything again. |
1542 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 1647 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
1543 VerifyContentSparseIO(entry, 0, buf_1->data(), kSize); | 1648 VerifyContentSparseIO(entry, 0, buf_1->data(), kSize); |
1544 VerifyContentSparseIO(entry, 0x400000, buf_1->data(), kSize); | 1649 VerifyContentSparseIO(entry, 0x400000, buf_1->data(), kSize); |
1545 VerifyContentSparseIO(entry, 0x800000000LL, buf_1->data(), kSize); | 1650 VerifyContentSparseIO(entry, 0x800000000LL, buf_1->data(), kSize); |
1546 entry->Close(); | 1651 entry->Close(); |
1547 } | 1652 } |
(...skipping 14 matching lines...) Expand all Loading... |
1562 disk_cache::Entry* entry; | 1667 disk_cache::Entry* entry; |
1563 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 1668 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
1564 | 1669 |
1565 // Write 1.2 MB so that we cover multiple entries. | 1670 // Write 1.2 MB so that we cover multiple entries. |
1566 const int kSize = 1200 * 1024; | 1671 const int kSize = 1200 * 1024; |
1567 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(kSize)); | 1672 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(kSize)); |
1568 scoped_refptr<net::IOBuffer> buf_2(new net::IOBuffer(kSize)); | 1673 scoped_refptr<net::IOBuffer> buf_2(new net::IOBuffer(kSize)); |
1569 CacheTestFillBuffer(buf_1->data(), kSize, false); | 1674 CacheTestFillBuffer(buf_1->data(), kSize, false); |
1570 | 1675 |
1571 // Write at offset 0x20F0000 (33 MB - 64 KB). | 1676 // Write at offset 0x20F0000 (33 MB - 64 KB). |
1572 VerifySparseIO(entry, 0x20F0000, buf_1, kSize, buf_2); | 1677 VerifySparseIO(entry, 0x20F0000, buf_1.get(), kSize, buf_2.get()); |
1573 entry->Close(); | 1678 entry->Close(); |
1574 | 1679 |
1575 // Check it again. | 1680 // Check it again. |
1576 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 1681 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
1577 VerifyContentSparseIO(entry, 0x20F0000, buf_1->data(), kSize); | 1682 VerifyContentSparseIO(entry, 0x20F0000, buf_1->data(), kSize); |
1578 entry->Close(); | 1683 entry->Close(); |
1579 } | 1684 } |
1580 | 1685 |
1581 TEST_F(DiskCacheEntryTest, HugeSparseIO) { | 1686 TEST_F(DiskCacheEntryTest, HugeSparseIO) { |
1582 InitCache(); | 1687 InitCache(); |
1583 HugeSparseIO(); | 1688 HugeSparseIO(); |
1584 } | 1689 } |
1585 | 1690 |
1586 TEST_F(DiskCacheEntryTest, MemoryOnlyHugeSparseIO) { | 1691 TEST_F(DiskCacheEntryTest, MemoryOnlyHugeSparseIO) { |
1587 SetMemoryOnlyMode(); | 1692 SetMemoryOnlyMode(); |
1588 InitCache(); | 1693 InitCache(); |
1589 HugeSparseIO(); | 1694 HugeSparseIO(); |
1590 } | 1695 } |
1591 | 1696 |
1592 void DiskCacheEntryTest::GetAvailableRange() { | 1697 void DiskCacheEntryTest::GetAvailableRange() { |
1593 std::string key("the first key"); | 1698 std::string key("the first key"); |
1594 disk_cache::Entry* entry; | 1699 disk_cache::Entry* entry; |
1595 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 1700 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
1596 | 1701 |
1597 const int kSize = 16 * 1024; | 1702 const int kSize = 16 * 1024; |
1598 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); | 1703 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); |
1599 CacheTestFillBuffer(buf->data(), kSize, false); | 1704 CacheTestFillBuffer(buf->data(), kSize, false); |
1600 | 1705 |
1601 // Write at offset 0x20F0000 (33 MB - 64 KB), and 0x20F4400 (33 MB - 47 KB). | 1706 // Write at offset 0x20F0000 (33 MB - 64 KB), and 0x20F4400 (33 MB - 47 KB). |
1602 EXPECT_EQ(kSize, WriteSparseData(entry, 0x20F0000, buf, kSize)); | 1707 EXPECT_EQ(kSize, WriteSparseData(entry, 0x20F0000, buf.get(), kSize)); |
1603 EXPECT_EQ(kSize, WriteSparseData(entry, 0x20F4400, buf, kSize)); | 1708 EXPECT_EQ(kSize, WriteSparseData(entry, 0x20F4400, buf.get(), kSize)); |
1604 | 1709 |
1605 // We stop at the first empty block. | 1710 // We stop at the first empty block. |
1606 int64 start; | 1711 int64 start; |
1607 net::TestCompletionCallback cb; | 1712 net::TestCompletionCallback cb; |
1608 int rv = entry->GetAvailableRange( | 1713 int rv = entry->GetAvailableRange( |
1609 0x20F0000, kSize * 2, &start, cb.callback()); | 1714 0x20F0000, kSize * 2, &start, cb.callback()); |
1610 EXPECT_EQ(kSize, cb.GetResult(rv)); | 1715 EXPECT_EQ(kSize, cb.GetResult(rv)); |
1611 EXPECT_EQ(0x20F0000, start); | 1716 EXPECT_EQ(0x20F0000, start); |
1612 | 1717 |
1613 start = 0; | 1718 start = 0; |
1614 rv = entry->GetAvailableRange(0, kSize, &start, cb.callback()); | 1719 rv = entry->GetAvailableRange(0, kSize, &start, cb.callback()); |
1615 EXPECT_EQ(0, cb.GetResult(rv)); | 1720 EXPECT_EQ(0, cb.GetResult(rv)); |
1616 rv = entry->GetAvailableRange( | 1721 rv = entry->GetAvailableRange( |
1617 0x20F0000 - kSize, kSize, &start, cb.callback()); | 1722 0x20F0000 - kSize, kSize, &start, cb.callback()); |
1618 EXPECT_EQ(0, cb.GetResult(rv)); | 1723 EXPECT_EQ(0, cb.GetResult(rv)); |
1619 rv = entry->GetAvailableRange(0, 0x2100000, &start, cb.callback()); | 1724 rv = entry->GetAvailableRange(0, 0x2100000, &start, cb.callback()); |
1620 EXPECT_EQ(kSize, cb.GetResult(rv)); | 1725 EXPECT_EQ(kSize, cb.GetResult(rv)); |
1621 EXPECT_EQ(0x20F0000, start); | 1726 EXPECT_EQ(0x20F0000, start); |
1622 | 1727 |
1623 // We should be able to Read based on the results of GetAvailableRange. | 1728 // We should be able to Read based on the results of GetAvailableRange. |
1624 start = -1; | 1729 start = -1; |
1625 rv = entry->GetAvailableRange(0x2100000, kSize, &start, cb.callback()); | 1730 rv = entry->GetAvailableRange(0x2100000, kSize, &start, cb.callback()); |
1626 EXPECT_EQ(0, cb.GetResult(rv)); | 1731 EXPECT_EQ(0, cb.GetResult(rv)); |
1627 rv = entry->ReadSparseData(start, buf, kSize, cb.callback()); | 1732 rv = entry->ReadSparseData(start, buf.get(), kSize, cb.callback()); |
1628 EXPECT_EQ(0, cb.GetResult(rv)); | 1733 EXPECT_EQ(0, cb.GetResult(rv)); |
1629 | 1734 |
1630 start = 0; | 1735 start = 0; |
1631 rv = entry->GetAvailableRange(0x20F2000, kSize, &start, cb.callback()); | 1736 rv = entry->GetAvailableRange(0x20F2000, kSize, &start, cb.callback()); |
1632 EXPECT_EQ(0x2000, cb.GetResult(rv)); | 1737 EXPECT_EQ(0x2000, cb.GetResult(rv)); |
1633 EXPECT_EQ(0x20F2000, start); | 1738 EXPECT_EQ(0x20F2000, start); |
1634 EXPECT_EQ(0x2000, ReadSparseData(entry, start, buf, kSize)); | 1739 EXPECT_EQ(0x2000, ReadSparseData(entry, start, buf.get(), kSize)); |
1635 | 1740 |
1636 // Make sure that we respect the |len| argument. | 1741 // Make sure that we respect the |len| argument. |
1637 start = 0; | 1742 start = 0; |
1638 rv = entry->GetAvailableRange( | 1743 rv = entry->GetAvailableRange( |
1639 0x20F0001 - kSize, kSize, &start, cb.callback()); | 1744 0x20F0001 - kSize, kSize, &start, cb.callback()); |
1640 EXPECT_EQ(1, cb.GetResult(rv)); | 1745 EXPECT_EQ(1, cb.GetResult(rv)); |
1641 EXPECT_EQ(0x20F0000, start); | 1746 EXPECT_EQ(0x20F0000, start); |
1642 | 1747 |
1643 entry->Close(); | 1748 entry->Close(); |
1644 } | 1749 } |
(...skipping 12 matching lines...) Expand all Loading... |
1657 void DiskCacheEntryTest::CouldBeSparse() { | 1762 void DiskCacheEntryTest::CouldBeSparse() { |
1658 std::string key("the first key"); | 1763 std::string key("the first key"); |
1659 disk_cache::Entry* entry; | 1764 disk_cache::Entry* entry; |
1660 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 1765 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
1661 | 1766 |
1662 const int kSize = 16 * 1024; | 1767 const int kSize = 16 * 1024; |
1663 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); | 1768 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); |
1664 CacheTestFillBuffer(buf->data(), kSize, false); | 1769 CacheTestFillBuffer(buf->data(), kSize, false); |
1665 | 1770 |
1666 // Write at offset 0x20F0000 (33 MB - 64 KB). | 1771 // Write at offset 0x20F0000 (33 MB - 64 KB). |
1667 EXPECT_EQ(kSize, WriteSparseData(entry, 0x20F0000, buf, kSize)); | 1772 EXPECT_EQ(kSize, WriteSparseData(entry, 0x20F0000, buf.get(), kSize)); |
1668 | 1773 |
1669 EXPECT_TRUE(entry->CouldBeSparse()); | 1774 EXPECT_TRUE(entry->CouldBeSparse()); |
1670 entry->Close(); | 1775 entry->Close(); |
1671 | 1776 |
1672 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 1777 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
1673 EXPECT_TRUE(entry->CouldBeSparse()); | 1778 EXPECT_TRUE(entry->CouldBeSparse()); |
1674 entry->Close(); | 1779 entry->Close(); |
1675 | 1780 |
1676 // Now verify a regular entry. | 1781 // Now verify a regular entry. |
1677 key.assign("another key"); | 1782 key.assign("another key"); |
1678 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 1783 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
1679 EXPECT_FALSE(entry->CouldBeSparse()); | 1784 EXPECT_FALSE(entry->CouldBeSparse()); |
1680 | 1785 |
1681 EXPECT_EQ(kSize, WriteData(entry, 0, 0, buf, kSize, false)); | 1786 EXPECT_EQ(kSize, WriteData(entry, 0, 0, buf.get(), kSize, false)); |
1682 EXPECT_EQ(kSize, WriteData(entry, 1, 0, buf, kSize, false)); | 1787 EXPECT_EQ(kSize, WriteData(entry, 1, 0, buf.get(), kSize, false)); |
1683 EXPECT_EQ(kSize, WriteData(entry, 2, 0, buf, kSize, false)); | 1788 EXPECT_EQ(kSize, WriteData(entry, 2, 0, buf.get(), kSize, false)); |
1684 | 1789 |
1685 EXPECT_FALSE(entry->CouldBeSparse()); | 1790 EXPECT_FALSE(entry->CouldBeSparse()); |
1686 entry->Close(); | 1791 entry->Close(); |
1687 | 1792 |
1688 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 1793 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
1689 EXPECT_FALSE(entry->CouldBeSparse()); | 1794 EXPECT_FALSE(entry->CouldBeSparse()); |
1690 entry->Close(); | 1795 entry->Close(); |
1691 } | 1796 } |
1692 | 1797 |
1693 TEST_F(DiskCacheEntryTest, CouldBeSparse) { | 1798 TEST_F(DiskCacheEntryTest, CouldBeSparse) { |
(...skipping 17 matching lines...) Expand all Loading... |
1711 CacheTestFillBuffer(buf_1->data(), kSize, false); | 1816 CacheTestFillBuffer(buf_1->data(), kSize, false); |
1712 | 1817 |
1713 std::string key("the first key"); | 1818 std::string key("the first key"); |
1714 disk_cache::Entry* entry; | 1819 disk_cache::Entry* entry; |
1715 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 1820 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
1716 | 1821 |
1717 // This loop writes back to back starting from offset 0 and 9000. | 1822 // This loop writes back to back starting from offset 0 and 9000. |
1718 for (int i = 0; i < kSize; i += 1024) { | 1823 for (int i = 0; i < kSize; i += 1024) { |
1719 scoped_refptr<net::WrappedIOBuffer> buf_3( | 1824 scoped_refptr<net::WrappedIOBuffer> buf_3( |
1720 new net::WrappedIOBuffer(buf_1->data() + i)); | 1825 new net::WrappedIOBuffer(buf_1->data() + i)); |
1721 VerifySparseIO(entry, i, buf_3, 1024, buf_2); | 1826 VerifySparseIO(entry, i, buf_3.get(), 1024, buf_2.get()); |
1722 VerifySparseIO(entry, 9000 + i, buf_3, 1024, buf_2); | 1827 VerifySparseIO(entry, 9000 + i, buf_3.get(), 1024, buf_2.get()); |
1723 } | 1828 } |
1724 | 1829 |
1725 // Make sure we have data written. | 1830 // Make sure we have data written. |
1726 VerifyContentSparseIO(entry, 0, buf_1->data(), kSize); | 1831 VerifyContentSparseIO(entry, 0, buf_1->data(), kSize); |
1727 VerifyContentSparseIO(entry, 9000, buf_1->data(), kSize); | 1832 VerifyContentSparseIO(entry, 9000, buf_1->data(), kSize); |
1728 | 1833 |
1729 // This tests a large write that spans 3 entries from a misaligned offset. | 1834 // This tests a large write that spans 3 entries from a misaligned offset. |
1730 VerifySparseIO(entry, 20481, buf_1, 8192, buf_2); | 1835 VerifySparseIO(entry, 20481, buf_1.get(), 8192, buf_2.get()); |
1731 | 1836 |
1732 entry->Close(); | 1837 entry->Close(); |
1733 } | 1838 } |
1734 | 1839 |
1735 TEST_F(DiskCacheEntryTest, MemoryOnlyMisalignedGetAvailableRange) { | 1840 TEST_F(DiskCacheEntryTest, MemoryOnlyMisalignedGetAvailableRange) { |
1736 SetMemoryOnlyMode(); | 1841 SetMemoryOnlyMode(); |
1737 InitCache(); | 1842 InitCache(); |
1738 | 1843 |
1739 const int kSize = 8192; | 1844 const int kSize = 8192; |
1740 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); | 1845 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); |
1741 CacheTestFillBuffer(buf->data(), kSize, false); | 1846 CacheTestFillBuffer(buf->data(), kSize, false); |
1742 | 1847 |
1743 disk_cache::Entry* entry; | 1848 disk_cache::Entry* entry; |
1744 std::string key("the first key"); | 1849 std::string key("the first key"); |
1745 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 1850 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
1746 | 1851 |
1747 // Writes in the middle of an entry. | 1852 // Writes in the middle of an entry. |
1748 EXPECT_EQ(1024, entry->WriteSparseData( | 1853 EXPECT_EQ( |
1749 0, buf, 1024, net::CompletionCallback())); | 1854 1024, |
1750 EXPECT_EQ(1024, entry->WriteSparseData( | 1855 entry->WriteSparseData(0, buf.get(), 1024, net::CompletionCallback())); |
1751 5120, buf, 1024, net::CompletionCallback())); | 1856 EXPECT_EQ( |
1752 EXPECT_EQ(1024, entry->WriteSparseData( | 1857 1024, |
1753 10000, buf, 1024, net::CompletionCallback())); | 1858 entry->WriteSparseData(5120, buf.get(), 1024, net::CompletionCallback())); |
| 1859 EXPECT_EQ(1024, |
| 1860 entry->WriteSparseData( |
| 1861 10000, buf.get(), 1024, net::CompletionCallback())); |
1754 | 1862 |
1755 // Writes in the middle of an entry and spans 2 child entries. | 1863 // Writes in the middle of an entry and spans 2 child entries. |
1756 EXPECT_EQ(8192, entry->WriteSparseData( | 1864 EXPECT_EQ(8192, |
1757 50000, buf, 8192, net::CompletionCallback())); | 1865 entry->WriteSparseData( |
| 1866 50000, buf.get(), 8192, net::CompletionCallback())); |
1758 | 1867 |
1759 int64 start; | 1868 int64 start; |
1760 net::TestCompletionCallback cb; | 1869 net::TestCompletionCallback cb; |
1761 // Test that we stop at a discontinuous child at the second block. | 1870 // Test that we stop at a discontinuous child at the second block. |
1762 int rv = entry->GetAvailableRange(0, 10000, &start, cb.callback()); | 1871 int rv = entry->GetAvailableRange(0, 10000, &start, cb.callback()); |
1763 EXPECT_EQ(1024, cb.GetResult(rv)); | 1872 EXPECT_EQ(1024, cb.GetResult(rv)); |
1764 EXPECT_EQ(0, start); | 1873 EXPECT_EQ(0, start); |
1765 | 1874 |
1766 // Test that number of bytes is reported correctly when we start from the | 1875 // Test that number of bytes is reported correctly when we start from the |
1767 // middle of a filled region. | 1876 // middle of a filled region. |
(...skipping 30 matching lines...) Expand all Loading... |
1798 std::string key("the first key"); | 1907 std::string key("the first key"); |
1799 disk_cache::Entry* entry1; | 1908 disk_cache::Entry* entry1; |
1800 ASSERT_EQ(net::OK, CreateEntry(key, &entry1)); | 1909 ASSERT_EQ(net::OK, CreateEntry(key, &entry1)); |
1801 | 1910 |
1802 const int kSize = 2048; | 1911 const int kSize = 2048; |
1803 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(kSize)); | 1912 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(kSize)); |
1804 scoped_refptr<net::IOBuffer> buf_2(new net::IOBuffer(kSize)); | 1913 scoped_refptr<net::IOBuffer> buf_2(new net::IOBuffer(kSize)); |
1805 CacheTestFillBuffer(buf_1->data(), kSize, false); | 1914 CacheTestFillBuffer(buf_1->data(), kSize, false); |
1806 | 1915 |
1807 // Write at offset 0. | 1916 // Write at offset 0. |
1808 VerifySparseIO(entry1, 0, buf_1, kSize, buf_2); | 1917 VerifySparseIO(entry1, 0, buf_1.get(), kSize, buf_2.get()); |
1809 entry1->Close(); | 1918 entry1->Close(); |
1810 | 1919 |
1811 // Write at offset 2048. | 1920 // Write at offset 2048. |
1812 ASSERT_EQ(net::OK, OpenEntry(key, &entry1)); | 1921 ASSERT_EQ(net::OK, OpenEntry(key, &entry1)); |
1813 VerifySparseIO(entry1, 2048, buf_1, kSize, buf_2); | 1922 VerifySparseIO(entry1, 2048, buf_1.get(), kSize, buf_2.get()); |
1814 | 1923 |
1815 disk_cache::Entry* entry2; | 1924 disk_cache::Entry* entry2; |
1816 ASSERT_EQ(net::OK, CreateEntry("the second key", &entry2)); | 1925 ASSERT_EQ(net::OK, CreateEntry("the second key", &entry2)); |
1817 | 1926 |
1818 entry1->Close(); | 1927 entry1->Close(); |
1819 entry2->Close(); | 1928 entry2->Close(); |
1820 FlushQueueForTest(); | 1929 FlushQueueForTest(); |
1821 if (memory_only_) | 1930 if (memory_only_) |
1822 EXPECT_EQ(2, cache_->GetEntryCount()); | 1931 EXPECT_EQ(2, cache_->GetEntryCount()); |
1823 else | 1932 else |
(...skipping 20 matching lines...) Expand all Loading... |
1844 ASSERT_EQ(net::OK, CreateEntry(key1, &entry1)); | 1953 ASSERT_EQ(net::OK, CreateEntry(key1, &entry1)); |
1845 ASSERT_EQ(net::OK, CreateEntry(key2, &entry2)); | 1954 ASSERT_EQ(net::OK, CreateEntry(key2, &entry2)); |
1846 | 1955 |
1847 const int kSize = 4 * 1024; | 1956 const int kSize = 4 * 1024; |
1848 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); | 1957 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); |
1849 CacheTestFillBuffer(buf->data(), kSize, false); | 1958 CacheTestFillBuffer(buf->data(), kSize, false); |
1850 | 1959 |
1851 int64 offset = 1024; | 1960 int64 offset = 1024; |
1852 // Write to a bunch of ranges. | 1961 // Write to a bunch of ranges. |
1853 for (int i = 0; i < 12; i++) { | 1962 for (int i = 0; i < 12; i++) { |
1854 EXPECT_EQ(kSize, entry1->WriteSparseData(offset, buf, kSize, | 1963 EXPECT_EQ(kSize, |
1855 net::CompletionCallback())); | 1964 entry1->WriteSparseData( |
| 1965 offset, buf.get(), kSize, net::CompletionCallback())); |
1856 // Keep the second map under the default size. | 1966 // Keep the second map under the default size. |
1857 if (i < 9) { | 1967 if (i < 9) { |
1858 EXPECT_EQ(kSize, entry2->WriteSparseData(offset, buf, kSize, | 1968 EXPECT_EQ(kSize, |
1859 net::CompletionCallback())); | 1969 entry2->WriteSparseData( |
| 1970 offset, buf.get(), kSize, net::CompletionCallback())); |
1860 } | 1971 } |
1861 | 1972 |
1862 offset *= 4; | 1973 offset *= 4; |
1863 } | 1974 } |
1864 | 1975 |
1865 if (memory_only_) | 1976 if (memory_only_) |
1866 EXPECT_EQ(2, cache_->GetEntryCount()); | 1977 EXPECT_EQ(2, cache_->GetEntryCount()); |
1867 else | 1978 else |
1868 EXPECT_EQ(15, cache_->GetEntryCount()); | 1979 EXPECT_EQ(15, cache_->GetEntryCount()); |
1869 | 1980 |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1935 disk_cache::Entry* entry; | 2046 disk_cache::Entry* entry; |
1936 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 2047 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
1937 | 2048 |
1938 const int kSize = 4 * 1024; | 2049 const int kSize = 4 * 1024; |
1939 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); | 2050 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); |
1940 CacheTestFillBuffer(buf->data(), kSize, false); | 2051 CacheTestFillBuffer(buf->data(), kSize, false); |
1941 | 2052 |
1942 int64 offset = 1024; | 2053 int64 offset = 1024; |
1943 // Write to a bunch of ranges. | 2054 // Write to a bunch of ranges. |
1944 for (int i = 0; i < 12; i++) { | 2055 for (int i = 0; i < 12; i++) { |
1945 EXPECT_EQ(kSize, entry->WriteSparseData(offset, buf, kSize, | 2056 EXPECT_EQ(kSize, |
1946 net::CompletionCallback())); | 2057 entry->WriteSparseData( |
| 2058 offset, buf.get(), kSize, net::CompletionCallback())); |
1947 offset *= 4; | 2059 offset *= 4; |
1948 } | 2060 } |
1949 EXPECT_EQ(9, cache_->GetEntryCount()); | 2061 EXPECT_EQ(9, cache_->GetEntryCount()); |
1950 | 2062 |
1951 entry->Close(); | 2063 entry->Close(); |
1952 SparseTestCompletionCallback cb(cache_); | 2064 SparseTestCompletionCallback cb(cache_); |
1953 int rv = cache_->DoomEntry(key, cb.callback()); | 2065 int rv = cache_->DoomEntry(key, cb.callback()); |
1954 EXPECT_EQ(net::ERR_IO_PENDING, rv); | 2066 EXPECT_EQ(net::ERR_IO_PENDING, rv); |
1955 EXPECT_EQ(net::OK, cb.WaitForResult()); | 2067 EXPECT_EQ(net::OK, cb.WaitForResult()); |
1956 | 2068 |
1957 // TearDown will attempt to delete the cache_. | 2069 // TearDown will attempt to delete the cache_. |
1958 cache_ = NULL; | 2070 cache_ = NULL; |
1959 } | 2071 } |
1960 | 2072 |
1961 void DiskCacheEntryTest::PartialSparseEntry() { | 2073 void DiskCacheEntryTest::PartialSparseEntry() { |
1962 std::string key("the first key"); | 2074 std::string key("the first key"); |
1963 disk_cache::Entry* entry; | 2075 disk_cache::Entry* entry; |
1964 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 2076 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
1965 | 2077 |
1966 // We should be able to deal with IO that is not aligned to the block size | 2078 // We should be able to deal with IO that is not aligned to the block size |
1967 // of a sparse entry, at least to write a big range without leaving holes. | 2079 // of a sparse entry, at least to write a big range without leaving holes. |
1968 const int kSize = 4 * 1024; | 2080 const int kSize = 4 * 1024; |
1969 const int kSmallSize = 128; | 2081 const int kSmallSize = 128; |
1970 scoped_refptr<net::IOBuffer> buf1(new net::IOBuffer(kSize)); | 2082 scoped_refptr<net::IOBuffer> buf1(new net::IOBuffer(kSize)); |
1971 CacheTestFillBuffer(buf1->data(), kSize, false); | 2083 CacheTestFillBuffer(buf1->data(), kSize, false); |
1972 | 2084 |
1973 // The first write is just to extend the entry. The third write occupies | 2085 // The first write is just to extend the entry. The third write occupies |
1974 // a 1KB block partially, it may not be written internally depending on the | 2086 // a 1KB block partially, it may not be written internally depending on the |
1975 // implementation. | 2087 // implementation. |
1976 EXPECT_EQ(kSize, WriteSparseData(entry, 20000, buf1, kSize)); | 2088 EXPECT_EQ(kSize, WriteSparseData(entry, 20000, buf1.get(), kSize)); |
1977 EXPECT_EQ(kSize, WriteSparseData(entry, 500, buf1, kSize)); | 2089 EXPECT_EQ(kSize, WriteSparseData(entry, 500, buf1.get(), kSize)); |
1978 EXPECT_EQ(kSmallSize, WriteSparseData(entry, 1080321, buf1, kSmallSize)); | 2090 EXPECT_EQ(kSmallSize, |
| 2091 WriteSparseData(entry, 1080321, buf1.get(), kSmallSize)); |
1979 entry->Close(); | 2092 entry->Close(); |
1980 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 2093 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
1981 | 2094 |
1982 scoped_refptr<net::IOBuffer> buf2(new net::IOBuffer(kSize)); | 2095 scoped_refptr<net::IOBuffer> buf2(new net::IOBuffer(kSize)); |
1983 memset(buf2->data(), 0, kSize); | 2096 memset(buf2->data(), 0, kSize); |
1984 EXPECT_EQ(0, ReadSparseData(entry, 8000, buf2, kSize)); | 2097 EXPECT_EQ(0, ReadSparseData(entry, 8000, buf2.get(), kSize)); |
1985 | 2098 |
1986 EXPECT_EQ(500, ReadSparseData(entry, kSize, buf2, kSize)); | 2099 EXPECT_EQ(500, ReadSparseData(entry, kSize, buf2.get(), kSize)); |
1987 EXPECT_EQ(0, memcmp(buf2->data(), buf1->data() + kSize - 500, 500)); | 2100 EXPECT_EQ(0, memcmp(buf2->data(), buf1->data() + kSize - 500, 500)); |
1988 EXPECT_EQ(0, ReadSparseData(entry, 0, buf2, kSize)); | 2101 EXPECT_EQ(0, ReadSparseData(entry, 0, buf2.get(), kSize)); |
1989 | 2102 |
1990 // This read should not change anything. | 2103 // This read should not change anything. |
1991 EXPECT_EQ(96, ReadSparseData(entry, 24000, buf2, kSize)); | 2104 EXPECT_EQ(96, ReadSparseData(entry, 24000, buf2.get(), kSize)); |
1992 EXPECT_EQ(500, ReadSparseData(entry, kSize, buf2, kSize)); | 2105 EXPECT_EQ(500, ReadSparseData(entry, kSize, buf2.get(), kSize)); |
1993 EXPECT_EQ(0, ReadSparseData(entry, 99, buf2, kSize)); | 2106 EXPECT_EQ(0, ReadSparseData(entry, 99, buf2.get(), kSize)); |
1994 | 2107 |
1995 int rv; | 2108 int rv; |
1996 int64 start; | 2109 int64 start; |
1997 net::TestCompletionCallback cb; | 2110 net::TestCompletionCallback cb; |
1998 if (memory_only_) { | 2111 if (memory_only_) { |
1999 rv = entry->GetAvailableRange(0, 600, &start, cb.callback()); | 2112 rv = entry->GetAvailableRange(0, 600, &start, cb.callback()); |
2000 EXPECT_EQ(100, cb.GetResult(rv)); | 2113 EXPECT_EQ(100, cb.GetResult(rv)); |
2001 EXPECT_EQ(500, start); | 2114 EXPECT_EQ(500, start); |
2002 } else { | 2115 } else { |
2003 rv = entry->GetAvailableRange(0, 2048, &start, cb.callback()); | 2116 rv = entry->GetAvailableRange(0, 2048, &start, cb.callback()); |
(...skipping 20 matching lines...) Expand all Loading... |
2024 EXPECT_EQ(20480, start); | 2137 EXPECT_EQ(20480, start); |
2025 } | 2138 } |
2026 rv = entry->GetAvailableRange(3073, kSize, &start, cb.callback()); | 2139 rv = entry->GetAvailableRange(3073, kSize, &start, cb.callback()); |
2027 EXPECT_EQ(1523, cb.GetResult(rv)); | 2140 EXPECT_EQ(1523, cb.GetResult(rv)); |
2028 EXPECT_EQ(3073, start); | 2141 EXPECT_EQ(3073, start); |
2029 rv = entry->GetAvailableRange(4600, kSize, &start, cb.callback()); | 2142 rv = entry->GetAvailableRange(4600, kSize, &start, cb.callback()); |
2030 EXPECT_EQ(0, cb.GetResult(rv)); | 2143 EXPECT_EQ(0, cb.GetResult(rv)); |
2031 EXPECT_EQ(4600, start); | 2144 EXPECT_EQ(4600, start); |
2032 | 2145 |
2033 // Now make another write and verify that there is no hole in between. | 2146 // Now make another write and verify that there is no hole in between. |
2034 EXPECT_EQ(kSize, WriteSparseData(entry, 500 + kSize, buf1, kSize)); | 2147 EXPECT_EQ(kSize, WriteSparseData(entry, 500 + kSize, buf1.get(), kSize)); |
2035 rv = entry->GetAvailableRange(1024, 10000, &start, cb.callback()); | 2148 rv = entry->GetAvailableRange(1024, 10000, &start, cb.callback()); |
2036 EXPECT_EQ(7 * 1024 + 500, cb.GetResult(rv)); | 2149 EXPECT_EQ(7 * 1024 + 500, cb.GetResult(rv)); |
2037 EXPECT_EQ(1024, start); | 2150 EXPECT_EQ(1024, start); |
2038 EXPECT_EQ(kSize, ReadSparseData(entry, kSize, buf2, kSize)); | 2151 EXPECT_EQ(kSize, ReadSparseData(entry, kSize, buf2.get(), kSize)); |
2039 EXPECT_EQ(0, memcmp(buf2->data(), buf1->data() + kSize - 500, 500)); | 2152 EXPECT_EQ(0, memcmp(buf2->data(), buf1->data() + kSize - 500, 500)); |
2040 EXPECT_EQ(0, memcmp(buf2->data() + 500, buf1->data(), kSize - 500)); | 2153 EXPECT_EQ(0, memcmp(buf2->data() + 500, buf1->data(), kSize - 500)); |
2041 | 2154 |
2042 entry->Close(); | 2155 entry->Close(); |
2043 } | 2156 } |
2044 | 2157 |
2045 TEST_F(DiskCacheEntryTest, PartialSparseEntry) { | 2158 TEST_F(DiskCacheEntryTest, PartialSparseEntry) { |
2046 InitCache(); | 2159 InitCache(); |
2047 PartialSparseEntry(); | 2160 PartialSparseEntry(); |
2048 } | 2161 } |
2049 | 2162 |
2050 TEST_F(DiskCacheEntryTest, MemoryPartialSparseEntry) { | 2163 TEST_F(DiskCacheEntryTest, MemoryPartialSparseEntry) { |
2051 SetMemoryOnlyMode(); | 2164 SetMemoryOnlyMode(); |
2052 InitCache(); | 2165 InitCache(); |
2053 PartialSparseEntry(); | 2166 PartialSparseEntry(); |
2054 } | 2167 } |
2055 | 2168 |
2056 // Tests that corrupt sparse children are removed automatically. | 2169 // Tests that corrupt sparse children are removed automatically. |
2057 TEST_F(DiskCacheEntryTest, CleanupSparseEntry) { | 2170 TEST_F(DiskCacheEntryTest, CleanupSparseEntry) { |
2058 InitCache(); | 2171 InitCache(); |
2059 std::string key("the first key"); | 2172 std::string key("the first key"); |
2060 disk_cache::Entry* entry; | 2173 disk_cache::Entry* entry; |
2061 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 2174 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
2062 | 2175 |
2063 const int kSize = 4 * 1024; | 2176 const int kSize = 4 * 1024; |
2064 scoped_refptr<net::IOBuffer> buf1(new net::IOBuffer(kSize)); | 2177 scoped_refptr<net::IOBuffer> buf1(new net::IOBuffer(kSize)); |
2065 CacheTestFillBuffer(buf1->data(), kSize, false); | 2178 CacheTestFillBuffer(buf1->data(), kSize, false); |
2066 | 2179 |
2067 const int k1Meg = 1024 * 1024; | 2180 const int k1Meg = 1024 * 1024; |
2068 EXPECT_EQ(kSize, WriteSparseData(entry, 8192, buf1, kSize)); | 2181 EXPECT_EQ(kSize, WriteSparseData(entry, 8192, buf1.get(), kSize)); |
2069 EXPECT_EQ(kSize, WriteSparseData(entry, k1Meg + 8192, buf1, kSize)); | 2182 EXPECT_EQ(kSize, WriteSparseData(entry, k1Meg + 8192, buf1.get(), kSize)); |
2070 EXPECT_EQ(kSize, WriteSparseData(entry, 2 * k1Meg + 8192, buf1, kSize)); | 2183 EXPECT_EQ(kSize, WriteSparseData(entry, 2 * k1Meg + 8192, buf1.get(), kSize)); |
2071 entry->Close(); | 2184 entry->Close(); |
2072 EXPECT_EQ(4, cache_->GetEntryCount()); | 2185 EXPECT_EQ(4, cache_->GetEntryCount()); |
2073 | 2186 |
2074 void* iter = NULL; | 2187 void* iter = NULL; |
2075 int count = 0; | 2188 int count = 0; |
2076 std::string child_key[2]; | 2189 std::string child_key[2]; |
2077 while (OpenNextEntry(&iter, &entry) == net::OK) { | 2190 while (OpenNextEntry(&iter, &entry) == net::OK) { |
2078 ASSERT_TRUE(entry != NULL); | 2191 ASSERT_TRUE(entry != NULL); |
2079 // Writing to an entry will alter the LRU list and invalidate the iterator. | 2192 // Writing to an entry will alter the LRU list and invalidate the iterator. |
2080 if (entry->GetKey() != key && count < 2) | 2193 if (entry->GetKey() != key && count < 2) |
2081 child_key[count++] = entry->GetKey(); | 2194 child_key[count++] = entry->GetKey(); |
2082 entry->Close(); | 2195 entry->Close(); |
2083 } | 2196 } |
2084 for (int i = 0; i < 2; i++) { | 2197 for (int i = 0; i < 2; i++) { |
2085 ASSERT_EQ(net::OK, OpenEntry(child_key[i], &entry)); | 2198 ASSERT_EQ(net::OK, OpenEntry(child_key[i], &entry)); |
2086 // Overwrite the header's magic and signature. | 2199 // Overwrite the header's magic and signature. |
2087 EXPECT_EQ(12, WriteData(entry, 2, 0, buf1, 12, false)); | 2200 EXPECT_EQ(12, WriteData(entry, 2, 0, buf1.get(), 12, false)); |
2088 entry->Close(); | 2201 entry->Close(); |
2089 } | 2202 } |
2090 | 2203 |
2091 EXPECT_EQ(4, cache_->GetEntryCount()); | 2204 EXPECT_EQ(4, cache_->GetEntryCount()); |
2092 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 2205 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
2093 | 2206 |
2094 // Two children should be gone. One while reading and one while writing. | 2207 // Two children should be gone. One while reading and one while writing. |
2095 EXPECT_EQ(0, ReadSparseData(entry, 2 * k1Meg + 8192, buf1, kSize)); | 2208 EXPECT_EQ(0, ReadSparseData(entry, 2 * k1Meg + 8192, buf1.get(), kSize)); |
2096 EXPECT_EQ(kSize, WriteSparseData(entry, k1Meg + 16384, buf1, kSize)); | 2209 EXPECT_EQ(kSize, WriteSparseData(entry, k1Meg + 16384, buf1.get(), kSize)); |
2097 EXPECT_EQ(0, ReadSparseData(entry, k1Meg + 8192, buf1, kSize)); | 2210 EXPECT_EQ(0, ReadSparseData(entry, k1Meg + 8192, buf1.get(), kSize)); |
2098 | 2211 |
2099 // We never touched this one. | 2212 // We never touched this one. |
2100 EXPECT_EQ(kSize, ReadSparseData(entry, 8192, buf1, kSize)); | 2213 EXPECT_EQ(kSize, ReadSparseData(entry, 8192, buf1.get(), kSize)); |
2101 entry->Close(); | 2214 entry->Close(); |
2102 | 2215 |
2103 // We re-created one of the corrupt children. | 2216 // We re-created one of the corrupt children. |
2104 EXPECT_EQ(3, cache_->GetEntryCount()); | 2217 EXPECT_EQ(3, cache_->GetEntryCount()); |
2105 } | 2218 } |
2106 | 2219 |
2107 TEST_F(DiskCacheEntryTest, CancelSparseIO) { | 2220 TEST_F(DiskCacheEntryTest, CancelSparseIO) { |
2108 UseCurrentThread(); | 2221 UseCurrentThread(); |
2109 InitCache(); | 2222 InitCache(); |
2110 std::string key("the first key"); | 2223 std::string key("the first key"); |
2111 disk_cache::Entry* entry; | 2224 disk_cache::Entry* entry; |
2112 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 2225 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
2113 | 2226 |
2114 const int kSize = 40 * 1024; | 2227 const int kSize = 40 * 1024; |
2115 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); | 2228 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); |
2116 CacheTestFillBuffer(buf->data(), kSize, false); | 2229 CacheTestFillBuffer(buf->data(), kSize, false); |
2117 | 2230 |
2118 // This will open and write two "real" entries. | 2231 // This will open and write two "real" entries. |
2119 net::TestCompletionCallback cb1, cb2, cb3, cb4, cb5; | 2232 net::TestCompletionCallback cb1, cb2, cb3, cb4, cb5; |
2120 int rv = entry->WriteSparseData( | 2233 int rv = entry->WriteSparseData( |
2121 1024 * 1024 - 4096, buf, kSize, cb1.callback()); | 2234 1024 * 1024 - 4096, buf.get(), kSize, cb1.callback()); |
2122 EXPECT_EQ(net::ERR_IO_PENDING, rv); | 2235 EXPECT_EQ(net::ERR_IO_PENDING, rv); |
2123 | 2236 |
2124 int64 offset = 0; | 2237 int64 offset = 0; |
2125 rv = entry->GetAvailableRange(offset, kSize, &offset, cb5.callback()); | 2238 rv = entry->GetAvailableRange(offset, kSize, &offset, cb5.callback()); |
2126 rv = cb5.GetResult(rv); | 2239 rv = cb5.GetResult(rv); |
2127 if (!cb1.have_result()) { | 2240 if (!cb1.have_result()) { |
2128 // We may or may not have finished writing to the entry. If we have not, | 2241 // We may or may not have finished writing to the entry. If we have not, |
2129 // we cannot start another operation at this time. | 2242 // we cannot start another operation at this time. |
2130 EXPECT_EQ(net::ERR_CACHE_OPERATION_NOT_SUPPORTED, rv); | 2243 EXPECT_EQ(net::ERR_CACHE_OPERATION_NOT_SUPPORTED, rv); |
2131 } | 2244 } |
2132 | 2245 |
2133 // We cancel the pending operation, and register multiple notifications. | 2246 // We cancel the pending operation, and register multiple notifications. |
2134 entry->CancelSparseIO(); | 2247 entry->CancelSparseIO(); |
2135 EXPECT_EQ(net::ERR_IO_PENDING, entry->ReadyForSparseIO(cb2.callback())); | 2248 EXPECT_EQ(net::ERR_IO_PENDING, entry->ReadyForSparseIO(cb2.callback())); |
2136 EXPECT_EQ(net::ERR_IO_PENDING, entry->ReadyForSparseIO(cb3.callback())); | 2249 EXPECT_EQ(net::ERR_IO_PENDING, entry->ReadyForSparseIO(cb3.callback())); |
2137 entry->CancelSparseIO(); // Should be a no op at this point. | 2250 entry->CancelSparseIO(); // Should be a no op at this point. |
2138 EXPECT_EQ(net::ERR_IO_PENDING, entry->ReadyForSparseIO(cb4.callback())); | 2251 EXPECT_EQ(net::ERR_IO_PENDING, entry->ReadyForSparseIO(cb4.callback())); |
2139 | 2252 |
2140 if (!cb1.have_result()) { | 2253 if (!cb1.have_result()) { |
2141 EXPECT_EQ(net::ERR_CACHE_OPERATION_NOT_SUPPORTED, | 2254 EXPECT_EQ(net::ERR_CACHE_OPERATION_NOT_SUPPORTED, |
2142 entry->ReadSparseData(offset, buf, kSize, | 2255 entry->ReadSparseData( |
2143 net::CompletionCallback())); | 2256 offset, buf.get(), kSize, net::CompletionCallback())); |
2144 EXPECT_EQ(net::ERR_CACHE_OPERATION_NOT_SUPPORTED, | 2257 EXPECT_EQ(net::ERR_CACHE_OPERATION_NOT_SUPPORTED, |
2145 entry->WriteSparseData(offset, buf, kSize, | 2258 entry->WriteSparseData( |
2146 net::CompletionCallback())); | 2259 offset, buf.get(), kSize, net::CompletionCallback())); |
2147 } | 2260 } |
2148 | 2261 |
2149 // Now see if we receive all notifications. Note that we should not be able | 2262 // Now see if we receive all notifications. Note that we should not be able |
2150 // to write everything (unless the timing of the system is really weird). | 2263 // to write everything (unless the timing of the system is really weird). |
2151 rv = cb1.WaitForResult(); | 2264 rv = cb1.WaitForResult(); |
2152 EXPECT_TRUE(rv == 4096 || rv == kSize); | 2265 EXPECT_TRUE(rv == 4096 || rv == kSize); |
2153 EXPECT_EQ(net::OK, cb2.WaitForResult()); | 2266 EXPECT_EQ(net::OK, cb2.WaitForResult()); |
2154 EXPECT_EQ(net::OK, cb3.WaitForResult()); | 2267 EXPECT_EQ(net::OK, cb3.WaitForResult()); |
2155 EXPECT_EQ(net::OK, cb4.WaitForResult()); | 2268 EXPECT_EQ(net::OK, cb4.WaitForResult()); |
2156 | 2269 |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2304 | 2417 |
2305 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 2418 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
2306 disk_cache::Entry* null = NULL; | 2419 disk_cache::Entry* null = NULL; |
2307 EXPECT_NE(null, entry); | 2420 EXPECT_NE(null, entry); |
2308 | 2421 |
2309 const std::string data = "this is very good data"; | 2422 const std::string data = "this is very good data"; |
2310 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(data.size())); | 2423 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(data.size())); |
2311 std::copy(data.begin(), data.end(), buffer->data()); | 2424 std::copy(data.begin(), data.end(), buffer->data()); |
2312 | 2425 |
2313 ASSERT_EQ(implicit_cast<int>(data.size()), | 2426 ASSERT_EQ(implicit_cast<int>(data.size()), |
2314 WriteData(entry, 0, 0, buffer, data.size(), false)); | 2427 WriteData(entry, 0, 0, buffer.get(), data.size(), false)); |
2315 entry->Close(); | 2428 entry->Close(); |
2316 entry = NULL; | 2429 entry = NULL; |
2317 | 2430 |
2318 // Corrupt the data. | 2431 // Corrupt the data. |
2319 base::FilePath entry_file0_path = cache_path_.AppendASCII( | 2432 base::FilePath entry_file0_path = cache_path_.AppendASCII( |
2320 disk_cache::simple_util::GetFilenameFromKeyAndIndex(key, 0)); | 2433 disk_cache::simple_util::GetFilenameFromKeyAndIndex(key, 0)); |
2321 int flags = base::PLATFORM_FILE_WRITE | base::PLATFORM_FILE_OPEN; | 2434 int flags = base::PLATFORM_FILE_WRITE | base::PLATFORM_FILE_OPEN; |
2322 base::PlatformFile entry_file0 = | 2435 base::PlatformFile entry_file0 = |
2323 base::CreatePlatformFile(entry_file0_path, flags, NULL, NULL); | 2436 base::CreatePlatformFile(entry_file0_path, flags, NULL, NULL); |
2324 ASSERT_NE(base::kInvalidPlatformFileValue, entry_file0); | 2437 ASSERT_NE(base::kInvalidPlatformFileValue, entry_file0); |
(...skipping 18 matching lines...) Expand all Loading... |
2343 | 2456 |
2344 disk_cache::Entry* entry = NULL; | 2457 disk_cache::Entry* entry = NULL; |
2345 | 2458 |
2346 // Open the entry. | 2459 // Open the entry. |
2347 EXPECT_EQ(net::OK, OpenEntry(key, &entry)); | 2460 EXPECT_EQ(net::OK, OpenEntry(key, &entry)); |
2348 | 2461 |
2349 const int kReadBufferSize = 200; | 2462 const int kReadBufferSize = 200; |
2350 DCHECK_GE(kReadBufferSize, entry->GetDataSize(0)); | 2463 DCHECK_GE(kReadBufferSize, entry->GetDataSize(0)); |
2351 scoped_refptr<net::IOBuffer> read_buffer(new net::IOBuffer(kReadBufferSize)); | 2464 scoped_refptr<net::IOBuffer> read_buffer(new net::IOBuffer(kReadBufferSize)); |
2352 EXPECT_EQ(net::ERR_CACHE_CHECKSUM_MISMATCH, | 2465 EXPECT_EQ(net::ERR_CACHE_CHECKSUM_MISMATCH, |
2353 ReadData(entry, 0, 0, read_buffer, kReadBufferSize)); | 2466 ReadData(entry, 0, 0, read_buffer.get(), kReadBufferSize)); |
2354 | 2467 |
2355 entry->Close(); | 2468 entry->Close(); |
2356 } | 2469 } |
2357 | 2470 |
2358 // Tests that an entry that has had an IO error occur can still be Doomed(). | 2471 // Tests that an entry that has had an IO error occur can still be Doomed(). |
2359 TEST_F(DiskCacheEntryTest, SimpleCacheErrorThenDoom) { | 2472 TEST_F(DiskCacheEntryTest, SimpleCacheErrorThenDoom) { |
2360 SetSimpleCacheMode(); | 2473 SetSimpleCacheMode(); |
2361 InitCache(); | 2474 InitCache(); |
2362 | 2475 |
2363 const char key[] = "the first key"; | 2476 const char key[] = "the first key"; |
2364 SimpleCacheMakeBadChecksumEntry(key); | 2477 SimpleCacheMakeBadChecksumEntry(key); |
2365 | 2478 |
2366 disk_cache::Entry* entry = NULL; | 2479 disk_cache::Entry* entry = NULL; |
2367 | 2480 |
2368 // Open the entry, forcing an IO error. | 2481 // Open the entry, forcing an IO error. |
2369 EXPECT_EQ(net::OK, OpenEntry(key, &entry)); | 2482 EXPECT_EQ(net::OK, OpenEntry(key, &entry)); |
2370 | 2483 |
2371 const int kReadBufferSize = 200; | 2484 const int kReadBufferSize = 200; |
2372 DCHECK_GE(kReadBufferSize, entry->GetDataSize(0)); | 2485 DCHECK_GE(kReadBufferSize, entry->GetDataSize(0)); |
2373 scoped_refptr<net::IOBuffer> read_buffer(new net::IOBuffer(kReadBufferSize)); | 2486 scoped_refptr<net::IOBuffer> read_buffer(new net::IOBuffer(kReadBufferSize)); |
2374 EXPECT_EQ(net::ERR_CACHE_CHECKSUM_MISMATCH, | 2487 EXPECT_EQ(net::ERR_CACHE_CHECKSUM_MISMATCH, |
2375 ReadData(entry, 0, 0, read_buffer, kReadBufferSize)); | 2488 ReadData(entry, 0, 0, read_buffer.get(), kReadBufferSize)); |
2376 | 2489 |
2377 entry->Doom(); // Should not crash. | 2490 entry->Doom(); // Should not crash. |
2378 entry->Close(); | 2491 entry->Close(); |
2379 } | 2492 } |
2380 | 2493 |
2381 bool TruncatePath(const base::FilePath& file_path, int64 length) { | 2494 bool TruncatePath(const base::FilePath& file_path, int64 length) { |
2382 const int flags = base::PLATFORM_FILE_WRITE | base::PLATFORM_FILE_OPEN; | 2495 const int flags = base::PLATFORM_FILE_WRITE | base::PLATFORM_FILE_OPEN; |
2383 base::PlatformFile file = | 2496 base::PlatformFile file = |
2384 base::CreatePlatformFile(file_path, flags, NULL, NULL); | 2497 base::CreatePlatformFile(file_path, flags, NULL, NULL); |
2385 if (base::kInvalidPlatformFileValue == file) | 2498 if (base::kInvalidPlatformFileValue == file) |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2450 // Create is optimistic, must return OK. | 2563 // Create is optimistic, must return OK. |
2451 ASSERT_EQ(net::OK, | 2564 ASSERT_EQ(net::OK, |
2452 cache_->CreateEntry(key, &entry, | 2565 cache_->CreateEntry(key, &entry, |
2453 base::Bind(&CallbackTest::Run, | 2566 base::Bind(&CallbackTest::Run, |
2454 base::Unretained(&callback1)))); | 2567 base::Unretained(&callback1)))); |
2455 EXPECT_NE(null, entry); | 2568 EXPECT_NE(null, entry); |
2456 | 2569 |
2457 // This write may or may not be optimistic (it depends if the previous | 2570 // This write may or may not be optimistic (it depends if the previous |
2458 // optimistic create already finished by the time we call the write here). | 2571 // optimistic create already finished by the time we call the write here). |
2459 int ret = entry->WriteData( | 2572 int ret = entry->WriteData( |
2460 0, 0, buffer1, kSize1, | 2573 0, |
2461 base::Bind(&CallbackTest::Run, base::Unretained(&callback2)), false); | 2574 0, |
| 2575 buffer1.get(), |
| 2576 kSize1, |
| 2577 base::Bind(&CallbackTest::Run, base::Unretained(&callback2)), |
| 2578 false); |
2462 EXPECT_TRUE(kSize1 == ret || net::ERR_IO_PENDING == ret); | 2579 EXPECT_TRUE(kSize1 == ret || net::ERR_IO_PENDING == ret); |
2463 if (net::ERR_IO_PENDING == ret) | 2580 if (net::ERR_IO_PENDING == ret) |
2464 expected++; | 2581 expected++; |
2465 | 2582 |
2466 // This Read must not be optimistic, since we don't support that yet. | 2583 // This Read must not be optimistic, since we don't support that yet. |
2467 EXPECT_EQ(net::ERR_IO_PENDING, entry->ReadData( | 2584 EXPECT_EQ(net::ERR_IO_PENDING, |
2468 0, 0, buffer1_read, kSize1, | 2585 entry->ReadData( |
2469 base::Bind(&CallbackTest::Run, base::Unretained(&callback3)))); | 2586 0, |
| 2587 0, |
| 2588 buffer1_read.get(), |
| 2589 kSize1, |
| 2590 base::Bind(&CallbackTest::Run, base::Unretained(&callback3)))); |
2470 expected++; | 2591 expected++; |
2471 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 2592 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
2472 EXPECT_EQ(0, memcmp(buffer1->data(), buffer1_read->data(), kSize1)); | 2593 EXPECT_EQ(0, memcmp(buffer1->data(), buffer1_read->data(), kSize1)); |
2473 | 2594 |
2474 // At this point after waiting, the pending operations queue on the entry | 2595 // At this point after waiting, the pending operations queue on the entry |
2475 // should be empty, so the next Write operation must run as optimistic. | 2596 // should be empty, so the next Write operation must run as optimistic. |
2476 EXPECT_EQ(kSize2, | 2597 EXPECT_EQ(kSize2, |
2477 entry->WriteData( | 2598 entry->WriteData( |
2478 0, 0, buffer2, kSize2, | 2599 0, |
2479 base::Bind(&CallbackTest::Run, | 2600 0, |
2480 base::Unretained(&callback4)), false)); | 2601 buffer2.get(), |
| 2602 kSize2, |
| 2603 base::Bind(&CallbackTest::Run, base::Unretained(&callback4)), |
| 2604 false)); |
2481 | 2605 |
2482 // Lets do another read so we block until both the write and the read | 2606 // Lets do another read so we block until both the write and the read |
2483 // operation finishes and we can then test for HasOneRef() below. | 2607 // operation finishes and we can then test for HasOneRef() below. |
2484 EXPECT_EQ(net::ERR_IO_PENDING, entry->ReadData( | 2608 EXPECT_EQ(net::ERR_IO_PENDING, |
2485 0, 0, buffer2_read, kSize2, | 2609 entry->ReadData( |
2486 base::Bind(&CallbackTest::Run, base::Unretained(&callback5)))); | 2610 0, |
| 2611 0, |
| 2612 buffer2_read.get(), |
| 2613 kSize2, |
| 2614 base::Bind(&CallbackTest::Run, base::Unretained(&callback5)))); |
2487 expected++; | 2615 expected++; |
2488 | 2616 |
2489 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 2617 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
2490 EXPECT_EQ(0, memcmp(buffer2->data(), buffer2_read->data(), kSize2)); | 2618 EXPECT_EQ(0, memcmp(buffer2->data(), buffer2_read->data(), kSize2)); |
2491 | 2619 |
2492 // Check that we are not leaking. | 2620 // Check that we are not leaking. |
2493 EXPECT_NE(entry, null); | 2621 EXPECT_NE(entry, null); |
2494 EXPECT_TRUE( | 2622 EXPECT_TRUE( |
2495 static_cast<disk_cache::SimpleEntryImpl*>(entry)->HasOneRef()); | 2623 static_cast<disk_cache::SimpleEntryImpl*>(entry)->HasOneRef()); |
2496 entry->Close(); | 2624 entry->Close(); |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2579 CacheTestFillBuffer(buffer1->data(), kSize1, false); | 2707 CacheTestFillBuffer(buffer1->data(), kSize1, false); |
2580 disk_cache::Entry* entry = NULL; | 2708 disk_cache::Entry* entry = NULL; |
2581 | 2709 |
2582 ASSERT_EQ(net::OK, | 2710 ASSERT_EQ(net::OK, |
2583 cache_->CreateEntry(key, &entry, net::CompletionCallback())); | 2711 cache_->CreateEntry(key, &entry, net::CompletionCallback())); |
2584 EXPECT_NE(null, entry); | 2712 EXPECT_NE(null, entry); |
2585 entry->Close(); | 2713 entry->Close(); |
2586 | 2714 |
2587 // Lets do a Write so we block until both the Close and the Write | 2715 // Lets do a Write so we block until both the Close and the Write |
2588 // operation finishes. Write must fail since we are writing in a closed entry. | 2716 // operation finishes. Write must fail since we are writing in a closed entry. |
2589 EXPECT_EQ(net::ERR_IO_PENDING, entry->WriteData( | 2717 EXPECT_EQ( |
2590 0, 0, buffer1, kSize1, cb.callback(), false)); | 2718 net::ERR_IO_PENDING, |
| 2719 entry->WriteData(0, 0, buffer1.get(), kSize1, cb.callback(), false)); |
2591 EXPECT_EQ(net::ERR_FAILED, cb.GetResult(net::ERR_IO_PENDING)); | 2720 EXPECT_EQ(net::ERR_FAILED, cb.GetResult(net::ERR_IO_PENDING)); |
2592 | 2721 |
2593 // Finish running the pending tasks so that we fully complete the close | 2722 // Finish running the pending tasks so that we fully complete the close |
2594 // operation and destroy the entry object. | 2723 // operation and destroy the entry object. |
2595 base::MessageLoop::current()->RunUntilIdle(); | 2724 base::MessageLoop::current()->RunUntilIdle(); |
2596 | 2725 |
2597 // At this point the |entry| must have been destroyed, and called | 2726 // At this point the |entry| must have been destroyed, and called |
2598 // RemoveSelfFromBackend(). | 2727 // RemoveSelfFromBackend(). |
2599 disk_cache::Entry* entry2 = NULL; | 2728 disk_cache::Entry* entry2 = NULL; |
2600 EXPECT_EQ(net::ERR_IO_PENDING, | 2729 EXPECT_EQ(net::ERR_IO_PENDING, |
2601 cache_->OpenEntry(key, &entry2, cb.callback())); | 2730 cache_->OpenEntry(key, &entry2, cb.callback())); |
2602 EXPECT_EQ(net::OK, cb.GetResult(net::ERR_IO_PENDING)); | 2731 EXPECT_EQ(net::OK, cb.GetResult(net::ERR_IO_PENDING)); |
2603 EXPECT_NE(null, entry2); | 2732 EXPECT_NE(null, entry2); |
2604 | 2733 |
2605 disk_cache::Entry* entry3 = NULL; | 2734 disk_cache::Entry* entry3 = NULL; |
2606 EXPECT_EQ(net::ERR_IO_PENDING, | 2735 EXPECT_EQ(net::ERR_IO_PENDING, |
2607 cache_->OpenEntry(key, &entry3, cb.callback())); | 2736 cache_->OpenEntry(key, &entry3, cb.callback())); |
2608 EXPECT_EQ(net::OK, cb.GetResult(net::ERR_IO_PENDING)); | 2737 EXPECT_EQ(net::OK, cb.GetResult(net::ERR_IO_PENDING)); |
2609 EXPECT_NE(null, entry3); | 2738 EXPECT_NE(null, entry3); |
2610 EXPECT_EQ(entry2, entry3); | 2739 EXPECT_EQ(entry2, entry3); |
2611 entry3->Close(); | 2740 entry3->Close(); |
2612 | 2741 |
2613 // The previous Close doesn't actually closes the entry since we opened it | 2742 // The previous Close doesn't actually closes the entry since we opened it |
2614 // twice, so the next Write operation must succeed and it must be able to | 2743 // twice, so the next Write operation must succeed and it must be able to |
2615 // perform it optimistically, since there is no operation running on this | 2744 // perform it optimistically, since there is no operation running on this |
2616 // entry. | 2745 // entry. |
2617 EXPECT_EQ(kSize1, entry2->WriteData( | 2746 EXPECT_EQ(kSize1, |
2618 0, 0, buffer1, kSize1, net::CompletionCallback(), false)); | 2747 entry2->WriteData( |
| 2748 0, 0, buffer1.get(), kSize1, net::CompletionCallback(), false)); |
2619 | 2749 |
2620 // Lets do another read so we block until both the write and the read | 2750 // Lets do another read so we block until both the write and the read |
2621 // operation finishes and we can then test for HasOneRef() below. | 2751 // operation finishes and we can then test for HasOneRef() below. |
2622 EXPECT_EQ(net::ERR_IO_PENDING, entry2->ReadData( | 2752 EXPECT_EQ(net::ERR_IO_PENDING, |
2623 0, 0, buffer1, kSize1, cb.callback())); | 2753 entry2->ReadData(0, 0, buffer1.get(), kSize1, cb.callback())); |
2624 EXPECT_EQ(kSize1, cb.GetResult(net::ERR_IO_PENDING)); | 2754 EXPECT_EQ(kSize1, cb.GetResult(net::ERR_IO_PENDING)); |
2625 | 2755 |
2626 // Check that we are not leaking. | 2756 // Check that we are not leaking. |
2627 EXPECT_TRUE( | 2757 EXPECT_TRUE( |
2628 static_cast<disk_cache::SimpleEntryImpl*>(entry2)->HasOneRef()); | 2758 static_cast<disk_cache::SimpleEntryImpl*>(entry2)->HasOneRef()); |
2629 entry2->Close(); | 2759 entry2->Close(); |
2630 } | 2760 } |
2631 | 2761 |
2632 // This test is flaky because of the race of Create followed by a Doom. | 2762 // This test is flaky because of the race of Create followed by a Doom. |
2633 // See test SimpleCacheCreateDoomRace. | 2763 // See test SimpleCacheCreateDoomRace. |
2634 TEST_F(DiskCacheEntryTest, DISABLED_SimpleCacheOptimistic5) { | 2764 TEST_F(DiskCacheEntryTest, DISABLED_SimpleCacheOptimistic5) { |
2635 // Test sequence: | 2765 // Test sequence: |
2636 // Create, Doom, Write, Read, Close. | 2766 // Create, Doom, Write, Read, Close. |
2637 SetSimpleCacheMode(); | 2767 SetSimpleCacheMode(); |
2638 InitCache(); | 2768 InitCache(); |
2639 disk_cache::Entry* null = NULL; | 2769 disk_cache::Entry* null = NULL; |
2640 const char key[] = "the first key"; | 2770 const char key[] = "the first key"; |
2641 | 2771 |
2642 net::TestCompletionCallback cb; | 2772 net::TestCompletionCallback cb; |
2643 const int kSize1 = 10; | 2773 const int kSize1 = 10; |
2644 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); | 2774 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); |
2645 CacheTestFillBuffer(buffer1->data(), kSize1, false); | 2775 CacheTestFillBuffer(buffer1->data(), kSize1, false); |
2646 disk_cache::Entry* entry = NULL; | 2776 disk_cache::Entry* entry = NULL; |
2647 | 2777 |
2648 ASSERT_EQ(net::OK, | 2778 ASSERT_EQ(net::OK, |
2649 cache_->CreateEntry(key, &entry, net::CompletionCallback())); | 2779 cache_->CreateEntry(key, &entry, net::CompletionCallback())); |
2650 EXPECT_NE(null, entry); | 2780 EXPECT_NE(null, entry); |
2651 entry->Doom(); | 2781 entry->Doom(); |
2652 | 2782 |
2653 EXPECT_EQ(net::ERR_IO_PENDING, entry->WriteData( | 2783 EXPECT_EQ( |
2654 0, 0, buffer1, kSize1, cb.callback(), false)); | 2784 net::ERR_IO_PENDING, |
| 2785 entry->WriteData(0, 0, buffer1.get(), kSize1, cb.callback(), false)); |
2655 EXPECT_EQ(kSize1, cb.GetResult(net::ERR_IO_PENDING)); | 2786 EXPECT_EQ(kSize1, cb.GetResult(net::ERR_IO_PENDING)); |
2656 | 2787 |
2657 EXPECT_EQ(net::ERR_IO_PENDING, entry->ReadData( | 2788 EXPECT_EQ(net::ERR_IO_PENDING, |
2658 0, 0, buffer1, kSize1, cb.callback())); | 2789 entry->ReadData(0, 0, buffer1.get(), kSize1, cb.callback())); |
2659 EXPECT_EQ(kSize1, cb.GetResult(net::ERR_IO_PENDING)); | 2790 EXPECT_EQ(kSize1, cb.GetResult(net::ERR_IO_PENDING)); |
2660 | 2791 |
2661 // Check that we are not leaking. | 2792 // Check that we are not leaking. |
2662 EXPECT_TRUE( | 2793 EXPECT_TRUE( |
2663 static_cast<disk_cache::SimpleEntryImpl*>(entry)->HasOneRef()); | 2794 static_cast<disk_cache::SimpleEntryImpl*>(entry)->HasOneRef()); |
2664 entry->Close(); | 2795 entry->Close(); |
2665 } | 2796 } |
2666 | 2797 |
2667 TEST_F(DiskCacheEntryTest, SimpleCacheOptimistic6) { | 2798 TEST_F(DiskCacheEntryTest, SimpleCacheOptimistic6) { |
2668 // Test sequence: | 2799 // Test sequence: |
2669 // Create, Write, Doom, Doom, Read, Doom, Close. | 2800 // Create, Write, Doom, Doom, Read, Doom, Close. |
2670 SetSimpleCacheMode(); | 2801 SetSimpleCacheMode(); |
2671 InitCache(); | 2802 InitCache(); |
2672 disk_cache::Entry* null = NULL; | 2803 disk_cache::Entry* null = NULL; |
2673 const char key[] = "the first key"; | 2804 const char key[] = "the first key"; |
2674 | 2805 |
2675 net::TestCompletionCallback cb; | 2806 net::TestCompletionCallback cb; |
2676 const int kSize1 = 10; | 2807 const int kSize1 = 10; |
2677 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); | 2808 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); |
2678 scoped_refptr<net::IOBuffer> buffer1_read(new net::IOBuffer(kSize1)); | 2809 scoped_refptr<net::IOBuffer> buffer1_read(new net::IOBuffer(kSize1)); |
2679 CacheTestFillBuffer(buffer1->data(), kSize1, false); | 2810 CacheTestFillBuffer(buffer1->data(), kSize1, false); |
2680 disk_cache::Entry* entry = NULL; | 2811 disk_cache::Entry* entry = NULL; |
2681 | 2812 |
2682 ASSERT_EQ(net::OK, | 2813 ASSERT_EQ(net::OK, |
2683 cache_->CreateEntry(key, &entry, net::CompletionCallback())); | 2814 cache_->CreateEntry(key, &entry, net::CompletionCallback())); |
2684 EXPECT_NE(null, entry); | 2815 EXPECT_NE(null, entry); |
2685 | 2816 |
2686 EXPECT_EQ(net::ERR_IO_PENDING, entry->WriteData( | 2817 EXPECT_EQ( |
2687 0, 0, buffer1, kSize1, cb.callback(), false)); | 2818 net::ERR_IO_PENDING, |
| 2819 entry->WriteData(0, 0, buffer1.get(), kSize1, cb.callback(), false)); |
2688 EXPECT_EQ(kSize1, cb.GetResult(net::ERR_IO_PENDING)); | 2820 EXPECT_EQ(kSize1, cb.GetResult(net::ERR_IO_PENDING)); |
2689 | 2821 |
2690 entry->Doom(); | 2822 entry->Doom(); |
2691 entry->Doom(); | 2823 entry->Doom(); |
2692 | 2824 |
2693 // This Read must not be optimistic, since we don't support that yet. | 2825 // This Read must not be optimistic, since we don't support that yet. |
2694 EXPECT_EQ(net::ERR_IO_PENDING, entry->ReadData( | 2826 EXPECT_EQ(net::ERR_IO_PENDING, |
2695 0, 0, buffer1_read, kSize1, cb.callback())); | 2827 entry->ReadData(0, 0, buffer1_read.get(), kSize1, cb.callback())); |
2696 EXPECT_EQ(kSize1, cb.GetResult(net::ERR_IO_PENDING)); | 2828 EXPECT_EQ(kSize1, cb.GetResult(net::ERR_IO_PENDING)); |
2697 EXPECT_EQ(0, memcmp(buffer1->data(), buffer1_read->data(), kSize1)); | 2829 EXPECT_EQ(0, memcmp(buffer1->data(), buffer1_read->data(), kSize1)); |
2698 | 2830 |
2699 entry->Doom(); | 2831 entry->Doom(); |
2700 | 2832 |
2701 // Check that we are not leaking. | 2833 // Check that we are not leaking. |
2702 EXPECT_TRUE( | 2834 EXPECT_TRUE( |
2703 static_cast<disk_cache::SimpleEntryImpl*>(entry)->HasOneRef()); | 2835 static_cast<disk_cache::SimpleEntryImpl*>(entry)->HasOneRef()); |
2704 entry->Close(); | 2836 entry->Close(); |
2705 } | 2837 } |
(...skipping 15 matching lines...) Expand all Loading... |
2721 ASSERT_EQ(net::OK, | 2853 ASSERT_EQ(net::OK, |
2722 cache_->CreateEntry(key, &entry, net::CompletionCallback())); | 2854 cache_->CreateEntry(key, &entry, net::CompletionCallback())); |
2723 EXPECT_NE(null, entry); | 2855 EXPECT_NE(null, entry); |
2724 | 2856 |
2725 cache_->DoomEntry(key, cb.callback()); | 2857 cache_->DoomEntry(key, cb.callback()); |
2726 EXPECT_EQ(net::OK, cb.GetResult(net::ERR_IO_PENDING)); | 2858 EXPECT_EQ(net::OK, cb.GetResult(net::ERR_IO_PENDING)); |
2727 | 2859 |
2728 // Lets do a Write so we block until all operations are done, so we can check | 2860 // Lets do a Write so we block until all operations are done, so we can check |
2729 // the HasOneRef() below. This call can't be optimistic and we are checking | 2861 // the HasOneRef() below. This call can't be optimistic and we are checking |
2730 // that here. | 2862 // that here. |
2731 EXPECT_EQ(net::ERR_IO_PENDING, entry->WriteData( | 2863 EXPECT_EQ( |
2732 0, 0, buffer1, kSize1, cb.callback(), false)); | 2864 net::ERR_IO_PENDING, |
| 2865 entry->WriteData(0, 0, buffer1.get(), kSize1, cb.callback(), false)); |
2733 EXPECT_EQ(kSize1, cb.GetResult(net::ERR_IO_PENDING)); | 2866 EXPECT_EQ(kSize1, cb.GetResult(net::ERR_IO_PENDING)); |
2734 | 2867 |
2735 // Check that we are not leaking. | 2868 // Check that we are not leaking. |
2736 EXPECT_TRUE( | 2869 EXPECT_TRUE( |
2737 static_cast<disk_cache::SimpleEntryImpl*>(entry)->HasOneRef()); | 2870 static_cast<disk_cache::SimpleEntryImpl*>(entry)->HasOneRef()); |
2738 entry->Close(); | 2871 entry->Close(); |
2739 | 2872 |
2740 // Finish running the pending tasks so that we fully complete the close | 2873 // Finish running the pending tasks so that we fully complete the close |
2741 // operation and destroy the entry object. | 2874 // operation and destroy the entry object. |
2742 base::MessageLoop::current()->RunUntilIdle(); | 2875 base::MessageLoop::current()->RunUntilIdle(); |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2793 const int kNumExtraEntries = 12; | 2926 const int kNumExtraEntries = 12; |
2794 SetSimpleCacheMode(); | 2927 SetSimpleCacheMode(); |
2795 SetMaxSize(kMaxSize); | 2928 SetMaxSize(kMaxSize); |
2796 InitCache(); | 2929 InitCache(); |
2797 | 2930 |
2798 std::string key1("the first key"); | 2931 std::string key1("the first key"); |
2799 disk_cache::Entry* entry; | 2932 disk_cache::Entry* entry; |
2800 ASSERT_EQ(net::OK, CreateEntry(key1, &entry)); | 2933 ASSERT_EQ(net::OK, CreateEntry(key1, &entry)); |
2801 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kWriteSize)); | 2934 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kWriteSize)); |
2802 CacheTestFillBuffer(buffer->data(), kWriteSize, false); | 2935 CacheTestFillBuffer(buffer->data(), kWriteSize, false); |
2803 EXPECT_EQ(kWriteSize, WriteData(entry, 0, 0, buffer, kWriteSize, false)); | 2936 EXPECT_EQ(kWriteSize, |
| 2937 WriteData(entry, 0, 0, buffer.get(), kWriteSize, false)); |
2804 entry->Close(); | 2938 entry->Close(); |
2805 | 2939 |
2806 std::string key2("the key prefix"); | 2940 std::string key2("the key prefix"); |
2807 for (int i = 0; i < kNumExtraEntries; i++) { | 2941 for (int i = 0; i < kNumExtraEntries; i++) { |
2808 ASSERT_EQ(net::OK, CreateEntry(key2 + base::StringPrintf("%d", i), &entry)); | 2942 ASSERT_EQ(net::OK, CreateEntry(key2 + base::StringPrintf("%d", i), &entry)); |
2809 EXPECT_EQ(kWriteSize, WriteData(entry, 0, 0, buffer, kWriteSize, false)); | 2943 EXPECT_EQ(kWriteSize, |
| 2944 WriteData(entry, 0, 0, buffer.get(), kWriteSize, false)); |
2810 entry->Close(); | 2945 entry->Close(); |
2811 } | 2946 } |
2812 | 2947 |
2813 // TODO(pasko): Find a way to wait for the eviction task(s) to finish by using | 2948 // TODO(pasko): Find a way to wait for the eviction task(s) to finish by using |
2814 // the internal knowledge about |SimpleBackendImpl|. | 2949 // the internal knowledge about |SimpleBackendImpl|. |
2815 ASSERT_NE(net::OK, OpenEntry(key1, &entry)) | 2950 ASSERT_NE(net::OK, OpenEntry(key1, &entry)) |
2816 << "Should have evicted the old entry"; | 2951 << "Should have evicted the old entry"; |
2817 for (int i = 0; i < 2; i++) { | 2952 for (int i = 0; i < 2; i++) { |
2818 int entry_no = kNumExtraEntries - i - 1; | 2953 int entry_no = kNumExtraEntries - i - 1; |
2819 // Generally there is no guarantee that at this point the backround eviction | 2954 // Generally there is no guarantee that at this point the backround eviction |
(...skipping 16 matching lines...) Expand all Loading... |
2836 const char key[] = "the first key"; | 2971 const char key[] = "the first key"; |
2837 | 2972 |
2838 const int kBufferSize = 1024; | 2973 const int kBufferSize = 1024; |
2839 scoped_refptr<net::IOBuffer> write_buffer(new net::IOBuffer(kBufferSize)); | 2974 scoped_refptr<net::IOBuffer> write_buffer(new net::IOBuffer(kBufferSize)); |
2840 CacheTestFillBuffer(write_buffer->data(), kBufferSize, false); | 2975 CacheTestFillBuffer(write_buffer->data(), kBufferSize, false); |
2841 | 2976 |
2842 disk_cache::Entry* entry = NULL; | 2977 disk_cache::Entry* entry = NULL; |
2843 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 2978 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
2844 | 2979 |
2845 EXPECT_EQ(kBufferSize, | 2980 EXPECT_EQ(kBufferSize, |
2846 WriteData(entry, 0, 0, write_buffer, kBufferSize, false)); | 2981 WriteData(entry, 0, 0, write_buffer.get(), kBufferSize, false)); |
2847 entry->Close(); | 2982 entry->Close(); |
2848 entry = NULL; | 2983 entry = NULL; |
2849 | 2984 |
2850 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 2985 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
2851 | 2986 |
2852 MessageLoopHelper helper; | 2987 MessageLoopHelper helper; |
2853 int expected = 0; | 2988 int expected = 0; |
2854 | 2989 |
2855 // Make a short read. | 2990 // Make a short read. |
2856 const int kReadBufferSize = 512; | 2991 const int kReadBufferSize = 512; |
2857 scoped_refptr<net::IOBuffer> read_buffer(new net::IOBuffer(kReadBufferSize)); | 2992 scoped_refptr<net::IOBuffer> read_buffer(new net::IOBuffer(kReadBufferSize)); |
2858 CallbackTest read_callback(&helper, false); | 2993 CallbackTest read_callback(&helper, false); |
2859 EXPECT_EQ(net::ERR_IO_PENDING, | 2994 EXPECT_EQ(net::ERR_IO_PENDING, |
2860 entry->ReadData(0, 0, read_buffer, kReadBufferSize, | 2995 entry->ReadData(0, |
| 2996 0, |
| 2997 read_buffer.get(), |
| 2998 kReadBufferSize, |
2861 base::Bind(&CallbackTest::Run, | 2999 base::Bind(&CallbackTest::Run, |
2862 base::Unretained(&read_callback)))); | 3000 base::Unretained(&read_callback)))); |
2863 ++expected; | 3001 ++expected; |
2864 | 3002 |
2865 // Truncate the entry to the length of that read. | 3003 // Truncate the entry to the length of that read. |
2866 scoped_refptr<net::IOBuffer> | 3004 scoped_refptr<net::IOBuffer> |
2867 truncate_buffer(new net::IOBuffer(kReadBufferSize)); | 3005 truncate_buffer(new net::IOBuffer(kReadBufferSize)); |
2868 CacheTestFillBuffer(truncate_buffer->data(), kReadBufferSize, false); | 3006 CacheTestFillBuffer(truncate_buffer->data(), kReadBufferSize, false); |
2869 CallbackTest truncate_callback(&helper, false); | 3007 CallbackTest truncate_callback(&helper, false); |
2870 EXPECT_EQ(net::ERR_IO_PENDING, | 3008 EXPECT_EQ(net::ERR_IO_PENDING, |
2871 entry->WriteData(0, 0, truncate_buffer, kReadBufferSize, | 3009 entry->WriteData(0, |
| 3010 0, |
| 3011 truncate_buffer.get(), |
| 3012 kReadBufferSize, |
2872 base::Bind(&CallbackTest::Run, | 3013 base::Bind(&CallbackTest::Run, |
2873 base::Unretained(&truncate_callback)), | 3014 base::Unretained(&truncate_callback)), |
2874 true)); | 3015 true)); |
2875 ++expected; | 3016 ++expected; |
2876 | 3017 |
2877 // Wait for both the read and truncation to finish, and confirm that both | 3018 // Wait for both the read and truncation to finish, and confirm that both |
2878 // succeeded. | 3019 // succeeded. |
2879 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 3020 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
2880 EXPECT_EQ(kReadBufferSize, read_callback.last_result()); | 3021 EXPECT_EQ(kReadBufferSize, read_callback.last_result()); |
2881 EXPECT_EQ(kReadBufferSize, truncate_callback.last_result()); | 3022 EXPECT_EQ(kReadBufferSize, truncate_callback.last_result()); |
(...skipping 16 matching lines...) Expand all Loading... |
2898 | 3039 |
2899 const int kBufferSize = 1024; | 3040 const int kBufferSize = 1024; |
2900 scoped_refptr<net::IOBuffer> write_buffer(new net::IOBuffer(kBufferSize)); | 3041 scoped_refptr<net::IOBuffer> write_buffer(new net::IOBuffer(kBufferSize)); |
2901 CacheTestFillBuffer(write_buffer->data(), kBufferSize, false); | 3042 CacheTestFillBuffer(write_buffer->data(), kBufferSize, false); |
2902 | 3043 |
2903 MessageLoopHelper helper; | 3044 MessageLoopHelper helper; |
2904 int expected = 0; | 3045 int expected = 0; |
2905 | 3046 |
2906 CallbackTest write_callback(&helper, false); | 3047 CallbackTest write_callback(&helper, false); |
2907 EXPECT_EQ(net::ERR_IO_PENDING, | 3048 EXPECT_EQ(net::ERR_IO_PENDING, |
2908 entry->WriteData(0, 0, write_buffer, kBufferSize, | 3049 entry->WriteData(0, |
| 3050 0, |
| 3051 write_buffer.get(), |
| 3052 kBufferSize, |
2909 base::Bind(&CallbackTest::Run, | 3053 base::Bind(&CallbackTest::Run, |
2910 base::Unretained(&write_callback)), | 3054 base::Unretained(&write_callback)), |
2911 true)); | 3055 true)); |
2912 ++expected; | 3056 ++expected; |
2913 | 3057 |
2914 scoped_refptr<net::IOBuffer> read_buffer(new net::IOBuffer(kBufferSize)); | 3058 scoped_refptr<net::IOBuffer> read_buffer(new net::IOBuffer(kBufferSize)); |
2915 CallbackTest read_callback(&helper, false); | 3059 CallbackTest read_callback(&helper, false); |
2916 EXPECT_EQ(net::ERR_IO_PENDING, | 3060 EXPECT_EQ(net::ERR_IO_PENDING, |
2917 entry->ReadData(0, 0, read_buffer, kBufferSize, | 3061 entry->ReadData(0, |
| 3062 0, |
| 3063 read_buffer.get(), |
| 3064 kBufferSize, |
2918 base::Bind(&CallbackTest::Run, | 3065 base::Bind(&CallbackTest::Run, |
2919 base::Unretained(&read_callback)))); | 3066 base::Unretained(&read_callback)))); |
2920 ++expected; | 3067 ++expected; |
2921 | 3068 |
2922 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 3069 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
2923 EXPECT_EQ(kBufferSize, write_callback.last_result()); | 3070 EXPECT_EQ(kBufferSize, write_callback.last_result()); |
2924 EXPECT_EQ(kBufferSize, read_callback.last_result()); | 3071 EXPECT_EQ(kBufferSize, read_callback.last_result()); |
2925 EXPECT_EQ(0, memcmp(write_buffer->data(), read_buffer->data(), kBufferSize)); | 3072 EXPECT_EQ(0, memcmp(write_buffer->data(), read_buffer->data(), kBufferSize)); |
2926 entry->Close(); | 3073 entry->Close(); |
2927 } | 3074 } |
(...skipping 11 matching lines...) Expand all Loading... |
2939 net::TestCompletionCallback cb2; | 3086 net::TestCompletionCallback cb2; |
2940 int rv1 = cache_->OpenEntry("key", &entry1, cb1.callback()); | 3087 int rv1 = cache_->OpenEntry("key", &entry1, cb1.callback()); |
2941 int rv2 = cache_->CreateEntry("key", &entry2, cb2.callback()); | 3088 int rv2 = cache_->CreateEntry("key", &entry2, cb2.callback()); |
2942 | 3089 |
2943 ASSERT_EQ(net::OK, cb2.GetResult(rv2)); | 3090 ASSERT_EQ(net::OK, cb2.GetResult(rv2)); |
2944 EXPECT_EQ(net::ERR_FAILED, cb1.GetResult(rv1)); | 3091 EXPECT_EQ(net::ERR_FAILED, cb1.GetResult(rv1)); |
2945 entry2->Close(); | 3092 entry2->Close(); |
2946 } | 3093 } |
2947 | 3094 |
2948 #endif // defined(OS_POSIX) | 3095 #endif // defined(OS_POSIX) |
OLD | NEW |