blob: 935590e0d428cc612a2700828c828802c0b7b2e0 [file] [log] [blame]
#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"), "");
}
}
}