// Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "remoting/host/backoff_timer.h" #include "base/timer/mock_timer.h" #include "testing/gtest/include/gtest/gtest.h" namespace remoting { namespace { void IncrementCounter(int* counter) { ++(*counter); } } // namespace TEST(BackoffTimer, Basic) { base::MockTimer* mock_timer = new base::MockTimer(false, false); BackoffTimer backoff_timer; backoff_timer.SetTimerForTest(make_scoped_ptr(mock_timer)); ASSERT_FALSE(backoff_timer.IsRunning()); int counter = 0; backoff_timer.Start(FROM_HERE, base::TimeDelta::FromMilliseconds(10), base::TimeDelta::FromMilliseconds(50), base::Bind(&IncrementCounter, &counter)); ASSERT_TRUE(backoff_timer.IsRunning()); ASSERT_EQ(0, counter); ASSERT_NEAR(0, mock_timer->GetCurrentDelay().InMillisecondsF(), 1); mock_timer->Fire(); ASSERT_TRUE(backoff_timer.IsRunning()); ASSERT_EQ(1, counter); EXPECT_NEAR(10, mock_timer->GetCurrentDelay().InMillisecondsF(), 1); mock_timer->Fire(); ASSERT_TRUE(backoff_timer.IsRunning()); ASSERT_EQ(2, counter); EXPECT_NEAR(20, mock_timer->GetCurrentDelay().InMillisecondsF(), 1); mock_timer->Fire(); ASSERT_TRUE(backoff_timer.IsRunning()); ASSERT_EQ(3, counter); EXPECT_NEAR(40, mock_timer->GetCurrentDelay().InMillisecondsF(), 1); mock_timer->Fire(); ASSERT_TRUE(backoff_timer.IsRunning()); ASSERT_EQ(4, counter); EXPECT_NEAR(50, mock_timer->GetCurrentDelay().InMillisecondsF(), 1); mock_timer->Fire(); ASSERT_TRUE(backoff_timer.IsRunning()); ASSERT_EQ(5, counter); EXPECT_NEAR(50, mock_timer->GetCurrentDelay().InMillisecondsF(), 1); backoff_timer.Stop(); ASSERT_FALSE(backoff_timer.IsRunning()); } } // namespace remoting