123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// found in the LICENSE file. 423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "components/domain_reliability/util.h" 623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "base/bind.h" 823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "components/domain_reliability/test_util.h" 923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 1023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace domain_reliability { 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace { 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)using base::TimeDelta; 1523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)using base::TimeTicks; 1623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 1723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)class DomainReliabilityMockTimeTest : public testing::Test { 1823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) protected: 1923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) MockTime time_; 2023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}; 2123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 220de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles)TEST_F(DomainReliabilityMockTimeTest, Create) { 2323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 2423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 2523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)TEST_F(DomainReliabilityMockTimeTest, NowAndAdvance) { 2623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const TimeDelta delta = TimeDelta::FromSeconds(1); 2723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 28a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch TimeTicks initial = time_.NowTicks(); 2923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) time_.Advance(delta); 30a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch TimeTicks final = time_.NowTicks(); 3123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_EQ(delta, final - initial); 3223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 3323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 3423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)TEST_F(DomainReliabilityMockTimeTest, AddTask) { 3523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const TimeDelta delta = TimeDelta::FromSeconds(1); 3623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) TestCallback callback; 3723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 3823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) time_.AddTask(2 * delta, callback.callback()); 3923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) time_.Advance(delta); 4023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_FALSE(callback.called()); 4123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) time_.Advance(delta); 4223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_TRUE(callback.called()); 4323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 4423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 4523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)TEST_F(DomainReliabilityMockTimeTest, TimerCreate) { 4623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) scoped_ptr<MockTime::Timer> timer(time_.CreateTimer()); 4723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 4823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 4923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)TEST_F(DomainReliabilityMockTimeTest, TimerIsRunning) { 5023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const TimeDelta delta = TimeDelta::FromSeconds(1); 5123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) TestCallback callback; 5223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 5323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) scoped_ptr<MockTime::Timer> timer(time_.CreateTimer()); 5423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_FALSE(timer->IsRunning()); 5523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) timer->Start(FROM_HERE, delta, callback.callback()); 5623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_TRUE(timer->IsRunning()); 5723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) timer->Stop(); 5823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_FALSE(timer->IsRunning()); 5923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 6023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 6123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)TEST_F(DomainReliabilityMockTimeTest, TimerGoesOff) { 6223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const TimeDelta delta = TimeDelta::FromSeconds(1); 6323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) TestCallback callback; 6423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 6523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) scoped_ptr<MockTime::Timer> timer(time_.CreateTimer()); 6623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 6723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) timer->Start(FROM_HERE, 2 * delta, callback.callback()); 6823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) time_.Advance(delta); 6923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_FALSE(callback.called()); 7023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) time_.Advance(delta); 7123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_TRUE(callback.called()); 7223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 7323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 7423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)TEST_F(DomainReliabilityMockTimeTest, TimerStopped) { 7523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const TimeDelta delta = TimeDelta::FromSeconds(1); 7623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) TestCallback callback; 7723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 7823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) scoped_ptr<MockTime::Timer> timer(time_.CreateTimer()); 7923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 8023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) timer->Start(FROM_HERE, 2 * delta, callback.callback()); 8123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) time_.Advance(delta); 8223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) timer->Stop(); 8323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) time_.Advance(delta); 8423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_FALSE(callback.called()); 8523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 8623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 8723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)TEST_F(DomainReliabilityMockTimeTest, TimerRestarted) { 8823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const TimeDelta delta = TimeDelta::FromSeconds(1); 8923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) TestCallback callback; 9023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 9123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) scoped_ptr<MockTime::Timer> timer(time_.CreateTimer()); 9223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 9323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) timer->Start(FROM_HERE, 2 * delta, callback.callback()); 9423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) time_.Advance(delta); 9523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) timer->Start(FROM_HERE, 2 * delta, callback.callback()); 9623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) time_.Advance(delta); 9723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_FALSE(callback.called()); 9823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) time_.Advance(delta); 9923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_TRUE(callback.called()); 10023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 10123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 10223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)TEST_F(DomainReliabilityMockTimeTest, TimerReentrantStart) { 10323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const TimeDelta delta = TimeDelta::FromSeconds(1); 10423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) scoped_ptr<MockTime::Timer> timer(time_.CreateTimer()); 10523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) TestCallback callback; 10623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 10723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) timer->Start( 10823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) FROM_HERE, 10923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) delta, 11023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) base::Bind( 11123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) &MockTime::Timer::Start, 11223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) base::Unretained(timer.get()), 11323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) FROM_HERE, 11423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) delta, 11523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) callback.callback())); 11623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) time_.Advance(delta); 11723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_FALSE(callback.called()); 11823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_TRUE(timer->IsRunning()); 11923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) time_.Advance(delta); 12023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_TRUE(callback.called()); 12123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_FALSE(timer->IsRunning()); 12223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} 12323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 124cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace 12523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} // namespace domain_reliability 126