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