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/util.h"
6 
7 #include "base/bind.h"
8 #include "base/location.h"
9 #include "components/domain_reliability/test_util.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11 
12 namespace domain_reliability {
13 namespace {
14 
15 using base::TimeDelta;
16 using base::TimeTicks;
17 
18 class DomainReliabilityMockTimeTest : public testing::Test {
19  protected:
20   MockTime time_;
21 };
22 
TEST_F(DomainReliabilityMockTimeTest,Create)23 TEST_F(DomainReliabilityMockTimeTest, Create) {
24 }
25 
TEST_F(DomainReliabilityMockTimeTest,NowAndAdvance)26 TEST_F(DomainReliabilityMockTimeTest, NowAndAdvance) {
27   const TimeDelta delta = TimeDelta::FromSeconds(1);
28 
29   TimeTicks initial = time_.NowTicks();
30   time_.Advance(delta);
31   TimeTicks final = time_.NowTicks();
32   EXPECT_EQ(delta, final - initial);
33 }
34 
TEST_F(DomainReliabilityMockTimeTest,AddTask)35 TEST_F(DomainReliabilityMockTimeTest, AddTask) {
36   const TimeDelta delta = TimeDelta::FromSeconds(1);
37   TestCallback callback;
38 
39   time_.AddTask(2 * delta, callback.callback());
40   time_.Advance(delta);
41   EXPECT_FALSE(callback.called());
42   time_.Advance(delta);
43   EXPECT_TRUE(callback.called());
44 }
45 
TEST_F(DomainReliabilityMockTimeTest,TimerCreate)46 TEST_F(DomainReliabilityMockTimeTest, TimerCreate) {
47   std::unique_ptr<MockTime::Timer> timer(time_.CreateTimer());
48 }
49 
TEST_F(DomainReliabilityMockTimeTest,TimerIsRunning)50 TEST_F(DomainReliabilityMockTimeTest, TimerIsRunning) {
51   const TimeDelta delta = TimeDelta::FromSeconds(1);
52   TestCallback callback;
53 
54   std::unique_ptr<MockTime::Timer> timer(time_.CreateTimer());
55   EXPECT_FALSE(timer->IsRunning());
56   timer->Start(FROM_HERE, delta, callback.callback());
57   EXPECT_TRUE(timer->IsRunning());
58   timer->Stop();
59   EXPECT_FALSE(timer->IsRunning());
60 }
61 
TEST_F(DomainReliabilityMockTimeTest,TimerGoesOff)62 TEST_F(DomainReliabilityMockTimeTest, TimerGoesOff) {
63   const TimeDelta delta = TimeDelta::FromSeconds(1);
64   TestCallback callback;
65 
66   std::unique_ptr<MockTime::Timer> timer(time_.CreateTimer());
67 
68   timer->Start(FROM_HERE, 2 * delta, callback.callback());
69   time_.Advance(delta);
70   EXPECT_FALSE(callback.called());
71   time_.Advance(delta);
72   EXPECT_TRUE(callback.called());
73 }
74 
TEST_F(DomainReliabilityMockTimeTest,TimerStopped)75 TEST_F(DomainReliabilityMockTimeTest, TimerStopped) {
76   const TimeDelta delta = TimeDelta::FromSeconds(1);
77   TestCallback callback;
78 
79   std::unique_ptr<MockTime::Timer> timer(time_.CreateTimer());
80 
81   timer->Start(FROM_HERE, 2 * delta, callback.callback());
82   time_.Advance(delta);
83   timer->Stop();
84   time_.Advance(delta);
85   EXPECT_FALSE(callback.called());
86 }
87 
TEST_F(DomainReliabilityMockTimeTest,TimerRestarted)88 TEST_F(DomainReliabilityMockTimeTest, TimerRestarted) {
89   const TimeDelta delta = TimeDelta::FromSeconds(1);
90   TestCallback callback;
91 
92   std::unique_ptr<MockTime::Timer> timer(time_.CreateTimer());
93 
94   timer->Start(FROM_HERE, 2 * delta, callback.callback());
95   time_.Advance(delta);
96   timer->Start(FROM_HERE, 2 * delta, callback.callback());
97   time_.Advance(delta);
98   EXPECT_FALSE(callback.called());
99   time_.Advance(delta);
100   EXPECT_TRUE(callback.called());
101 }
102 
TEST_F(DomainReliabilityMockTimeTest,TimerReentrantStart)103 TEST_F(DomainReliabilityMockTimeTest, TimerReentrantStart) {
104   const TimeDelta delta = TimeDelta::FromSeconds(1);
105   std::unique_ptr<MockTime::Timer> timer(time_.CreateTimer());
106   TestCallback callback;
107 
108   timer->Start(
109       FROM_HERE, delta,
110       base::BindOnce(&MockTime::Timer::Start, base::Unretained(timer.get()),
111                      FROM_HERE, delta, callback.callback()));
112   time_.Advance(delta);
113   EXPECT_FALSE(callback.called());
114   EXPECT_TRUE(timer->IsRunning());
115   time_.Advance(delta);
116   EXPECT_TRUE(callback.called());
117   EXPECT_FALSE(timer->IsRunning());
118 }
119 
120 }  // namespace
121 }  // namespace domain_reliability
122