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

Unified Diff: content/browser/indexed_db/indexed_db_cleanup_on_io_error_unittest.cc

Issue 356463008: Cleanup IndexedDBIO unit tests using GoogleMock. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: not exporting MockLevelDBFactory Created 6 years, 5 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
Index: content/browser/indexed_db/indexed_db_cleanup_on_io_error_unittest.cc
diff --git a/content/browser/indexed_db/indexed_db_cleanup_on_io_error_unittest.cc b/content/browser/indexed_db/indexed_db_cleanup_on_io_error_unittest.cc
index 2bcd428c60e3d7c902b5968263d4bc1162c87f87..953d4b4c767c97e7fa88cf8ce21826a6dc65dc8b 100644
--- a/content/browser/indexed_db/indexed_db_cleanup_on_io_error_unittest.cc
+++ b/content/browser/indexed_db/indexed_db_cleanup_on_io_error_unittest.cc
@@ -11,6 +11,8 @@
#include "base/strings/utf_string_conversions.h"
#include "content/browser/indexed_db/indexed_db_backing_store.h"
#include "content/browser/indexed_db/leveldb/leveldb_database.h"
+#include "content/browser/indexed_db/leveldb/mock_leveldb_factory.h"
+#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/leveldatabase/env_chromium.h"
@@ -20,6 +22,9 @@ using content::LevelDBComparator;
using content::LevelDBDatabase;
using content::LevelDBFactory;
using content::LevelDBSnapshot;
+using testing::_;
+using testing::Exactly;
+using testing::Invoke;
namespace base {
class TaskRunner;
@@ -54,30 +59,27 @@ class BustedLevelDBDatabase : public LevelDBDatabase {
DISALLOW_COPY_AND_ASSIGN(BustedLevelDBDatabase);
};
-class MockLevelDBFactory : public LevelDBFactory {
+class BustedLevelDBFactory : public LevelDBFactory {
public:
- MockLevelDBFactory() : destroy_called_(false) {}
virtual leveldb::Status OpenLevelDB(
const base::FilePath& file_name,
const LevelDBComparator* comparator,
scoped_ptr<LevelDBDatabase>* db,
bool* is_disk_full = 0) OVERRIDE {
- *db = BustedLevelDBDatabase::Open(file_name, comparator);
- return leveldb::Status::OK();
+ if (open_error_.ok())
+ *db = BustedLevelDBDatabase::Open(file_name, comparator);
+ return open_error_;
}
- virtual leveldb::Status DestroyLevelDB(const base::FilePath& file_name)
- OVERRIDE {
- EXPECT_FALSE(destroy_called_);
- destroy_called_ = true;
+ virtual leveldb::Status DestroyLevelDB(
+ const base::FilePath& file_name) OVERRIDE {
return leveldb::Status::IOError("error");
}
- virtual ~MockLevelDBFactory() { EXPECT_TRUE(destroy_called_); }
-
- private:
- bool destroy_called_;
+ void SetOpenError(const leveldb::Status& open_error) {
+ open_error_ = open_error;
+ }
private:
- DISALLOW_COPY_AND_ASSIGN(MockLevelDBFactory);
+ leveldb::Status open_error_;
};
TEST(IndexedDBIOErrorTest, CleanUpTest) {
@@ -87,9 +89,17 @@ TEST(IndexedDBIOErrorTest, CleanUpTest) {
ASSERT_TRUE(temp_directory.CreateUniqueTempDir());
const base::FilePath path = temp_directory.path();
net::URLRequestContext* request_context = NULL;
- MockLevelDBFactory mock_leveldb_factory;
- blink::WebIDBDataLoss data_loss =
- blink::WebIDBDataLossNone;
+
+ BustedLevelDBFactory busted_factory;
+ content::MockLevelDBFactory mock_leveldb_factory;
+ ON_CALL(mock_leveldb_factory, OpenLevelDB(_, _, _, _)).WillByDefault(
+ Invoke(&busted_factory, &BustedLevelDBFactory::OpenLevelDB));
+ ON_CALL(mock_leveldb_factory, DestroyLevelDB(_)).WillByDefault(
+ Invoke(&busted_factory, &BustedLevelDBFactory::DestroyLevelDB));
+
+ EXPECT_CALL(mock_leveldb_factory, OpenLevelDB(_, _, _, _)).Times(Exactly(1));
+ EXPECT_CALL(mock_leveldb_factory, DestroyLevelDB(_)).Times(Exactly(1));
+ blink::WebIDBDataLoss data_loss = blink::WebIDBDataLossNone;
std::string data_loss_message;
bool disk_full = false;
base::TaskRunner* task_runner = NULL;
@@ -109,41 +119,6 @@ TEST(IndexedDBIOErrorTest, CleanUpTest) {
&s);
}
-// TODO(dgrogan): Remove expect_destroy if we end up not using it again. It is
-// currently set to false in all 4 calls below.
-template <class T>
-class MockErrorLevelDBFactory : public LevelDBFactory {
- public:
- MockErrorLevelDBFactory(T error, bool expect_destroy)
- : error_(error),
- expect_destroy_(expect_destroy),
- destroy_called_(false) {}
- virtual leveldb::Status OpenLevelDB(
- const base::FilePath& file_name,
- const LevelDBComparator* comparator,
- scoped_ptr<LevelDBDatabase>* db,
- bool* is_disk_full = 0) OVERRIDE {
- return MakeIOError(
- "some filename", "some message", leveldb_env::kNewLogger, error_);
- }
- virtual leveldb::Status DestroyLevelDB(const base::FilePath& file_name)
- OVERRIDE {
- EXPECT_FALSE(destroy_called_);
- destroy_called_ = true;
- return leveldb::Status::IOError("error");
- }
- virtual ~MockErrorLevelDBFactory() {
- EXPECT_EQ(expect_destroy_, destroy_called_);
- }
-
- private:
- T error_;
- bool expect_destroy_;
- bool destroy_called_;
-
- DISALLOW_COPY_AND_ASSIGN(MockErrorLevelDBFactory);
-};
-
TEST(IndexedDBNonRecoverableIOErrorTest, NuancedCleanupTest) {
content::IndexedDBFactory* factory = NULL;
const GURL origin("http://localhost:81");
@@ -159,7 +134,18 @@ TEST(IndexedDBNonRecoverableIOErrorTest, NuancedCleanupTest) {
bool clean_journal = false;
leveldb::Status s;
- MockErrorLevelDBFactory<int> mock_leveldb_factory(ENOSPC, false);
+ BustedLevelDBFactory busted_factory;
+ content::MockLevelDBFactory mock_leveldb_factory;
+ ON_CALL(mock_leveldb_factory, OpenLevelDB(_, _, _, _)).WillByDefault(
+ Invoke(&busted_factory, &BustedLevelDBFactory::OpenLevelDB));
+ ON_CALL(mock_leveldb_factory, DestroyLevelDB(_)).WillByDefault(
+ Invoke(&busted_factory, &BustedLevelDBFactory::DestroyLevelDB));
+
+ EXPECT_CALL(mock_leveldb_factory, OpenLevelDB(_, _, _, _)).Times(Exactly(4));
+ EXPECT_CALL(mock_leveldb_factory, DestroyLevelDB(_)).Times(Exactly(0));
+
+ busted_factory.SetOpenError(MakeIOError(
+ "some filename", "some message", leveldb_env::kNewLogger, ENOSPC));
scoped_refptr<IndexedDBBackingStore> backing_store =
IndexedDBBackingStore::Open(factory,
origin,
@@ -174,8 +160,10 @@ TEST(IndexedDBNonRecoverableIOErrorTest, NuancedCleanupTest) {
&s);
ASSERT_TRUE(s.IsIOError());
- MockErrorLevelDBFactory<base::File::Error> mock_leveldb_factory2(
- base::File::FILE_ERROR_NO_MEMORY, false);
+ busted_factory.SetOpenError(MakeIOError("some filename",
+ "some message",
+ leveldb_env::kNewLogger,
+ base::File::FILE_ERROR_NO_MEMORY));
scoped_refptr<IndexedDBBackingStore> backing_store2 =
IndexedDBBackingStore::Open(factory,
origin,
@@ -184,13 +172,14 @@ TEST(IndexedDBNonRecoverableIOErrorTest, NuancedCleanupTest) {
&data_loss,
&data_loss_reason,
&disk_full,
- &mock_leveldb_factory2,
+ &mock_leveldb_factory,
task_runner,
clean_journal,
&s);
ASSERT_TRUE(s.IsIOError());
- MockErrorLevelDBFactory<int> mock_leveldb_factory3(EIO, false);
+ busted_factory.SetOpenError(MakeIOError(
+ "some filename", "some message", leveldb_env::kNewLogger, EIO));
scoped_refptr<IndexedDBBackingStore> backing_store3 =
IndexedDBBackingStore::Open(factory,
origin,
@@ -199,14 +188,16 @@ TEST(IndexedDBNonRecoverableIOErrorTest, NuancedCleanupTest) {
&data_loss,
&data_loss_reason,
&disk_full,
- &mock_leveldb_factory3,
+ &mock_leveldb_factory,
task_runner,
clean_journal,
&s);
ASSERT_TRUE(s.IsIOError());
- MockErrorLevelDBFactory<base::File::Error> mock_leveldb_factory4(
- base::File::FILE_ERROR_FAILED, false);
+ busted_factory.SetOpenError(MakeIOError("some filename",
+ "some message",
+ leveldb_env::kNewLogger,
+ base::File::FILE_ERROR_FAILED));
scoped_refptr<IndexedDBBackingStore> backing_store4 =
IndexedDBBackingStore::Open(factory,
origin,
@@ -215,7 +206,7 @@ TEST(IndexedDBNonRecoverableIOErrorTest, NuancedCleanupTest) {
&data_loss,
&data_loss_reason,
&disk_full,
- &mock_leveldb_factory4,
+ &mock_leveldb_factory,
task_runner,
clean_journal,
&s);
« no previous file with comments | « content/browser/indexed_db/indexed_db_backing_store_unittest.cc ('k') | content/browser/indexed_db/leveldb/leveldb_factory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698