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

Side by Side Diff: sync/test/fake_server/fake_server.h

Issue 267723012: Use FakeServer-based invalidations for Sync tests (try #2) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 7 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 #ifndef SYNC_TEST_FAKE_SERVER_FAKE_SERVER_H_ 5 #ifndef SYNC_TEST_FAKE_SERVER_FAKE_SERVER_H_
6 #define SYNC_TEST_FAKE_SERVER_FAKE_SERVER_H_ 6 #define SYNC_TEST_FAKE_SERVER_FAKE_SERVER_H_
7 7
8 #include <map> 8 #include <map>
9 #include <string> 9 #include <string>
10 #include <vector>
10 11
11 #include "base/basictypes.h" 12 #include "base/basictypes.h"
13 #include "base/callback.h"
12 #include "base/memory/scoped_ptr.h" 14 #include "base/memory/scoped_ptr.h"
13 #include "base/synchronization/lock.h" 15 #include "base/observer_list.h"
14 #include "base/values.h" 16 #include "base/values.h"
15 #include "sync/internal_api/public/base/model_type.h" 17 #include "sync/internal_api/public/base/model_type.h"
16 #include "sync/protocol/sync.pb.h" 18 #include "sync/protocol/sync.pb.h"
17 #include "sync/test/fake_server/fake_server_entity.h" 19 #include "sync/test/fake_server/fake_server_entity.h"
18 20
19 namespace fake_server { 21 namespace fake_server {
20 22
21 // A fake version of the Sync server used for testing. 23 // A fake version of the Sync server used for testing.
22 class FakeServer { 24 class FakeServer {
23 public: 25 public:
26 typedef base::Callback<void(int, int, const std::string&)>
27 HandleCommandCallback;
28
29 class Observer {
30 public:
31 virtual ~Observer() {}
32
33 // Called after FakeServer has processed a successful commit. The types
34 // updated as part of the commit are passed in |committed_model_types|.
35 virtual void OnCommit(syncer::ModelTypeSet committed_model_types) = 0;
36 };
37
24 FakeServer(); 38 FakeServer();
25 virtual ~FakeServer(); 39 virtual ~FakeServer();
26 40
27 // Handles a /command POST to the server. If the return value is 0 (success), 41 // Asynchronously handles a /command POST to the server. If the error_code is
28 // |response_code| and |response| will be set. Otherwise, the return value 42 // passed to |callback| is 0 (success), the POST's response code and content
29 // will be a network error code. 43 // will also be passed.
30 int HandleCommand(const std::string& request, 44 void HandleCommand(const std::string& request,
31 int* response_code, 45 const HandleCommandCallback& callback);
32 std::string* response);
33 46
34 // Creates a DicionaryValue representation of all entities present in the 47 // Creates a DicionaryValue representation of all entities present in the
35 // server. The dictionary keys are the strings generated by ModelTypeToString 48 // server. The dictionary keys are the strings generated by ModelTypeToString
36 // and the values are ListValues containing StringValue versions of entity 49 // and the values are ListValues containing StringValue versions of entity
37 // names. 50 // names.
38 scoped_ptr<base::DictionaryValue> GetEntitiesAsDictionaryValue(); 51 scoped_ptr<base::DictionaryValue> GetEntitiesAsDictionaryValue();
39 52
53 // Adds |observer| to FakeServer's observer list. This should be called
54 // before the Profile associated with |observer| is connected to the server.
55 void AddObserver(Observer* observer);
56
57 // Removes |observer| from the FakeServer's observer list. This method
58 // must be called if AddObserver was ever called with |observer|.
59 void RemoveObserver(Observer* observer);
60
40 private: 61 private:
41 typedef std::map<std::string, FakeServerEntity*> EntityMap; 62 typedef std::map<std::string, FakeServerEntity*> EntityMap;
42 63
43 // Processes a GetUpdates call. 64 // Processes a GetUpdates call.
44 bool HandleGetUpdatesRequest(const sync_pb::GetUpdatesMessage& get_updates, 65 bool HandleGetUpdatesRequest(const sync_pb::GetUpdatesMessage& get_updates,
45 sync_pb::GetUpdatesResponse* response); 66 sync_pb::GetUpdatesResponse* response);
46 67
47 // Processes a Commit call. 68 // Processes a Commit call.
48 bool HandleCommitRequest(const sync_pb::CommitMessage& commit, 69 bool HandleCommitRequest(const sync_pb::CommitMessage& commit,
49 sync_pb::CommitResponse* response); 70 sync_pb::CommitResponse* response);
50 71
51 // Inserts the appropriate permanent items in |entities_|. 72 // Inserts the appropriate permanent items in |entities_|.
52 bool CreateDefaultPermanentItems( 73 bool CreateDefaultPermanentItems(
53 const std::vector<syncer::ModelType>& first_time_types); 74 const std::vector<syncer::ModelType>& first_time_types);
54 75
55 // Inserts the mobile bookmarks folder entity in |entities_|. 76 // Inserts the mobile bookmarks folder entity in |entities_|.
56 bool CreateMobileBookmarksPermanentItem(); 77 bool CreateMobileBookmarksPermanentItem();
57 78
58 // Saves a |entity| to |entities_|. 79 // Saves a |entity| to |entities_|.
59 void SaveEntity(FakeServerEntity* entity); 80 void SaveEntity(FakeServerEntity* entity);
60 81
61 // Commits a client-side SyncEntity to the server as a FakeServerEntity. 82 // Commits a client-side SyncEntity to the server as a FakeServerEntity.
62 // The client that sent the commit is identified via |client_guid| and all 83 // The client that sent the commit is identified via |client_guid|. The
63 // entity ID renaming is tracked with |client_to_server_ids|. If the commit 84 // parent ID string present in |client_entity| should be ignored in favor
64 // is successful, true is returned and the server's version of the SyncEntity 85 // of |parent_id|. If the commit is successful, the entity's server ID string
65 // is stored in |server_entity|. 86 // is returned and a new FakeServerEntity is saved in |entities_|.
66 bool CommitEntity(const sync_pb::SyncEntity& client_entity, 87 std::string CommitEntity(
67 sync_pb::CommitResponse_EntryResponse* entry_response, 88 const sync_pb::SyncEntity& client_entity,
68 std::string client_guid, 89 sync_pb::CommitResponse_EntryResponse* entry_response,
69 std::map<std::string, std::string>* client_to_server_ids); 90 std::string client_guid,
91 std::string parent_id);
70 92
71 // Populates |entry_response| based on |entity|. It is assumed that 93 // Populates |entry_response| based on |entity|. It is assumed that
72 // SaveEntity has already been called on |entity|. 94 // SaveEntity has already been called on |entity|.
73 void BuildEntryResponseForSuccessfulCommit( 95 void BuildEntryResponseForSuccessfulCommit(
74 sync_pb::CommitResponse_EntryResponse* entry_response, 96 sync_pb::CommitResponse_EntryResponse* entry_response,
75 FakeServerEntity* entity); 97 FakeServerEntity* entity);
76 98
77 // Determines whether the SyncEntity with id_string |id| is a child of an 99 // Determines whether the SyncEntity with id_string |id| is a child of an
78 // entity with id_string |potential_parent_id|. 100 // entity with id_string |potential_parent_id|.
79 bool IsChild(const std::string& id, const std::string& potential_parent_id); 101 bool IsChild(const std::string& id, const std::string& potential_parent_id);
80 102
81 // Creates and saves tombstones for all children of the entity with the given 103 // Creates and saves tombstones for all children of the entity with the given
82 // |id|. A tombstone is not created for the entity itself. 104 // |id|. A tombstone is not created for the entity itself.
83 bool DeleteChildren(const std::string& id); 105 bool DeleteChildren(const std::string& id);
84 106
85 // The lock used to ensure that only one client is communicating with server
86 // at any given time.
87 //
88 // It is probably preferable to have FakeServer operate on its own thread and
89 // communicate with it via PostTask, but clients would still need to wait for
90 // requests to finish before proceeding.
91 base::Lock lock_;
92
93 // This is the last version number assigned to an entity. The next entity will 107 // This is the last version number assigned to an entity. The next entity will
94 // have a version number of version_ + 1. 108 // have a version number of version_ + 1.
95 int64 version_; 109 int64 version_;
96 110
97 // The current birthday value. 111 // The current birthday value.
98 std::string birthday_; 112 std::string birthday_;
99 113
100 // All SyncEntity objects saved by the server. The key value is the entity's 114 // All SyncEntity objects saved by the server. The key value is the entity's
101 // id string. 115 // id string.
102 EntityMap entities_; 116 EntityMap entities_;
103 117
104 // All Keystore keys known to the server. 118 // All Keystore keys known to the server.
105 std::vector<std::string> keystore_keys_; 119 std::vector<std::string> keystore_keys_;
106 120
107 // All ModelTypes for which permanent entities have been created. These types 121 // All ModelTypes for which permanent entities have been created. These types
108 // are kept track of so that permanent entities are not recreated for new 122 // are kept track of so that permanent entities are not recreated for new
109 // clients. 123 // clients.
110 syncer::ModelTypeSet created_permanent_entity_types_; 124 syncer::ModelTypeSet created_permanent_entity_types_;
125
126 // FakeServer's observers.
127 ObserverList<Observer, true> observers_;
111 }; 128 };
112 129
113 } // namespace fake_server 130 } // namespace fake_server
114 131
115 #endif // SYNC_TEST_FAKE_SERVER_FAKE_SERVER_H_ 132 #endif // SYNC_TEST_FAKE_SERVER_FAKE_SERVER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698