Index: components/leveldb_proto/proto_database_impl_unittest.cc |
diff --git a/components/leveldb_proto/proto_database_impl_unittest.cc b/components/leveldb_proto/proto_database_impl_unittest.cc |
index c3dc76b4ce9ef6d245ee62841f81f68ca6fcab16..50f5ed0d7bac9990ab267a28bc9f3b13a17a7769 100644 |
--- a/components/leveldb_proto/proto_database_impl_unittest.cc |
+++ b/components/leveldb_proto/proto_database_impl_unittest.cc |
@@ -27,6 +27,7 @@ using base::MessageLoop; |
using base::ScopedTempDir; |
using testing::Invoke; |
using testing::Return; |
+using testing::UnorderedElementsAre; |
using testing::_; |
namespace leveldb_proto { |
@@ -246,6 +247,56 @@ TEST_F(ProtoDatabaseImplTest, TestDBGetSuccess) { |
base::RunLoop().RunUntilIdle(); |
} |
+TEST(ProtoDatabaseImplLevelDBTest, TestDBSaveAndLoadKeys) { |
+ base::MessageLoop main_loop; |
+ |
+ ScopedTempDir temp_dir; |
+ ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); |
+ base::Thread db_thread("dbthread"); |
+ ASSERT_TRUE(db_thread.Start()); |
+ std::unique_ptr<ProtoDatabaseImpl<TestProto>> db( |
+ new ProtoDatabaseImpl<TestProto>(db_thread.task_runner())); |
+ |
+ auto expect_init_success = |
+ base::Bind([](bool success) { EXPECT_TRUE(success); }); |
+ db->Init(kTestLevelDBClientName, temp_dir.path(), expect_init_success); |
+ |
+ base::RunLoop run_update_entries; |
+ auto expect_update_success = base::Bind( |
+ [](base::Closure signal, bool success) { |
+ EXPECT_TRUE(success); |
+ signal.Run(); |
+ }, |
+ run_update_entries.QuitClosure()); |
+ TestProto test_proto; |
+ test_proto.set_data("some data"); |
+ ProtoDatabase<TestProto>::KeyEntryVector data_set( |
+ {{"0", test_proto}, {"1", test_proto}, {"2", test_proto}}); |
+ db->UpdateEntries( |
+ base::MakeUnique<ProtoDatabase<TestProto>::KeyEntryVector>(data_set), |
+ base::MakeUnique<std::vector<std::string>>(), expect_update_success); |
+ run_update_entries.Run(); |
+ |
+ base::RunLoop run_load_keys; |
+ auto verify_loaded_keys = base::Bind( |
+ [](base::Closure signal, bool success, |
+ std::unique_ptr<std::vector<std::string>> keys) { |
+ EXPECT_TRUE(success); |
+ EXPECT_THAT(*keys, UnorderedElementsAre("0", "1", "2")); |
+ signal.Run(); |
+ }, |
+ run_load_keys.QuitClosure()); |
+ db->LoadKeys(verify_loaded_keys); |
+ run_load_keys.Run(); |
+ |
+ // Shutdown database. |
+ db.reset(); |
+ base::RunLoop run_destruction; |
+ db_thread.task_runner()->PostTaskAndReply( |
+ FROM_HERE, base::Bind(base::DoNothing), run_destruction.QuitClosure()); |
+ run_destruction.Run(); |
+} |
+ |
TEST_F(ProtoDatabaseImplTest, TestDBGetNotFound) { |
base::FilePath path(FILE_PATH_LITERAL("/fake/path")); |