summaryrefslogtreecommitdiffstats
path: root/net/disk_cache/entry_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'net/disk_cache/entry_unittest.cc')
-rw-r--r--net/disk_cache/entry_unittest.cc361
1 files changed, 202 insertions, 159 deletions
diff --git a/net/disk_cache/entry_unittest.cc b/net/disk_cache/entry_unittest.cc
index 4a93151..47b70d0 100644
--- a/net/disk_cache/entry_unittest.cc
+++ b/net/disk_cache/entry_unittest.cc
@@ -6,6 +6,7 @@
#include "base/platform_thread.h"
#include "base/timer.h"
#include "base/string_util.h"
+#include "net/base/io_buffer.h"
#include "net/base/net_errors.h"
#include "net/disk_cache/disk_cache_test_base.h"
#include "net/disk_cache/disk_cache_test_util.h"
@@ -29,6 +30,7 @@ class DiskCacheEntryTest : public DiskCacheTestWithCache {
void GetKey();
void GrowData();
void TruncateData();
+ void ZeroLengthIO();
void ReuseEntry(int size);
void InvalidData();
void DoomEntry();
@@ -40,32 +42,35 @@ void DiskCacheEntryTest::InternalSyncIO() {
ASSERT_TRUE(cache_->CreateEntry("the first key", &entry1));
ASSERT_TRUE(NULL != entry1);
- char buffer1[10];
- CacheTestFillBuffer(buffer1, sizeof(buffer1), false);
- EXPECT_EQ(0, entry1->ReadData(0, 0, buffer1, sizeof(buffer1), NULL));
- base::strlcpy(buffer1, "the data", arraysize(buffer1));
- EXPECT_EQ(10, entry1->WriteData(0, 0, buffer1, sizeof(buffer1), NULL, false));
- memset(buffer1, 0, sizeof(buffer1));
- EXPECT_EQ(10, entry1->ReadData(0, 0, buffer1, sizeof(buffer1), NULL));
- EXPECT_STREQ("the data", buffer1);
-
- char buffer2[5000];
- char buffer3[10000] = {0};
- CacheTestFillBuffer(buffer2, sizeof(buffer2), false);
- base::strlcpy(buffer2, "The really big data goes here", arraysize(buffer2));
- EXPECT_EQ(5000, entry1->WriteData(1, 1500, buffer2, sizeof(buffer2), NULL,
- false));
- memset(buffer2, 0, sizeof(buffer2));
- EXPECT_EQ(4989, entry1->ReadData(1, 1511, buffer2, sizeof(buffer2), NULL));
- EXPECT_STREQ("big data goes here", buffer2);
- EXPECT_EQ(5000, entry1->ReadData(1, 0, buffer2, sizeof(buffer2), NULL));
- EXPECT_EQ(0, memcmp(buffer2, buffer3, 1500));
- EXPECT_EQ(1500, entry1->ReadData(1, 5000, buffer2, sizeof(buffer2), NULL));
-
- EXPECT_EQ(0, entry1->ReadData(1, 6500, buffer2, sizeof(buffer2), NULL));
- EXPECT_EQ(6500, entry1->ReadData(1, 0, buffer3, sizeof(buffer3), NULL));
+ const int kSize1 = 10;
+ scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize1);
+ CacheTestFillBuffer(buffer1->data(), kSize1, false);
+ EXPECT_EQ(0, entry1->ReadData(0, 0, buffer1, kSize1, NULL));
+ base::strlcpy(buffer1->data(), "the data", kSize1);
+ EXPECT_EQ(10, entry1->WriteData(0, 0, buffer1, kSize1, NULL, false));
+ memset(buffer1->data(), 0, kSize1);
+ EXPECT_EQ(10, entry1->ReadData(0, 0, buffer1, kSize1, NULL));
+ EXPECT_STREQ("the data", buffer1->data());
+
+ const int kSize2 = 5000;
+ const int kSize3 = 10000;
+ scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize2);
+ scoped_refptr<net::IOBuffer> buffer3 = new net::IOBuffer(kSize3);
+ memset(buffer3->data(), 0, kSize3);
+ CacheTestFillBuffer(buffer2->data(), kSize2, false);
+ base::strlcpy(buffer2->data(), "The really big data goes here", kSize2);
+ EXPECT_EQ(5000, entry1->WriteData(1, 1500, buffer2, kSize2, NULL, false));
+ memset(buffer2->data(), 0, kSize2);
+ EXPECT_EQ(4989, entry1->ReadData(1, 1511, buffer2, kSize2, NULL));
+ EXPECT_STREQ("big data goes here", buffer2->data());
+ EXPECT_EQ(5000, entry1->ReadData(1, 0, buffer2, kSize2, NULL));
+ EXPECT_EQ(0, memcmp(buffer2->data(), buffer3->data(), 1500));
+ EXPECT_EQ(1500, entry1->ReadData(1, 5000, buffer2, kSize2, NULL));
+
+ EXPECT_EQ(0, entry1->ReadData(1, 6500, buffer2, kSize2, NULL));
+ EXPECT_EQ(6500, entry1->ReadData(1, 0, buffer3, kSize3, NULL));
EXPECT_EQ(8192, entry1->WriteData(1, 0, buffer3, 8192, NULL, false));
- EXPECT_EQ(8192, entry1->ReadData(1, 0, buffer3, sizeof(buffer3), NULL));
+ EXPECT_EQ(8192, entry1->ReadData(1, 0, buffer3, kSize3, NULL));
EXPECT_EQ(8192, entry1->GetDataSize(1));
entry1->Doom();
@@ -110,64 +115,66 @@ void DiskCacheEntryTest::InternalAsyncIO() {
MessageLoopHelper helper;
- char buffer1[10];
- char buffer2[5000];
- char buffer3[10000];
- CacheTestFillBuffer(buffer1, sizeof(buffer1), false);
- CacheTestFillBuffer(buffer2, sizeof(buffer2), false);
- CacheTestFillBuffer(buffer3, sizeof(buffer3), false);
-
- EXPECT_EQ(0, entry1->ReadData(0, 0, buffer1, sizeof(buffer1), &callback1));
- base::strlcpy(buffer1, "the data", arraysize(buffer1));
+ const int kSize1 = 10;
+ const int kSize2 = 5000;
+ const int kSize3 = 10000;
+ scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize1);
+ scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize2);
+ scoped_refptr<net::IOBuffer> buffer3 = new net::IOBuffer(kSize3);
+ CacheTestFillBuffer(buffer1->data(), kSize1, false);
+ CacheTestFillBuffer(buffer2->data(), kSize2, false);
+ CacheTestFillBuffer(buffer3->data(), kSize3, false);
+
+ EXPECT_EQ(0, entry1->ReadData(0, 0, buffer1, kSize1, &callback1));
+ base::strlcpy(buffer1->data(), "the data", kSize1);
int expected = 0;
- int ret = entry1->WriteData(0, 0, buffer1, sizeof(buffer1), &callback2,
- false);
+ int ret = entry1->WriteData(0, 0, buffer1, kSize1, &callback2, false);
EXPECT_TRUE(10 == ret || net::ERR_IO_PENDING == ret);
if (net::ERR_IO_PENDING == ret)
expected++;
- memset(buffer2, 0, sizeof(buffer1));
- ret = entry1->ReadData(0, 0, buffer2, sizeof(buffer1), &callback3);
+ memset(buffer2->data(), 0, kSize1);
+ ret = entry1->ReadData(0, 0, buffer2, kSize1, &callback3);
EXPECT_TRUE(10 == ret || net::ERR_IO_PENDING == ret);
if (net::ERR_IO_PENDING == ret)
expected++;
g_cache_tests_max_id = 3;
EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected));
- EXPECT_STREQ("the data", buffer2);
+ EXPECT_STREQ("the data", buffer2->data());
- base::strlcpy(buffer2, "The really big data goes here", arraysize(buffer2));
- ret = entry1->WriteData(1, 1500, buffer2, sizeof(buffer2), &callback4, false);
+ base::strlcpy(buffer2->data(), "The really big data goes here", kSize2);
+ ret = entry1->WriteData(1, 1500, buffer2, kSize2, &callback4, false);
EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret);
if (net::ERR_IO_PENDING == ret)
expected++;
- memset(buffer3, 0, sizeof(buffer2));
- ret = entry1->ReadData(1, 1511, buffer3, sizeof(buffer2), &callback5);
+ memset(buffer3->data(), 0, kSize2);
+ ret = entry1->ReadData(1, 1511, buffer3, kSize2, &callback5);
EXPECT_TRUE(4989 == ret || net::ERR_IO_PENDING == ret);
if (net::ERR_IO_PENDING == ret)
expected++;
g_cache_tests_max_id = 5;
EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected));
- EXPECT_STREQ("big data goes here", buffer3);
- ret = entry1->ReadData(1, 0, buffer2, sizeof(buffer2), &callback6);
+ EXPECT_STREQ("big data goes here", buffer3->data());
+ ret = entry1->ReadData(1, 0, buffer2, kSize2, &callback6);
EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret);
if (net::ERR_IO_PENDING == ret)
expected++;
- memset(buffer3, 0, sizeof(buffer3));
+ memset(buffer3->data(), 0, kSize3);
g_cache_tests_max_id = 6;
EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected));
- EXPECT_EQ(0, memcmp(buffer2, buffer3, 1500));
- ret = entry1->ReadData(1, 5000, buffer2, sizeof(buffer2), &callback7);
+ EXPECT_EQ(0, memcmp(buffer2->data(), buffer3->data(), 1500));
+ ret = entry1->ReadData(1, 5000, buffer2, kSize2, &callback7);
EXPECT_TRUE(1500 == ret || net::ERR_IO_PENDING == ret);
if (net::ERR_IO_PENDING == ret)
expected++;
- EXPECT_EQ(0, entry1->ReadData(1, 6500, buffer2, sizeof(buffer2), &callback8));
- ret = entry1->ReadData(1, 0, buffer3, sizeof(buffer3), &callback9);
+ EXPECT_EQ(0, entry1->ReadData(1, 6500, buffer2, kSize2, &callback8));
+ ret = entry1->ReadData(1, 0, buffer3, kSize3, &callback9);
EXPECT_TRUE(6500 == ret || net::ERR_IO_PENDING == ret);
if (net::ERR_IO_PENDING == ret)
expected++;
@@ -177,19 +184,19 @@ void DiskCacheEntryTest::InternalAsyncIO() {
if (net::ERR_IO_PENDING == ret)
expected++;
- ret = entry1->ReadData(1, 0, buffer3, sizeof(buffer3), &callback11);
+ ret = entry1->ReadData(1, 0, buffer3, kSize3, &callback11);
EXPECT_TRUE(8192 == ret || net::ERR_IO_PENDING == ret);
if (net::ERR_IO_PENDING == ret)
expected++;
EXPECT_EQ(8192, entry1->GetDataSize(1));
- ret = entry1->ReadData(0, 0, buffer1, sizeof(buffer1), &callback12);
+ ret = entry1->ReadData(0, 0, buffer1, kSize1, &callback12);
EXPECT_TRUE(10 == ret || net::ERR_IO_PENDING == ret);
if (net::ERR_IO_PENDING == ret)
expected++;
- ret = entry1->ReadData(1, 0, buffer2, sizeof(buffer2), &callback13);
+ ret = entry1->ReadData(1, 0, buffer2, kSize2, &callback13);
EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret);
if (net::ERR_IO_PENDING == ret)
expected++;
@@ -220,30 +227,30 @@ void DiskCacheEntryTest::ExternalSyncIO() {
disk_cache::Entry *entry1;
ASSERT_TRUE(cache_->CreateEntry("the first key", &entry1));
- char buffer1[17000], buffer2[25000];
- CacheTestFillBuffer(buffer1, sizeof(buffer1), false);
- CacheTestFillBuffer(buffer2, sizeof(buffer2), false);
- base::strlcpy(buffer1, "the data", arraysize(buffer1));
- EXPECT_EQ(17000, entry1->WriteData(0, 0, buffer1, sizeof(buffer1), NULL,
- false));
- memset(buffer1, 0, sizeof(buffer1));
- EXPECT_EQ(17000, entry1->ReadData(0, 0, buffer1, sizeof(buffer1), NULL));
- EXPECT_STREQ("the data", buffer1);
-
- base::strlcpy(buffer2, "The really big data goes here", arraysize(buffer2));
- EXPECT_EQ(25000, entry1->WriteData(1, 10000, buffer2, sizeof(buffer2), NULL,
- false));
- memset(buffer2, 0, sizeof(buffer2));
- EXPECT_EQ(24989, entry1->ReadData(1, 10011, buffer2, sizeof(buffer2), NULL));
- EXPECT_STREQ("big data goes here", buffer2);
- EXPECT_EQ(25000, entry1->ReadData(1, 0, buffer2, sizeof(buffer2), NULL));
- EXPECT_EQ(0, memcmp(buffer2, buffer2, 10000));
- EXPECT_EQ(5000, entry1->ReadData(1, 30000, buffer2, sizeof(buffer2), NULL));
-
- EXPECT_EQ(0, entry1->ReadData(1, 35000, buffer2, sizeof(buffer2), NULL));
- EXPECT_EQ(17000, entry1->ReadData(1, 0, buffer1, sizeof(buffer1), NULL));
- EXPECT_EQ(17000, entry1->WriteData(1, 20000, buffer1, sizeof(buffer1), NULL,
- false));
+ const int kSize1 = 17000;
+ const int kSize2 = 25000;
+ scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize1);
+ scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize2);
+ CacheTestFillBuffer(buffer1->data(), kSize1, false);
+ CacheTestFillBuffer(buffer2->data(), kSize2, false);
+ base::strlcpy(buffer1->data(), "the data", kSize1);
+ EXPECT_EQ(17000, entry1->WriteData(0, 0, buffer1, kSize1, NULL, false));
+ memset(buffer1->data(), 0, kSize1);
+ EXPECT_EQ(17000, entry1->ReadData(0, 0, buffer1, kSize1, NULL));
+ EXPECT_STREQ("the data", buffer1->data());
+
+ base::strlcpy(buffer2->data(), "The really big data goes here", kSize2);
+ EXPECT_EQ(25000, entry1->WriteData(1, 10000, buffer2, kSize2, NULL, false));
+ memset(buffer2->data(), 0, kSize2);
+ EXPECT_EQ(24989, entry1->ReadData(1, 10011, buffer2, kSize2, NULL));
+ EXPECT_STREQ("big data goes here", buffer2->data());
+ EXPECT_EQ(25000, entry1->ReadData(1, 0, buffer2, kSize2, NULL));
+ EXPECT_EQ(0, memcmp(buffer2->data(), buffer2->data(), 10000));
+ EXPECT_EQ(5000, entry1->ReadData(1, 30000, buffer2, kSize2, NULL));
+
+ EXPECT_EQ(0, entry1->ReadData(1, 35000, buffer2, kSize2, NULL));
+ EXPECT_EQ(17000, entry1->ReadData(1, 0, buffer1, kSize1, NULL));
+ EXPECT_EQ(17000, entry1->WriteData(1, 20000, buffer1, kSize1, NULL, false));
EXPECT_EQ(37000, entry1->GetDataSize(1));
entry1->Doom();
@@ -284,13 +291,17 @@ void DiskCacheEntryTest::ExternalAsyncIO() {
MessageLoopHelper helper;
- char buffer1[17000], buffer2[25000], buffer3[25000];
- CacheTestFillBuffer(buffer1, sizeof(buffer1), false);
- CacheTestFillBuffer(buffer2, sizeof(buffer2), false);
- CacheTestFillBuffer(buffer3, sizeof(buffer3), false);
- base::strlcpy(buffer1, "the data", arraysize(buffer1));
- int ret = entry1->WriteData(0, 0, buffer1, sizeof(buffer1), &callback1,
- false);
+ const int kSize1 = 17000;
+ const int kSize2 = 25000;
+ const int kSize3 = 25000;
+ scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize1);
+ scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize2);
+ scoped_refptr<net::IOBuffer> buffer3 = new net::IOBuffer(kSize3);
+ CacheTestFillBuffer(buffer1->data(), kSize1, false);
+ CacheTestFillBuffer(buffer2->data(), kSize2, false);
+ CacheTestFillBuffer(buffer3->data(), kSize3, false);
+ base::strlcpy(buffer1->data(), "the data", kSize1);
+ int ret = entry1->WriteData(0, 0, buffer1, kSize1, &callback1, false);
EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret);
if (net::ERR_IO_PENDING == ret)
expected++;
@@ -298,19 +309,18 @@ void DiskCacheEntryTest::ExternalAsyncIO() {
g_cache_tests_max_id = 1;
EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected));
- memset(buffer2, 0, sizeof(buffer1));
- ret = entry1->ReadData(0, 0, buffer2, sizeof(buffer1), &callback2);
+ memset(buffer2->data(), 0, kSize1);
+ ret = entry1->ReadData(0, 0, buffer2, kSize1, &callback2);
EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret);
if (net::ERR_IO_PENDING == ret)
expected++;
g_cache_tests_max_id = 2;
EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected));
- EXPECT_STREQ("the data", buffer1);
+ EXPECT_STREQ("the data", buffer1->data());
- base::strlcpy(buffer2, "The really big data goes here", arraysize(buffer2));
- ret = entry1->WriteData(1, 10000, buffer2, sizeof(buffer2), &callback3,
- false);
+ base::strlcpy(buffer2->data(), "The really big data goes here", kSize2);
+ ret = entry1->WriteData(1, 10000, buffer2, kSize2, &callback3, false);
EXPECT_TRUE(25000 == ret || net::ERR_IO_PENDING == ret);
if (net::ERR_IO_PENDING == ret)
expected++;
@@ -318,36 +328,34 @@ void DiskCacheEntryTest::ExternalAsyncIO() {
g_cache_tests_max_id = 3;
EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected));
- memset(buffer3, 0, sizeof(buffer3));
- ret = entry1->ReadData(1, 10011, buffer3, sizeof(buffer3), &callback4);
+ memset(buffer3->data(), 0, kSize3);
+ ret = entry1->ReadData(1, 10011, buffer3, kSize3, &callback4);
EXPECT_TRUE(24989 == ret || net::ERR_IO_PENDING == ret);
if (net::ERR_IO_PENDING == ret)
expected++;
g_cache_tests_max_id = 4;
EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected));
- EXPECT_STREQ("big data goes here", buffer3);
- ret = entry1->ReadData(1, 0, buffer2, sizeof(buffer2), &callback5);
+ EXPECT_STREQ("big data goes here", buffer3->data());
+ ret = entry1->ReadData(1, 0, buffer2, kSize2, &callback5);
EXPECT_TRUE(25000 == ret || net::ERR_IO_PENDING == ret);
if (net::ERR_IO_PENDING == ret)
expected++;
g_cache_tests_max_id = 5;
EXPECT_TRUE(helper.WaitUntilCacheIoFinished(expected));
- EXPECT_EQ(0, memcmp(buffer2, buffer2, 10000));
- ret = entry1->ReadData(1, 30000, buffer2, sizeof(buffer2), &callback6);
+ EXPECT_EQ(0, memcmp(buffer2->data(), buffer2->data(), 10000));
+ ret = entry1->ReadData(1, 30000, buffer2, kSize2, &callback6);
EXPECT_TRUE(5000 == ret || net::ERR_IO_PENDING == ret);
if (net::ERR_IO_PENDING == ret)
expected++;
- EXPECT_EQ(0, entry1->ReadData(1, 35000, buffer2, sizeof(buffer2),
- &callback7));
- ret = entry1->ReadData(1, 0, buffer1, sizeof(buffer1), &callback8);
+ EXPECT_EQ(0, entry1->ReadData(1, 35000, buffer2, kSize2, &callback7));
+ ret = entry1->ReadData(1, 0, buffer1, kSize1, &callback8);
EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret);
if (net::ERR_IO_PENDING == ret)
expected++;
- ret = entry1->WriteData(1, 20000, buffer1, sizeof(buffer1), &callback9,
- false);
+ ret = entry1->WriteData(1, 20000, buffer1, kSize1, &callback9, false);
EXPECT_TRUE(17000 == ret || net::ERR_IO_PENDING == ret);
if (net::ERR_IO_PENDING == ret)
expected++;
@@ -381,17 +389,17 @@ void DiskCacheEntryTest::StreamAccess() {
ASSERT_TRUE(NULL != entry);
const int kBufferSize = 1024;
- char buffer1[kBufferSize];
- char buffer2[kBufferSize];
+ scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kBufferSize);
+ scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kBufferSize);
const int kNumStreams = 3;
for (int i = 0; i < kNumStreams; i++) {
- CacheTestFillBuffer(buffer1, kBufferSize, false);
+ CacheTestFillBuffer(buffer1->data(), kBufferSize, false);
EXPECT_EQ(kBufferSize, entry->WriteData(i, 0, buffer1, kBufferSize, NULL,
false));
- memset(buffer2, 0, kBufferSize);
+ memset(buffer2->data(), 0, kBufferSize);
EXPECT_EQ(kBufferSize, entry->ReadData(i, 0, buffer2, kBufferSize, NULL));
- EXPECT_EQ(0, memcmp(buffer1, buffer2, kBufferSize));
+ EXPECT_EQ(0, memcmp(buffer1->data(), buffer2->data(), kBufferSize));
}
EXPECT_EQ(net::ERR_INVALID_ARGUMENT,
@@ -461,30 +469,30 @@ void DiskCacheEntryTest::GrowData() {
disk_cache::Entry *entry1, *entry2;
ASSERT_TRUE(cache_->CreateEntry(key1, &entry1));
- char buffer1[20000];
- char buffer2[20000];
- CacheTestFillBuffer(buffer1, sizeof(buffer1), false);
- memset(buffer2, 0, sizeof(buffer2));
+ const int kSize = 20000;
+ scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize);
+ scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize);
+ CacheTestFillBuffer(buffer1->data(), kSize, false);
+ memset(buffer2->data(), 0, kSize);
- base::strlcpy(buffer1, "the data", arraysize(buffer1));
+ base::strlcpy(buffer1->data(), "the data", kSize);
EXPECT_EQ(10, entry1->WriteData(0, 0, buffer1, 10, NULL, false));
EXPECT_EQ(10, entry1->ReadData(0, 0, buffer2, 10, NULL));
- EXPECT_STREQ("the data", buffer2);
+ EXPECT_STREQ("the data", buffer2->data());
EXPECT_EQ(10, entry1->GetDataSize(0));
EXPECT_EQ(2000, entry1->WriteData(0, 0, buffer1, 2000, NULL, false));
EXPECT_EQ(2000, entry1->GetDataSize(0));
EXPECT_EQ(2000, entry1->ReadData(0, 0, buffer2, 2000, NULL));
- EXPECT_TRUE(!memcmp(buffer1, buffer2, 2000));
+ EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 2000));
- EXPECT_EQ(20000, entry1->WriteData(0, 0, buffer1, sizeof(buffer1), NULL,
- false));
+ EXPECT_EQ(20000, entry1->WriteData(0, 0, buffer1, kSize, NULL, false));
EXPECT_EQ(20000, entry1->GetDataSize(0));
- EXPECT_EQ(20000, entry1->ReadData(0, 0, buffer2, sizeof(buffer2), NULL));
- EXPECT_TRUE(!memcmp(buffer1, buffer2, sizeof(buffer1)));
+ EXPECT_EQ(20000, entry1->ReadData(0, 0, buffer2, kSize, NULL));
+ EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), kSize));
entry1->Close();
- memset(buffer2, 0, sizeof(buffer2));
+ memset(buffer2->data(), 0, kSize);
ASSERT_TRUE(cache_->CreateEntry("Second key", &entry2));
EXPECT_EQ(10, entry2->WriteData(0, 0, buffer1, 10, NULL, false));
EXPECT_EQ(10, entry2->GetDataSize(0));
@@ -495,17 +503,16 @@ void DiskCacheEntryTest::GrowData() {
EXPECT_EQ(2000, entry2->WriteData(0, 0, buffer1, 2000, NULL, false));
EXPECT_EQ(2000, entry2->GetDataSize(0));
EXPECT_EQ(2000, entry2->ReadData(0, 0, buffer2, 2000, NULL));
- EXPECT_TRUE(!memcmp(buffer1, buffer2, 2000));
+ EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 2000));
entry2->Close();
- memset(buffer2, 0, sizeof(buffer2));
+ memset(buffer2->data(), 0, kSize);
// Go from an internal address to an external one.
ASSERT_TRUE(cache_->OpenEntry("Second key", &entry2));
- EXPECT_EQ(20000, entry2->WriteData(0, 0, buffer1, sizeof(buffer1), NULL,
- false));
+ EXPECT_EQ(20000, entry2->WriteData(0, 0, buffer1, kSize, NULL, false));
EXPECT_EQ(20000, entry2->GetDataSize(0));
- EXPECT_EQ(20000, entry2->ReadData(0, 0, buffer2, sizeof(buffer2), NULL));
- EXPECT_TRUE(!memcmp(buffer1, buffer2, sizeof(buffer1)));
+ EXPECT_EQ(20000, entry2->ReadData(0, 0, buffer2, kSize, NULL));
+ EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), kSize));
entry2->Close();
}
@@ -525,11 +532,13 @@ void DiskCacheEntryTest::TruncateData() {
disk_cache::Entry *entry1;
ASSERT_TRUE(cache_->CreateEntry(key1, &entry1));
- char buffer1[20000];
- char buffer2[20000];
+ const int kSize1 = 20000;
+ const int kSize2 = 20000;
+ scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize1);
+ scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize2);
- CacheTestFillBuffer(buffer1, sizeof(buffer1), false);
- memset(buffer2, 0, sizeof(buffer2));
+ CacheTestFillBuffer(buffer1->data(), kSize1, false);
+ memset(buffer2->data(), 0, kSize2);
// Simple truncation:
EXPECT_EQ(200, entry1->WriteData(0, 0, buffer1, 200, NULL, false));
@@ -549,8 +558,8 @@ void DiskCacheEntryTest::TruncateData() {
EXPECT_EQ(20000, entry1->WriteData(0, 0, buffer1, 20000, NULL, true));
EXPECT_EQ(20000, entry1->GetDataSize(0));
EXPECT_EQ(20000, entry1->ReadData(0, 0, buffer2, 20000, NULL));
- EXPECT_TRUE(!memcmp(buffer1, buffer2, 20000));
- memset(buffer2, 0, sizeof(buffer2));
+ EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 20000));
+ memset(buffer2->data(), 0, kSize2);
// External file truncation
EXPECT_EQ(18000, entry1->WriteData(0, 0, buffer1, 18000, NULL, false));
@@ -564,9 +573,10 @@ void DiskCacheEntryTest::TruncateData() {
EXPECT_EQ(600, entry1->WriteData(0, 1000, buffer1, 600, NULL, true));
EXPECT_EQ(1600, entry1->GetDataSize(0));
EXPECT_EQ(600, entry1->ReadData(0, 1000, buffer2, 600, NULL));
- EXPECT_TRUE(!memcmp(buffer1, buffer2, 600));
+ EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 600));
EXPECT_EQ(1000, entry1->ReadData(0, 0, buffer2, 1000, NULL));
- EXPECT_TRUE(!memcmp(buffer1, buffer2, 1000)) << "Preserves previous data";
+ EXPECT_TRUE(!memcmp(buffer1->data(), buffer2->data(), 1000)) <<
+ "Preserves previous data";
// Go from external file to zero length.
EXPECT_EQ(20000, entry1->WriteData(0, 0, buffer1, 20000, NULL, true));
@@ -593,6 +603,33 @@ TEST_F(DiskCacheEntryTest, MemoryOnlyTruncateData) {
TruncateData();
}
+void DiskCacheEntryTest::ZeroLengthIO() {
+ std::string key1("the first key");
+ disk_cache::Entry *entry1;
+ ASSERT_TRUE(cache_->CreateEntry(key1, &entry1));
+
+ EXPECT_EQ(0, entry1->ReadData(0, 0, NULL, 0, NULL));
+ EXPECT_EQ(0, entry1->WriteData(0, 0, NULL, 0, NULL, false));
+
+ // This write should extend the entry.
+ EXPECT_EQ(0, entry1->WriteData(0, 1000, NULL, 0, NULL, false));
+ EXPECT_EQ(0, entry1->ReadData(0, 500, NULL, 0, NULL));
+ EXPECT_EQ(0, entry1->ReadData(0, 2000, NULL, 0, NULL));
+ EXPECT_EQ(1000, entry1->GetDataSize(0));
+ entry1->Close();
+}
+
+TEST_F(DiskCacheEntryTest, ZeroLengthIO) {
+ InitCache();
+ ZeroLengthIO();
+}
+
+TEST_F(DiskCacheEntryTest, MemoryOnlyZeroLengthIO) {
+ SetMemoryOnlyMode();
+ InitCache();
+ ZeroLengthIO();
+}
+
// Write more than the total cache capacity but to a single entry. |size| is the
// amount of bytes to write each time.
void DiskCacheEntryTest::ReuseEntry(int size) {
@@ -604,12 +641,12 @@ void DiskCacheEntryTest::ReuseEntry(int size) {
std::string key2("the second key");
ASSERT_TRUE(cache_->CreateEntry(key2, &entry));
- scoped_array<char> buffer(new char[size]);
- CacheTestFillBuffer(buffer.get(), size, false);
+ scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(size);
+ CacheTestFillBuffer(buffer->data(), size, false);
for (int i = 0; i < 15; i++) {
- EXPECT_EQ(0, entry->WriteData(0, 0, buffer.get(), 0, NULL, true));
- EXPECT_EQ(size, entry->WriteData(0, 0, buffer.get(), size, NULL, false));
+ EXPECT_EQ(0, entry->WriteData(0, 0, buffer, 0, NULL, true));
+ EXPECT_EQ(size, entry->WriteData(0, 0, buffer, size, NULL, false));
entry->Close();
ASSERT_TRUE(cache_->OpenEntry(key2, &entry));
}
@@ -655,18 +692,21 @@ void DiskCacheEntryTest::InvalidData() {
disk_cache::Entry *entry1;
ASSERT_TRUE(cache_->CreateEntry(key1, &entry1));
- char buffer1[20000];
- char buffer2[20000];
- char buffer3[20000];
+ const int kSize1 = 20000;
+ const int kSize2 = 20000;
+ const int kSize3 = 20000;
+ scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize1);
+ scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize2);
+ scoped_refptr<net::IOBuffer> buffer3 = new net::IOBuffer(kSize3);
- CacheTestFillBuffer(buffer1, sizeof(buffer1), false);
- memset(buffer2, 0, sizeof(buffer2));
+ CacheTestFillBuffer(buffer1->data(), kSize1, false);
+ memset(buffer2->data(), 0, kSize2);
// Simple data grow:
EXPECT_EQ(200, entry1->WriteData(0, 400, buffer1, 200, NULL, false));
EXPECT_EQ(600, entry1->GetDataSize(0));
EXPECT_EQ(100, entry1->ReadData(0, 300, buffer3, 100, NULL));
- EXPECT_TRUE(!memcmp(buffer3, buffer2, 100));
+ EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100));
entry1->Close();
ASSERT_TRUE(cache_->OpenEntry(key1, &entry1));
@@ -674,7 +714,7 @@ void DiskCacheEntryTest::InvalidData() {
EXPECT_EQ(200, entry1->WriteData(0, 800, buffer1, 200, NULL, false));
EXPECT_EQ(1000, entry1->GetDataSize(0));
EXPECT_EQ(100, entry1->ReadData(0, 700, buffer3, 100, NULL));
- EXPECT_TRUE(!memcmp(buffer3, buffer2, 100));
+ EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100));
entry1->Close();
ASSERT_TRUE(cache_->OpenEntry(key1, &entry1));
@@ -682,31 +722,31 @@ void DiskCacheEntryTest::InvalidData() {
EXPECT_EQ(200, entry1->WriteData(0, 1800, buffer1, 200, NULL, true));
EXPECT_EQ(2000, entry1->GetDataSize(0));
EXPECT_EQ(100, entry1->ReadData(0, 1500, buffer3, 100, NULL));
- EXPECT_TRUE(!memcmp(buffer3, buffer2, 100));
+ EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 100));
// Go to an external file.
EXPECT_EQ(200, entry1->WriteData(0, 19800, buffer1, 200, NULL, false));
EXPECT_EQ(20000, entry1->GetDataSize(0));
EXPECT_EQ(4000, entry1->ReadData(0, 14000, buffer3, 4000, NULL));
- EXPECT_TRUE(!memcmp(buffer3, buffer2, 4000));
+ EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 4000));
// And back to an internal block.
EXPECT_EQ(600, entry1->WriteData(0, 1000, buffer1, 600, NULL, true));
EXPECT_EQ(1600, entry1->GetDataSize(0));
EXPECT_EQ(600, entry1->ReadData(0, 1000, buffer3, 600, NULL));
- EXPECT_TRUE(!memcmp(buffer3, buffer1, 600));
+ EXPECT_TRUE(!memcmp(buffer3->data(), buffer1->data(), 600));
// Extend it again.
EXPECT_EQ(600, entry1->WriteData(0, 2000, buffer1, 600, NULL, false));
EXPECT_EQ(2600, entry1->GetDataSize(0));
EXPECT_EQ(200, entry1->ReadData(0, 1800, buffer3, 200, NULL));
- EXPECT_TRUE(!memcmp(buffer3, buffer2, 200));
+ EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 200));
// And again (with truncation flag).
EXPECT_EQ(600, entry1->WriteData(0, 3000, buffer1, 600, NULL, true));
EXPECT_EQ(3600, entry1->GetDataSize(0));
EXPECT_EQ(200, entry1->ReadData(0, 2800, buffer3, 200, NULL));
- EXPECT_TRUE(!memcmp(buffer3, buffer2, 200));
+ EXPECT_TRUE(!memcmp(buffer3->data(), buffer2->data(), 200));
entry1->Close();
}
@@ -729,14 +769,15 @@ void DiskCacheEntryTest::DoomEntry() {
entry1->Doom();
entry1->Close();
- char key_buffer[20000];
- CacheTestFillBuffer(key_buffer, sizeof(key_buffer), true);
- key_buffer[19999] = '\0';
+ const int kSize = 20000;
+ scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(kSize);
+ CacheTestFillBuffer(buffer->data(), kSize, true);
+ buffer->data()[19999] = '\0';
- key1 = key_buffer;
+ key1 = buffer->data();
ASSERT_TRUE(cache_->CreateEntry(key1, &entry1));
- EXPECT_EQ(20000, entry1->WriteData(0, 0, key_buffer, 20000, NULL, false));
- EXPECT_EQ(20000, entry1->WriteData(1, 0, key_buffer, 20000, NULL, false));
+ EXPECT_EQ(20000, entry1->WriteData(0, 0, buffer, kSize, NULL, false));
+ EXPECT_EQ(20000, entry1->WriteData(1, 0, buffer, kSize, NULL, false));
entry1->Doom();
entry1->Close();
@@ -765,14 +806,16 @@ void DiskCacheEntryTest::DoomedEntry() {
Time initial = Time::Now();
PlatformThread::Sleep(20);
- char buffer1[2000];
- char buffer2[2000];
- CacheTestFillBuffer(buffer1, sizeof(buffer1), false);
- memset(buffer2, 0, sizeof(buffer2));
+ const int kSize1 = 2000;
+ const int kSize2 = 2000;
+ scoped_refptr<net::IOBuffer> buffer1 = new net::IOBuffer(kSize1);
+ scoped_refptr<net::IOBuffer> buffer2 = new net::IOBuffer(kSize2);
+ CacheTestFillBuffer(buffer1->data(), kSize1, false);
+ memset(buffer2->data(), 0, kSize2);
EXPECT_EQ(2000, entry->WriteData(0, 0, buffer1, 2000, NULL, false));
EXPECT_EQ(2000, entry->ReadData(0, 0, buffer2, 2000, NULL));
- EXPECT_EQ(0, memcmp(buffer1, buffer2, sizeof(buffer1)));
+ EXPECT_EQ(0, memcmp(buffer1->data(), buffer2->data(), kSize1));
EXPECT_TRUE(initial < entry->GetLastModified());
EXPECT_TRUE(initial < entry->GetLastUsed());