OLD | NEW |
1 | 1 |
2 // Copyright 2014 The Chromium Authors. All rights reserved. | 2 // Copyright 2014 The Chromium Authors. All rights reserved. |
3 // Use of this source code is governed by a BSD-style license that can be | 3 // Use of this source code is governed by a BSD-style license that can be |
4 // found in the LICENSE file. | 4 // found in the LICENSE file. |
5 | 5 |
6 #include "components/sync/engine_impl/worker_entity_tracker.h" | 6 #include "components/sync/engine_impl/worker_entity_tracker.h" |
7 | 7 |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <memory> | 10 #include <memory> |
(...skipping 19 matching lines...) Expand all Loading... |
30 public: | 30 public: |
31 WorkerEntityTrackerTest() | 31 WorkerEntityTrackerTest() |
32 : kServerId("ServerID"), | 32 : kServerId("ServerID"), |
33 kClientTag("some.sample.tag"), | 33 kClientTag("some.sample.tag"), |
34 kClientTagHash( | 34 kClientTagHash( |
35 syncer::syncable::GenerateSyncableHash(syncer::PREFERENCES, | 35 syncer::syncable::GenerateSyncableHash(syncer::PREFERENCES, |
36 kClientTag)), | 36 kClientTag)), |
37 kSpecificsHash("somehash"), | 37 kSpecificsHash("somehash"), |
38 kCtime(base::Time::UnixEpoch() + base::TimeDelta::FromDays(10)), | 38 kCtime(base::Time::UnixEpoch() + base::TimeDelta::FromDays(10)), |
39 kMtime(base::Time::UnixEpoch() + base::TimeDelta::FromDays(20)), | 39 kMtime(base::Time::UnixEpoch() + base::TimeDelta::FromDays(20)), |
40 entity_(new WorkerEntityTracker(kServerId, kClientTagHash)) { | 40 entity_(new WorkerEntityTracker("", kClientTagHash)) { |
41 specifics.mutable_preference()->set_name(kClientTag); | 41 specifics.mutable_preference()->set_name(kClientTag); |
42 specifics.mutable_preference()->set_value("pref.value"); | 42 specifics.mutable_preference()->set_value("pref.value"); |
43 } | 43 } |
44 | 44 |
45 ~WorkerEntityTrackerTest() override {} | 45 ~WorkerEntityTrackerTest() override {} |
46 | 46 |
47 CommitRequestData MakeCommitRequestData(int64_t sequence_number, | 47 CommitRequestData MakeCommitRequestData(int64_t sequence_number, |
48 int64_t base_version) { | 48 int64_t base_version) { |
49 EntityData data; | 49 EntityData data; |
50 data.id = kServerId; | 50 data.id = kServerId; |
(...skipping 28 matching lines...) Expand all Loading... |
79 const std::string kSpecificsHash; | 79 const std::string kSpecificsHash; |
80 const base::Time kCtime; | 80 const base::Time kCtime; |
81 const base::Time kMtime; | 81 const base::Time kMtime; |
82 sync_pb::EntitySpecifics specifics; | 82 sync_pb::EntitySpecifics specifics; |
83 std::unique_ptr<WorkerEntityTracker> entity_; | 83 std::unique_ptr<WorkerEntityTracker> entity_; |
84 }; | 84 }; |
85 | 85 |
86 // Construct a new entity from a server update. Then receive another update. | 86 // Construct a new entity from a server update. Then receive another update. |
87 TEST_F(WorkerEntityTrackerTest, FromUpdateResponse) { | 87 TEST_F(WorkerEntityTrackerTest, FromUpdateResponse) { |
88 EXPECT_FALSE(entity_->HasPendingCommit()); | 88 EXPECT_FALSE(entity_->HasPendingCommit()); |
89 entity_->ReceiveUpdate(20); | 89 EXPECT_EQ("", entity_->id()); |
| 90 entity_->ReceiveUpdate(MakeUpdateResponseData(20)); |
90 EXPECT_FALSE(entity_->HasPendingCommit()); | 91 EXPECT_FALSE(entity_->HasPendingCommit()); |
| 92 EXPECT_EQ(kServerId, entity_->id()); |
91 } | 93 } |
92 | 94 |
93 // Construct a new entity from a commit request. Then serialize it. | 95 // Construct a new entity from a commit request. Then serialize it. |
94 TEST_F(WorkerEntityTrackerTest, FromCommitRequest) { | 96 TEST_F(WorkerEntityTrackerTest, FromCommitRequest) { |
95 const int64_t kSequenceNumber = 22; | 97 const int64_t kSequenceNumber = 22; |
96 const int64_t kBaseVersion = 33; | 98 const int64_t kBaseVersion = 33; |
97 CommitRequestData data = MakeCommitRequestData(kSequenceNumber, kBaseVersion); | 99 CommitRequestData data = MakeCommitRequestData(kSequenceNumber, kBaseVersion); |
98 entity_->RequestCommit(data); | 100 entity_->RequestCommit(data); |
| 101 EXPECT_EQ("", entity_->id()); |
99 | 102 |
100 ASSERT_TRUE(entity_->HasPendingCommit()); | 103 ASSERT_TRUE(entity_->HasPendingCommit()); |
101 sync_pb::SyncEntity pb_entity; | 104 sync_pb::SyncEntity pb_entity; |
102 entity_->PopulateCommitProto(&pb_entity); | 105 entity_->PopulateCommitProto(&pb_entity); |
103 EXPECT_EQ(kServerId, pb_entity.id_string()); | 106 EXPECT_EQ("", pb_entity.id_string()); |
104 EXPECT_EQ(kClientTagHash, pb_entity.client_defined_unique_tag()); | 107 EXPECT_EQ(kClientTagHash, pb_entity.client_defined_unique_tag()); |
105 EXPECT_EQ(kBaseVersion, pb_entity.version()); | 108 EXPECT_EQ(kBaseVersion, pb_entity.version()); |
106 EXPECT_EQ(kCtime, syncer::ProtoTimeToTime(pb_entity.ctime())); | 109 EXPECT_EQ(kCtime, syncer::ProtoTimeToTime(pb_entity.ctime())); |
107 EXPECT_EQ(kMtime, syncer::ProtoTimeToTime(pb_entity.mtime())); | 110 EXPECT_EQ(kMtime, syncer::ProtoTimeToTime(pb_entity.mtime())); |
108 EXPECT_FALSE(pb_entity.deleted()); | 111 EXPECT_FALSE(pb_entity.deleted()); |
109 EXPECT_EQ(specifics.preference().name(), | 112 EXPECT_EQ(specifics.preference().name(), |
110 pb_entity.specifics().preference().name()); | 113 pb_entity.specifics().preference().name()); |
111 EXPECT_EQ(specifics.preference().value(), | 114 EXPECT_EQ(specifics.preference().value(), |
112 pb_entity.specifics().preference().value()); | 115 pb_entity.specifics().preference().value()); |
113 | 116 |
114 CommitResponseData ack; | 117 CommitResponseData ack; |
115 ack.response_version = kBaseVersion + 1; | 118 ack.response_version = kBaseVersion + 1; |
116 ack.id = kServerId; | 119 ack.id = kServerId; |
117 entity_->ReceiveCommitResponse(&ack); | 120 entity_->ReceiveCommitResponse(&ack); |
118 | 121 |
119 EXPECT_EQ(kSequenceNumber, ack.sequence_number); | 122 EXPECT_EQ(kSequenceNumber, ack.sequence_number); |
120 EXPECT_EQ(kSpecificsHash, ack.specifics_hash); | 123 EXPECT_EQ(kSpecificsHash, ack.specifics_hash); |
121 EXPECT_FALSE(entity_->HasPendingCommit()); | 124 EXPECT_FALSE(entity_->HasPendingCommit()); |
| 125 |
| 126 EXPECT_EQ(kServerId, entity_->id()); |
| 127 CommitRequestData data2 = |
| 128 MakeCommitRequestData(kSequenceNumber + 1, ack.response_version); |
| 129 entity_->RequestCommit(data2); |
| 130 entity_->PopulateCommitProto(&pb_entity); |
| 131 EXPECT_EQ(kServerId, pb_entity.id_string()); |
122 } | 132 } |
123 | 133 |
124 // Start with a server initiated entity. Commit over top of it. | 134 // Start with a server initiated entity. Commit over top of it. |
125 TEST_F(WorkerEntityTrackerTest, RequestCommit) { | 135 TEST_F(WorkerEntityTrackerTest, RequestCommit) { |
126 entity_->RequestCommit(MakeCommitRequestData(1, 10)); | 136 entity_->RequestCommit(MakeCommitRequestData(1, 10)); |
127 EXPECT_TRUE(entity_->HasPendingCommit()); | 137 EXPECT_TRUE(entity_->HasPendingCommit()); |
128 } | 138 } |
129 | 139 |
130 // Start with a server initiated entity. Fail to request a commit because of | 140 // Start with a server initiated entity. Fail to request a commit because of |
131 // an out of date base version. | 141 // an out of date base version. |
132 TEST_F(WorkerEntityTrackerTest, RequestCommitFailure) { | 142 TEST_F(WorkerEntityTrackerTest, RequestCommitFailure) { |
133 entity_->ReceiveUpdate(10); | 143 entity_->ReceiveUpdate(MakeUpdateResponseData(10)); |
134 EXPECT_FALSE(entity_->HasPendingCommit()); | 144 EXPECT_FALSE(entity_->HasPendingCommit()); |
135 entity_->RequestCommit( | 145 entity_->RequestCommit( |
136 MakeCommitRequestData(23, 5 /* base_version 5 < 10 */)); | 146 MakeCommitRequestData(23, 5 /* base_version 5 < 10 */)); |
137 EXPECT_FALSE(entity_->HasPendingCommit()); | 147 EXPECT_FALSE(entity_->HasPendingCommit()); |
138 } | 148 } |
139 | 149 |
140 // Start with a pending commit. Clobber it with an incoming update. | 150 // Start with a pending commit. Clobber it with an incoming update. |
141 TEST_F(WorkerEntityTrackerTest, UpdateClobbersCommit) { | 151 TEST_F(WorkerEntityTrackerTest, UpdateClobbersCommit) { |
142 CommitRequestData data = MakeCommitRequestData(22, 33); | 152 CommitRequestData data = MakeCommitRequestData(22, 33); |
143 entity_->RequestCommit(data); | 153 entity_->RequestCommit(data); |
144 | 154 |
145 EXPECT_TRUE(entity_->HasPendingCommit()); | 155 EXPECT_TRUE(entity_->HasPendingCommit()); |
146 | 156 |
147 entity_->ReceiveUpdate(400); // Version 400 > 33. | 157 entity_->ReceiveUpdate(MakeUpdateResponseData(400)); // Version 400 > 33. |
148 EXPECT_FALSE(entity_->HasPendingCommit()); | 158 EXPECT_FALSE(entity_->HasPendingCommit()); |
149 } | 159 } |
150 | 160 |
151 // Start with a pending commit. Send it a reflected update that | 161 // Start with a pending commit. Send it a reflected update that |
152 // will not override the in-progress commit. | 162 // will not override the in-progress commit. |
153 TEST_F(WorkerEntityTrackerTest, ReflectedUpdateDoesntClobberCommit) { | 163 TEST_F(WorkerEntityTrackerTest, ReflectedUpdateDoesntClobberCommit) { |
154 CommitRequestData data = MakeCommitRequestData(22, 33); | 164 CommitRequestData data = MakeCommitRequestData(22, 33); |
155 entity_->RequestCommit(data); | 165 entity_->RequestCommit(data); |
156 | 166 |
157 EXPECT_TRUE(entity_->HasPendingCommit()); | 167 EXPECT_TRUE(entity_->HasPendingCommit()); |
158 | 168 |
159 entity_->ReceiveUpdate(33); // Version 33 == 33. | 169 entity_->ReceiveUpdate(MakeUpdateResponseData(33)); // Version 33 == 33. |
160 EXPECT_TRUE(entity_->HasPendingCommit()); | 170 EXPECT_TRUE(entity_->HasPendingCommit()); |
161 } | 171 } |
162 | 172 |
163 } // namespace syncer_v2 | 173 } // namespace syncer_v2 |
OLD | NEW |