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

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

Issue 650463003: Improve error triggering in sync_integration_tests (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 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
« no previous file with comments | « sync/test/fake_server/fake_server.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #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
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
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
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
OLDNEW
« no previous file with comments | « sync/test/fake_server/fake_server.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698