blob: ea73398f85d5faee9da53834cd072cf07614f8f1 [file] [log] [blame]
// 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