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
10namespace syncer {
11namespace sessions {
12class 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.
19struct DelayInfo {
20  int64 min_delay;
21  int64 max_delay;
22};
23
24// Class to verify retries take place using the exponential backoff algorithm.
25class 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