xref: /openbmc/phosphor-time-manager/test/TestBmcEpoch.cpp (revision 3c2f44962c163668272c473ddfb9c35bf8774570)
1 #include "config.h"
2 
3 #include "bmc_epoch.hpp"
4 #include "types.hpp"
5 
6 #include <memory>
7 #include <sdbusplus/bus.hpp>
8 
9 #include <gtest/gtest.h>
10 
11 namespace phosphor
12 {
13 namespace time
14 {
15 
16 using namespace std::chrono;
17 
18 class TestBmcEpoch : public testing::Test
19 {
20   public:
21     sdbusplus::bus::bus bus;
22     sd_event* event;
23     std::unique_ptr<BmcEpoch> bmcEpoch;
24 
25     TestBmcEpoch() : bus(sdbusplus::bus::new_default())
26     {
27         // BmcEpoch requires sd_event to init
28         sd_event_default(&event);
29         bus.attach_event(event, SD_EVENT_PRIORITY_NORMAL);
30         bmcEpoch = std::make_unique<BmcEpoch>(bus, OBJPATH_BMC);
31     }
32 
33     ~TestBmcEpoch()
34     {
35         bus.detach_event();
36         sd_event_unref(event);
37     }
38 
39     // Proxies for BmcEpoch's private members and functions
40     Mode getTimeMode()
41     {
42         return bmcEpoch->timeMode;
43     }
44     void setTimeMode(Mode mode)
45     {
46         bmcEpoch->timeMode = mode;
47     }
48     void triggerTimeChange()
49     {
50         bmcEpoch->onTimeChange(nullptr, -1, 0, bmcEpoch.get());
51     }
52 };
53 
54 TEST_F(TestBmcEpoch, empty)
55 {
56     // Default mode is MANUAL
57     EXPECT_EQ(Mode::Manual, getTimeMode());
58 }
59 
60 TEST_F(TestBmcEpoch, getElapsed)
61 {
62     auto t1 = bmcEpoch->elapsed();
63     EXPECT_NE(0, t1);
64     auto t2 = bmcEpoch->elapsed();
65     EXPECT_GE(t2, t1);
66 }
67 
68 TEST_F(TestBmcEpoch, setElapsedOK)
69 {
70     // TODO: setting time will call sd-bus functions and it will fail on host
71     // if we have gmock for sdbusplus::bus, we can test setElapsed.
72     // But for now we can not test it
73 }
74 
75 } // namespace time
76 } // namespace phosphor
77