Index: sync/test/fake_server/fake_server.cc |
diff --git a/sync/test/fake_server/fake_server.cc b/sync/test/fake_server/fake_server.cc |
index 6981632f0b8e2df3b11f309a128e252a68d5e0e7..74637035cdb45f20dd451bde950c055005e58982 100644 |
--- a/sync/test/fake_server/fake_server.cc |
+++ b/sync/test/fake_server/fake_server.cc |
@@ -150,6 +150,8 @@ FakeServer::FakeServer() : version_(0), |
store_birthday_(kDefaultStoreBirthday), |
authenticated_(true), |
error_type_(sync_pb::SyncEnums::SUCCESS), |
+ alternate_triggered_errors_(false), |
+ request_counter_(0), |
network_enabled_(true) { |
keystore_keys_.push_back(kDefaultKeystoreKey); |
CHECK(CreateDefaultPermanentItems()); |
@@ -223,6 +225,7 @@ void FakeServer::HandleCommand(const string& request, |
callback.Run(net::ERR_FAILED, net::ERR_FAILED, string()); |
return; |
} |
+ request_counter_++; |
if (!authenticated_) { |
callback.Run(0, net::HTTP_UNAUTHORIZED, string()); |
@@ -238,9 +241,10 @@ void FakeServer::HandleCommand(const string& request, |
if (message.has_store_birthday() && |
message.store_birthday() != store_birthday_) { |
response_proto.set_error_code(sync_pb::SyncEnums::NOT_MY_BIRTHDAY); |
- } else if (error_type_ != sync_pb::SyncEnums::SUCCESS) { |
+ } else if (error_type_ != sync_pb::SyncEnums::SUCCESS && |
+ ShouldSendTriggeredError()) { |
response_proto.set_error_code(error_type_); |
- } else if (triggered_actionable_error_.get()) { |
+ } else if (triggered_actionable_error_.get() && ShouldSendTriggeredError()) { |
sync_pb::ClientToServerResponse_Error* error = |
response_proto.mutable_error(); |
error->CopyFrom(*(triggered_actionable_error_.get())); |
@@ -511,10 +515,14 @@ void FakeServer::SetUnauthenticated() { |
authenticated_ = false; |
} |
-void FakeServer::TriggerError(const sync_pb::SyncEnums::ErrorType& error_type) { |
- CHECK(!triggered_actionable_error_.get()) |
- << "Only one type of error can be triggered at any given time."; |
+bool FakeServer::TriggerError(const sync_pb::SyncEnums::ErrorType& error_type) { |
+ if (triggered_actionable_error_.get()) { |
+ DVLOG(1) << "Only one type of error can be triggered at any given time."; |
+ return false; |
+ } |
+ |
error_type_ = error_type; |
+ return true; |
} |
bool FakeServer::TriggerActionableError( |
@@ -537,6 +545,28 @@ bool FakeServer::TriggerActionableError( |
return true; |
} |
+bool FakeServer::EnableAlternatingTriggeredErrors() { |
+ if (error_type_ == sync_pb::SyncEnums::SUCCESS && |
+ !triggered_actionable_error_.get()) { |
+ DVLOG(1) << "No triggered error set. Alternating can't be enabled."; |
+ return false; |
+ } |
+ |
+ alternate_triggered_errors_ = true; |
+ // Reset the counter so that the the first request yields a triggered error. |
+ request_counter_ = 0; |
+ return true; |
+} |
+ |
+bool FakeServer::ShouldSendTriggeredError() const { |
+ if (!alternate_triggered_errors_) |
+ return true; |
+ |
+ // Check that the counter is odd so that we trigger an error on the first |
+ // request after alternating is enabled. |
+ return request_counter_ % 2 != 0; |
+} |
+ |
void FakeServer::AddObserver(Observer* observer) { |
observers_.AddObserver(observer); |
} |