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

Side by Side 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 unified diff | 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 »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "components/sync/model_impl/passthrough_metadata_change_list.h"
6
7 #include <iterator>
8 #include <map>
9 #include <memory>
10 #include <set>
11 #include <utility>
12 #include <vector>
13
14 #include "base/bind.h"
15 #include "base/run_loop.h"
16 #include "components/sync/model/mock_model_type_store.h"
17 #include "components/sync/protocol/entity_metadata.pb.h"
18 #include "components/sync/protocol/model_type_state.pb.h"
19 #include "testing/gtest/include/gtest/gtest.h"
20
21 namespace syncer {
22
23 namespace {
24
25 using EntityMetadata = sync_pb::EntityMetadata;
26 using ModelTypeState = sync_pb::ModelTypeState;
27 using WriteBatch = ModelTypeStore::WriteBatch;
28
29 const char kKey1[] = "key1";
30 const char kKey2[] = "key2";
31
32 void RecordWriteGlobalMetadata(std::vector<std::string>* vector,
33 WriteBatch* batch,
34 const std::string& value) {
35 vector->push_back(value);
36 }
37
38 void RecordDeleteGlobalMetadata(int* call_count, WriteBatch* batch) {
39 ++(*call_count);
40 }
41
42 void RecordWriteMetadata(std::multimap<std::string, std::string>* map,
43 WriteBatch* batch,
44 const std::string& key,
45 const std::string& value) {
46 map->insert(std::make_pair(key, value));
47 }
48
49 void RecordDeleteMetadata(std::multiset<std::string>* set,
50 WriteBatch* batch,
51 const std::string& id) {
52 set->insert(id);
53 }
54
55 } // namespace
56
57 class PassthroughMetadataChangeListTest : public testing::Test {
58 protected:
59 PassthroughMetadataChangeListTest()
60 : batch_(store_.CreateWriteBatch()), passthrough_(&store_, batch_.get()) {
61 store_.RegisterWriteGlobalMetadataHandler(
62 base::Bind(&RecordWriteGlobalMetadata, &global_metadata_vector_));
63 store_.RegisterDeleteGlobalMetadataHandler(
64 base::Bind(&RecordDeleteGlobalMetadata, &clear_global_metadata_count_));
65 store_.RegisterWriteMetadataHandler(
66 base::Bind(&RecordWriteMetadata, &update_metadata_map_));
67 store_.RegisterDeleteMetadataHandler(
68 base::Bind(&RecordDeleteMetadata, &clear_metadata_set_));
69 }
70
71 MetadataChangeList* mcl() { return &passthrough_; }
72 const std::vector<std::string>& global_metadata_vector() {
73 return global_metadata_vector_;
74 }
75 int clear_global_metadata_count() { return clear_global_metadata_count_; }
76 const std::multimap<std::string, std::string>& update_metadata_map() {
77 return update_metadata_map_;
78 }
79 const std::multiset<std::string>& clear_metadata_set() {
80 return clear_metadata_set_;
81 }
82
83 private:
84 // MockModelTypeStore needs MessageLoop.
85 base::MessageLoop message_loop_;
86
87 MockModelTypeStore store_;
88 std::unique_ptr<WriteBatch> batch_;
89 PassthroughMetadataChangeList passthrough_;
90
91 std::vector<std::string> global_metadata_vector_;
92 int clear_global_metadata_count_ = 0;
93 std::multimap<std::string, std::string> update_metadata_map_;
94 std::multiset<std::string> clear_metadata_set_;
95 };
96
97 TEST_F(PassthroughMetadataChangeListTest, ConstructorOnly) {
98 EXPECT_EQ(0u, global_metadata_vector().size());
99 EXPECT_EQ(0, clear_global_metadata_count());
100 EXPECT_EQ(0u, update_metadata_map().size());
101 EXPECT_EQ(0u, clear_metadata_set().size());
102 }
103
104 TEST_F(PassthroughMetadataChangeListTest, UpdateModelTypeState) {
105 ModelTypeState state;
106 mcl()->UpdateModelTypeState(state);
107 EXPECT_EQ(1u, global_metadata_vector().size());
108 EXPECT_EQ(0, clear_global_metadata_count());
109 EXPECT_EQ(0u, update_metadata_map().size());
110 EXPECT_EQ(0u, clear_metadata_set().size());
111 EXPECT_EQ(state.SerializeAsString(), global_metadata_vector()[0]);
112
113 state.set_encryption_key_name("ekn");
114 EXPECT_NE(state.SerializeAsString(), global_metadata_vector()[0]);
115 mcl()->UpdateModelTypeState(state);
116 EXPECT_EQ(2u, global_metadata_vector().size());
117 EXPECT_EQ(state.SerializeAsString(), global_metadata_vector()[1]);
118 }
119
120 TEST_F(PassthroughMetadataChangeListTest, ClearModelTypeState) {
121 mcl()->ClearModelTypeState();
122 EXPECT_EQ(0u, global_metadata_vector().size());
123 EXPECT_EQ(1, clear_global_metadata_count());
124 EXPECT_EQ(0u, update_metadata_map().size());
125 EXPECT_EQ(0u, clear_metadata_set().size());
126
127 mcl()->ClearModelTypeState();
128 EXPECT_EQ(2, clear_global_metadata_count());
129 }
130
131 TEST_F(PassthroughMetadataChangeListTest, UpdateMetadata) {
132 EntityMetadata metadata;
133 metadata.set_client_tag_hash("some_hash");
134 std::string serialized_metadata1 = metadata.SerializeAsString();
135 mcl()->UpdateMetadata(kKey1, metadata);
136 EXPECT_EQ(0u, global_metadata_vector().size());
137 EXPECT_EQ(0, clear_global_metadata_count());
138 EXPECT_EQ(1u, update_metadata_map().size());
139 EXPECT_EQ(1u, update_metadata_map().count(kKey1));
140 EXPECT_EQ(serialized_metadata1, update_metadata_map().find(kKey1)->second);
141 EXPECT_EQ(0u, clear_metadata_set().size());
142
143 metadata.set_client_tag_hash("other_hash");
144 std::string serialized_metadata2 = metadata.SerializeAsString();
145 EXPECT_NE(serialized_metadata1, serialized_metadata2);
146 mcl()->UpdateMetadata(kKey1, metadata);
147 mcl()->UpdateMetadata(kKey2, metadata);
148 EXPECT_EQ(3u, update_metadata_map().size());
149 EXPECT_EQ(2u, update_metadata_map().count(kKey1));
150 EXPECT_EQ(1u, update_metadata_map().count(kKey2));
151 auto key1_iter = update_metadata_map().find(kKey1);
152 EXPECT_EQ(serialized_metadata1, key1_iter->second);
153 EXPECT_EQ(serialized_metadata2, std::next(key1_iter)->second);
154 EXPECT_EQ(serialized_metadata2, update_metadata_map().find(kKey2)->second);
155 }
156
157 TEST_F(PassthroughMetadataChangeListTest, ClearMetadata) {
158 mcl()->ClearMetadata(kKey1);
159 EXPECT_EQ(1u, clear_metadata_set().size());
160 EXPECT_EQ(1u, clear_metadata_set().count(kKey1));
161
162 mcl()->ClearMetadata(kKey1);
163 mcl()->ClearMetadata(kKey2);
164 EXPECT_EQ(3u, clear_metadata_set().size());
165 EXPECT_EQ(2u, clear_metadata_set().count(kKey1));
166 EXPECT_EQ(1u, clear_metadata_set().count(kKey2));
167 }
168
169 TEST_F(PassthroughMetadataChangeListTest, Everything) {
170 mcl()->UpdateModelTypeState(ModelTypeState());
171 mcl()->ClearModelTypeState();
172 mcl()->UpdateMetadata(kKey1, EntityMetadata());
173 mcl()->ClearMetadata(kKey1);
174 EXPECT_EQ(1u, global_metadata_vector().size());
175 EXPECT_EQ(1, clear_global_metadata_count());
176 EXPECT_EQ(1u, update_metadata_map().size());
177 EXPECT_EQ(1u, clear_metadata_set().size());
178 }
179
180 } // namespace syncer
OLDNEW
« 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