summaryrefslogtreecommitdiffstats
path: root/net/disk_cache/entry_unittest.cc
diff options
context:
space:
mode:
authorpliard@chromium.org <pliard@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-16 13:31:48 +0000
committerpliard@chromium.org <pliard@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-07-16 13:31:48 +0000
commit18fc33bb74c62babf58f929ef217ae4812502c22 (patch)
tree283fb3df38b95d5d6c441d18b38ad72b3ab5a065 /net/disk_cache/entry_unittest.cc
parent5c01d9cdf1fea994b5393cb32dbff1c84a3575f3 (diff)
downloadchromium_src-18fc33bb74c62babf58f929ef217ae4812502c22.zip
chromium_src-18fc33bb74c62babf58f929ef217ae4812502c22.tar.gz
chromium_src-18fc33bb74c62babf58f929ef217ae4812502c22.tar.bz2
Make simple cache not use optimistic operations for APP_CACHE.
This is needed as part of the default disk backend -> simple backend migration for app cache (on Android). This CL also enables a few unit tests in app cache mode with the simple backend. BUG=257616 R=gavinp@chromium.org Review URL: https://codereview.chromium.org/18392005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@211790 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/disk_cache/entry_unittest.cc')
-rw-r--r--net/disk_cache/entry_unittest.cc115
1 files changed, 115 insertions, 0 deletions
diff --git a/net/disk_cache/entry_unittest.cc b/net/disk_cache/entry_unittest.cc
index f7f8d7b..97cbcca 100644
--- a/net/disk_cache/entry_unittest.cc
+++ b/net/disk_cache/entry_unittest.cc
@@ -2541,6 +2541,121 @@ TEST_F(DiskCacheEntryTest, SimpleCacheNoEOF) {
DisableIntegrityCheck();
}
+TEST_F(DiskCacheEntryTest, SimpleCacheNonOptimisticOperationsBasic) {
+ // Test sequence:
+ // Create, Write, Read, Close.
+ SetCacheType(net::APP_CACHE); // APP_CACHE doesn't use optimistic operations.
+ SetSimpleCacheMode();
+ InitCache();
+ disk_cache::Entry* const null_entry = NULL;
+
+ disk_cache::Entry* entry = NULL;
+ EXPECT_EQ(net::OK, CreateEntry("my key", &entry));
+ ASSERT_NE(null_entry, entry);
+
+ const int kBufferSize = 10;
+ scoped_refptr<net::IOBufferWithSize> write_buffer(
+ new net::IOBufferWithSize(kBufferSize));
+ CacheTestFillBuffer(write_buffer->data(), write_buffer->size(), false);
+ EXPECT_EQ(
+ write_buffer->size(),
+ WriteData(entry, 0, 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()));
+ entry->Close();
+}
+
+TEST_F(DiskCacheEntryTest, SimpleCacheNonOptimisticOperationsDontBlock) {
+ // Test sequence:
+ // Create, Write, Close.
+ SetCacheType(net::APP_CACHE); // APP_CACHE doesn't use optimistic operations.
+ SetSimpleCacheMode();
+ InitCache();
+ disk_cache::Entry* const null_entry = NULL;
+
+ MessageLoopHelper helper;
+ CallbackTest create_callback(&helper, false);
+
+ int expected_callback_runs = 0;
+ const int kBufferSize = 10;
+ scoped_refptr<net::IOBufferWithSize> write_buffer(
+ new net::IOBufferWithSize(kBufferSize));
+
+ disk_cache::Entry* entry = NULL;
+ EXPECT_EQ(net::OK, CreateEntry("my key", &entry));
+ ASSERT_NE(null_entry, entry);
+
+ CacheTestFillBuffer(write_buffer->data(), write_buffer->size(), false);
+ CallbackTest write_callback(&helper, false);
+ int ret = entry->WriteData(
+ 0,
+ 0,
+ write_buffer.get(),
+ write_buffer->size(),
+ base::Bind(&CallbackTest::Run, base::Unretained(&write_callback)),
+ false);
+ ASSERT_EQ(net::ERR_IO_PENDING, ret);
+ helper.WaitUntilCacheIoFinished(++expected_callback_runs);
+
+ entry->Close();
+}
+
+TEST_F(DiskCacheEntryTest,
+ SimpleCacheNonOptimisticOperationsBasicsWithoutWaiting) {
+ // Test sequence:
+ // Create, Write, Read, Close.
+ SetCacheType(net::APP_CACHE); // APP_CACHE doesn't use optimistic operations.
+ SetSimpleCacheMode();
+ InitCache();
+ disk_cache::Entry* const null_entry = NULL;
+ MessageLoopHelper helper;
+
+ disk_cache::Entry* entry = NULL;
+ // Note that |entry| is only set once CreateEntry() completed which is why we
+ // have to wait (i.e. use the helper CreateEntry() function).
+ EXPECT_EQ(net::OK, CreateEntry("my key", &entry));
+ ASSERT_NE(null_entry, entry);
+
+ const int kBufferSize = 10;
+ scoped_refptr<net::IOBufferWithSize> write_buffer(
+ new net::IOBufferWithSize(kBufferSize));
+ CacheTestFillBuffer(write_buffer->data(), write_buffer->size(), false);
+ CallbackTest write_callback(&helper, false);
+ int ret = entry->WriteData(
+ 0,
+ 0,
+ write_buffer.get(),
+ write_buffer->size(),
+ base::Bind(&CallbackTest::Run, base::Unretained(&write_callback)),
+ false);
+ EXPECT_EQ(net::ERR_IO_PENDING, ret);
+ int expected_callback_runs = 1;
+
+ scoped_refptr<net::IOBufferWithSize> read_buffer(
+ new net::IOBufferWithSize(kBufferSize));
+ CallbackTest read_callback(&helper, false);
+ ret = entry->ReadData(
+ 0,
+ 0,
+ read_buffer.get(),
+ read_buffer->size(),
+ base::Bind(&CallbackTest::Run, base::Unretained(&read_callback)));
+ EXPECT_EQ(net::ERR_IO_PENDING, ret);
+ ++expected_callback_runs;
+
+ helper.WaitUntilCacheIoFinished(expected_callback_runs);
+ ASSERT_EQ(read_buffer->size(), write_buffer->size());
+ EXPECT_EQ(
+ 0,
+ memcmp(read_buffer->data(), write_buffer->data(), read_buffer->size()));
+
+ entry->Close();
+}
+
TEST_F(DiskCacheEntryTest, SimpleCacheOptimistic) {
// Test sequence:
// Create, Write, Read, Write, Read, Close.