1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_SYNC_TEST_INTEGRATION_RETRY_VERIFIER_H_ 6 #define CHROME_BROWSER_SYNC_TEST_INTEGRATION_RETRY_VERIFIER_H_ 7 8 #include "base/time/time.h" 9 10 namespace syncer { 11 namespace sessions { 12 class SyncSessionSnapshot; 13 } // namespace sessions 14 } // namespace syncer 15 16 // The minimum and maximum wait times for a retry. The actual retry would take 17 // place somewhere in this range. The algorithm that calculates the retry wait 18 // time uses rand functions. 19 struct DelayInfo { 20 int64 min_delay; 21 int64 max_delay; 22 }; 23 24 // Class to verify retries take place using the exponential backoff algorithm. 25 class RetryVerifier { 26 public: 27 static const int kMaxRetry = 3; 28 RetryVerifier(); 29 ~RetryVerifier(); 30 int retry_count() const { return retry_count_; } 31 32 // Initialize with the current sync session snapshot. Using the snapshot 33 // we will figure out when the first retry sync happened. 34 void Initialize(const syncer::sessions::SyncSessionSnapshot& snap); 35 void VerifyRetryInterval( 36 const syncer::sessions::SyncSessionSnapshot& snap); 37 bool done() const { return done_; } 38 bool Succeeded() const { return done() && success_; } 39 40 private: 41 int retry_count_; 42 base::Time last_sync_time_; 43 DelayInfo delay_table_[kMaxRetry]; 44 bool success_; 45 bool done_; 46 DISALLOW_COPY_AND_ASSIGN(RetryVerifier); 47 }; 48 49 #endif // CHROME_BROWSER_SYNC_TEST_INTEGRATION_RETRY_VERIFIER_H_ 50