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
3// found in the LICENSE file.
4
5#include "components/domain_reliability/dispatcher.h"
6
7#include "base/bind.h"
8#include "components/domain_reliability/test_util.h"
9#include "testing/gtest/include/gtest/gtest.h"
10
11namespace domain_reliability {
12namespace {
13
14using base::TimeDelta;
15using base::TimeTicks;
16
17class DomainReliabilityDispatcherTest : public testing::Test {
18 public:
19  DomainReliabilityDispatcherTest() : dispatcher_(&time_) {}
20
21 protected:
22  MockTime time_;
23  DomainReliabilityDispatcher dispatcher_;
24};
25
26TEST_F(DomainReliabilityDispatcherTest, Create) {
27}
28
29TEST_F(DomainReliabilityDispatcherTest, TaskDoesntRunEarly) {
30  TimeDelta delay = TimeDelta::FromSeconds(1);
31  TestCallback callback;
32
33  dispatcher_.ScheduleTask(callback.callback(), 2 * delay, 3 * delay);
34  time_.Advance(delay);
35  dispatcher_.RunEligibleTasks();
36  EXPECT_FALSE(callback.called());
37}
38
39TEST_F(DomainReliabilityDispatcherTest, TaskRunsWhenEligible) {
40  TimeDelta delay = TimeDelta::FromSeconds(1);
41  TestCallback callback;
42
43  dispatcher_.ScheduleTask(callback.callback(), 2 * delay, 3 * delay);
44  time_.Advance(2 * delay);
45  EXPECT_FALSE(callback.called());
46  dispatcher_.RunEligibleTasks();
47  EXPECT_TRUE(callback.called());
48  time_.Advance(delay);
49}
50
51TEST_F(DomainReliabilityDispatcherTest, TaskRunsAtDeadline) {
52  TimeDelta delay = TimeDelta::FromSeconds(1);
53  TestCallback callback;
54
55  dispatcher_.ScheduleTask(callback.callback(), 2 * delay, 3 * delay);
56  time_.Advance(2 * delay);
57  EXPECT_FALSE(callback.called());
58  time_.Advance(delay);
59  EXPECT_TRUE(callback.called());
60}
61
62}  // namespace
63}  // namespace domain_reliability
64