| 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 |