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 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 network_enabled_(true) { | 155 network_enabled_(true) { |
154 keystore_keys_.push_back(kDefaultKeystoreKey); | 156 keystore_keys_.push_back(kDefaultKeystoreKey); |
155 CHECK(CreateDefaultPermanentItems()); | 157 CHECK(CreateDefaultPermanentItems()); |
156 } | 158 } |
157 | 159 |
158 FakeServer::~FakeServer() { | 160 FakeServer::~FakeServer() { |
159 STLDeleteContainerPairSecondPointers(entities_.begin(), entities_.end()); | 161 STLDeleteContainerPairSecondPointers(entities_.begin(), entities_.end()); |
160 } | 162 } |
161 | 163 |
162 bool FakeServer::CreateDefaultPermanentItems() { | 164 bool FakeServer::CreateDefaultPermanentItems() { |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
216 entity->SetVersion(++version_); | 218 entity->SetVersion(++version_); |
217 entities_[entity->GetId()] = entity; | 219 entities_[entity->GetId()] = entity; |
218 } | 220 } |
219 | 221 |
220 void FakeServer::HandleCommand(const string& request, | 222 void FakeServer::HandleCommand(const string& request, |
221 const HandleCommandCallback& callback) { | 223 const HandleCommandCallback& callback) { |
222 if (!network_enabled_) { | 224 if (!network_enabled_) { |
223 callback.Run(net::ERR_FAILED, net::ERR_FAILED, string()); | 225 callback.Run(net::ERR_FAILED, net::ERR_FAILED, string()); |
224 return; | 226 return; |
225 } | 227 } |
| 228 request_counter_++; |
226 | 229 |
227 if (!authenticated_) { | 230 if (!authenticated_) { |
228 callback.Run(0, net::HTTP_UNAUTHORIZED, string()); | 231 callback.Run(0, net::HTTP_UNAUTHORIZED, string()); |
229 return; | 232 return; |
230 } | 233 } |
231 | 234 |
232 sync_pb::ClientToServerMessage message; | 235 sync_pb::ClientToServerMessage message; |
233 bool parsed = message.ParseFromString(request); | 236 bool parsed = message.ParseFromString(request); |
234 CHECK(parsed) << "Unable to parse the ClientToServerMessage."; | 237 CHECK(parsed) << "Unable to parse the ClientToServerMessage."; |
235 | 238 |
236 sync_pb::ClientToServerResponse response_proto; | 239 sync_pb::ClientToServerResponse response_proto; |
237 | 240 |
238 if (message.has_store_birthday() && | 241 if (message.has_store_birthday() && |
239 message.store_birthday() != store_birthday_) { | 242 message.store_birthday() != store_birthday_) { |
240 response_proto.set_error_code(sync_pb::SyncEnums::NOT_MY_BIRTHDAY); | 243 response_proto.set_error_code(sync_pb::SyncEnums::NOT_MY_BIRTHDAY); |
241 } else if (error_type_ != sync_pb::SyncEnums::SUCCESS) { | 244 } else if (error_type_ != sync_pb::SyncEnums::SUCCESS && |
| 245 ShouldSendTriggeredError()) { |
242 response_proto.set_error_code(error_type_); | 246 response_proto.set_error_code(error_type_); |
243 } else if (triggered_actionable_error_.get()) { | 247 } else if (triggered_actionable_error_.get() && ShouldSendTriggeredError()) { |
244 sync_pb::ClientToServerResponse_Error* error = | 248 sync_pb::ClientToServerResponse_Error* error = |
245 response_proto.mutable_error(); | 249 response_proto.mutable_error(); |
246 error->CopyFrom(*(triggered_actionable_error_.get())); | 250 error->CopyFrom(*(triggered_actionable_error_.get())); |
247 } else { | 251 } else { |
248 bool success = false; | 252 bool success = false; |
249 switch (message.message_contents()) { | 253 switch (message.message_contents()) { |
250 case sync_pb::ClientToServerMessage::GET_UPDATES: | 254 case sync_pb::ClientToServerMessage::GET_UPDATES: |
251 success = HandleGetUpdatesRequest(message.get_updates(), | 255 success = HandleGetUpdatesRequest(message.get_updates(), |
252 response_proto.mutable_get_updates()); | 256 response_proto.mutable_get_updates()); |
253 break; | 257 break; |
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
504 } | 508 } |
505 | 509 |
506 void FakeServer::SetAuthenticated() { | 510 void FakeServer::SetAuthenticated() { |
507 authenticated_ = true; | 511 authenticated_ = true; |
508 } | 512 } |
509 | 513 |
510 void FakeServer::SetUnauthenticated() { | 514 void FakeServer::SetUnauthenticated() { |
511 authenticated_ = false; | 515 authenticated_ = false; |
512 } | 516 } |
513 | 517 |
514 void FakeServer::TriggerError(const sync_pb::SyncEnums::ErrorType& error_type) { | 518 bool FakeServer::TriggerError(const sync_pb::SyncEnums::ErrorType& error_type) { |
515 CHECK(!triggered_actionable_error_.get()) | 519 if (triggered_actionable_error_.get()) { |
516 << "Only one type of error can be triggered at any given time."; | 520 DVLOG(1) << "Only one type of error can be triggered at any given time."; |
| 521 return false; |
| 522 } |
| 523 |
517 error_type_ = error_type; | 524 error_type_ = error_type; |
| 525 return true; |
518 } | 526 } |
519 | 527 |
520 bool FakeServer::TriggerActionableError( | 528 bool FakeServer::TriggerActionableError( |
521 const sync_pb::SyncEnums::ErrorType& error_type, | 529 const sync_pb::SyncEnums::ErrorType& error_type, |
522 const string& description, | 530 const string& description, |
523 const string& url, | 531 const string& url, |
524 const sync_pb::SyncEnums::Action& action) { | 532 const sync_pb::SyncEnums::Action& action) { |
525 if (error_type_ != sync_pb::SyncEnums::SUCCESS) { | 533 if (error_type_ != sync_pb::SyncEnums::SUCCESS) { |
526 DVLOG(1) << "Only one type of error can be triggered at any given time."; | 534 DVLOG(1) << "Only one type of error can be triggered at any given time."; |
527 return false; | 535 return false; |
528 } | 536 } |
529 | 537 |
530 sync_pb::ClientToServerResponse_Error* error = | 538 sync_pb::ClientToServerResponse_Error* error = |
531 new sync_pb::ClientToServerResponse_Error(); | 539 new sync_pb::ClientToServerResponse_Error(); |
532 error->set_error_type(error_type); | 540 error->set_error_type(error_type); |
533 error->set_error_description(description); | 541 error->set_error_description(description); |
534 error->set_url(url); | 542 error->set_url(url); |
535 error->set_action(action); | 543 error->set_action(action); |
536 triggered_actionable_error_.reset(error); | 544 triggered_actionable_error_.reset(error); |
537 return true; | 545 return true; |
538 } | 546 } |
539 | 547 |
| 548 bool FakeServer::EnableAlternatingTriggeredErrors() { |
| 549 if (error_type_ == sync_pb::SyncEnums::SUCCESS && |
| 550 !triggered_actionable_error_.get()) { |
| 551 DVLOG(1) << "No triggered error set. Alternating can't be enabled."; |
| 552 return false; |
| 553 } |
| 554 |
| 555 alternate_triggered_errors_ = true; |
| 556 // Reset the counter so that the the first request yields a triggered error. |
| 557 request_counter_ = 0; |
| 558 return true; |
| 559 } |
| 560 |
| 561 bool FakeServer::ShouldSendTriggeredError() const { |
| 562 if (!alternate_triggered_errors_) |
| 563 return true; |
| 564 |
| 565 // Check that the counter is odd so that we trigger an error on the first |
| 566 // request after alternating is enabled. |
| 567 return request_counter_ % 2 != 0; |
| 568 } |
| 569 |
540 void FakeServer::AddObserver(Observer* observer) { | 570 void FakeServer::AddObserver(Observer* observer) { |
541 observers_.AddObserver(observer); | 571 observers_.AddObserver(observer); |
542 } | 572 } |
543 | 573 |
544 void FakeServer::RemoveObserver(Observer* observer) { | 574 void FakeServer::RemoveObserver(Observer* observer) { |
545 observers_.RemoveObserver(observer); | 575 observers_.RemoveObserver(observer); |
546 } | 576 } |
547 | 577 |
548 void FakeServer::EnableNetwork() { | 578 void FakeServer::EnableNetwork() { |
549 network_enabled_ = true; | 579 network_enabled_ = true; |
550 } | 580 } |
551 | 581 |
552 void FakeServer::DisableNetwork() { | 582 void FakeServer::DisableNetwork() { |
553 network_enabled_ = false; | 583 network_enabled_ = false; |
554 } | 584 } |
555 | 585 |
556 } // namespace fake_server | 586 } // namespace fake_server |
OLD | NEW |