| OLD | NEW |
| 1 // Copyright (c) 2006-2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2010 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/platform_thread.h" | 7 #include "base/platform_thread.h" |
| 8 #include "base/string_util.h" | 8 #include "base/string_util.h" |
| 9 #include "base/stringprintf.h" | 9 #include "base/stringprintf.h" |
| 10 #include "base/third_party/dynamic_annotations/dynamic_annotations.h" | 10 #include "base/third_party/dynamic_annotations/dynamic_annotations.h" |
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 223 | 223 |
| 224 MessageLoop::current()->RunAllPending(); | 224 MessageLoop::current()->RunAllPending(); |
| 225 } | 225 } |
| 226 | 226 |
| 227 TEST_F(DiskCacheBackendTest, ExternalFiles) { | 227 TEST_F(DiskCacheBackendTest, ExternalFiles) { |
| 228 InitCache(); | 228 InitCache(); |
| 229 // First, lets create a file on the folder. | 229 // First, lets create a file on the folder. |
| 230 FilePath filename = GetCacheFilePath().AppendASCII("f_000001"); | 230 FilePath filename = GetCacheFilePath().AppendASCII("f_000001"); |
| 231 | 231 |
| 232 const int kSize = 50; | 232 const int kSize = 50; |
| 233 scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize); | 233 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize)); |
| 234 CacheTestFillBuffer(buffer1->data(), kSize, false); | 234 CacheTestFillBuffer(buffer1->data(), kSize, false); |
| 235 ASSERT_EQ(kSize, file_util::WriteFile(filename, buffer1->data(), kSize)); | 235 ASSERT_EQ(kSize, file_util::WriteFile(filename, buffer1->data(), kSize)); |
| 236 | 236 |
| 237 // Now let's create a file with the cache. | 237 // Now let's create a file with the cache. |
| 238 disk_cache::Entry* entry; | 238 disk_cache::Entry* entry; |
| 239 ASSERT_EQ(net::OK, CreateEntry("key", &entry)); | 239 ASSERT_EQ(net::OK, CreateEntry("key", &entry)); |
| 240 ASSERT_EQ(0, WriteData(entry, 0, 20000, buffer1, 0, false)); | 240 ASSERT_EQ(0, WriteData(entry, 0, 20000, buffer1, 0, false)); |
| 241 entry->Close(); | 241 entry->Close(); |
| 242 | 242 |
| 243 // And verify that the first file is still there. | 243 // And verify that the first file is still there. |
| 244 scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize); | 244 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize)); |
| 245 ASSERT_EQ(kSize, file_util::ReadFile(filename, buffer2->data(), kSize)); | 245 ASSERT_EQ(kSize, file_util::ReadFile(filename, buffer2->data(), kSize)); |
| 246 EXPECT_EQ(0, memcmp(buffer1->data(), buffer2->data(), kSize)); | 246 EXPECT_EQ(0, memcmp(buffer1->data(), buffer2->data(), kSize)); |
| 247 } | 247 } |
| 248 | 248 |
| 249 // Tests that we deal with file-level pending operations at destruction time. | 249 // Tests that we deal with file-level pending operations at destruction time. |
| 250 TEST_F(DiskCacheTest, ShutdownWithPendingIO) { | 250 TEST_F(DiskCacheTest, ShutdownWithPendingIO) { |
| 251 TestCompletionCallback cb; | 251 TestCompletionCallback cb; |
| 252 | 252 |
| 253 { | 253 { |
| 254 FilePath path = GetCacheFilePath(); | 254 FilePath path = GetCacheFilePath(); |
| 255 ASSERT_TRUE(DeleteCache(path)); | 255 ASSERT_TRUE(DeleteCache(path)); |
| 256 base::Thread cache_thread("CacheThread"); | 256 base::Thread cache_thread("CacheThread"); |
| 257 ASSERT_TRUE(cache_thread.StartWithOptions( | 257 ASSERT_TRUE(cache_thread.StartWithOptions( |
| 258 base::Thread::Options(MessageLoop::TYPE_IO, 0))); | 258 base::Thread::Options(MessageLoop::TYPE_IO, 0))); |
| 259 | 259 |
| 260 disk_cache::Backend* cache; | 260 disk_cache::Backend* cache; |
| 261 int rv = disk_cache::BackendImpl::CreateBackend( | 261 int rv = disk_cache::BackendImpl::CreateBackend( |
| 262 path, false, 0, net::DISK_CACHE, disk_cache::kNoRandom, | 262 path, false, 0, net::DISK_CACHE, disk_cache::kNoRandom, |
| 263 base::MessageLoopProxy::CreateForCurrentThread(), &cache, &cb); | 263 base::MessageLoopProxy::CreateForCurrentThread(), &cache, &cb); |
| 264 ASSERT_EQ(net::OK, cb.GetResult(rv)); | 264 ASSERT_EQ(net::OK, cb.GetResult(rv)); |
| 265 | 265 |
| 266 disk_cache::EntryImpl* entry; | 266 disk_cache::EntryImpl* entry; |
| 267 rv = cache->CreateEntry("some key", | 267 rv = cache->CreateEntry("some key", |
| 268 reinterpret_cast<disk_cache::Entry**>(&entry), &cb); | 268 reinterpret_cast<disk_cache::Entry**>(&entry), &cb); |
| 269 ASSERT_EQ(net::OK, cb.GetResult(rv)); | 269 ASSERT_EQ(net::OK, cb.GetResult(rv)); |
| 270 | 270 |
| 271 const int kSize = 25000; | 271 const int kSize = 25000; |
| 272 scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(kSize); | 272 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); |
| 273 CacheTestFillBuffer(buffer->data(), kSize, false); | 273 CacheTestFillBuffer(buffer->data(), kSize, false); |
| 274 | 274 |
| 275 for (int i = 0; i < 10 * 1024 * 1024; i += 64 * 1024) { | 275 for (int i = 0; i < 10 * 1024 * 1024; i += 64 * 1024) { |
| 276 // We are using the current thread as the cache thread because we want to | 276 // We are using the current thread as the cache thread because we want to |
| 277 // be able to call directly this method to make sure that the OS (instead | 277 // be able to call directly this method to make sure that the OS (instead |
| 278 // of us switching thread) is returning IO pending. | 278 // of us switching thread) is returning IO pending. |
| 279 rv = entry->WriteDataImpl(0, i, buffer, kSize, &cb, false); | 279 rv = entry->WriteDataImpl(0, i, buffer, kSize, &cb, false); |
| 280 if (rv == net::ERR_IO_PENDING) | 280 if (rv == net::ERR_IO_PENDING) |
| 281 break; | 281 break; |
| 282 EXPECT_EQ(kSize, rv); | 282 EXPECT_EQ(kSize, rv); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 312 int rv = disk_cache::BackendImpl::CreateBackend( | 312 int rv = disk_cache::BackendImpl::CreateBackend( |
| 313 path, false, 0, net::DISK_CACHE, disk_cache::kNoRandom, | 313 path, false, 0, net::DISK_CACHE, disk_cache::kNoRandom, |
| 314 cache_thread.message_loop_proxy(), &cache, &cb); | 314 cache_thread.message_loop_proxy(), &cache, &cb); |
| 315 ASSERT_EQ(net::OK, cb.GetResult(rv)); | 315 ASSERT_EQ(net::OK, cb.GetResult(rv)); |
| 316 | 316 |
| 317 disk_cache::Entry* entry; | 317 disk_cache::Entry* entry; |
| 318 rv = cache->CreateEntry("some key", &entry, &cb); | 318 rv = cache->CreateEntry("some key", &entry, &cb); |
| 319 ASSERT_EQ(net::OK, cb.GetResult(rv)); | 319 ASSERT_EQ(net::OK, cb.GetResult(rv)); |
| 320 | 320 |
| 321 const int kSize = 25000; | 321 const int kSize = 25000; |
| 322 scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(kSize); | 322 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); |
| 323 CacheTestFillBuffer(buffer->data(), kSize, false); | 323 CacheTestFillBuffer(buffer->data(), kSize, false); |
| 324 | 324 |
| 325 rv = entry->WriteData(0, 0, buffer, kSize, &cb, false); | 325 rv = entry->WriteData(0, 0, buffer, kSize, &cb, false); |
| 326 EXPECT_EQ(net::ERR_IO_PENDING, rv); | 326 EXPECT_EQ(net::ERR_IO_PENDING, rv); |
| 327 | 327 |
| 328 entry->Close(); | 328 entry->Close(); |
| 329 | 329 |
| 330 // The cache destructor will see two pending operations here. | 330 // The cache destructor will see two pending operations here. |
| 331 delete cache; | 331 delete cache; |
| 332 } | 332 } |
| (...skipping 26 matching lines...) Expand all Loading... |
| 359 SetDirectMode(); | 359 SetDirectMode(); |
| 360 const int cache_size = 0x10000; // 64 kB | 360 const int cache_size = 0x10000; // 64 kB |
| 361 SetMaxSize(cache_size); | 361 SetMaxSize(cache_size); |
| 362 InitCache(); | 362 InitCache(); |
| 363 | 363 |
| 364 std::string first("some key"); | 364 std::string first("some key"); |
| 365 std::string second("something else"); | 365 std::string second("something else"); |
| 366 disk_cache::Entry* entry; | 366 disk_cache::Entry* entry; |
| 367 ASSERT_EQ(net::OK, CreateEntry(first, &entry)); | 367 ASSERT_EQ(net::OK, CreateEntry(first, &entry)); |
| 368 | 368 |
| 369 scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(cache_size); | 369 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(cache_size)); |
| 370 memset(buffer->data(), 0, cache_size); | 370 memset(buffer->data(), 0, cache_size); |
| 371 EXPECT_EQ(cache_size / 10, WriteData(entry, 0, 0, buffer, cache_size / 10, | 371 EXPECT_EQ(cache_size / 10, WriteData(entry, 0, 0, buffer, cache_size / 10, |
| 372 false)) << "normal file"; | 372 false)) << "normal file"; |
| 373 | 373 |
| 374 EXPECT_EQ(net::ERR_FAILED, WriteData(entry, 1, 0, buffer, cache_size / 5, | 374 EXPECT_EQ(net::ERR_FAILED, WriteData(entry, 1, 0, buffer, cache_size / 5, |
| 375 false)) << "file size above the limit"; | 375 false)) << "file size above the limit"; |
| 376 | 376 |
| 377 // By doubling the total size, we make this file cacheable. | 377 // By doubling the total size, we make this file cacheable. |
| 378 SetMaxSize(cache_size * 2); | 378 SetMaxSize(cache_size * 2); |
| 379 EXPECT_EQ(cache_size / 5, WriteData(entry, 1, 0, buffer, cache_size / 5, | 379 EXPECT_EQ(cache_size / 5, WriteData(entry, 1, 0, buffer, cache_size / 5, |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 490 // Before looking for invalid entries, let's check a valid entry. | 490 // Before looking for invalid entries, let's check a valid entry. |
| 491 void DiskCacheBackendTest::BackendValidEntry() { | 491 void DiskCacheBackendTest::BackendValidEntry() { |
| 492 SetDirectMode(); | 492 SetDirectMode(); |
| 493 InitCache(); | 493 InitCache(); |
| 494 | 494 |
| 495 std::string key("Some key"); | 495 std::string key("Some key"); |
| 496 disk_cache::Entry* entry; | 496 disk_cache::Entry* entry; |
| 497 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 497 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 498 | 498 |
| 499 const int kSize = 50; | 499 const int kSize = 50; |
| 500 scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize); | 500 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize)); |
| 501 memset(buffer1->data(), 0, kSize); | 501 memset(buffer1->data(), 0, kSize); |
| 502 base::strlcpy(buffer1->data(), "And the data to save", kSize); | 502 base::strlcpy(buffer1->data(), "And the data to save", kSize); |
| 503 EXPECT_EQ(kSize, WriteData(entry, 0, 0, buffer1, kSize, false)); | 503 EXPECT_EQ(kSize, WriteData(entry, 0, 0, buffer1, kSize, false)); |
| 504 entry->Close(); | 504 entry->Close(); |
| 505 SimulateCrash(); | 505 SimulateCrash(); |
| 506 | 506 |
| 507 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 507 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
| 508 | 508 |
| 509 scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize); | 509 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize)); |
| 510 memset(buffer2->data(), 0, kSize); | 510 memset(buffer2->data(), 0, kSize); |
| 511 EXPECT_EQ(kSize, ReadData(entry, 0, 0, buffer2, kSize)); | 511 EXPECT_EQ(kSize, ReadData(entry, 0, 0, buffer2, kSize)); |
| 512 entry->Close(); | 512 entry->Close(); |
| 513 EXPECT_STREQ(buffer1->data(), buffer2->data()); | 513 EXPECT_STREQ(buffer1->data(), buffer2->data()); |
| 514 } | 514 } |
| 515 | 515 |
| 516 TEST_F(DiskCacheBackendTest, ValidEntry) { | 516 TEST_F(DiskCacheBackendTest, ValidEntry) { |
| 517 BackendValidEntry(); | 517 BackendValidEntry(); |
| 518 } | 518 } |
| 519 | 519 |
| 520 TEST_F(DiskCacheBackendTest, NewEvictionValidEntry) { | 520 TEST_F(DiskCacheBackendTest, NewEvictionValidEntry) { |
| 521 SetNewEviction(); | 521 SetNewEviction(); |
| 522 BackendValidEntry(); | 522 BackendValidEntry(); |
| 523 } | 523 } |
| 524 | 524 |
| 525 // The same logic of the previous test (ValidEntry), but this time force the | 525 // The same logic of the previous test (ValidEntry), but this time force the |
| 526 // entry to be invalid, simulating a crash in the middle. | 526 // entry to be invalid, simulating a crash in the middle. |
| 527 // We'll be leaking memory from this test. | 527 // We'll be leaking memory from this test. |
| 528 void DiskCacheBackendTest::BackendInvalidEntry() { | 528 void DiskCacheBackendTest::BackendInvalidEntry() { |
| 529 // Use the implementation directly... we need to simulate a crash. | 529 // Use the implementation directly... we need to simulate a crash. |
| 530 SetDirectMode(); | 530 SetDirectMode(); |
| 531 InitCache(); | 531 InitCache(); |
| 532 | 532 |
| 533 std::string key("Some key"); | 533 std::string key("Some key"); |
| 534 disk_cache::Entry* entry; | 534 disk_cache::Entry* entry; |
| 535 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 535 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 536 | 536 |
| 537 const int kSize = 50; | 537 const int kSize = 50; |
| 538 scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(kSize); | 538 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); |
| 539 memset(buffer->data(), 0, kSize); | 539 memset(buffer->data(), 0, kSize); |
| 540 base::strlcpy(buffer->data(), "And the data to save", kSize); | 540 base::strlcpy(buffer->data(), "And the data to save", kSize); |
| 541 EXPECT_EQ(kSize, WriteData(entry, 0, 0, buffer, kSize, false)); | 541 EXPECT_EQ(kSize, WriteData(entry, 0, 0, buffer, kSize, false)); |
| 542 SimulateCrash(); | 542 SimulateCrash(); |
| 543 | 543 |
| 544 EXPECT_NE(net::OK, OpenEntry(key, &entry)); | 544 EXPECT_NE(net::OK, OpenEntry(key, &entry)); |
| 545 EXPECT_EQ(0, cache_->GetEntryCount()); | 545 EXPECT_EQ(0, cache_->GetEntryCount()); |
| 546 } | 546 } |
| 547 | 547 |
| 548 // This and the other intentionally leaky tests below are excluded from | 548 // This and the other intentionally leaky tests below are excluded from |
| (...skipping 23 matching lines...) Expand all Loading... |
| 572 void DiskCacheBackendTest::BackendInvalidEntryRead() { | 572 void DiskCacheBackendTest::BackendInvalidEntryRead() { |
| 573 // Use the implementation directly... we need to simulate a crash. | 573 // Use the implementation directly... we need to simulate a crash. |
| 574 SetDirectMode(); | 574 SetDirectMode(); |
| 575 InitCache(); | 575 InitCache(); |
| 576 | 576 |
| 577 std::string key("Some key"); | 577 std::string key("Some key"); |
| 578 disk_cache::Entry* entry; | 578 disk_cache::Entry* entry; |
| 579 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 579 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 580 | 580 |
| 581 const int kSize = 50; | 581 const int kSize = 50; |
| 582 scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(kSize); | 582 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); |
| 583 memset(buffer->data(), 0, kSize); | 583 memset(buffer->data(), 0, kSize); |
| 584 base::strlcpy(buffer->data(), "And the data to save", kSize); | 584 base::strlcpy(buffer->data(), "And the data to save", kSize); |
| 585 EXPECT_EQ(kSize, WriteData(entry, 0, 0, buffer, kSize, false)); | 585 EXPECT_EQ(kSize, WriteData(entry, 0, 0, buffer, kSize, false)); |
| 586 entry->Close(); | 586 entry->Close(); |
| 587 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 587 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
| 588 EXPECT_EQ(kSize, ReadData(entry, 0, 0, buffer, kSize)); | 588 EXPECT_EQ(kSize, ReadData(entry, 0, 0, buffer, kSize)); |
| 589 | 589 |
| 590 SimulateCrash(); | 590 SimulateCrash(); |
| 591 | 591 |
| 592 if (type_ == net::APP_CACHE) { | 592 if (type_ == net::APP_CACHE) { |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 690 | 690 |
| 691 const int kSize = 0x3000; // 12 kB | 691 const int kSize = 0x3000; // 12 kB |
| 692 SetMaxSize(kSize * 10); | 692 SetMaxSize(kSize * 10); |
| 693 InitCache(); | 693 InitCache(); |
| 694 | 694 |
| 695 std::string first("some key"); | 695 std::string first("some key"); |
| 696 std::string second("something else"); | 696 std::string second("something else"); |
| 697 disk_cache::Entry* entry; | 697 disk_cache::Entry* entry; |
| 698 ASSERT_EQ(net::OK, CreateEntry(first, &entry)); | 698 ASSERT_EQ(net::OK, CreateEntry(first, &entry)); |
| 699 | 699 |
| 700 scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(kSize); | 700 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); |
| 701 memset(buffer->data(), 0, kSize); | 701 memset(buffer->data(), 0, kSize); |
| 702 EXPECT_EQ(kSize, WriteData(entry, 0, 0, buffer, kSize, false)); | 702 EXPECT_EQ(kSize, WriteData(entry, 0, 0, buffer, kSize, false)); |
| 703 | 703 |
| 704 // Simulate a crash. | 704 // Simulate a crash. |
| 705 SimulateCrash(); | 705 SimulateCrash(); |
| 706 | 706 |
| 707 ASSERT_EQ(net::OK, CreateEntry(second, &entry)); | 707 ASSERT_EQ(net::OK, CreateEntry(second, &entry)); |
| 708 EXPECT_EQ(kSize, WriteData(entry, 0, 0, buffer, kSize, false)); | 708 EXPECT_EQ(kSize, WriteData(entry, 0, 0, buffer, kSize, false)); |
| 709 | 709 |
| 710 EXPECT_EQ(2, cache_->GetEntryCount()); | 710 EXPECT_EQ(2, cache_->GetEntryCount()); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 741 // We'll be leaking memory from this test. | 741 // We'll be leaking memory from this test. |
| 742 void DiskCacheBackendTest::BackendTrimInvalidEntry2() { | 742 void DiskCacheBackendTest::BackendTrimInvalidEntry2() { |
| 743 // Use the implementation directly... we need to simulate a crash. | 743 // Use the implementation directly... we need to simulate a crash. |
| 744 SetDirectMode(); | 744 SetDirectMode(); |
| 745 SetMask(0xf); // 16-entry table. | 745 SetMask(0xf); // 16-entry table. |
| 746 | 746 |
| 747 const int kSize = 0x3000; // 12 kB | 747 const int kSize = 0x3000; // 12 kB |
| 748 SetMaxSize(kSize * 40); | 748 SetMaxSize(kSize * 40); |
| 749 InitCache(); | 749 InitCache(); |
| 750 | 750 |
| 751 scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(kSize); | 751 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); |
| 752 memset(buffer->data(), 0, kSize); | 752 memset(buffer->data(), 0, kSize); |
| 753 disk_cache::Entry* entry; | 753 disk_cache::Entry* entry; |
| 754 | 754 |
| 755 // Writing 32 entries to this cache chains most of them. | 755 // Writing 32 entries to this cache chains most of them. |
| 756 for (int i = 0; i < 32; i++) { | 756 for (int i = 0; i < 32; i++) { |
| 757 std::string key(base::StringPrintf("some key %d", i)); | 757 std::string key(base::StringPrintf("some key %d", i)); |
| 758 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 758 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 759 EXPECT_EQ(kSize, WriteData(entry, 0, 0, buffer, kSize, false)); | 759 EXPECT_EQ(kSize, WriteData(entry, 0, 0, buffer, kSize, false)); |
| 760 entry->Close(); | 760 entry->Close(); |
| 761 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 761 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 933 void DiskCacheBackendTest::BackendInvalidEntryEnumeration() { | 933 void DiskCacheBackendTest::BackendInvalidEntryEnumeration() { |
| 934 // Use the implementation directly... we need to simulate a crash. | 934 // Use the implementation directly... we need to simulate a crash. |
| 935 SetDirectMode(); | 935 SetDirectMode(); |
| 936 InitCache(); | 936 InitCache(); |
| 937 | 937 |
| 938 std::string key("Some key"); | 938 std::string key("Some key"); |
| 939 disk_cache::Entry *entry, *entry1, *entry2; | 939 disk_cache::Entry *entry, *entry1, *entry2; |
| 940 ASSERT_EQ(net::OK, CreateEntry(key, &entry1)); | 940 ASSERT_EQ(net::OK, CreateEntry(key, &entry1)); |
| 941 | 941 |
| 942 const int kSize = 50; | 942 const int kSize = 50; |
| 943 scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize); | 943 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize)); |
| 944 memset(buffer1->data(), 0, kSize); | 944 memset(buffer1->data(), 0, kSize); |
| 945 base::strlcpy(buffer1->data(), "And the data to save", kSize); | 945 base::strlcpy(buffer1->data(), "And the data to save", kSize); |
| 946 EXPECT_EQ(kSize, WriteData(entry1, 0, 0, buffer1, kSize, false)); | 946 EXPECT_EQ(kSize, WriteData(entry1, 0, 0, buffer1, kSize, false)); |
| 947 entry1->Close(); | 947 entry1->Close(); |
| 948 ASSERT_EQ(net::OK, OpenEntry(key, &entry1)); | 948 ASSERT_EQ(net::OK, OpenEntry(key, &entry1)); |
| 949 EXPECT_EQ(kSize, ReadData(entry1, 0, 0, buffer1, kSize)); | 949 EXPECT_EQ(kSize, ReadData(entry1, 0, 0, buffer1, kSize)); |
| 950 | 950 |
| 951 std::string key2("Another key"); | 951 std::string key2("Another key"); |
| 952 ASSERT_EQ(net::OK, CreateEntry(key2, &entry2)); | 952 ASSERT_EQ(net::OK, CreateEntry(key2, &entry2)); |
| 953 entry2->Close(); | 953 entry2->Close(); |
| (...skipping 613 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1567 char key2[2000]; | 1567 char key2[2000]; |
| 1568 char key3[20000]; | 1568 char key3[20000]; |
| 1569 CacheTestFillBuffer(key2, sizeof(key2), true); | 1569 CacheTestFillBuffer(key2, sizeof(key2), true); |
| 1570 CacheTestFillBuffer(key3, sizeof(key3), true); | 1570 CacheTestFillBuffer(key3, sizeof(key3), true); |
| 1571 key2[sizeof(key2) - 1] = '\0'; | 1571 key2[sizeof(key2) - 1] = '\0'; |
| 1572 key3[sizeof(key3) - 1] = '\0'; | 1572 key3[sizeof(key3) - 1] = '\0'; |
| 1573 ASSERT_EQ(net::OK, CreateEntry(key2, &entry2)); | 1573 ASSERT_EQ(net::OK, CreateEntry(key2, &entry2)); |
| 1574 ASSERT_EQ(net::OK, CreateEntry(key3, &entry3)); | 1574 ASSERT_EQ(net::OK, CreateEntry(key3, &entry3)); |
| 1575 | 1575 |
| 1576 const int kBufSize = 20000; | 1576 const int kBufSize = 20000; |
| 1577 scoped_refptr<net::IOBuffer> buf = new net::IOBuffer(kBufSize); | 1577 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kBufSize)); |
| 1578 memset(buf->data(), 0, kBufSize); | 1578 memset(buf->data(), 0, kBufSize); |
| 1579 EXPECT_EQ(100, WriteData(entry2, 0, 0, buf, 100, false)); | 1579 EXPECT_EQ(100, WriteData(entry2, 0, 0, buf, 100, false)); |
| 1580 EXPECT_EQ(kBufSize, WriteData(entry3, 0, 0, buf, kBufSize, false)); | 1580 EXPECT_EQ(kBufSize, WriteData(entry3, 0, 0, buf, kBufSize, false)); |
| 1581 | 1581 |
| 1582 // This line should disable the cache but not delete it. | 1582 // This line should disable the cache but not delete it. |
| 1583 EXPECT_NE(net::OK, OpenNextEntry(&iter, &entry4)); | 1583 EXPECT_NE(net::OK, OpenNextEntry(&iter, &entry4)); |
| 1584 EXPECT_EQ(4, cache_->GetEntryCount()); | 1584 EXPECT_EQ(4, cache_->GetEntryCount()); |
| 1585 | 1585 |
| 1586 EXPECT_NE(net::OK, CreateEntry("cache is disabled", &entry4)); | 1586 EXPECT_NE(net::OK, CreateEntry("cache is disabled", &entry4)); |
| 1587 | 1587 |
| (...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1833 // Make sure that we keep the total memory used by the internal buffers under | 1833 // Make sure that we keep the total memory used by the internal buffers under |
| 1834 // control. | 1834 // control. |
| 1835 TEST_F(DiskCacheBackendTest, TotalBuffersSize1) { | 1835 TEST_F(DiskCacheBackendTest, TotalBuffersSize1) { |
| 1836 SetDirectMode(); | 1836 SetDirectMode(); |
| 1837 InitCache(); | 1837 InitCache(); |
| 1838 std::string key("the first key"); | 1838 std::string key("the first key"); |
| 1839 disk_cache::Entry* entry; | 1839 disk_cache::Entry* entry; |
| 1840 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 1840 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 1841 | 1841 |
| 1842 const int kSize = 200; | 1842 const int kSize = 200; |
| 1843 scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(kSize); | 1843 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); |
| 1844 CacheTestFillBuffer(buffer->data(), kSize, true); | 1844 CacheTestFillBuffer(buffer->data(), kSize, true); |
| 1845 | 1845 |
| 1846 for (int i = 0; i < 10; i++) { | 1846 for (int i = 0; i < 10; i++) { |
| 1847 SCOPED_TRACE(i); | 1847 SCOPED_TRACE(i); |
| 1848 // Allocate 2MB for this entry. | 1848 // Allocate 2MB for this entry. |
| 1849 EXPECT_EQ(kSize, WriteData(entry, 0, 0, buffer, kSize, true)); | 1849 EXPECT_EQ(kSize, WriteData(entry, 0, 0, buffer, kSize, true)); |
| 1850 EXPECT_EQ(kSize, WriteData(entry, 1, 0, buffer, kSize, true)); | 1850 EXPECT_EQ(kSize, WriteData(entry, 1, 0, buffer, kSize, true)); |
| 1851 EXPECT_EQ(kSize, WriteData(entry, 0, 1024 * 1024, buffer, kSize, false)); | 1851 EXPECT_EQ(kSize, WriteData(entry, 0, 1024 * 1024, buffer, kSize, false)); |
| 1852 EXPECT_EQ(kSize, WriteData(entry, 1, 1024 * 1024, buffer, kSize, false)); | 1852 EXPECT_EQ(kSize, WriteData(entry, 1, 1024 * 1024, buffer, kSize, false)); |
| 1853 | 1853 |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1924 char buffer1[kSize]; | 1924 char buffer1[kSize]; |
| 1925 char buffer2[kSize]; | 1925 char buffer2[kSize]; |
| 1926 memset(buffer1, 't', kSize); | 1926 memset(buffer1, 't', kSize); |
| 1927 memset(buffer2, 0, kSize); | 1927 memset(buffer2, 0, kSize); |
| 1928 EXPECT_TRUE(file->Write(buffer1, kSize, 0)); | 1928 EXPECT_TRUE(file->Write(buffer1, kSize, 0)); |
| 1929 EXPECT_TRUE(file->Read(buffer2, kSize, 0)); | 1929 EXPECT_TRUE(file->Read(buffer2, kSize, 0)); |
| 1930 EXPECT_EQ(0, memcmp(buffer1, buffer2, kSize)); | 1930 EXPECT_EQ(0, memcmp(buffer1, buffer2, kSize)); |
| 1931 | 1931 |
| 1932 EXPECT_TRUE(disk_cache::DeleteCacheFile(name)); | 1932 EXPECT_TRUE(disk_cache::DeleteCacheFile(name)); |
| 1933 } | 1933 } |
| OLD | NEW |