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

Side by Side Diff: components/sync/model/simple_metadata_change_list_unittest.cc

Issue 2473553003: [Sync] Improve MetadataChangeList usage for types using ModelTypeStore. (Closed)
Patch Set: Fix comments + protected constructor. 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
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/simple_metadata_change_list.h"
6
7 #include <set>
8
9 #include "base/bind.h"
10 #include "base/run_loop.h"
11 #include "components/sync/model/mock_model_type_store.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13
14 namespace syncer {
15 namespace {
16
17 using WriteBatch = ModelTypeStore::WriteBatch;
18
19 void RecordMetadataWrite(std::map<std::string, std::string>* map,
20 WriteBatch* batch,
21 const std::string& key,
22 const std::string& value) {
23 (*map)[key] = value;
24 }
25
26 void RecordGlobalMetadataWrite(std::string* str,
27 WriteBatch* batch,
28 const std::string& value) {
29 *str = value;
30 }
31
32 void RecordMetadataDelete(std::set<std::string>* set,
33 WriteBatch* batch,
34 const std::string& id) {
35 set->insert(id);
36 }
37
38 void RecordGlobalMetadataDelete(bool* was_delete_called, WriteBatch* batch) {
39 *was_delete_called = true;
40 }
41
42 class SimpleMetadataChangeListTest : public testing::Test {
43 protected:
44 SimpleMetadataChangeListTest() {}
45
46 MockModelTypeStore* store() { return &store_; }
47
48 private:
49 // MockModelTypeStore needs MessageLoop
50 base::MessageLoop message_loop_;
51
52 MockModelTypeStore store_;
53 };
54
55 TEST_F(SimpleMetadataChangeListTest, TransferChangesEmptyChangeList) {
56 SimpleMetadataChangeList cl;
57 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch();
58
59 std::map<std::string, std::string> change_map;
60 std::set<std::string> delete_set;
61 std::string global_metadata;
62 store()->RegisterWriteMetadataHandler(
63 base::Bind(&RecordMetadataWrite, &change_map));
64 store()->RegisterWriteGlobalMetadataHandler(
65 base::Bind(&RecordGlobalMetadataWrite, &global_metadata));
66 store()->RegisterDeleteMetadataHandler(
67 base::Bind(&RecordMetadataDelete, &delete_set));
68
69 cl.TransferChanges(store(), batch.get());
70
71 EXPECT_EQ(change_map.size(), 0u);
72 EXPECT_EQ(delete_set.size(), 0u);
73 EXPECT_EQ(global_metadata.size(), 0u);
74 }
75
76 TEST_F(SimpleMetadataChangeListTest, TransferChangesClearsLocalState) {
77 SimpleMetadataChangeList cl;
78 sync_pb::EntityMetadata metadata;
79 metadata.set_client_tag_hash("some_hash");
80 cl.UpdateMetadata("client_tag", metadata);
81
82 sync_pb::ModelTypeState state;
83 state.set_encryption_key_name("ekn");
84 cl.UpdateModelTypeState(state);
85
86 EXPECT_NE(cl.GetMetadataChanges().size(), 0u);
87 EXPECT_TRUE(cl.HasModelTypeStateChange());
88
89 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch();
90 cl.TransferChanges(store(), batch.get());
91
92 EXPECT_EQ(cl.GetMetadataChanges().size(), 0u);
93 EXPECT_FALSE(cl.HasModelTypeStateChange());
94 }
95
96 TEST_F(SimpleMetadataChangeListTest, TransferChangesMultipleInvocationsSafe) {
97 SimpleMetadataChangeList cl;
98 sync_pb::EntityMetadata metadata;
99 metadata.set_client_tag_hash("some_hash");
100 cl.UpdateMetadata("client_tag", metadata);
101
102 sync_pb::ModelTypeState state;
103 state.set_encryption_key_name("ekn");
104 cl.UpdateModelTypeState(state);
105
106 std::string global_metadata;
107 std::map<std::string, std::string> change_map;
108 store()->RegisterWriteMetadataHandler(
109 base::Bind(&RecordMetadataWrite, &change_map));
110 store()->RegisterWriteGlobalMetadataHandler(
111 base::Bind(&RecordGlobalMetadataWrite, &global_metadata));
112
113 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch();
114 cl.TransferChanges(store(), batch.get());
115 cl.TransferChanges(store(), batch.get());
116 cl.TransferChanges(store(), batch.get());
117
118 EXPECT_EQ(state.SerializeAsString(), global_metadata);
119 EXPECT_EQ(metadata.SerializeAsString(), change_map["client_tag"]);
120 }
121
122 TEST_F(SimpleMetadataChangeListTest, TransferChangesMultipleChanges) {
123 SimpleMetadataChangeList cl;
124
125 sync_pb::EntityMetadata metadata;
126 metadata.set_client_tag_hash("some_hash");
127 cl.UpdateMetadata("client_tag", metadata);
128 metadata.set_specifics_hash("specifics_hash");
129 cl.UpdateMetadata("client_tag", metadata);
130
131 sync_pb::EntityMetadata metadata2;
132 metadata2.set_client_tag_hash("some_other_hash");
133 cl.UpdateMetadata("client_tag2", metadata2);
134
135 sync_pb::ModelTypeState state;
136 state.set_encryption_key_name("ekn");
137 cl.UpdateModelTypeState(state);
138 state.set_encryption_key_name("ekn2");
139 cl.UpdateModelTypeState(state);
140
141 std::string global_metadata;
142 std::map<std::string, std::string> change_map;
143 store()->RegisterWriteGlobalMetadataHandler(
144 base::Bind(&RecordGlobalMetadataWrite, &global_metadata));
145 store()->RegisterWriteMetadataHandler(
146 base::Bind(&RecordMetadataWrite, &change_map));
147
148 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch();
149 cl.TransferChanges(store(), batch.get());
150
151 EXPECT_EQ(metadata.SerializeAsString(), change_map["client_tag"]);
152 EXPECT_EQ(metadata2.SerializeAsString(), change_map["client_tag2"]);
153 EXPECT_EQ(state.SerializeAsString(), global_metadata);
154 }
155
156 TEST_F(SimpleMetadataChangeListTest, TransferChangesDeletesClearedItems) {
157 SimpleMetadataChangeList cl;
158 sync_pb::EntityMetadata metadata;
159 metadata.set_client_tag_hash("some_hash");
160 cl.UpdateMetadata("client_tag", metadata);
161 cl.ClearMetadata("client_tag");
162
163 sync_pb::ModelTypeState state;
164 state.set_encryption_key_name("ekn");
165 cl.UpdateModelTypeState(state);
166 cl.ClearModelTypeState();
167
168 std::map<std::string, std::string> change_map;
169 std::set<std::string> delete_set;
170 std::string global_metadata;
171 bool delete_called = false;
172 store()->RegisterWriteMetadataHandler(
173 base::Bind(&RecordMetadataWrite, &change_map));
174 store()->RegisterWriteGlobalMetadataHandler(
175 base::Bind(&RecordGlobalMetadataWrite, &global_metadata));
176 store()->RegisterDeleteMetadataHandler(
177 base::Bind(&RecordMetadataDelete, &delete_set));
178 store()->RegisterDeleteGlobalMetadataHandler(
179 base::Bind(&RecordGlobalMetadataDelete, &delete_called));
180
181 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch();
182 cl.TransferChanges(store(), batch.get());
183
184 EXPECT_TRUE(delete_set.find("client_tag") != delete_set.end());
185 EXPECT_TRUE(change_map.find("client_tag") == change_map.end());
186 EXPECT_TRUE(delete_called);
187 EXPECT_TRUE(global_metadata.empty());
188 }
189
190 } // namespace
191 } // namespace syncer
OLDNEW
« no previous file with comments | « components/sync/model/simple_metadata_change_list.cc ('k') | components/sync/model_impl/accumulating_metadata_change_list.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698