| // Copyright 2019 The Chromium OS 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 <memory> |
| |
| #include <base/macros.h> |
| #include <gmock/gmock.h> |
| #include <gtest/gtest.h> |
| #include <power_manager/proto_bindings/power_supply_properties.pb.h> |
| #include <power_manager/proto_bindings/suspend.pb.h> |
| |
| #include "diagnostics/common/system/fake_powerd_adapter.h" |
| #include "diagnostics/wilco_dtc_supportd/telemetry/powerd_event_service.h" |
| #include "diagnostics/wilco_dtc_supportd/telemetry/powerd_event_service_impl.h" |
| |
| using ::testing::StrictMock; |
| |
| using PowerEventType = |
| diagnostics::PowerdEventService::Observer::PowerEventType; |
| |
| namespace diagnostics { |
| |
| namespace { |
| |
| class MockPowerdEventServiceObserver : public PowerdEventService::Observer { |
| public: |
| MOCK_METHOD(void, OnPowerdEvent, (PowerEventType), (override)); |
| }; |
| |
| } // namespace |
| |
| class PowerdEventServiceImplTest : public ::testing::Test { |
| public: |
| PowerdEventServiceImplTest() = default; |
| |
| void SetUp() override { |
| service_ = std::make_unique<PowerdEventServiceImpl>(&fake_powerd_adapter_); |
| service_->AddObserver(&observer_); |
| EXPECT_TRUE(fake_powerd_adapter_.HasPowerObserver(service_.get())); |
| } |
| |
| void TearDown() override { |
| service_->RemoveObserver(&observer_); |
| service_.reset(); |
| EXPECT_FALSE(fake_powerd_adapter_.HasPowerObserver(service_.get())); |
| } |
| |
| protected: |
| FakePowerdAdapter fake_powerd_adapter_; |
| |
| StrictMock<MockPowerdEventServiceObserver> observer_; |
| |
| std::unique_ptr<PowerdEventServiceImpl> service_; |
| |
| private: |
| DISALLOW_COPY_AND_ASSIGN(PowerdEventServiceImplTest); |
| }; |
| |
| TEST_F(PowerdEventServiceImplTest, OnPowerSupplyPollSignal) { |
| power_manager::PowerSupplyProperties power_supply; |
| |
| // Do not receive power event, because |power_supply| does not have |
| // |external_power| field. |
| fake_powerd_adapter_.EmitPowerSupplyPollSignal(power_supply); |
| |
| EXPECT_CALL(observer_, OnPowerdEvent(PowerEventType::kAcInsert)); |
| power_supply.set_external_power(power_manager::PowerSupplyProperties::AC); |
| fake_powerd_adapter_.EmitPowerSupplyPollSignal(power_supply); |
| |
| EXPECT_CALL(observer_, OnPowerdEvent(PowerEventType::kAcRemove)); |
| power_supply.set_external_power( |
| power_manager::PowerSupplyProperties::DISCONNECTED); |
| fake_powerd_adapter_.EmitPowerSupplyPollSignal(power_supply); |
| |
| EXPECT_CALL(observer_, OnPowerdEvent(PowerEventType::kAcInsert)); |
| power_supply.set_external_power(power_manager::PowerSupplyProperties::USB); |
| fake_powerd_adapter_.EmitPowerSupplyPollSignal(power_supply); |
| |
| // Do not receive the same power event twice in a row. |
| fake_powerd_adapter_.EmitPowerSupplyPollSignal(power_supply); |
| |
| // Do not receive the same power event twice in a row. |
| fake_powerd_adapter_.EmitPowerSupplyPollSignal(power_supply); |
| } |
| |
| TEST_F(PowerdEventServiceImplTest, OnSuspendImminentSignal) { |
| const power_manager::SuspendImminent kSuspendImminent; |
| EXPECT_CALL(observer_, OnPowerdEvent(PowerEventType::kOsSuspend)); |
| fake_powerd_adapter_.EmitSuspendImminentSignal(kSuspendImminent); |
| } |
| |
| TEST_F(PowerdEventServiceImplTest, OnDarkSuspendImminentSignal) { |
| const power_manager::SuspendImminent kSuspendImminent; |
| EXPECT_CALL(observer_, OnPowerdEvent(PowerEventType::kOsSuspend)); |
| fake_powerd_adapter_.EmitDarkSuspendImminentSignal(kSuspendImminent); |
| } |
| |
| TEST_F(PowerdEventServiceImplTest, OnSuspendDoneSignal) { |
| const power_manager::SuspendDone kSuspendDone; |
| EXPECT_CALL(observer_, OnPowerdEvent(PowerEventType::kOsResume)); |
| fake_powerd_adapter_.EmitSuspendDoneSignal(kSuspendDone); |
| } |
| |
| } // namespace diagnostics |