| OLD | NEW |
| 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/platform_thread.h" | 6 #include "base/platform_thread.h" |
| 7 #include "base/timer.h" | 7 #include "base/timer.h" |
| 8 #include "base/string_util.h" | 8 #include "base/string_util.h" |
| 9 #include "net/base/io_buffer.h" | |
| 10 #include "net/base/net_errors.h" | 9 #include "net/base/net_errors.h" |
| 11 #include "net/disk_cache/disk_cache_test_base.h" | 10 #include "net/disk_cache/disk_cache_test_base.h" |
| 12 #include "net/disk_cache/disk_cache_test_util.h" | 11 #include "net/disk_cache/disk_cache_test_util.h" |
| 13 #include "net/disk_cache/entry_impl.h" | 12 #include "net/disk_cache/entry_impl.h" |
| 14 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
| 15 | 14 |
| 16 using base::Time; | 15 using base::Time; |
| 17 | 16 |
| 18 extern int g_cache_tests_max_id; | 17 extern int g_cache_tests_max_id; |
| 19 extern volatile int g_cache_tests_received; | 18 extern volatile int g_cache_tests_received; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 34 void InvalidData(); | 33 void InvalidData(); |
| 35 void DoomEntry(); | 34 void DoomEntry(); |
| 36 void DoomedEntry(); | 35 void DoomedEntry(); |
| 37 }; | 36 }; |
| 38 | 37 |
| 39 void DiskCacheEntryTest::InternalSyncIO() { | 38 void DiskCacheEntryTest::InternalSyncIO() { |
| 40 disk_cache::Entry *entry1 = NULL; | 39 disk_cache::Entry *entry1 = NULL; |
| 41 ASSERT_TRUE(cache_->CreateEntry("the first key", &entry1)); | 40 ASSERT_TRUE(cache_->CreateEntry("the first key", &entry1)); |
| 42 ASSERT_TRUE(NULL != entry1); | 41 ASSERT_TRUE(NULL != entry1); |
| 43 | 42 |
| 44 const int kSize1 = 10; | 43 char buffer1[10]; |
| 45 scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize1); | 44 CacheTestFillBuffer(buffer1, sizeof(buffer1), false); |
| 46 CacheTestFillBuffer(buffer1->data(), kSize1, false); | 45 EXPECT_EQ(0, entry1->ReadData(0, 0, buffer1, sizeof(buffer1), NULL)); |
| 47 EXPECT_EQ(0, entry1->ReadData(0, 0, buffer1, kSize1, NULL)); | 46 base::strlcpy(buffer1, "the data", arraysize(buffer1)); |
| 48 base::strlcpy(buffer1->data(), "the data", kSize1); | 47 EXPECT_EQ(10, entry1->WriteData(0, 0, buffer1, sizeof(buffer1), NULL, false)); |
| 49 EXPECT_EQ(10, entry1->WriteData(0, 0, buffer1, kSize1, NULL, false)); | 48 memset(buffer1, 0, sizeof(buffer1)); |
| 50 memset(buffer1->data(), 0, kSize1); | 49 EXPECT_EQ(10, entry1->ReadData(0, 0, buffer1, sizeof(buffer1), NULL)); |
| 51 EXPECT_EQ(10, entry1->ReadData(0, 0, buffer1, kSize1, NULL)); | 50 EXPECT_STREQ("the data", buffer1); |
| 52 EXPECT_STREQ("the data", buffer1->data()); | |
| 53 | 51 |
| 54 const int kSize2 = 5000; | 52 char buffer2[5000]; |
| 55 const int kSize3 = 10000; | 53 char buffer3[10000] = {0}; |
| 56 scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize2); | 54 CacheTestFillBuffer(buffer2, sizeof(buffer2), false); |
| 57 scoped_refptr<net::IOBuffer> buffer3 = new net::IOBuffer(kSize3); | 55 base::strlcpy(buffer2, "The really big data goes here", arraysize(buffer2)); |
| 58 memset(buffer3->data(), 0, kSize3); | 56 EXPECT_EQ(5000, entry1->WriteData(1, 1500, buffer2, sizeof(buffer2), NULL, |
| 59 CacheTestFillBuffer(buffer2->data(), kSize2, false); | 57 false)); |
| 60 base::strlcpy(buffer2->data(), "The really big data goes here", kSize2); | 58 memset(buffer2, 0, sizeof(buffer2)); |
| 61 EXPECT_EQ(5000, entry1->WriteData(1, 1500, buffer2, kSize2, NULL, false)); | 59 EXPECT_EQ(4989, entry1->ReadData(1, 1511, buffer2, sizeof(buffer2), NULL)); |
| 62 memset(buffer2->data(), 0, kSize2); | 60 EXPECT_STREQ("big data goes here", buffer2); |
| 63 EXPECT_EQ(4989, entry1->ReadData(1, 1511, buffer2, kSize2, NULL)); | 61 EXPECT_EQ(5000, entry1->ReadData(1, 0, buffer2, sizeof(buffer2), NULL)); |
| 64 EXPECT_STREQ("big data goes here", buffer2->data()); | 62 EXPECT_EQ(0, memcmp(buffer2, buffer3, 1500)); |
| 65 EXPECT_EQ(5000, entry1->ReadData(1, 0, buffer2, kSize2, NULL)); | 63 EXPECT_EQ(1500, entry1->ReadData(1, 5000, buffer2, sizeof(buffer2), NULL)); |
| 66 EXPECT_EQ(0, memcmp(buffer2->data(), buffer3->data(), 1500)); | |
| 67 EXPECT_EQ(1500, entry1->ReadData(1, 5000, buffer2, kSize2, NULL)); | |
| 68 | 64 |
| 69 EXPECT_EQ(0, entry1->ReadData(1, 6500, buffer2, kSize2, NULL)); | 65 EXPECT_EQ(0, entry1->ReadData(1, 6500, buffer2, sizeof(buffer2), NULL)); |
| 70 EXPECT_EQ(6500, entry1->ReadData(1, 0, buffer3, kSize3, NULL)); | 66 EXPECT_EQ(6500, entry1->ReadData(1, 0, buffer3, sizeof(buffer3), NULL)); |
| 71 EXPECT_EQ(8192, entry1->WriteData(1, 0, buffer3, 8192, NULL, false)); | 67 EXPECT_EQ(8192, entry1->WriteData(1, 0, buffer3, 8192, NULL, false)); |
| 72 EXPECT_EQ(8192, entry1->ReadData(1, 0, buffer3, kSize3, NULL)); | 68 EXPECT_EQ(8192, entry1->ReadData(1, 0, buffer3, sizeof(buffer3), NULL)); |
| 73 EXPECT_EQ(8192, entry1->GetDataSize(1)); | 69 EXPECT_EQ(8192, entry1->GetDataSize(1)); |
| 74 | 70 |
| 75 entry1->Doom(); | 71 entry1->Doom(); |
| 76 entry1->Close(); | 72 entry1->Close(); |
| 77 EXPECT_EQ(0, cache_->GetEntryCount()); | 73 EXPECT_EQ(0, cache_->GetEntryCount()); |
| 78 } | 74 } |
| 79 | 75 |
| 80 TEST_F(DiskCacheEntryTest, InternalSyncIO) { | 76 TEST_F(DiskCacheEntryTest, InternalSyncIO) { |
| 81 InitCache(); | 77 InitCache(); |
| 82 InternalSyncIO(); | 78 InternalSyncIO(); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 107 CallbackTest callback11(11, false); | 103 CallbackTest callback11(11, false); |
| 108 CallbackTest callback12(12, false); | 104 CallbackTest callback12(12, false); |
| 109 CallbackTest callback13(13, false); | 105 CallbackTest callback13(13, false); |
| 110 | 106 |
| 111 g_cache_tests_error = false; | 107 g_cache_tests_error = false; |
| 112 g_cache_tests_max_id = 0; | 108 g_cache_tests_max_id = 0; |
| 113 g_cache_tests_received = 0; | 109 g_cache_tests_received = 0; |
| 114 | 110 |
| 115 MessageLoopHelper helper; | 111 MessageLoopHelper helper; |
| 116 | 112 |
| 117 const int kSize1 = 10; | 113 char buffer1[10]; |
| 118 const int kSize2 = 5000; | 114 char buffer2[5000]; |
| 119 const int kSize3 = 10000; | 115 char buffer3[10000]; |
| 120 scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize1); | 116 CacheTestFillBuffer(buffer1, sizeof(buffer1), false); |
| 121 scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize2); | 117 CacheTestFillBuffer(buffer2, sizeof(buffer2), false); |
| 122 scoped_refptr<net::IOBuffer> buffer3 = new net::IOBuffer(kSize3); | 118 CacheTestFillBuffer(buffer3, sizeof(buffer3), false); |
| 123 CacheTestFillBuffer(buffer1->data(), kSize1, false); | |
| 124 CacheTestFillBuffer(buffer2->data(), kSize2, false); | |
| 125 CacheTestFillBuffer(buffer3->data(), kSize3, false); | |
| 126 | 119 |
| 127 EXPECT_EQ(0, entry1->ReadData(0, 0, buffer1, kSize1, &callback1)); | 120 EXPECT_EQ(0, entry1->ReadData(0, 0, buffer1, sizeof(buffer1), &callback1)); |
| 128 base::strlcpy(buffer1->data(), "the data", kSize1); | 121 base::strlcpy(buffer1, "the data", arraysize(buffer1)); |
| 129 int expected = 0; | 122 int expected = 0; |
| 130 int ret = entry1->WriteData(0, 0, buffer1, kSize1, &callback2, false); | 123 int ret = entry1->WriteData(0, 0, buffer1, sizeof(buffer1), &callback2, |
| 124 false); |
| 131 EXPECT_TRUE(10 == ret || net::ERR_IO_PENDING == ret); | 125 EXPECT_TRUE(10 == ret || net::ERR_IO_PENDING == ret); |
| 132 if (net::ERR_IO_PENDING == ret) | 126 if (net::ERR_IO_PENDING == ret) |
| 133 expected++; | 127 expected++; |
| 134 | 128 |
| 135 memset(buffer2->data(), 0, kSize1); | 129 memset(buffer2, 0, sizeof(buffer1)); |
| 136 ret = entry1->ReadData(0, 0, buffer2, kSize1, &callback3); | 130 ret = entry1->ReadData(0, 0, buffer2, sizeof(buffer1), &callback3); |
| 137 EXPECT_TRUE(10 == ret || net::ERR_IO_PENDING == ret); | 131 EXPECT_TRUE(10 == ret || net::ERR_IO_PENDING == ret); |
| 138 if (net::ERR_IO_PENDING == ret) | 132 if (net::ERR_IO_PENDING == ret) |
| 139 expected++; | 133 expected++; |
| 140 | 134 |
| 141 g_cache_tests_max_id = 3; | 135 g_cache_tests_max_id = 3; |
| 142 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 136 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
| 143 EXPECT_STREQ("the data", buffer2->data()); | 137 EXPECT_STREQ("the data", buffer2); |
| 144 | 138 |
| 145 base::strlcpy(buffer2->data(), "The really big data goes here", kSize2); | 139 base::strlcpy(buffer2, "The really big data goes here", arraysize(buffer2)); |
| 146 ret = entry1->WriteData(1, 1500, buffer2, kSize2, &callback4, false); | 140 ret = entry1->WriteData(1, 1500, buffer2, sizeof(buffer2), &callback4, false); |
| 147 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); | 141 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); |
| 148 if (net::ERR_IO_PENDING == ret) | 142 if (net::ERR_IO_PENDING == ret) |
| 149 expected++; | 143 expected++; |
| 150 | 144 |
| 151 memset(buffer3->data(), 0, kSize2); | 145 memset(buffer3, 0, sizeof(buffer2)); |
| 152 ret = entry1->ReadData(1, 1511, buffer3, kSize2, &callback5); | 146 ret = entry1->ReadData(1, 1511, buffer3, sizeof(buffer2), &callback5); |
| 153 EXPECT_TRUE(4989 == ret || net::ERR_IO_PENDING == ret); | 147 EXPECT_TRUE(4989 == ret || net::ERR_IO_PENDING == ret); |
| 154 if (net::ERR_IO_PENDING == ret) | 148 if (net::ERR_IO_PENDING == ret) |
| 155 expected++; | 149 expected++; |
| 156 | 150 |
| 157 g_cache_tests_max_id = 5; | 151 g_cache_tests_max_id = 5; |
| 158 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 152 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
| 159 EXPECT_STREQ("big data goes here", buffer3->data()); | 153 EXPECT_STREQ("big data goes here", buffer3); |
| 160 ret = entry1->ReadData(1, 0, buffer2, kSize2, &callback6); | 154 ret = entry1->ReadData(1, 0, buffer2, sizeof(buffer2), &callback6); |
| 161 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); | 155 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); |
| 162 if (net::ERR_IO_PENDING == ret) | 156 if (net::ERR_IO_PENDING == ret) |
| 163 expected++; | 157 expected++; |
| 164 | 158 |
| 165 memset(buffer3->data(), 0, kSize3); | 159 memset(buffer3, 0, sizeof(buffer3)); |
| 166 | 160 |
| 167 g_cache_tests_max_id = 6; | 161 g_cache_tests_max_id = 6; |
| 168 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 162 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
| 169 EXPECT_EQ(0, memcmp(buffer2->data(), buffer3->data(), 1500)); | 163 EXPECT_EQ(0, memcmp(buffer2, buffer3, 1500)); |
| 170 ret = entry1->ReadData(1, 5000, buffer2, kSize2, &callback7); | 164 ret = entry1->ReadData(1, 5000, buffer2, sizeof(buffer2), &callback7); |
| 171 EXPECT_TRUE(1500 == ret || net::ERR_IO_PENDING == ret); | 165 EXPECT_TRUE(1500 == ret || net::ERR_IO_PENDING == ret); |
| 172 if (net::ERR_IO_PENDING == ret) | 166 if (net::ERR_IO_PENDING == ret) |
| 173 expected++; | 167 expected++; |
| 174 | 168 |
| 175 EXPECT_EQ(0, entry1->ReadData(1, 6500, buffer2, kSize2, &callback8)); | 169 EXPECT_EQ(0, entry1->ReadData(1, 6500, buffer2, sizeof(buffer2), &callback8)); |
| 176 ret = entry1->ReadData(1, 0, buffer3, kSize3, &callback9); | 170 ret = entry1->ReadData(1, 0, buffer3, sizeof(buffer3), &callback9); |
| 177 EXPECT_TRUE(6500 == ret || net::ERR_IO_PENDING == ret); | 171 EXPECT_TRUE(6500 == ret || net::ERR_IO_PENDING == ret); |
| 178 if (net::ERR_IO_PENDING == ret) | 172 if (net::ERR_IO_PENDING == ret) |
| 179 expected++; | 173 expected++; |
| 180 | 174 |
| 181 ret = entry1->WriteData(1, 0, buffer3, 8192, &callback10, false); | 175 ret = entry1->WriteData(1, 0, buffer3, 8192, &callback10, false); |
| 182 EXPECT_TRUE(8192 == ret || net::ERR_IO_PENDING == ret); | 176 EXPECT_TRUE(8192 == ret || net::ERR_IO_PENDING == ret); |
| 183 if (net::ERR_IO_PENDING == ret) | 177 if (net::ERR_IO_PENDING == ret) |
| 184 expected++; | 178 expected++; |
| 185 | 179 |
| 186 ret = entry1->ReadData(1, 0, buffer3, kSize3, &callback11); | 180 ret = entry1->ReadData(1, 0, buffer3, sizeof(buffer3), &callback11); |
| 187 EXPECT_TRUE(8192 == ret || net::ERR_IO_PENDING == ret); | 181 EXPECT_TRUE(8192 == ret || net::ERR_IO_PENDING == ret); |
| 188 if (net::ERR_IO_PENDING == ret) | 182 if (net::ERR_IO_PENDING == ret) |
| 189 expected++; | 183 expected++; |
| 190 | 184 |
| 191 EXPECT_EQ(8192, entry1->GetDataSize(1)); | 185 EXPECT_EQ(8192, entry1->GetDataSize(1)); |
| 192 | 186 |
| 193 ret = entry1->ReadData(0, 0, buffer1, kSize1, &callback12); | 187 ret = entry1->ReadData(0, 0, buffer1, sizeof(buffer1), &callback12); |
| 194 EXPECT_TRUE(10 == ret || net::ERR_IO_PENDING == ret); | 188 EXPECT_TRUE(10 == ret || net::ERR_IO_PENDING == ret); |
| 195 if (net::ERR_IO_PENDING == ret) | 189 if (net::ERR_IO_PENDING == ret) |
| 196 expected++; | 190 expected++; |
| 197 | 191 |
| 198 ret = entry1->ReadData(1, 0, buffer2, kSize2, &callback13); | 192 ret = entry1->ReadData(1, 0, buffer2, sizeof(buffer2), &callback13); |
| 199 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); | 193 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); |
| 200 if (net::ERR_IO_PENDING == ret) | 194 if (net::ERR_IO_PENDING == ret) |
| 201 expected++; | 195 expected++; |
| 202 | 196 |
| 203 g_cache_tests_max_id = 13; | 197 g_cache_tests_max_id = 13; |
| 204 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 198 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
| 205 | 199 |
| 206 EXPECT_FALSE(g_cache_tests_error); | 200 EXPECT_FALSE(g_cache_tests_error); |
| 207 EXPECT_EQ(expected, g_cache_tests_received); | 201 EXPECT_EQ(expected, g_cache_tests_received); |
| 208 | 202 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 219 TEST_F(DiskCacheEntryTest, MemoryOnlyInternalAsyncIO) { | 213 TEST_F(DiskCacheEntryTest, MemoryOnlyInternalAsyncIO) { |
| 220 SetMemoryOnlyMode(); | 214 SetMemoryOnlyMode(); |
| 221 InitCache(); | 215 InitCache(); |
| 222 InternalAsyncIO(); | 216 InternalAsyncIO(); |
| 223 } | 217 } |
| 224 | 218 |
| 225 void DiskCacheEntryTest::ExternalSyncIO() { | 219 void DiskCacheEntryTest::ExternalSyncIO() { |
| 226 disk_cache::Entry *entry1; | 220 disk_cache::Entry *entry1; |
| 227 ASSERT_TRUE(cache_->CreateEntry("the first key", &entry1)); | 221 ASSERT_TRUE(cache_->CreateEntry("the first key", &entry1)); |
| 228 | 222 |
| 229 const int kSize1 = 17000; | 223 char buffer1[17000], buffer2[25000]; |
| 230 const int kSize2 = 25000; | 224 CacheTestFillBuffer(buffer1, sizeof(buffer1), false); |
| 231 scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize1); | 225 CacheTestFillBuffer(buffer2, sizeof(buffer2), false); |
| 232 scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize2); | 226 base::strlcpy(buffer1, "the data", arraysize(buffer1)); |
| 233 CacheTestFillBuffer(buffer1->data(), kSize1, false); | 227 EXPECT_EQ(17000, entry1->WriteData(0, 0, buffer1, sizeof(buffer1), NULL, |
| 234 CacheTestFillBuffer(buffer2->data(), kSize2, false); | 228 false)); |
| 235 base::strlcpy(buffer1->data(), "the data", kSize1); | 229 memset(buffer1, 0, sizeof(buffer1)); |
| 236 EXPECT_EQ(17000, entry1->WriteData(0, 0, buffer1, kSize1, NULL, false)); | 230 EXPECT_EQ(17000, entry1->ReadData(0, 0, buffer1, sizeof(buffer1), NULL)); |
| 237 memset(buffer1->data(), 0, kSize1); | 231 EXPECT_STREQ("the data", buffer1); |
| 238 EXPECT_EQ(17000, entry1->ReadData(0, 0, buffer1, kSize1, NULL)); | |
| 239 EXPECT_STREQ("the data", buffer1->data()); | |
| 240 | 232 |
| 241 base::strlcpy(buffer2->data(), "The really big data goes here", kSize2); | 233 base::strlcpy(buffer2, "The really big data goes here", arraysize(buffer2)); |
| 242 EXPECT_EQ(25000, entry1->WriteData(1, 10000, buffer2, kSize2, NULL, false)); | 234 EXPECT_EQ(25000, entry1->WriteData(1, 10000, buffer2, sizeof(buffer2), NULL, |
| 243 memset(buffer2->data(), 0, kSize2); | 235 false)); |
| 244 EXPECT_EQ(24989, entry1->ReadData(1, 10011, buffer2, kSize2, NULL)); | 236 memset(buffer2, 0, sizeof(buffer2)); |
| 245 EXPECT_STREQ("big data goes here", buffer2->data()); | 237 EXPECT_EQ(24989, entry1->ReadData(1, 10011, buffer2, sizeof(buffer2), NULL)); |
| 246 EXPECT_EQ(25000, entry1->ReadData(1, 0, buffer2, kSize2, NULL)); | 238 EXPECT_STREQ("big data goes here", buffer2); |
| 247 EXPECT_EQ(0, memcmp(buffer2->data(), buffer2->data(), 10000)); | 239 EXPECT_EQ(25000, entry1->ReadData(1, 0, buffer2, sizeof(buffer2), NULL)); |
| 248 EXPECT_EQ(5000, entry1->ReadData(1, 30000, buffer2, kSize2, NULL)); | 240 EXPECT_EQ(0, memcmp(buffer2, buffer2, 10000)); |
| 241 EXPECT_EQ(5000, entry1->ReadData(1, 30000, buffer2, sizeof(buffer2), NULL)); |
| 249 | 242 |
| 250 EXPECT_EQ(0, entry1->ReadData(1, 35000, buffer2, kSize2, NULL)); | 243 EXPECT_EQ(0, entry1->ReadData(1, 35000, buffer2, sizeof(buffer2), NULL)); |
| 251 EXPECT_EQ(17000, entry1->ReadData(1, 0, buffer1, kSize1, NULL)); | 244 EXPECT_EQ(17000, entry1->ReadData(1, 0, buffer1, sizeof(buffer1), NULL)); |
| 252 EXPECT_EQ(17000, entry1->WriteData(1, 20000, buffer1, kSize1, NULL, false)); | 245 EXPECT_EQ(17000, entry1->WriteData(1, 20000, buffer1, sizeof(buffer1), NULL, |
| 246 false)); |
| 253 EXPECT_EQ(37000, entry1->GetDataSize(1)); | 247 EXPECT_EQ(37000, entry1->GetDataSize(1)); |
| 254 | 248 |
| 255 entry1->Doom(); | 249 entry1->Doom(); |
| 256 entry1->Close(); | 250 entry1->Close(); |
| 257 EXPECT_EQ(0, cache_->GetEntryCount()); | 251 EXPECT_EQ(0, cache_->GetEntryCount()); |
| 258 } | 252 } |
| 259 | 253 |
| 260 TEST_F(DiskCacheEntryTest, ExternalSyncIO) { | 254 TEST_F(DiskCacheEntryTest, ExternalSyncIO) { |
| 261 InitCache(); | 255 InitCache(); |
| 262 ExternalSyncIO(); | 256 ExternalSyncIO(); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 283 CallbackTest callback8(8, false); | 277 CallbackTest callback8(8, false); |
| 284 CallbackTest callback9(9, false); | 278 CallbackTest callback9(9, false); |
| 285 | 279 |
| 286 g_cache_tests_error = false; | 280 g_cache_tests_error = false; |
| 287 g_cache_tests_max_id = 0; | 281 g_cache_tests_max_id = 0; |
| 288 g_cache_tests_received = 0; | 282 g_cache_tests_received = 0; |
| 289 int expected = 0; | 283 int expected = 0; |
| 290 | 284 |
| 291 MessageLoopHelper helper; | 285 MessageLoopHelper helper; |
| 292 | 286 |
| 293 const int kSize1 = 17000; | 287 char buffer1[17000], buffer2[25000], buffer3[25000]; |
| 294 const int kSize2 = 25000; | 288 CacheTestFillBuffer(buffer1, sizeof(buffer1), false); |
| 295 const int kSize3 = 25000; | 289 CacheTestFillBuffer(buffer2, sizeof(buffer2), false); |
| 296 scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize1); | 290 CacheTestFillBuffer(buffer3, sizeof(buffer3), false); |
| 297 scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize2); | 291 base::strlcpy(buffer1, "the data", arraysize(buffer1)); |
| 298 scoped_refptr<net::IOBuffer> buffer3 = new net::IOBuffer(kSize3); | 292 int ret = entry1->WriteData(0, 0, buffer1, sizeof(buffer1), &callback1, |
| 299 CacheTestFillBuffer(buffer1->data(), kSize1, false); | 293 false); |
| 300 CacheTestFillBuffer(buffer2->data(), kSize2, false); | |
| 301 CacheTestFillBuffer(buffer3->data(), kSize3, false); | |
| 302 base::strlcpy(buffer1->data(), "the data", kSize1); | |
| 303 int ret = entry1->WriteData(0, 0, buffer1, kSize1, &callback1, false); | |
| 304 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); | 294 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); |
| 305 if (net::ERR_IO_PENDING == ret) | 295 if (net::ERR_IO_PENDING == ret) |
| 306 expected++; | 296 expected++; |
| 307 | 297 |
| 308 g_cache_tests_max_id = 1; | 298 g_cache_tests_max_id = 1; |
| 309 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 299 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
| 310 | 300 |
| 311 memset(buffer2->data(), 0, kSize1); | 301 memset(buffer2, 0, sizeof(buffer1)); |
| 312 ret = entry1->ReadData(0, 0, buffer2, kSize1, &callback2); | 302 ret = entry1->ReadData(0, 0, buffer2, sizeof(buffer1), &callback2); |
| 313 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); | 303 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); |
| 314 if (net::ERR_IO_PENDING == ret) | 304 if (net::ERR_IO_PENDING == ret) |
| 315 expected++; | 305 expected++; |
| 316 | 306 |
| 317 g_cache_tests_max_id = 2; | 307 g_cache_tests_max_id = 2; |
| 318 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 308 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
| 319 EXPECT_STREQ("the data", buffer1->data()); | 309 EXPECT_STREQ("the data", buffer1); |
| 320 | 310 |
| 321 base::strlcpy(buffer2->data(), "The really big data goes here", kSize2); | 311 base::strlcpy(buffer2, "The really big data goes here", arraysize(buffer2)); |
| 322 ret = entry1->WriteData(1, 10000, buffer2, kSize2, &callback3, false); | 312 ret = entry1->WriteData(1, 10000, buffer2, sizeof(buffer2), &callback3, |
| 313 false); |
| 323 EXPECT_TRUE(25000 == ret || net::ERR_IO_PENDING == ret); | 314 EXPECT_TRUE(25000 == ret || net::ERR_IO_PENDING == ret); |
| 324 if (net::ERR_IO_PENDING == ret) | 315 if (net::ERR_IO_PENDING == ret) |
| 325 expected++; | 316 expected++; |
| 326 | 317 |
| 327 g_cache_tests_max_id = 3; | 318 g_cache_tests_max_id = 3; |
| 328 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 319 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
| 329 | 320 |
| 330 memset(buffer3->data(), 0, kSize3); | 321 memset(buffer3, 0, sizeof(buffer3)); |
| 331 ret = entry1->ReadData(1, 10011, buffer3, kSize3, &callback4); | 322 ret = entry1->ReadData(1, 10011, buffer3, sizeof(buffer3), &callback4); |
| 332 EXPECT_TRUE(24989 == ret || net::ERR_IO_PENDING == ret); | 323 EXPECT_TRUE(24989 == ret || net::ERR_IO_PENDING == ret); |
| 333 if (net::ERR_IO_PENDING == ret) | 324 if (net::ERR_IO_PENDING == ret) |
| 334 expected++; | 325 expected++; |
| 335 | 326 |
| 336 g_cache_tests_max_id = 4; | 327 g_cache_tests_max_id = 4; |
| 337 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 328 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
| 338 EXPECT_STREQ("big data goes here", buffer3->data()); | 329 EXPECT_STREQ("big data goes here", buffer3); |
| 339 ret = entry1->ReadData(1, 0, buffer2, kSize2, &callback5); | 330 ret = entry1->ReadData(1, 0, buffer2, sizeof(buffer2), &callback5); |
| 340 EXPECT_TRUE(25000 == ret || net::ERR_IO_PENDING == ret); | 331 EXPECT_TRUE(25000 == ret || net::ERR_IO_PENDING == ret); |
| 341 if (net::ERR_IO_PENDING == ret) | 332 if (net::ERR_IO_PENDING == ret) |
| 342 expected++; | 333 expected++; |
| 343 | 334 |
| 344 g_cache_tests_max_id = 5; | 335 g_cache_tests_max_id = 5; |
| 345 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 336 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
| 346 EXPECT_EQ(0, memcmp(buffer2->data(), buffer2->data(), 10000)); | 337 EXPECT_EQ(0, memcmp(buffer2, buffer2, 10000)); |
| 347 ret = entry1->ReadData(1, 30000, buffer2, kSize2, &callback6); | 338 ret = entry1->ReadData(1, 30000, buffer2, sizeof(buffer2), &callback6); |
| 348 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); | 339 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); |
| 349 if (net::ERR_IO_PENDING == ret) | 340 if (net::ERR_IO_PENDING == ret) |
| 350 expected++; | 341 expected++; |
| 351 | 342 |
| 352 EXPECT_EQ(0, entry1->ReadData(1, 35000, buffer2, kSize2, &callback7)); | 343 EXPECT_EQ(0, entry1->ReadData(1, 35000, buffer2, sizeof(buffer2), |
| 353 ret = entry1->ReadData(1, 0, buffer1, kSize1, &callback8); | 344 &callback7)); |
| 345 ret = entry1->ReadData(1, 0, buffer1, sizeof(buffer1), &callback8); |
| 354 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); | 346 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); |
| 355 if (net::ERR_IO_PENDING == ret) | 347 if (net::ERR_IO_PENDING == ret) |
| 356 expected++; | 348 expected++; |
| 357 ret = entry1->WriteData(1, 20000, buffer1, kSize1, &callback9, false); | 349 ret = entry1->WriteData(1, 20000, buffer1, sizeof(buffer1), &callback9, |
| 350 false); |
| 358 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); | 351 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); |
| 359 if (net::ERR_IO_PENDING == ret) | 352 if (net::ERR_IO_PENDING == ret) |
| 360 expected++; | 353 expected++; |
| 361 EXPECT_EQ(37000, entry1->GetDataSize(1)); | 354 EXPECT_EQ(37000, entry1->GetDataSize(1)); |
| 362 | 355 |
| 363 g_cache_tests_max_id = 9; | 356 g_cache_tests_max_id = 9; |
| 364 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 357 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
| 365 | 358 |
| 366 EXPECT_FALSE(g_cache_tests_error); | 359 EXPECT_FALSE(g_cache_tests_error); |
| 367 EXPECT_EQ(expected, g_cache_tests_received); | 360 EXPECT_EQ(expected, g_cache_tests_received); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 381 InitCache(); | 374 InitCache(); |
| 382 ExternalAsyncIO(); | 375 ExternalAsyncIO(); |
| 383 } | 376 } |
| 384 | 377 |
| 385 void DiskCacheEntryTest::StreamAccess() { | 378 void DiskCacheEntryTest::StreamAccess() { |
| 386 disk_cache::Entry *entry = NULL; | 379 disk_cache::Entry *entry = NULL; |
| 387 ASSERT_TRUE(cache_->CreateEntry("the first key", &entry)); | 380 ASSERT_TRUE(cache_->CreateEntry("the first key", &entry)); |
| 388 ASSERT_TRUE(NULL != entry); | 381 ASSERT_TRUE(NULL != entry); |
| 389 | 382 |
| 390 const int kBufferSize = 1024; | 383 const int kBufferSize = 1024; |
| 391 scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kBufferSize); | 384 char buffer1[kBufferSize]; |
| 392 scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kBufferSize); | 385 char buffer2[kBufferSize]; |
| 393 | 386 |
| 394 const int kNumStreams = 3; | 387 const int kNumStreams = 3; |
| 395 for (int i = 0; i < kNumStreams; i++) { | 388 for (int i = 0; i < kNumStreams; i++) { |
| 396 CacheTestFillBuffer(buffer1->data(), kBufferSize, false); | 389 CacheTestFillBuffer(buffer1, kBufferSize, false); |
| 397 EXPECT_EQ(kBufferSize, entry->WriteData(i, 0, buffer1, kBufferSize, NULL, | 390 EXPECT_EQ(kBufferSize, entry->WriteData(i, 0, buffer1, kBufferSize, NULL, |
| 398 false)); | 391 false)); |
| 399 memset(buffer2->data(), 0, kBufferSize); | 392 memset(buffer2, 0, kBufferSize); |
| 400 EXPECT_EQ(kBufferSize, entry->ReadData(i, 0, buffer2, kBufferSize, NULL)); | 393 EXPECT_EQ(kBufferSize, entry->ReadData(i, 0, buffer2, kBufferSize, NULL)); |
| 401 EXPECT_EQ(0, memcmp(buffer1->data(), buffer2->data(), kBufferSize)); | 394 EXPECT_EQ(0, memcmp(buffer1, buffer2, kBufferSize)); |
| 402 } | 395 } |
| 403 | 396 |
| 404 EXPECT_EQ(net::ERR_INVALID_ARGUMENT, | 397 EXPECT_EQ(net::ERR_INVALID_ARGUMENT, |
| 405 entry->ReadData(kNumStreams, 0, buffer1, kBufferSize, NULL)); | 398 entry->ReadData(kNumStreams, 0, buffer1, kBufferSize, NULL)); |
| 406 entry->Close(); | 399 entry->Close(); |
| 407 } | 400 } |
| 408 | 401 |
| 409 TEST_F(DiskCacheEntryTest, StreamAccess) { | 402 TEST_F(DiskCacheEntryTest, StreamAccess) { |
| 410 InitCache(); | 403 InitCache(); |
| 411 StreamAccess(); | 404 StreamAccess(); |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 461 SetMemoryOnlyMode(); | 454 SetMemoryOnlyMode(); |
| 462 InitCache(); | 455 InitCache(); |
| 463 GetKey(); | 456 GetKey(); |
| 464 } | 457 } |
| 465 | 458 |
| 466 void DiskCacheEntryTest::GrowData() { | 459 void DiskCacheEntryTest::GrowData() { |
| 467 std::string key1("the first key"); | 460 std::string key1("the first key"); |
| 468 disk_cache::Entry *entry1, *entry2; | 461 disk_cache::Entry *entry1, *entry2; |
| 469 ASSERT_TRUE(cache_->CreateEntry(key1, &entry1)); | 462 ASSERT_TRUE(cache_->CreateEntry(key1, &entry1)); |
| 470 | 463 |
| 471 const int kSize = 20000; | 464 char buffer1[20000]; |
| 472 scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize); | 465 char buffer2[20000]; |
| 473 scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize); | 466 CacheTestFillBuffer(buffer1, sizeof(buffer1), false); |
| 474 CacheTestFillBuffer(buffer1->data(), kSize, false); | 467 memset(buffer2, 0, sizeof(buffer2)); |
| 475 memset(buffer2->data(), 0, kSize); | |
| 476 | 468 |
| 477 base::strlcpy(buffer1->data(), "the data", kSize); | 469 base::strlcpy(buffer1, "the data", arraysize(buffer1)); |
| 478 EXPECT_EQ(10, entry1->WriteData(0, 0, buffer1, 10, NULL, false)); | 470 EXPECT_EQ(10, entry1->WriteData(0, 0, buffer1, 10, NULL, false)); |
| 479 EXPECT_EQ(10, entry1->ReadData(0, 0, buffer2, 10, NULL)); | 471 EXPECT_EQ(10, entry1->ReadData(0, 0, buffer2, 10, NULL)); |
| 480 EXPECT_STREQ("the data", buffer2->data()); | 472 EXPECT_STREQ("the data", buffer2); |
| 481 EXPECT_EQ(10, entry1->GetDataSize(0)); | 473 EXPECT_EQ(10, entry1->GetDataSize(0)); |
| 482 | 474 |
| 483 EXPECT_EQ(2000, entry1->WriteData(0, 0, buffer1, 2000, NULL, false)); | 475 EXPECT_EQ(2000, entry1->WriteData(0, 0, buffer1, 2000, NULL, false)); |
| 484 EXPECT_EQ(2000, entry1->GetDataSize(0)); | 476 EXPECT_EQ(2000, entry1->GetDataSize(0)); |
| 485 EXPECT_EQ(2000, entry1->ReadData(0, 0, buffer2, 2000, NULL)); | 477 EXPECT_EQ(2000, entry1->ReadData(0, 0, buffer2, 2000, NULL)); |
| 486 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 2000)); | 478 EXPECT_TRUE(!memcmp(buffer1, buffer2, 2000)); |
| 487 | 479 |
| 488 EXPECT_EQ(20000, entry1->WriteData(0, 0, buffer1, kSize, NULL, false)); | 480 EXPECT_EQ(20000, entry1->WriteData(0, 0, buffer1, sizeof(buffer1), NULL, |
| 481 false)); |
| 489 EXPECT_EQ(20000, entry1->GetDataSize(0)); | 482 EXPECT_EQ(20000, entry1->GetDataSize(0)); |
| 490 EXPECT_EQ(20000, entry1->ReadData(0, 0, buffer2, kSize, NULL)); | 483 EXPECT_EQ(20000, entry1->ReadData(0, 0, buffer2, sizeof(buffer2), NULL)); |
| 491 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), kSize)); | 484 EXPECT_TRUE(!memcmp(buffer1, buffer2, sizeof(buffer1))); |
| 492 entry1->Close(); | 485 entry1->Close(); |
| 493 | 486 |
| 494 memset(buffer2->data(), 0, kSize); | 487 memset(buffer2, 0, sizeof(buffer2)); |
| 495 ASSERT_TRUE(cache_->CreateEntry("Second key", &entry2)); | 488 ASSERT_TRUE(cache_->CreateEntry("Second key", &entry2)); |
| 496 EXPECT_EQ(10, entry2->WriteData(0, 0, buffer1, 10, NULL, false)); | 489 EXPECT_EQ(10, entry2->WriteData(0, 0, buffer1, 10, NULL, false)); |
| 497 EXPECT_EQ(10, entry2->GetDataSize(0)); | 490 EXPECT_EQ(10, entry2->GetDataSize(0)); |
| 498 entry2->Close(); | 491 entry2->Close(); |
| 499 | 492 |
| 500 // Go from an internal address to a bigger block size. | 493 // Go from an internal address to a bigger block size. |
| 501 ASSERT_TRUE(cache_->OpenEntry("Second key", &entry2)); | 494 ASSERT_TRUE(cache_->OpenEntry("Second key", &entry2)); |
| 502 EXPECT_EQ(2000, entry2->WriteData(0, 0, buffer1, 2000, NULL, false)); | 495 EXPECT_EQ(2000, entry2->WriteData(0, 0, buffer1, 2000, NULL, false)); |
| 503 EXPECT_EQ(2000, entry2->GetDataSize(0)); | 496 EXPECT_EQ(2000, entry2->GetDataSize(0)); |
| 504 EXPECT_EQ(2000, entry2->ReadData(0, 0, buffer2, 2000, NULL)); | 497 EXPECT_EQ(2000, entry2->ReadData(0, 0, buffer2, 2000, NULL)); |
| 505 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 2000)); | 498 EXPECT_TRUE(!memcmp(buffer1, buffer2, 2000)); |
| 506 entry2->Close(); | 499 entry2->Close(); |
| 507 memset(buffer2->data(), 0, kSize); | 500 memset(buffer2, 0, sizeof(buffer2)); |
| 508 | 501 |
| 509 // Go from an internal address to an external one. | 502 // Go from an internal address to an external one. |
| 510 ASSERT_TRUE(cache_->OpenEntry("Second key", &entry2)); | 503 ASSERT_TRUE(cache_->OpenEntry("Second key", &entry2)); |
| 511 EXPECT_EQ(20000, entry2->WriteData(0, 0, buffer1, kSize, NULL, false)); | 504 EXPECT_EQ(20000, entry2->WriteData(0, 0, buffer1, sizeof(buffer1), NULL, |
| 505 false)); |
| 512 EXPECT_EQ(20000, entry2->GetDataSize(0)); | 506 EXPECT_EQ(20000, entry2->GetDataSize(0)); |
| 513 EXPECT_EQ(20000, entry2->ReadData(0, 0, buffer2, kSize, NULL)); | 507 EXPECT_EQ(20000, entry2->ReadData(0, 0, buffer2, sizeof(buffer2), NULL)); |
| 514 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), kSize)); | 508 EXPECT_TRUE(!memcmp(buffer1, buffer2, sizeof(buffer1))); |
| 515 entry2->Close(); | 509 entry2->Close(); |
| 516 } | 510 } |
| 517 | 511 |
| 518 TEST_F(DiskCacheEntryTest, GrowData) { | 512 TEST_F(DiskCacheEntryTest, GrowData) { |
| 519 InitCache(); | 513 InitCache(); |
| 520 GrowData(); | 514 GrowData(); |
| 521 } | 515 } |
| 522 | 516 |
| 523 TEST_F(DiskCacheEntryTest, MemoryOnlyGrowData) { | 517 TEST_F(DiskCacheEntryTest, MemoryOnlyGrowData) { |
| 524 SetMemoryOnlyMode(); | 518 SetMemoryOnlyMode(); |
| 525 InitCache(); | 519 InitCache(); |
| 526 GrowData(); | 520 GrowData(); |
| 527 } | 521 } |
| 528 | 522 |
| 529 void DiskCacheEntryTest::TruncateData() { | 523 void DiskCacheEntryTest::TruncateData() { |
| 530 std::string key1("the first key"); | 524 std::string key1("the first key"); |
| 531 disk_cache::Entry *entry1; | 525 disk_cache::Entry *entry1; |
| 532 ASSERT_TRUE(cache_->CreateEntry(key1, &entry1)); | 526 ASSERT_TRUE(cache_->CreateEntry(key1, &entry1)); |
| 533 | 527 |
| 534 const int kSize1 = 20000; | 528 char buffer1[20000]; |
| 535 const int kSize2 = 20000; | 529 char buffer2[20000]; |
| 536 scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize1); | |
| 537 scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize2); | |
| 538 | 530 |
| 539 CacheTestFillBuffer(buffer1->data(), kSize1, false); | 531 CacheTestFillBuffer(buffer1, sizeof(buffer1), false); |
| 540 memset(buffer2->data(), 0, kSize2); | 532 memset(buffer2, 0, sizeof(buffer2)); |
| 541 | 533 |
| 542 // Simple truncation: | 534 // Simple truncation: |
| 543 EXPECT_EQ(200, entry1->WriteData(0, 0, buffer1, 200, NULL, false)); | 535 EXPECT_EQ(200, entry1->WriteData(0, 0, buffer1, 200, NULL, false)); |
| 544 EXPECT_EQ(200, entry1->GetDataSize(0)); | 536 EXPECT_EQ(200, entry1->GetDataSize(0)); |
| 545 EXPECT_EQ(100, entry1->WriteData(0, 0, buffer1, 100, NULL, false)); | 537 EXPECT_EQ(100, entry1->WriteData(0, 0, buffer1, 100, NULL, false)); |
| 546 EXPECT_EQ(200, entry1->GetDataSize(0)); | 538 EXPECT_EQ(200, entry1->GetDataSize(0)); |
| 547 EXPECT_EQ(100, entry1->WriteData(0, 0, buffer1, 100, NULL, true)); | 539 EXPECT_EQ(100, entry1->WriteData(0, 0, buffer1, 100, NULL, true)); |
| 548 EXPECT_EQ(100, entry1->GetDataSize(0)); | 540 EXPECT_EQ(100, entry1->GetDataSize(0)); |
| 549 EXPECT_EQ(0, entry1->WriteData(0, 50, buffer1, 0, NULL, true)); | 541 EXPECT_EQ(0, entry1->WriteData(0, 50, buffer1, 0, NULL, true)); |
| 550 EXPECT_EQ(50, entry1->GetDataSize(0)); | 542 EXPECT_EQ(50, entry1->GetDataSize(0)); |
| 551 EXPECT_EQ(0, entry1->WriteData(0, 0, buffer1, 0, NULL, true)); | 543 EXPECT_EQ(0, entry1->WriteData(0, 0, buffer1, 0, NULL, true)); |
| 552 EXPECT_EQ(0, entry1->GetDataSize(0)); | 544 EXPECT_EQ(0, entry1->GetDataSize(0)); |
| 553 entry1->Close(); | 545 entry1->Close(); |
| 554 ASSERT_TRUE(cache_->OpenEntry(key1, &entry1)); | 546 ASSERT_TRUE(cache_->OpenEntry(key1, &entry1)); |
| 555 | 547 |
| 556 // Go to an external file. | 548 // Go to an external file. |
| 557 EXPECT_EQ(20000, entry1->WriteData(0, 0, buffer1, 20000, NULL, true)); | 549 EXPECT_EQ(20000, entry1->WriteData(0, 0, buffer1, 20000, NULL, true)); |
| 558 EXPECT_EQ(20000, entry1->GetDataSize(0)); | 550 EXPECT_EQ(20000, entry1->GetDataSize(0)); |
| 559 EXPECT_EQ(20000, entry1->ReadData(0, 0, buffer2, 20000, NULL)); | 551 EXPECT_EQ(20000, entry1->ReadData(0, 0, buffer2, 20000, NULL)); |
| 560 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 20000)); | 552 EXPECT_TRUE(!memcmp(buffer1, buffer2, 20000)); |
| 561 memset(buffer2->data(), 0, kSize2); | 553 memset(buffer2, 0, sizeof(buffer2)); |
| 562 | 554 |
| 563 // External file truncation | 555 // External file truncation |
| 564 EXPECT_EQ(18000, entry1->WriteData(0, 0, buffer1, 18000, NULL, false)); | 556 EXPECT_EQ(18000, entry1->WriteData(0, 0, buffer1, 18000, NULL, false)); |
| 565 EXPECT_EQ(20000, entry1->GetDataSize(0)); | 557 EXPECT_EQ(20000, entry1->GetDataSize(0)); |
| 566 EXPECT_EQ(18000, entry1->WriteData(0, 0, buffer1, 18000, NULL, true)); | 558 EXPECT_EQ(18000, entry1->WriteData(0, 0, buffer1, 18000, NULL, true)); |
| 567 EXPECT_EQ(18000, entry1->GetDataSize(0)); | 559 EXPECT_EQ(18000, entry1->GetDataSize(0)); |
| 568 EXPECT_EQ(0, entry1->WriteData(0, 17500, buffer1, 0, NULL, true)); | 560 EXPECT_EQ(0, entry1->WriteData(0, 17500, buffer1, 0, NULL, true)); |
| 569 EXPECT_EQ(17500, entry1->GetDataSize(0)); | 561 EXPECT_EQ(17500, entry1->GetDataSize(0)); |
| 570 | 562 |
| 571 // And back to an internal block. | 563 // And back to an internal block. |
| 572 EXPECT_EQ(600, entry1->WriteData(0, 1000, buffer1, 600, NULL, true)); | 564 EXPECT_EQ(600, entry1->WriteData(0, 1000, buffer1, 600, NULL, true)); |
| 573 EXPECT_EQ(1600, entry1->GetDataSize(0)); | 565 EXPECT_EQ(1600, entry1->GetDataSize(0)); |
| 574 EXPECT_EQ(600, entry1->ReadData(0, 1000, buffer2, 600, NULL)); | 566 EXPECT_EQ(600, entry1->ReadData(0, 1000, buffer2, 600, NULL)); |
| 575 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 600)); | 567 EXPECT_TRUE(!memcmp(buffer1, buffer2, 600)); |
| 576 EXPECT_EQ(1000, entry1->ReadData(0, 0, buffer2, 1000, NULL)); | 568 EXPECT_EQ(1000, entry1->ReadData(0, 0, buffer2, 1000, NULL)); |
| 577 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 1000)) << | 569 EXPECT_TRUE(!memcmp(buffer1, buffer2, 1000)) << "Preserves previous data"; |
| 578 "Preserves previous data"; | |
| 579 | 570 |
| 580 // Go from external file to zero length. | 571 // Go from external file to zero length. |
| 581 EXPECT_EQ(20000, entry1->WriteData(0, 0, buffer1, 20000, NULL, true)); | 572 EXPECT_EQ(20000, entry1->WriteData(0, 0, buffer1, 20000, NULL, true)); |
| 582 EXPECT_EQ(20000, entry1->GetDataSize(0)); | 573 EXPECT_EQ(20000, entry1->GetDataSize(0)); |
| 583 EXPECT_EQ(0, entry1->WriteData(0, 0, buffer1, 0, NULL, true)); | 574 EXPECT_EQ(0, entry1->WriteData(0, 0, buffer1, 0, NULL, true)); |
| 584 EXPECT_EQ(0, entry1->GetDataSize(0)); | 575 EXPECT_EQ(0, entry1->GetDataSize(0)); |
| 585 | 576 |
| 586 entry1->Close(); | 577 entry1->Close(); |
| 587 } | 578 } |
| 588 | 579 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 606 // amount of bytes to write each time. | 597 // amount of bytes to write each time. |
| 607 void DiskCacheEntryTest::ReuseEntry(int size) { | 598 void DiskCacheEntryTest::ReuseEntry(int size) { |
| 608 std::string key1("the first key"); | 599 std::string key1("the first key"); |
| 609 disk_cache::Entry *entry; | 600 disk_cache::Entry *entry; |
| 610 ASSERT_TRUE(cache_->CreateEntry(key1, &entry)); | 601 ASSERT_TRUE(cache_->CreateEntry(key1, &entry)); |
| 611 | 602 |
| 612 entry->Close(); | 603 entry->Close(); |
| 613 std::string key2("the second key"); | 604 std::string key2("the second key"); |
| 614 ASSERT_TRUE(cache_->CreateEntry(key2, &entry)); | 605 ASSERT_TRUE(cache_->CreateEntry(key2, &entry)); |
| 615 | 606 |
| 616 scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(size); | 607 scoped_array<char> buffer(new char[size]); |
| 617 CacheTestFillBuffer(buffer->data(), size, false); | 608 CacheTestFillBuffer(buffer.get(), size, false); |
| 618 | 609 |
| 619 for (int i = 0; i < 15; i++) { | 610 for (int i = 0; i < 15; i++) { |
| 620 EXPECT_EQ(0, entry->WriteData(0, 0, buffer, 0, NULL, true)); | 611 EXPECT_EQ(0, entry->WriteData(0, 0, buffer.get(), 0, NULL, true)); |
| 621 EXPECT_EQ(size, entry->WriteData(0, 0, buffer, size, NULL, false)); | 612 EXPECT_EQ(size, entry->WriteData(0, 0, buffer.get(), size, NULL, false)); |
| 622 entry->Close(); | 613 entry->Close(); |
| 623 ASSERT_TRUE(cache_->OpenEntry(key2, &entry)); | 614 ASSERT_TRUE(cache_->OpenEntry(key2, &entry)); |
| 624 } | 615 } |
| 625 | 616 |
| 626 entry->Close(); | 617 entry->Close(); |
| 627 ASSERT_TRUE(cache_->OpenEntry(key1, &entry)) << "have not evicted this entry"; | 618 ASSERT_TRUE(cache_->OpenEntry(key1, &entry)) << "have not evicted this entry"; |
| 628 entry->Close(); | 619 entry->Close(); |
| 629 } | 620 } |
| 630 | 621 |
| 631 TEST_F(DiskCacheEntryTest, ReuseExternalEntry) { | 622 TEST_F(DiskCacheEntryTest, ReuseExternalEntry) { |
| (...skipping 25 matching lines...) Expand all Loading... |
| 657 InitCache(); | 648 InitCache(); |
| 658 ReuseEntry(10 * 1024); | 649 ReuseEntry(10 * 1024); |
| 659 } | 650 } |
| 660 | 651 |
| 661 // Reading somewhere that was not written should return zeros. | 652 // Reading somewhere that was not written should return zeros. |
| 662 void DiskCacheEntryTest::InvalidData() { | 653 void DiskCacheEntryTest::InvalidData() { |
| 663 std::string key1("the first key"); | 654 std::string key1("the first key"); |
| 664 disk_cache::Entry *entry1; | 655 disk_cache::Entry *entry1; |
| 665 ASSERT_TRUE(cache_->CreateEntry(key1, &entry1)); | 656 ASSERT_TRUE(cache_->CreateEntry(key1, &entry1)); |
| 666 | 657 |
| 667 const int kSize1 = 20000; | 658 char buffer1[20000]; |
| 668 const int kSize2 = 20000; | 659 char buffer2[20000]; |
| 669 const int kSize3 = 20000; | 660 char buffer3[20000]; |
| 670 scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize1); | |
| 671 scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize2); | |
| 672 scoped_refptr<net::IOBuffer> buffer3 = new net::IOBuffer(kSize3); | |
| 673 | 661 |
| 674 CacheTestFillBuffer(buffer1->data(), kSize1, false); | 662 CacheTestFillBuffer(buffer1, sizeof(buffer1), false); |
| 675 memset(buffer2->data(), 0, kSize2); | 663 memset(buffer2, 0, sizeof(buffer2)); |
| 676 | 664 |
| 677 // Simple data grow: | 665 // Simple data grow: |
| 678 EXPECT_EQ(200, entry1->WriteData(0, 400, buffer1, 200, NULL, false)); | 666 EXPECT_EQ(200, entry1->WriteData(0, 400, buffer1, 200, NULL, false)); |
| 679 EXPECT_EQ(600, entry1->GetDataSize(0)); | 667 EXPECT_EQ(600, entry1->GetDataSize(0)); |
| 680 EXPECT_EQ(100, entry1->ReadData(0, 300, buffer3, 100, NULL)); | 668 EXPECT_EQ(100, entry1->ReadData(0, 300, buffer3, 100, NULL)); |
| 681 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100)); | 669 EXPECT_TRUE(!memcmp(buffer3, buffer2, 100)); |
| 682 entry1->Close(); | 670 entry1->Close(); |
| 683 ASSERT_TRUE(cache_->OpenEntry(key1, &entry1)); | 671 ASSERT_TRUE(cache_->OpenEntry(key1, &entry1)); |
| 684 | 672 |
| 685 // The entry is now on disk. Load it and extend it. | 673 // The entry is now on disk. Load it and extend it. |
| 686 EXPECT_EQ(200, entry1->WriteData(0, 800, buffer1, 200, NULL, false)); | 674 EXPECT_EQ(200, entry1->WriteData(0, 800, buffer1, 200, NULL, false)); |
| 687 EXPECT_EQ(1000, entry1->GetDataSize(0)); | 675 EXPECT_EQ(1000, entry1->GetDataSize(0)); |
| 688 EXPECT_EQ(100, entry1->ReadData(0, 700, buffer3, 100, NULL)); | 676 EXPECT_EQ(100, entry1->ReadData(0, 700, buffer3, 100, NULL)); |
| 689 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100)); | 677 EXPECT_TRUE(!memcmp(buffer3, buffer2, 100)); |
| 690 entry1->Close(); | 678 entry1->Close(); |
| 691 ASSERT_TRUE(cache_->OpenEntry(key1, &entry1)); | 679 ASSERT_TRUE(cache_->OpenEntry(key1, &entry1)); |
| 692 | 680 |
| 693 // This time using truncate. | 681 // This time using truncate. |
| 694 EXPECT_EQ(200, entry1->WriteData(0, 1800, buffer1, 200, NULL, true)); | 682 EXPECT_EQ(200, entry1->WriteData(0, 1800, buffer1, 200, NULL, true)); |
| 695 EXPECT_EQ(2000, entry1->GetDataSize(0)); | 683 EXPECT_EQ(2000, entry1->GetDataSize(0)); |
| 696 EXPECT_EQ(100, entry1->ReadData(0, 1500, buffer3, 100, NULL)); | 684 EXPECT_EQ(100, entry1->ReadData(0, 1500, buffer3, 100, NULL)); |
| 697 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100)); | 685 EXPECT_TRUE(!memcmp(buffer3, buffer2, 100)); |
| 698 | 686 |
| 699 // Go to an external file. | 687 // Go to an external file. |
| 700 EXPECT_EQ(200, entry1->WriteData(0, 19800, buffer1, 200, NULL, false)); | 688 EXPECT_EQ(200, entry1->WriteData(0, 19800, buffer1, 200, NULL, false)); |
| 701 EXPECT_EQ(20000, entry1->GetDataSize(0)); | 689 EXPECT_EQ(20000, entry1->GetDataSize(0)); |
| 702 EXPECT_EQ(4000, entry1->ReadData(0, 14000, buffer3, 4000, NULL)); | 690 EXPECT_EQ(4000, entry1->ReadData(0, 14000, buffer3, 4000, NULL)); |
| 703 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 4000)); | 691 EXPECT_TRUE(!memcmp(buffer3, buffer2, 4000)); |
| 704 | 692 |
| 705 // And back to an internal block. | 693 // And back to an internal block. |
| 706 EXPECT_EQ(600, entry1->WriteData(0, 1000, buffer1, 600, NULL, true)); | 694 EXPECT_EQ(600, entry1->WriteData(0, 1000, buffer1, 600, NULL, true)); |
| 707 EXPECT_EQ(1600, entry1->GetDataSize(0)); | 695 EXPECT_EQ(1600, entry1->GetDataSize(0)); |
| 708 EXPECT_EQ(600, entry1->ReadData(0, 1000, buffer3, 600, NULL)); | 696 EXPECT_EQ(600, entry1->ReadData(0, 1000, buffer3, 600, NULL)); |
| 709 EXPECT_TRUE(!memcmp(buffer3->data(), buffer1->data(), 600)); | 697 EXPECT_TRUE(!memcmp(buffer3, buffer1, 600)); |
| 710 | 698 |
| 711 // Extend it again. | 699 // Extend it again. |
| 712 EXPECT_EQ(600, entry1->WriteData(0, 2000, buffer1, 600, NULL, false)); | 700 EXPECT_EQ(600, entry1->WriteData(0, 2000, buffer1, 600, NULL, false)); |
| 713 EXPECT_EQ(2600, entry1->GetDataSize(0)); | 701 EXPECT_EQ(2600, entry1->GetDataSize(0)); |
| 714 EXPECT_EQ(200, entry1->ReadData(0, 1800, buffer3, 200, NULL)); | 702 EXPECT_EQ(200, entry1->ReadData(0, 1800, buffer3, 200, NULL)); |
| 715 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 200)); | 703 EXPECT_TRUE(!memcmp(buffer3, buffer2, 200)); |
| 716 | 704 |
| 717 // And again (with truncation flag). | 705 // And again (with truncation flag). |
| 718 EXPECT_EQ(600, entry1->WriteData(0, 3000, buffer1, 600, NULL, true)); | 706 EXPECT_EQ(600, entry1->WriteData(0, 3000, buffer1, 600, NULL, true)); |
| 719 EXPECT_EQ(3600, entry1->GetDataSize(0)); | 707 EXPECT_EQ(3600, entry1->GetDataSize(0)); |
| 720 EXPECT_EQ(200, entry1->ReadData(0, 2800, buffer3, 200, NULL)); | 708 EXPECT_EQ(200, entry1->ReadData(0, 2800, buffer3, 200, NULL)); |
| 721 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 200)); | 709 EXPECT_TRUE(!memcmp(buffer3, buffer2, 200)); |
| 722 | 710 |
| 723 entry1->Close(); | 711 entry1->Close(); |
| 724 } | 712 } |
| 725 | 713 |
| 726 TEST_F(DiskCacheEntryTest, InvalidData) { | 714 TEST_F(DiskCacheEntryTest, InvalidData) { |
| 727 InitCache(); | 715 InitCache(); |
| 728 InvalidData(); | 716 InvalidData(); |
| 729 } | 717 } |
| 730 | 718 |
| 731 TEST_F(DiskCacheEntryTest, MemoryOnlyInvalidData) { | 719 TEST_F(DiskCacheEntryTest, MemoryOnlyInvalidData) { |
| 732 SetMemoryOnlyMode(); | 720 SetMemoryOnlyMode(); |
| 733 InitCache(); | 721 InitCache(); |
| 734 InvalidData(); | 722 InvalidData(); |
| 735 } | 723 } |
| 736 | 724 |
| 737 void DiskCacheEntryTest::DoomEntry() { | 725 void DiskCacheEntryTest::DoomEntry() { |
| 738 std::string key1("the first key"); | 726 std::string key1("the first key"); |
| 739 disk_cache::Entry *entry1; | 727 disk_cache::Entry *entry1; |
| 740 ASSERT_TRUE(cache_->CreateEntry(key1, &entry1)); | 728 ASSERT_TRUE(cache_->CreateEntry(key1, &entry1)); |
| 741 entry1->Doom(); | 729 entry1->Doom(); |
| 742 entry1->Close(); | 730 entry1->Close(); |
| 743 | 731 |
| 744 const int kSize = 20000; | 732 char key_buffer[20000]; |
| 745 scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(kSize); | 733 CacheTestFillBuffer(key_buffer, sizeof(key_buffer), true); |
| 746 CacheTestFillBuffer(buffer->data(), kSize, true); | 734 key_buffer[19999] = '\0'; |
| 747 buffer->data()[19999] = '\0'; | |
| 748 | 735 |
| 749 key1 = buffer->data(); | 736 key1 = key_buffer; |
| 750 ASSERT_TRUE(cache_->CreateEntry(key1, &entry1)); | 737 ASSERT_TRUE(cache_->CreateEntry(key1, &entry1)); |
| 751 EXPECT_EQ(20000, entry1->WriteData(0, 0, buffer, kSize, NULL, false)); | 738 EXPECT_EQ(20000, entry1->WriteData(0, 0, key_buffer, 20000, NULL, false)); |
| 752 EXPECT_EQ(20000, entry1->WriteData(1, 0, buffer, kSize, NULL, false)); | 739 EXPECT_EQ(20000, entry1->WriteData(1, 0, key_buffer, 20000, NULL, false)); |
| 753 entry1->Doom(); | 740 entry1->Doom(); |
| 754 entry1->Close(); | 741 entry1->Close(); |
| 755 | 742 |
| 756 EXPECT_EQ(0, cache_->GetEntryCount()); | 743 EXPECT_EQ(0, cache_->GetEntryCount()); |
| 757 } | 744 } |
| 758 | 745 |
| 759 TEST_F(DiskCacheEntryTest, DoomEntry) { | 746 TEST_F(DiskCacheEntryTest, DoomEntry) { |
| 760 InitCache(); | 747 InitCache(); |
| 761 DoomEntry(); | 748 DoomEntry(); |
| 762 } | 749 } |
| 763 | 750 |
| 764 TEST_F(DiskCacheEntryTest, MemoryOnlyDoomEntry) { | 751 TEST_F(DiskCacheEntryTest, MemoryOnlyDoomEntry) { |
| 765 SetMemoryOnlyMode(); | 752 SetMemoryOnlyMode(); |
| 766 InitCache(); | 753 InitCache(); |
| 767 DoomEntry(); | 754 DoomEntry(); |
| 768 } | 755 } |
| 769 | 756 |
| 770 // Verify that basic operations work as expected with doomed entries. | 757 // Verify that basic operations work as expected with doomed entries. |
| 771 void DiskCacheEntryTest::DoomedEntry() { | 758 void DiskCacheEntryTest::DoomedEntry() { |
| 772 std::string key("the first key"); | 759 std::string key("the first key"); |
| 773 disk_cache::Entry *entry; | 760 disk_cache::Entry *entry; |
| 774 ASSERT_TRUE(cache_->CreateEntry(key, &entry)); | 761 ASSERT_TRUE(cache_->CreateEntry(key, &entry)); |
| 775 entry->Doom(); | 762 entry->Doom(); |
| 776 | 763 |
| 777 EXPECT_EQ(0, cache_->GetEntryCount()); | 764 EXPECT_EQ(0, cache_->GetEntryCount()); |
| 778 Time initial = Time::Now(); | 765 Time initial = Time::Now(); |
| 779 PlatformThread::Sleep(20); | 766 PlatformThread::Sleep(20); |
| 780 | 767 |
| 781 const int kSize1 = 2000; | 768 char buffer1[2000]; |
| 782 const int kSize2 = 2000; | 769 char buffer2[2000]; |
| 783 scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize1); | 770 CacheTestFillBuffer(buffer1, sizeof(buffer1), false); |
| 784 scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize2); | 771 memset(buffer2, 0, sizeof(buffer2)); |
| 785 CacheTestFillBuffer(buffer1->data(), kSize1, false); | |
| 786 memset(buffer2->data(), 0, kSize2); | |
| 787 | 772 |
| 788 EXPECT_EQ(2000, entry->WriteData(0, 0, buffer1, 2000, NULL, false)); | 773 EXPECT_EQ(2000, entry->WriteData(0, 0, buffer1, 2000, NULL, false)); |
| 789 EXPECT_EQ(2000, entry->ReadData(0, 0, buffer2, 2000, NULL)); | 774 EXPECT_EQ(2000, entry->ReadData(0, 0, buffer2, 2000, NULL)); |
| 790 EXPECT_EQ(0, memcmp(buffer1->data(), buffer2->data(), kSize1)); | 775 EXPECT_EQ(0, memcmp(buffer1, buffer2, sizeof(buffer1))); |
| 791 EXPECT_TRUE(initial < entry->GetLastModified()); | 776 EXPECT_TRUE(initial < entry->GetLastModified()); |
| 792 EXPECT_TRUE(initial < entry->GetLastUsed()); | 777 EXPECT_TRUE(initial < entry->GetLastUsed()); |
| 793 | 778 |
| 794 entry->Close(); | 779 entry->Close(); |
| 795 } | 780 } |
| 796 | 781 |
| 797 TEST_F(DiskCacheEntryTest, DoomedEntry) { | 782 TEST_F(DiskCacheEntryTest, DoomedEntry) { |
| 798 InitCache(); | 783 InitCache(); |
| 799 DoomEntry(); | 784 DoomEntry(); |
| 800 } | 785 } |
| 801 | 786 |
| 802 TEST_F(DiskCacheEntryTest, MemoryOnlyDoomedEntry) { | 787 TEST_F(DiskCacheEntryTest, MemoryOnlyDoomedEntry) { |
| 803 SetMemoryOnlyMode(); | 788 SetMemoryOnlyMode(); |
| 804 InitCache(); | 789 InitCache(); |
| 805 DoomEntry(); | 790 DoomEntry(); |
| 806 } | 791 } |
| 807 | 792 |
| OLD | NEW |