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

Side by Side Diff: components/sync/model_impl/accumulating_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
1 // Copyright 2016 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/sync/model/simple_metadata_change_list.h" 5 #include "components/sync/model_impl/accumulating_metadata_change_list.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/run_loop.h" 10 #include "base/run_loop.h"
11 #include "components/sync/model/mock_model_type_store.h" 11 #include "components/sync/model/mock_model_type_store.h"
12 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
13 13
14 namespace syncer { 14 namespace syncer {
15 namespace { 15 namespace {
(...skipping 16 matching lines...) Expand all
32 void RecordMetadataDelete(std::set<std::string>* set, 32 void RecordMetadataDelete(std::set<std::string>* set,
33 WriteBatch* batch, 33 WriteBatch* batch,
34 const std::string& id) { 34 const std::string& id) {
35 set->insert(id); 35 set->insert(id);
36 } 36 }
37 37
38 void RecordGlobalMetadataDelete(bool* was_delete_called, WriteBatch* batch) { 38 void RecordGlobalMetadataDelete(bool* was_delete_called, WriteBatch* batch) {
39 *was_delete_called = true; 39 *was_delete_called = true;
40 } 40 }
41 41
42 class SimpleMetadataChangeListTest : public testing::Test { 42 class AccumulatingMetadataChangeListTest : public testing::Test {
43 protected: 43 protected:
44 SimpleMetadataChangeListTest() {} 44 AccumulatingMetadataChangeListTest() {}
45 45
46 MockModelTypeStore* store() { return &store_; } 46 MockModelTypeStore* store() { return &store_; }
47 47
48 private: 48 private:
49 // MockModelTypeStore needs MessageLoop 49 // MockModelTypeStore needs MessageLoop
50 base::MessageLoop message_loop_; 50 base::MessageLoop message_loop_;
51 51
52 MockModelTypeStore store_; 52 MockModelTypeStore store_;
53 }; 53 };
54 54
55 TEST_F(SimpleMetadataChangeListTest, TransferChangesEmptyChangeList) { 55 TEST_F(AccumulatingMetadataChangeListTest, TransferChangesEmptyChangeList) {
56 SimpleMetadataChangeList cl; 56 AccumulatingMetadataChangeList cl;
57 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); 57 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch();
58 58
59 std::map<std::string, std::string> change_map; 59 std::map<std::string, std::string> change_map;
60 std::set<std::string> delete_set; 60 std::set<std::string> delete_set;
61 std::string global_metadata; 61 std::string global_metadata;
62 store()->RegisterWriteMetadataHandler( 62 store()->RegisterWriteMetadataHandler(
63 base::Bind(&RecordMetadataWrite, &change_map)); 63 base::Bind(&RecordMetadataWrite, &change_map));
64 store()->RegisterWriteGlobalMetadataHandler( 64 store()->RegisterWriteGlobalMetadataHandler(
65 base::Bind(&RecordGlobalMetadataWrite, &global_metadata)); 65 base::Bind(&RecordGlobalMetadataWrite, &global_metadata));
66 store()->RegisterDeleteMetadataHandler( 66 store()->RegisterDeleteMetadataHandler(
67 base::Bind(&RecordMetadataDelete, &delete_set)); 67 base::Bind(&RecordMetadataDelete, &delete_set));
68 68
69 cl.TransferChanges(store(), batch.get()); 69 cl.TransferChanges(store(), batch.get());
70 70
71 EXPECT_EQ(change_map.size(), 0u); 71 EXPECT_EQ(change_map.size(), 0u);
72 EXPECT_EQ(delete_set.size(), 0u); 72 EXPECT_EQ(delete_set.size(), 0u);
73 EXPECT_EQ(global_metadata.size(), 0u); 73 EXPECT_EQ(global_metadata.size(), 0u);
74 } 74 }
75 75
76 TEST_F(SimpleMetadataChangeListTest, TransferChangesClearsLocalState) { 76 TEST_F(AccumulatingMetadataChangeListTest, TransferChangesClearsLocalState) {
77 SimpleMetadataChangeList cl; 77 AccumulatingMetadataChangeList cl;
78 sync_pb::EntityMetadata metadata; 78 sync_pb::EntityMetadata metadata;
79 metadata.set_client_tag_hash("some_hash"); 79 metadata.set_client_tag_hash("some_hash");
80 cl.UpdateMetadata("client_tag", metadata); 80 cl.UpdateMetadata("client_tag", metadata);
81 81
82 sync_pb::ModelTypeState state; 82 sync_pb::ModelTypeState state;
83 state.set_encryption_key_name("ekn"); 83 state.set_encryption_key_name("ekn");
84 cl.UpdateModelTypeState(state); 84 cl.UpdateModelTypeState(state);
85 85
86 EXPECT_NE(cl.GetMetadataChanges().size(), 0u); 86 std::map<std::string, std::string> change_map;
87 EXPECT_TRUE(cl.HasModelTypeStateChange()); 87 std::string global_metadata;
88 store()->RegisterWriteMetadataHandler(
89 base::Bind(&RecordMetadataWrite, &change_map));
90 store()->RegisterWriteGlobalMetadataHandler(
91 base::Bind(&RecordGlobalMetadataWrite, &global_metadata));
92
93 EXPECT_EQ(0U, change_map.size());
94 EXPECT_EQ("", global_metadata);
88 95
89 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); 96 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch();
90 cl.TransferChanges(store(), batch.get()); 97 cl.TransferChanges(store(), batch.get());
91 98
92 EXPECT_EQ(cl.GetMetadataChanges().size(), 0u); 99 EXPECT_EQ(1U, change_map.size());
93 EXPECT_FALSE(cl.HasModelTypeStateChange()); 100 EXPECT_NE("", global_metadata);
101
102 change_map.clear();
103 global_metadata = "";
104 cl.TransferChanges(store(), batch.get());
105
106 EXPECT_EQ(0U, change_map.size());
107 EXPECT_EQ("", global_metadata);
94 } 108 }
95 109
96 TEST_F(SimpleMetadataChangeListTest, TransferChangesMultipleInvocationsSafe) { 110 TEST_F(AccumulatingMetadataChangeListTest,
97 SimpleMetadataChangeList cl; 111 TransferChangesMultipleInvocationsSafe) {
112 AccumulatingMetadataChangeList cl;
98 sync_pb::EntityMetadata metadata; 113 sync_pb::EntityMetadata metadata;
99 metadata.set_client_tag_hash("some_hash"); 114 metadata.set_client_tag_hash("some_hash");
100 cl.UpdateMetadata("client_tag", metadata); 115 cl.UpdateMetadata("client_tag", metadata);
101 116
102 sync_pb::ModelTypeState state; 117 sync_pb::ModelTypeState state;
103 state.set_encryption_key_name("ekn"); 118 state.set_encryption_key_name("ekn");
104 cl.UpdateModelTypeState(state); 119 cl.UpdateModelTypeState(state);
105 120
106 std::string global_metadata; 121 std::string global_metadata;
107 std::map<std::string, std::string> change_map; 122 std::map<std::string, std::string> change_map;
108 store()->RegisterWriteMetadataHandler( 123 store()->RegisterWriteMetadataHandler(
109 base::Bind(&RecordMetadataWrite, &change_map)); 124 base::Bind(&RecordMetadataWrite, &change_map));
110 store()->RegisterWriteGlobalMetadataHandler( 125 store()->RegisterWriteGlobalMetadataHandler(
111 base::Bind(&RecordGlobalMetadataWrite, &global_metadata)); 126 base::Bind(&RecordGlobalMetadataWrite, &global_metadata));
112 127
113 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); 128 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch();
114 cl.TransferChanges(store(), batch.get()); 129 cl.TransferChanges(store(), batch.get());
115 cl.TransferChanges(store(), batch.get()); 130 cl.TransferChanges(store(), batch.get());
116 cl.TransferChanges(store(), batch.get()); 131 cl.TransferChanges(store(), batch.get());
117 132
118 EXPECT_EQ(state.SerializeAsString(), global_metadata); 133 EXPECT_EQ(state.SerializeAsString(), global_metadata);
119 EXPECT_EQ(metadata.SerializeAsString(), change_map["client_tag"]); 134 EXPECT_EQ(metadata.SerializeAsString(), change_map["client_tag"]);
120 } 135 }
121 136
122 TEST_F(SimpleMetadataChangeListTest, TransferChangesMultipleChanges) { 137 TEST_F(AccumulatingMetadataChangeListTest, TransferChangesMultipleChanges) {
123 SimpleMetadataChangeList cl; 138 AccumulatingMetadataChangeList cl;
124 139
125 sync_pb::EntityMetadata metadata; 140 sync_pb::EntityMetadata metadata;
126 metadata.set_client_tag_hash("some_hash"); 141 metadata.set_client_tag_hash("some_hash");
127 cl.UpdateMetadata("client_tag", metadata); 142 cl.UpdateMetadata("client_tag", metadata);
128 metadata.set_specifics_hash("specifics_hash"); 143 metadata.set_specifics_hash("specifics_hash");
129 cl.UpdateMetadata("client_tag", metadata); 144 cl.UpdateMetadata("client_tag", metadata);
130 145
131 sync_pb::EntityMetadata metadata2; 146 sync_pb::EntityMetadata metadata2;
132 metadata2.set_client_tag_hash("some_other_hash"); 147 metadata2.set_client_tag_hash("some_other_hash");
133 cl.UpdateMetadata("client_tag2", metadata2); 148 cl.UpdateMetadata("client_tag2", metadata2);
(...skipping 12 matching lines...) Expand all
146 base::Bind(&RecordMetadataWrite, &change_map)); 161 base::Bind(&RecordMetadataWrite, &change_map));
147 162
148 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch(); 163 std::unique_ptr<WriteBatch> batch = store()->CreateWriteBatch();
149 cl.TransferChanges(store(), batch.get()); 164 cl.TransferChanges(store(), batch.get());
150 165
151 EXPECT_EQ(metadata.SerializeAsString(), change_map["client_tag"]); 166 EXPECT_EQ(metadata.SerializeAsString(), change_map["client_tag"]);
152 EXPECT_EQ(metadata2.SerializeAsString(), change_map["client_tag2"]); 167 EXPECT_EQ(metadata2.SerializeAsString(), change_map["client_tag2"]);
153 EXPECT_EQ(state.SerializeAsString(), global_metadata); 168 EXPECT_EQ(state.SerializeAsString(), global_metadata);
154 } 169 }
155 170
156 TEST_F(SimpleMetadataChangeListTest, TransferChangesDeletesClearedItems) { 171 TEST_F(AccumulatingMetadataChangeListTest, TransferChangesDeletesClearedItems) {
157 SimpleMetadataChangeList cl; 172 AccumulatingMetadataChangeList cl;
158 sync_pb::EntityMetadata metadata; 173 sync_pb::EntityMetadata metadata;
159 metadata.set_client_tag_hash("some_hash"); 174 metadata.set_client_tag_hash("some_hash");
160 cl.UpdateMetadata("client_tag", metadata); 175 cl.UpdateMetadata("client_tag", metadata);
161 cl.ClearMetadata("client_tag"); 176 cl.ClearMetadata("client_tag");
162 177
163 sync_pb::ModelTypeState state; 178 sync_pb::ModelTypeState state;
164 state.set_encryption_key_name("ekn"); 179 state.set_encryption_key_name("ekn");
165 cl.UpdateModelTypeState(state); 180 cl.UpdateModelTypeState(state);
166 cl.ClearModelTypeState(); 181 cl.ClearModelTypeState();
167 182
(...skipping 14 matching lines...) Expand all
182 cl.TransferChanges(store(), batch.get()); 197 cl.TransferChanges(store(), batch.get());
183 198
184 EXPECT_TRUE(delete_set.find("client_tag") != delete_set.end()); 199 EXPECT_TRUE(delete_set.find("client_tag") != delete_set.end());
185 EXPECT_TRUE(change_map.find("client_tag") == change_map.end()); 200 EXPECT_TRUE(change_map.find("client_tag") == change_map.end());
186 EXPECT_TRUE(delete_called); 201 EXPECT_TRUE(delete_called);
187 EXPECT_TRUE(global_metadata.empty()); 202 EXPECT_TRUE(global_metadata.empty());
188 } 203 }
189 204
190 } // namespace 205 } // namespace
191 } // namespace syncer 206 } // namespace syncer
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698