diff options
author | pliard@chromium.org <pliard@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-16 13:31:48 +0000 |
---|---|---|
committer | pliard@chromium.org <pliard@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-16 13:31:48 +0000 |
commit | 18fc33bb74c62babf58f929ef217ae4812502c22 (patch) | |
tree | 283fb3df38b95d5d6c441d18b38ad72b3ab5a065 /net/disk_cache/entry_unittest.cc | |
parent | 5c01d9cdf1fea994b5393cb32dbff1c84a3575f3 (diff) | |
download | chromium_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.cc | 115 |
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. |