#include "config.h" #include "bmc_epoch.hpp" #include "types.hpp" #include #include #include namespace phosphor { namespace time { using namespace std::chrono; class TestBmcEpoch : public testing::Test { public: sdbusplus::bus_t bus; sd_event* event; std::unique_ptr bmcEpoch; TestBmcEpoch() : bus(sdbusplus::bus::new_default()) { // BmcEpoch requires sd_event to init sd_event_default(&event); bus.attach_event(event, SD_EVENT_PRIORITY_NORMAL); bmcEpoch = std::make_unique(bus, OBJPATH_BMC); } ~TestBmcEpoch() { bus.detach_event(); sd_event_unref(event); } // Proxies for BmcEpoch's private members and functions Mode getTimeMode() { return bmcEpoch->timeMode; } void setTimeMode(Mode mode) { bmcEpoch->timeMode = mode; } void triggerTimeChange() { bmcEpoch->onTimeChange(nullptr, -1, 0, bmcEpoch.get()); } }; TEST_F(TestBmcEpoch, onModeChange) { bmcEpoch->onModeChanged(Mode::NTP); EXPECT_EQ(Mode::NTP, getTimeMode()); bmcEpoch->onModeChanged(Mode::Manual); EXPECT_EQ(Mode::Manual, getTimeMode()); } TEST_F(TestBmcEpoch, empty) { // Default mode is MANUAL EXPECT_EQ(Mode::Manual, getTimeMode()); } TEST_F(TestBmcEpoch, getElapsed) { auto t1 = bmcEpoch->elapsed(); EXPECT_NE(0, t1); auto t2 = bmcEpoch->elapsed(); EXPECT_GE(t2, t1); } TEST_F(TestBmcEpoch, setElapsedOK) { // TODO: setting time will call sd-bus functions and it will fail on host // if we have gmock for sdbusplus::bus, we can test setElapsed. // But for now we can not test it } } // namespace time } // namespace phosphor