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

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

Issue 20251: Extend the IOBuffer to the disk cache.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 10 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/base/io_buffer.h ('k') | net/disk_cache/disk_cache.h » ('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) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/file_util.h" 6 #include "base/file_util.h"
7 #include "base/path_service.h" 7 #include "base/path_service.h"
8 #include "base/platform_thread.h" 8 #include "base/platform_thread.h"
9 #include "base/string_util.h" 9 #include "base/string_util.h"
10 #include "net/base/io_buffer.h"
10 #include "net/base/net_errors.h" 11 #include "net/base/net_errors.h"
11 #include "net/disk_cache/backend_impl.h" 12 #include "net/disk_cache/backend_impl.h"
12 #include "net/disk_cache/disk_cache_test_base.h" 13 #include "net/disk_cache/disk_cache_test_base.h"
13 #include "net/disk_cache/disk_cache_test_util.h" 14 #include "net/disk_cache/disk_cache_test_util.h"
14 #include "net/disk_cache/mapped_file.h" 15 #include "net/disk_cache/mapped_file.h"
15 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
16 17
17 using base::Time; 18 using base::Time;
18 19
19 namespace { 20 namespace {
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 InitCache(); 203 InitCache();
203 BackendKeying(); 204 BackendKeying();
204 } 205 }
205 206
206 TEST_F(DiskCacheBackendTest, ExternalFiles) { 207 TEST_F(DiskCacheBackendTest, ExternalFiles) {
207 InitCache(); 208 InitCache();
208 // First, lets create a file on the folder. 209 // First, lets create a file on the folder.
209 std::wstring filename = GetCachePath(); 210 std::wstring filename = GetCachePath();
210 file_util::AppendToPath(&filename, L"f_000001"); 211 file_util::AppendToPath(&filename, L"f_000001");
211 212
212 const int kDataSize = 50; 213 const int kSize = 50;
213 char data[kDataSize]; 214 scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize);
214 CacheTestFillBuffer(data, kDataSize, false); 215 CacheTestFillBuffer(buffer1->data(), kSize, false);
215 ASSERT_EQ(kDataSize, file_util::WriteFile(filename, data, kDataSize)); 216 ASSERT_EQ(kSize, file_util::WriteFile(filename, buffer1->data(), kSize));
216 217
217 // Now let's create a file with the cache. 218 // Now let's create a file with the cache.
218 disk_cache::Entry* entry; 219 disk_cache::Entry* entry;
219 ASSERT_TRUE(cache_->CreateEntry("key", &entry)); 220 ASSERT_TRUE(cache_->CreateEntry("key", &entry));
220 ASSERT_EQ(0, entry->WriteData(0, 20000, data, 0, NULL, false)); 221 ASSERT_EQ(0, entry->WriteData(0, 20000, buffer1, 0, NULL, false));
221 entry->Close(); 222 entry->Close();
222 223
223 // And verify that the first file is still there. 224 // And verify that the first file is still there.
224 char buffer[kDataSize]; 225 scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize);
225 ASSERT_EQ(kDataSize, file_util::ReadFile(filename, buffer, kDataSize)); 226 ASSERT_EQ(kSize, file_util::ReadFile(filename, buffer2->data(), kSize));
226 EXPECT_EQ(0, memcmp(data, buffer, kDataSize)); 227 EXPECT_EQ(0, memcmp(buffer1->data(), buffer2->data(), kSize));
227 } 228 }
228 229
229 void DiskCacheBackendTest::BackendSetSize() { 230 void DiskCacheBackendTest::BackendSetSize() {
230 SetDirectMode(); 231 SetDirectMode();
231 const int cache_size = 0x10000; // 64 kB 232 const int cache_size = 0x10000; // 64 kB
232 SetMaxSize(cache_size); 233 SetMaxSize(cache_size);
233 InitCache(); 234 InitCache();
234 235
235 std::string first("some key"); 236 std::string first("some key");
236 std::string second("something else"); 237 std::string second("something else");
237 disk_cache::Entry* entry; 238 disk_cache::Entry* entry;
238 ASSERT_TRUE(cache_->CreateEntry(first, &entry)); 239 ASSERT_TRUE(cache_->CreateEntry(first, &entry));
239 240
240 char buffer[cache_size] = {0}; 241 scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(cache_size);
242 memset(buffer->data(), 0, cache_size);
241 EXPECT_EQ(cache_size / 10, entry->WriteData(0, 0, buffer, cache_size / 10, 243 EXPECT_EQ(cache_size / 10, entry->WriteData(0, 0, buffer, cache_size / 10,
242 NULL, false)) << "normal file"; 244 NULL, false)) << "normal file";
243 245
244 EXPECT_EQ(net::ERR_FAILED, entry->WriteData(1, 0, buffer, cache_size / 5, 246 EXPECT_EQ(net::ERR_FAILED, entry->WriteData(1, 0, buffer, cache_size / 5,
245 NULL, false)) << "file size above the limit"; 247 NULL, false)) << "file size above the limit";
246 248
247 // By doubling the total size, we make this file cacheable. 249 // By doubling the total size, we make this file cacheable.
248 SetMaxSize(cache_size * 2); 250 SetMaxSize(cache_size * 2);
249 EXPECT_EQ(cache_size / 5, entry->WriteData(1, 0, buffer, cache_size / 5, 251 EXPECT_EQ(cache_size / 5, entry->WriteData(1, 0, buffer, cache_size / 5,
250 NULL, false)); 252 NULL, false));
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
331 333
332 // Before looking for invalid entries, let's check a valid entry. 334 // Before looking for invalid entries, let's check a valid entry.
333 TEST_F(DiskCacheBackendTest, ValidEntry) { 335 TEST_F(DiskCacheBackendTest, ValidEntry) {
334 SetDirectMode(); 336 SetDirectMode();
335 InitCache(); 337 InitCache();
336 338
337 std::string key("Some key"); 339 std::string key("Some key");
338 disk_cache::Entry* entry1; 340 disk_cache::Entry* entry1;
339 ASSERT_TRUE(cache_->CreateEntry(key, &entry1)); 341 ASSERT_TRUE(cache_->CreateEntry(key, &entry1));
340 342
341 char data[] = "And the data to save"; 343 const int kSize = 50;
342 EXPECT_TRUE(sizeof(data) == entry1->WriteData(0, 0, data, sizeof(data), NULL, 344 scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize);
343 false)); 345 base::strlcpy(buffer1->data(), "And the data to save", kSize);
346 EXPECT_EQ(kSize, entry1->WriteData(0, 0, buffer1, kSize, NULL, false));
344 entry1->Close(); 347 entry1->Close();
345 SimulateCrash(); 348 SimulateCrash();
346 349
347 ASSERT_TRUE(cache_->OpenEntry(key, &entry1)); 350 ASSERT_TRUE(cache_->OpenEntry(key, &entry1));
348 351
349 char buffer[40]; 352 scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize);
350 memset(buffer, 0, sizeof(buffer)); 353 memset(buffer2->data(), 0, kSize);
351 EXPECT_TRUE(sizeof(data) == entry1->ReadData(0, 0, buffer, sizeof(data), 354 EXPECT_EQ(kSize, entry1->ReadData(0, 0, buffer2, kSize, NULL));
352 NULL));
353 entry1->Close(); 355 entry1->Close();
354 EXPECT_STREQ(data, buffer); 356 EXPECT_STREQ(buffer1->data(), buffer2->data());
355 } 357 }
356 358
357 // The same logic of the previous test (ValidEntry), but this time force the 359 // The same logic of the previous test (ValidEntry), but this time force the
358 // entry to be invalid, simulating a crash in the middle. 360 // entry to be invalid, simulating a crash in the middle.
359 // We'll be leaking memory from this test. 361 // We'll be leaking memory from this test.
360 TEST_F(DiskCacheBackendTest, InvalidEntry) { 362 TEST_F(DiskCacheBackendTest, InvalidEntry) {
361 // Use the implementation directly... we need to simulate a crash. 363 // Use the implementation directly... we need to simulate a crash.
362 SetDirectMode(); 364 SetDirectMode();
363 InitCache(); 365 InitCache();
364 366
365 std::string key("Some key"); 367 std::string key("Some key");
366 disk_cache::Entry* entry1; 368 disk_cache::Entry* entry1;
367 ASSERT_TRUE(cache_->CreateEntry(key, &entry1)); 369 ASSERT_TRUE(cache_->CreateEntry(key, &entry1));
368 370
369 char data[] = "And the data to save"; 371 const int kSize = 50;
370 EXPECT_TRUE(sizeof(data) == entry1->WriteData(0, 0, data, sizeof(data), NULL, 372 scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize);
371 false)); 373 base::strlcpy(buffer1->data(), "And the data to save", kSize);
374 EXPECT_EQ(kSize, entry1->WriteData(0, 0, buffer1, kSize, NULL, false));
372 SimulateCrash(); 375 SimulateCrash();
373 376
374 EXPECT_FALSE(cache_->OpenEntry(key, &entry1)); 377 EXPECT_FALSE(cache_->OpenEntry(key, &entry1));
375 EXPECT_EQ(0, cache_->GetEntryCount()); 378 EXPECT_EQ(0, cache_->GetEntryCount());
376 } 379 }
377 380
378 // Almost the same test, but this time crash the cache after reading an entry. 381 // Almost the same test, but this time crash the cache after reading an entry.
379 // We'll be leaking memory from this test. 382 // We'll be leaking memory from this test.
380 TEST_F(DiskCacheBackendTest, InvalidEntryRead) { 383 TEST_F(DiskCacheBackendTest, InvalidEntryRead) {
381 // Use the implementation directly... we need to simulate a crash. 384 // Use the implementation directly... we need to simulate a crash.
382 SetDirectMode(); 385 SetDirectMode();
383 InitCache(); 386 InitCache();
384 387
385 std::string key("Some key"); 388 std::string key("Some key");
386 disk_cache::Entry* entry1; 389 disk_cache::Entry* entry1;
387 ASSERT_TRUE(cache_->CreateEntry(key, &entry1)); 390 ASSERT_TRUE(cache_->CreateEntry(key, &entry1));
388 391
389 char data[] = "And the data to save"; 392 const int kSize = 50;
390 EXPECT_TRUE(sizeof(data) == entry1->WriteData(0, 0, data, sizeof(data), NULL, 393 scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize);
391 false)); 394 base::strlcpy(buffer1->data(), "And the data to save", kSize);
395 EXPECT_EQ(kSize, entry1->WriteData(0, 0, buffer1, kSize, NULL, false));
392 entry1->Close(); 396 entry1->Close();
393 ASSERT_TRUE(cache_->OpenEntry(key, &entry1)); 397 ASSERT_TRUE(cache_->OpenEntry(key, &entry1));
394 EXPECT_TRUE(sizeof(data) == entry1->ReadData(0, 0, data, sizeof(data), NULL)); 398 EXPECT_EQ(kSize, entry1->ReadData(0, 0, buffer1, kSize, NULL));
395 399
396 SimulateCrash(); 400 SimulateCrash();
397 401
398 EXPECT_FALSE(cache_->OpenEntry(key, &entry1)); 402 EXPECT_FALSE(cache_->OpenEntry(key, &entry1));
399 EXPECT_EQ(0, cache_->GetEntryCount()); 403 EXPECT_EQ(0, cache_->GetEntryCount());
400 } 404 }
401 405
402 // We'll be leaking memory from this test. 406 // We'll be leaking memory from this test.
403 TEST_F(DiskCacheBackendTest, InvalidEntryWithLoad) { 407 TEST_F(DiskCacheBackendTest, InvalidEntryWithLoad) {
404 // Work with a tiny index table (16 entries) 408 // Work with a tiny index table (16 entries)
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
455 459
456 const int cache_size = 0x4000; // 16 kB 460 const int cache_size = 0x4000; // 16 kB
457 SetMaxSize(cache_size * 10); 461 SetMaxSize(cache_size * 10);
458 InitCache(); 462 InitCache();
459 463
460 std::string first("some key"); 464 std::string first("some key");
461 std::string second("something else"); 465 std::string second("something else");
462 disk_cache::Entry* entry; 466 disk_cache::Entry* entry;
463 ASSERT_TRUE(cache_->CreateEntry(first, &entry)); 467 ASSERT_TRUE(cache_->CreateEntry(first, &entry));
464 468
465 char buffer[cache_size] = {0}; 469 scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(cache_size);
470 memset(buffer->data(), 0, cache_size);
466 EXPECT_EQ(cache_size * 19 / 20, entry->WriteData(0, 0, buffer, 471 EXPECT_EQ(cache_size * 19 / 20, entry->WriteData(0, 0, buffer,
467 cache_size * 19 / 20, NULL, false)); 472 cache_size * 19 / 20, NULL, false));
468 473
469 // Simulate a crash. 474 // Simulate a crash.
470 SimulateCrash(); 475 SimulateCrash();
471 476
472 ASSERT_TRUE(cache_->CreateEntry(second, &entry)); 477 ASSERT_TRUE(cache_->CreateEntry(second, &entry));
473 EXPECT_EQ(cache_size / 10, entry->WriteData(0, 0, buffer, cache_size / 10, 478 EXPECT_EQ(cache_size / 10, entry->WriteData(0, 0, buffer, cache_size / 10,
474 NULL, false)) << "trim the cache"; 479 NULL, false)) << "trim the cache";
475 entry->Close(); 480 entry->Close();
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
542 // We'll be leaking memory from this test. 547 // We'll be leaking memory from this test.
543 TEST_F(DiskCacheBackendTest, InvalidEntryEnumeration) { 548 TEST_F(DiskCacheBackendTest, InvalidEntryEnumeration) {
544 // Use the implementation directly... we need to simulate a crash. 549 // Use the implementation directly... we need to simulate a crash.
545 SetDirectMode(); 550 SetDirectMode();
546 InitCache(); 551 InitCache();
547 552
548 std::string key("Some key"); 553 std::string key("Some key");
549 disk_cache::Entry *entry, *entry1, *entry2; 554 disk_cache::Entry *entry, *entry1, *entry2;
550 ASSERT_TRUE(cache_->CreateEntry(key, &entry1)); 555 ASSERT_TRUE(cache_->CreateEntry(key, &entry1));
551 556
552 char data[] = "And the data to save"; 557 const int kSize = 50;
553 EXPECT_TRUE(sizeof(data) == entry1->WriteData(0, 0, data, sizeof(data), NULL, 558 scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize);
554 false)); 559 base::strlcpy(buffer1->data(), "And the data to save", kSize);
560 EXPECT_EQ(kSize, entry1->WriteData(0, 0, buffer1, kSize, NULL, false));
555 entry1->Close(); 561 entry1->Close();
556 ASSERT_TRUE(cache_->OpenEntry(key, &entry1)); 562 ASSERT_TRUE(cache_->OpenEntry(key, &entry1));
557 EXPECT_TRUE(sizeof(data) == entry1->ReadData(0, 0, data, sizeof(data), NULL)); 563 EXPECT_EQ(kSize, entry1->ReadData(0, 0, buffer1, kSize, NULL));
558 564
559 std::string key2("Another key"); 565 std::string key2("Another key");
560 ASSERT_TRUE(cache_->CreateEntry(key2, &entry2)); 566 ASSERT_TRUE(cache_->CreateEntry(key2, &entry2));
561 entry2->Close(); 567 entry2->Close();
562 ASSERT_EQ(2, cache_->GetEntryCount()); 568 ASSERT_EQ(2, cache_->GetEntryCount());
563 569
564 SimulateCrash(); 570 SimulateCrash();
565 571
566 void* iter = NULL; 572 void* iter = NULL;
567 int count = 0; 573 int count = 0;
(...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after
970 InitCache(); 976 InitCache();
971 BackendDoomAll(); 977 BackendDoomAll();
972 } 978 }
973 979
974 TEST_F(DiskCacheBackendTest, MemoryOnlyDoomAll) { 980 TEST_F(DiskCacheBackendTest, MemoryOnlyDoomAll) {
975 SetMemoryOnlyMode(); 981 SetMemoryOnlyMode();
976 InitCache(); 982 InitCache();
977 BackendDoomAll(); 983 BackendDoomAll();
978 } 984 }
979 985
OLDNEW
« no previous file with comments | « net/base/io_buffer.h ('k') | net/disk_cache/disk_cache.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698