diff options
Diffstat (limited to 'sync/test/fake_server/fake_server.cc')
-rw-r--r-- | sync/test/fake_server/fake_server.cc | 71 |
1 files changed, 43 insertions, 28 deletions
diff --git a/sync/test/fake_server/fake_server.cc b/sync/test/fake_server/fake_server.cc index d758e5d..798797e 100644 --- a/sync/test/fake_server/fake_server.cc +++ b/sync/test/fake_server/fake_server.cc @@ -4,6 +4,7 @@ #include "sync/test/fake_server/fake_server.h" +#include <algorithm> #include <limits> #include <string> #include <vector> @@ -29,7 +30,6 @@ using std::string; using std::vector; -using base::AutoLock; using syncer::GetModelType; using syncer::ModelType; using syncer::ModelTypeSet; @@ -238,11 +238,8 @@ void FakeServer::SaveEntity(FakeServerEntity* entity) { entities_[entity->GetId()] = entity; } -int FakeServer::HandleCommand(const string& request, - int* response_code, - string* response) { - AutoLock lock(lock_); - +void FakeServer::HandleCommand(const string& request, + const HandleCommandCallback& callback) { sync_pb::ClientToServerMessage message; bool parsed = message.ParseFromString(request); DCHECK(parsed); @@ -259,20 +256,20 @@ int FakeServer::HandleCommand(const string& request, response_proto.mutable_commit()); break; default: - return net::ERR_NOT_IMPLEMENTED; + callback.Run(net::ERR_NOT_IMPLEMENTED, 0, string());; + return; } if (!success) { // TODO(pvalenzuela): Add logging here so that tests have more info about // the failure. - return net::HTTP_BAD_REQUEST; + callback.Run(net::ERR_FAILED, 0, string()); + return; } response_proto.set_error_code(sync_pb::SyncEnums::SUCCESS); response_proto.set_store_birthday(birthday_); - *response_code = net::HTTP_OK; - *response = response_proto.SerializeAsString(); - return 0; + callback.Run(0, net::HTTP_OK, response_proto.SerializeAsString()); } bool FakeServer::HandleGetUpdatesRequest( @@ -324,13 +321,13 @@ bool FakeServer::HandleGetUpdatesRequest( return true; } -bool FakeServer::CommitEntity( +string FakeServer::CommitEntity( const sync_pb::SyncEntity& client_entity, sync_pb::CommitResponse_EntryResponse* entry_response, string client_guid, - std::map<string, string>* client_to_server_ids) { + string parent_id) { if (client_entity.version() == 0 && client_entity.deleted()) { - return false; + return string(); } FakeServerEntity* entity; @@ -339,7 +336,7 @@ bool FakeServer::CommitEntity( // TODO(pvalenzuela): Change the behavior of DeleteChilden so that it does // not modify server data if it fails. if (!DeleteChildren(client_entity.id_string())) { - return false; + return string(); } } else if (GetModelType(client_entity) == syncer::NIGORI) { // NIGORI is the only permanent item type that should be updated by the @@ -356,11 +353,6 @@ bool FakeServer::CommitEntity( entity = UniqueClientEntity::CreateNew(client_entity); } } else { - string parent_id = client_entity.parent_id_string(); - if (client_to_server_ids->find(parent_id) != - client_to_server_ids->end()) { - parent_id = (*client_to_server_ids)[parent_id]; - } // TODO(pvalenzuela): Validate entity's parent ID. if (entities_.find(client_entity.id_string()) != entities_.end()) { entity = BookmarkEntity::CreateUpdatedVersion( @@ -375,17 +367,12 @@ bool FakeServer::CommitEntity( if (entity == NULL) { // TODO(pvalenzuela): Add logging so that it is easier to determine why // creation failed. - return false; - } - - // Record the ID if it was renamed. - if (client_entity.id_string() != entity->GetId()) { - (*client_to_server_ids)[client_entity.id_string()] = entity->GetId(); + return string(); } SaveEntity(entity); BuildEntryResponseForSuccessfulCommit(entry_response, entity); - return true; + return entity->GetId(); } void FakeServer::BuildEntryResponseForSuccessfulCommit( @@ -442,6 +429,7 @@ bool FakeServer::HandleCommitRequest( sync_pb::CommitResponse* response) { std::map<string, string> client_to_server_ids; string guid = commit.cache_guid(); + ModelTypeSet committed_model_types; // TODO(pvalenzuela): Add validation of CommitMessage.entries. ::google::protobuf::RepeatedPtrField<sync_pb::SyncEntity>::const_iterator it; @@ -449,11 +437,30 @@ bool FakeServer::HandleCommitRequest( sync_pb::CommitResponse_EntryResponse* entry_response = response->add_entryresponse(); - if (!CommitEntity(*it, entry_response, guid, &client_to_server_ids)) { + sync_pb::SyncEntity client_entity = *it; + string parent_id = client_entity.parent_id_string(); + if (client_to_server_ids.find(parent_id) != + client_to_server_ids.end()) { + parent_id = client_to_server_ids[parent_id]; + } + + string entity_id = CommitEntity(client_entity, + entry_response, + guid, + parent_id); + if (entity_id.empty()) { return false; } + + // Record the ID if it was renamed. + if (entity_id != client_entity.id_string()) { + client_to_server_ids[client_entity.id_string()] = entity_id; + } + FakeServerEntity* entity = entities_[entity_id]; + committed_model_types.Put(entity->GetModelType()); } + FOR_EACH_OBSERVER(Observer, observers_, OnCommit(committed_model_types)); return true; } @@ -489,4 +496,12 @@ scoped_ptr<base::DictionaryValue> FakeServer::GetEntitiesAsDictionaryValue() { return dictionary.Pass(); } +void FakeServer::AddObserver(Observer* observer) { + observers_.AddObserver(observer); +} + +void FakeServer::RemoveObserver(Observer* observer) { + observers_.RemoveObserver(observer); +} + } // namespace fake_server |