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

Unified Diff: components/sync/model_impl/passthrough_metadata_change_list_unittest.cc

Issue 2470953002: [Sync] Adding a passthrough MetadataChangeList implementation. (Closed)
Patch Set: Last update for Max. Created 4 years, 1 month 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 | « components/sync/model_impl/passthrough_metadata_change_list.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/sync/model_impl/passthrough_metadata_change_list_unittest.cc
diff --git a/components/sync/model_impl/passthrough_metadata_change_list_unittest.cc b/components/sync/model_impl/passthrough_metadata_change_list_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..50340e7da5edbd3a2d2306b41e2426501083cbf2
--- /dev/null
+++ b/components/sync/model_impl/passthrough_metadata_change_list_unittest.cc
@@ -0,0 +1,180 @@
+// Copyright 2016 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 "components/sync/model_impl/passthrough_metadata_change_list.h"
+
+#include <iterator>
+#include <map>
+#include <memory>
+#include <set>
+#include <utility>
+#include <vector>
+
+#include "base/bind.h"
+#include "base/run_loop.h"
+#include "components/sync/model/mock_model_type_store.h"
+#include "components/sync/protocol/entity_metadata.pb.h"
+#include "components/sync/protocol/model_type_state.pb.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace syncer {
+
+namespace {
+
+using EntityMetadata = sync_pb::EntityMetadata;
+using ModelTypeState = sync_pb::ModelTypeState;
+using WriteBatch = ModelTypeStore::WriteBatch;
+
+const char kKey1[] = "key1";
+const char kKey2[] = "key2";
+
+void RecordWriteGlobalMetadata(std::vector<std::string>* vector,
+ WriteBatch* batch,
+ const std::string& value) {
+ vector->push_back(value);
+}
+
+void RecordDeleteGlobalMetadata(int* call_count, WriteBatch* batch) {
+ ++(*call_count);
+}
+
+void RecordWriteMetadata(std::multimap<std::string, std::string>* map,
+ WriteBatch* batch,
+ const std::string& key,
+ const std::string& value) {
+ map->insert(std::make_pair(key, value));
+}
+
+void RecordDeleteMetadata(std::multiset<std::string>* set,
+ WriteBatch* batch,
+ const std::string& id) {
+ set->insert(id);
+}
+
+} // namespace
+
+class PassthroughMetadataChangeListTest : public testing::Test {
+ protected:
+ PassthroughMetadataChangeListTest()
+ : batch_(store_.CreateWriteBatch()), passthrough_(&store_, batch_.get()) {
+ store_.RegisterWriteGlobalMetadataHandler(
+ base::Bind(&RecordWriteGlobalMetadata, &global_metadata_vector_));
+ store_.RegisterDeleteGlobalMetadataHandler(
+ base::Bind(&RecordDeleteGlobalMetadata, &clear_global_metadata_count_));
+ store_.RegisterWriteMetadataHandler(
+ base::Bind(&RecordWriteMetadata, &update_metadata_map_));
+ store_.RegisterDeleteMetadataHandler(
+ base::Bind(&RecordDeleteMetadata, &clear_metadata_set_));
+ }
+
+ MetadataChangeList* mcl() { return &passthrough_; }
+ const std::vector<std::string>& global_metadata_vector() {
+ return global_metadata_vector_;
+ }
+ int clear_global_metadata_count() { return clear_global_metadata_count_; }
+ const std::multimap<std::string, std::string>& update_metadata_map() {
+ return update_metadata_map_;
+ }
+ const std::multiset<std::string>& clear_metadata_set() {
+ return clear_metadata_set_;
+ }
+
+ private:
+ // MockModelTypeStore needs MessageLoop.
+ base::MessageLoop message_loop_;
+
+ MockModelTypeStore store_;
+ std::unique_ptr<WriteBatch> batch_;
+ PassthroughMetadataChangeList passthrough_;
+
+ std::vector<std::string> global_metadata_vector_;
+ int clear_global_metadata_count_ = 0;
+ std::multimap<std::string, std::string> update_metadata_map_;
+ std::multiset<std::string> clear_metadata_set_;
+};
+
+TEST_F(PassthroughMetadataChangeListTest, ConstructorOnly) {
+ EXPECT_EQ(0u, global_metadata_vector().size());
+ EXPECT_EQ(0, clear_global_metadata_count());
+ EXPECT_EQ(0u, update_metadata_map().size());
+ EXPECT_EQ(0u, clear_metadata_set().size());
+}
+
+TEST_F(PassthroughMetadataChangeListTest, UpdateModelTypeState) {
+ ModelTypeState state;
+ mcl()->UpdateModelTypeState(state);
+ EXPECT_EQ(1u, global_metadata_vector().size());
+ EXPECT_EQ(0, clear_global_metadata_count());
+ EXPECT_EQ(0u, update_metadata_map().size());
+ EXPECT_EQ(0u, clear_metadata_set().size());
+ EXPECT_EQ(state.SerializeAsString(), global_metadata_vector()[0]);
+
+ state.set_encryption_key_name("ekn");
+ EXPECT_NE(state.SerializeAsString(), global_metadata_vector()[0]);
+ mcl()->UpdateModelTypeState(state);
+ EXPECT_EQ(2u, global_metadata_vector().size());
+ EXPECT_EQ(state.SerializeAsString(), global_metadata_vector()[1]);
+}
+
+TEST_F(PassthroughMetadataChangeListTest, ClearModelTypeState) {
+ mcl()->ClearModelTypeState();
+ EXPECT_EQ(0u, global_metadata_vector().size());
+ EXPECT_EQ(1, clear_global_metadata_count());
+ EXPECT_EQ(0u, update_metadata_map().size());
+ EXPECT_EQ(0u, clear_metadata_set().size());
+
+ mcl()->ClearModelTypeState();
+ EXPECT_EQ(2, clear_global_metadata_count());
+}
+
+TEST_F(PassthroughMetadataChangeListTest, UpdateMetadata) {
+ EntityMetadata metadata;
+ metadata.set_client_tag_hash("some_hash");
+ std::string serialized_metadata1 = metadata.SerializeAsString();
+ mcl()->UpdateMetadata(kKey1, metadata);
+ EXPECT_EQ(0u, global_metadata_vector().size());
+ EXPECT_EQ(0, clear_global_metadata_count());
+ EXPECT_EQ(1u, update_metadata_map().size());
+ EXPECT_EQ(1u, update_metadata_map().count(kKey1));
+ EXPECT_EQ(serialized_metadata1, update_metadata_map().find(kKey1)->second);
+ EXPECT_EQ(0u, clear_metadata_set().size());
+
+ metadata.set_client_tag_hash("other_hash");
+ std::string serialized_metadata2 = metadata.SerializeAsString();
+ EXPECT_NE(serialized_metadata1, serialized_metadata2);
+ mcl()->UpdateMetadata(kKey1, metadata);
+ mcl()->UpdateMetadata(kKey2, metadata);
+ EXPECT_EQ(3u, update_metadata_map().size());
+ EXPECT_EQ(2u, update_metadata_map().count(kKey1));
+ EXPECT_EQ(1u, update_metadata_map().count(kKey2));
+ auto key1_iter = update_metadata_map().find(kKey1);
+ EXPECT_EQ(serialized_metadata1, key1_iter->second);
+ EXPECT_EQ(serialized_metadata2, std::next(key1_iter)->second);
+ EXPECT_EQ(serialized_metadata2, update_metadata_map().find(kKey2)->second);
+}
+
+TEST_F(PassthroughMetadataChangeListTest, ClearMetadata) {
+ mcl()->ClearMetadata(kKey1);
+ EXPECT_EQ(1u, clear_metadata_set().size());
+ EXPECT_EQ(1u, clear_metadata_set().count(kKey1));
+
+ mcl()->ClearMetadata(kKey1);
+ mcl()->ClearMetadata(kKey2);
+ EXPECT_EQ(3u, clear_metadata_set().size());
+ EXPECT_EQ(2u, clear_metadata_set().count(kKey1));
+ EXPECT_EQ(1u, clear_metadata_set().count(kKey2));
+}
+
+TEST_F(PassthroughMetadataChangeListTest, Everything) {
+ mcl()->UpdateModelTypeState(ModelTypeState());
+ mcl()->ClearModelTypeState();
+ mcl()->UpdateMetadata(kKey1, EntityMetadata());
+ mcl()->ClearMetadata(kKey1);
+ EXPECT_EQ(1u, global_metadata_vector().size());
+ EXPECT_EQ(1, clear_global_metadata_count());
+ EXPECT_EQ(1u, update_metadata_map().size());
+ EXPECT_EQ(1u, clear_metadata_set().size());
+}
+
+} // namespace syncer
« no previous file with comments | « components/sync/model_impl/passthrough_metadata_change_list.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698