Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(103)

Unified Diff: net/disk_cache/entry_sync_tests.cc

Issue 127083002: **STILLBAKING** Decouple disk cache tests from backends. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: upstream rebase Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/disk_cache/entry_sync_tests.h ('k') | net/disk_cache/entry_tests.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/disk_cache/entry_sync_tests.cc
diff --git a/net/disk_cache/entry_sync_tests.cc b/net/disk_cache/entry_sync_tests.cc
new file mode 100644
index 0000000000000000000000000000000000000000..debb0bc80d5c6050ebf09d0e75887ad2aab31ddd
--- /dev/null
+++ b/net/disk_cache/entry_sync_tests.cc
@@ -0,0 +1,179 @@
+// Copyright (c) 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "net/disk_cache/entry_sync_tests.h"
+
+#include "base/bind.h"
+#include "net/base/io_buffer.h"
+#include "net/base/net_errors.h"
+#include "net/base/test_completion_callback.h"
+#include "base/strings/string_util.h"
+#include "base/time/time.h"
+#include "net/disk_cache/disk_cache.h"
+#include "net/disk_cache/disk_cache_test.h"
+#include "net/disk_cache/disk_cache_test_util.h"
+
+namespace disk_cache {
+
+namespace {
+
+void InternalSyncIOBackground(Entry* entry) {
+ const int kSize1 = 10;
+ scoped_refptr<net::IOBuffer> buffer1(new net::IOBuffer(kSize1));
+ CacheTestFillBuffer(buffer1->data(), kSize1, false);
+ EXPECT_EQ(
+ 0,
+ entry->ReadData(0, 0, buffer1.get(), kSize1, net::CompletionCallback()));
+ base::strlcpy(buffer1->data(), "the data", kSize1);
+ EXPECT_EQ(10,
+ entry->WriteData(
+ 0, 0, buffer1.get(), kSize1, net::CompletionCallback(), false));
+ memset(buffer1->data(), 0, kSize1);
+ EXPECT_EQ(
+ 10,
+ entry->ReadData(0, 0, buffer1.get(), kSize1, net::CompletionCallback()));
+ 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,
+ entry->WriteData(
+ 1, 1500, buffer2.get(), kSize2, net::CompletionCallback(), false));
+ memset(buffer2->data(), 0, kSize2);
+ EXPECT_EQ(4989,
+ entry->ReadData(
+ 1, 1511, buffer2.get(), kSize2, net::CompletionCallback()));
+ EXPECT_STREQ("big data goes here", buffer2->data());
+ EXPECT_EQ(
+ 5000,
+ entry->ReadData(1, 0, buffer2.get(), kSize2, net::CompletionCallback()));
+ EXPECT_EQ(0, memcmp(buffer2->data(), buffer3->data(), 1500));
+ EXPECT_EQ(1500,
+ entry->ReadData(
+ 1, 5000, buffer2.get(), kSize2, net::CompletionCallback()));
+
+ EXPECT_EQ(0,
+ entry->ReadData(
+ 1, 6500, buffer2.get(), kSize2, net::CompletionCallback()));
+ EXPECT_EQ(
+ 6500,
+ entry->ReadData(1, 0, buffer3.get(), kSize3, net::CompletionCallback()));
+ EXPECT_EQ(8192,
+ entry->WriteData(
+ 1, 0, buffer3.get(), 8192, net::CompletionCallback(), false));
+ EXPECT_EQ(
+ 8192,
+ entry->ReadData(1, 0, buffer3.get(), kSize3, net::CompletionCallback()));
+ EXPECT_EQ(8192, entry->GetDataSize(1));
+
+ // We need to delete the memory buffer on this thread.
+ EXPECT_EQ(0, entry->WriteData(
+ 0, 0, NULL, 0, net::CompletionCallback(), true));
+ EXPECT_EQ(0, entry->WriteData(
+ 1, 0, NULL, 0, net::CompletionCallback(), true));
+}
+
+TEST_P(DiskCacheEntrySyncTest, InternalSyncIO) {
+ InitCache();
+
+ Entry* entry = NULL;
+ ASSERT_EQ(net::OK, CreateEntry("the first key", &entry));
+ ASSERT_TRUE(NULL != entry);
+
+ net::TestCompletionCallback cb;
+
+ // The bulk of the test runs from within the callback, on the cache thread.
+ GetCacheThread()->PostTaskAndReply(FROM_HERE,
+ base::Bind(&InternalSyncIOBackground, entry),
+ base::Bind(cb.callback(), net::OK));
+ EXPECT_EQ(net::OK, cb.WaitForResult());
+
+ entry->Doom();
+ entry->Close();
+ FlushQueueForTest();
+ EXPECT_EQ(0, cache()->GetEntryCount());
+}
+
+void ExternalSyncIOBackground(Entry* entry) {
+ 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,
+ entry->WriteData(
+ 0, 0, buffer1.get(), kSize1, net::CompletionCallback(), false));
+ memset(buffer1->data(), 0, kSize1);
+ EXPECT_EQ(
+ 17000,
+ entry->ReadData(0, 0, buffer1.get(), kSize1, net::CompletionCallback()));
+ EXPECT_STREQ("the data", buffer1->data());
+
+ base::strlcpy(buffer2->data(), "The really big data goes here", kSize2);
+ EXPECT_EQ(
+ 25000,
+ entry->WriteData(
+ 1, 10000, buffer2.get(), kSize2, net::CompletionCallback(), false));
+ memset(buffer2->data(), 0, kSize2);
+ EXPECT_EQ(24989,
+ entry->ReadData(
+ 1, 10011, buffer2.get(), kSize2, net::CompletionCallback()));
+ EXPECT_STREQ("big data goes here", buffer2->data());
+ EXPECT_EQ(
+ 25000,
+ entry->ReadData(1, 0, buffer2.get(), kSize2, net::CompletionCallback()));
+ EXPECT_EQ(5000,
+ entry->ReadData(
+ 1, 30000, buffer2.get(), kSize2, net::CompletionCallback()));
+
+ EXPECT_EQ(0,
+ entry->ReadData(
+ 1, 35000, buffer2.get(), kSize2, net::CompletionCallback()));
+ EXPECT_EQ(
+ 17000,
+ entry->ReadData(1, 0, buffer1.get(), kSize1, net::CompletionCallback()));
+ EXPECT_EQ(
+ 17000,
+ entry->WriteData(
+ 1, 20000, buffer1.get(), kSize1, net::CompletionCallback(), false));
+ EXPECT_EQ(37000, entry->GetDataSize(1));
+
+ // We need to delete the memory buffer on this thread.
+ EXPECT_EQ(0, entry->WriteData(
+ 0, 0, NULL, 0, net::CompletionCallback(), true));
+ EXPECT_EQ(0, entry->WriteData(
+ 1, 0, NULL, 0, net::CompletionCallback(), true));
+}
+
+TEST_P(DiskCacheEntrySyncTest, ExternalSyncIO) {
+ InitCache();
+
+ Entry* entry;
+ ASSERT_EQ(net::OK, CreateEntry("the first key", &entry));
+
+ net::TestCompletionCallback cb;
+
+ // The bulk of the test runs from within the callback, on the cache thread.
+ GetCacheThread()->PostTaskAndReply(FROM_HERE,
+ base::Bind(&ExternalSyncIOBackground, entry),
+ base::Bind(cb.callback(), net::OK));
+ EXPECT_EQ(net::OK, cb.WaitForResult());
+
+ entry->Doom();
+ entry->Close();
+ FlushQueueForTest();
+ EXPECT_EQ(0, cache()->GetEntryCount());
+}
+
+} // namespace
+
+} // namespace disk_cache
« no previous file with comments | « net/disk_cache/entry_sync_tests.h ('k') | net/disk_cache/entry_tests.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698