Home | History | Annotate | Download | only in integration
      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