| 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" | 5 #include "base/basictypes.h" |
| 6 #include "base/bind.h" | 6 #include "base/bind.h" |
| 7 #include "base/bind_helpers.h" | 7 #include "base/bind_helpers.h" |
| 8 #include "base/file_util.h" | 8 #include "base/file_util.h" |
| 9 #include "base/string_util.h" | 9 #include "base/string_util.h" |
| 10 #include "base/stringprintf.h" | 10 #include "base/stringprintf.h" |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 61 void DoomSparseEntry(); | 61 void DoomSparseEntry(); |
| 62 void PartialSparseEntry(); | 62 void PartialSparseEntry(); |
| 63 void SimpleCacheMakeBadChecksumEntry(const char* key); | 63 void SimpleCacheMakeBadChecksumEntry(const char* key); |
| 64 }; | 64 }; |
| 65 | 65 |
| 66 // This part of the test runs on the background thread. | 66 // This part of the test runs on the background thread. |
| 67 void DiskCacheEntryTest::InternalSyncIOBackground(disk_cache::Entry* entry) { | 67 void DiskCacheEntryTest::InternalSyncIOBackground(disk_cache::Entry* entry) { |
| 68 const int kSize1 = 10; | 68 const int kSize1 = 10; |
| 69 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); | 69 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); |
| 70 CacheTestFillBuffer(buffer1->data(), kSize1, false); | 70 CacheTestFillBuffer(buffer1->data(), kSize1, false); |
| 71 EXPECT_EQ(0, entry->ReadData( | 71 EXPECT_EQ( |
| 72 0, 0, buffer1, kSize1, net::CompletionCallback())); | 72 0, |
| 73 entry->ReadData(0, 0, buffer1.get(), kSize1, net::CompletionCallback())); |
| 73 base::strlcpy(buffer1->data(), "the data", kSize1); | 74 base::strlcpy(buffer1->data(), "the data", kSize1); |
| 74 EXPECT_EQ(10, entry->WriteData( | 75 EXPECT_EQ(10, |
| 75 0, 0, buffer1, kSize1, net::CompletionCallback(), false)); | 76 entry->WriteData( |
| 77 0, 0, buffer1.get(), kSize1, net::CompletionCallback(), false)); |
| 76 memset(buffer1->data(), 0, kSize1); | 78 memset(buffer1->data(), 0, kSize1); |
| 77 EXPECT_EQ(10, entry->ReadData( | 79 EXPECT_EQ( |
| 78 0, 0, buffer1, kSize1, net::CompletionCallback())); | 80 10, |
| 81 entry->ReadData(0, 0, buffer1.get(), kSize1, net::CompletionCallback())); |
| 79 EXPECT_STREQ("the data", buffer1->data()); | 82 EXPECT_STREQ("the data", buffer1->data()); |
| 80 | 83 |
| 81 const int kSize2 = 5000; | 84 const int kSize2 = 5000; |
| 82 const int kSize3 = 10000; | 85 const int kSize3 = 10000; |
| 83 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); | 86 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); |
| 84 scoped_refptr<net::IOBuffer> buffer3(new net::IOBuffer(kSize3)); | 87 scoped_refptr<net::IOBuffer> buffer3(new net::IOBuffer(kSize3)); |
| 85 memset(buffer3->data(), 0, kSize3); | 88 memset(buffer3->data(), 0, kSize3); |
| 86 CacheTestFillBuffer(buffer2->data(), kSize2, false); | 89 CacheTestFillBuffer(buffer2->data(), kSize2, false); |
| 87 base::strlcpy(buffer2->data(), "The really big data goes here", kSize2); | 90 base::strlcpy(buffer2->data(), "The really big data goes here", kSize2); |
| 88 EXPECT_EQ(5000, entry->WriteData( | 91 EXPECT_EQ( |
| 89 1, 1500, buffer2, kSize2, net::CompletionCallback(), false)); | 92 5000, |
| 93 entry->WriteData( |
| 94 1, 1500, buffer2.get(), kSize2, net::CompletionCallback(), false)); |
| 90 memset(buffer2->data(), 0, kSize2); | 95 memset(buffer2->data(), 0, kSize2); |
| 91 EXPECT_EQ(4989, entry->ReadData( | 96 EXPECT_EQ(4989, |
| 92 1, 1511, buffer2, kSize2, net::CompletionCallback())); | 97 entry->ReadData( |
| 98 1, 1511, buffer2.get(), kSize2, net::CompletionCallback())); |
| 93 EXPECT_STREQ("big data goes here", buffer2->data()); | 99 EXPECT_STREQ("big data goes here", buffer2->data()); |
| 94 EXPECT_EQ(5000, entry->ReadData( | 100 EXPECT_EQ( |
| 95 1, 0, buffer2, kSize2, net::CompletionCallback())); | 101 5000, |
| 102 entry->ReadData(1, 0, buffer2.get(), kSize2, net::CompletionCallback())); |
| 96 EXPECT_EQ(0, memcmp(buffer2->data(), buffer3->data(), 1500)); | 103 EXPECT_EQ(0, memcmp(buffer2->data(), buffer3->data(), 1500)); |
| 97 EXPECT_EQ(1500, entry->ReadData( | 104 EXPECT_EQ(1500, |
| 98 1, 5000, buffer2, kSize2, net::CompletionCallback())); | 105 entry->ReadData( |
| 106 1, 5000, buffer2.get(), kSize2, net::CompletionCallback())); |
| 99 | 107 |
| 100 EXPECT_EQ(0, entry->ReadData( | 108 EXPECT_EQ(0, |
| 101 1, 6500, buffer2, kSize2, net::CompletionCallback())); | 109 entry->ReadData( |
| 102 EXPECT_EQ(6500, entry->ReadData( | 110 1, 6500, buffer2.get(), kSize2, net::CompletionCallback())); |
| 103 1, 0, buffer3, kSize3, net::CompletionCallback())); | 111 EXPECT_EQ( |
| 104 EXPECT_EQ(8192, entry->WriteData( | 112 6500, |
| 105 1, 0, buffer3, 8192, net::CompletionCallback(), false)); | 113 entry->ReadData(1, 0, buffer3.get(), kSize3, net::CompletionCallback())); |
| 106 EXPECT_EQ(8192, entry->ReadData( | 114 EXPECT_EQ(8192, |
| 107 1, 0, buffer3, kSize3, net::CompletionCallback())); | 115 entry->WriteData( |
| 116 1, 0, buffer3.get(), 8192, net::CompletionCallback(), false)); |
| 117 EXPECT_EQ( |
| 118 8192, |
| 119 entry->ReadData(1, 0, buffer3.get(), kSize3, net::CompletionCallback())); |
| 108 EXPECT_EQ(8192, entry->GetDataSize(1)); | 120 EXPECT_EQ(8192, entry->GetDataSize(1)); |
| 109 | 121 |
| 110 // We need to delete the memory buffer on this thread. | 122 // We need to delete the memory buffer on this thread. |
| 111 EXPECT_EQ(0, entry->WriteData( | 123 EXPECT_EQ(0, entry->WriteData( |
| 112 0, 0, NULL, 0, net::CompletionCallback(), true)); | 124 0, 0, NULL, 0, net::CompletionCallback(), true)); |
| 113 EXPECT_EQ(0, entry->WriteData( | 125 EXPECT_EQ(0, entry->WriteData( |
| 114 1, 0, NULL, 0, net::CompletionCallback(), true)); | 126 1, 0, NULL, 0, net::CompletionCallback(), true)); |
| 115 } | 127 } |
| 116 | 128 |
| 117 // We need to support synchronous IO even though it is not a supported operation | 129 // We need to support synchronous IO even though it is not a supported operation |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 180 const int kSize1 = 10; | 192 const int kSize1 = 10; |
| 181 const int kSize2 = 5000; | 193 const int kSize2 = 5000; |
| 182 const int kSize3 = 10000; | 194 const int kSize3 = 10000; |
| 183 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); | 195 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); |
| 184 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); | 196 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); |
| 185 scoped_refptr<net::IOBuffer> buffer3(new net::IOBuffer(kSize3)); | 197 scoped_refptr<net::IOBuffer> buffer3(new net::IOBuffer(kSize3)); |
| 186 CacheTestFillBuffer(buffer1->data(), kSize1, false); | 198 CacheTestFillBuffer(buffer1->data(), kSize1, false); |
| 187 CacheTestFillBuffer(buffer2->data(), kSize2, false); | 199 CacheTestFillBuffer(buffer2->data(), kSize2, false); |
| 188 CacheTestFillBuffer(buffer3->data(), kSize3, false); | 200 CacheTestFillBuffer(buffer3->data(), kSize3, false); |
| 189 | 201 |
| 190 EXPECT_EQ(0, entry->ReadData( | 202 EXPECT_EQ(0, |
| 191 0, 15 * 1024, buffer1, kSize1, | 203 entry->ReadData( |
| 192 base::Bind(&CallbackTest::Run, base::Unretained(&callback1)))); | 204 0, |
| 205 15 * 1024, |
| 206 buffer1.get(), |
| 207 kSize1, |
| 208 base::Bind(&CallbackTest::Run, base::Unretained(&callback1)))); |
| 193 base::strlcpy(buffer1->data(), "the data", kSize1); | 209 base::strlcpy(buffer1->data(), "the data", kSize1); |
| 194 int expected = 0; | 210 int expected = 0; |
| 195 int ret = entry->WriteData( | 211 int ret = entry->WriteData( |
| 196 0, 0, buffer1, kSize1, | 212 0, |
| 197 base::Bind(&CallbackTest::Run, base::Unretained(&callback2)), false); | 213 0, |
| 214 buffer1.get(), |
| 215 kSize1, |
| 216 base::Bind(&CallbackTest::Run, base::Unretained(&callback2)), |
| 217 false); |
| 198 EXPECT_TRUE(10 == ret || net::ERR_IO_PENDING == ret); | 218 EXPECT_TRUE(10 == ret || net::ERR_IO_PENDING == ret); |
| 199 if (net::ERR_IO_PENDING == ret) | 219 if (net::ERR_IO_PENDING == ret) |
| 200 expected++; | 220 expected++; |
| 201 | 221 |
| 202 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 222 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
| 203 memset(buffer2->data(), 0, kSize2); | 223 memset(buffer2->data(), 0, kSize2); |
| 204 ret = entry->ReadData( | 224 ret = entry->ReadData( |
| 205 0, 0, buffer2, kSize1, | 225 0, |
| 226 0, |
| 227 buffer2.get(), |
| 228 kSize1, |
| 206 base::Bind(&CallbackTest::Run, base::Unretained(&callback3))); | 229 base::Bind(&CallbackTest::Run, base::Unretained(&callback3))); |
| 207 EXPECT_TRUE(10 == ret || net::ERR_IO_PENDING == ret); | 230 EXPECT_TRUE(10 == ret || net::ERR_IO_PENDING == ret); |
| 208 if (net::ERR_IO_PENDING == ret) | 231 if (net::ERR_IO_PENDING == ret) |
| 209 expected++; | 232 expected++; |
| 210 | 233 |
| 211 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 234 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
| 212 EXPECT_STREQ("the data", buffer2->data()); | 235 EXPECT_STREQ("the data", buffer2->data()); |
| 213 | 236 |
| 214 base::strlcpy(buffer2->data(), "The really big data goes here", kSize2); | 237 base::strlcpy(buffer2->data(), "The really big data goes here", kSize2); |
| 215 ret = entry->WriteData( | 238 ret = entry->WriteData( |
| 216 1, 1500, buffer2, kSize2, | 239 1, |
| 217 base::Bind(&CallbackTest::Run, base::Unretained(&callback4)), true); | 240 1500, |
| 241 buffer2.get(), |
| 242 kSize2, |
| 243 base::Bind(&CallbackTest::Run, base::Unretained(&callback4)), |
| 244 true); |
| 218 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); | 245 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); |
| 219 if (net::ERR_IO_PENDING == ret) | 246 if (net::ERR_IO_PENDING == ret) |
| 220 expected++; | 247 expected++; |
| 221 | 248 |
| 222 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 249 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
| 223 memset(buffer3->data(), 0, kSize3); | 250 memset(buffer3->data(), 0, kSize3); |
| 224 ret = entry->ReadData( | 251 ret = entry->ReadData( |
| 225 1, 1511, buffer3, kSize2, | 252 1, |
| 253 1511, |
| 254 buffer3.get(), |
| 255 kSize2, |
| 226 base::Bind(&CallbackTest::Run, base::Unretained(&callback5))); | 256 base::Bind(&CallbackTest::Run, base::Unretained(&callback5))); |
| 227 EXPECT_TRUE(4989 == ret || net::ERR_IO_PENDING == ret); | 257 EXPECT_TRUE(4989 == ret || net::ERR_IO_PENDING == ret); |
| 228 if (net::ERR_IO_PENDING == ret) | 258 if (net::ERR_IO_PENDING == ret) |
| 229 expected++; | 259 expected++; |
| 230 | 260 |
| 231 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 261 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
| 232 EXPECT_STREQ("big data goes here", buffer3->data()); | 262 EXPECT_STREQ("big data goes here", buffer3->data()); |
| 233 ret = entry->ReadData( | 263 ret = entry->ReadData( |
| 234 1, 0, buffer2, kSize2, | 264 1, |
| 265 0, |
| 266 buffer2.get(), |
| 267 kSize2, |
| 235 base::Bind(&CallbackTest::Run, base::Unretained(&callback6))); | 268 base::Bind(&CallbackTest::Run, base::Unretained(&callback6))); |
| 236 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); | 269 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); |
| 237 if (net::ERR_IO_PENDING == ret) | 270 if (net::ERR_IO_PENDING == ret) |
| 238 expected++; | 271 expected++; |
| 239 | 272 |
| 240 memset(buffer3->data(), 0, kSize3); | 273 memset(buffer3->data(), 0, kSize3); |
| 241 | 274 |
| 242 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 275 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
| 243 EXPECT_EQ(0, memcmp(buffer2->data(), buffer3->data(), 1500)); | 276 EXPECT_EQ(0, memcmp(buffer2->data(), buffer3->data(), 1500)); |
| 244 ret = entry->ReadData( | 277 ret = entry->ReadData( |
| 245 1, 5000, buffer2, kSize2, | 278 1, |
| 279 5000, |
| 280 buffer2.get(), |
| 281 kSize2, |
| 246 base::Bind(&CallbackTest::Run, base::Unretained(&callback7))); | 282 base::Bind(&CallbackTest::Run, base::Unretained(&callback7))); |
| 247 EXPECT_TRUE(1500 == ret || net::ERR_IO_PENDING == ret); | 283 EXPECT_TRUE(1500 == ret || net::ERR_IO_PENDING == ret); |
| 248 if (net::ERR_IO_PENDING == ret) | 284 if (net::ERR_IO_PENDING == ret) |
| 249 expected++; | 285 expected++; |
| 250 | 286 |
| 251 ret = entry->ReadData( | 287 ret = entry->ReadData( |
| 252 1, 0, buffer3, kSize3, | 288 1, |
| 289 0, |
| 290 buffer3.get(), |
| 291 kSize3, |
| 253 base::Bind(&CallbackTest::Run, base::Unretained(&callback9))); | 292 base::Bind(&CallbackTest::Run, base::Unretained(&callback9))); |
| 254 EXPECT_TRUE(6500 == ret || net::ERR_IO_PENDING == ret); | 293 EXPECT_TRUE(6500 == ret || net::ERR_IO_PENDING == ret); |
| 255 if (net::ERR_IO_PENDING == ret) | 294 if (net::ERR_IO_PENDING == ret) |
| 256 expected++; | 295 expected++; |
| 257 | 296 |
| 258 ret = entry->WriteData( | 297 ret = entry->WriteData( |
| 259 1, 0, buffer3, 8192, | 298 1, |
| 260 base::Bind(&CallbackTest::Run, base::Unretained(&callback10)), true); | 299 0, |
| 300 buffer3.get(), |
| 301 8192, |
| 302 base::Bind(&CallbackTest::Run, base::Unretained(&callback10)), |
| 303 true); |
| 261 EXPECT_TRUE(8192 == ret || net::ERR_IO_PENDING == ret); | 304 EXPECT_TRUE(8192 == ret || net::ERR_IO_PENDING == ret); |
| 262 if (net::ERR_IO_PENDING == ret) | 305 if (net::ERR_IO_PENDING == ret) |
| 263 expected++; | 306 expected++; |
| 264 | 307 |
| 265 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 308 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
| 266 ret = entry->ReadData( | 309 ret = entry->ReadData( |
| 267 1, 0, buffer3, kSize3, | 310 1, |
| 311 0, |
| 312 buffer3.get(), |
| 313 kSize3, |
| 268 base::Bind(&CallbackTest::Run, base::Unretained(&callback11))); | 314 base::Bind(&CallbackTest::Run, base::Unretained(&callback11))); |
| 269 EXPECT_TRUE(8192 == ret || net::ERR_IO_PENDING == ret); | 315 EXPECT_TRUE(8192 == ret || net::ERR_IO_PENDING == ret); |
| 270 if (net::ERR_IO_PENDING == ret) | 316 if (net::ERR_IO_PENDING == ret) |
| 271 expected++; | 317 expected++; |
| 272 | 318 |
| 273 EXPECT_EQ(8192, entry->GetDataSize(1)); | 319 EXPECT_EQ(8192, entry->GetDataSize(1)); |
| 274 | 320 |
| 275 ret = entry->ReadData( | 321 ret = entry->ReadData( |
| 276 0, 0, buffer1, kSize1, | 322 0, |
| 323 0, |
| 324 buffer1.get(), |
| 325 kSize1, |
| 277 base::Bind(&CallbackTest::Run, base::Unretained(&callback12))); | 326 base::Bind(&CallbackTest::Run, base::Unretained(&callback12))); |
| 278 EXPECT_TRUE(10 == ret || net::ERR_IO_PENDING == ret); | 327 EXPECT_TRUE(10 == ret || net::ERR_IO_PENDING == ret); |
| 279 if (net::ERR_IO_PENDING == ret) | 328 if (net::ERR_IO_PENDING == ret) |
| 280 expected++; | 329 expected++; |
| 281 | 330 |
| 282 ret = entry->ReadData( | 331 ret = entry->ReadData( |
| 283 1, 0, buffer2, kSize2, | 332 1, |
| 333 0, |
| 334 buffer2.get(), |
| 335 kSize2, |
| 284 base::Bind(&CallbackTest::Run, base::Unretained(&callback13))); | 336 base::Bind(&CallbackTest::Run, base::Unretained(&callback13))); |
| 285 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); | 337 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); |
| 286 if (net::ERR_IO_PENDING == ret) | 338 if (net::ERR_IO_PENDING == ret) |
| 287 expected++; | 339 expected++; |
| 288 | 340 |
| 289 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 341 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
| 290 | 342 |
| 291 EXPECT_FALSE(helper.callback_reused_error()); | 343 EXPECT_FALSE(helper.callback_reused_error()); |
| 292 | 344 |
| 293 entry->Doom(); | 345 entry->Doom(); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 309 | 361 |
| 310 // This part of the test runs on the background thread. | 362 // This part of the test runs on the background thread. |
| 311 void DiskCacheEntryTest::ExternalSyncIOBackground(disk_cache::Entry* entry) { | 363 void DiskCacheEntryTest::ExternalSyncIOBackground(disk_cache::Entry* entry) { |
| 312 const int kSize1 = 17000; | 364 const int kSize1 = 17000; |
| 313 const int kSize2 = 25000; | 365 const int kSize2 = 25000; |
| 314 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); | 366 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); |
| 315 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); | 367 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); |
| 316 CacheTestFillBuffer(buffer1->data(), kSize1, false); | 368 CacheTestFillBuffer(buffer1->data(), kSize1, false); |
| 317 CacheTestFillBuffer(buffer2->data(), kSize2, false); | 369 CacheTestFillBuffer(buffer2->data(), kSize2, false); |
| 318 base::strlcpy(buffer1->data(), "the data", kSize1); | 370 base::strlcpy(buffer1->data(), "the data", kSize1); |
| 319 EXPECT_EQ(17000, entry->WriteData( | 371 EXPECT_EQ(17000, |
| 320 0, 0, buffer1, kSize1, net::CompletionCallback(), false)); | 372 entry->WriteData( |
| 373 0, 0, buffer1.get(), kSize1, net::CompletionCallback(), false)); |
| 321 memset(buffer1->data(), 0, kSize1); | 374 memset(buffer1->data(), 0, kSize1); |
| 322 EXPECT_EQ(17000, entry->ReadData( | 375 EXPECT_EQ( |
| 323 0, 0, buffer1, kSize1, net::CompletionCallback())); | 376 17000, |
| 377 entry->ReadData(0, 0, buffer1.get(), kSize1, net::CompletionCallback())); |
| 324 EXPECT_STREQ("the data", buffer1->data()); | 378 EXPECT_STREQ("the data", buffer1->data()); |
| 325 | 379 |
| 326 base::strlcpy(buffer2->data(), "The really big data goes here", kSize2); | 380 base::strlcpy(buffer2->data(), "The really big data goes here", kSize2); |
| 327 EXPECT_EQ(25000, entry->WriteData( | 381 EXPECT_EQ( |
| 328 1, 10000, buffer2, kSize2, net::CompletionCallback(), false)); | 382 25000, |
| 383 entry->WriteData( |
| 384 1, 10000, buffer2.get(), kSize2, net::CompletionCallback(), false)); |
| 329 memset(buffer2->data(), 0, kSize2); | 385 memset(buffer2->data(), 0, kSize2); |
| 330 EXPECT_EQ(24989, entry->ReadData( | 386 EXPECT_EQ(24989, |
| 331 1, 10011, buffer2, kSize2, net::CompletionCallback())); | 387 entry->ReadData( |
| 388 1, 10011, buffer2.get(), kSize2, net::CompletionCallback())); |
| 332 EXPECT_STREQ("big data goes here", buffer2->data()); | 389 EXPECT_STREQ("big data goes here", buffer2->data()); |
| 333 EXPECT_EQ(25000, entry->ReadData( | 390 EXPECT_EQ( |
| 334 1, 0, buffer2, kSize2, net::CompletionCallback())); | 391 25000, |
| 392 entry->ReadData(1, 0, buffer2.get(), kSize2, net::CompletionCallback())); |
| 335 EXPECT_EQ(0, memcmp(buffer2->data(), buffer2->data(), 10000)); | 393 EXPECT_EQ(0, memcmp(buffer2->data(), buffer2->data(), 10000)); |
| 336 EXPECT_EQ(5000, entry->ReadData( | 394 EXPECT_EQ(5000, |
| 337 1, 30000, buffer2, kSize2, net::CompletionCallback())); | 395 entry->ReadData( |
| 396 1, 30000, buffer2.get(), kSize2, net::CompletionCallback())); |
| 338 | 397 |
| 339 EXPECT_EQ(0, entry->ReadData( | 398 EXPECT_EQ(0, |
| 340 1, 35000, buffer2, kSize2, net::CompletionCallback())); | 399 entry->ReadData( |
| 341 EXPECT_EQ(17000, entry->ReadData( | 400 1, 35000, buffer2.get(), kSize2, net::CompletionCallback())); |
| 342 1, 0, buffer1, kSize1, net::CompletionCallback())); | 401 EXPECT_EQ( |
| 343 EXPECT_EQ(17000, entry->WriteData( | 402 17000, |
| 344 1, 20000, buffer1, kSize1, net::CompletionCallback(), false)); | 403 entry->ReadData(1, 0, buffer1.get(), kSize1, net::CompletionCallback())); |
| 404 EXPECT_EQ( |
| 405 17000, |
| 406 entry->WriteData( |
| 407 1, 20000, buffer1.get(), kSize1, net::CompletionCallback(), false)); |
| 345 EXPECT_EQ(37000, entry->GetDataSize(1)); | 408 EXPECT_EQ(37000, entry->GetDataSize(1)); |
| 346 | 409 |
| 347 // We need to delete the memory buffer on this thread. | 410 // We need to delete the memory buffer on this thread. |
| 348 EXPECT_EQ(0, entry->WriteData( | 411 EXPECT_EQ(0, entry->WriteData( |
| 349 0, 0, NULL, 0, net::CompletionCallback(), true)); | 412 0, 0, NULL, 0, net::CompletionCallback(), true)); |
| 350 EXPECT_EQ(0, entry->WriteData( | 413 EXPECT_EQ(0, entry->WriteData( |
| 351 1, 0, NULL, 0, net::CompletionCallback(), true)); | 414 1, 0, NULL, 0, net::CompletionCallback(), true)); |
| 352 } | 415 } |
| 353 | 416 |
| 354 void DiskCacheEntryTest::ExternalSyncIO() { | 417 void DiskCacheEntryTest::ExternalSyncIO() { |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 405 const int kSize2 = 25000; | 468 const int kSize2 = 25000; |
| 406 const int kSize3 = 25000; | 469 const int kSize3 = 25000; |
| 407 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); | 470 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); |
| 408 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); | 471 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); |
| 409 scoped_refptr<net::IOBuffer> buffer3(new net::IOBuffer(kSize3)); | 472 scoped_refptr<net::IOBuffer> buffer3(new net::IOBuffer(kSize3)); |
| 410 CacheTestFillBuffer(buffer1->data(), kSize1, false); | 473 CacheTestFillBuffer(buffer1->data(), kSize1, false); |
| 411 CacheTestFillBuffer(buffer2->data(), kSize2, false); | 474 CacheTestFillBuffer(buffer2->data(), kSize2, false); |
| 412 CacheTestFillBuffer(buffer3->data(), kSize3, false); | 475 CacheTestFillBuffer(buffer3->data(), kSize3, false); |
| 413 base::strlcpy(buffer1->data(), "the data", kSize1); | 476 base::strlcpy(buffer1->data(), "the data", kSize1); |
| 414 int ret = entry->WriteData( | 477 int ret = entry->WriteData( |
| 415 0, 0, buffer1, kSize1, | 478 0, |
| 416 base::Bind(&CallbackTest::Run, base::Unretained(&callback1)), false); | 479 0, |
| 480 buffer1.get(), |
| 481 kSize1, |
| 482 base::Bind(&CallbackTest::Run, base::Unretained(&callback1)), |
| 483 false); |
| 417 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); | 484 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); |
| 418 if (net::ERR_IO_PENDING == ret) | 485 if (net::ERR_IO_PENDING == ret) |
| 419 expected++; | 486 expected++; |
| 420 | 487 |
| 421 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 488 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
| 422 | 489 |
| 423 memset(buffer2->data(), 0, kSize1); | 490 memset(buffer2->data(), 0, kSize1); |
| 424 ret = entry->ReadData( | 491 ret = entry->ReadData( |
| 425 0, 0, buffer2, kSize1, | 492 0, |
| 493 0, |
| 494 buffer2.get(), |
| 495 kSize1, |
| 426 base::Bind(&CallbackTest::Run, base::Unretained(&callback2))); | 496 base::Bind(&CallbackTest::Run, base::Unretained(&callback2))); |
| 427 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); | 497 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); |
| 428 if (net::ERR_IO_PENDING == ret) | 498 if (net::ERR_IO_PENDING == ret) |
| 429 expected++; | 499 expected++; |
| 430 | 500 |
| 431 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 501 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
| 432 EXPECT_STREQ("the data", buffer2->data()); | 502 EXPECT_STREQ("the data", buffer2->data()); |
| 433 | 503 |
| 434 base::strlcpy(buffer2->data(), "The really big data goes here", kSize2); | 504 base::strlcpy(buffer2->data(), "The really big data goes here", kSize2); |
| 435 ret = entry->WriteData( | 505 ret = entry->WriteData( |
| 436 1, 10000, buffer2, kSize2, | 506 1, |
| 437 base::Bind(&CallbackTest::Run, base::Unretained(&callback3)), false); | 507 10000, |
| 508 buffer2.get(), |
| 509 kSize2, |
| 510 base::Bind(&CallbackTest::Run, base::Unretained(&callback3)), |
| 511 false); |
| 438 EXPECT_TRUE(25000 == ret || net::ERR_IO_PENDING == ret); | 512 EXPECT_TRUE(25000 == ret || net::ERR_IO_PENDING == ret); |
| 439 if (net::ERR_IO_PENDING == ret) | 513 if (net::ERR_IO_PENDING == ret) |
| 440 expected++; | 514 expected++; |
| 441 | 515 |
| 442 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 516 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
| 443 | 517 |
| 444 memset(buffer3->data(), 0, kSize3); | 518 memset(buffer3->data(), 0, kSize3); |
| 445 ret = entry->ReadData( | 519 ret = entry->ReadData( |
| 446 1, 10011, buffer3, kSize3, | 520 1, |
| 521 10011, |
| 522 buffer3.get(), |
| 523 kSize3, |
| 447 base::Bind(&CallbackTest::Run, base::Unretained(&callback4))); | 524 base::Bind(&CallbackTest::Run, base::Unretained(&callback4))); |
| 448 EXPECT_TRUE(24989 == ret || net::ERR_IO_PENDING == ret); | 525 EXPECT_TRUE(24989 == ret || net::ERR_IO_PENDING == ret); |
| 449 if (net::ERR_IO_PENDING == ret) | 526 if (net::ERR_IO_PENDING == ret) |
| 450 expected++; | 527 expected++; |
| 451 | 528 |
| 452 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 529 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
| 453 EXPECT_STREQ("big data goes here", buffer3->data()); | 530 EXPECT_STREQ("big data goes here", buffer3->data()); |
| 454 ret = entry->ReadData( | 531 ret = entry->ReadData( |
| 455 1, 0, buffer2, kSize2, | 532 1, |
| 533 0, |
| 534 buffer2.get(), |
| 535 kSize2, |
| 456 base::Bind(&CallbackTest::Run, base::Unretained(&callback5))); | 536 base::Bind(&CallbackTest::Run, base::Unretained(&callback5))); |
| 457 EXPECT_TRUE(25000 == ret || net::ERR_IO_PENDING == ret); | 537 EXPECT_TRUE(25000 == ret || net::ERR_IO_PENDING == ret); |
| 458 if (net::ERR_IO_PENDING == ret) | 538 if (net::ERR_IO_PENDING == ret) |
| 459 expected++; | 539 expected++; |
| 460 | 540 |
| 461 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 541 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
| 462 memset(buffer3->data(), 0, kSize3); | 542 memset(buffer3->data(), 0, kSize3); |
| 463 EXPECT_EQ(0, memcmp(buffer2->data(), buffer3->data(), 10000)); | 543 EXPECT_EQ(0, memcmp(buffer2->data(), buffer3->data(), 10000)); |
| 464 ret = entry->ReadData( | 544 ret = entry->ReadData( |
| 465 1, 30000, buffer2, kSize2, | 545 1, |
| 546 30000, |
| 547 buffer2.get(), |
| 548 kSize2, |
| 466 base::Bind(&CallbackTest::Run, base::Unretained(&callback6))); | 549 base::Bind(&CallbackTest::Run, base::Unretained(&callback6))); |
| 467 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); | 550 EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret); |
| 468 if (net::ERR_IO_PENDING == ret) | 551 if (net::ERR_IO_PENDING == ret) |
| 469 expected++; | 552 expected++; |
| 470 | 553 |
| 471 EXPECT_EQ(0, entry->ReadData( | 554 EXPECT_EQ(0, |
| 472 1, 35000, buffer2, kSize2, | 555 entry->ReadData( |
| 473 base::Bind(&CallbackTest::Run, base::Unretained(&callback7)))); | 556 1, |
| 557 35000, |
| 558 buffer2.get(), |
| 559 kSize2, |
| 560 base::Bind(&CallbackTest::Run, base::Unretained(&callback7)))); |
| 474 ret = entry->ReadData( | 561 ret = entry->ReadData( |
| 475 1, 0, buffer1, kSize1, | 562 1, |
| 563 0, |
| 564 buffer1.get(), |
| 565 kSize1, |
| 476 base::Bind(&CallbackTest::Run, base::Unretained(&callback8))); | 566 base::Bind(&CallbackTest::Run, base::Unretained(&callback8))); |
| 477 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); | 567 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); |
| 478 if (net::ERR_IO_PENDING == ret) | 568 if (net::ERR_IO_PENDING == ret) |
| 479 expected++; | 569 expected++; |
| 480 ret = entry->WriteData( | 570 ret = entry->WriteData( |
| 481 1, 20000, buffer3, kSize1, | 571 1, |
| 482 base::Bind(&CallbackTest::Run, base::Unretained(&callback9)), false); | 572 20000, |
| 573 buffer3.get(), |
| 574 kSize1, |
| 575 base::Bind(&CallbackTest::Run, base::Unretained(&callback9)), |
| 576 false); |
| 483 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); | 577 EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret); |
| 484 if (net::ERR_IO_PENDING == ret) | 578 if (net::ERR_IO_PENDING == ret) |
| 485 expected++; | 579 expected++; |
| 486 | 580 |
| 487 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 581 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
| 488 EXPECT_EQ(37000, entry->GetDataSize(1)); | 582 EXPECT_EQ(37000, entry->GetDataSize(1)); |
| 489 | 583 |
| 490 EXPECT_FALSE(helper.callback_reused_error()); | 584 EXPECT_FALSE(helper.callback_reused_error()); |
| 491 | 585 |
| 492 entry->Doom(); | 586 entry->Doom(); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 515 // Tests that IOBuffers are not referenced after IO completes. | 609 // Tests that IOBuffers are not referenced after IO completes. |
| 516 void DiskCacheEntryTest::ReleaseBuffer() { | 610 void DiskCacheEntryTest::ReleaseBuffer() { |
| 517 disk_cache::Entry* entry = NULL; | 611 disk_cache::Entry* entry = NULL; |
| 518 ASSERT_EQ(net::OK, CreateEntry("the first key", &entry)); | 612 ASSERT_EQ(net::OK, CreateEntry("the first key", &entry)); |
| 519 ASSERT_TRUE(NULL != entry); | 613 ASSERT_TRUE(NULL != entry); |
| 520 | 614 |
| 521 const int kBufferSize = 1024; | 615 const int kBufferSize = 1024; |
| 522 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kBufferSize)); | 616 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kBufferSize)); |
| 523 CacheTestFillBuffer(buffer->data(), kBufferSize, false); | 617 CacheTestFillBuffer(buffer->data(), kBufferSize, false); |
| 524 | 618 |
| 525 net::ReleaseBufferCompletionCallback cb(buffer); | 619 net::ReleaseBufferCompletionCallback cb(buffer.get()); |
| 526 int rv = entry->WriteData(0, 0, buffer, kBufferSize, cb.callback(), false); | 620 int rv = |
| 621 entry->WriteData(0, 0, buffer.get(), kBufferSize, cb.callback(), false); |
| 527 EXPECT_EQ(kBufferSize, cb.GetResult(rv)); | 622 EXPECT_EQ(kBufferSize, cb.GetResult(rv)); |
| 528 entry->Close(); | 623 entry->Close(); |
| 529 } | 624 } |
| 530 | 625 |
| 531 TEST_F(DiskCacheEntryTest, ReleaseBuffer) { | 626 TEST_F(DiskCacheEntryTest, ReleaseBuffer) { |
| 532 InitCache(); | 627 InitCache(); |
| 533 cache_impl_->SetFlags(disk_cache::kNoBuffering); | 628 cache_impl_->SetFlags(disk_cache::kNoBuffering); |
| 534 ReleaseBuffer(); | 629 ReleaseBuffer(); |
| 535 } | 630 } |
| 536 | 631 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 547 | 642 |
| 548 const int kBufferSize = 1024; | 643 const int kBufferSize = 1024; |
| 549 const int kNumStreams = 3; | 644 const int kNumStreams = 3; |
| 550 scoped_refptr<net::IOBuffer> reference_buffers[kNumStreams]; | 645 scoped_refptr<net::IOBuffer> reference_buffers[kNumStreams]; |
| 551 for (int i = 0; i < kNumStreams; i++) { | 646 for (int i = 0; i < kNumStreams; i++) { |
| 552 reference_buffers[i] = new net::IOBuffer(kBufferSize); | 647 reference_buffers[i] = new net::IOBuffer(kBufferSize); |
| 553 CacheTestFillBuffer(reference_buffers[i]->data(), kBufferSize, false); | 648 CacheTestFillBuffer(reference_buffers[i]->data(), kBufferSize, false); |
| 554 } | 649 } |
| 555 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kBufferSize)); | 650 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kBufferSize)); |
| 556 for (int i = 0; i < kNumStreams; i++) { | 651 for (int i = 0; i < kNumStreams; i++) { |
| 557 EXPECT_EQ(kBufferSize, WriteData(entry, i, 0, reference_buffers[i], | 652 EXPECT_EQ( |
| 558 kBufferSize, false)); | 653 kBufferSize, |
| 654 WriteData(entry, i, 0, reference_buffers[i].get(), kBufferSize, false)); |
| 559 memset(buffer1->data(), 0, kBufferSize); | 655 memset(buffer1->data(), 0, kBufferSize); |
| 560 EXPECT_EQ(kBufferSize, ReadData(entry, i, 0, buffer1, kBufferSize)); | 656 EXPECT_EQ(kBufferSize, ReadData(entry, i, 0, buffer1.get(), kBufferSize)); |
| 561 EXPECT_EQ(0, memcmp(reference_buffers[i]->data(), buffer1->data(), | 657 EXPECT_EQ( |
| 562 kBufferSize)); | 658 0, memcmp(reference_buffers[i]->data(), buffer1->data(), kBufferSize)); |
| 563 } | 659 } |
| 564 EXPECT_EQ(net::ERR_INVALID_ARGUMENT, | 660 EXPECT_EQ(net::ERR_INVALID_ARGUMENT, |
| 565 ReadData(entry, kNumStreams, 0, buffer1, kBufferSize)); | 661 ReadData(entry, kNumStreams, 0, buffer1.get(), kBufferSize)); |
| 566 entry->Close(); | 662 entry->Close(); |
| 567 | 663 |
| 568 // Open the entry and read it in chunks, including a read past the end. | 664 // Open the entry and read it in chunks, including a read past the end. |
| 569 ASSERT_EQ(net::OK, OpenEntry("the first key", &entry)); | 665 ASSERT_EQ(net::OK, OpenEntry("the first key", &entry)); |
| 570 ASSERT_TRUE(NULL != entry); | 666 ASSERT_TRUE(NULL != entry); |
| 571 const int kReadBufferSize = 600; | 667 const int kReadBufferSize = 600; |
| 572 const int kFinalReadSize = kBufferSize - kReadBufferSize; | 668 const int kFinalReadSize = kBufferSize - kReadBufferSize; |
| 573 COMPILE_ASSERT(kFinalReadSize < kReadBufferSize, should_be_exactly_two_reads); | 669 COMPILE_ASSERT(kFinalReadSize < kReadBufferSize, should_be_exactly_two_reads); |
| 574 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kReadBufferSize)); | 670 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kReadBufferSize)); |
| 575 for (int i = 0; i < kNumStreams; i++) { | 671 for (int i = 0; i < kNumStreams; i++) { |
| 576 memset(buffer2->data(), 0, kReadBufferSize); | 672 memset(buffer2->data(), 0, kReadBufferSize); |
| 577 EXPECT_EQ(kReadBufferSize, ReadData(entry, i, 0, buffer2, kReadBufferSize)); | 673 EXPECT_EQ(kReadBufferSize, |
| 578 EXPECT_EQ(0, memcmp(reference_buffers[i]->data(), buffer2->data(), | 674 ReadData(entry, i, 0, buffer2.get(), kReadBufferSize)); |
| 579 kReadBufferSize)); | 675 EXPECT_EQ( |
| 676 0, |
| 677 memcmp(reference_buffers[i]->data(), buffer2->data(), kReadBufferSize)); |
| 580 | 678 |
| 581 memset(buffer2->data(), 0, kReadBufferSize); | 679 memset(buffer2->data(), 0, kReadBufferSize); |
| 582 EXPECT_EQ(kFinalReadSize, ReadData(entry, i, kReadBufferSize, | 680 EXPECT_EQ( |
| 583 buffer2, kReadBufferSize)); | 681 kFinalReadSize, |
| 584 EXPECT_EQ(0, memcmp(reference_buffers[i]->data() + kReadBufferSize, | 682 ReadData(entry, i, kReadBufferSize, buffer2.get(), kReadBufferSize)); |
| 585 buffer2->data(), kFinalReadSize)); | 683 EXPECT_EQ(0, |
| 684 memcmp(reference_buffers[i]->data() + kReadBufferSize, |
| 685 buffer2->data(), |
| 686 kFinalReadSize)); |
| 586 } | 687 } |
| 587 | 688 |
| 588 entry->Close(); | 689 entry->Close(); |
| 589 } | 690 } |
| 590 | 691 |
| 591 TEST_F(DiskCacheEntryTest, StreamAccess) { | 692 TEST_F(DiskCacheEntryTest, StreamAccess) { |
| 592 InitCache(); | 693 InitCache(); |
| 593 StreamAccess(); | 694 StreamAccess(); |
| 594 } | 695 } |
| 595 | 696 |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 671 } else { | 772 } else { |
| 672 EXPECT_TRUE(entry->GetLastModified() >= t2); | 773 EXPECT_TRUE(entry->GetLastModified() >= t2); |
| 673 } | 774 } |
| 674 EXPECT_TRUE(entry->GetLastModified() == entry->GetLastUsed()); | 775 EXPECT_TRUE(entry->GetLastModified() == entry->GetLastUsed()); |
| 675 | 776 |
| 676 AddDelay(); | 777 AddDelay(); |
| 677 Time t3 = Time::Now(); | 778 Time t3 = Time::Now(); |
| 678 EXPECT_TRUE(t3 > t2); | 779 EXPECT_TRUE(t3 > t2); |
| 679 const int kSize = 200; | 780 const int kSize = 200; |
| 680 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); | 781 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); |
| 681 EXPECT_EQ(kSize, ReadData(entry, 0, 0, buffer, kSize)); | 782 EXPECT_EQ(kSize, ReadData(entry, 0, 0, buffer.get(), kSize)); |
| 682 if (type_ == net::APP_CACHE) { | 783 if (type_ == net::APP_CACHE) { |
| 683 EXPECT_TRUE(entry->GetLastUsed() < t2); | 784 EXPECT_TRUE(entry->GetLastUsed() < t2); |
| 684 EXPECT_TRUE(entry->GetLastModified() < t2); | 785 EXPECT_TRUE(entry->GetLastModified() < t2); |
| 685 } else if (type_ == net::SHADER_CACHE) { | 786 } else if (type_ == net::SHADER_CACHE) { |
| 686 EXPECT_TRUE(entry->GetLastUsed() < t3); | 787 EXPECT_TRUE(entry->GetLastUsed() < t3); |
| 687 EXPECT_TRUE(entry->GetLastModified() < t3); | 788 EXPECT_TRUE(entry->GetLastModified() < t3); |
| 688 } else { | 789 } else { |
| 689 EXPECT_TRUE(entry->GetLastUsed() >= t3); | 790 EXPECT_TRUE(entry->GetLastUsed() >= t3); |
| 690 EXPECT_TRUE(entry->GetLastModified() < t3); | 791 EXPECT_TRUE(entry->GetLastModified() < t3); |
| 691 } | 792 } |
| (...skipping 28 matching lines...) Expand all Loading... |
| 720 disk_cache::Entry* entry; | 821 disk_cache::Entry* entry; |
| 721 ASSERT_EQ(net::OK, CreateEntry(key1, &entry)); | 822 ASSERT_EQ(net::OK, CreateEntry(key1, &entry)); |
| 722 | 823 |
| 723 const int kSize = 20000; | 824 const int kSize = 20000; |
| 724 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize)); | 825 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize)); |
| 725 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize)); | 826 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize)); |
| 726 CacheTestFillBuffer(buffer1->data(), kSize, false); | 827 CacheTestFillBuffer(buffer1->data(), kSize, false); |
| 727 memset(buffer2->data(), 0, kSize); | 828 memset(buffer2->data(), 0, kSize); |
| 728 | 829 |
| 729 base::strlcpy(buffer1->data(), "the data", kSize); | 830 base::strlcpy(buffer1->data(), "the data", kSize); |
| 730 EXPECT_EQ(10, WriteData(entry, 0, 0, buffer1, 10, false)); | 831 EXPECT_EQ(10, WriteData(entry, 0, 0, buffer1.get(), 10, false)); |
| 731 EXPECT_EQ(10, ReadData(entry, 0, 0, buffer2, 10)); | 832 EXPECT_EQ(10, ReadData(entry, 0, 0, buffer2.get(), 10)); |
| 732 EXPECT_STREQ("the data", buffer2->data()); | 833 EXPECT_STREQ("the data", buffer2->data()); |
| 733 EXPECT_EQ(10, entry->GetDataSize(0)); | 834 EXPECT_EQ(10, entry->GetDataSize(0)); |
| 734 | 835 |
| 735 EXPECT_EQ(2000, WriteData(entry, 0, 0, buffer1, 2000, false)); | 836 EXPECT_EQ(2000, WriteData(entry, 0, 0, buffer1.get(), 2000, false)); |
| 736 EXPECT_EQ(2000, entry->GetDataSize(0)); | 837 EXPECT_EQ(2000, entry->GetDataSize(0)); |
| 737 EXPECT_EQ(2000, ReadData(entry, 0, 0, buffer2, 2000)); | 838 EXPECT_EQ(2000, ReadData(entry, 0, 0, buffer2.get(), 2000)); |
| 738 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 2000)); | 839 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 2000)); |
| 739 | 840 |
| 740 EXPECT_EQ(20000, WriteData(entry, 0, 0, buffer1, kSize, false)); | 841 EXPECT_EQ(20000, WriteData(entry, 0, 0, buffer1.get(), kSize, false)); |
| 741 EXPECT_EQ(20000, entry->GetDataSize(0)); | 842 EXPECT_EQ(20000, entry->GetDataSize(0)); |
| 742 EXPECT_EQ(20000, ReadData(entry, 0, 0, buffer2, kSize)); | 843 EXPECT_EQ(20000, ReadData(entry, 0, 0, buffer2.get(), kSize)); |
| 743 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), kSize)); | 844 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), kSize)); |
| 744 entry->Close(); | 845 entry->Close(); |
| 745 | 846 |
| 746 memset(buffer2->data(), 0, kSize); | 847 memset(buffer2->data(), 0, kSize); |
| 747 std::string key2("Second key"); | 848 std::string key2("Second key"); |
| 748 ASSERT_EQ(net::OK, CreateEntry(key2, &entry)); | 849 ASSERT_EQ(net::OK, CreateEntry(key2, &entry)); |
| 749 EXPECT_EQ(10, WriteData(entry, 0, 0, buffer1, 10, false)); | 850 EXPECT_EQ(10, WriteData(entry, 0, 0, buffer1.get(), 10, false)); |
| 750 EXPECT_EQ(10, entry->GetDataSize(0)); | 851 EXPECT_EQ(10, entry->GetDataSize(0)); |
| 751 entry->Close(); | 852 entry->Close(); |
| 752 | 853 |
| 753 // Go from an internal address to a bigger block size. | 854 // Go from an internal address to a bigger block size. |
| 754 ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); | 855 ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); |
| 755 EXPECT_EQ(2000, WriteData(entry, 0, 0, buffer1, 2000, false)); | 856 EXPECT_EQ(2000, WriteData(entry, 0, 0, buffer1.get(), 2000, false)); |
| 756 EXPECT_EQ(2000, entry->GetDataSize(0)); | 857 EXPECT_EQ(2000, entry->GetDataSize(0)); |
| 757 EXPECT_EQ(2000, ReadData(entry, 0, 0, buffer2, 2000)); | 858 EXPECT_EQ(2000, ReadData(entry, 0, 0, buffer2.get(), 2000)); |
| 758 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 2000)); | 859 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 2000)); |
| 759 entry->Close(); | 860 entry->Close(); |
| 760 memset(buffer2->data(), 0, kSize); | 861 memset(buffer2->data(), 0, kSize); |
| 761 | 862 |
| 762 // Go from an internal address to an external one. | 863 // Go from an internal address to an external one. |
| 763 ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); | 864 ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); |
| 764 EXPECT_EQ(20000, WriteData(entry, 0, 0, buffer1, kSize, false)); | 865 EXPECT_EQ(20000, WriteData(entry, 0, 0, buffer1.get(), kSize, false)); |
| 765 EXPECT_EQ(20000, entry->GetDataSize(0)); | 866 EXPECT_EQ(20000, entry->GetDataSize(0)); |
| 766 EXPECT_EQ(20000, ReadData(entry, 0, 0, buffer2, kSize)); | 867 EXPECT_EQ(20000, ReadData(entry, 0, 0, buffer2.get(), kSize)); |
| 767 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), kSize)); | 868 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), kSize)); |
| 768 entry->Close(); | 869 entry->Close(); |
| 769 | 870 |
| 770 // Double check the size from disk. | 871 // Double check the size from disk. |
| 771 ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); | 872 ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); |
| 772 EXPECT_EQ(20000, entry->GetDataSize(0)); | 873 EXPECT_EQ(20000, entry->GetDataSize(0)); |
| 773 | 874 |
| 774 // Now extend the entry without actual data. | 875 // Now extend the entry without actual data. |
| 775 EXPECT_EQ(0, WriteData(entry, 0, 45500, buffer1, 0, false)); | 876 EXPECT_EQ(0, WriteData(entry, 0, 45500, buffer1.get(), 0, false)); |
| 776 entry->Close(); | 877 entry->Close(); |
| 777 | 878 |
| 778 // And check again from disk. | 879 // And check again from disk. |
| 779 ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); | 880 ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); |
| 780 EXPECT_EQ(45500, entry->GetDataSize(0)); | 881 EXPECT_EQ(45500, entry->GetDataSize(0)); |
| 781 entry->Close(); | 882 entry->Close(); |
| 782 } | 883 } |
| 783 | 884 |
| 784 TEST_F(DiskCacheEntryTest, GrowData) { | 885 TEST_F(DiskCacheEntryTest, GrowData) { |
| 785 InitCache(); | 886 InitCache(); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 805 | 906 |
| 806 const int kSize1 = 20000; | 907 const int kSize1 = 20000; |
| 807 const int kSize2 = 20000; | 908 const int kSize2 = 20000; |
| 808 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); | 909 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); |
| 809 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); | 910 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); |
| 810 | 911 |
| 811 CacheTestFillBuffer(buffer1->data(), kSize1, false); | 912 CacheTestFillBuffer(buffer1->data(), kSize1, false); |
| 812 memset(buffer2->data(), 0, kSize2); | 913 memset(buffer2->data(), 0, kSize2); |
| 813 | 914 |
| 814 // Simple truncation: | 915 // Simple truncation: |
| 815 EXPECT_EQ(200, WriteData(entry, 0, 0, buffer1, 200, false)); | 916 EXPECT_EQ(200, WriteData(entry, 0, 0, buffer1.get(), 200, false)); |
| 816 EXPECT_EQ(200, entry->GetDataSize(0)); | 917 EXPECT_EQ(200, entry->GetDataSize(0)); |
| 817 EXPECT_EQ(100, WriteData(entry, 0, 0, buffer1, 100, false)); | 918 EXPECT_EQ(100, WriteData(entry, 0, 0, buffer1.get(), 100, false)); |
| 818 EXPECT_EQ(200, entry->GetDataSize(0)); | 919 EXPECT_EQ(200, entry->GetDataSize(0)); |
| 819 EXPECT_EQ(100, WriteData(entry, 0, 0, buffer1, 100, true)); | 920 EXPECT_EQ(100, WriteData(entry, 0, 0, buffer1.get(), 100, true)); |
| 820 EXPECT_EQ(100, entry->GetDataSize(0)); | 921 EXPECT_EQ(100, entry->GetDataSize(0)); |
| 821 EXPECT_EQ(0, WriteData(entry, 0, 50, buffer1, 0, true)); | 922 EXPECT_EQ(0, WriteData(entry, 0, 50, buffer1.get(), 0, true)); |
| 822 EXPECT_EQ(50, entry->GetDataSize(0)); | 923 EXPECT_EQ(50, entry->GetDataSize(0)); |
| 823 EXPECT_EQ(0, WriteData(entry, 0, 0, buffer1, 0, true)); | 924 EXPECT_EQ(0, WriteData(entry, 0, 0, buffer1.get(), 0, true)); |
| 824 EXPECT_EQ(0, entry->GetDataSize(0)); | 925 EXPECT_EQ(0, entry->GetDataSize(0)); |
| 825 entry->Close(); | 926 entry->Close(); |
| 826 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 927 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
| 827 | 928 |
| 828 // Go to an external file. | 929 // Go to an external file. |
| 829 EXPECT_EQ(20000, WriteData(entry, 0, 0, buffer1, 20000, true)); | 930 EXPECT_EQ(20000, WriteData(entry, 0, 0, buffer1.get(), 20000, true)); |
| 830 EXPECT_EQ(20000, entry->GetDataSize(0)); | 931 EXPECT_EQ(20000, entry->GetDataSize(0)); |
| 831 EXPECT_EQ(20000, ReadData(entry, 0, 0, buffer2, 20000)); | 932 EXPECT_EQ(20000, ReadData(entry, 0, 0, buffer2.get(), 20000)); |
| 832 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 20000)); | 933 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 20000)); |
| 833 memset(buffer2->data(), 0, kSize2); | 934 memset(buffer2->data(), 0, kSize2); |
| 834 | 935 |
| 835 // External file truncation | 936 // External file truncation |
| 836 EXPECT_EQ(18000, WriteData(entry, 0, 0, buffer1, 18000, false)); | 937 EXPECT_EQ(18000, WriteData(entry, 0, 0, buffer1.get(), 18000, false)); |
| 837 EXPECT_EQ(20000, entry->GetDataSize(0)); | 938 EXPECT_EQ(20000, entry->GetDataSize(0)); |
| 838 EXPECT_EQ(18000, WriteData(entry, 0, 0, buffer1, 18000, true)); | 939 EXPECT_EQ(18000, WriteData(entry, 0, 0, buffer1.get(), 18000, true)); |
| 839 EXPECT_EQ(18000, entry->GetDataSize(0)); | 940 EXPECT_EQ(18000, entry->GetDataSize(0)); |
| 840 EXPECT_EQ(0, WriteData(entry, 0, 17500, buffer1, 0, true)); | 941 EXPECT_EQ(0, WriteData(entry, 0, 17500, buffer1.get(), 0, true)); |
| 841 EXPECT_EQ(17500, entry->GetDataSize(0)); | 942 EXPECT_EQ(17500, entry->GetDataSize(0)); |
| 842 | 943 |
| 843 // And back to an internal block. | 944 // And back to an internal block. |
| 844 EXPECT_EQ(600, WriteData(entry, 0, 1000, buffer1, 600, true)); | 945 EXPECT_EQ(600, WriteData(entry, 0, 1000, buffer1.get(), 600, true)); |
| 845 EXPECT_EQ(1600, entry->GetDataSize(0)); | 946 EXPECT_EQ(1600, entry->GetDataSize(0)); |
| 846 EXPECT_EQ(600, ReadData(entry, 0, 1000, buffer2, 600)); | 947 EXPECT_EQ(600, ReadData(entry, 0, 1000, buffer2.get(), 600)); |
| 847 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 600)); | 948 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 600)); |
| 848 EXPECT_EQ(1000, ReadData(entry, 0, 0, buffer2, 1000)); | 949 EXPECT_EQ(1000, ReadData(entry, 0, 0, buffer2.get(), 1000)); |
| 849 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 1000)) << | 950 EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 1000)) |
| 850 "Preserves previous data"; | 951 << "Preserves previous data"; |
| 851 | 952 |
| 852 // Go from external file to zero length. | 953 // Go from external file to zero length. |
| 853 EXPECT_EQ(20000, WriteData(entry, 0, 0, buffer1, 20000, true)); | 954 EXPECT_EQ(20000, WriteData(entry, 0, 0, buffer1.get(), 20000, true)); |
| 854 EXPECT_EQ(20000, entry->GetDataSize(0)); | 955 EXPECT_EQ(20000, entry->GetDataSize(0)); |
| 855 EXPECT_EQ(0, WriteData(entry, 0, 0, buffer1, 0, true)); | 956 EXPECT_EQ(0, WriteData(entry, 0, 0, buffer1.get(), 0, true)); |
| 856 EXPECT_EQ(0, entry->GetDataSize(0)); | 957 EXPECT_EQ(0, entry->GetDataSize(0)); |
| 857 | 958 |
| 858 entry->Close(); | 959 entry->Close(); |
| 859 } | 960 } |
| 860 | 961 |
| 861 TEST_F(DiskCacheEntryTest, TruncateData) { | 962 TEST_F(DiskCacheEntryTest, TruncateData) { |
| 862 InitCache(); | 963 InitCache(); |
| 863 TruncateData(); | 964 TruncateData(); |
| 864 } | 965 } |
| 865 | 966 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 892 EXPECT_EQ(0, WriteData(entry, 0, 100000, NULL, 0, true)); | 993 EXPECT_EQ(0, WriteData(entry, 0, 100000, NULL, 0, true)); |
| 893 EXPECT_EQ(0, ReadData(entry, 0, 50000, NULL, 0)); | 994 EXPECT_EQ(0, ReadData(entry, 0, 50000, NULL, 0)); |
| 894 EXPECT_EQ(100000, entry->GetDataSize(0)); | 995 EXPECT_EQ(100000, entry->GetDataSize(0)); |
| 895 | 996 |
| 896 // Let's verify the actual content. | 997 // Let's verify the actual content. |
| 897 const int kSize = 20; | 998 const int kSize = 20; |
| 898 const char zeros[kSize] = {}; | 999 const char zeros[kSize] = {}; |
| 899 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); | 1000 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); |
| 900 | 1001 |
| 901 CacheTestFillBuffer(buffer->data(), kSize, false); | 1002 CacheTestFillBuffer(buffer->data(), kSize, false); |
| 902 EXPECT_EQ(kSize, ReadData(entry, 0, 500, buffer, kSize)); | 1003 EXPECT_EQ(kSize, ReadData(entry, 0, 500, buffer.get(), kSize)); |
| 903 EXPECT_TRUE(!memcmp(buffer->data(), zeros, kSize)); | 1004 EXPECT_TRUE(!memcmp(buffer->data(), zeros, kSize)); |
| 904 | 1005 |
| 905 CacheTestFillBuffer(buffer->data(), kSize, false); | 1006 CacheTestFillBuffer(buffer->data(), kSize, false); |
| 906 EXPECT_EQ(kSize, ReadData(entry, 0, 5000, buffer, kSize)); | 1007 EXPECT_EQ(kSize, ReadData(entry, 0, 5000, buffer.get(), kSize)); |
| 907 EXPECT_TRUE(!memcmp(buffer->data(), zeros, kSize)); | 1008 EXPECT_TRUE(!memcmp(buffer->data(), zeros, kSize)); |
| 908 | 1009 |
| 909 CacheTestFillBuffer(buffer->data(), kSize, false); | 1010 CacheTestFillBuffer(buffer->data(), kSize, false); |
| 910 EXPECT_EQ(kSize, ReadData(entry, 0, 50000, buffer, kSize)); | 1011 EXPECT_EQ(kSize, ReadData(entry, 0, 50000, buffer.get(), kSize)); |
| 911 EXPECT_TRUE(!memcmp(buffer->data(), zeros, kSize)); | 1012 EXPECT_TRUE(!memcmp(buffer->data(), zeros, kSize)); |
| 912 | 1013 |
| 913 entry->Close(); | 1014 entry->Close(); |
| 914 } | 1015 } |
| 915 | 1016 |
| 916 TEST_F(DiskCacheEntryTest, ZeroLengthIO) { | 1017 TEST_F(DiskCacheEntryTest, ZeroLengthIO) { |
| 917 InitCache(); | 1018 InitCache(); |
| 918 ZeroLengthIO(); | 1019 ZeroLengthIO(); |
| 919 } | 1020 } |
| 920 | 1021 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 936 std::string key("the first key"); | 1037 std::string key("the first key"); |
| 937 disk_cache::Entry* entry; | 1038 disk_cache::Entry* entry; |
| 938 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 1039 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 939 | 1040 |
| 940 const int kSize = 200; | 1041 const int kSize = 200; |
| 941 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize)); | 1042 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize)); |
| 942 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize)); | 1043 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize)); |
| 943 CacheTestFillBuffer(buffer1->data(), kSize, true); | 1044 CacheTestFillBuffer(buffer1->data(), kSize, true); |
| 944 CacheTestFillBuffer(buffer2->data(), kSize, true); | 1045 CacheTestFillBuffer(buffer2->data(), kSize, true); |
| 945 | 1046 |
| 946 EXPECT_EQ(kSize, WriteData(entry, 1, 0, buffer1, kSize, false)); | 1047 EXPECT_EQ(kSize, WriteData(entry, 1, 0, buffer1.get(), kSize, false)); |
| 947 entry->Close(); | 1048 entry->Close(); |
| 948 | 1049 |
| 949 // Write a little more and read what we wrote before. | 1050 // Write a little more and read what we wrote before. |
| 950 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 1051 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
| 951 EXPECT_EQ(kSize, WriteData(entry, 1, 5000, buffer1, kSize, false)); | 1052 EXPECT_EQ(kSize, WriteData(entry, 1, 5000, buffer1.get(), kSize, false)); |
| 952 EXPECT_EQ(kSize, ReadData(entry, 1, 0, buffer2, kSize)); | 1053 EXPECT_EQ(kSize, ReadData(entry, 1, 0, buffer2.get(), kSize)); |
| 953 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); | 1054 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); |
| 954 | 1055 |
| 955 // Now go to an external file. | 1056 // Now go to an external file. |
| 956 EXPECT_EQ(kSize, WriteData(entry, 1, 18000, buffer1, kSize, false)); | 1057 EXPECT_EQ(kSize, WriteData(entry, 1, 18000, buffer1.get(), kSize, false)); |
| 957 entry->Close(); | 1058 entry->Close(); |
| 958 | 1059 |
| 959 // Write something else and verify old data. | 1060 // Write something else and verify old data. |
| 960 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 1061 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
| 961 EXPECT_EQ(kSize, WriteData(entry, 1, 10000, buffer1, kSize, false)); | 1062 EXPECT_EQ(kSize, WriteData(entry, 1, 10000, buffer1.get(), kSize, false)); |
| 962 CacheTestFillBuffer(buffer2->data(), kSize, true); | 1063 CacheTestFillBuffer(buffer2->data(), kSize, true); |
| 963 EXPECT_EQ(kSize, ReadData(entry, 1, 5000, buffer2, kSize)); | 1064 EXPECT_EQ(kSize, ReadData(entry, 1, 5000, buffer2.get(), kSize)); |
| 964 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); | 1065 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); |
| 965 CacheTestFillBuffer(buffer2->data(), kSize, true); | 1066 CacheTestFillBuffer(buffer2->data(), kSize, true); |
| 966 EXPECT_EQ(kSize, ReadData(entry, 1, 0, buffer2, kSize)); | 1067 EXPECT_EQ(kSize, ReadData(entry, 1, 0, buffer2.get(), kSize)); |
| 967 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); | 1068 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); |
| 968 CacheTestFillBuffer(buffer2->data(), kSize, true); | 1069 CacheTestFillBuffer(buffer2->data(), kSize, true); |
| 969 EXPECT_EQ(kSize, ReadData(entry, 1, 18000, buffer2, kSize)); | 1070 EXPECT_EQ(kSize, ReadData(entry, 1, 18000, buffer2.get(), kSize)); |
| 970 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); | 1071 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); |
| 971 | 1072 |
| 972 // Extend the file some more. | 1073 // Extend the file some more. |
| 973 EXPECT_EQ(kSize, WriteData(entry, 1, 23000, buffer1, kSize, false)); | 1074 EXPECT_EQ(kSize, WriteData(entry, 1, 23000, buffer1.get(), kSize, false)); |
| 974 entry->Close(); | 1075 entry->Close(); |
| 975 | 1076 |
| 976 // And now make sure that we can deal with data in both places (ram/disk). | 1077 // And now make sure that we can deal with data in both places (ram/disk). |
| 977 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 1078 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
| 978 EXPECT_EQ(kSize, WriteData(entry, 1, 17000, buffer1, kSize, false)); | 1079 EXPECT_EQ(kSize, WriteData(entry, 1, 17000, buffer1.get(), kSize, false)); |
| 979 | 1080 |
| 980 // We should not overwrite the data at 18000 with this. | 1081 // We should not overwrite the data at 18000 with this. |
| 981 EXPECT_EQ(kSize, WriteData(entry, 1, 19000, buffer1, kSize, false)); | 1082 EXPECT_EQ(kSize, WriteData(entry, 1, 19000, buffer1.get(), kSize, false)); |
| 982 CacheTestFillBuffer(buffer2->data(), kSize, true); | 1083 CacheTestFillBuffer(buffer2->data(), kSize, true); |
| 983 EXPECT_EQ(kSize, ReadData(entry, 1, 18000, buffer2, kSize)); | 1084 EXPECT_EQ(kSize, ReadData(entry, 1, 18000, buffer2.get(), kSize)); |
| 984 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); | 1085 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); |
| 985 CacheTestFillBuffer(buffer2->data(), kSize, true); | 1086 CacheTestFillBuffer(buffer2->data(), kSize, true); |
| 986 EXPECT_EQ(kSize, ReadData(entry, 1, 17000, buffer2, kSize)); | 1087 EXPECT_EQ(kSize, ReadData(entry, 1, 17000, buffer2.get(), kSize)); |
| 987 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); | 1088 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); |
| 988 | 1089 |
| 989 EXPECT_EQ(kSize, WriteData(entry, 1, 22900, buffer1, kSize, false)); | 1090 EXPECT_EQ(kSize, WriteData(entry, 1, 22900, buffer1.get(), kSize, false)); |
| 990 CacheTestFillBuffer(buffer2->data(), kSize, true); | 1091 CacheTestFillBuffer(buffer2->data(), kSize, true); |
| 991 EXPECT_EQ(100, ReadData(entry, 1, 23000, buffer2, kSize)); | 1092 EXPECT_EQ(100, ReadData(entry, 1, 23000, buffer2.get(), kSize)); |
| 992 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data() + 100, 100)); | 1093 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data() + 100, 100)); |
| 993 | 1094 |
| 994 CacheTestFillBuffer(buffer2->data(), kSize, true); | 1095 CacheTestFillBuffer(buffer2->data(), kSize, true); |
| 995 EXPECT_EQ(100, ReadData(entry, 1, 23100, buffer2, kSize)); | 1096 EXPECT_EQ(100, ReadData(entry, 1, 23100, buffer2.get(), kSize)); |
| 996 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data() + 100, 100)); | 1097 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data() + 100, 100)); |
| 997 | 1098 |
| 998 // Extend the file again and read before without closing the entry. | 1099 // Extend the file again and read before without closing the entry. |
| 999 EXPECT_EQ(kSize, WriteData(entry, 1, 25000, buffer1, kSize, false)); | 1100 EXPECT_EQ(kSize, WriteData(entry, 1, 25000, buffer1.get(), kSize, false)); |
| 1000 EXPECT_EQ(kSize, WriteData(entry, 1, 45000, buffer1, kSize, false)); | 1101 EXPECT_EQ(kSize, WriteData(entry, 1, 45000, buffer1.get(), kSize, false)); |
| 1001 CacheTestFillBuffer(buffer2->data(), kSize, true); | 1102 CacheTestFillBuffer(buffer2->data(), kSize, true); |
| 1002 EXPECT_EQ(kSize, ReadData(entry, 1, 25000, buffer2, kSize)); | 1103 EXPECT_EQ(kSize, ReadData(entry, 1, 25000, buffer2.get(), kSize)); |
| 1003 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); | 1104 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); |
| 1004 CacheTestFillBuffer(buffer2->data(), kSize, true); | 1105 CacheTestFillBuffer(buffer2->data(), kSize, true); |
| 1005 EXPECT_EQ(kSize, ReadData(entry, 1, 45000, buffer2, kSize)); | 1106 EXPECT_EQ(kSize, ReadData(entry, 1, 45000, buffer2.get(), kSize)); |
| 1006 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); | 1107 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data(), kSize)); |
| 1007 | 1108 |
| 1008 entry->Close(); | 1109 entry->Close(); |
| 1009 } | 1110 } |
| 1010 | 1111 |
| 1011 TEST_F(DiskCacheEntryTest, Buffering) { | 1112 TEST_F(DiskCacheEntryTest, Buffering) { |
| 1012 InitCache(); | 1113 InitCache(); |
| 1013 Buffering(); | 1114 Buffering(); |
| 1014 } | 1115 } |
| 1015 | 1116 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1049 disk_cache::Entry* entry; | 1150 disk_cache::Entry* entry; |
| 1050 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 1151 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 1051 | 1152 |
| 1052 const int kSize = 200; | 1153 const int kSize = 200; |
| 1053 const char zeros[kSize] = {}; | 1154 const char zeros[kSize] = {}; |
| 1054 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize)); | 1155 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize)); |
| 1055 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize)); | 1156 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize)); |
| 1056 CacheTestFillBuffer(buffer1->data(), kSize, true); | 1157 CacheTestFillBuffer(buffer1->data(), kSize, true); |
| 1057 CacheTestFillBuffer(buffer2->data(), kSize, true); | 1158 CacheTestFillBuffer(buffer2->data(), kSize, true); |
| 1058 | 1159 |
| 1059 EXPECT_EQ(kSize, WriteData(entry, 1, 0, buffer1, kSize, true)); | 1160 EXPECT_EQ(kSize, WriteData(entry, 1, 0, buffer1.get(), kSize, true)); |
| 1060 EXPECT_EQ(kSize, WriteData(entry, 1, 17000, buffer1, kSize, true)); | 1161 EXPECT_EQ(kSize, WriteData(entry, 1, 17000, buffer1.get(), kSize, true)); |
| 1061 EXPECT_EQ(kSize, WriteData(entry, 1, 23000, buffer1, kSize, true)); | 1162 EXPECT_EQ(kSize, WriteData(entry, 1, 23000, buffer1.get(), kSize, true)); |
| 1062 entry->Close(); | 1163 entry->Close(); |
| 1063 | 1164 |
| 1064 // Extend the file and read between the old size and the new write. | 1165 // Extend the file and read between the old size and the new write. |
| 1065 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 1166 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
| 1066 EXPECT_EQ(23000 + kSize, entry->GetDataSize(1)); | 1167 EXPECT_EQ(23000 + kSize, entry->GetDataSize(1)); |
| 1067 EXPECT_EQ(kSize, WriteData(entry, 1, 25000, buffer1, kSize, true)); | 1168 EXPECT_EQ(kSize, WriteData(entry, 1, 25000, buffer1.get(), kSize, true)); |
| 1068 EXPECT_EQ(25000 + kSize, entry->GetDataSize(1)); | 1169 EXPECT_EQ(25000 + kSize, entry->GetDataSize(1)); |
| 1069 EXPECT_EQ(kSize, ReadData(entry, 1, 24000, buffer2, kSize)); | 1170 EXPECT_EQ(kSize, ReadData(entry, 1, 24000, buffer2.get(), kSize)); |
| 1070 EXPECT_TRUE(!memcmp(buffer2->data(), zeros, kSize)); | 1171 EXPECT_TRUE(!memcmp(buffer2->data(), zeros, kSize)); |
| 1071 | 1172 |
| 1072 // Read at the end of the old file size. | 1173 // Read at the end of the old file size. |
| 1073 EXPECT_EQ(kSize, ReadData(entry, 1, 23000 + kSize - 35, buffer2, kSize)); | 1174 EXPECT_EQ(kSize, |
| 1175 ReadData(entry, 1, 23000 + kSize - 35, buffer2.get(), kSize)); |
| 1074 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data() + kSize - 35, 35)); | 1176 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data() + kSize - 35, 35)); |
| 1075 | 1177 |
| 1076 // Read slightly before the last write. | 1178 // Read slightly before the last write. |
| 1077 CacheTestFillBuffer(buffer2->data(), kSize, true); | 1179 CacheTestFillBuffer(buffer2->data(), kSize, true); |
| 1078 EXPECT_EQ(kSize, ReadData(entry, 1, 24900, buffer2, kSize)); | 1180 EXPECT_EQ(kSize, ReadData(entry, 1, 24900, buffer2.get(), kSize)); |
| 1079 EXPECT_TRUE(!memcmp(buffer2->data(), zeros, 100)); | 1181 EXPECT_TRUE(!memcmp(buffer2->data(), zeros, 100)); |
| 1080 EXPECT_TRUE(!memcmp(buffer2->data() + 100, buffer1->data(), kSize - 100)); | 1182 EXPECT_TRUE(!memcmp(buffer2->data() + 100, buffer1->data(), kSize - 100)); |
| 1081 | 1183 |
| 1082 // Extend the entry a little more. | 1184 // Extend the entry a little more. |
| 1083 EXPECT_EQ(kSize, WriteData(entry, 1, 26000, buffer1, kSize, true)); | 1185 EXPECT_EQ(kSize, WriteData(entry, 1, 26000, buffer1.get(), kSize, true)); |
| 1084 EXPECT_EQ(26000 + kSize, entry->GetDataSize(1)); | 1186 EXPECT_EQ(26000 + kSize, entry->GetDataSize(1)); |
| 1085 CacheTestFillBuffer(buffer2->data(), kSize, true); | 1187 CacheTestFillBuffer(buffer2->data(), kSize, true); |
| 1086 EXPECT_EQ(kSize, ReadData(entry, 1, 25900, buffer2, kSize)); | 1188 EXPECT_EQ(kSize, ReadData(entry, 1, 25900, buffer2.get(), kSize)); |
| 1087 EXPECT_TRUE(!memcmp(buffer2->data(), zeros, 100)); | 1189 EXPECT_TRUE(!memcmp(buffer2->data(), zeros, 100)); |
| 1088 EXPECT_TRUE(!memcmp(buffer2->data() + 100, buffer1->data(), kSize - 100)); | 1190 EXPECT_TRUE(!memcmp(buffer2->data() + 100, buffer1->data(), kSize - 100)); |
| 1089 | 1191 |
| 1090 // And now reduce the size. | 1192 // And now reduce the size. |
| 1091 EXPECT_EQ(kSize, WriteData(entry, 1, 25000, buffer1, kSize, true)); | 1193 EXPECT_EQ(kSize, WriteData(entry, 1, 25000, buffer1.get(), kSize, true)); |
| 1092 EXPECT_EQ(25000 + kSize, entry->GetDataSize(1)); | 1194 EXPECT_EQ(25000 + kSize, entry->GetDataSize(1)); |
| 1093 EXPECT_EQ(28, ReadData(entry, 1, 25000 + kSize - 28, buffer2, kSize)); | 1195 EXPECT_EQ(28, ReadData(entry, 1, 25000 + kSize - 28, buffer2.get(), kSize)); |
| 1094 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data() + kSize - 28, 28)); | 1196 EXPECT_TRUE(!memcmp(buffer2->data(), buffer1->data() + kSize - 28, 28)); |
| 1095 | 1197 |
| 1096 // Reduce the size with a buffer that is not extending the size. | 1198 // Reduce the size with a buffer that is not extending the size. |
| 1097 EXPECT_EQ(kSize, WriteData(entry, 1, 24000, buffer1, kSize, false)); | 1199 EXPECT_EQ(kSize, WriteData(entry, 1, 24000, buffer1.get(), kSize, false)); |
| 1098 EXPECT_EQ(25000 + kSize, entry->GetDataSize(1)); | 1200 EXPECT_EQ(25000 + kSize, entry->GetDataSize(1)); |
| 1099 EXPECT_EQ(kSize, WriteData(entry, 1, 24500, buffer1, kSize, true)); | 1201 EXPECT_EQ(kSize, WriteData(entry, 1, 24500, buffer1.get(), kSize, true)); |
| 1100 EXPECT_EQ(24500 + kSize, entry->GetDataSize(1)); | 1202 EXPECT_EQ(24500 + kSize, entry->GetDataSize(1)); |
| 1101 EXPECT_EQ(kSize, ReadData(entry, 1, 23900, buffer2, kSize)); | 1203 EXPECT_EQ(kSize, ReadData(entry, 1, 23900, buffer2.get(), kSize)); |
| 1102 EXPECT_TRUE(!memcmp(buffer2->data(), zeros, 100)); | 1204 EXPECT_TRUE(!memcmp(buffer2->data(), zeros, 100)); |
| 1103 EXPECT_TRUE(!memcmp(buffer2->data() + 100, buffer1->data(), kSize - 100)); | 1205 EXPECT_TRUE(!memcmp(buffer2->data() + 100, buffer1->data(), kSize - 100)); |
| 1104 | 1206 |
| 1105 // And now reduce the size below the old size. | 1207 // And now reduce the size below the old size. |
| 1106 EXPECT_EQ(kSize, WriteData(entry, 1, 19000, buffer1, kSize, true)); | 1208 EXPECT_EQ(kSize, WriteData(entry, 1, 19000, buffer1.get(), kSize, true)); |
| 1107 EXPECT_EQ(19000 + kSize, entry->GetDataSize(1)); | 1209 EXPECT_EQ(19000 + kSize, entry->GetDataSize(1)); |
| 1108 EXPECT_EQ(kSize, ReadData(entry, 1, 18900, buffer2, kSize)); | 1210 EXPECT_EQ(kSize, ReadData(entry, 1, 18900, buffer2.get(), kSize)); |
| 1109 EXPECT_TRUE(!memcmp(buffer2->data(), zeros, 100)); | 1211 EXPECT_TRUE(!memcmp(buffer2->data(), zeros, 100)); |
| 1110 EXPECT_TRUE(!memcmp(buffer2->data() + 100, buffer1->data(), kSize - 100)); | 1212 EXPECT_TRUE(!memcmp(buffer2->data() + 100, buffer1->data(), kSize - 100)); |
| 1111 | 1213 |
| 1112 // Verify that the actual file is truncated. | 1214 // Verify that the actual file is truncated. |
| 1113 entry->Close(); | 1215 entry->Close(); |
| 1114 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 1216 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
| 1115 EXPECT_EQ(19000 + kSize, entry->GetDataSize(1)); | 1217 EXPECT_EQ(19000 + kSize, entry->GetDataSize(1)); |
| 1116 | 1218 |
| 1117 // Extend the newly opened file with a zero length write, expect zero fill. | 1219 // Extend the newly opened file with a zero length write, expect zero fill. |
| 1118 EXPECT_EQ(0, WriteData(entry, 1, 20000 + kSize, buffer1, 0, false)); | 1220 EXPECT_EQ(0, WriteData(entry, 1, 20000 + kSize, buffer1.get(), 0, false)); |
| 1119 EXPECT_EQ(kSize, ReadData(entry, 1, 19000 + kSize, buffer1, kSize)); | 1221 EXPECT_EQ(kSize, ReadData(entry, 1, 19000 + kSize, buffer1.get(), kSize)); |
| 1120 EXPECT_EQ(0, memcmp(buffer1->data(), zeros, kSize)); | 1222 EXPECT_EQ(0, memcmp(buffer1->data(), zeros, kSize)); |
| 1121 | 1223 |
| 1122 entry->Close(); | 1224 entry->Close(); |
| 1123 } | 1225 } |
| 1124 | 1226 |
| 1125 TEST_F(DiskCacheEntryTest, SizeChanges) { | 1227 TEST_F(DiskCacheEntryTest, SizeChanges) { |
| 1126 InitCache(); | 1228 InitCache(); |
| 1127 SizeChanges(); | 1229 SizeChanges(); |
| 1128 } | 1230 } |
| 1129 | 1231 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1141 ASSERT_EQ(net::OK, CreateEntry(key1, &entry)); | 1243 ASSERT_EQ(net::OK, CreateEntry(key1, &entry)); |
| 1142 | 1244 |
| 1143 entry->Close(); | 1245 entry->Close(); |
| 1144 std::string key2("the second key"); | 1246 std::string key2("the second key"); |
| 1145 ASSERT_EQ(net::OK, CreateEntry(key2, &entry)); | 1247 ASSERT_EQ(net::OK, CreateEntry(key2, &entry)); |
| 1146 | 1248 |
| 1147 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(size)); | 1249 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(size)); |
| 1148 CacheTestFillBuffer(buffer->data(), size, false); | 1250 CacheTestFillBuffer(buffer->data(), size, false); |
| 1149 | 1251 |
| 1150 for (int i = 0; i < 15; i++) { | 1252 for (int i = 0; i < 15; i++) { |
| 1151 EXPECT_EQ(0, WriteData(entry, 0, 0, buffer, 0, true)); | 1253 EXPECT_EQ(0, WriteData(entry, 0, 0, buffer.get(), 0, true)); |
| 1152 EXPECT_EQ(size, WriteData(entry, 0, 0, buffer, size, false)); | 1254 EXPECT_EQ(size, WriteData(entry, 0, 0, buffer.get(), size, false)); |
| 1153 entry->Close(); | 1255 entry->Close(); |
| 1154 ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); | 1256 ASSERT_EQ(net::OK, OpenEntry(key2, &entry)); |
| 1155 } | 1257 } |
| 1156 | 1258 |
| 1157 entry->Close(); | 1259 entry->Close(); |
| 1158 ASSERT_EQ(net::OK, OpenEntry(key1, &entry)) << "have not evicted this entry"; | 1260 ASSERT_EQ(net::OK, OpenEntry(key1, &entry)) << "have not evicted this entry"; |
| 1159 entry->Close(); | 1261 entry->Close(); |
| 1160 } | 1262 } |
| 1161 | 1263 |
| 1162 TEST_F(DiskCacheEntryTest, ReuseExternalEntry) { | 1264 TEST_F(DiskCacheEntryTest, ReuseExternalEntry) { |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1195 const int kSize2 = 20000; | 1297 const int kSize2 = 20000; |
| 1196 const int kSize3 = 20000; | 1298 const int kSize3 = 20000; |
| 1197 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); | 1299 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); |
| 1198 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); | 1300 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); |
| 1199 scoped_refptr<net::IOBuffer> buffer3(new net::IOBuffer(kSize3)); | 1301 scoped_refptr<net::IOBuffer> buffer3(new net::IOBuffer(kSize3)); |
| 1200 | 1302 |
| 1201 CacheTestFillBuffer(buffer1->data(), kSize1, false); | 1303 CacheTestFillBuffer(buffer1->data(), kSize1, false); |
| 1202 memset(buffer2->data(), 0, kSize2); | 1304 memset(buffer2->data(), 0, kSize2); |
| 1203 | 1305 |
| 1204 // Simple data grow: | 1306 // Simple data grow: |
| 1205 EXPECT_EQ(200, WriteData(entry, 0, 400, buffer1, 200, false)); | 1307 EXPECT_EQ(200, WriteData(entry, 0, 400, buffer1.get(), 200, false)); |
| 1206 EXPECT_EQ(600, entry->GetDataSize(0)); | 1308 EXPECT_EQ(600, entry->GetDataSize(0)); |
| 1207 EXPECT_EQ(100, ReadData(entry, 0, 300, buffer3, 100)); | 1309 EXPECT_EQ(100, ReadData(entry, 0, 300, buffer3.get(), 100)); |
| 1208 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100)); | 1310 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100)); |
| 1209 entry->Close(); | 1311 entry->Close(); |
| 1210 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 1312 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
| 1211 | 1313 |
| 1212 // The entry is now on disk. Load it and extend it. | 1314 // The entry is now on disk. Load it and extend it. |
| 1213 EXPECT_EQ(200, WriteData(entry, 0, 800, buffer1, 200, false)); | 1315 EXPECT_EQ(200, WriteData(entry, 0, 800, buffer1.get(), 200, false)); |
| 1214 EXPECT_EQ(1000, entry->GetDataSize(0)); | 1316 EXPECT_EQ(1000, entry->GetDataSize(0)); |
| 1215 EXPECT_EQ(100, ReadData(entry, 0, 700, buffer3, 100)); | 1317 EXPECT_EQ(100, ReadData(entry, 0, 700, buffer3.get(), 100)); |
| 1216 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100)); | 1318 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100)); |
| 1217 entry->Close(); | 1319 entry->Close(); |
| 1218 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 1320 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
| 1219 | 1321 |
| 1220 // This time using truncate. | 1322 // This time using truncate. |
| 1221 EXPECT_EQ(200, WriteData(entry, 0, 1800, buffer1, 200, true)); | 1323 EXPECT_EQ(200, WriteData(entry, 0, 1800, buffer1.get(), 200, true)); |
| 1222 EXPECT_EQ(2000, entry->GetDataSize(0)); | 1324 EXPECT_EQ(2000, entry->GetDataSize(0)); |
| 1223 EXPECT_EQ(100, ReadData(entry, 0, 1500, buffer3, 100)); | 1325 EXPECT_EQ(100, ReadData(entry, 0, 1500, buffer3.get(), 100)); |
| 1224 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100)); | 1326 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100)); |
| 1225 | 1327 |
| 1226 // Go to an external file. | 1328 // Go to an external file. |
| 1227 EXPECT_EQ(200, WriteData(entry, 0, 19800, buffer1, 200, false)); | 1329 EXPECT_EQ(200, WriteData(entry, 0, 19800, buffer1.get(), 200, false)); |
| 1228 EXPECT_EQ(20000, entry->GetDataSize(0)); | 1330 EXPECT_EQ(20000, entry->GetDataSize(0)); |
| 1229 EXPECT_EQ(4000, ReadData(entry, 0, 14000, buffer3, 4000)); | 1331 EXPECT_EQ(4000, ReadData(entry, 0, 14000, buffer3.get(), 4000)); |
| 1230 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 4000)); | 1332 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 4000)); |
| 1231 | 1333 |
| 1232 // And back to an internal block. | 1334 // And back to an internal block. |
| 1233 EXPECT_EQ(600, WriteData(entry, 0, 1000, buffer1, 600, true)); | 1335 EXPECT_EQ(600, WriteData(entry, 0, 1000, buffer1.get(), 600, true)); |
| 1234 EXPECT_EQ(1600, entry->GetDataSize(0)); | 1336 EXPECT_EQ(1600, entry->GetDataSize(0)); |
| 1235 EXPECT_EQ(600, ReadData(entry, 0, 1000, buffer3, 600)); | 1337 EXPECT_EQ(600, ReadData(entry, 0, 1000, buffer3.get(), 600)); |
| 1236 EXPECT_TRUE(!memcmp(buffer3->data(), buffer1->data(), 600)); | 1338 EXPECT_TRUE(!memcmp(buffer3->data(), buffer1->data(), 600)); |
| 1237 | 1339 |
| 1238 // Extend it again. | 1340 // Extend it again. |
| 1239 EXPECT_EQ(600, WriteData(entry, 0, 2000, buffer1, 600, false)); | 1341 EXPECT_EQ(600, WriteData(entry, 0, 2000, buffer1.get(), 600, false)); |
| 1240 EXPECT_EQ(2600, entry->GetDataSize(0)); | 1342 EXPECT_EQ(2600, entry->GetDataSize(0)); |
| 1241 EXPECT_EQ(200, ReadData(entry, 0, 1800, buffer3, 200)); | 1343 EXPECT_EQ(200, ReadData(entry, 0, 1800, buffer3.get(), 200)); |
| 1242 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 200)); | 1344 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 200)); |
| 1243 | 1345 |
| 1244 // And again (with truncation flag). | 1346 // And again (with truncation flag). |
| 1245 EXPECT_EQ(600, WriteData(entry, 0, 3000, buffer1, 600, true)); | 1347 EXPECT_EQ(600, WriteData(entry, 0, 3000, buffer1.get(), 600, true)); |
| 1246 EXPECT_EQ(3600, entry->GetDataSize(0)); | 1348 EXPECT_EQ(3600, entry->GetDataSize(0)); |
| 1247 EXPECT_EQ(200, ReadData(entry, 0, 2800, buffer3, 200)); | 1349 EXPECT_EQ(200, ReadData(entry, 0, 2800, buffer3.get(), 200)); |
| 1248 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 200)); | 1350 EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 200)); |
| 1249 | 1351 |
| 1250 entry->Close(); | 1352 entry->Close(); |
| 1251 } | 1353 } |
| 1252 | 1354 |
| 1253 TEST_F(DiskCacheEntryTest, InvalidData) { | 1355 TEST_F(DiskCacheEntryTest, InvalidData) { |
| 1254 InitCache(); | 1356 InitCache(); |
| 1255 InvalidData(); | 1357 InvalidData(); |
| 1256 } | 1358 } |
| 1257 | 1359 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1272 std::string key("the first key"); | 1374 std::string key("the first key"); |
| 1273 disk_cache::Entry* entry; | 1375 disk_cache::Entry* entry; |
| 1274 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 1376 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 1275 | 1377 |
| 1276 const int kSize = 200; | 1378 const int kSize = 200; |
| 1277 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); | 1379 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); |
| 1278 CacheTestFillBuffer(buffer->data(), kSize, false); | 1380 CacheTestFillBuffer(buffer->data(), kSize, false); |
| 1279 | 1381 |
| 1280 net::TestCompletionCallback cb; | 1382 net::TestCompletionCallback cb; |
| 1281 EXPECT_EQ(net::ERR_IO_PENDING, | 1383 EXPECT_EQ(net::ERR_IO_PENDING, |
| 1282 entry->WriteData(0, 0, buffer, kSize, cb.callback(), false)); | 1384 entry->WriteData(0, 0, buffer.get(), kSize, cb.callback(), false)); |
| 1283 | 1385 |
| 1284 // Release our reference to the buffer. | 1386 // Release our reference to the buffer. |
| 1285 buffer = NULL; | 1387 buffer = NULL; |
| 1286 EXPECT_EQ(kSize, cb.WaitForResult()); | 1388 EXPECT_EQ(kSize, cb.WaitForResult()); |
| 1287 | 1389 |
| 1288 // And now test with a Read(). | 1390 // And now test with a Read(). |
| 1289 buffer = new net::IOBuffer(kSize); | 1391 buffer = new net::IOBuffer(kSize); |
| 1290 CacheTestFillBuffer(buffer->data(), kSize, false); | 1392 CacheTestFillBuffer(buffer->data(), kSize, false); |
| 1291 | 1393 |
| 1292 EXPECT_EQ(net::ERR_IO_PENDING, | 1394 EXPECT_EQ(net::ERR_IO_PENDING, |
| 1293 entry->ReadData(0, 0, buffer, kSize, cb.callback())); | 1395 entry->ReadData(0, 0, buffer.get(), kSize, cb.callback())); |
| 1294 buffer = NULL; | 1396 buffer = NULL; |
| 1295 EXPECT_EQ(kSize, cb.WaitForResult()); | 1397 EXPECT_EQ(kSize, cb.WaitForResult()); |
| 1296 | 1398 |
| 1297 entry->Close(); | 1399 entry->Close(); |
| 1298 } | 1400 } |
| 1299 | 1401 |
| 1300 TEST_F(DiskCacheEntryTest, ReadWriteDestroyBuffer) { | 1402 TEST_F(DiskCacheEntryTest, ReadWriteDestroyBuffer) { |
| 1301 InitCache(); | 1403 InitCache(); |
| 1302 ReadWriteDestroyBuffer(); | 1404 ReadWriteDestroyBuffer(); |
| 1303 } | 1405 } |
| 1304 | 1406 |
| 1305 void DiskCacheEntryTest::DoomNormalEntry() { | 1407 void DiskCacheEntryTest::DoomNormalEntry() { |
| 1306 std::string key("the first key"); | 1408 std::string key("the first key"); |
| 1307 disk_cache::Entry* entry; | 1409 disk_cache::Entry* entry; |
| 1308 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 1410 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 1309 entry->Doom(); | 1411 entry->Doom(); |
| 1310 entry->Close(); | 1412 entry->Close(); |
| 1311 | 1413 |
| 1312 const int kSize = 20000; | 1414 const int kSize = 20000; |
| 1313 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); | 1415 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); |
| 1314 CacheTestFillBuffer(buffer->data(), kSize, true); | 1416 CacheTestFillBuffer(buffer->data(), kSize, true); |
| 1315 buffer->data()[19999] = '\0'; | 1417 buffer->data()[19999] = '\0'; |
| 1316 | 1418 |
| 1317 key = buffer->data(); | 1419 key = buffer->data(); |
| 1318 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 1420 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 1319 EXPECT_EQ(20000, WriteData(entry, 0, 0, buffer, kSize, false)); | 1421 EXPECT_EQ(20000, WriteData(entry, 0, 0, buffer.get(), kSize, false)); |
| 1320 EXPECT_EQ(20000, WriteData(entry, 1, 0, buffer, kSize, false)); | 1422 EXPECT_EQ(20000, WriteData(entry, 1, 0, buffer.get(), kSize, false)); |
| 1321 entry->Doom(); | 1423 entry->Doom(); |
| 1322 entry->Close(); | 1424 entry->Close(); |
| 1323 | 1425 |
| 1324 FlushQueueForTest(); | 1426 FlushQueueForTest(); |
| 1325 EXPECT_EQ(0, cache_->GetEntryCount()); | 1427 EXPECT_EQ(0, cache_->GetEntryCount()); |
| 1326 } | 1428 } |
| 1327 | 1429 |
| 1328 TEST_F(DiskCacheEntryTest, DoomEntry) { | 1430 TEST_F(DiskCacheEntryTest, DoomEntry) { |
| 1329 InitCache(); | 1431 InitCache(); |
| 1330 DoomNormalEntry(); | 1432 DoomNormalEntry(); |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1390 Time initial = Time::Now(); | 1492 Time initial = Time::Now(); |
| 1391 AddDelay(); | 1493 AddDelay(); |
| 1392 | 1494 |
| 1393 const int kSize1 = 2000; | 1495 const int kSize1 = 2000; |
| 1394 const int kSize2 = 2000; | 1496 const int kSize2 = 2000; |
| 1395 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); | 1497 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); |
| 1396 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); | 1498 scoped_refptr<net::IOBuffer> buffer2(new net::IOBuffer(kSize2)); |
| 1397 CacheTestFillBuffer(buffer1->data(), kSize1, false); | 1499 CacheTestFillBuffer(buffer1->data(), kSize1, false); |
| 1398 memset(buffer2->data(), 0, kSize2); | 1500 memset(buffer2->data(), 0, kSize2); |
| 1399 | 1501 |
| 1400 EXPECT_EQ(2000, WriteData(entry, 0, 0, buffer1, 2000, false)); | 1502 EXPECT_EQ(2000, WriteData(entry, 0, 0, buffer1.get(), 2000, false)); |
| 1401 EXPECT_EQ(2000, ReadData(entry, 0, 0, buffer2, 2000)); | 1503 EXPECT_EQ(2000, ReadData(entry, 0, 0, buffer2.get(), 2000)); |
| 1402 EXPECT_EQ(0, memcmp(buffer1->data(), buffer2->data(), kSize1)); | 1504 EXPECT_EQ(0, memcmp(buffer1->data(), buffer2->data(), kSize1)); |
| 1403 EXPECT_EQ(key, entry->GetKey()); | 1505 EXPECT_EQ(key, entry->GetKey()); |
| 1404 EXPECT_TRUE(initial < entry->GetLastModified()); | 1506 EXPECT_TRUE(initial < entry->GetLastModified()); |
| 1405 EXPECT_TRUE(initial < entry->GetLastUsed()); | 1507 EXPECT_TRUE(initial < entry->GetLastUsed()); |
| 1406 | 1508 |
| 1407 entry->Close(); | 1509 entry->Close(); |
| 1408 } | 1510 } |
| 1409 | 1511 |
| 1410 TEST_F(DiskCacheEntryTest, DoomedEntry) { | 1512 TEST_F(DiskCacheEntryTest, DoomedEntry) { |
| 1411 InitCache(); | 1513 InitCache(); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1423 InitCache(); | 1525 InitCache(); |
| 1424 | 1526 |
| 1425 std::string key("the first key"); | 1527 std::string key("the first key"); |
| 1426 disk_cache::Entry* entry; | 1528 disk_cache::Entry* entry; |
| 1427 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 1529 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 1428 | 1530 |
| 1429 // Write to an external file. | 1531 // Write to an external file. |
| 1430 const int kSize = 20000; | 1532 const int kSize = 20000; |
| 1431 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); | 1533 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); |
| 1432 CacheTestFillBuffer(buffer->data(), kSize, false); | 1534 CacheTestFillBuffer(buffer->data(), kSize, false); |
| 1433 EXPECT_EQ(kSize, WriteData(entry, 0, 0, buffer, kSize, false)); | 1535 EXPECT_EQ(kSize, WriteData(entry, 0, 0, buffer.get(), kSize, false)); |
| 1434 entry->Close(); | 1536 entry->Close(); |
| 1435 FlushQueueForTest(); | 1537 FlushQueueForTest(); |
| 1436 | 1538 |
| 1437 disk_cache::Addr address(0x80000001); | 1539 disk_cache::Addr address(0x80000001); |
| 1438 base::FilePath name = cache_impl_->GetFileName(address); | 1540 base::FilePath name = cache_impl_->GetFileName(address); |
| 1439 EXPECT_TRUE(file_util::Delete(name, false)); | 1541 EXPECT_TRUE(file_util::Delete(name, false)); |
| 1440 | 1542 |
| 1441 // Attempt to read the data. | 1543 // Attempt to read the data. |
| 1442 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 1544 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
| 1443 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, ReadData(entry, 0, 0, buffer, kSize)); | 1545 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, |
| 1546 ReadData(entry, 0, 0, buffer.get(), kSize)); |
| 1444 entry->Close(); | 1547 entry->Close(); |
| 1445 | 1548 |
| 1446 // The entry should be gone. | 1549 // The entry should be gone. |
| 1447 ASSERT_NE(net::OK, OpenEntry(key, &entry)); | 1550 ASSERT_NE(net::OK, OpenEntry(key, &entry)); |
| 1448 } | 1551 } |
| 1449 | 1552 |
| 1450 // Test that child entries in a memory cache backend are not visible from | 1553 // Test that child entries in a memory cache backend are not visible from |
| 1451 // enumerations. | 1554 // enumerations. |
| 1452 TEST_F(DiskCacheEntryTest, MemoryOnlyEnumerationWithSparseEntries) { | 1555 TEST_F(DiskCacheEntryTest, MemoryOnlyEnumerationWithSparseEntries) { |
| 1453 SetMemoryOnlyMode(); | 1556 SetMemoryOnlyMode(); |
| 1454 InitCache(); | 1557 InitCache(); |
| 1455 | 1558 |
| 1456 const int kSize = 4096; | 1559 const int kSize = 4096; |
| 1457 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); | 1560 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); |
| 1458 CacheTestFillBuffer(buf->data(), kSize, false); | 1561 CacheTestFillBuffer(buf->data(), kSize, false); |
| 1459 | 1562 |
| 1460 std::string key("the first key"); | 1563 std::string key("the first key"); |
| 1461 disk_cache::Entry* parent_entry; | 1564 disk_cache::Entry* parent_entry; |
| 1462 ASSERT_EQ(net::OK, CreateEntry(key, &parent_entry)); | 1565 ASSERT_EQ(net::OK, CreateEntry(key, &parent_entry)); |
| 1463 | 1566 |
| 1464 // Writes to the parent entry. | 1567 // Writes to the parent entry. |
| 1465 EXPECT_EQ(kSize, parent_entry->WriteSparseData(0, buf, kSize, | 1568 EXPECT_EQ(kSize, |
| 1466 net::CompletionCallback())); | 1569 parent_entry->WriteSparseData( |
| 1570 0, buf.get(), kSize, net::CompletionCallback())); |
| 1467 | 1571 |
| 1468 // This write creates a child entry and writes to it. | 1572 // This write creates a child entry and writes to it. |
| 1469 EXPECT_EQ(kSize, parent_entry->WriteSparseData(8192, buf, kSize, | 1573 EXPECT_EQ(kSize, |
| 1470 net::CompletionCallback())); | 1574 parent_entry->WriteSparseData( |
| 1575 8192, buf.get(), kSize, net::CompletionCallback())); |
| 1471 | 1576 |
| 1472 parent_entry->Close(); | 1577 parent_entry->Close(); |
| 1473 | 1578 |
| 1474 // Perform the enumerations. | 1579 // Perform the enumerations. |
| 1475 void* iter = NULL; | 1580 void* iter = NULL; |
| 1476 disk_cache::Entry* entry = NULL; | 1581 disk_cache::Entry* entry = NULL; |
| 1477 int count = 0; | 1582 int count = 0; |
| 1478 while (OpenNextEntry(&iter, &entry) == net::OK) { | 1583 while (OpenNextEntry(&iter, &entry) == net::OK) { |
| 1479 ASSERT_TRUE(entry != NULL); | 1584 ASSERT_TRUE(entry != NULL); |
| 1480 ++count; | 1585 ++count; |
| (...skipping 24 matching lines...) Expand all Loading... |
| 1505 } | 1610 } |
| 1506 | 1611 |
| 1507 // Reads |size| bytes from |entry| at |offset| and verifies that they are the | 1612 // Reads |size| bytes from |entry| at |offset| and verifies that they are the |
| 1508 // same as the content of the provided |buffer|. | 1613 // same as the content of the provided |buffer|. |
| 1509 void VerifyContentSparseIO(disk_cache::Entry* entry, int64 offset, char* buffer, | 1614 void VerifyContentSparseIO(disk_cache::Entry* entry, int64 offset, char* buffer, |
| 1510 int size) { | 1615 int size) { |
| 1511 net::TestCompletionCallback cb; | 1616 net::TestCompletionCallback cb; |
| 1512 | 1617 |
| 1513 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(size)); | 1618 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(size)); |
| 1514 memset(buf_1->data(), 0, size); | 1619 memset(buf_1->data(), 0, size); |
| 1515 int ret = entry->ReadSparseData(offset, buf_1, size, cb.callback()); | 1620 int ret = entry->ReadSparseData(offset, buf_1.get(), size, cb.callback()); |
| 1516 EXPECT_EQ(size, cb.GetResult(ret)); | 1621 EXPECT_EQ(size, cb.GetResult(ret)); |
| 1517 EXPECT_EQ(0, memcmp(buf_1->data(), buffer, size)); | 1622 EXPECT_EQ(0, memcmp(buf_1->data(), buffer, size)); |
| 1518 } | 1623 } |
| 1519 | 1624 |
| 1520 void DiskCacheEntryTest::BasicSparseIO() { | 1625 void DiskCacheEntryTest::BasicSparseIO() { |
| 1521 std::string key("the first key"); | 1626 std::string key("the first key"); |
| 1522 disk_cache::Entry* entry; | 1627 disk_cache::Entry* entry; |
| 1523 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 1628 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 1524 | 1629 |
| 1525 const int kSize = 2048; | 1630 const int kSize = 2048; |
| 1526 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(kSize)); | 1631 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(kSize)); |
| 1527 scoped_refptr<net::IOBuffer> buf_2(new net::IOBuffer(kSize)); | 1632 scoped_refptr<net::IOBuffer> buf_2(new net::IOBuffer(kSize)); |
| 1528 CacheTestFillBuffer(buf_1->data(), kSize, false); | 1633 CacheTestFillBuffer(buf_1->data(), kSize, false); |
| 1529 | 1634 |
| 1530 // Write at offset 0. | 1635 // Write at offset 0. |
| 1531 VerifySparseIO(entry, 0, buf_1, kSize, buf_2); | 1636 VerifySparseIO(entry, 0, buf_1.get(), kSize, buf_2.get()); |
| 1532 | 1637 |
| 1533 // Write at offset 0x400000 (4 MB). | 1638 // Write at offset 0x400000 (4 MB). |
| 1534 VerifySparseIO(entry, 0x400000, buf_1, kSize, buf_2); | 1639 VerifySparseIO(entry, 0x400000, buf_1.get(), kSize, buf_2.get()); |
| 1535 | 1640 |
| 1536 // Write at offset 0x800000000 (32 GB). | 1641 // Write at offset 0x800000000 (32 GB). |
| 1537 VerifySparseIO(entry, 0x800000000LL, buf_1, kSize, buf_2); | 1642 VerifySparseIO(entry, 0x800000000LL, buf_1.get(), kSize, buf_2.get()); |
| 1538 | 1643 |
| 1539 entry->Close(); | 1644 entry->Close(); |
| 1540 | 1645 |
| 1541 // Check everything again. | 1646 // Check everything again. |
| 1542 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 1647 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
| 1543 VerifyContentSparseIO(entry, 0, buf_1->data(), kSize); | 1648 VerifyContentSparseIO(entry, 0, buf_1->data(), kSize); |
| 1544 VerifyContentSparseIO(entry, 0x400000, buf_1->data(), kSize); | 1649 VerifyContentSparseIO(entry, 0x400000, buf_1->data(), kSize); |
| 1545 VerifyContentSparseIO(entry, 0x800000000LL, buf_1->data(), kSize); | 1650 VerifyContentSparseIO(entry, 0x800000000LL, buf_1->data(), kSize); |
| 1546 entry->Close(); | 1651 entry->Close(); |
| 1547 } | 1652 } |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1562 disk_cache::Entry* entry; | 1667 disk_cache::Entry* entry; |
| 1563 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 1668 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 1564 | 1669 |
| 1565 // Write 1.2 MB so that we cover multiple entries. | 1670 // Write 1.2 MB so that we cover multiple entries. |
| 1566 const int kSize = 1200 * 1024; | 1671 const int kSize = 1200 * 1024; |
| 1567 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(kSize)); | 1672 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(kSize)); |
| 1568 scoped_refptr<net::IOBuffer> buf_2(new net::IOBuffer(kSize)); | 1673 scoped_refptr<net::IOBuffer> buf_2(new net::IOBuffer(kSize)); |
| 1569 CacheTestFillBuffer(buf_1->data(), kSize, false); | 1674 CacheTestFillBuffer(buf_1->data(), kSize, false); |
| 1570 | 1675 |
| 1571 // Write at offset 0x20F0000 (33 MB - 64 KB). | 1676 // Write at offset 0x20F0000 (33 MB - 64 KB). |
| 1572 VerifySparseIO(entry, 0x20F0000, buf_1, kSize, buf_2); | 1677 VerifySparseIO(entry, 0x20F0000, buf_1.get(), kSize, buf_2.get()); |
| 1573 entry->Close(); | 1678 entry->Close(); |
| 1574 | 1679 |
| 1575 // Check it again. | 1680 // Check it again. |
| 1576 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 1681 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
| 1577 VerifyContentSparseIO(entry, 0x20F0000, buf_1->data(), kSize); | 1682 VerifyContentSparseIO(entry, 0x20F0000, buf_1->data(), kSize); |
| 1578 entry->Close(); | 1683 entry->Close(); |
| 1579 } | 1684 } |
| 1580 | 1685 |
| 1581 TEST_F(DiskCacheEntryTest, HugeSparseIO) { | 1686 TEST_F(DiskCacheEntryTest, HugeSparseIO) { |
| 1582 InitCache(); | 1687 InitCache(); |
| 1583 HugeSparseIO(); | 1688 HugeSparseIO(); |
| 1584 } | 1689 } |
| 1585 | 1690 |
| 1586 TEST_F(DiskCacheEntryTest, MemoryOnlyHugeSparseIO) { | 1691 TEST_F(DiskCacheEntryTest, MemoryOnlyHugeSparseIO) { |
| 1587 SetMemoryOnlyMode(); | 1692 SetMemoryOnlyMode(); |
| 1588 InitCache(); | 1693 InitCache(); |
| 1589 HugeSparseIO(); | 1694 HugeSparseIO(); |
| 1590 } | 1695 } |
| 1591 | 1696 |
| 1592 void DiskCacheEntryTest::GetAvailableRange() { | 1697 void DiskCacheEntryTest::GetAvailableRange() { |
| 1593 std::string key("the first key"); | 1698 std::string key("the first key"); |
| 1594 disk_cache::Entry* entry; | 1699 disk_cache::Entry* entry; |
| 1595 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 1700 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 1596 | 1701 |
| 1597 const int kSize = 16 * 1024; | 1702 const int kSize = 16 * 1024; |
| 1598 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); | 1703 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); |
| 1599 CacheTestFillBuffer(buf->data(), kSize, false); | 1704 CacheTestFillBuffer(buf->data(), kSize, false); |
| 1600 | 1705 |
| 1601 // Write at offset 0x20F0000 (33 MB - 64 KB), and 0x20F4400 (33 MB - 47 KB). | 1706 // Write at offset 0x20F0000 (33 MB - 64 KB), and 0x20F4400 (33 MB - 47 KB). |
| 1602 EXPECT_EQ(kSize, WriteSparseData(entry, 0x20F0000, buf, kSize)); | 1707 EXPECT_EQ(kSize, WriteSparseData(entry, 0x20F0000, buf.get(), kSize)); |
| 1603 EXPECT_EQ(kSize, WriteSparseData(entry, 0x20F4400, buf, kSize)); | 1708 EXPECT_EQ(kSize, WriteSparseData(entry, 0x20F4400, buf.get(), kSize)); |
| 1604 | 1709 |
| 1605 // We stop at the first empty block. | 1710 // We stop at the first empty block. |
| 1606 int64 start; | 1711 int64 start; |
| 1607 net::TestCompletionCallback cb; | 1712 net::TestCompletionCallback cb; |
| 1608 int rv = entry->GetAvailableRange( | 1713 int rv = entry->GetAvailableRange( |
| 1609 0x20F0000, kSize * 2, &start, cb.callback()); | 1714 0x20F0000, kSize * 2, &start, cb.callback()); |
| 1610 EXPECT_EQ(kSize, cb.GetResult(rv)); | 1715 EXPECT_EQ(kSize, cb.GetResult(rv)); |
| 1611 EXPECT_EQ(0x20F0000, start); | 1716 EXPECT_EQ(0x20F0000, start); |
| 1612 | 1717 |
| 1613 start = 0; | 1718 start = 0; |
| 1614 rv = entry->GetAvailableRange(0, kSize, &start, cb.callback()); | 1719 rv = entry->GetAvailableRange(0, kSize, &start, cb.callback()); |
| 1615 EXPECT_EQ(0, cb.GetResult(rv)); | 1720 EXPECT_EQ(0, cb.GetResult(rv)); |
| 1616 rv = entry->GetAvailableRange( | 1721 rv = entry->GetAvailableRange( |
| 1617 0x20F0000 - kSize, kSize, &start, cb.callback()); | 1722 0x20F0000 - kSize, kSize, &start, cb.callback()); |
| 1618 EXPECT_EQ(0, cb.GetResult(rv)); | 1723 EXPECT_EQ(0, cb.GetResult(rv)); |
| 1619 rv = entry->GetAvailableRange(0, 0x2100000, &start, cb.callback()); | 1724 rv = entry->GetAvailableRange(0, 0x2100000, &start, cb.callback()); |
| 1620 EXPECT_EQ(kSize, cb.GetResult(rv)); | 1725 EXPECT_EQ(kSize, cb.GetResult(rv)); |
| 1621 EXPECT_EQ(0x20F0000, start); | 1726 EXPECT_EQ(0x20F0000, start); |
| 1622 | 1727 |
| 1623 // We should be able to Read based on the results of GetAvailableRange. | 1728 // We should be able to Read based on the results of GetAvailableRange. |
| 1624 start = -1; | 1729 start = -1; |
| 1625 rv = entry->GetAvailableRange(0x2100000, kSize, &start, cb.callback()); | 1730 rv = entry->GetAvailableRange(0x2100000, kSize, &start, cb.callback()); |
| 1626 EXPECT_EQ(0, cb.GetResult(rv)); | 1731 EXPECT_EQ(0, cb.GetResult(rv)); |
| 1627 rv = entry->ReadSparseData(start, buf, kSize, cb.callback()); | 1732 rv = entry->ReadSparseData(start, buf.get(), kSize, cb.callback()); |
| 1628 EXPECT_EQ(0, cb.GetResult(rv)); | 1733 EXPECT_EQ(0, cb.GetResult(rv)); |
| 1629 | 1734 |
| 1630 start = 0; | 1735 start = 0; |
| 1631 rv = entry->GetAvailableRange(0x20F2000, kSize, &start, cb.callback()); | 1736 rv = entry->GetAvailableRange(0x20F2000, kSize, &start, cb.callback()); |
| 1632 EXPECT_EQ(0x2000, cb.GetResult(rv)); | 1737 EXPECT_EQ(0x2000, cb.GetResult(rv)); |
| 1633 EXPECT_EQ(0x20F2000, start); | 1738 EXPECT_EQ(0x20F2000, start); |
| 1634 EXPECT_EQ(0x2000, ReadSparseData(entry, start, buf, kSize)); | 1739 EXPECT_EQ(0x2000, ReadSparseData(entry, start, buf.get(), kSize)); |
| 1635 | 1740 |
| 1636 // Make sure that we respect the |len| argument. | 1741 // Make sure that we respect the |len| argument. |
| 1637 start = 0; | 1742 start = 0; |
| 1638 rv = entry->GetAvailableRange( | 1743 rv = entry->GetAvailableRange( |
| 1639 0x20F0001 - kSize, kSize, &start, cb.callback()); | 1744 0x20F0001 - kSize, kSize, &start, cb.callback()); |
| 1640 EXPECT_EQ(1, cb.GetResult(rv)); | 1745 EXPECT_EQ(1, cb.GetResult(rv)); |
| 1641 EXPECT_EQ(0x20F0000, start); | 1746 EXPECT_EQ(0x20F0000, start); |
| 1642 | 1747 |
| 1643 entry->Close(); | 1748 entry->Close(); |
| 1644 } | 1749 } |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1657 void DiskCacheEntryTest::CouldBeSparse() { | 1762 void DiskCacheEntryTest::CouldBeSparse() { |
| 1658 std::string key("the first key"); | 1763 std::string key("the first key"); |
| 1659 disk_cache::Entry* entry; | 1764 disk_cache::Entry* entry; |
| 1660 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 1765 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 1661 | 1766 |
| 1662 const int kSize = 16 * 1024; | 1767 const int kSize = 16 * 1024; |
| 1663 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); | 1768 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); |
| 1664 CacheTestFillBuffer(buf->data(), kSize, false); | 1769 CacheTestFillBuffer(buf->data(), kSize, false); |
| 1665 | 1770 |
| 1666 // Write at offset 0x20F0000 (33 MB - 64 KB). | 1771 // Write at offset 0x20F0000 (33 MB - 64 KB). |
| 1667 EXPECT_EQ(kSize, WriteSparseData(entry, 0x20F0000, buf, kSize)); | 1772 EXPECT_EQ(kSize, WriteSparseData(entry, 0x20F0000, buf.get(), kSize)); |
| 1668 | 1773 |
| 1669 EXPECT_TRUE(entry->CouldBeSparse()); | 1774 EXPECT_TRUE(entry->CouldBeSparse()); |
| 1670 entry->Close(); | 1775 entry->Close(); |
| 1671 | 1776 |
| 1672 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 1777 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
| 1673 EXPECT_TRUE(entry->CouldBeSparse()); | 1778 EXPECT_TRUE(entry->CouldBeSparse()); |
| 1674 entry->Close(); | 1779 entry->Close(); |
| 1675 | 1780 |
| 1676 // Now verify a regular entry. | 1781 // Now verify a regular entry. |
| 1677 key.assign("another key"); | 1782 key.assign("another key"); |
| 1678 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 1783 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 1679 EXPECT_FALSE(entry->CouldBeSparse()); | 1784 EXPECT_FALSE(entry->CouldBeSparse()); |
| 1680 | 1785 |
| 1681 EXPECT_EQ(kSize, WriteData(entry, 0, 0, buf, kSize, false)); | 1786 EXPECT_EQ(kSize, WriteData(entry, 0, 0, buf.get(), kSize, false)); |
| 1682 EXPECT_EQ(kSize, WriteData(entry, 1, 0, buf, kSize, false)); | 1787 EXPECT_EQ(kSize, WriteData(entry, 1, 0, buf.get(), kSize, false)); |
| 1683 EXPECT_EQ(kSize, WriteData(entry, 2, 0, buf, kSize, false)); | 1788 EXPECT_EQ(kSize, WriteData(entry, 2, 0, buf.get(), kSize, false)); |
| 1684 | 1789 |
| 1685 EXPECT_FALSE(entry->CouldBeSparse()); | 1790 EXPECT_FALSE(entry->CouldBeSparse()); |
| 1686 entry->Close(); | 1791 entry->Close(); |
| 1687 | 1792 |
| 1688 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 1793 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
| 1689 EXPECT_FALSE(entry->CouldBeSparse()); | 1794 EXPECT_FALSE(entry->CouldBeSparse()); |
| 1690 entry->Close(); | 1795 entry->Close(); |
| 1691 } | 1796 } |
| 1692 | 1797 |
| 1693 TEST_F(DiskCacheEntryTest, CouldBeSparse) { | 1798 TEST_F(DiskCacheEntryTest, CouldBeSparse) { |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1711 CacheTestFillBuffer(buf_1->data(), kSize, false); | 1816 CacheTestFillBuffer(buf_1->data(), kSize, false); |
| 1712 | 1817 |
| 1713 std::string key("the first key"); | 1818 std::string key("the first key"); |
| 1714 disk_cache::Entry* entry; | 1819 disk_cache::Entry* entry; |
| 1715 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 1820 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 1716 | 1821 |
| 1717 // This loop writes back to back starting from offset 0 and 9000. | 1822 // This loop writes back to back starting from offset 0 and 9000. |
| 1718 for (int i = 0; i < kSize; i += 1024) { | 1823 for (int i = 0; i < kSize; i += 1024) { |
| 1719 scoped_refptr<net::WrappedIOBuffer> buf_3( | 1824 scoped_refptr<net::WrappedIOBuffer> buf_3( |
| 1720 new net::WrappedIOBuffer(buf_1->data() + i)); | 1825 new net::WrappedIOBuffer(buf_1->data() + i)); |
| 1721 VerifySparseIO(entry, i, buf_3, 1024, buf_2); | 1826 VerifySparseIO(entry, i, buf_3.get(), 1024, buf_2.get()); |
| 1722 VerifySparseIO(entry, 9000 + i, buf_3, 1024, buf_2); | 1827 VerifySparseIO(entry, 9000 + i, buf_3.get(), 1024, buf_2.get()); |
| 1723 } | 1828 } |
| 1724 | 1829 |
| 1725 // Make sure we have data written. | 1830 // Make sure we have data written. |
| 1726 VerifyContentSparseIO(entry, 0, buf_1->data(), kSize); | 1831 VerifyContentSparseIO(entry, 0, buf_1->data(), kSize); |
| 1727 VerifyContentSparseIO(entry, 9000, buf_1->data(), kSize); | 1832 VerifyContentSparseIO(entry, 9000, buf_1->data(), kSize); |
| 1728 | 1833 |
| 1729 // This tests a large write that spans 3 entries from a misaligned offset. | 1834 // This tests a large write that spans 3 entries from a misaligned offset. |
| 1730 VerifySparseIO(entry, 20481, buf_1, 8192, buf_2); | 1835 VerifySparseIO(entry, 20481, buf_1.get(), 8192, buf_2.get()); |
| 1731 | 1836 |
| 1732 entry->Close(); | 1837 entry->Close(); |
| 1733 } | 1838 } |
| 1734 | 1839 |
| 1735 TEST_F(DiskCacheEntryTest, MemoryOnlyMisalignedGetAvailableRange) { | 1840 TEST_F(DiskCacheEntryTest, MemoryOnlyMisalignedGetAvailableRange) { |
| 1736 SetMemoryOnlyMode(); | 1841 SetMemoryOnlyMode(); |
| 1737 InitCache(); | 1842 InitCache(); |
| 1738 | 1843 |
| 1739 const int kSize = 8192; | 1844 const int kSize = 8192; |
| 1740 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); | 1845 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); |
| 1741 CacheTestFillBuffer(buf->data(), kSize, false); | 1846 CacheTestFillBuffer(buf->data(), kSize, false); |
| 1742 | 1847 |
| 1743 disk_cache::Entry* entry; | 1848 disk_cache::Entry* entry; |
| 1744 std::string key("the first key"); | 1849 std::string key("the first key"); |
| 1745 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 1850 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 1746 | 1851 |
| 1747 // Writes in the middle of an entry. | 1852 // Writes in the middle of an entry. |
| 1748 EXPECT_EQ(1024, entry->WriteSparseData( | 1853 EXPECT_EQ( |
| 1749 0, buf, 1024, net::CompletionCallback())); | 1854 1024, |
| 1750 EXPECT_EQ(1024, entry->WriteSparseData( | 1855 entry->WriteSparseData(0, buf.get(), 1024, net::CompletionCallback())); |
| 1751 5120, buf, 1024, net::CompletionCallback())); | 1856 EXPECT_EQ( |
| 1752 EXPECT_EQ(1024, entry->WriteSparseData( | 1857 1024, |
| 1753 10000, buf, 1024, net::CompletionCallback())); | 1858 entry->WriteSparseData(5120, buf.get(), 1024, net::CompletionCallback())); |
| 1859 EXPECT_EQ(1024, |
| 1860 entry->WriteSparseData( |
| 1861 10000, buf.get(), 1024, net::CompletionCallback())); |
| 1754 | 1862 |
| 1755 // Writes in the middle of an entry and spans 2 child entries. | 1863 // Writes in the middle of an entry and spans 2 child entries. |
| 1756 EXPECT_EQ(8192, entry->WriteSparseData( | 1864 EXPECT_EQ(8192, |
| 1757 50000, buf, 8192, net::CompletionCallback())); | 1865 entry->WriteSparseData( |
| 1866 50000, buf.get(), 8192, net::CompletionCallback())); |
| 1758 | 1867 |
| 1759 int64 start; | 1868 int64 start; |
| 1760 net::TestCompletionCallback cb; | 1869 net::TestCompletionCallback cb; |
| 1761 // Test that we stop at a discontinuous child at the second block. | 1870 // Test that we stop at a discontinuous child at the second block. |
| 1762 int rv = entry->GetAvailableRange(0, 10000, &start, cb.callback()); | 1871 int rv = entry->GetAvailableRange(0, 10000, &start, cb.callback()); |
| 1763 EXPECT_EQ(1024, cb.GetResult(rv)); | 1872 EXPECT_EQ(1024, cb.GetResult(rv)); |
| 1764 EXPECT_EQ(0, start); | 1873 EXPECT_EQ(0, start); |
| 1765 | 1874 |
| 1766 // Test that number of bytes is reported correctly when we start from the | 1875 // Test that number of bytes is reported correctly when we start from the |
| 1767 // middle of a filled region. | 1876 // middle of a filled region. |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1798 std::string key("the first key"); | 1907 std::string key("the first key"); |
| 1799 disk_cache::Entry* entry1; | 1908 disk_cache::Entry* entry1; |
| 1800 ASSERT_EQ(net::OK, CreateEntry(key, &entry1)); | 1909 ASSERT_EQ(net::OK, CreateEntry(key, &entry1)); |
| 1801 | 1910 |
| 1802 const int kSize = 2048; | 1911 const int kSize = 2048; |
| 1803 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(kSize)); | 1912 scoped_refptr<net::IOBuffer> buf_1(new net::IOBuffer(kSize)); |
| 1804 scoped_refptr<net::IOBuffer> buf_2(new net::IOBuffer(kSize)); | 1913 scoped_refptr<net::IOBuffer> buf_2(new net::IOBuffer(kSize)); |
| 1805 CacheTestFillBuffer(buf_1->data(), kSize, false); | 1914 CacheTestFillBuffer(buf_1->data(), kSize, false); |
| 1806 | 1915 |
| 1807 // Write at offset 0. | 1916 // Write at offset 0. |
| 1808 VerifySparseIO(entry1, 0, buf_1, kSize, buf_2); | 1917 VerifySparseIO(entry1, 0, buf_1.get(), kSize, buf_2.get()); |
| 1809 entry1->Close(); | 1918 entry1->Close(); |
| 1810 | 1919 |
| 1811 // Write at offset 2048. | 1920 // Write at offset 2048. |
| 1812 ASSERT_EQ(net::OK, OpenEntry(key, &entry1)); | 1921 ASSERT_EQ(net::OK, OpenEntry(key, &entry1)); |
| 1813 VerifySparseIO(entry1, 2048, buf_1, kSize, buf_2); | 1922 VerifySparseIO(entry1, 2048, buf_1.get(), kSize, buf_2.get()); |
| 1814 | 1923 |
| 1815 disk_cache::Entry* entry2; | 1924 disk_cache::Entry* entry2; |
| 1816 ASSERT_EQ(net::OK, CreateEntry("the second key", &entry2)); | 1925 ASSERT_EQ(net::OK, CreateEntry("the second key", &entry2)); |
| 1817 | 1926 |
| 1818 entry1->Close(); | 1927 entry1->Close(); |
| 1819 entry2->Close(); | 1928 entry2->Close(); |
| 1820 FlushQueueForTest(); | 1929 FlushQueueForTest(); |
| 1821 if (memory_only_) | 1930 if (memory_only_) |
| 1822 EXPECT_EQ(2, cache_->GetEntryCount()); | 1931 EXPECT_EQ(2, cache_->GetEntryCount()); |
| 1823 else | 1932 else |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1844 ASSERT_EQ(net::OK, CreateEntry(key1, &entry1)); | 1953 ASSERT_EQ(net::OK, CreateEntry(key1, &entry1)); |
| 1845 ASSERT_EQ(net::OK, CreateEntry(key2, &entry2)); | 1954 ASSERT_EQ(net::OK, CreateEntry(key2, &entry2)); |
| 1846 | 1955 |
| 1847 const int kSize = 4 * 1024; | 1956 const int kSize = 4 * 1024; |
| 1848 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); | 1957 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); |
| 1849 CacheTestFillBuffer(buf->data(), kSize, false); | 1958 CacheTestFillBuffer(buf->data(), kSize, false); |
| 1850 | 1959 |
| 1851 int64 offset = 1024; | 1960 int64 offset = 1024; |
| 1852 // Write to a bunch of ranges. | 1961 // Write to a bunch of ranges. |
| 1853 for (int i = 0; i < 12; i++) { | 1962 for (int i = 0; i < 12; i++) { |
| 1854 EXPECT_EQ(kSize, entry1->WriteSparseData(offset, buf, kSize, | 1963 EXPECT_EQ(kSize, |
| 1855 net::CompletionCallback())); | 1964 entry1->WriteSparseData( |
| 1965 offset, buf.get(), kSize, net::CompletionCallback())); |
| 1856 // Keep the second map under the default size. | 1966 // Keep the second map under the default size. |
| 1857 if (i < 9) { | 1967 if (i < 9) { |
| 1858 EXPECT_EQ(kSize, entry2->WriteSparseData(offset, buf, kSize, | 1968 EXPECT_EQ(kSize, |
| 1859 net::CompletionCallback())); | 1969 entry2->WriteSparseData( |
| 1970 offset, buf.get(), kSize, net::CompletionCallback())); |
| 1860 } | 1971 } |
| 1861 | 1972 |
| 1862 offset *= 4; | 1973 offset *= 4; |
| 1863 } | 1974 } |
| 1864 | 1975 |
| 1865 if (memory_only_) | 1976 if (memory_only_) |
| 1866 EXPECT_EQ(2, cache_->GetEntryCount()); | 1977 EXPECT_EQ(2, cache_->GetEntryCount()); |
| 1867 else | 1978 else |
| 1868 EXPECT_EQ(15, cache_->GetEntryCount()); | 1979 EXPECT_EQ(15, cache_->GetEntryCount()); |
| 1869 | 1980 |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1935 disk_cache::Entry* entry; | 2046 disk_cache::Entry* entry; |
| 1936 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 2047 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 1937 | 2048 |
| 1938 const int kSize = 4 * 1024; | 2049 const int kSize = 4 * 1024; |
| 1939 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); | 2050 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); |
| 1940 CacheTestFillBuffer(buf->data(), kSize, false); | 2051 CacheTestFillBuffer(buf->data(), kSize, false); |
| 1941 | 2052 |
| 1942 int64 offset = 1024; | 2053 int64 offset = 1024; |
| 1943 // Write to a bunch of ranges. | 2054 // Write to a bunch of ranges. |
| 1944 for (int i = 0; i < 12; i++) { | 2055 for (int i = 0; i < 12; i++) { |
| 1945 EXPECT_EQ(kSize, entry->WriteSparseData(offset, buf, kSize, | 2056 EXPECT_EQ(kSize, |
| 1946 net::CompletionCallback())); | 2057 entry->WriteSparseData( |
| 2058 offset, buf.get(), kSize, net::CompletionCallback())); |
| 1947 offset *= 4; | 2059 offset *= 4; |
| 1948 } | 2060 } |
| 1949 EXPECT_EQ(9, cache_->GetEntryCount()); | 2061 EXPECT_EQ(9, cache_->GetEntryCount()); |
| 1950 | 2062 |
| 1951 entry->Close(); | 2063 entry->Close(); |
| 1952 SparseTestCompletionCallback cb(cache_); | 2064 SparseTestCompletionCallback cb(cache_); |
| 1953 int rv = cache_->DoomEntry(key, cb.callback()); | 2065 int rv = cache_->DoomEntry(key, cb.callback()); |
| 1954 EXPECT_EQ(net::ERR_IO_PENDING, rv); | 2066 EXPECT_EQ(net::ERR_IO_PENDING, rv); |
| 1955 EXPECT_EQ(net::OK, cb.WaitForResult()); | 2067 EXPECT_EQ(net::OK, cb.WaitForResult()); |
| 1956 | 2068 |
| 1957 // TearDown will attempt to delete the cache_. | 2069 // TearDown will attempt to delete the cache_. |
| 1958 cache_ = NULL; | 2070 cache_ = NULL; |
| 1959 } | 2071 } |
| 1960 | 2072 |
| 1961 void DiskCacheEntryTest::PartialSparseEntry() { | 2073 void DiskCacheEntryTest::PartialSparseEntry() { |
| 1962 std::string key("the first key"); | 2074 std::string key("the first key"); |
| 1963 disk_cache::Entry* entry; | 2075 disk_cache::Entry* entry; |
| 1964 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 2076 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 1965 | 2077 |
| 1966 // We should be able to deal with IO that is not aligned to the block size | 2078 // We should be able to deal with IO that is not aligned to the block size |
| 1967 // of a sparse entry, at least to write a big range without leaving holes. | 2079 // of a sparse entry, at least to write a big range without leaving holes. |
| 1968 const int kSize = 4 * 1024; | 2080 const int kSize = 4 * 1024; |
| 1969 const int kSmallSize = 128; | 2081 const int kSmallSize = 128; |
| 1970 scoped_refptr<net::IOBuffer> buf1(new net::IOBuffer(kSize)); | 2082 scoped_refptr<net::IOBuffer> buf1(new net::IOBuffer(kSize)); |
| 1971 CacheTestFillBuffer(buf1->data(), kSize, false); | 2083 CacheTestFillBuffer(buf1->data(), kSize, false); |
| 1972 | 2084 |
| 1973 // The first write is just to extend the entry. The third write occupies | 2085 // The first write is just to extend the entry. The third write occupies |
| 1974 // a 1KB block partially, it may not be written internally depending on the | 2086 // a 1KB block partially, it may not be written internally depending on the |
| 1975 // implementation. | 2087 // implementation. |
| 1976 EXPECT_EQ(kSize, WriteSparseData(entry, 20000, buf1, kSize)); | 2088 EXPECT_EQ(kSize, WriteSparseData(entry, 20000, buf1.get(), kSize)); |
| 1977 EXPECT_EQ(kSize, WriteSparseData(entry, 500, buf1, kSize)); | 2089 EXPECT_EQ(kSize, WriteSparseData(entry, 500, buf1.get(), kSize)); |
| 1978 EXPECT_EQ(kSmallSize, WriteSparseData(entry, 1080321, buf1, kSmallSize)); | 2090 EXPECT_EQ(kSmallSize, |
| 2091 WriteSparseData(entry, 1080321, buf1.get(), kSmallSize)); |
| 1979 entry->Close(); | 2092 entry->Close(); |
| 1980 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 2093 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
| 1981 | 2094 |
| 1982 scoped_refptr<net::IOBuffer> buf2(new net::IOBuffer(kSize)); | 2095 scoped_refptr<net::IOBuffer> buf2(new net::IOBuffer(kSize)); |
| 1983 memset(buf2->data(), 0, kSize); | 2096 memset(buf2->data(), 0, kSize); |
| 1984 EXPECT_EQ(0, ReadSparseData(entry, 8000, buf2, kSize)); | 2097 EXPECT_EQ(0, ReadSparseData(entry, 8000, buf2.get(), kSize)); |
| 1985 | 2098 |
| 1986 EXPECT_EQ(500, ReadSparseData(entry, kSize, buf2, kSize)); | 2099 EXPECT_EQ(500, ReadSparseData(entry, kSize, buf2.get(), kSize)); |
| 1987 EXPECT_EQ(0, memcmp(buf2->data(), buf1->data() + kSize - 500, 500)); | 2100 EXPECT_EQ(0, memcmp(buf2->data(), buf1->data() + kSize - 500, 500)); |
| 1988 EXPECT_EQ(0, ReadSparseData(entry, 0, buf2, kSize)); | 2101 EXPECT_EQ(0, ReadSparseData(entry, 0, buf2.get(), kSize)); |
| 1989 | 2102 |
| 1990 // This read should not change anything. | 2103 // This read should not change anything. |
| 1991 EXPECT_EQ(96, ReadSparseData(entry, 24000, buf2, kSize)); | 2104 EXPECT_EQ(96, ReadSparseData(entry, 24000, buf2.get(), kSize)); |
| 1992 EXPECT_EQ(500, ReadSparseData(entry, kSize, buf2, kSize)); | 2105 EXPECT_EQ(500, ReadSparseData(entry, kSize, buf2.get(), kSize)); |
| 1993 EXPECT_EQ(0, ReadSparseData(entry, 99, buf2, kSize)); | 2106 EXPECT_EQ(0, ReadSparseData(entry, 99, buf2.get(), kSize)); |
| 1994 | 2107 |
| 1995 int rv; | 2108 int rv; |
| 1996 int64 start; | 2109 int64 start; |
| 1997 net::TestCompletionCallback cb; | 2110 net::TestCompletionCallback cb; |
| 1998 if (memory_only_) { | 2111 if (memory_only_) { |
| 1999 rv = entry->GetAvailableRange(0, 600, &start, cb.callback()); | 2112 rv = entry->GetAvailableRange(0, 600, &start, cb.callback()); |
| 2000 EXPECT_EQ(100, cb.GetResult(rv)); | 2113 EXPECT_EQ(100, cb.GetResult(rv)); |
| 2001 EXPECT_EQ(500, start); | 2114 EXPECT_EQ(500, start); |
| 2002 } else { | 2115 } else { |
| 2003 rv = entry->GetAvailableRange(0, 2048, &start, cb.callback()); | 2116 rv = entry->GetAvailableRange(0, 2048, &start, cb.callback()); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 2024 EXPECT_EQ(20480, start); | 2137 EXPECT_EQ(20480, start); |
| 2025 } | 2138 } |
| 2026 rv = entry->GetAvailableRange(3073, kSize, &start, cb.callback()); | 2139 rv = entry->GetAvailableRange(3073, kSize, &start, cb.callback()); |
| 2027 EXPECT_EQ(1523, cb.GetResult(rv)); | 2140 EXPECT_EQ(1523, cb.GetResult(rv)); |
| 2028 EXPECT_EQ(3073, start); | 2141 EXPECT_EQ(3073, start); |
| 2029 rv = entry->GetAvailableRange(4600, kSize, &start, cb.callback()); | 2142 rv = entry->GetAvailableRange(4600, kSize, &start, cb.callback()); |
| 2030 EXPECT_EQ(0, cb.GetResult(rv)); | 2143 EXPECT_EQ(0, cb.GetResult(rv)); |
| 2031 EXPECT_EQ(4600, start); | 2144 EXPECT_EQ(4600, start); |
| 2032 | 2145 |
| 2033 // Now make another write and verify that there is no hole in between. | 2146 // Now make another write and verify that there is no hole in between. |
| 2034 EXPECT_EQ(kSize, WriteSparseData(entry, 500 + kSize, buf1, kSize)); | 2147 EXPECT_EQ(kSize, WriteSparseData(entry, 500 + kSize, buf1.get(), kSize)); |
| 2035 rv = entry->GetAvailableRange(1024, 10000, &start, cb.callback()); | 2148 rv = entry->GetAvailableRange(1024, 10000, &start, cb.callback()); |
| 2036 EXPECT_EQ(7 * 1024 + 500, cb.GetResult(rv)); | 2149 EXPECT_EQ(7 * 1024 + 500, cb.GetResult(rv)); |
| 2037 EXPECT_EQ(1024, start); | 2150 EXPECT_EQ(1024, start); |
| 2038 EXPECT_EQ(kSize, ReadSparseData(entry, kSize, buf2, kSize)); | 2151 EXPECT_EQ(kSize, ReadSparseData(entry, kSize, buf2.get(), kSize)); |
| 2039 EXPECT_EQ(0, memcmp(buf2->data(), buf1->data() + kSize - 500, 500)); | 2152 EXPECT_EQ(0, memcmp(buf2->data(), buf1->data() + kSize - 500, 500)); |
| 2040 EXPECT_EQ(0, memcmp(buf2->data() + 500, buf1->data(), kSize - 500)); | 2153 EXPECT_EQ(0, memcmp(buf2->data() + 500, buf1->data(), kSize - 500)); |
| 2041 | 2154 |
| 2042 entry->Close(); | 2155 entry->Close(); |
| 2043 } | 2156 } |
| 2044 | 2157 |
| 2045 TEST_F(DiskCacheEntryTest, PartialSparseEntry) { | 2158 TEST_F(DiskCacheEntryTest, PartialSparseEntry) { |
| 2046 InitCache(); | 2159 InitCache(); |
| 2047 PartialSparseEntry(); | 2160 PartialSparseEntry(); |
| 2048 } | 2161 } |
| 2049 | 2162 |
| 2050 TEST_F(DiskCacheEntryTest, MemoryPartialSparseEntry) { | 2163 TEST_F(DiskCacheEntryTest, MemoryPartialSparseEntry) { |
| 2051 SetMemoryOnlyMode(); | 2164 SetMemoryOnlyMode(); |
| 2052 InitCache(); | 2165 InitCache(); |
| 2053 PartialSparseEntry(); | 2166 PartialSparseEntry(); |
| 2054 } | 2167 } |
| 2055 | 2168 |
| 2056 // Tests that corrupt sparse children are removed automatically. | 2169 // Tests that corrupt sparse children are removed automatically. |
| 2057 TEST_F(DiskCacheEntryTest, CleanupSparseEntry) { | 2170 TEST_F(DiskCacheEntryTest, CleanupSparseEntry) { |
| 2058 InitCache(); | 2171 InitCache(); |
| 2059 std::string key("the first key"); | 2172 std::string key("the first key"); |
| 2060 disk_cache::Entry* entry; | 2173 disk_cache::Entry* entry; |
| 2061 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 2174 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 2062 | 2175 |
| 2063 const int kSize = 4 * 1024; | 2176 const int kSize = 4 * 1024; |
| 2064 scoped_refptr<net::IOBuffer> buf1(new net::IOBuffer(kSize)); | 2177 scoped_refptr<net::IOBuffer> buf1(new net::IOBuffer(kSize)); |
| 2065 CacheTestFillBuffer(buf1->data(), kSize, false); | 2178 CacheTestFillBuffer(buf1->data(), kSize, false); |
| 2066 | 2179 |
| 2067 const int k1Meg = 1024 * 1024; | 2180 const int k1Meg = 1024 * 1024; |
| 2068 EXPECT_EQ(kSize, WriteSparseData(entry, 8192, buf1, kSize)); | 2181 EXPECT_EQ(kSize, WriteSparseData(entry, 8192, buf1.get(), kSize)); |
| 2069 EXPECT_EQ(kSize, WriteSparseData(entry, k1Meg + 8192, buf1, kSize)); | 2182 EXPECT_EQ(kSize, WriteSparseData(entry, k1Meg + 8192, buf1.get(), kSize)); |
| 2070 EXPECT_EQ(kSize, WriteSparseData(entry, 2 * k1Meg + 8192, buf1, kSize)); | 2183 EXPECT_EQ(kSize, WriteSparseData(entry, 2 * k1Meg + 8192, buf1.get(), kSize)); |
| 2071 entry->Close(); | 2184 entry->Close(); |
| 2072 EXPECT_EQ(4, cache_->GetEntryCount()); | 2185 EXPECT_EQ(4, cache_->GetEntryCount()); |
| 2073 | 2186 |
| 2074 void* iter = NULL; | 2187 void* iter = NULL; |
| 2075 int count = 0; | 2188 int count = 0; |
| 2076 std::string child_key[2]; | 2189 std::string child_key[2]; |
| 2077 while (OpenNextEntry(&iter, &entry) == net::OK) { | 2190 while (OpenNextEntry(&iter, &entry) == net::OK) { |
| 2078 ASSERT_TRUE(entry != NULL); | 2191 ASSERT_TRUE(entry != NULL); |
| 2079 // Writing to an entry will alter the LRU list and invalidate the iterator. | 2192 // Writing to an entry will alter the LRU list and invalidate the iterator. |
| 2080 if (entry->GetKey() != key && count < 2) | 2193 if (entry->GetKey() != key && count < 2) |
| 2081 child_key[count++] = entry->GetKey(); | 2194 child_key[count++] = entry->GetKey(); |
| 2082 entry->Close(); | 2195 entry->Close(); |
| 2083 } | 2196 } |
| 2084 for (int i = 0; i < 2; i++) { | 2197 for (int i = 0; i < 2; i++) { |
| 2085 ASSERT_EQ(net::OK, OpenEntry(child_key[i], &entry)); | 2198 ASSERT_EQ(net::OK, OpenEntry(child_key[i], &entry)); |
| 2086 // Overwrite the header's magic and signature. | 2199 // Overwrite the header's magic and signature. |
| 2087 EXPECT_EQ(12, WriteData(entry, 2, 0, buf1, 12, false)); | 2200 EXPECT_EQ(12, WriteData(entry, 2, 0, buf1.get(), 12, false)); |
| 2088 entry->Close(); | 2201 entry->Close(); |
| 2089 } | 2202 } |
| 2090 | 2203 |
| 2091 EXPECT_EQ(4, cache_->GetEntryCount()); | 2204 EXPECT_EQ(4, cache_->GetEntryCount()); |
| 2092 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 2205 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
| 2093 | 2206 |
| 2094 // Two children should be gone. One while reading and one while writing. | 2207 // Two children should be gone. One while reading and one while writing. |
| 2095 EXPECT_EQ(0, ReadSparseData(entry, 2 * k1Meg + 8192, buf1, kSize)); | 2208 EXPECT_EQ(0, ReadSparseData(entry, 2 * k1Meg + 8192, buf1.get(), kSize)); |
| 2096 EXPECT_EQ(kSize, WriteSparseData(entry, k1Meg + 16384, buf1, kSize)); | 2209 EXPECT_EQ(kSize, WriteSparseData(entry, k1Meg + 16384, buf1.get(), kSize)); |
| 2097 EXPECT_EQ(0, ReadSparseData(entry, k1Meg + 8192, buf1, kSize)); | 2210 EXPECT_EQ(0, ReadSparseData(entry, k1Meg + 8192, buf1.get(), kSize)); |
| 2098 | 2211 |
| 2099 // We never touched this one. | 2212 // We never touched this one. |
| 2100 EXPECT_EQ(kSize, ReadSparseData(entry, 8192, buf1, kSize)); | 2213 EXPECT_EQ(kSize, ReadSparseData(entry, 8192, buf1.get(), kSize)); |
| 2101 entry->Close(); | 2214 entry->Close(); |
| 2102 | 2215 |
| 2103 // We re-created one of the corrupt children. | 2216 // We re-created one of the corrupt children. |
| 2104 EXPECT_EQ(3, cache_->GetEntryCount()); | 2217 EXPECT_EQ(3, cache_->GetEntryCount()); |
| 2105 } | 2218 } |
| 2106 | 2219 |
| 2107 TEST_F(DiskCacheEntryTest, CancelSparseIO) { | 2220 TEST_F(DiskCacheEntryTest, CancelSparseIO) { |
| 2108 UseCurrentThread(); | 2221 UseCurrentThread(); |
| 2109 InitCache(); | 2222 InitCache(); |
| 2110 std::string key("the first key"); | 2223 std::string key("the first key"); |
| 2111 disk_cache::Entry* entry; | 2224 disk_cache::Entry* entry; |
| 2112 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 2225 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 2113 | 2226 |
| 2114 const int kSize = 40 * 1024; | 2227 const int kSize = 40 * 1024; |
| 2115 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); | 2228 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kSize)); |
| 2116 CacheTestFillBuffer(buf->data(), kSize, false); | 2229 CacheTestFillBuffer(buf->data(), kSize, false); |
| 2117 | 2230 |
| 2118 // This will open and write two "real" entries. | 2231 // This will open and write two "real" entries. |
| 2119 net::TestCompletionCallback cb1, cb2, cb3, cb4, cb5; | 2232 net::TestCompletionCallback cb1, cb2, cb3, cb4, cb5; |
| 2120 int rv = entry->WriteSparseData( | 2233 int rv = entry->WriteSparseData( |
| 2121 1024 * 1024 - 4096, buf, kSize, cb1.callback()); | 2234 1024 * 1024 - 4096, buf.get(), kSize, cb1.callback()); |
| 2122 EXPECT_EQ(net::ERR_IO_PENDING, rv); | 2235 EXPECT_EQ(net::ERR_IO_PENDING, rv); |
| 2123 | 2236 |
| 2124 int64 offset = 0; | 2237 int64 offset = 0; |
| 2125 rv = entry->GetAvailableRange(offset, kSize, &offset, cb5.callback()); | 2238 rv = entry->GetAvailableRange(offset, kSize, &offset, cb5.callback()); |
| 2126 rv = cb5.GetResult(rv); | 2239 rv = cb5.GetResult(rv); |
| 2127 if (!cb1.have_result()) { | 2240 if (!cb1.have_result()) { |
| 2128 // We may or may not have finished writing to the entry. If we have not, | 2241 // We may or may not have finished writing to the entry. If we have not, |
| 2129 // we cannot start another operation at this time. | 2242 // we cannot start another operation at this time. |
| 2130 EXPECT_EQ(net::ERR_CACHE_OPERATION_NOT_SUPPORTED, rv); | 2243 EXPECT_EQ(net::ERR_CACHE_OPERATION_NOT_SUPPORTED, rv); |
| 2131 } | 2244 } |
| 2132 | 2245 |
| 2133 // We cancel the pending operation, and register multiple notifications. | 2246 // We cancel the pending operation, and register multiple notifications. |
| 2134 entry->CancelSparseIO(); | 2247 entry->CancelSparseIO(); |
| 2135 EXPECT_EQ(net::ERR_IO_PENDING, entry->ReadyForSparseIO(cb2.callback())); | 2248 EXPECT_EQ(net::ERR_IO_PENDING, entry->ReadyForSparseIO(cb2.callback())); |
| 2136 EXPECT_EQ(net::ERR_IO_PENDING, entry->ReadyForSparseIO(cb3.callback())); | 2249 EXPECT_EQ(net::ERR_IO_PENDING, entry->ReadyForSparseIO(cb3.callback())); |
| 2137 entry->CancelSparseIO(); // Should be a no op at this point. | 2250 entry->CancelSparseIO(); // Should be a no op at this point. |
| 2138 EXPECT_EQ(net::ERR_IO_PENDING, entry->ReadyForSparseIO(cb4.callback())); | 2251 EXPECT_EQ(net::ERR_IO_PENDING, entry->ReadyForSparseIO(cb4.callback())); |
| 2139 | 2252 |
| 2140 if (!cb1.have_result()) { | 2253 if (!cb1.have_result()) { |
| 2141 EXPECT_EQ(net::ERR_CACHE_OPERATION_NOT_SUPPORTED, | 2254 EXPECT_EQ(net::ERR_CACHE_OPERATION_NOT_SUPPORTED, |
| 2142 entry->ReadSparseData(offset, buf, kSize, | 2255 entry->ReadSparseData( |
| 2143 net::CompletionCallback())); | 2256 offset, buf.get(), kSize, net::CompletionCallback())); |
| 2144 EXPECT_EQ(net::ERR_CACHE_OPERATION_NOT_SUPPORTED, | 2257 EXPECT_EQ(net::ERR_CACHE_OPERATION_NOT_SUPPORTED, |
| 2145 entry->WriteSparseData(offset, buf, kSize, | 2258 entry->WriteSparseData( |
| 2146 net::CompletionCallback())); | 2259 offset, buf.get(), kSize, net::CompletionCallback())); |
| 2147 } | 2260 } |
| 2148 | 2261 |
| 2149 // Now see if we receive all notifications. Note that we should not be able | 2262 // Now see if we receive all notifications. Note that we should not be able |
| 2150 // to write everything (unless the timing of the system is really weird). | 2263 // to write everything (unless the timing of the system is really weird). |
| 2151 rv = cb1.WaitForResult(); | 2264 rv = cb1.WaitForResult(); |
| 2152 EXPECT_TRUE(rv == 4096 || rv == kSize); | 2265 EXPECT_TRUE(rv == 4096 || rv == kSize); |
| 2153 EXPECT_EQ(net::OK, cb2.WaitForResult()); | 2266 EXPECT_EQ(net::OK, cb2.WaitForResult()); |
| 2154 EXPECT_EQ(net::OK, cb3.WaitForResult()); | 2267 EXPECT_EQ(net::OK, cb3.WaitForResult()); |
| 2155 EXPECT_EQ(net::OK, cb4.WaitForResult()); | 2268 EXPECT_EQ(net::OK, cb4.WaitForResult()); |
| 2156 | 2269 |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2304 | 2417 |
| 2305 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 2418 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 2306 disk_cache::Entry* null = NULL; | 2419 disk_cache::Entry* null = NULL; |
| 2307 EXPECT_NE(null, entry); | 2420 EXPECT_NE(null, entry); |
| 2308 | 2421 |
| 2309 const std::string data = "this is very good data"; | 2422 const std::string data = "this is very good data"; |
| 2310 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(data.size())); | 2423 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(data.size())); |
| 2311 std::copy(data.begin(), data.end(), buffer->data()); | 2424 std::copy(data.begin(), data.end(), buffer->data()); |
| 2312 | 2425 |
| 2313 ASSERT_EQ(implicit_cast<int>(data.size()), | 2426 ASSERT_EQ(implicit_cast<int>(data.size()), |
| 2314 WriteData(entry, 0, 0, buffer, data.size(), false)); | 2427 WriteData(entry, 0, 0, buffer.get(), data.size(), false)); |
| 2315 entry->Close(); | 2428 entry->Close(); |
| 2316 entry = NULL; | 2429 entry = NULL; |
| 2317 | 2430 |
| 2318 // Corrupt the data. | 2431 // Corrupt the data. |
| 2319 base::FilePath entry_file0_path = cache_path_.AppendASCII( | 2432 base::FilePath entry_file0_path = cache_path_.AppendASCII( |
| 2320 disk_cache::simple_util::GetFilenameFromKeyAndIndex(key, 0)); | 2433 disk_cache::simple_util::GetFilenameFromKeyAndIndex(key, 0)); |
| 2321 int flags = base::PLATFORM_FILE_WRITE | base::PLATFORM_FILE_OPEN; | 2434 int flags = base::PLATFORM_FILE_WRITE | base::PLATFORM_FILE_OPEN; |
| 2322 base::PlatformFile entry_file0 = | 2435 base::PlatformFile entry_file0 = |
| 2323 base::CreatePlatformFile(entry_file0_path, flags, NULL, NULL); | 2436 base::CreatePlatformFile(entry_file0_path, flags, NULL, NULL); |
| 2324 ASSERT_NE(base::kInvalidPlatformFileValue, entry_file0); | 2437 ASSERT_NE(base::kInvalidPlatformFileValue, entry_file0); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 2343 | 2456 |
| 2344 disk_cache::Entry* entry = NULL; | 2457 disk_cache::Entry* entry = NULL; |
| 2345 | 2458 |
| 2346 // Open the entry. | 2459 // Open the entry. |
| 2347 EXPECT_EQ(net::OK, OpenEntry(key, &entry)); | 2460 EXPECT_EQ(net::OK, OpenEntry(key, &entry)); |
| 2348 | 2461 |
| 2349 const int kReadBufferSize = 200; | 2462 const int kReadBufferSize = 200; |
| 2350 DCHECK_GE(kReadBufferSize, entry->GetDataSize(0)); | 2463 DCHECK_GE(kReadBufferSize, entry->GetDataSize(0)); |
| 2351 scoped_refptr<net::IOBuffer> read_buffer(new net::IOBuffer(kReadBufferSize)); | 2464 scoped_refptr<net::IOBuffer> read_buffer(new net::IOBuffer(kReadBufferSize)); |
| 2352 EXPECT_EQ(net::ERR_CACHE_CHECKSUM_MISMATCH, | 2465 EXPECT_EQ(net::ERR_CACHE_CHECKSUM_MISMATCH, |
| 2353 ReadData(entry, 0, 0, read_buffer, kReadBufferSize)); | 2466 ReadData(entry, 0, 0, read_buffer.get(), kReadBufferSize)); |
| 2354 | 2467 |
| 2355 entry->Close(); | 2468 entry->Close(); |
| 2356 } | 2469 } |
| 2357 | 2470 |
| 2358 // Tests that an entry that has had an IO error occur can still be Doomed(). | 2471 // Tests that an entry that has had an IO error occur can still be Doomed(). |
| 2359 TEST_F(DiskCacheEntryTest, SimpleCacheErrorThenDoom) { | 2472 TEST_F(DiskCacheEntryTest, SimpleCacheErrorThenDoom) { |
| 2360 SetSimpleCacheMode(); | 2473 SetSimpleCacheMode(); |
| 2361 InitCache(); | 2474 InitCache(); |
| 2362 | 2475 |
| 2363 const char key[] = "the first key"; | 2476 const char key[] = "the first key"; |
| 2364 SimpleCacheMakeBadChecksumEntry(key); | 2477 SimpleCacheMakeBadChecksumEntry(key); |
| 2365 | 2478 |
| 2366 disk_cache::Entry* entry = NULL; | 2479 disk_cache::Entry* entry = NULL; |
| 2367 | 2480 |
| 2368 // Open the entry, forcing an IO error. | 2481 // Open the entry, forcing an IO error. |
| 2369 EXPECT_EQ(net::OK, OpenEntry(key, &entry)); | 2482 EXPECT_EQ(net::OK, OpenEntry(key, &entry)); |
| 2370 | 2483 |
| 2371 const int kReadBufferSize = 200; | 2484 const int kReadBufferSize = 200; |
| 2372 DCHECK_GE(kReadBufferSize, entry->GetDataSize(0)); | 2485 DCHECK_GE(kReadBufferSize, entry->GetDataSize(0)); |
| 2373 scoped_refptr<net::IOBuffer> read_buffer(new net::IOBuffer(kReadBufferSize)); | 2486 scoped_refptr<net::IOBuffer> read_buffer(new net::IOBuffer(kReadBufferSize)); |
| 2374 EXPECT_EQ(net::ERR_CACHE_CHECKSUM_MISMATCH, | 2487 EXPECT_EQ(net::ERR_CACHE_CHECKSUM_MISMATCH, |
| 2375 ReadData(entry, 0, 0, read_buffer, kReadBufferSize)); | 2488 ReadData(entry, 0, 0, read_buffer.get(), kReadBufferSize)); |
| 2376 | 2489 |
| 2377 entry->Doom(); // Should not crash. | 2490 entry->Doom(); // Should not crash. |
| 2378 entry->Close(); | 2491 entry->Close(); |
| 2379 } | 2492 } |
| 2380 | 2493 |
| 2381 bool TruncatePath(const base::FilePath& file_path, int64 length) { | 2494 bool TruncatePath(const base::FilePath& file_path, int64 length) { |
| 2382 const int flags = base::PLATFORM_FILE_WRITE | base::PLATFORM_FILE_OPEN; | 2495 const int flags = base::PLATFORM_FILE_WRITE | base::PLATFORM_FILE_OPEN; |
| 2383 base::PlatformFile file = | 2496 base::PlatformFile file = |
| 2384 base::CreatePlatformFile(file_path, flags, NULL, NULL); | 2497 base::CreatePlatformFile(file_path, flags, NULL, NULL); |
| 2385 if (base::kInvalidPlatformFileValue == file) | 2498 if (base::kInvalidPlatformFileValue == file) |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2450 // Create is optimistic, must return OK. | 2563 // Create is optimistic, must return OK. |
| 2451 ASSERT_EQ(net::OK, | 2564 ASSERT_EQ(net::OK, |
| 2452 cache_->CreateEntry(key, &entry, | 2565 cache_->CreateEntry(key, &entry, |
| 2453 base::Bind(&CallbackTest::Run, | 2566 base::Bind(&CallbackTest::Run, |
| 2454 base::Unretained(&callback1)))); | 2567 base::Unretained(&callback1)))); |
| 2455 EXPECT_NE(null, entry); | 2568 EXPECT_NE(null, entry); |
| 2456 | 2569 |
| 2457 // This write may or may not be optimistic (it depends if the previous | 2570 // This write may or may not be optimistic (it depends if the previous |
| 2458 // optimistic create already finished by the time we call the write here). | 2571 // optimistic create already finished by the time we call the write here). |
| 2459 int ret = entry->WriteData( | 2572 int ret = entry->WriteData( |
| 2460 0, 0, buffer1, kSize1, | 2573 0, |
| 2461 base::Bind(&CallbackTest::Run, base::Unretained(&callback2)), false); | 2574 0, |
| 2575 buffer1.get(), |
| 2576 kSize1, |
| 2577 base::Bind(&CallbackTest::Run, base::Unretained(&callback2)), |
| 2578 false); |
| 2462 EXPECT_TRUE(kSize1 == ret || net::ERR_IO_PENDING == ret); | 2579 EXPECT_TRUE(kSize1 == ret || net::ERR_IO_PENDING == ret); |
| 2463 if (net::ERR_IO_PENDING == ret) | 2580 if (net::ERR_IO_PENDING == ret) |
| 2464 expected++; | 2581 expected++; |
| 2465 | 2582 |
| 2466 // This Read must not be optimistic, since we don't support that yet. | 2583 // This Read must not be optimistic, since we don't support that yet. |
| 2467 EXPECT_EQ(net::ERR_IO_PENDING, entry->ReadData( | 2584 EXPECT_EQ(net::ERR_IO_PENDING, |
| 2468 0, 0, buffer1_read, kSize1, | 2585 entry->ReadData( |
| 2469 base::Bind(&CallbackTest::Run, base::Unretained(&callback3)))); | 2586 0, |
| 2587 0, |
| 2588 buffer1_read.get(), |
| 2589 kSize1, |
| 2590 base::Bind(&CallbackTest::Run, base::Unretained(&callback3)))); |
| 2470 expected++; | 2591 expected++; |
| 2471 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 2592 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
| 2472 EXPECT_EQ(0, memcmp(buffer1->data(), buffer1_read->data(), kSize1)); | 2593 EXPECT_EQ(0, memcmp(buffer1->data(), buffer1_read->data(), kSize1)); |
| 2473 | 2594 |
| 2474 // At this point after waiting, the pending operations queue on the entry | 2595 // At this point after waiting, the pending operations queue on the entry |
| 2475 // should be empty, so the next Write operation must run as optimistic. | 2596 // should be empty, so the next Write operation must run as optimistic. |
| 2476 EXPECT_EQ(kSize2, | 2597 EXPECT_EQ(kSize2, |
| 2477 entry->WriteData( | 2598 entry->WriteData( |
| 2478 0, 0, buffer2, kSize2, | 2599 0, |
| 2479 base::Bind(&CallbackTest::Run, | 2600 0, |
| 2480 base::Unretained(&callback4)), false)); | 2601 buffer2.get(), |
| 2602 kSize2, |
| 2603 base::Bind(&CallbackTest::Run, base::Unretained(&callback4)), |
| 2604 false)); |
| 2481 | 2605 |
| 2482 // Lets do another read so we block until both the write and the read | 2606 // Lets do another read so we block until both the write and the read |
| 2483 // operation finishes and we can then test for HasOneRef() below. | 2607 // operation finishes and we can then test for HasOneRef() below. |
| 2484 EXPECT_EQ(net::ERR_IO_PENDING, entry->ReadData( | 2608 EXPECT_EQ(net::ERR_IO_PENDING, |
| 2485 0, 0, buffer2_read, kSize2, | 2609 entry->ReadData( |
| 2486 base::Bind(&CallbackTest::Run, base::Unretained(&callback5)))); | 2610 0, |
| 2611 0, |
| 2612 buffer2_read.get(), |
| 2613 kSize2, |
| 2614 base::Bind(&CallbackTest::Run, base::Unretained(&callback5)))); |
| 2487 expected++; | 2615 expected++; |
| 2488 | 2616 |
| 2489 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 2617 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
| 2490 EXPECT_EQ(0, memcmp(buffer2->data(), buffer2_read->data(), kSize2)); | 2618 EXPECT_EQ(0, memcmp(buffer2->data(), buffer2_read->data(), kSize2)); |
| 2491 | 2619 |
| 2492 // Check that we are not leaking. | 2620 // Check that we are not leaking. |
| 2493 EXPECT_NE(entry, null); | 2621 EXPECT_NE(entry, null); |
| 2494 EXPECT_TRUE( | 2622 EXPECT_TRUE( |
| 2495 static_cast<disk_cache::SimpleEntryImpl*>(entry)->HasOneRef()); | 2623 static_cast<disk_cache::SimpleEntryImpl*>(entry)->HasOneRef()); |
| 2496 entry->Close(); | 2624 entry->Close(); |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2579 CacheTestFillBuffer(buffer1->data(), kSize1, false); | 2707 CacheTestFillBuffer(buffer1->data(), kSize1, false); |
| 2580 disk_cache::Entry* entry = NULL; | 2708 disk_cache::Entry* entry = NULL; |
| 2581 | 2709 |
| 2582 ASSERT_EQ(net::OK, | 2710 ASSERT_EQ(net::OK, |
| 2583 cache_->CreateEntry(key, &entry, net::CompletionCallback())); | 2711 cache_->CreateEntry(key, &entry, net::CompletionCallback())); |
| 2584 EXPECT_NE(null, entry); | 2712 EXPECT_NE(null, entry); |
| 2585 entry->Close(); | 2713 entry->Close(); |
| 2586 | 2714 |
| 2587 // Lets do a Write so we block until both the Close and the Write | 2715 // Lets do a Write so we block until both the Close and the Write |
| 2588 // operation finishes. Write must fail since we are writing in a closed entry. | 2716 // operation finishes. Write must fail since we are writing in a closed entry. |
| 2589 EXPECT_EQ(net::ERR_IO_PENDING, entry->WriteData( | 2717 EXPECT_EQ( |
| 2590 0, 0, buffer1, kSize1, cb.callback(), false)); | 2718 net::ERR_IO_PENDING, |
| 2719 entry->WriteData(0, 0, buffer1.get(), kSize1, cb.callback(), false)); |
| 2591 EXPECT_EQ(net::ERR_FAILED, cb.GetResult(net::ERR_IO_PENDING)); | 2720 EXPECT_EQ(net::ERR_FAILED, cb.GetResult(net::ERR_IO_PENDING)); |
| 2592 | 2721 |
| 2593 // Finish running the pending tasks so that we fully complete the close | 2722 // Finish running the pending tasks so that we fully complete the close |
| 2594 // operation and destroy the entry object. | 2723 // operation and destroy the entry object. |
| 2595 base::MessageLoop::current()->RunUntilIdle(); | 2724 base::MessageLoop::current()->RunUntilIdle(); |
| 2596 | 2725 |
| 2597 // At this point the |entry| must have been destroyed, and called | 2726 // At this point the |entry| must have been destroyed, and called |
| 2598 // RemoveSelfFromBackend(). | 2727 // RemoveSelfFromBackend(). |
| 2599 disk_cache::Entry* entry2 = NULL; | 2728 disk_cache::Entry* entry2 = NULL; |
| 2600 EXPECT_EQ(net::ERR_IO_PENDING, | 2729 EXPECT_EQ(net::ERR_IO_PENDING, |
| 2601 cache_->OpenEntry(key, &entry2, cb.callback())); | 2730 cache_->OpenEntry(key, &entry2, cb.callback())); |
| 2602 EXPECT_EQ(net::OK, cb.GetResult(net::ERR_IO_PENDING)); | 2731 EXPECT_EQ(net::OK, cb.GetResult(net::ERR_IO_PENDING)); |
| 2603 EXPECT_NE(null, entry2); | 2732 EXPECT_NE(null, entry2); |
| 2604 | 2733 |
| 2605 disk_cache::Entry* entry3 = NULL; | 2734 disk_cache::Entry* entry3 = NULL; |
| 2606 EXPECT_EQ(net::ERR_IO_PENDING, | 2735 EXPECT_EQ(net::ERR_IO_PENDING, |
| 2607 cache_->OpenEntry(key, &entry3, cb.callback())); | 2736 cache_->OpenEntry(key, &entry3, cb.callback())); |
| 2608 EXPECT_EQ(net::OK, cb.GetResult(net::ERR_IO_PENDING)); | 2737 EXPECT_EQ(net::OK, cb.GetResult(net::ERR_IO_PENDING)); |
| 2609 EXPECT_NE(null, entry3); | 2738 EXPECT_NE(null, entry3); |
| 2610 EXPECT_EQ(entry2, entry3); | 2739 EXPECT_EQ(entry2, entry3); |
| 2611 entry3->Close(); | 2740 entry3->Close(); |
| 2612 | 2741 |
| 2613 // The previous Close doesn't actually closes the entry since we opened it | 2742 // The previous Close doesn't actually closes the entry since we opened it |
| 2614 // twice, so the next Write operation must succeed and it must be able to | 2743 // twice, so the next Write operation must succeed and it must be able to |
| 2615 // perform it optimistically, since there is no operation running on this | 2744 // perform it optimistically, since there is no operation running on this |
| 2616 // entry. | 2745 // entry. |
| 2617 EXPECT_EQ(kSize1, entry2->WriteData( | 2746 EXPECT_EQ(kSize1, |
| 2618 0, 0, buffer1, kSize1, net::CompletionCallback(), false)); | 2747 entry2->WriteData( |
| 2748 0, 0, buffer1.get(), kSize1, net::CompletionCallback(), false)); |
| 2619 | 2749 |
| 2620 // Lets do another read so we block until both the write and the read | 2750 // Lets do another read so we block until both the write and the read |
| 2621 // operation finishes and we can then test for HasOneRef() below. | 2751 // operation finishes and we can then test for HasOneRef() below. |
| 2622 EXPECT_EQ(net::ERR_IO_PENDING, entry2->ReadData( | 2752 EXPECT_EQ(net::ERR_IO_PENDING, |
| 2623 0, 0, buffer1, kSize1, cb.callback())); | 2753 entry2->ReadData(0, 0, buffer1.get(), kSize1, cb.callback())); |
| 2624 EXPECT_EQ(kSize1, cb.GetResult(net::ERR_IO_PENDING)); | 2754 EXPECT_EQ(kSize1, cb.GetResult(net::ERR_IO_PENDING)); |
| 2625 | 2755 |
| 2626 // Check that we are not leaking. | 2756 // Check that we are not leaking. |
| 2627 EXPECT_TRUE( | 2757 EXPECT_TRUE( |
| 2628 static_cast<disk_cache::SimpleEntryImpl*>(entry2)->HasOneRef()); | 2758 static_cast<disk_cache::SimpleEntryImpl*>(entry2)->HasOneRef()); |
| 2629 entry2->Close(); | 2759 entry2->Close(); |
| 2630 } | 2760 } |
| 2631 | 2761 |
| 2632 // This test is flaky because of the race of Create followed by a Doom. | 2762 // This test is flaky because of the race of Create followed by a Doom. |
| 2633 // See test SimpleCacheCreateDoomRace. | 2763 // See test SimpleCacheCreateDoomRace. |
| 2634 TEST_F(DiskCacheEntryTest, DISABLED_SimpleCacheOptimistic5) { | 2764 TEST_F(DiskCacheEntryTest, DISABLED_SimpleCacheOptimistic5) { |
| 2635 // Test sequence: | 2765 // Test sequence: |
| 2636 // Create, Doom, Write, Read, Close. | 2766 // Create, Doom, Write, Read, Close. |
| 2637 SetSimpleCacheMode(); | 2767 SetSimpleCacheMode(); |
| 2638 InitCache(); | 2768 InitCache(); |
| 2639 disk_cache::Entry* null = NULL; | 2769 disk_cache::Entry* null = NULL; |
| 2640 const char key[] = "the first key"; | 2770 const char key[] = "the first key"; |
| 2641 | 2771 |
| 2642 net::TestCompletionCallback cb; | 2772 net::TestCompletionCallback cb; |
| 2643 const int kSize1 = 10; | 2773 const int kSize1 = 10; |
| 2644 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); | 2774 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); |
| 2645 CacheTestFillBuffer(buffer1->data(), kSize1, false); | 2775 CacheTestFillBuffer(buffer1->data(), kSize1, false); |
| 2646 disk_cache::Entry* entry = NULL; | 2776 disk_cache::Entry* entry = NULL; |
| 2647 | 2777 |
| 2648 ASSERT_EQ(net::OK, | 2778 ASSERT_EQ(net::OK, |
| 2649 cache_->CreateEntry(key, &entry, net::CompletionCallback())); | 2779 cache_->CreateEntry(key, &entry, net::CompletionCallback())); |
| 2650 EXPECT_NE(null, entry); | 2780 EXPECT_NE(null, entry); |
| 2651 entry->Doom(); | 2781 entry->Doom(); |
| 2652 | 2782 |
| 2653 EXPECT_EQ(net::ERR_IO_PENDING, entry->WriteData( | 2783 EXPECT_EQ( |
| 2654 0, 0, buffer1, kSize1, cb.callback(), false)); | 2784 net::ERR_IO_PENDING, |
| 2785 entry->WriteData(0, 0, buffer1.get(), kSize1, cb.callback(), false)); |
| 2655 EXPECT_EQ(kSize1, cb.GetResult(net::ERR_IO_PENDING)); | 2786 EXPECT_EQ(kSize1, cb.GetResult(net::ERR_IO_PENDING)); |
| 2656 | 2787 |
| 2657 EXPECT_EQ(net::ERR_IO_PENDING, entry->ReadData( | 2788 EXPECT_EQ(net::ERR_IO_PENDING, |
| 2658 0, 0, buffer1, kSize1, cb.callback())); | 2789 entry->ReadData(0, 0, buffer1.get(), kSize1, cb.callback())); |
| 2659 EXPECT_EQ(kSize1, cb.GetResult(net::ERR_IO_PENDING)); | 2790 EXPECT_EQ(kSize1, cb.GetResult(net::ERR_IO_PENDING)); |
| 2660 | 2791 |
| 2661 // Check that we are not leaking. | 2792 // Check that we are not leaking. |
| 2662 EXPECT_TRUE( | 2793 EXPECT_TRUE( |
| 2663 static_cast<disk_cache::SimpleEntryImpl*>(entry)->HasOneRef()); | 2794 static_cast<disk_cache::SimpleEntryImpl*>(entry)->HasOneRef()); |
| 2664 entry->Close(); | 2795 entry->Close(); |
| 2665 } | 2796 } |
| 2666 | 2797 |
| 2667 TEST_F(DiskCacheEntryTest, SimpleCacheOptimistic6) { | 2798 TEST_F(DiskCacheEntryTest, SimpleCacheOptimistic6) { |
| 2668 // Test sequence: | 2799 // Test sequence: |
| 2669 // Create, Write, Doom, Doom, Read, Doom, Close. | 2800 // Create, Write, Doom, Doom, Read, Doom, Close. |
| 2670 SetSimpleCacheMode(); | 2801 SetSimpleCacheMode(); |
| 2671 InitCache(); | 2802 InitCache(); |
| 2672 disk_cache::Entry* null = NULL; | 2803 disk_cache::Entry* null = NULL; |
| 2673 const char key[] = "the first key"; | 2804 const char key[] = "the first key"; |
| 2674 | 2805 |
| 2675 net::TestCompletionCallback cb; | 2806 net::TestCompletionCallback cb; |
| 2676 const int kSize1 = 10; | 2807 const int kSize1 = 10; |
| 2677 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); | 2808 scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1)); |
| 2678 scoped_refptr<net::IOBuffer> buffer1_read(new net::IOBuffer(kSize1)); | 2809 scoped_refptr<net::IOBuffer> buffer1_read(new net::IOBuffer(kSize1)); |
| 2679 CacheTestFillBuffer(buffer1->data(), kSize1, false); | 2810 CacheTestFillBuffer(buffer1->data(), kSize1, false); |
| 2680 disk_cache::Entry* entry = NULL; | 2811 disk_cache::Entry* entry = NULL; |
| 2681 | 2812 |
| 2682 ASSERT_EQ(net::OK, | 2813 ASSERT_EQ(net::OK, |
| 2683 cache_->CreateEntry(key, &entry, net::CompletionCallback())); | 2814 cache_->CreateEntry(key, &entry, net::CompletionCallback())); |
| 2684 EXPECT_NE(null, entry); | 2815 EXPECT_NE(null, entry); |
| 2685 | 2816 |
| 2686 EXPECT_EQ(net::ERR_IO_PENDING, entry->WriteData( | 2817 EXPECT_EQ( |
| 2687 0, 0, buffer1, kSize1, cb.callback(), false)); | 2818 net::ERR_IO_PENDING, |
| 2819 entry->WriteData(0, 0, buffer1.get(), kSize1, cb.callback(), false)); |
| 2688 EXPECT_EQ(kSize1, cb.GetResult(net::ERR_IO_PENDING)); | 2820 EXPECT_EQ(kSize1, cb.GetResult(net::ERR_IO_PENDING)); |
| 2689 | 2821 |
| 2690 entry->Doom(); | 2822 entry->Doom(); |
| 2691 entry->Doom(); | 2823 entry->Doom(); |
| 2692 | 2824 |
| 2693 // This Read must not be optimistic, since we don't support that yet. | 2825 // This Read must not be optimistic, since we don't support that yet. |
| 2694 EXPECT_EQ(net::ERR_IO_PENDING, entry->ReadData( | 2826 EXPECT_EQ(net::ERR_IO_PENDING, |
| 2695 0, 0, buffer1_read, kSize1, cb.callback())); | 2827 entry->ReadData(0, 0, buffer1_read.get(), kSize1, cb.callback())); |
| 2696 EXPECT_EQ(kSize1, cb.GetResult(net::ERR_IO_PENDING)); | 2828 EXPECT_EQ(kSize1, cb.GetResult(net::ERR_IO_PENDING)); |
| 2697 EXPECT_EQ(0, memcmp(buffer1->data(), buffer1_read->data(), kSize1)); | 2829 EXPECT_EQ(0, memcmp(buffer1->data(), buffer1_read->data(), kSize1)); |
| 2698 | 2830 |
| 2699 entry->Doom(); | 2831 entry->Doom(); |
| 2700 | 2832 |
| 2701 // Check that we are not leaking. | 2833 // Check that we are not leaking. |
| 2702 EXPECT_TRUE( | 2834 EXPECT_TRUE( |
| 2703 static_cast<disk_cache::SimpleEntryImpl*>(entry)->HasOneRef()); | 2835 static_cast<disk_cache::SimpleEntryImpl*>(entry)->HasOneRef()); |
| 2704 entry->Close(); | 2836 entry->Close(); |
| 2705 } | 2837 } |
| (...skipping 15 matching lines...) Expand all Loading... |
| 2721 ASSERT_EQ(net::OK, | 2853 ASSERT_EQ(net::OK, |
| 2722 cache_->CreateEntry(key, &entry, net::CompletionCallback())); | 2854 cache_->CreateEntry(key, &entry, net::CompletionCallback())); |
| 2723 EXPECT_NE(null, entry); | 2855 EXPECT_NE(null, entry); |
| 2724 | 2856 |
| 2725 cache_->DoomEntry(key, cb.callback()); | 2857 cache_->DoomEntry(key, cb.callback()); |
| 2726 EXPECT_EQ(net::OK, cb.GetResult(net::ERR_IO_PENDING)); | 2858 EXPECT_EQ(net::OK, cb.GetResult(net::ERR_IO_PENDING)); |
| 2727 | 2859 |
| 2728 // Lets do a Write so we block until all operations are done, so we can check | 2860 // Lets do a Write so we block until all operations are done, so we can check |
| 2729 // the HasOneRef() below. This call can't be optimistic and we are checking | 2861 // the HasOneRef() below. This call can't be optimistic and we are checking |
| 2730 // that here. | 2862 // that here. |
| 2731 EXPECT_EQ(net::ERR_IO_PENDING, entry->WriteData( | 2863 EXPECT_EQ( |
| 2732 0, 0, buffer1, kSize1, cb.callback(), false)); | 2864 net::ERR_IO_PENDING, |
| 2865 entry->WriteData(0, 0, buffer1.get(), kSize1, cb.callback(), false)); |
| 2733 EXPECT_EQ(kSize1, cb.GetResult(net::ERR_IO_PENDING)); | 2866 EXPECT_EQ(kSize1, cb.GetResult(net::ERR_IO_PENDING)); |
| 2734 | 2867 |
| 2735 // Check that we are not leaking. | 2868 // Check that we are not leaking. |
| 2736 EXPECT_TRUE( | 2869 EXPECT_TRUE( |
| 2737 static_cast<disk_cache::SimpleEntryImpl*>(entry)->HasOneRef()); | 2870 static_cast<disk_cache::SimpleEntryImpl*>(entry)->HasOneRef()); |
| 2738 entry->Close(); | 2871 entry->Close(); |
| 2739 | 2872 |
| 2740 // Finish running the pending tasks so that we fully complete the close | 2873 // Finish running the pending tasks so that we fully complete the close |
| 2741 // operation and destroy the entry object. | 2874 // operation and destroy the entry object. |
| 2742 base::MessageLoop::current()->RunUntilIdle(); | 2875 base::MessageLoop::current()->RunUntilIdle(); |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2793 const int kNumExtraEntries = 12; | 2926 const int kNumExtraEntries = 12; |
| 2794 SetSimpleCacheMode(); | 2927 SetSimpleCacheMode(); |
| 2795 SetMaxSize(kMaxSize); | 2928 SetMaxSize(kMaxSize); |
| 2796 InitCache(); | 2929 InitCache(); |
| 2797 | 2930 |
| 2798 std::string key1("the first key"); | 2931 std::string key1("the first key"); |
| 2799 disk_cache::Entry* entry; | 2932 disk_cache::Entry* entry; |
| 2800 ASSERT_EQ(net::OK, CreateEntry(key1, &entry)); | 2933 ASSERT_EQ(net::OK, CreateEntry(key1, &entry)); |
| 2801 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kWriteSize)); | 2934 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kWriteSize)); |
| 2802 CacheTestFillBuffer(buffer->data(), kWriteSize, false); | 2935 CacheTestFillBuffer(buffer->data(), kWriteSize, false); |
| 2803 EXPECT_EQ(kWriteSize, WriteData(entry, 0, 0, buffer, kWriteSize, false)); | 2936 EXPECT_EQ(kWriteSize, |
| 2937 WriteData(entry, 0, 0, buffer.get(), kWriteSize, false)); |
| 2804 entry->Close(); | 2938 entry->Close(); |
| 2805 | 2939 |
| 2806 std::string key2("the key prefix"); | 2940 std::string key2("the key prefix"); |
| 2807 for (int i = 0; i < kNumExtraEntries; i++) { | 2941 for (int i = 0; i < kNumExtraEntries; i++) { |
| 2808 ASSERT_EQ(net::OK, CreateEntry(key2 + base::StringPrintf("%d", i), &entry)); | 2942 ASSERT_EQ(net::OK, CreateEntry(key2 + base::StringPrintf("%d", i), &entry)); |
| 2809 EXPECT_EQ(kWriteSize, WriteData(entry, 0, 0, buffer, kWriteSize, false)); | 2943 EXPECT_EQ(kWriteSize, |
| 2944 WriteData(entry, 0, 0, buffer.get(), kWriteSize, false)); |
| 2810 entry->Close(); | 2945 entry->Close(); |
| 2811 } | 2946 } |
| 2812 | 2947 |
| 2813 // TODO(pasko): Find a way to wait for the eviction task(s) to finish by using | 2948 // TODO(pasko): Find a way to wait for the eviction task(s) to finish by using |
| 2814 // the internal knowledge about |SimpleBackendImpl|. | 2949 // the internal knowledge about |SimpleBackendImpl|. |
| 2815 ASSERT_NE(net::OK, OpenEntry(key1, &entry)) | 2950 ASSERT_NE(net::OK, OpenEntry(key1, &entry)) |
| 2816 << "Should have evicted the old entry"; | 2951 << "Should have evicted the old entry"; |
| 2817 for (int i = 0; i < 2; i++) { | 2952 for (int i = 0; i < 2; i++) { |
| 2818 int entry_no = kNumExtraEntries - i - 1; | 2953 int entry_no = kNumExtraEntries - i - 1; |
| 2819 // Generally there is no guarantee that at this point the backround eviction | 2954 // Generally there is no guarantee that at this point the backround eviction |
| (...skipping 16 matching lines...) Expand all Loading... |
| 2836 const char key[] = "the first key"; | 2971 const char key[] = "the first key"; |
| 2837 | 2972 |
| 2838 const int kBufferSize = 1024; | 2973 const int kBufferSize = 1024; |
| 2839 scoped_refptr<net::IOBuffer> write_buffer(new net::IOBuffer(kBufferSize)); | 2974 scoped_refptr<net::IOBuffer> write_buffer(new net::IOBuffer(kBufferSize)); |
| 2840 CacheTestFillBuffer(write_buffer->data(), kBufferSize, false); | 2975 CacheTestFillBuffer(write_buffer->data(), kBufferSize, false); |
| 2841 | 2976 |
| 2842 disk_cache::Entry* entry = NULL; | 2977 disk_cache::Entry* entry = NULL; |
| 2843 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); | 2978 ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
| 2844 | 2979 |
| 2845 EXPECT_EQ(kBufferSize, | 2980 EXPECT_EQ(kBufferSize, |
| 2846 WriteData(entry, 0, 0, write_buffer, kBufferSize, false)); | 2981 WriteData(entry, 0, 0, write_buffer.get(), kBufferSize, false)); |
| 2847 entry->Close(); | 2982 entry->Close(); |
| 2848 entry = NULL; | 2983 entry = NULL; |
| 2849 | 2984 |
| 2850 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); | 2985 ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
| 2851 | 2986 |
| 2852 MessageLoopHelper helper; | 2987 MessageLoopHelper helper; |
| 2853 int expected = 0; | 2988 int expected = 0; |
| 2854 | 2989 |
| 2855 // Make a short read. | 2990 // Make a short read. |
| 2856 const int kReadBufferSize = 512; | 2991 const int kReadBufferSize = 512; |
| 2857 scoped_refptr<net::IOBuffer> read_buffer(new net::IOBuffer(kReadBufferSize)); | 2992 scoped_refptr<net::IOBuffer> read_buffer(new net::IOBuffer(kReadBufferSize)); |
| 2858 CallbackTest read_callback(&helper, false); | 2993 CallbackTest read_callback(&helper, false); |
| 2859 EXPECT_EQ(net::ERR_IO_PENDING, | 2994 EXPECT_EQ(net::ERR_IO_PENDING, |
| 2860 entry->ReadData(0, 0, read_buffer, kReadBufferSize, | 2995 entry->ReadData(0, |
| 2996 0, |
| 2997 read_buffer.get(), |
| 2998 kReadBufferSize, |
| 2861 base::Bind(&CallbackTest::Run, | 2999 base::Bind(&CallbackTest::Run, |
| 2862 base::Unretained(&read_callback)))); | 3000 base::Unretained(&read_callback)))); |
| 2863 ++expected; | 3001 ++expected; |
| 2864 | 3002 |
| 2865 // Truncate the entry to the length of that read. | 3003 // Truncate the entry to the length of that read. |
| 2866 scoped_refptr<net::IOBuffer> | 3004 scoped_refptr<net::IOBuffer> |
| 2867 truncate_buffer(new net::IOBuffer(kReadBufferSize)); | 3005 truncate_buffer(new net::IOBuffer(kReadBufferSize)); |
| 2868 CacheTestFillBuffer(truncate_buffer->data(), kReadBufferSize, false); | 3006 CacheTestFillBuffer(truncate_buffer->data(), kReadBufferSize, false); |
| 2869 CallbackTest truncate_callback(&helper, false); | 3007 CallbackTest truncate_callback(&helper, false); |
| 2870 EXPECT_EQ(net::ERR_IO_PENDING, | 3008 EXPECT_EQ(net::ERR_IO_PENDING, |
| 2871 entry->WriteData(0, 0, truncate_buffer, kReadBufferSize, | 3009 entry->WriteData(0, |
| 3010 0, |
| 3011 truncate_buffer.get(), |
| 3012 kReadBufferSize, |
| 2872 base::Bind(&CallbackTest::Run, | 3013 base::Bind(&CallbackTest::Run, |
| 2873 base::Unretained(&truncate_callback)), | 3014 base::Unretained(&truncate_callback)), |
| 2874 true)); | 3015 true)); |
| 2875 ++expected; | 3016 ++expected; |
| 2876 | 3017 |
| 2877 // Wait for both the read and truncation to finish, and confirm that both | 3018 // Wait for both the read and truncation to finish, and confirm that both |
| 2878 // succeeded. | 3019 // succeeded. |
| 2879 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 3020 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
| 2880 EXPECT_EQ(kReadBufferSize, read_callback.last_result()); | 3021 EXPECT_EQ(kReadBufferSize, read_callback.last_result()); |
| 2881 EXPECT_EQ(kReadBufferSize, truncate_callback.last_result()); | 3022 EXPECT_EQ(kReadBufferSize, truncate_callback.last_result()); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 2898 | 3039 |
| 2899 const int kBufferSize = 1024; | 3040 const int kBufferSize = 1024; |
| 2900 scoped_refptr<net::IOBuffer> write_buffer(new net::IOBuffer(kBufferSize)); | 3041 scoped_refptr<net::IOBuffer> write_buffer(new net::IOBuffer(kBufferSize)); |
| 2901 CacheTestFillBuffer(write_buffer->data(), kBufferSize, false); | 3042 CacheTestFillBuffer(write_buffer->data(), kBufferSize, false); |
| 2902 | 3043 |
| 2903 MessageLoopHelper helper; | 3044 MessageLoopHelper helper; |
| 2904 int expected = 0; | 3045 int expected = 0; |
| 2905 | 3046 |
| 2906 CallbackTest write_callback(&helper, false); | 3047 CallbackTest write_callback(&helper, false); |
| 2907 EXPECT_EQ(net::ERR_IO_PENDING, | 3048 EXPECT_EQ(net::ERR_IO_PENDING, |
| 2908 entry->WriteData(0, 0, write_buffer, kBufferSize, | 3049 entry->WriteData(0, |
| 3050 0, |
| 3051 write_buffer.get(), |
| 3052 kBufferSize, |
| 2909 base::Bind(&CallbackTest::Run, | 3053 base::Bind(&CallbackTest::Run, |
| 2910 base::Unretained(&write_callback)), | 3054 base::Unretained(&write_callback)), |
| 2911 true)); | 3055 true)); |
| 2912 ++expected; | 3056 ++expected; |
| 2913 | 3057 |
| 2914 scoped_refptr<net::IOBuffer> read_buffer(new net::IOBuffer(kBufferSize)); | 3058 scoped_refptr<net::IOBuffer> read_buffer(new net::IOBuffer(kBufferSize)); |
| 2915 CallbackTest read_callback(&helper, false); | 3059 CallbackTest read_callback(&helper, false); |
| 2916 EXPECT_EQ(net::ERR_IO_PENDING, | 3060 EXPECT_EQ(net::ERR_IO_PENDING, |
| 2917 entry->ReadData(0, 0, read_buffer, kBufferSize, | 3061 entry->ReadData(0, |
| 3062 0, |
| 3063 read_buffer.get(), |
| 3064 kBufferSize, |
| 2918 base::Bind(&CallbackTest::Run, | 3065 base::Bind(&CallbackTest::Run, |
| 2919 base::Unretained(&read_callback)))); | 3066 base::Unretained(&read_callback)))); |
| 2920 ++expected; | 3067 ++expected; |
| 2921 | 3068 |
| 2922 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); | 3069 EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected)); |
| 2923 EXPECT_EQ(kBufferSize, write_callback.last_result()); | 3070 EXPECT_EQ(kBufferSize, write_callback.last_result()); |
| 2924 EXPECT_EQ(kBufferSize, read_callback.last_result()); | 3071 EXPECT_EQ(kBufferSize, read_callback.last_result()); |
| 2925 EXPECT_EQ(0, memcmp(write_buffer->data(), read_buffer->data(), kBufferSize)); | 3072 EXPECT_EQ(0, memcmp(write_buffer->data(), read_buffer->data(), kBufferSize)); |
| 2926 entry->Close(); | 3073 entry->Close(); |
| 2927 } | 3074 } |
| (...skipping 11 matching lines...) Expand all Loading... |
| 2939 net::TestCompletionCallback cb2; | 3086 net::TestCompletionCallback cb2; |
| 2940 int rv1 = cache_->OpenEntry("key", &entry1, cb1.callback()); | 3087 int rv1 = cache_->OpenEntry("key", &entry1, cb1.callback()); |
| 2941 int rv2 = cache_->CreateEntry("key", &entry2, cb2.callback()); | 3088 int rv2 = cache_->CreateEntry("key", &entry2, cb2.callback()); |
| 2942 | 3089 |
| 2943 ASSERT_EQ(net::OK, cb2.GetResult(rv2)); | 3090 ASSERT_EQ(net::OK, cb2.GetResult(rv2)); |
| 2944 EXPECT_EQ(net::ERR_FAILED, cb1.GetResult(rv1)); | 3091 EXPECT_EQ(net::ERR_FAILED, cb1.GetResult(rv1)); |
| 2945 entry2->Close(); | 3092 entry2->Close(); |
| 2946 } | 3093 } |
| 2947 | 3094 |
| 2948 #endif // defined(OS_POSIX) | 3095 #endif // defined(OS_POSIX) |
| OLD | NEW |