| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/basictypes.h" | |
| 6 #include "base/bind.h" | 5 #include "base/bind.h" |
| 7 #include "base/bind_helpers.h" | 6 #include "base/bind_helpers.h" |
| 8 #include "base/files/file.h" | 7 #include "base/files/file.h" |
| 9 #include "base/files/file_util.h" | 8 #include "base/files/file_util.h" |
| 9 #include "base/macros.h" |
| 10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
| 11 #include "base/strings/string_util.h" | 11 #include "base/strings/string_util.h" |
| 12 #include "base/threading/platform_thread.h" | 12 #include "base/threading/platform_thread.h" |
| 13 #include "net/base/completion_callback.h" | 13 #include "net/base/completion_callback.h" |
| 14 #include "net/base/io_buffer.h" | 14 #include "net/base/io_buffer.h" |
| 15 #include "net/base/net_errors.h" | 15 #include "net/base/net_errors.h" |
| 16 #include "net/base/test_completion_callback.h" | 16 #include "net/base/test_completion_callback.h" |
| 17 #include "net/disk_cache/blockfile/backend_impl.h" | 17 #include "net/disk_cache/blockfile/backend_impl.h" |
| 18 #include "net/disk_cache/blockfile/entry_impl.h" | 18 #include "net/disk_cache/blockfile/entry_impl.h" |
| 19 #include "net/disk_cache/disk_cache_test_base.h" | 19 #include "net/disk_cache/disk_cache_test_base.h" |
| (...skipping 1611 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1631 ++count; | 1631 ++count; |
| 1632 disk_cache::MemEntryImpl* mem_entry = | 1632 disk_cache::MemEntryImpl* mem_entry = |
| 1633 reinterpret_cast<disk_cache::MemEntryImpl*>(entry); | 1633 reinterpret_cast<disk_cache::MemEntryImpl*>(entry); |
| 1634 EXPECT_EQ(disk_cache::MemEntryImpl::kParentEntry, mem_entry->type()); | 1634 EXPECT_EQ(disk_cache::MemEntryImpl::kParentEntry, mem_entry->type()); |
| 1635 mem_entry->Close(); | 1635 mem_entry->Close(); |
| 1636 } | 1636 } |
| 1637 EXPECT_EQ(1, count); | 1637 EXPECT_EQ(1, count); |
| 1638 } | 1638 } |
| 1639 | 1639 |
| 1640 // Writes |buf_1| to offset and reads it back as |buf_2|. | 1640 // Writes |buf_1| to offset and reads it back as |buf_2|. |
| 1641 void VerifySparseIO(disk_cache::Entry* entry, int64 offset, | 1641 void VerifySparseIO(disk_cache::Entry* entry, |
| 1642 net::IOBuffer* buf_1, int size, net::IOBuffer* buf_2) { | 1642 int64_t offset, |
| 1643 net::IOBuffer* buf_1, |
| 1644 int size, |
| 1645 net::IOBuffer* buf_2) { |
| 1643 net::TestCompletionCallback cb; | 1646 net::TestCompletionCallback cb; |
| 1644 | 1647 |
| 1645 memset(buf_2->data(), 0, size); | 1648 memset(buf_2->data(), 0, size); |
| 1646 int ret = entry->ReadSparseData(offset, buf_2, size, cb.callback()); | 1649 int ret = entry->ReadSparseData(offset, buf_2, size, cb.callback()); |
| 1647 EXPECT_EQ(0, cb.GetResult(ret)); | 1650 EXPECT_EQ(0, cb.GetResult(ret)); |
| 1648 | 1651 |
| 1649 ret = entry->WriteSparseData(offset, buf_1, size, cb.callback()); | 1652 ret = entry->WriteSparseData(offset, buf_1, size, cb.callback()); |
| 1650 EXPECT_EQ(size, cb.GetResult(ret)); | 1653 EXPECT_EQ(size, cb.GetResult(ret)); |
| 1651 | 1654 |
| 1652 ret = entry->ReadSparseData(offset, buf_2, size, cb.callback()); | 1655 ret = entry->ReadSparseData(offset, buf_2, size, cb.callback()); |
| 1653 EXPECT_EQ(size, cb.GetResult(ret)); | 1656 EXPECT_EQ(size, cb.GetResult(ret)); |
| 1654 | 1657 |
| 1655 EXPECT_EQ(0, memcmp(buf_1->data(), buf_2->data(), size)); | 1658 EXPECT_EQ(0, memcmp(buf_1->data(), buf_2->data(), size)); |
| 1656 } | 1659 } |
| 1657 | 1660 |
| 1658 // Reads |size| bytes from |entry| at |offset| and verifies that they are the | 1661 // Reads |size| bytes from |entry| at |offset| and verifies that they are the |
| 1659 // same as the content of the provided |buffer|. | 1662 // same as the content of the provided |buffer|. |
| 1660 void VerifyContentSparseIO(disk_cache::Entry* entry, int64 offset, char* buffer, | 1663 void VerifyContentSparseIO(disk_cache::Entry* entry, |
| 1664 int64_t offset, |
| 1665 char* buffer, |
| 1661 int size) { | 1666 int size) { |
| 1662 net::TestCompletionCallback cb; | 1667 net::TestCompletionCallback cb; |
| 1663 | 1668 |
| 1664 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(size)); | 1669 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(size)); |
| 1665 memset(buf_1->data(), 0, size); | 1670 memset(buf_1->data(), 0, size); |
| 1666 int ret = entry->ReadSparseData(offset, buf_1.get(), size, cb.callback()); | 1671 int ret = entry->ReadSparseData(offset, buf_1.get(), size, cb.callback()); |
| 1667 EXPECT_EQ(size, cb.GetResult(ret)); | 1672 EXPECT_EQ(size, cb.GetResult(ret)); |
| 1668 EXPECT_EQ(0, memcmp(buf_1->data(), buffer, size)); | 1673 EXPECT_EQ(0, memcmp(buf_1->data(), buffer, size)); |
| 1669 } | 1674 } |
| 1670 | 1675 |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1747 | 1752 |
| 1748 const int kSize = 16 * 1024; | 1753 const int kSize = 16 * 1024; |
| 1749 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); | 1754 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); |
| 1750 CacheTestFillBuffer(buf->data(), kSize, false); | 1755 CacheTestFillBuffer(buf->data(), kSize, false); |
| 1751 | 1756 |
| 1752 // Write at offset 0x20F0000 (33 MB - 64 KB), and 0x20F4400 (33 MB - 47 KB). | 1757 // Write at offset 0x20F0000 (33 MB - 64 KB), and 0x20F4400 (33 MB - 47 KB). |
| 1753 EXPECT_EQ(kSize, WriteSparseData(entry, 0x20F0000, buf.get(), kSize)); | 1758 EXPECT_EQ(kSize, WriteSparseData(entry, 0x20F0000, buf.get(), kSize)); |
| 1754 EXPECT_EQ(kSize, WriteSparseData(entry, 0x20F4400, buf.get(), kSize)); | 1759 EXPECT_EQ(kSize, WriteSparseData(entry, 0x20F4400, buf.get(), kSize)); |
| 1755 | 1760 |
| 1756 // We stop at the first empty block. | 1761 // We stop at the first empty block. |
| 1757 int64 start; | 1762 int64_t start; |
| 1758 net::TestCompletionCallback cb; | 1763 net::TestCompletionCallback cb; |
| 1759 int rv = entry->GetAvailableRange( | 1764 int rv = entry->GetAvailableRange( |
| 1760 0x20F0000, kSize * 2, &start, cb.callback()); | 1765 0x20F0000, kSize * 2, &start, cb.callback()); |
| 1761 EXPECT_EQ(kSize, cb.GetResult(rv)); | 1766 EXPECT_EQ(kSize, cb.GetResult(rv)); |
| 1762 EXPECT_EQ(0x20F0000, start); | 1767 EXPECT_EQ(0x20F0000, start); |
| 1763 | 1768 |
| 1764 start = 0; | 1769 start = 0; |
| 1765 rv = entry->GetAvailableRange(0, kSize, &start, cb.callback()); | 1770 rv = entry->GetAvailableRange(0, kSize, &start, cb.callback()); |
| 1766 EXPECT_EQ(0, cb.GetResult(rv)); | 1771 EXPECT_EQ(0, cb.GetResult(rv)); |
| 1767 rv = entry->GetAvailableRange( | 1772 rv = entry->GetAvailableRange( |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1826 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(kSize)); | 1831 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(kSize)); |
| 1827 scoped_refptr<net::IOBuffer> buf_2(new net::IOBuffer(kSize)); | 1832 scoped_refptr<net::IOBuffer> buf_2(new net::IOBuffer(kSize)); |
| 1828 CacheTestFillBuffer(buf_1->data(), kSize, false); | 1833 CacheTestFillBuffer(buf_1->data(), kSize, false); |
| 1829 | 1834 |
| 1830 // Do small writes (180 bytes) that get increasingly close to a 1024-byte | 1835 // Do small writes (180 bytes) that get increasingly close to a 1024-byte |
| 1831 // boundary. All data should be dropped until a boundary is crossed, at which | 1836 // boundary. All data should be dropped until a boundary is crossed, at which |
| 1832 // point the data after the boundary is saved (at least for a while). | 1837 // point the data after the boundary is saved (at least for a while). |
| 1833 int offset = 1024 - 500; | 1838 int offset = 1024 - 500; |
| 1834 int rv = 0; | 1839 int rv = 0; |
| 1835 net::TestCompletionCallback cb; | 1840 net::TestCompletionCallback cb; |
| 1836 int64 start; | 1841 int64_t start; |
| 1837 for (int i = 0; i < 5; i++) { | 1842 for (int i = 0; i < 5; i++) { |
| 1838 // Check result of last GetAvailableRange. | 1843 // Check result of last GetAvailableRange. |
| 1839 EXPECT_EQ(0, rv); | 1844 EXPECT_EQ(0, rv); |
| 1840 | 1845 |
| 1841 rv = entry->WriteSparseData(offset, buf_1.get(), kSize, cb.callback()); | 1846 rv = entry->WriteSparseData(offset, buf_1.get(), kSize, cb.callback()); |
| 1842 EXPECT_EQ(kSize, cb.GetResult(rv)); | 1847 EXPECT_EQ(kSize, cb.GetResult(rv)); |
| 1843 | 1848 |
| 1844 rv = entry->GetAvailableRange(offset - 100, kSize, &start, cb.callback()); | 1849 rv = entry->GetAvailableRange(offset - 100, kSize, &start, cb.callback()); |
| 1845 EXPECT_EQ(0, cb.GetResult(rv)); | 1850 EXPECT_EQ(0, cb.GetResult(rv)); |
| 1846 | 1851 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1880 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 1885 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 1881 | 1886 |
| 1882 const int kSize = 180; | 1887 const int kSize = 180; |
| 1883 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(kSize)); | 1888 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(kSize)); |
| 1884 scoped_refptr<net::IOBuffer> buf_2(new net::IOBuffer(kSize)); | 1889 scoped_refptr<net::IOBuffer> buf_2(new net::IOBuffer(kSize)); |
| 1885 CacheTestFillBuffer(buf_1->data(), kSize, false); | 1890 CacheTestFillBuffer(buf_1->data(), kSize, false); |
| 1886 | 1891 |
| 1887 // Any starting offset is fine as long as it is 1024-bytes aligned. | 1892 // Any starting offset is fine as long as it is 1024-bytes aligned. |
| 1888 int rv = 0; | 1893 int rv = 0; |
| 1889 net::TestCompletionCallback cb; | 1894 net::TestCompletionCallback cb; |
| 1890 int64 start; | 1895 int64_t start; |
| 1891 int64 offset = 1024 * 11; | 1896 int64_t offset = 1024 * 11; |
| 1892 for (; offset < 20000; offset += kSize) { | 1897 for (; offset < 20000; offset += kSize) { |
| 1893 rv = entry->WriteSparseData(offset, buf_1.get(), kSize, cb.callback()); | 1898 rv = entry->WriteSparseData(offset, buf_1.get(), kSize, cb.callback()); |
| 1894 EXPECT_EQ(kSize, cb.GetResult(rv)); | 1899 EXPECT_EQ(kSize, cb.GetResult(rv)); |
| 1895 | 1900 |
| 1896 rv = entry->GetAvailableRange(offset, kSize, &start, cb.callback()); | 1901 rv = entry->GetAvailableRange(offset, kSize, &start, cb.callback()); |
| 1897 EXPECT_EQ(kSize, cb.GetResult(rv)); | 1902 EXPECT_EQ(kSize, cb.GetResult(rv)); |
| 1898 EXPECT_EQ(offset, start); | 1903 EXPECT_EQ(offset, start); |
| 1899 | 1904 |
| 1900 rv = entry->ReadSparseData(offset, buf_2.get(), kSize, cb.callback()); | 1905 rv = entry->ReadSparseData(offset, buf_2.get(), kSize, cb.callback()); |
| 1901 EXPECT_EQ(kSize, cb.GetResult(rv)); | 1906 EXPECT_EQ(kSize, cb.GetResult(rv)); |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2018 entry->WriteSparseData(5120, buf.get(), 1024, net::CompletionCallback())); | 2023 entry->WriteSparseData(5120, buf.get(), 1024, net::CompletionCallback())); |
| 2019 EXPECT_EQ(1024, | 2024 EXPECT_EQ(1024, |
| 2020 entry->WriteSparseData( | 2025 entry->WriteSparseData( |
| 2021 10000, buf.get(), 1024, net::CompletionCallback())); | 2026 10000, buf.get(), 1024, net::CompletionCallback())); |
| 2022 | 2027 |
| 2023 // Writes in the middle of an entry and spans 2 child entries. | 2028 // Writes in the middle of an entry and spans 2 child entries. |
| 2024 EXPECT_EQ(8192, | 2029 EXPECT_EQ(8192, |
| 2025 entry->WriteSparseData( | 2030 entry->WriteSparseData( |
| 2026 50000, buf.get(), 8192, net::CompletionCallback())); | 2031 50000, buf.get(), 8192, net::CompletionCallback())); |
| 2027 | 2032 |
| 2028 int64 start; | 2033 int64_t start; |
| 2029 net::TestCompletionCallback cb; | 2034 net::TestCompletionCallback cb; |
| 2030 // Test that we stop at a discontinuous child at the second block. | 2035 // Test that we stop at a discontinuous child at the second block. |
| 2031 int rv = entry->GetAvailableRange(0, 10000, &start, cb.callback()); | 2036 int rv = entry->GetAvailableRange(0, 10000, &start, cb.callback()); |
| 2032 EXPECT_EQ(1024, cb.GetResult(rv)); | 2037 EXPECT_EQ(1024, cb.GetResult(rv)); |
| 2033 EXPECT_EQ(0, start); | 2038 EXPECT_EQ(0, start); |
| 2034 | 2039 |
| 2035 // Test that number of bytes is reported correctly when we start from the | 2040 // Test that number of bytes is reported correctly when we start from the |
| 2036 // middle of a filled region. | 2041 // middle of a filled region. |
| 2037 rv = entry->GetAvailableRange(512, 10000, &start, cb.callback()); | 2042 rv = entry->GetAvailableRange(512, 10000, &start, cb.callback()); |
| 2038 EXPECT_EQ(512, cb.GetResult(rv)); | 2043 EXPECT_EQ(512, cb.GetResult(rv)); |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2110 std::string key1("the first key"); | 2115 std::string key1("the first key"); |
| 2111 std::string key2("the second key"); | 2116 std::string key2("the second key"); |
| 2112 disk_cache::Entry *entry1, *entry2; | 2117 disk_cache::Entry *entry1, *entry2; |
| 2113 ASSERT_EQ(net::OK, CreateEntry(key1, &entry1)); | 2118 ASSERT_EQ(net::OK, CreateEntry(key1, &entry1)); |
| 2114 ASSERT_EQ(net::OK, CreateEntry(key2, &entry2)); | 2119 ASSERT_EQ(net::OK, CreateEntry(key2, &entry2)); |
| 2115 | 2120 |
| 2116 const int kSize = 4 * 1024; | 2121 const int kSize = 4 * 1024; |
| 2117 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); | 2122 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); |
| 2118 CacheTestFillBuffer(buf->data(), kSize, false); | 2123 CacheTestFillBuffer(buf->data(), kSize, false); |
| 2119 | 2124 |
| 2120 int64 offset = 1024; | 2125 int64_t offset = 1024; |
| 2121 // Write to a bunch of ranges. | 2126 // Write to a bunch of ranges. |
| 2122 for (int i = 0; i < 12; i++) { | 2127 for (int i = 0; i < 12; i++) { |
| 2123 EXPECT_EQ(kSize, WriteSparseData(entry1, offset, buf.get(), kSize)); | 2128 EXPECT_EQ(kSize, WriteSparseData(entry1, offset, buf.get(), kSize)); |
| 2124 // Keep the second map under the default size. | 2129 // Keep the second map under the default size. |
| 2125 if (i < 9) | 2130 if (i < 9) |
| 2126 EXPECT_EQ(kSize, WriteSparseData(entry2, offset, buf.get(), kSize)); | 2131 EXPECT_EQ(kSize, WriteSparseData(entry2, offset, buf.get(), kSize)); |
| 2127 | 2132 |
| 2128 offset *= 4; | 2133 offset *= 4; |
| 2129 } | 2134 } |
| 2130 | 2135 |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2198 UseCurrentThread(); | 2203 UseCurrentThread(); |
| 2199 InitCache(); | 2204 InitCache(); |
| 2200 std::string key("the key"); | 2205 std::string key("the key"); |
| 2201 disk_cache::Entry* entry; | 2206 disk_cache::Entry* entry; |
| 2202 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 2207 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 2203 | 2208 |
| 2204 const int kSize = 4 * 1024; | 2209 const int kSize = 4 * 1024; |
| 2205 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); | 2210 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); |
| 2206 CacheTestFillBuffer(buf->data(), kSize, false); | 2211 CacheTestFillBuffer(buf->data(), kSize, false); |
| 2207 | 2212 |
| 2208 int64 offset = 1024; | 2213 int64_t offset = 1024; |
| 2209 // Write to a bunch of ranges. | 2214 // Write to a bunch of ranges. |
| 2210 for (int i = 0; i < 12; i++) { | 2215 for (int i = 0; i < 12; i++) { |
| 2211 EXPECT_EQ(kSize, | 2216 EXPECT_EQ(kSize, |
| 2212 entry->WriteSparseData( | 2217 entry->WriteSparseData( |
| 2213 offset, buf.get(), kSize, net::CompletionCallback())); | 2218 offset, buf.get(), kSize, net::CompletionCallback())); |
| 2214 offset *= 4; | 2219 offset *= 4; |
| 2215 } | 2220 } |
| 2216 EXPECT_EQ(9, cache_->GetEntryCount()); | 2221 EXPECT_EQ(9, cache_->GetEntryCount()); |
| 2217 | 2222 |
| 2218 entry->Close(); | 2223 entry->Close(); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2256 // This read should not change anything. | 2261 // This read should not change anything. |
| 2257 if (memory_only_ || simple_cache_mode_) | 2262 if (memory_only_ || simple_cache_mode_) |
| 2258 EXPECT_EQ(96, ReadSparseData(entry, 24000, buf2.get(), kSize)); | 2263 EXPECT_EQ(96, ReadSparseData(entry, 24000, buf2.get(), kSize)); |
| 2259 else | 2264 else |
| 2260 EXPECT_EQ(0, ReadSparseData(entry, 24000, buf2.get(), kSize)); | 2265 EXPECT_EQ(0, ReadSparseData(entry, 24000, buf2.get(), kSize)); |
| 2261 | 2266 |
| 2262 EXPECT_EQ(500, ReadSparseData(entry, kSize, buf2.get(), kSize)); | 2267 EXPECT_EQ(500, ReadSparseData(entry, kSize, buf2.get(), kSize)); |
| 2263 EXPECT_EQ(0, ReadSparseData(entry, 99, buf2.get(), kSize)); | 2268 EXPECT_EQ(0, ReadSparseData(entry, 99, buf2.get(), kSize)); |
| 2264 | 2269 |
| 2265 int rv; | 2270 int rv; |
| 2266 int64 start; | 2271 int64_t start; |
| 2267 net::TestCompletionCallback cb; | 2272 net::TestCompletionCallback cb; |
| 2268 if (memory_only_ || simple_cache_mode_) { | 2273 if (memory_only_ || simple_cache_mode_) { |
| 2269 rv = entry->GetAvailableRange(0, 600, &start, cb.callback()); | 2274 rv = entry->GetAvailableRange(0, 600, &start, cb.callback()); |
| 2270 EXPECT_EQ(100, cb.GetResult(rv)); | 2275 EXPECT_EQ(100, cb.GetResult(rv)); |
| 2271 EXPECT_EQ(500, start); | 2276 EXPECT_EQ(500, start); |
| 2272 } else { | 2277 } else { |
| 2273 rv = entry->GetAvailableRange(0, 2048, &start, cb.callback()); | 2278 rv = entry->GetAvailableRange(0, 2048, &start, cb.callback()); |
| 2274 EXPECT_EQ(1024, cb.GetResult(rv)); | 2279 EXPECT_EQ(1024, cb.GetResult(rv)); |
| 2275 EXPECT_EQ(1024, start); | 2280 EXPECT_EQ(1024, start); |
| 2276 } | 2281 } |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2388 const int kSize = 40 * 1024; | 2393 const int kSize = 40 * 1024; |
| 2389 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); | 2394 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); |
| 2390 CacheTestFillBuffer(buf->data(), kSize, false); | 2395 CacheTestFillBuffer(buf->data(), kSize, false); |
| 2391 | 2396 |
| 2392 // This will open and write two "real" entries. | 2397 // This will open and write two "real" entries. |
| 2393 net::TestCompletionCallback cb1, cb2, cb3, cb4, cb5; | 2398 net::TestCompletionCallback cb1, cb2, cb3, cb4, cb5; |
| 2394 int rv = entry->WriteSparseData( | 2399 int rv = entry->WriteSparseData( |
| 2395 1024 * 1024 - 4096, buf.get(), kSize, cb1.callback()); | 2400 1024 * 1024 - 4096, buf.get(), kSize, cb1.callback()); |
| 2396 EXPECT_EQ(net::ERR_IO_PENDING, rv); | 2401 EXPECT_EQ(net::ERR_IO_PENDING, rv); |
| 2397 | 2402 |
| 2398 int64 offset = 0; | 2403 int64_t offset = 0; |
| 2399 rv = entry->GetAvailableRange(offset, kSize, &offset, cb5.callback()); | 2404 rv = entry->GetAvailableRange(offset, kSize, &offset, cb5.callback()); |
| 2400 rv = cb5.GetResult(rv); | 2405 rv = cb5.GetResult(rv); |
| 2401 if (!cb1.have_result()) { | 2406 if (!cb1.have_result()) { |
| 2402 // We may or may not have finished writing to the entry. If we have not, | 2407 // We may or may not have finished writing to the entry. If we have not, |
| 2403 // we cannot start another operation at this time. | 2408 // we cannot start another operation at this time. |
| 2404 EXPECT_EQ(net::ERR_CACHE_OPERATION_NOT_SUPPORTED, rv); | 2409 EXPECT_EQ(net::ERR_CACHE_OPERATION_NOT_SUPPORTED, rv); |
| 2405 } | 2410 } |
| 2406 | 2411 |
| 2407 // We cancel the pending operation, and register multiple notifications. | 2412 // We cancel the pending operation, and register multiple notifications. |
| 2408 entry->CancelSparseIO(); | 2413 entry->CancelSparseIO(); |
| (...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2630 entry = NULL; | 2635 entry = NULL; |
| 2631 | 2636 |
| 2632 // Corrupt the last byte of the data. | 2637 // Corrupt the last byte of the data. |
| 2633 base::FilePath entry_file0_path = cache_path_.AppendASCII( | 2638 base::FilePath entry_file0_path = cache_path_.AppendASCII( |
| 2634 disk_cache::simple_util::GetFilenameFromKeyAndFileIndex(key, 0)); | 2639 disk_cache::simple_util::GetFilenameFromKeyAndFileIndex(key, 0)); |
| 2635 base::File entry_file0(entry_file0_path, | 2640 base::File entry_file0(entry_file0_path, |
| 2636 base::File::FLAG_WRITE | base::File::FLAG_OPEN); | 2641 base::File::FLAG_WRITE | base::File::FLAG_OPEN); |
| 2637 if (!entry_file0.IsValid()) | 2642 if (!entry_file0.IsValid()) |
| 2638 return false; | 2643 return false; |
| 2639 | 2644 |
| 2640 int64 file_offset = | 2645 int64_t file_offset = |
| 2641 sizeof(disk_cache::SimpleFileHeader) + key.size() + kDataSize - 2; | 2646 sizeof(disk_cache::SimpleFileHeader) + key.size() + kDataSize - 2; |
| 2642 EXPECT_EQ(1, entry_file0.Write(file_offset, "X", 1)); | 2647 EXPECT_EQ(1, entry_file0.Write(file_offset, "X", 1)); |
| 2643 *data_size = kDataSize; | 2648 *data_size = kDataSize; |
| 2644 return true; | 2649 return true; |
| 2645 } | 2650 } |
| 2646 | 2651 |
| 2647 // Tests that the simple cache can detect entries that have bad data. | 2652 // Tests that the simple cache can detect entries that have bad data. |
| 2648 TEST_F(DiskCacheEntryTest, SimpleCacheBadChecksum) { | 2653 TEST_F(DiskCacheEntryTest, SimpleCacheBadChecksum) { |
| 2649 SetSimpleCacheMode(); | 2654 SetSimpleCacheMode(); |
| 2650 InitCache(); | 2655 InitCache(); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2683 | 2688 |
| 2684 const int kReadBufferSize = 200; | 2689 const int kReadBufferSize = 200; |
| 2685 EXPECT_GE(kReadBufferSize, entry->GetDataSize(1)); | 2690 EXPECT_GE(kReadBufferSize, entry->GetDataSize(1)); |
| 2686 scoped_refptr<net::IOBuffer> read_buffer(new net::IOBuffer(kReadBufferSize)); | 2691 scoped_refptr<net::IOBuffer> read_buffer(new net::IOBuffer(kReadBufferSize)); |
| 2687 EXPECT_EQ(net::ERR_CACHE_CHECKSUM_MISMATCH, | 2692 EXPECT_EQ(net::ERR_CACHE_CHECKSUM_MISMATCH, |
| 2688 ReadData(entry, 1, 0, read_buffer.get(), kReadBufferSize)); | 2693 ReadData(entry, 1, 0, read_buffer.get(), kReadBufferSize)); |
| 2689 | 2694 |
| 2690 entry->Doom(); // Should not crash. | 2695 entry->Doom(); // Should not crash. |
| 2691 } | 2696 } |
| 2692 | 2697 |
| 2693 bool TruncatePath(const base::FilePath& file_path, int64 length) { | 2698 bool TruncatePath(const base::FilePath& file_path, int64_t length) { |
| 2694 base::File file(file_path, base::File::FLAG_WRITE | base::File::FLAG_OPEN); | 2699 base::File file(file_path, base::File::FLAG_WRITE | base::File::FLAG_OPEN); |
| 2695 if (!file.IsValid()) | 2700 if (!file.IsValid()) |
| 2696 return false; | 2701 return false; |
| 2697 return file.SetLength(length); | 2702 return file.SetLength(length); |
| 2698 } | 2703 } |
| 2699 | 2704 |
| 2700 TEST_F(DiskCacheEntryTest, SimpleCacheNoEOF) { | 2705 TEST_F(DiskCacheEntryTest, SimpleCacheNoEOF) { |
| 2701 SetSimpleCacheMode(); | 2706 SetSimpleCacheMode(); |
| 2702 InitCache(); | 2707 InitCache(); |
| 2703 | 2708 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 2714 // succed. | 2719 // succed. |
| 2715 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 2720 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
| 2716 entry->Close(); | 2721 entry->Close(); |
| 2717 entry = NULL; | 2722 entry = NULL; |
| 2718 | 2723 |
| 2719 // Truncate the file such that the length isn't sufficient to have an EOF | 2724 // Truncate the file such that the length isn't sufficient to have an EOF |
| 2720 // record. | 2725 // record. |
| 2721 int kTruncationBytes = -static_cast<int>(sizeof(disk_cache::SimpleFileEOF)); | 2726 int kTruncationBytes = -static_cast<int>(sizeof(disk_cache::SimpleFileEOF)); |
| 2722 const base::FilePath entry_path = cache_path_.AppendASCII( | 2727 const base::FilePath entry_path = cache_path_.AppendASCII( |
| 2723 disk_cache::simple_util::GetFilenameFromKeyAndFileIndex(key, 0)); | 2728 disk_cache::simple_util::GetFilenameFromKeyAndFileIndex(key, 0)); |
| 2724 const int64 invalid_size = | 2729 const int64_t invalid_size = |
| 2725 disk_cache::simple_util::GetFileSizeFromKeyAndDataSize(key, | 2730 disk_cache::simple_util::GetFileSizeFromKeyAndDataSize(key, |
| 2726 kTruncationBytes); | 2731 kTruncationBytes); |
| 2727 EXPECT_TRUE(TruncatePath(entry_path, invalid_size)); | 2732 EXPECT_TRUE(TruncatePath(entry_path, invalid_size)); |
| 2728 EXPECT_EQ(net::ERR_FAILED, OpenEntry(key, &entry)); | 2733 EXPECT_EQ(net::ERR_FAILED, OpenEntry(key, &entry)); |
| 2729 DisableIntegrityCheck(); | 2734 DisableIntegrityCheck(); |
| 2730 } | 2735 } |
| 2731 | 2736 |
| 2732 TEST_F(DiskCacheEntryTest, SimpleCacheNonOptimisticOperationsBasic) { | 2737 TEST_F(DiskCacheEntryTest, SimpleCacheNonOptimisticOperationsBasic) { |
| 2733 // Test sequence: | 2738 // Test sequence: |
| 2734 // Create, Write, Read, Close. | 2739 // Create, Write, Read, Close. |
| (...skipping 1416 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4151 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 4156 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
| 4152 | 4157 |
| 4153 ret = entry->ReadSparseData(0, buffer.get(), kSize, callback.callback()); | 4158 ret = entry->ReadSparseData(0, buffer.get(), kSize, callback.callback()); |
| 4154 EXPECT_EQ(0, callback.GetResult(ret)); | 4159 EXPECT_EQ(0, callback.GetResult(ret)); |
| 4155 | 4160 |
| 4156 ret = entry->ReadSparseData(kSize, buffer.get(), kSize, callback.callback()); | 4161 ret = entry->ReadSparseData(kSize, buffer.get(), kSize, callback.callback()); |
| 4157 EXPECT_EQ(kSize, callback.GetResult(ret)); | 4162 EXPECT_EQ(kSize, callback.GetResult(ret)); |
| 4158 | 4163 |
| 4159 entry->Close(); | 4164 entry->Close(); |
| 4160 } | 4165 } |
| OLD | NEW |