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

Side by Side Diff: sync/internal_api/processor_entity_tracker_unittest.cc

Issue 1866243002: Convert //sync from scoped_ptr to std::unique_ptr (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "sync/internal_api/public/processor_entity_tracker.h" 5 #include "sync/internal_api/public/processor_entity_tracker.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8
9 #include <memory>
8 #include <utility> 10 #include <utility>
9 11
10 #include "base/memory/scoped_ptr.h" 12 #include "base/memory/ptr_util.h"
11 #include "base/time/time.h" 13 #include "base/time/time.h"
12 #include "sync/internal_api/public/base/model_type.h" 14 #include "sync/internal_api/public/base/model_type.h"
13 #include "sync/internal_api/public/non_blocking_sync_common.h" 15 #include "sync/internal_api/public/non_blocking_sync_common.h"
14 #include "sync/protocol/sync.pb.h" 16 #include "sync/protocol/sync.pb.h"
15 #include "sync/syncable/syncable_util.h" 17 #include "sync/syncable/syncable_util.h"
16 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
17 19
18 namespace syncer_v2 { 20 namespace syncer_v2 {
19 21
20 // Some simple sanity tests for the ProcessorEntityTracker. 22 // Some simple sanity tests for the ProcessorEntityTracker.
(...skipping 16 matching lines...) Expand all
37 sync_pb::PreferenceSpecifics* pref_specifics = 39 sync_pb::PreferenceSpecifics* pref_specifics =
38 specifics.mutable_preference(); 40 specifics.mutable_preference();
39 pref_specifics->set_name(kClientTag); 41 pref_specifics->set_name(kClientTag);
40 pref_specifics->set_value("pref.value"); 42 pref_specifics->set_value("pref.value");
41 } 43 }
42 44
43 static std::string GetSyncableHash(const std::string& tag) { 45 static std::string GetSyncableHash(const std::string& tag) {
44 return syncer::syncable::GenerateSyncableHash(syncer::PREFERENCES, tag); 46 return syncer::syncable::GenerateSyncableHash(syncer::PREFERENCES, tag);
45 } 47 }
46 48
47 scoped_ptr<ProcessorEntityTracker> NewLocalItem(const std::string& tag) { 49 std::unique_ptr<ProcessorEntityTracker> NewLocalItem(const std::string& tag) {
48 return scoped_ptr<ProcessorEntityTracker>(ProcessorEntityTracker::CreateNew( 50 return std::unique_ptr<ProcessorEntityTracker>(
49 tag, GetSyncableHash(tag), "", kCtime)); 51 ProcessorEntityTracker::CreateNew(tag, GetSyncableHash(tag), "",
52 kCtime));
50 } 53 }
51 54
52 scoped_ptr<ProcessorEntityTracker> NewLocalItem( 55 std::unique_ptr<ProcessorEntityTracker> NewLocalItem(
53 const std::string& tag, 56 const std::string& tag,
54 const sync_pb::EntitySpecifics& specifics) { 57 const sync_pb::EntitySpecifics& specifics) {
55 scoped_ptr<ProcessorEntityTracker> entity(NewLocalItem(tag)); 58 std::unique_ptr<ProcessorEntityTracker> entity(NewLocalItem(tag));
56 MakeLocalChange(entity.get(), specifics); 59 MakeLocalChange(entity.get(), specifics);
57 return entity; 60 return entity;
58 } 61 }
59 62
60 void MakeLocalChange(ProcessorEntityTracker* entity, 63 void MakeLocalChange(ProcessorEntityTracker* entity,
61 const sync_pb::EntitySpecifics& specifics) { 64 const sync_pb::EntitySpecifics& specifics) {
62 scoped_ptr<EntityData> entity_data = make_scoped_ptr(new EntityData()); 65 std::unique_ptr<EntityData> entity_data =
66 base::WrapUnique(new EntityData());
63 entity_data->client_tag_hash = entity->metadata().client_tag_hash(); 67 entity_data->client_tag_hash = entity->metadata().client_tag_hash();
64 entity_data->specifics = specifics; 68 entity_data->specifics = specifics;
65 entity_data->non_unique_name = "foo"; 69 entity_data->non_unique_name = "foo";
66 entity_data->modification_time = kMtime; 70 entity_data->modification_time = kMtime;
67 entity->MakeLocalChange(std::move(entity_data)); 71 entity->MakeLocalChange(std::move(entity_data));
68 } 72 }
69 73
70 scoped_ptr<ProcessorEntityTracker> NewServerItem() { 74 std::unique_ptr<ProcessorEntityTracker> NewServerItem() {
71 return scoped_ptr<ProcessorEntityTracker>(ProcessorEntityTracker::CreateNew( 75 return std::unique_ptr<ProcessorEntityTracker>(
72 kClientTag, kClientTagHash, kServerId, kCtime)); 76 ProcessorEntityTracker::CreateNew(kClientTag, kClientTagHash, kServerId,
77 kCtime));
73 } 78 }
74 79
75 scoped_ptr<ProcessorEntityTracker> NewServerItem( 80 std::unique_ptr<ProcessorEntityTracker> NewServerItem(
76 int64_t version, 81 int64_t version,
77 const sync_pb::EntitySpecifics& specifics) { 82 const sync_pb::EntitySpecifics& specifics) {
78 scoped_ptr<ProcessorEntityTracker> entity(NewServerItem()); 83 std::unique_ptr<ProcessorEntityTracker> entity(NewServerItem());
79 RecordAcceptedUpdate(entity.get(), version, specifics); 84 RecordAcceptedUpdate(entity.get(), version, specifics);
80 return entity; 85 return entity;
81 } 86 }
82 87
83 void RecordAcceptedUpdate(ProcessorEntityTracker* entity, 88 void RecordAcceptedUpdate(ProcessorEntityTracker* entity,
84 int64_t version, 89 int64_t version,
85 const sync_pb::EntitySpecifics& specifics) { 90 const sync_pb::EntitySpecifics& specifics) {
86 RecordAcceptedUpdate(entity, version, specifics, kMtime); 91 RecordAcceptedUpdate(entity, version, specifics, kMtime);
87 } 92 }
88 93
89 void RecordAcceptedUpdate(ProcessorEntityTracker* entity, 94 void RecordAcceptedUpdate(ProcessorEntityTracker* entity,
90 int64_t version, 95 int64_t version,
91 const sync_pb::EntitySpecifics& specifics, 96 const sync_pb::EntitySpecifics& specifics,
92 base::Time mtime) { 97 base::Time mtime) {
93 EntityData data; 98 EntityData data;
94 data.id = entity->metadata().server_id(); 99 data.id = entity->metadata().server_id();
95 data.client_tag_hash = entity->metadata().client_tag_hash(); 100 data.client_tag_hash = entity->metadata().client_tag_hash();
96 data.modification_time = mtime; 101 data.modification_time = mtime;
97 data.specifics = specifics; 102 data.specifics = specifics;
98 103
99 UpdateResponseData response_data; 104 UpdateResponseData response_data;
100 response_data.response_version = version; 105 response_data.response_version = version;
101 response_data.entity = data.PassToPtr(); 106 response_data.entity = data.PassToPtr();
102 107
103 entity->RecordAcceptedUpdate(response_data); 108 entity->RecordAcceptedUpdate(response_data);
104 } 109 }
105 110
106 bool HasSpecificsHash( 111 bool HasSpecificsHash(
107 const scoped_ptr<ProcessorEntityTracker>& entity) const { 112 const std::unique_ptr<ProcessorEntityTracker>& entity) const {
108 return !entity->metadata().specifics_hash().empty(); 113 return !entity->metadata().specifics_hash().empty();
109 } 114 }
110 115
111 const std::string kServerId; 116 const std::string kServerId;
112 const std::string kClientTag; 117 const std::string kClientTag;
113 const std::string kClientTagHash; 118 const std::string kClientTagHash;
114 const base::Time kCtime; 119 const base::Time kCtime;
115 const base::Time kMtime; 120 const base::Time kMtime;
116 sync_pb::EntitySpecifics specifics; 121 sync_pb::EntitySpecifics specifics;
117 }; 122 };
118 123
119 TEST_F(ProcessorEntityTrackerTest, NewItem) { 124 TEST_F(ProcessorEntityTrackerTest, NewItem) {
120 scoped_ptr<ProcessorEntityTracker> entity(NewLocalItem("asdf")); 125 std::unique_ptr<ProcessorEntityTracker> entity(NewLocalItem("asdf"));
121 126
122 EXPECT_EQ(entity->client_tag(), "asdf"); 127 EXPECT_EQ(entity->client_tag(), "asdf");
123 EXPECT_EQ(entity->metadata().client_tag_hash(), GetSyncableHash("asdf")); 128 EXPECT_EQ(entity->metadata().client_tag_hash(), GetSyncableHash("asdf"));
124 129
125 EXPECT_FALSE(entity->HasCommitData()); 130 EXPECT_FALSE(entity->HasCommitData());
126 EXPECT_FALSE(HasSpecificsHash(entity)); 131 EXPECT_FALSE(HasSpecificsHash(entity));
127 132
128 EXPECT_FALSE(entity->IsUnsynced()); 133 EXPECT_FALSE(entity->IsUnsynced());
129 EXPECT_FALSE(entity->UpdateIsReflection(1)); 134 EXPECT_FALSE(entity->UpdateIsReflection(1));
130 } 135 }
131 136
132 TEST_F(ProcessorEntityTrackerTest, NewLocalItem) { 137 TEST_F(ProcessorEntityTrackerTest, NewLocalItem) {
133 scoped_ptr<ProcessorEntityTracker> entity(NewLocalItem("asdf", specifics)); 138 std::unique_ptr<ProcessorEntityTracker> entity(
139 NewLocalItem("asdf", specifics));
134 140
135 EXPECT_EQ(1, entity->metadata().sequence_number()); 141 EXPECT_EQ(1, entity->metadata().sequence_number());
136 EXPECT_TRUE(entity->HasCommitData()); 142 EXPECT_TRUE(entity->HasCommitData());
137 EXPECT_TRUE(HasSpecificsHash(entity)); 143 EXPECT_TRUE(HasSpecificsHash(entity));
138 EXPECT_TRUE(entity->IsUnsynced()); 144 EXPECT_TRUE(entity->IsUnsynced());
139 EXPECT_FALSE(entity->UpdateIsReflection(1)); 145 EXPECT_FALSE(entity->UpdateIsReflection(1));
140 146
141 entity->ReceiveCommitResponse("id", 1, 1, ""); 147 entity->ReceiveCommitResponse("id", 1, 1, "");
142 148
143 EXPECT_FALSE(entity->HasCommitData()); 149 EXPECT_FALSE(entity->HasCommitData());
144 EXPECT_TRUE(HasSpecificsHash(entity)); 150 EXPECT_TRUE(HasSpecificsHash(entity));
145 EXPECT_FALSE(entity->IsUnsynced()); 151 EXPECT_FALSE(entity->IsUnsynced());
146 EXPECT_TRUE(entity->UpdateIsReflection(1)); 152 EXPECT_TRUE(entity->UpdateIsReflection(1));
147 } 153 }
148 154
149 TEST_F(ProcessorEntityTrackerTest, FromServerUpdate) { 155 TEST_F(ProcessorEntityTrackerTest, FromServerUpdate) {
150 scoped_ptr<ProcessorEntityTracker> entity(NewServerItem()); 156 std::unique_ptr<ProcessorEntityTracker> entity(NewServerItem());
151 157
152 EXPECT_EQ(entity->client_tag(), kClientTag); 158 EXPECT_EQ(entity->client_tag(), kClientTag);
153 EXPECT_EQ(entity->metadata().client_tag_hash(), kClientTagHash); 159 EXPECT_EQ(entity->metadata().client_tag_hash(), kClientTagHash);
154 EXPECT_FALSE(HasSpecificsHash(entity)); 160 EXPECT_FALSE(HasSpecificsHash(entity));
155 161
156 RecordAcceptedUpdate(entity.get(), 10, specifics); 162 RecordAcceptedUpdate(entity.get(), 10, specifics);
157 163
158 // No data cached but the specifics hash should be updated. 164 // No data cached but the specifics hash should be updated.
159 EXPECT_FALSE(entity->HasCommitData()); 165 EXPECT_FALSE(entity->HasCommitData());
160 EXPECT_TRUE(HasSpecificsHash(entity)); 166 EXPECT_TRUE(HasSpecificsHash(entity));
161 EXPECT_FALSE(entity->IsUnsynced()); 167 EXPECT_FALSE(entity->IsUnsynced());
162 EXPECT_TRUE(entity->UpdateIsReflection(9)); 168 EXPECT_TRUE(entity->UpdateIsReflection(9));
163 EXPECT_TRUE(entity->UpdateIsReflection(10)); 169 EXPECT_TRUE(entity->UpdateIsReflection(10));
164 EXPECT_FALSE(entity->UpdateIsReflection(11)); 170 EXPECT_FALSE(entity->UpdateIsReflection(11));
165 } 171 }
166 172
167 // Tombstones should behave just like regular updates. Mostly. The strangest 173 // Tombstones should behave just like regular updates. Mostly. The strangest
168 // thing about them is that they don't have specifics, so it can be hard to 174 // thing about them is that they don't have specifics, so it can be hard to
169 // detect their type. Fortunately, this class doesn't care about types in 175 // detect their type. Fortunately, this class doesn't care about types in
170 // received updates. 176 // received updates.
171 TEST_F(ProcessorEntityTrackerTest, TombstoneUpdate) { 177 TEST_F(ProcessorEntityTrackerTest, TombstoneUpdate) {
172 // Empty EntitySpecifics indicates tombstone update. 178 // Empty EntitySpecifics indicates tombstone update.
173 scoped_ptr<ProcessorEntityTracker> entity( 179 std::unique_ptr<ProcessorEntityTracker> entity(
174 NewServerItem(10, sync_pb::EntitySpecifics())); 180 NewServerItem(10, sync_pb::EntitySpecifics()));
175 181
176 EXPECT_EQ(kClientTagHash, entity->metadata().client_tag_hash()); 182 EXPECT_EQ(kClientTagHash, entity->metadata().client_tag_hash());
177 EXPECT_FALSE(entity->HasCommitData()); 183 EXPECT_FALSE(entity->HasCommitData());
178 EXPECT_FALSE(HasSpecificsHash(entity)); 184 EXPECT_FALSE(HasSpecificsHash(entity));
179 EXPECT_FALSE(entity->IsUnsynced()); 185 EXPECT_FALSE(entity->IsUnsynced());
180 EXPECT_TRUE(entity->UpdateIsReflection(9)); 186 EXPECT_TRUE(entity->UpdateIsReflection(9));
181 EXPECT_TRUE(entity->UpdateIsReflection(10)); 187 EXPECT_TRUE(entity->UpdateIsReflection(10));
182 EXPECT_FALSE(entity->UpdateIsReflection(11)); 188 EXPECT_FALSE(entity->UpdateIsReflection(11));
183 } 189 }
184 190
185 // Apply a deletion update. 191 // Apply a deletion update.
186 TEST_F(ProcessorEntityTrackerTest, ApplyUpdate) { 192 TEST_F(ProcessorEntityTrackerTest, ApplyUpdate) {
187 // Start with a non-deleted state with version 10. 193 // Start with a non-deleted state with version 10.
188 scoped_ptr<ProcessorEntityTracker> entity(NewServerItem(10, specifics)); 194 std::unique_ptr<ProcessorEntityTracker> entity(NewServerItem(10, specifics));
189 195
190 EXPECT_TRUE(HasSpecificsHash(entity)); 196 EXPECT_TRUE(HasSpecificsHash(entity));
191 197
192 // A deletion update one version later. 198 // A deletion update one version later.
193 RecordAcceptedUpdate(entity.get(), 11, sync_pb::EntitySpecifics(), 199 RecordAcceptedUpdate(entity.get(), 11, sync_pb::EntitySpecifics(),
194 kMtime + base::TimeDelta::FromSeconds(10)); 200 kMtime + base::TimeDelta::FromSeconds(10));
195 201
196 EXPECT_FALSE(HasSpecificsHash(entity)); 202 EXPECT_FALSE(HasSpecificsHash(entity));
197 EXPECT_FALSE(entity->IsUnsynced()); 203 EXPECT_FALSE(entity->IsUnsynced());
198 EXPECT_TRUE(entity->UpdateIsReflection(11)); 204 EXPECT_TRUE(entity->UpdateIsReflection(11));
199 EXPECT_FALSE(entity->UpdateIsReflection(12)); 205 EXPECT_FALSE(entity->UpdateIsReflection(12));
200 } 206 }
201 207
202 TEST_F(ProcessorEntityTrackerTest, LocalChange) { 208 TEST_F(ProcessorEntityTrackerTest, LocalChange) {
203 // Start with a non-deleted state with version 10. 209 // Start with a non-deleted state with version 10.
204 scoped_ptr<ProcessorEntityTracker> entity(NewServerItem(10, specifics)); 210 std::unique_ptr<ProcessorEntityTracker> entity(NewServerItem(10, specifics));
205 211
206 std::string specifics_hash = entity->metadata().specifics_hash(); 212 std::string specifics_hash = entity->metadata().specifics_hash();
207 213
208 // Make a local change with different specifics. 214 // Make a local change with different specifics.
209 sync_pb::EntitySpecifics specifics2; 215 sync_pb::EntitySpecifics specifics2;
210 specifics2.CopyFrom(specifics); 216 specifics2.CopyFrom(specifics);
211 specifics2.mutable_preference()->set_value("new.pref.value"); 217 specifics2.mutable_preference()->set_value("new.pref.value");
212 MakeLocalChange(entity.get(), specifics2); 218 MakeLocalChange(entity.get(), specifics2);
213 219
214 EXPECT_NE(entity->metadata().specifics_hash(), specifics_hash); 220 EXPECT_NE(entity->metadata().specifics_hash(), specifics_hash);
215 EXPECT_TRUE(entity->HasCommitData()); 221 EXPECT_TRUE(entity->HasCommitData());
216 EXPECT_TRUE(entity->IsUnsynced()); 222 EXPECT_TRUE(entity->IsUnsynced());
217 EXPECT_TRUE(entity->UpdateIsReflection(10)); 223 EXPECT_TRUE(entity->UpdateIsReflection(10));
218 EXPECT_FALSE(entity->UpdateIsReflection(11)); 224 EXPECT_FALSE(entity->UpdateIsReflection(11));
219 } 225 }
220 226
221 TEST_F(ProcessorEntityTrackerTest, LocalDeletion) { 227 TEST_F(ProcessorEntityTrackerTest, LocalDeletion) {
222 // Start with a non-deleted state with version 10. 228 // Start with a non-deleted state with version 10.
223 scoped_ptr<ProcessorEntityTracker> entity(NewServerItem(10, specifics)); 229 std::unique_ptr<ProcessorEntityTracker> entity(NewServerItem(10, specifics));
224 EXPECT_TRUE(HasSpecificsHash(entity)); 230 EXPECT_TRUE(HasSpecificsHash(entity));
225 231
226 // Make a local delete. 232 // Make a local delete.
227 entity->Delete(); 233 entity->Delete();
228 234
229 EXPECT_FALSE(HasSpecificsHash(entity)); 235 EXPECT_FALSE(HasSpecificsHash(entity));
230 EXPECT_FALSE(entity->HasCommitData()); 236 EXPECT_FALSE(entity->HasCommitData());
231 EXPECT_FALSE(entity->RequiresCommitData()); 237 EXPECT_FALSE(entity->RequiresCommitData());
232 EXPECT_TRUE(entity->IsUnsynced()); 238 EXPECT_TRUE(entity->IsUnsynced());
233 EXPECT_TRUE(entity->UpdateIsReflection(10)); 239 EXPECT_TRUE(entity->UpdateIsReflection(10));
234 EXPECT_FALSE(entity->UpdateIsReflection(11)); 240 EXPECT_FALSE(entity->UpdateIsReflection(11));
235 } 241 }
236 242
237 // Verify generation of CommitRequestData from ProcessorEntityTracker. 243 // Verify generation of CommitRequestData from ProcessorEntityTracker.
238 // Verify that the sequence number increments on local changes. 244 // Verify that the sequence number increments on local changes.
239 TEST_F(ProcessorEntityTrackerTest, InitializeCommitRequestData) { 245 TEST_F(ProcessorEntityTrackerTest, InitializeCommitRequestData) {
240 scoped_ptr<ProcessorEntityTracker> entity(NewLocalItem(kClientTag)); 246 std::unique_ptr<ProcessorEntityTracker> entity(NewLocalItem(kClientTag));
241 MakeLocalChange(entity.get(), specifics); 247 MakeLocalChange(entity.get(), specifics);
242 248
243 CommitRequestData commit_request; 249 CommitRequestData commit_request;
244 entity->InitializeCommitRequestData(&commit_request); 250 entity->InitializeCommitRequestData(&commit_request);
245 251
246 EXPECT_EQ(1, commit_request.sequence_number); 252 EXPECT_EQ(1, commit_request.sequence_number);
247 EXPECT_EQ(kUncommittedVersion, commit_request.base_version); 253 EXPECT_EQ(kUncommittedVersion, commit_request.base_version);
248 254
249 const EntityData& data = commit_request.entity.value(); 255 const EntityData& data = commit_request.entity.value();
250 EXPECT_EQ(entity->metadata().client_tag_hash(), data.client_tag_hash); 256 EXPECT_EQ(entity->metadata().client_tag_hash(), data.client_tag_hash);
(...skipping 16 matching lines...) Expand all
267 entity->Delete(); 273 entity->Delete();
268 274
269 entity->InitializeCommitRequestData(&commit_request); 275 entity->InitializeCommitRequestData(&commit_request);
270 const EntityData& data3 = commit_request.entity.value(); 276 const EntityData& data3 = commit_request.entity.value();
271 277
272 EXPECT_EQ(3, commit_request.sequence_number); 278 EXPECT_EQ(3, commit_request.sequence_number);
273 EXPECT_TRUE(data3.is_deleted()); 279 EXPECT_TRUE(data3.is_deleted());
274 } 280 }
275 281
276 } // namespace syncer_v2 282 } // namespace syncer_v2
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698