| #include <sdbusplus/bus.hpp> |
| #include <gtest/gtest.h> |
| |
| #include "types.hpp" |
| #include "manager.hpp" |
| |
| namespace phosphor |
| { |
| namespace time |
| { |
| |
| class TestManager : public testing::Test |
| { |
| public: |
| sdbusplus::bus::bus bus; |
| Manager manager; |
| |
| TestManager() |
| : bus(sdbusplus::bus::new_default()), |
| manager(bus) |
| { |
| // Empty |
| } |
| |
| // Proxies for Manager's private members and functions |
| Mode getTimeMode() |
| { |
| return manager.timeMode; |
| } |
| Owner getTimeOwner() |
| { |
| return manager.timeOwner; |
| } |
| Mode convertToMode(const std::string& mode) |
| { |
| return Manager::convertToMode(mode); |
| } |
| Owner convertToOwner(const std::string& owner) |
| { |
| return Manager::convertToOwner(owner); |
| } |
| bool hostOn() |
| { |
| return manager.hostOn; |
| } |
| std::string getRequestedMode() |
| { |
| return manager.requestedMode; |
| } |
| std::string getRequestedOwner() |
| { |
| return manager.requestedOwner; |
| } |
| void notifyPropertyChanged(const std::string& key, |
| const std::string& value) |
| { |
| manager.onPropertyChanged(key, value); |
| } |
| void notifyPgoodChanged(bool pgood) |
| { |
| manager.onPgoodChanged(pgood); |
| } |
| }; |
| |
| TEST_F(TestManager, empty) |
| { |
| EXPECT_FALSE(hostOn()); |
| EXPECT_EQ("", getRequestedMode()); |
| EXPECT_EQ("", getRequestedOwner()); |
| EXPECT_EQ(Mode::NTP, getTimeMode()); |
| EXPECT_EQ(Owner::BMC, getTimeOwner()); |
| } |
| |
| TEST_F(TestManager, convertToMode) |
| { |
| EXPECT_EQ(Mode::NTP, convertToMode("NTP")); |
| EXPECT_EQ(Mode::MANUAL, convertToMode("MANUAL")); |
| |
| // All unrecognized strings are mapped to Ntp |
| EXPECT_EQ(Mode::NTP, convertToMode("")); |
| EXPECT_EQ(Mode::NTP, convertToMode("Manual")); |
| EXPECT_EQ(Mode::NTP, convertToMode("whatever")); |
| } |
| |
| |
| TEST_F(TestManager, convertToOwner) |
| { |
| EXPECT_EQ(Owner::BMC, convertToOwner("BMC")); |
| EXPECT_EQ(Owner::HOST, convertToOwner("HOST")); |
| EXPECT_EQ(Owner::SPLIT, convertToOwner("SPLIT")); |
| EXPECT_EQ(Owner::BOTH, convertToOwner("BOTH")); |
| |
| // All unrecognized strings are mapped to Bmc |
| EXPECT_EQ(Owner::BMC, convertToOwner("")); |
| EXPECT_EQ(Owner::BMC, convertToOwner("Split")); |
| EXPECT_EQ(Owner::BMC, convertToOwner("xyz")); |
| } |
| |
| TEST_F(TestManager, pgoodChange) |
| { |
| notifyPgoodChanged(true); |
| EXPECT_TRUE(hostOn()); |
| notifyPgoodChanged(false); |
| EXPECT_FALSE(hostOn()); |
| } |
| |
| TEST_F(TestManager, propertyChange) |
| { |
| // When host is off, property change will be notified to listners |
| EXPECT_FALSE(hostOn()); |
| notifyPropertyChanged("time_mode", "MANUAL"); |
| notifyPropertyChanged("time_owner", "HOST"); |
| EXPECT_EQ("", getRequestedMode()); |
| EXPECT_EQ("", getRequestedOwner()); |
| // TODO: if gmock is ready, check mocked listners shall receive notifies |
| |
| notifyPgoodChanged(true); |
| // When host is on, property changes are saved as requested ones |
| notifyPropertyChanged("time_mode", "MANUAL"); |
| notifyPropertyChanged("time_owner", "HOST"); |
| EXPECT_EQ("MANUAL", getRequestedMode()); |
| EXPECT_EQ("HOST", getRequestedOwner()); |
| |
| |
| // When host becomes off, the requested mode/owner shall be notified |
| // to listners, and be cleared |
| notifyPgoodChanged(false); |
| // TODO: if gmock is ready, check mocked listners shall receive notifies |
| EXPECT_EQ("", getRequestedMode()); |
| EXPECT_EQ("", getRequestedOwner()); |
| |
| // When host is on, and invalid property is changed, |
| // verify the code asserts because it shall never occur |
| notifyPgoodChanged(true); |
| ASSERT_DEATH(notifyPropertyChanged("invalid property", "whatever"), ""); |
| } |
| |
| } |
| } |