Index: net/disk_cache/entry_unittest.cc |
diff --git a/net/disk_cache/entry_unittest.cc b/net/disk_cache/entry_unittest.cc |
index 0043352b90be8b258da78b4819b4fcd719d0b22e..ed07fe8fdd4dbf194af8626f76c9b3e9c6450a46 100644 |
--- a/net/disk_cache/entry_unittest.cc |
+++ b/net/disk_cache/entry_unittest.cc |
@@ -2427,7 +2427,7 @@ bool DiskCacheEntryTest::SimpleCacheMakeBadChecksumEntry(const char* key, |
scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kDataSize)); |
base::strlcpy(buffer->data(), data, kDataSize); |
- EXPECT_EQ(kDataSize, WriteData(entry, 0, 0, buffer.get(), kDataSize, false)); |
+ EXPECT_EQ(kDataSize, WriteData(entry, 1, 0, buffer.get(), kDataSize, false)); |
entry->Close(); |
entry = NULL; |
@@ -2439,9 +2439,8 @@ bool DiskCacheEntryTest::SimpleCacheMakeBadChecksumEntry(const char* key, |
base::CreatePlatformFile(entry_file0_path, flags, NULL, NULL); |
if (entry_file0 == base::kInvalidPlatformFileValue) |
return false; |
- int64 file_offset = |
- disk_cache::simple_util::GetFileOffsetFromKeyAndDataOffset( |
- key, kDataSize - 2); |
+ int64 file_offset = disk_cache::simple_util::GetFileOffsetFromDataOffset( |
+ key, kDataSize - 2, 1, 0); |
EXPECT_EQ(1, base::WritePlatformFile(entry_file0, file_offset, "X", 1)); |
if (!base::ClosePlatformFile(entry_file0)) |
return false; |
@@ -2465,10 +2464,10 @@ TEST_F(DiskCacheEntryTest, SimpleCacheBadChecksum) { |
ScopedEntryPtr entry_closer(entry); |
const int kReadBufferSize = 200; |
- EXPECT_GE(kReadBufferSize, entry->GetDataSize(0)); |
+ EXPECT_GE(kReadBufferSize, entry->GetDataSize(1)); |
scoped_refptr<net::IOBuffer> read_buffer(new net::IOBuffer(kReadBufferSize)); |
EXPECT_EQ(net::ERR_CACHE_CHECKSUM_MISMATCH, |
- ReadData(entry, 0, 0, read_buffer.get(), kReadBufferSize)); |
+ ReadData(entry, 1, 0, read_buffer.get(), kReadBufferSize)); |
} |
// Tests that an entry that has had an IO error occur can still be Doomed(). |
@@ -2487,10 +2486,10 @@ TEST_F(DiskCacheEntryTest, SimpleCacheErrorThenDoom) { |
ScopedEntryPtr entry_closer(entry); |
const int kReadBufferSize = 200; |
- EXPECT_GE(kReadBufferSize, entry->GetDataSize(0)); |
+ EXPECT_GE(kReadBufferSize, entry->GetDataSize(1)); |
scoped_refptr<net::IOBuffer> read_buffer(new net::IOBuffer(kReadBufferSize)); |
EXPECT_EQ(net::ERR_CACHE_CHECKSUM_MISMATCH, |
- ReadData(entry, 0, 0, read_buffer.get(), kReadBufferSize)); |
+ ReadData(entry, 1, 0, read_buffer.get(), kReadBufferSize)); |
entry->Doom(); // Should not crash. |
} |
@@ -2557,13 +2556,13 @@ TEST_F(DiskCacheEntryTest, SimpleCacheNonOptimisticOperationsBasic) { |
CacheTestFillBuffer(write_buffer->data(), write_buffer->size(), false); |
EXPECT_EQ( |
write_buffer->size(), |
- WriteData(entry, 0, 0, write_buffer.get(), write_buffer->size(), false)); |
+ WriteData(entry, 1, 0, write_buffer.get(), write_buffer->size(), false)); |
scoped_refptr<net::IOBufferWithSize> read_buffer( |
new net::IOBufferWithSize(kBufferSize)); |
EXPECT_EQ( |
read_buffer->size(), |
- ReadData(entry, 0, 0, read_buffer.get(), read_buffer->size())); |
+ ReadData(entry, 1, 0, read_buffer.get(), read_buffer->size())); |
} |
TEST_F(DiskCacheEntryTest, SimpleCacheNonOptimisticOperationsDontBlock) { |
@@ -2590,7 +2589,7 @@ TEST_F(DiskCacheEntryTest, SimpleCacheNonOptimisticOperationsDontBlock) { |
CacheTestFillBuffer(write_buffer->data(), write_buffer->size(), false); |
CallbackTest write_callback(&helper, false); |
int ret = entry->WriteData( |
- 0, |
+ 1, |
0, |
write_buffer.get(), |
write_buffer->size(), |
@@ -2623,7 +2622,7 @@ TEST_F(DiskCacheEntryTest, |
CacheTestFillBuffer(write_buffer->data(), write_buffer->size(), false); |
CallbackTest write_callback(&helper, false); |
int ret = entry->WriteData( |
- 0, |
+ 1, |
0, |
write_buffer.get(), |
write_buffer->size(), |
@@ -2636,7 +2635,7 @@ TEST_F(DiskCacheEntryTest, |
new net::IOBufferWithSize(kBufferSize)); |
CallbackTest read_callback(&helper, false); |
ret = entry->ReadData( |
- 0, |
+ 1, |
0, |
read_buffer.get(), |
read_buffer->size(), |
@@ -2688,7 +2687,7 @@ TEST_F(DiskCacheEntryTest, SimpleCacheOptimistic) { |
// This write may or may not be optimistic (it depends if the previous |
// optimistic create already finished by the time we call the write here). |
int ret = entry->WriteData( |
- 0, |
+ 1, |
0, |
buffer1.get(), |
kSize1, |
@@ -2701,7 +2700,7 @@ TEST_F(DiskCacheEntryTest, SimpleCacheOptimistic) { |
// This Read must not be optimistic, since we don't support that yet. |
EXPECT_EQ(net::ERR_IO_PENDING, |
entry->ReadData( |
- 0, |
+ 1, |
0, |
buffer1_read.get(), |
kSize1, |
@@ -2714,7 +2713,7 @@ TEST_F(DiskCacheEntryTest, SimpleCacheOptimistic) { |
// should be empty, so the next Write operation must run as optimistic. |
EXPECT_EQ(kSize2, |
entry->WriteData( |
- 0, |
+ 1, |
0, |
buffer2.get(), |
kSize2, |
@@ -2725,7 +2724,7 @@ TEST_F(DiskCacheEntryTest, SimpleCacheOptimistic) { |
// operation finishes and we can then test for HasOneRef() below. |
EXPECT_EQ(net::ERR_IO_PENDING, |
entry->ReadData( |
- 0, |
+ 1, |
0, |
buffer2_read.get(), |
kSize2, |
@@ -2831,7 +2830,7 @@ TEST_F(DiskCacheEntryTest, SimpleCacheOptimistic4) { |
// operation finishes. Write must fail since we are writing in a closed entry. |
EXPECT_EQ( |
net::ERR_IO_PENDING, |
- entry->WriteData(0, 0, buffer1.get(), kSize1, cb.callback(), false)); |
+ entry->WriteData(1, 0, buffer1.get(), kSize1, cb.callback(), false)); |
EXPECT_EQ(net::ERR_FAILED, cb.GetResult(net::ERR_IO_PENDING)); |
// Finish running the pending tasks so that we fully complete the close |
@@ -2860,12 +2859,12 @@ TEST_F(DiskCacheEntryTest, SimpleCacheOptimistic4) { |
// entry. |
EXPECT_EQ(kSize1, |
entry2->WriteData( |
- 0, 0, buffer1.get(), kSize1, net::CompletionCallback(), false)); |
+ 1, 0, buffer1.get(), kSize1, net::CompletionCallback(), false)); |
// Lets do another read so we block until both the write and the read |
// operation finishes and we can then test for HasOneRef() below. |
EXPECT_EQ(net::ERR_IO_PENDING, |
- entry2->ReadData(0, 0, buffer1.get(), kSize1, cb.callback())); |
+ entry2->ReadData(1, 0, buffer1.get(), kSize1, cb.callback())); |
EXPECT_EQ(kSize1, cb.GetResult(net::ERR_IO_PENDING)); |
// Check that we are not leaking. |
@@ -2896,11 +2895,11 @@ TEST_F(DiskCacheEntryTest, SimpleCacheOptimistic5) { |
EXPECT_EQ( |
net::ERR_IO_PENDING, |
- entry->WriteData(0, 0, buffer1.get(), kSize1, cb.callback(), false)); |
+ entry->WriteData(1, 0, buffer1.get(), kSize1, cb.callback(), false)); |
EXPECT_EQ(kSize1, cb.GetResult(net::ERR_IO_PENDING)); |
EXPECT_EQ(net::ERR_IO_PENDING, |
- entry->ReadData(0, 0, buffer1.get(), kSize1, cb.callback())); |
+ entry->ReadData(1, 0, buffer1.get(), kSize1, cb.callback())); |
EXPECT_EQ(kSize1, cb.GetResult(net::ERR_IO_PENDING)); |
// Check that we are not leaking. |
@@ -2930,7 +2929,7 @@ TEST_F(DiskCacheEntryTest, SimpleCacheOptimistic6) { |
EXPECT_EQ( |
net::ERR_IO_PENDING, |
- entry->WriteData(0, 0, buffer1.get(), kSize1, cb.callback(), false)); |
+ entry->WriteData(1, 0, buffer1.get(), kSize1, cb.callback(), false)); |
EXPECT_EQ(kSize1, cb.GetResult(net::ERR_IO_PENDING)); |
entry->Doom(); |
@@ -2938,7 +2937,7 @@ TEST_F(DiskCacheEntryTest, SimpleCacheOptimistic6) { |
// This Read must not be optimistic, since we don't support that yet. |
EXPECT_EQ(net::ERR_IO_PENDING, |
- entry->ReadData(0, 0, buffer1_read.get(), kSize1, cb.callback())); |
+ entry->ReadData(1, 0, buffer1_read.get(), kSize1, cb.callback())); |
EXPECT_EQ(kSize1, cb.GetResult(net::ERR_IO_PENDING)); |
EXPECT_EQ(0, memcmp(buffer1->data(), buffer1_read->data(), kSize1)); |
@@ -2969,7 +2968,7 @@ TEST_F(DiskCacheEntryTest, SimpleCacheOptimisticWriteReleases) { |
// operations. To ensure the queue is empty, we issue a write and wait until |
// it completes. |
EXPECT_EQ(kWriteSize, |
- WriteData(entry, 0, 0, buffer1.get(), kWriteSize, false)); |
+ WriteData(entry, 1, 0, buffer1.get(), kWriteSize, false)); |
EXPECT_TRUE(buffer1->HasOneRef()); |
// Finally, we should perform an optimistic write and confirm that all |
@@ -3064,7 +3063,7 @@ TEST_F(DiskCacheEntryTest, SimpleCacheEvictOldEntries) { |
scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kWriteSize)); |
CacheTestFillBuffer(buffer->data(), kWriteSize, false); |
EXPECT_EQ(kWriteSize, |
- WriteData(entry, 0, 0, buffer.get(), kWriteSize, false)); |
+ WriteData(entry, 1, 0, buffer.get(), kWriteSize, false)); |
entry->Close(); |
AddDelay(); |
@@ -3073,7 +3072,7 @@ TEST_F(DiskCacheEntryTest, SimpleCacheEvictOldEntries) { |
ASSERT_EQ(net::OK, CreateEntry(key2 + base::StringPrintf("%d", i), &entry)); |
ScopedEntryPtr entry_closer(entry); |
EXPECT_EQ(kWriteSize, |
- WriteData(entry, 0, 0, buffer.get(), kWriteSize, false)); |
+ WriteData(entry, 1, 0, buffer.get(), kWriteSize, false)); |
} |
// TODO(pasko): Find a way to wait for the eviction task(s) to finish by using |
@@ -3109,7 +3108,7 @@ TEST_F(DiskCacheEntryTest, SimpleCacheInFlightTruncate) { |
ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
EXPECT_EQ(kBufferSize, |
- WriteData(entry, 0, 0, write_buffer.get(), kBufferSize, false)); |
+ WriteData(entry, 1, 0, write_buffer.get(), kBufferSize, false)); |
entry->Close(); |
entry = NULL; |
@@ -3124,7 +3123,7 @@ TEST_F(DiskCacheEntryTest, SimpleCacheInFlightTruncate) { |
scoped_refptr<net::IOBuffer> read_buffer(new net::IOBuffer(kReadBufferSize)); |
CallbackTest read_callback(&helper, false); |
EXPECT_EQ(net::ERR_IO_PENDING, |
- entry->ReadData(0, |
+ entry->ReadData(1, |
0, |
read_buffer.get(), |
kReadBufferSize, |
@@ -3138,7 +3137,7 @@ TEST_F(DiskCacheEntryTest, SimpleCacheInFlightTruncate) { |
CacheTestFillBuffer(truncate_buffer->data(), kReadBufferSize, false); |
CallbackTest truncate_callback(&helper, false); |
EXPECT_EQ(net::ERR_IO_PENDING, |
- entry->WriteData(0, |
+ entry->WriteData(1, |
0, |
truncate_buffer.get(), |
kReadBufferSize, |
@@ -3178,7 +3177,7 @@ TEST_F(DiskCacheEntryTest, SimpleCacheInFlightRead) { |
CallbackTest write_callback(&helper, false); |
EXPECT_EQ(net::ERR_IO_PENDING, |
- entry->WriteData(0, |
+ entry->WriteData(1, |
0, |
write_buffer.get(), |
kBufferSize, |
@@ -3190,7 +3189,7 @@ TEST_F(DiskCacheEntryTest, SimpleCacheInFlightRead) { |
scoped_refptr<net::IOBuffer> read_buffer(new net::IOBuffer(kBufferSize)); |
CallbackTest read_callback(&helper, false); |
EXPECT_EQ(net::ERR_IO_PENDING, |
- entry->ReadData(0, |
+ entry->ReadData(1, |
0, |
read_buffer.get(), |
kBufferSize, |
@@ -3274,19 +3273,19 @@ TEST_F(DiskCacheEntryTest, SimpleCacheMultipleReadersCheckCRC2) { |
disk_cache::Entry* entry = NULL; |
ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
ScopedEntryPtr entry_closer(entry); |
- EXPECT_EQ(1, ReadData(entry, 0, 0, read_buffer1.get(), 1)); |
+ EXPECT_EQ(1, ReadData(entry, 1, 0, read_buffer1.get(), 1)); |
// Advance the 2nd reader by the same amount. |
disk_cache::Entry* entry2 = NULL; |
EXPECT_EQ(net::OK, OpenEntry(key, &entry2)); |
ScopedEntryPtr entry2_closer(entry2); |
- EXPECT_EQ(1, ReadData(entry2, 0, 0, read_buffer2.get(), 1)); |
+ EXPECT_EQ(1, ReadData(entry2, 1, 0, read_buffer2.get(), 1)); |
// Continue reading 1st. |
- EXPECT_GT(0, ReadData(entry, 0, 1, read_buffer1.get(), size)); |
+ EXPECT_GT(0, ReadData(entry, 1, 1, read_buffer1.get(), size)); |
// This read should fail as well because we have previous read failures. |
- EXPECT_GT(0, ReadData(entry2, 0, 1, read_buffer2.get(), 1)); |
+ EXPECT_GT(0, ReadData(entry2, 1, 1, read_buffer2.get(), 1)); |
DisableIntegrityCheck(); |
} |
@@ -3310,7 +3309,7 @@ TEST_F(DiskCacheEntryTest, SimpleCacheReadCombineCRC) { |
ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
EXPECT_NE(null, entry); |
- EXPECT_EQ(kSize, WriteData(entry, 0, 0, buffer1.get(), kSize, false)); |
+ EXPECT_EQ(kSize, WriteData(entry, 1, 0, buffer1.get(), kSize, false)); |
entry->Close(); |
disk_cache::Entry* entry2 = NULL; |
@@ -3321,14 +3320,14 @@ TEST_F(DiskCacheEntryTest, SimpleCacheReadCombineCRC) { |
int offset = 0; |
int buf_len = kHalfSize; |
scoped_refptr<net::IOBuffer> buffer1_read1(new net::IOBuffer(buf_len)); |
- EXPECT_EQ(buf_len, ReadData(entry2, 0, offset, buffer1_read1.get(), buf_len)); |
+ EXPECT_EQ(buf_len, ReadData(entry2, 1, offset, buffer1_read1.get(), buf_len)); |
EXPECT_EQ(0, memcmp(buffer1->data(), buffer1_read1->data(), buf_len)); |
// Read the second half of the data. |
offset = buf_len; |
buf_len = kHalfSize; |
scoped_refptr<net::IOBuffer> buffer1_read2(new net::IOBuffer(buf_len)); |
- EXPECT_EQ(buf_len, ReadData(entry2, 0, offset, buffer1_read2.get(), buf_len)); |
+ EXPECT_EQ(buf_len, ReadData(entry2, 1, offset, buffer1_read2.get(), buf_len)); |
char* buffer1_data = buffer1->data() + offset; |
EXPECT_EQ(0, memcmp(buffer1_data, buffer1_read2->data(), buf_len)); |
@@ -3390,4 +3389,53 @@ TEST_F(DiskCacheEntryTest, SimpleCacheNonSequentialWrite) { |
entry = NULL; |
} |
+// Test that changing stream1 size does not affect stream0 (stream0 and stream1 |
+// are stored in the same file in Simple Cache). |
+TEST_F(DiskCacheEntryTest, SimpleCacheStream1SizeChanges) { |
+ SetSimpleCacheMode(); |
+ InitCache(); |
+ disk_cache::Entry* entry = NULL; |
+ const char key[] = "the key"; |
+ const int kSize = 100; |
+ scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kSize)); |
+ scoped_refptr<net::IOBuffer> buffer_read(new net::IOBuffer(kSize)); |
+ CacheTestFillBuffer(buffer->data(), kSize, false); |
+ |
+ ASSERT_EQ(net::OK, CreateEntry(key, &entry)); |
+ EXPECT_TRUE(entry); |
+ |
+ // Write something in stream0. |
+ EXPECT_EQ(kSize, WriteData(entry, 0, 0, buffer.get(), kSize, false)); |
+ EXPECT_EQ(kSize, ReadData(entry, 0, 0, buffer_read.get(), kSize)); |
+ EXPECT_EQ(0, memcmp(buffer->data(), buffer_read->data(), kSize)); |
+ entry->Close(); |
+ |
+ // Extend stream1. |
+ ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
+ int stream1_size = 100; |
+ EXPECT_EQ(0, WriteData(entry, 1, stream1_size, buffer.get(), 0, false)); |
+ EXPECT_EQ(stream1_size, entry->GetDataSize(1)); |
+ entry->Close(); |
+ |
+ // Check that stream0 data has not been modified. |
+ buffer_read = new net::IOBuffer(kSize); |
+ ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
+ EXPECT_EQ(kSize, ReadData(entry, 0, 0, buffer_read.get(), kSize)); |
+ EXPECT_EQ(0, memcmp(buffer->data(), buffer_read->data(), kSize)); |
+ |
+ // Reduce stream1. |
+ stream1_size = 50; |
+ EXPECT_EQ(0, WriteData(entry, 1, stream1_size, buffer.get(), 0, true)); |
+ EXPECT_EQ(stream1_size, entry->GetDataSize(1)); |
+ entry->Close(); |
+ |
+ // Check that stream0 data has not been modified. |
+ buffer_read = new net::IOBuffer(kSize); |
+ ASSERT_EQ(net::OK, OpenEntry(key, &entry)); |
+ EXPECT_EQ(kSize, ReadData(entry, 0, 0, buffer_read.get(), kSize)); |
+ EXPECT_EQ(0, memcmp(buffer->data(), buffer_read->data(), kSize)); |
+ entry->Close(); |
+ entry = NULL; |
+} |
+ |
#endif // defined(OS_POSIX) |