OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 // Mock ServerConnectionManager class for use in client unit tests. | 5 // Mock ServerConnectionManager class for use in client unit tests. |
6 | 6 |
7 #ifndef SYNC_TEST_ENGINE_MOCK_CONNECTION_MANAGER_H_ | 7 #ifndef SYNC_TEST_ENGINE_MOCK_CONNECTION_MANAGER_H_ |
8 #define SYNC_TEST_ENGINE_MOCK_CONNECTION_MANAGER_H_ | 8 #define SYNC_TEST_ENGINE_MOCK_CONNECTION_MANAGER_H_ |
9 | 9 |
| 10 #include <stdint.h> |
| 11 |
10 #include <bitset> | 12 #include <bitset> |
11 #include <list> | 13 #include <list> |
12 #include <string> | 14 #include <string> |
13 #include <vector> | 15 #include <vector> |
14 | 16 |
15 #include "base/callback.h" | 17 #include "base/callback.h" |
16 #include "base/compiler_specific.h" | 18 #include "base/compiler_specific.h" |
| 19 #include "base/macros.h" |
17 #include "base/memory/scoped_vector.h" | 20 #include "base/memory/scoped_vector.h" |
18 #include "base/synchronization/lock.h" | 21 #include "base/synchronization/lock.h" |
19 #include "sync/engine/net/server_connection_manager.h" | 22 #include "sync/engine/net/server_connection_manager.h" |
20 #include "sync/internal_api/public/base/model_type.h" | 23 #include "sync/internal_api/public/base/model_type.h" |
21 #include "sync/internal_api/public/base/unique_position.h" | 24 #include "sync/internal_api/public/base/unique_position.h" |
22 #include "sync/protocol/sync.pb.h" | 25 #include "sync/protocol/sync.pb.h" |
23 | 26 |
24 namespace syncer { | 27 namespace syncer { |
25 | 28 |
26 class MockConnectionManager : public ServerConnectionManager { | 29 class MockConnectionManager : public ServerConnectionManager { |
(...skipping 18 matching lines...) Expand all Loading... |
45 // Control of commit response. | 48 // Control of commit response. |
46 // NOTE: Commit callback is invoked only once then reset. | 49 // NOTE: Commit callback is invoked only once then reset. |
47 void SetMidCommitCallback(const base::Closure& callback); | 50 void SetMidCommitCallback(const base::Closure& callback); |
48 void SetMidCommitObserver(MidCommitObserver* observer); | 51 void SetMidCommitObserver(MidCommitObserver* observer); |
49 | 52 |
50 // Set this if you want commit to perform commit time rename. Will request | 53 // Set this if you want commit to perform commit time rename. Will request |
51 // that the client renames all commited entries, prepending this string. | 54 // that the client renames all commited entries, prepending this string. |
52 void SetCommitTimeRename(const std::string& prepend); | 55 void SetCommitTimeRename(const std::string& prepend); |
53 | 56 |
54 // Generic versions of AddUpdate functions. Tests using these function should | 57 // Generic versions of AddUpdate functions. Tests using these function should |
55 // compile for both the int64 and string id based versions of the server. | 58 // compile for both the int64_t and string id based versions of the server. |
56 // The SyncEntity returned is only valid until the Sync is completed | 59 // The SyncEntity returned is only valid until the Sync is completed |
57 // (e.g. with SyncShare.) It allows to add further entity properties before | 60 // (e.g. with SyncShare.) It allows to add further entity properties before |
58 // sync, using SetLastXXX() methods and/or GetMutableLastUpdate(). | 61 // sync, using SetLastXXX() methods and/or GetMutableLastUpdate(). |
59 sync_pb::SyncEntity* AddUpdateDirectory( | 62 sync_pb::SyncEntity* AddUpdateDirectory( |
60 syncable::Id id, | 63 syncable::Id id, |
61 syncable::Id parent_id, | 64 syncable::Id parent_id, |
62 const std::string& name, | 65 const std::string& name, |
63 int64 version, | 66 int64_t version, |
64 int64 sync_ts, | 67 int64_t sync_ts, |
65 const std::string& originator_cache_guid, | 68 const std::string& originator_cache_guid, |
66 const std::string& originator_client_item_id); | 69 const std::string& originator_client_item_id); |
67 sync_pb::SyncEntity* AddUpdateBookmark( | 70 sync_pb::SyncEntity* AddUpdateBookmark( |
68 syncable::Id id, | 71 syncable::Id id, |
69 syncable::Id parent_id, | 72 syncable::Id parent_id, |
70 const std::string& name, | 73 const std::string& name, |
71 int64 version, | 74 int64_t version, |
72 int64 sync_ts, | 75 int64_t sync_ts, |
73 const std::string& originator_cache_guid, | 76 const std::string& originator_cache_guid, |
74 const std::string& originator_client_item_id); | 77 const std::string& originator_client_item_id); |
75 // Versions of the AddUpdate functions that accept integer IDs. | 78 // Versions of the AddUpdate functions that accept integer IDs. |
76 sync_pb::SyncEntity* AddUpdateDirectory( | 79 sync_pb::SyncEntity* AddUpdateDirectory( |
77 int id, | 80 int id, |
78 int parent_id, | 81 int parent_id, |
79 const std::string& name, | 82 const std::string& name, |
80 int64 version, | 83 int64_t version, |
81 int64 sync_ts, | 84 int64_t sync_ts, |
82 const std::string& originator_cache_guid, | 85 const std::string& originator_cache_guid, |
83 const std::string& originator_client_item_id); | 86 const std::string& originator_client_item_id); |
84 sync_pb::SyncEntity* AddUpdateBookmark( | 87 sync_pb::SyncEntity* AddUpdateBookmark( |
85 int id, | 88 int id, |
86 int parent_id, | 89 int parent_id, |
87 const std::string& name, | 90 const std::string& name, |
88 int64 version, | 91 int64_t version, |
89 int64 sync_ts, | 92 int64_t sync_ts, |
90 const std::string& originator_cache_guid, | 93 const std::string& originator_cache_guid, |
91 const std::string& originator_client_item_id); | 94 const std::string& originator_client_item_id); |
92 // New protocol versions of the AddUpdate functions. | 95 // New protocol versions of the AddUpdate functions. |
93 sync_pb::SyncEntity* AddUpdateDirectory( | 96 sync_pb::SyncEntity* AddUpdateDirectory( |
94 const std::string& id, | 97 const std::string& id, |
95 const std::string& parent_id, | 98 const std::string& parent_id, |
96 const std::string& name, | 99 const std::string& name, |
97 int64 version, | 100 int64_t version, |
98 int64 sync_ts, | 101 int64_t sync_ts, |
99 const std::string& originator_cache_guid, | 102 const std::string& originator_cache_guid, |
100 const std::string& originator_client_item_id); | 103 const std::string& originator_client_item_id); |
101 sync_pb::SyncEntity* AddUpdateBookmark( | 104 sync_pb::SyncEntity* AddUpdateBookmark( |
102 const std::string& id, | 105 const std::string& id, |
103 const std::string& parent_id, | 106 const std::string& parent_id, |
104 const std::string& name, | 107 const std::string& name, |
105 int64 version, | 108 int64_t version, |
106 int64 sync_ts, | 109 int64_t sync_ts, |
107 const std::string& originator_cache_guid, | 110 const std::string& originator_cache_guid, |
108 const std::string& originator_client_item_id); | 111 const std::string& originator_client_item_id); |
109 // Versions of the AddUpdate function that accept specifics. | 112 // Versions of the AddUpdate function that accept specifics. |
110 sync_pb::SyncEntity* AddUpdateSpecifics( | 113 sync_pb::SyncEntity* AddUpdateSpecifics( |
111 int id, | 114 int id, |
112 int parent_id, | 115 int parent_id, |
113 const std::string& name, | 116 const std::string& name, |
114 int64 version, | 117 int64_t version, |
115 int64 sync_ts, | 118 int64_t sync_ts, |
116 bool is_dir, | 119 bool is_dir, |
117 int64 position, | 120 int64_t position, |
118 const sync_pb::EntitySpecifics& specifics); | 121 const sync_pb::EntitySpecifics& specifics); |
119 sync_pb::SyncEntity* AddUpdateSpecifics( | 122 sync_pb::SyncEntity* AddUpdateSpecifics( |
120 int id, | 123 int id, |
121 int parent_id, | 124 int parent_id, |
122 const std::string& name, | 125 const std::string& name, |
123 int64 version, | 126 int64_t version, |
124 int64 sync_ts, | 127 int64_t sync_ts, |
125 bool is_dir, | 128 bool is_dir, |
126 int64 position, | 129 int64_t position, |
127 const sync_pb::EntitySpecifics& specifics, | 130 const sync_pb::EntitySpecifics& specifics, |
128 const std::string& originator_cache_guid, | 131 const std::string& originator_cache_guid, |
129 const std::string& originator_client_item_id); | 132 const std::string& originator_client_item_id); |
130 sync_pb::SyncEntity* SetNigori( | 133 sync_pb::SyncEntity* SetNigori(int id, |
131 int id, | 134 int64_t version, |
132 int64 version, | 135 int64_t sync_ts, |
133 int64 sync_ts, | 136 const sync_pb::EntitySpecifics& specifics); |
134 const sync_pb::EntitySpecifics& specifics); | |
135 // Unique client tag variant for adding items. | 137 // Unique client tag variant for adding items. |
136 sync_pb::SyncEntity* AddUpdatePref(const std::string& id, | 138 sync_pb::SyncEntity* AddUpdatePref(const std::string& id, |
137 const std::string& parent_id, | 139 const std::string& parent_id, |
138 const std::string& client_tag, | 140 const std::string& client_tag, |
139 int64 version, | 141 int64_t version, |
140 int64 sync_ts); | 142 int64_t sync_ts); |
141 | 143 |
142 // Find the last commit sent by the client, and replay it for the next get | 144 // Find the last commit sent by the client, and replay it for the next get |
143 // updates command. This can be used to simulate the GetUpdates that happens | 145 // updates command. This can be used to simulate the GetUpdates that happens |
144 // immediately after a successful commit. | 146 // immediately after a successful commit. |
145 sync_pb::SyncEntity* AddUpdateFromLastCommit(); | 147 sync_pb::SyncEntity* AddUpdateFromLastCommit(); |
146 | 148 |
147 // Add a deleted item. Deletion records typically contain no | 149 // Add a deleted item. Deletion records typically contain no |
148 // additional information beyond the deletion, and no specifics. | 150 // additional information beyond the deletion, and no specifics. |
149 // The server may send the originator fields. | 151 // The server may send the originator fields. |
150 void AddUpdateTombstone(const syncable::Id& id, ModelType type); | 152 void AddUpdateTombstone(const syncable::Id& id, ModelType type); |
151 | 153 |
152 void SetLastUpdateDeleted(); | 154 void SetLastUpdateDeleted(); |
153 void SetLastUpdateServerTag(const std::string& tag); | 155 void SetLastUpdateServerTag(const std::string& tag); |
154 void SetLastUpdateClientTag(const std::string& tag); | 156 void SetLastUpdateClientTag(const std::string& tag); |
155 void SetLastUpdateOriginatorFields(const std::string& client_id, | 157 void SetLastUpdateOriginatorFields(const std::string& client_id, |
156 const std::string& entry_id); | 158 const std::string& entry_id); |
157 void SetLastUpdatePosition(int64 position_in_parent); | 159 void SetLastUpdatePosition(int64_t position_in_parent); |
158 void SetNewTimestamp(int ts); | 160 void SetNewTimestamp(int ts); |
159 void SetChangesRemaining(int64 count); | 161 void SetChangesRemaining(int64_t count); |
160 | 162 |
161 // Add a new batch of updates after the current one. Allows multiple | 163 // Add a new batch of updates after the current one. Allows multiple |
162 // GetUpdates responses to be buffered up, since the syncer may | 164 // GetUpdates responses to be buffered up, since the syncer may |
163 // issue multiple requests during a sync cycle. | 165 // issue multiple requests during a sync cycle. |
164 void NextUpdateBatch(); | 166 void NextUpdateBatch(); |
165 | 167 |
166 void FailNextPostBufferToPathCall() { countdown_to_postbuffer_fail_ = 1; } | 168 void FailNextPostBufferToPathCall() { countdown_to_postbuffer_fail_ = 1; } |
167 void FailNthPostBufferToPathCall(int n) { countdown_to_postbuffer_fail_ = n; } | 169 void FailNthPostBufferToPathCall(int n) { countdown_to_postbuffer_fail_ = n; } |
168 | 170 |
169 void SetKeystoreKey(const std::string& key); | 171 void SetKeystoreKey(const std::string& key); |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
268 // Locate the most recent update message for purpose of alteration. | 270 // Locate the most recent update message for purpose of alteration. |
269 sync_pb::SyncEntity* GetMutableLastUpdate(); | 271 sync_pb::SyncEntity* GetMutableLastUpdate(); |
270 | 272 |
271 // Adds a new progress marker to the last update. | 273 // Adds a new progress marker to the last update. |
272 sync_pb::DataTypeProgressMarker* AddUpdateProgressMarker(); | 274 sync_pb::DataTypeProgressMarker* AddUpdateProgressMarker(); |
273 | 275 |
274 private: | 276 private: |
275 sync_pb::SyncEntity* AddUpdateFull(syncable::Id id, | 277 sync_pb::SyncEntity* AddUpdateFull(syncable::Id id, |
276 syncable::Id parentid, | 278 syncable::Id parentid, |
277 const std::string& name, | 279 const std::string& name, |
278 int64 version, | 280 int64_t version, |
279 int64 sync_ts, | 281 int64_t sync_ts, |
280 bool is_dir); | 282 bool is_dir); |
281 sync_pb::SyncEntity* AddUpdateFull(const std::string& id, | 283 sync_pb::SyncEntity* AddUpdateFull(const std::string& id, |
282 const std::string& parentid, | 284 const std::string& parentid, |
283 const std::string& name, | 285 const std::string& name, |
284 int64 version, | 286 int64_t version, |
285 int64 sync_ts, | 287 int64_t sync_ts, |
286 bool is_dir); | 288 bool is_dir); |
287 sync_pb::SyncEntity* AddUpdateMeta(const std::string& id, | 289 sync_pb::SyncEntity* AddUpdateMeta(const std::string& id, |
288 const std::string& parentid, | 290 const std::string& parentid, |
289 const std::string& name, | 291 const std::string& name, |
290 int64 version, | 292 int64_t version, |
291 int64 sync_ts); | 293 int64_t sync_ts); |
292 | 294 |
293 // Functions to handle the various types of server request. | 295 // Functions to handle the various types of server request. |
294 void ProcessGetUpdates(sync_pb::ClientToServerMessage* csm, | 296 void ProcessGetUpdates(sync_pb::ClientToServerMessage* csm, |
295 sync_pb::ClientToServerResponse* response); | 297 sync_pb::ClientToServerResponse* response); |
296 void ProcessCommit(sync_pb::ClientToServerMessage* csm, | 298 void ProcessCommit(sync_pb::ClientToServerMessage* csm, |
297 sync_pb::ClientToServerResponse* response_buffer); | 299 sync_pb::ClientToServerResponse* response_buffer); |
298 void ProcessClearServerData(sync_pb::ClientToServerMessage* csm, | 300 void ProcessClearServerData(sync_pb::ClientToServerMessage* csm, |
299 sync_pb::ClientToServerResponse* response); | 301 sync_pb::ClientToServerResponse* response); |
300 void AddDefaultBookmarkData(sync_pb::SyncEntity* entity, bool is_folder); | 302 void AddDefaultBookmarkData(sync_pb::SyncEntity* entity, bool is_folder); |
301 | 303 |
302 // Determine if one entry in a commit should be rejected with a conflict. | 304 // Determine if one entry in a commit should be rejected with a conflict. |
303 bool ShouldConflictThisCommit(); | 305 bool ShouldConflictThisCommit(); |
304 | 306 |
305 // Determine if the given item's commit request should be refused with | 307 // Determine if the given item's commit request should be refused with |
306 // a TRANSIENT_ERROR response. | 308 // a TRANSIENT_ERROR response. |
307 bool ShouldTransientErrorThisId(syncable::Id id); | 309 bool ShouldTransientErrorThisId(syncable::Id id); |
308 | 310 |
309 // Generate a numeric position_in_parent value. We use a global counter | 311 // Generate a numeric position_in_parent value. We use a global counter |
310 // that only decreases; this simulates new objects always being added to the | 312 // that only decreases; this simulates new objects always being added to the |
311 // front of the ordering. | 313 // front of the ordering. |
312 int64 GeneratePositionInParent() { | 314 int64_t GeneratePositionInParent() { return next_position_in_parent_--; } |
313 return next_position_in_parent_--; | |
314 } | |
315 | 315 |
316 // Get a mutable update response which will eventually be returned to the | 316 // Get a mutable update response which will eventually be returned to the |
317 // client. | 317 // client. |
318 sync_pb::GetUpdatesResponse* GetUpdateResponse(); | 318 sync_pb::GetUpdatesResponse* GetUpdateResponse(); |
319 void ApplyToken(); | 319 void ApplyToken(); |
320 | 320 |
321 // Determine whether an progress marker array (like that sent in | 321 // Determine whether an progress marker array (like that sent in |
322 // GetUpdates.from_progress_marker) indicates that a particular ModelType | 322 // GetUpdates.from_progress_marker) indicates that a particular ModelType |
323 // should be included. | 323 // should be included. |
324 bool IsModelTypePresentInSpecifics( | 324 bool IsModelTypePresentInSpecifics( |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
391 | 391 |
392 base::Lock response_code_override_lock_; | 392 base::Lock response_code_override_lock_; |
393 | 393 |
394 // True if we are only accepting GetUpdatesCallerInfo::PERIODIC requests. | 394 // True if we are only accepting GetUpdatesCallerInfo::PERIODIC requests. |
395 bool fail_non_periodic_get_updates_; | 395 bool fail_non_periodic_get_updates_; |
396 | 396 |
397 scoped_ptr<sync_pb::ClientCommand> gu_client_command_; | 397 scoped_ptr<sync_pb::ClientCommand> gu_client_command_; |
398 scoped_ptr<sync_pb::ClientCommand> commit_client_command_; | 398 scoped_ptr<sync_pb::ClientCommand> commit_client_command_; |
399 | 399 |
400 // The next value to use for the position_in_parent property. | 400 // The next value to use for the position_in_parent property. |
401 int64 next_position_in_parent_; | 401 int64_t next_position_in_parent_; |
402 | 402 |
403 // The default is to use the newer sync_pb::BookmarkSpecifics-style protocol. | 403 // The default is to use the newer sync_pb::BookmarkSpecifics-style protocol. |
404 // If this option is set to true, then the MockConnectionManager will | 404 // If this option is set to true, then the MockConnectionManager will |
405 // use the older sync_pb::SyncEntity_BookmarkData-style protocol. | 405 // use the older sync_pb::SyncEntity_BookmarkData-style protocol. |
406 bool use_legacy_bookmarks_protocol_; | 406 bool use_legacy_bookmarks_protocol_; |
407 | 407 |
408 ModelTypeSet expected_filter_; | 408 ModelTypeSet expected_filter_; |
409 | 409 |
410 ModelTypeSet throttled_type_; | 410 ModelTypeSet throttled_type_; |
411 | 411 |
412 int num_get_updates_requests_; | 412 int num_get_updates_requests_; |
413 | 413 |
414 std::string next_token_; | 414 std::string next_token_; |
415 | 415 |
416 std::vector<sync_pb::ClientToServerMessage> requests_; | 416 std::vector<sync_pb::ClientToServerMessage> requests_; |
417 | 417 |
418 DISALLOW_COPY_AND_ASSIGN(MockConnectionManager); | 418 DISALLOW_COPY_AND_ASSIGN(MockConnectionManager); |
419 }; | 419 }; |
420 | 420 |
421 } // namespace syncer | 421 } // namespace syncer |
422 | 422 |
423 #endif // SYNC_TEST_ENGINE_MOCK_CONNECTION_MANAGER_H_ | 423 #endif // SYNC_TEST_ENGINE_MOCK_CONNECTION_MANAGER_H_ |
OLD | NEW |