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