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

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

Issue 15829004: Update net/ to use scoped_refptr<T>::get() rather than implicit "operator T*" (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: license twerk Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/disk_cache/entry_impl.cc ('k') | net/disk_cache/file_posix.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/bind.h" 6 #include "base/bind.h"
7 #include "base/bind_helpers.h" 7 #include "base/bind_helpers.h"
8 #include "base/file_util.h" 8 #include "base/file_util.h"
9 #include "base/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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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)
OLDNEW
« no previous file with comments | « net/disk_cache/entry_impl.cc ('k') | net/disk_cache/file_posix.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698