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 "sync/engine/worker_entity_tracker.h" | 6 #include "sync/engine/worker_entity_tracker.h" |
7 | 7 |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <memory> | 10 #include <memory> |
(...skipping 16 matching lines...) Expand all Loading... |
27 // These tests are intended as a basic sanity check. Anything more complicated | 27 // These tests are intended as a basic sanity check. Anything more complicated |
28 // would be redundant. | 28 // would be redundant. |
29 class WorkerEntityTrackerTest : public ::testing::Test { | 29 class WorkerEntityTrackerTest : public ::testing::Test { |
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 kCtime(base::Time::UnixEpoch() + base::TimeDelta::FromDays(10)), | 38 kCtime(base::Time::UnixEpoch() + base::TimeDelta::FromDays(10)), |
38 kMtime(base::Time::UnixEpoch() + base::TimeDelta::FromDays(20)), | 39 kMtime(base::Time::UnixEpoch() + base::TimeDelta::FromDays(20)), |
39 entity_(new WorkerEntityTracker(kServerId, kClientTagHash)) { | 40 entity_(new WorkerEntityTracker(kServerId, kClientTagHash)) { |
40 specifics.mutable_preference()->set_name(kClientTag); | 41 specifics.mutable_preference()->set_name(kClientTag); |
41 specifics.mutable_preference()->set_value("pref.value"); | 42 specifics.mutable_preference()->set_value("pref.value"); |
42 } | 43 } |
43 | 44 |
44 ~WorkerEntityTrackerTest() override {} | 45 ~WorkerEntityTrackerTest() override {} |
45 | 46 |
46 CommitRequestData MakeCommitRequestData(int64_t sequence_number, | 47 CommitRequestData MakeCommitRequestData(int64_t sequence_number, |
47 int64_t base_version) { | 48 int64_t base_version) { |
48 EntityData data; | 49 EntityData data; |
49 data.id = kServerId; | 50 data.id = kServerId; |
50 data.client_tag_hash = kClientTagHash; | 51 data.client_tag_hash = kClientTagHash; |
51 data.creation_time = kCtime; | 52 data.creation_time = kCtime; |
52 data.modification_time = kMtime; | 53 data.modification_time = kMtime; |
53 data.specifics = specifics; | 54 data.specifics = specifics; |
54 data.non_unique_name = kClientTag; | 55 data.non_unique_name = kClientTag; |
55 | 56 |
56 CommitRequestData request_data; | 57 CommitRequestData request_data; |
57 request_data.entity = data.PassToPtr(); | 58 request_data.entity = data.PassToPtr(); |
58 request_data.sequence_number = sequence_number; | 59 request_data.sequence_number = sequence_number; |
59 request_data.base_version = base_version; | 60 request_data.base_version = base_version; |
| 61 request_data.specifics_hash = kSpecificsHash; |
60 return request_data; | 62 return request_data; |
61 } | 63 } |
62 | 64 |
63 UpdateResponseData MakeUpdateResponseData(int64_t response_version) { | 65 UpdateResponseData MakeUpdateResponseData(int64_t response_version) { |
64 EntityData data; | 66 EntityData data; |
65 data.id = kServerId; | 67 data.id = kServerId; |
66 data.client_tag_hash = kClientTagHash; | 68 data.client_tag_hash = kClientTagHash; |
67 | 69 |
68 UpdateResponseData response_data; | 70 UpdateResponseData response_data; |
69 response_data.entity = data.PassToPtr(); | 71 response_data.entity = data.PassToPtr(); |
70 response_data.response_version = response_version; | 72 response_data.response_version = response_version; |
71 return response_data; | 73 return response_data; |
72 } | 74 } |
73 | 75 |
74 const std::string kServerId; | 76 const std::string kServerId; |
75 const std::string kClientTag; | 77 const std::string kClientTag; |
76 const std::string kClientTagHash; | 78 const std::string kClientTagHash; |
| 79 const std::string kSpecificsHash; |
77 const base::Time kCtime; | 80 const base::Time kCtime; |
78 const base::Time kMtime; | 81 const base::Time kMtime; |
79 sync_pb::EntitySpecifics specifics; | 82 sync_pb::EntitySpecifics specifics; |
80 std::unique_ptr<WorkerEntityTracker> entity_; | 83 std::unique_ptr<WorkerEntityTracker> entity_; |
81 }; | 84 }; |
82 | 85 |
83 // 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. |
84 TEST_F(WorkerEntityTrackerTest, FromUpdateResponse) { | 87 TEST_F(WorkerEntityTrackerTest, FromUpdateResponse) { |
85 EXPECT_FALSE(entity_->HasPendingCommit()); | 88 EXPECT_FALSE(entity_->HasPendingCommit()); |
86 entity_->ReceiveUpdate(20); | 89 entity_->ReceiveUpdate(20); |
87 EXPECT_FALSE(entity_->HasPendingCommit()); | 90 EXPECT_FALSE(entity_->HasPendingCommit()); |
88 } | 91 } |
89 | 92 |
90 // Construct a new entity from a commit request. Then serialize it. | 93 // Construct a new entity from a commit request. Then serialize it. |
91 TEST_F(WorkerEntityTrackerTest, FromCommitRequest) { | 94 TEST_F(WorkerEntityTrackerTest, FromCommitRequest) { |
92 const int64_t kSequenceNumber = 22; | 95 const int64_t kSequenceNumber = 22; |
93 const int64_t kBaseVersion = 33; | 96 const int64_t kBaseVersion = 33; |
94 CommitRequestData data = MakeCommitRequestData(kSequenceNumber, kBaseVersion); | 97 CommitRequestData data = MakeCommitRequestData(kSequenceNumber, kBaseVersion); |
95 entity_->RequestCommit(data); | 98 entity_->RequestCommit(data); |
96 | 99 |
97 ASSERT_TRUE(entity_->HasPendingCommit()); | 100 ASSERT_TRUE(entity_->HasPendingCommit()); |
98 sync_pb::SyncEntity pb_entity; | 101 sync_pb::SyncEntity pb_entity; |
99 int64_t sequence_number = 0; | 102 entity_->PopulateCommitProto(&pb_entity); |
100 entity_->PopulateCommitProto(&pb_entity, &sequence_number); | |
101 EXPECT_EQ(kSequenceNumber, sequence_number); | |
102 EXPECT_EQ(kServerId, pb_entity.id_string()); | 103 EXPECT_EQ(kServerId, pb_entity.id_string()); |
103 EXPECT_EQ(kClientTagHash, pb_entity.client_defined_unique_tag()); | 104 EXPECT_EQ(kClientTagHash, pb_entity.client_defined_unique_tag()); |
104 EXPECT_EQ(kBaseVersion, pb_entity.version()); | 105 EXPECT_EQ(kBaseVersion, pb_entity.version()); |
105 EXPECT_EQ(kCtime, syncer::ProtoTimeToTime(pb_entity.ctime())); | 106 EXPECT_EQ(kCtime, syncer::ProtoTimeToTime(pb_entity.ctime())); |
106 EXPECT_EQ(kMtime, syncer::ProtoTimeToTime(pb_entity.mtime())); | 107 EXPECT_EQ(kMtime, syncer::ProtoTimeToTime(pb_entity.mtime())); |
107 EXPECT_FALSE(pb_entity.deleted()); | 108 EXPECT_FALSE(pb_entity.deleted()); |
108 EXPECT_EQ(specifics.preference().name(), | 109 EXPECT_EQ(specifics.preference().name(), |
109 pb_entity.specifics().preference().name()); | 110 pb_entity.specifics().preference().name()); |
110 EXPECT_EQ(specifics.preference().value(), | 111 EXPECT_EQ(specifics.preference().value(), |
111 pb_entity.specifics().preference().value()); | 112 pb_entity.specifics().preference().value()); |
| 113 |
| 114 CommitResponseData ack; |
| 115 ack.response_version = kBaseVersion + 1; |
| 116 ack.id = kServerId; |
| 117 entity_->ReceiveCommitResponse(&ack); |
| 118 |
| 119 EXPECT_EQ(kSequenceNumber, ack.sequence_number); |
| 120 EXPECT_EQ(kSpecificsHash, ack.specifics_hash); |
| 121 EXPECT_FALSE(entity_->HasPendingCommit()); |
112 } | 122 } |
113 | 123 |
114 // Start with a server initiated entity. Commit over top of it. | 124 // Start with a server initiated entity. Commit over top of it. |
115 TEST_F(WorkerEntityTrackerTest, RequestCommit) { | 125 TEST_F(WorkerEntityTrackerTest, RequestCommit) { |
116 entity_->RequestCommit(MakeCommitRequestData(1, 10)); | 126 entity_->RequestCommit(MakeCommitRequestData(1, 10)); |
117 EXPECT_TRUE(entity_->HasPendingCommit()); | 127 EXPECT_TRUE(entity_->HasPendingCommit()); |
118 } | 128 } |
119 | 129 |
120 // Start with a server initiated entity. Fail to request a commit because of | 130 // Start with a server initiated entity. Fail to request a commit because of |
121 // an out of date base version. | 131 // an out of date base version. |
(...skipping 22 matching lines...) Expand all Loading... |
144 CommitRequestData data = MakeCommitRequestData(22, 33); | 154 CommitRequestData data = MakeCommitRequestData(22, 33); |
145 entity_->RequestCommit(data); | 155 entity_->RequestCommit(data); |
146 | 156 |
147 EXPECT_TRUE(entity_->HasPendingCommit()); | 157 EXPECT_TRUE(entity_->HasPendingCommit()); |
148 | 158 |
149 entity_->ReceiveUpdate(33); // Version 33 == 33. | 159 entity_->ReceiveUpdate(33); // Version 33 == 33. |
150 EXPECT_TRUE(entity_->HasPendingCommit()); | 160 EXPECT_TRUE(entity_->HasPendingCommit()); |
151 } | 161 } |
152 | 162 |
153 } // namespace syncer_v2 | 163 } // namespace syncer_v2 |
OLD | NEW |