blob: 2fd55a50bcecadeba6e1a3c56f9c79cd04b9f8ac [file] [log] [blame]
#include <sdbusplus/bus.hpp>
#include <gtest/gtest.h>
#include "bmc_epoch.hpp"
#include "config.h"
#include "types.hpp"
namespace phosphor
{
namespace time
{
using namespace std::chrono;
class TestBmcEpoch : public testing::Test
{
public:
sdbusplus::bus::bus bus;
BmcEpoch bmcEpoch;
TestBmcEpoch()
: bus(sdbusplus::bus::new_default()),
bmcEpoch(bus, OBJPATH_BMC)
{
// Empty
}
// Proxies for BmcEpoch's private members and functions
Mode getTimeMode()
{
return bmcEpoch.timeMode;
}
Owner getTimeOwner()
{
return bmcEpoch.timeOwner;
}
void setTimeOwner(Owner owner)
{
bmcEpoch.timeOwner = owner;
}
void setTimeMode(Mode mode)
{
bmcEpoch.timeMode = mode;
}
};
TEST_F(TestBmcEpoch, empty)
{
EXPECT_EQ(Mode::NTP, getTimeMode());
EXPECT_EQ(Owner::BMC, getTimeOwner());
}
TEST_F(TestBmcEpoch, getElapsed)
{
auto t1 = bmcEpoch.elapsed();
EXPECT_NE(0, t1);
auto t2 = bmcEpoch.elapsed();
EXPECT_GE(t2, t1);
}
TEST_F(TestBmcEpoch, setElapsedNotAllowed)
{
auto epochNow = duration_cast<microseconds>(
system_clock::now().time_since_epoch()).count();
// In NTP mode, setting time is not allowed
auto ret = bmcEpoch.elapsed(epochNow);
EXPECT_EQ(0, ret);
// In Host owner, setting time is not allowed
setTimeMode(Mode::MANUAL);
setTimeOwner(Owner::HOST);
ret = bmcEpoch.elapsed(epochNow);
EXPECT_EQ(0, ret);
}
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
}
}
}