blob: a5fdb33c09e81664478b1ce299793359cd9f5542 [file] [log] [blame]
#include "config.h"
#include "bmc_epoch.hpp"
#include "types.hpp"
#include <sdbusplus/bus.hpp>
#include <memory>
#include <gtest/gtest.h>
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> 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<BmcEpoch>(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