1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// found in the LICENSE file. 4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "sync/test/fake_server/fake_server_entity.h" 6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include <limits> 8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include <string> 9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include <vector> 10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/basictypes.h" 12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/guid.h" 13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/logging.h" 14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/memory/ref_counted.h" 15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/strings/string_number_conversions.h" 17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/strings/string_util.h" 18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/strings/stringprintf.h" 19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "net/base/net_errors.h" 20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "net/http/http_status_code.h" 21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "sync/internal_api/public/base/model_type.h" 22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "sync/protocol/sync.pb.h" 23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)using std::string; 25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)using std::vector; 26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)using syncer::ModelType; 28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// The separator used when formatting IDs. 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// We chose the underscore character because it doesn't conflict with the 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// special characters used by base/base64.h's encoding, which is also used in 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// the construction of some IDs. 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)const char kIdSeparator[] = "_"; 35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace fake_server { 37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)FakeServerEntity::~FakeServerEntity() { } 39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const std::string& FakeServerEntity::GetId() const { 41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return id_; 42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)ModelType FakeServerEntity::GetModelType() const { 45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return model_type_; 46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)int64 FakeServerEntity::GetVersion() const { 49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return version_; 50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void FakeServerEntity::SetVersion(int64 version) { 53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) version_ = version; 54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const std::string& FakeServerEntity::GetName() const { 57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return name_; 58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// static 61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)string FakeServerEntity::CreateId(const ModelType& model_type, 62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const string& inner_id) { 63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int field_number = GetSpecificsFieldNumberFromModelType(model_type); 64a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return base::StringPrintf("%d%s%s", 65a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) field_number, 66a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) kIdSeparator, 67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) inner_id.c_str()); 68a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 69a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 70a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// static 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdochstd::string FakeServerEntity::GetTopLevelId(const ModelType& model_type) { 72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return FakeServerEntity::CreateId( 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch model_type, 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch syncer::ModelTypeToRootTag(model_type)); 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// static 78a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)ModelType FakeServerEntity::GetModelTypeFromId(const string& id) { 79a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) vector<string> tokens; 80a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) size_t token_count = Tokenize(id, kIdSeparator, &tokens); 81a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 82a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int field_number; 83a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (token_count != 2 || !base::StringToInt(tokens[0], &field_number)) { 84a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return syncer::UNSPECIFIED; 85a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 86a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 87a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return syncer::GetModelTypeFromSpecificsFieldNumber(field_number); 88a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 89a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 90a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)FakeServerEntity::FakeServerEntity(const string& id, 91a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const ModelType& model_type, 92a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int64 version, 93a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const string& name) 94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch : model_type_(model_type), 95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch id_(id), 96a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) version_(version), 97a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) name_(name) {} 98a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 99a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void FakeServerEntity::SerializeBaseProtoFields( 100a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) sync_pb::SyncEntity* sync_entity) { 101a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // FakeServerEntity fields 102a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) sync_entity->set_id_string(id_); 103a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) sync_entity->set_version(version_); 104a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) sync_entity->set_name(name_); 105a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 106a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Data via accessors 107a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) sync_entity->set_deleted(IsDeleted()); 108a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) sync_entity->set_folder(IsFolder()); 109a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 110a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 111a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} // namespace fake_server 112