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

Side by Side Diff: sync/internal_api/public/simple_metadata_change_list_unittest.cc

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

Powered by Google App Engine
This is Rietveld 408576698