| OLD | NEW |
| 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 #include "sync/test/fake_server/fake_server.h" | 5 #include "sync/test/fake_server/fake_server.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <limits> | 8 #include <limits> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 142 | 142 |
| 143 return scoped_ptr<UpdateSieve>( | 143 return scoped_ptr<UpdateSieve>( |
| 144 new UpdateSieve(request_from_version, min_version)); | 144 new UpdateSieve(request_from_version, min_version)); |
| 145 } | 145 } |
| 146 | 146 |
| 147 } // namespace | 147 } // namespace |
| 148 | 148 |
| 149 FakeServer::FakeServer() : version_(0), | 149 FakeServer::FakeServer() : version_(0), |
| 150 store_birthday_(kDefaultStoreBirthday), | 150 store_birthday_(kDefaultStoreBirthday), |
| 151 authenticated_(true), | 151 authenticated_(true), |
| 152 error_type_(sync_pb::SyncEnums::SUCCESS) { | 152 error_type_(sync_pb::SyncEnums::SUCCESS), |
| 153 alternate_triggered_errors_(false), |
| 154 request_counter_(0) { |
| 153 keystore_keys_.push_back(kDefaultKeystoreKey); | 155 keystore_keys_.push_back(kDefaultKeystoreKey); |
| 154 CHECK(CreateDefaultPermanentItems()); | 156 CHECK(CreateDefaultPermanentItems()); |
| 155 } | 157 } |
| 156 | 158 |
| 157 FakeServer::~FakeServer() { | 159 FakeServer::~FakeServer() { |
| 158 STLDeleteContainerPairSecondPointers(entities_.begin(), entities_.end()); | 160 STLDeleteContainerPairSecondPointers(entities_.begin(), entities_.end()); |
| 159 } | 161 } |
| 160 | 162 |
| 161 bool FakeServer::CreateDefaultPermanentItems() { | 163 bool FakeServer::CreateDefaultPermanentItems() { |
| 162 ModelTypeSet all_types = syncer::ProtocolTypes(); | 164 ModelTypeSet all_types = syncer::ProtocolTypes(); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 211 } | 213 } |
| 212 | 214 |
| 213 void FakeServer::SaveEntity(FakeServerEntity* entity) { | 215 void FakeServer::SaveEntity(FakeServerEntity* entity) { |
| 214 delete entities_[entity->GetId()]; | 216 delete entities_[entity->GetId()]; |
| 215 entity->SetVersion(++version_); | 217 entity->SetVersion(++version_); |
| 216 entities_[entity->GetId()] = entity; | 218 entities_[entity->GetId()] = entity; |
| 217 } | 219 } |
| 218 | 220 |
| 219 void FakeServer::HandleCommand(const string& request, | 221 void FakeServer::HandleCommand(const string& request, |
| 220 const HandleCommandCallback& callback) { | 222 const HandleCommandCallback& callback) { |
| 223 request_counter_++; |
| 224 |
| 221 if (!authenticated_) { | 225 if (!authenticated_) { |
| 222 callback.Run(0, net::HTTP_UNAUTHORIZED, string()); | 226 callback.Run(0, net::HTTP_UNAUTHORIZED, string()); |
| 223 return; | 227 return; |
| 224 } | 228 } |
| 225 | 229 |
| 226 sync_pb::ClientToServerMessage message; | 230 sync_pb::ClientToServerMessage message; |
| 227 bool parsed = message.ParseFromString(request); | 231 bool parsed = message.ParseFromString(request); |
| 228 CHECK(parsed) << "Unable to parse the ClientToServerMessage."; | 232 CHECK(parsed) << "Unable to parse the ClientToServerMessage."; |
| 229 | 233 |
| 230 sync_pb::ClientToServerResponse response_proto; | 234 sync_pb::ClientToServerResponse response_proto; |
| 231 | 235 |
| 232 if (message.has_store_birthday() && | 236 if (message.has_store_birthday() && |
| 233 message.store_birthday() != store_birthday_) { | 237 message.store_birthday() != store_birthday_) { |
| 234 response_proto.set_error_code(sync_pb::SyncEnums::NOT_MY_BIRTHDAY); | 238 response_proto.set_error_code(sync_pb::SyncEnums::NOT_MY_BIRTHDAY); |
| 235 } else if (error_type_ != sync_pb::SyncEnums::SUCCESS) { | 239 } else if (error_type_ != sync_pb::SyncEnums::SUCCESS && |
| 240 ShouldSendTriggeredError()) { |
| 236 response_proto.set_error_code(error_type_); | 241 response_proto.set_error_code(error_type_); |
| 237 } else if (triggered_actionable_error_.get()) { | 242 } else if (triggered_actionable_error_.get() && ShouldSendTriggeredError()) { |
| 238 sync_pb::ClientToServerResponse_Error* error = | 243 sync_pb::ClientToServerResponse_Error* error = |
| 239 response_proto.mutable_error(); | 244 response_proto.mutable_error(); |
| 240 error->CopyFrom(*(triggered_actionable_error_.get())); | 245 error->CopyFrom(*(triggered_actionable_error_.get())); |
| 241 } else { | 246 } else { |
| 242 bool success = false; | 247 bool success = false; |
| 243 switch (message.message_contents()) { | 248 switch (message.message_contents()) { |
| 244 case sync_pb::ClientToServerMessage::GET_UPDATES: | 249 case sync_pb::ClientToServerMessage::GET_UPDATES: |
| 245 success = HandleGetUpdatesRequest(message.get_updates(), | 250 success = HandleGetUpdatesRequest(message.get_updates(), |
| 246 response_proto.mutable_get_updates()); | 251 response_proto.mutable_get_updates()); |
| 247 break; | 252 break; |
| (...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 498 } | 503 } |
| 499 | 504 |
| 500 void FakeServer::SetAuthenticated() { | 505 void FakeServer::SetAuthenticated() { |
| 501 authenticated_ = true; | 506 authenticated_ = true; |
| 502 } | 507 } |
| 503 | 508 |
| 504 void FakeServer::SetUnauthenticated() { | 509 void FakeServer::SetUnauthenticated() { |
| 505 authenticated_ = false; | 510 authenticated_ = false; |
| 506 } | 511 } |
| 507 | 512 |
| 508 void FakeServer::TriggerError(const sync_pb::SyncEnums::ErrorType& error_type) { | 513 bool FakeServer::TriggerError(const sync_pb::SyncEnums::ErrorType& error_type) { |
| 509 CHECK(!triggered_actionable_error_.get()) | 514 if (triggered_actionable_error_.get()) { |
| 510 << "Only one type of error can be triggered at any given time."; | 515 DVLOG(1) << "Only one type of error can be triggered at any given time."; |
| 516 return false; |
| 517 } |
| 518 |
| 511 error_type_ = error_type; | 519 error_type_ = error_type; |
| 520 return true; |
| 512 } | 521 } |
| 513 | 522 |
| 514 bool FakeServer::TriggerActionableError( | 523 bool FakeServer::TriggerActionableError( |
| 515 const sync_pb::SyncEnums::ErrorType& error_type, | 524 const sync_pb::SyncEnums::ErrorType& error_type, |
| 516 const string& description, | 525 const string& description, |
| 517 const string& url, | 526 const string& url, |
| 518 const sync_pb::SyncEnums::Action& action) { | 527 const sync_pb::SyncEnums::Action& action) { |
| 519 if (error_type_ != sync_pb::SyncEnums::SUCCESS) { | 528 if (error_type_ != sync_pb::SyncEnums::SUCCESS) { |
| 520 DVLOG(1) << "Only one type of error can be triggered at any given time."; | 529 DVLOG(1) << "Only one type of error can be triggered at any given time."; |
| 521 return false; | 530 return false; |
| 522 } | 531 } |
| 523 | 532 |
| 524 sync_pb::ClientToServerResponse_Error* error = | 533 sync_pb::ClientToServerResponse_Error* error = |
| 525 new sync_pb::ClientToServerResponse_Error(); | 534 new sync_pb::ClientToServerResponse_Error(); |
| 526 error->set_error_type(error_type); | 535 error->set_error_type(error_type); |
| 527 error->set_error_description(description); | 536 error->set_error_description(description); |
| 528 error->set_url(url); | 537 error->set_url(url); |
| 529 error->set_action(action); | 538 error->set_action(action); |
| 530 triggered_actionable_error_.reset(error); | 539 triggered_actionable_error_.reset(error); |
| 531 return true; | 540 return true; |
| 532 } | 541 } |
| 533 | 542 |
| 543 bool FakeServer::EnableAlternatingTriggeredErrors() { |
| 544 if (error_type_ == sync_pb::SyncEnums::SUCCESS && |
| 545 !triggered_actionable_error_.get()) { |
| 546 DVLOG(1) << "No triggered error set. Alternating can't be enabled."; |
| 547 return false; |
| 548 } |
| 549 |
| 550 alternate_triggered_errors_ = true; |
| 551 // Reset the counter so that the the first request yields a triggered error. |
| 552 request_counter_ = 0; |
| 553 return true; |
| 554 } |
| 555 |
| 556 bool FakeServer::ShouldSendTriggeredError() const { |
| 557 if (!alternate_triggered_errors_) |
| 558 return true; |
| 559 |
| 560 // Check that the counter is odd so that we trigger an error on the first |
| 561 // request after alternating is enabled. |
| 562 return request_counter_ % 2 != 0; |
| 563 } |
| 564 |
| 534 void FakeServer::AddObserver(Observer* observer) { | 565 void FakeServer::AddObserver(Observer* observer) { |
| 535 observers_.AddObserver(observer); | 566 observers_.AddObserver(observer); |
| 536 } | 567 } |
| 537 | 568 |
| 538 void FakeServer::RemoveObserver(Observer* observer) { | 569 void FakeServer::RemoveObserver(Observer* observer) { |
| 539 observers_.RemoveObserver(observer); | 570 observers_.RemoveObserver(observer); |
| 540 } | 571 } |
| 541 | 572 |
| 542 } // namespace fake_server | 573 } // namespace fake_server |
| OLD | NEW |