1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- // Copyright 2019 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 "chromeos/dbus/power/native_timer.h"
- #include <memory>
- #include <utility>
- #include "base/memory/ptr_util.h"
- #include "base/run_loop.h"
- #include "base/test/task_environment.h"
- #include "chromeos/dbus/power/fake_power_manager_client.h"
- #include "chromeos/dbus/power/power_manager_client.h"
- #include "testing/gtest/include/gtest/gtest.h"
- namespace chromeos {
- class NativeTimerTest : public testing::Test {
- public:
- NativeTimerTest()
- : task_environment_(base::test::TaskEnvironment::MainThreadType::IO,
- base::test::TaskEnvironment::TimeSource::MOCK_TIME) {}
- NativeTimerTest(const NativeTimerTest&) = delete;
- NativeTimerTest& operator=(const NativeTimerTest&) = delete;
- ~NativeTimerTest() override = default;
- // testing::Test:
- void SetUp() override {
- PowerManagerClient::InitializeFake();
- FakePowerManagerClient::Get()->set_tick_clock(
- task_environment_.GetMockTickClock());
- }
- void TearDown() override { PowerManagerClient::Shutdown(); }
- protected:
- // Returns true iff |Start| on |timer| succeeds and timer expiration occurs
- // too. The underlying fake power manager implementation expires the timer
- bool CheckStartTimerAndExpiration(NativeTimer* timer, base::TimeDelta delay) {
- base::RunLoop start_timer_loop;
- base::RunLoop expiration_loop;
- bool start_timer_result = false;
- bool expiration_result = false;
- timer->Start(task_environment_.GetMockTickClock()->NowTicks() + delay,
- base::BindOnce([](bool* result_out) { *result_out = true; },
- &expiration_result),
- base::BindOnce([](bool* result_out,
- bool result) { *result_out = result; },
- &start_timer_result));
- // Both starting the timer and timer firing should succeed.
- task_environment_.FastForwardBy(delay);
- if (!start_timer_result)
- return false;
- return expiration_result;
- }
- base::test::TaskEnvironment task_environment_;
- };
- TEST_F(NativeTimerTest, CheckCreateFailure) {
- // Create the timer. It queues async operations; enclose it in a run loop.
- // This should fail internally as an empty tag is provided.
- base::RunLoop create_timer_loop;
- NativeTimer timer("");
- create_timer_loop.RunUntilIdle();
- // Starting the timer should fail as timer creation failed.
- EXPECT_FALSE(CheckStartTimerAndExpiration(&timer, base::Milliseconds(1000)));
- }
- TEST_F(NativeTimerTest, CheckCreateAndStartTimer) {
- // Create the timer. It queues async operations; enclose it in a run loop.
- base::RunLoop create_timer_loop;
- NativeTimer timer("Assistant");
- create_timer_loop.RunUntilIdle();
- // Start timer and check if starting the timer and its expiration succeeded.
- EXPECT_TRUE(CheckStartTimerAndExpiration(&timer, base::Milliseconds(1000)));
- // Start another timer and check if starting the timer and its expiration
- // succeeded.
- EXPECT_TRUE(CheckStartTimerAndExpiration(&timer, base::Milliseconds(1000)));
- }
- } // namespace chromeos
|