blob: f05b86363956c33c55c67c56c74f415a2ebac424 [file] [log] [blame]
Lei YU415b9642017-02-09 11:37:26 +08001#include <sdbusplus/bus.hpp>
2#include <gtest/gtest.h>
3
4#include "types.hpp"
5#include "manager.hpp"
Lei YUa5003ce2017-02-24 15:35:25 +08006#include "mocked_property_change_listener.hpp"
7
8using ::testing::_;
Lei YU415b9642017-02-09 11:37:26 +08009
10namespace phosphor
11{
12namespace time
13{
14
15class TestManager : public testing::Test
16{
17 public:
18 sdbusplus::bus::bus bus;
19 Manager manager;
Lei YUa5003ce2017-02-24 15:35:25 +080020 MockPropertyChangeListner listener1;
21 MockPropertyChangeListner listener2;
Lei YU415b9642017-02-09 11:37:26 +080022
23 TestManager()
24 : bus(sdbusplus::bus::new_default()),
25 manager(bus)
26 {
Lei YUa5003ce2017-02-24 15:35:25 +080027 // Add two mocked listeners so that we can test
28 // the behavior related to listeners
29 manager.addListener(&listener1);
30 manager.addListener(&listener2);
Lei YU415b9642017-02-09 11:37:26 +080031 }
32
33 // Proxies for Manager's private members and functions
34 Mode getTimeMode()
35 {
36 return manager.timeMode;
37 }
38 Owner getTimeOwner()
39 {
40 return manager.timeOwner;
41 }
Lei YU7f4fca52017-02-23 15:15:51 +080042 bool hostOn()
43 {
44 return manager.hostOn;
45 }
46 std::string getRequestedMode()
47 {
48 return manager.requestedMode;
49 }
50 std::string getRequestedOwner()
51 {
52 return manager.requestedOwner;
53 }
54 void notifyPropertyChanged(const std::string& key,
55 const std::string& value)
56 {
57 manager.onPropertyChanged(key, value);
58 }
59 void notifyPgoodChanged(bool pgood)
60 {
61 manager.onPgoodChanged(pgood);
62 }
Lei YU415b9642017-02-09 11:37:26 +080063};
64
Lei YUddd54422017-04-18 16:38:44 +080065TEST_F(TestManager, DISABLED_empty)
Lei YU415b9642017-02-09 11:37:26 +080066{
Lei YU7f4fca52017-02-23 15:15:51 +080067 EXPECT_FALSE(hostOn());
68 EXPECT_EQ("", getRequestedMode());
69 EXPECT_EQ("", getRequestedOwner());
Lei YU415b9642017-02-09 11:37:26 +080070 EXPECT_EQ(Mode::NTP, getTimeMode());
71 EXPECT_EQ(Owner::BMC, getTimeOwner());
72}
73
Lei YU415b9642017-02-09 11:37:26 +080074
Lei YUddd54422017-04-18 16:38:44 +080075TEST_F(TestManager, DISABLED_pgoodChange)
Lei YU7f4fca52017-02-23 15:15:51 +080076{
77 notifyPgoodChanged(true);
78 EXPECT_TRUE(hostOn());
79 notifyPgoodChanged(false);
80 EXPECT_FALSE(hostOn());
81}
82
Lei YUddd54422017-04-18 16:38:44 +080083TEST_F(TestManager, DISABLED_propertyChanged)
Lei YU7f4fca52017-02-23 15:15:51 +080084{
85 // When host is off, property change will be notified to listners
86 EXPECT_FALSE(hostOn());
Lei YUa5003ce2017-02-24 15:35:25 +080087
88 // Check mocked listeners shall receive notifications on property changed
89 EXPECT_CALL(listener1, onModeChanged(Mode::MANUAL)).Times(1);
90 EXPECT_CALL(listener1, onOwnerChanged(Owner::HOST)).Times(1);
91 EXPECT_CALL(listener2, onModeChanged(Mode::MANUAL)).Times(1);
92 EXPECT_CALL(listener2, onOwnerChanged(Owner::HOST)).Times(1);
93
Lei YU7f4fca52017-02-23 15:15:51 +080094 notifyPropertyChanged("time_mode", "MANUAL");
95 notifyPropertyChanged("time_owner", "HOST");
Lei YUa5003ce2017-02-24 15:35:25 +080096
Lei YU7f4fca52017-02-23 15:15:51 +080097 EXPECT_EQ("", getRequestedMode());
98 EXPECT_EQ("", getRequestedOwner());
Lei YU7f4fca52017-02-23 15:15:51 +080099
Lei YU7f4fca52017-02-23 15:15:51 +0800100 // When host is on, property changes are saved as requested ones
Lei YUa5003ce2017-02-24 15:35:25 +0800101 notifyPgoodChanged(true);
102
103 // Check mocked listeners shall not receive notifications
104 EXPECT_CALL(listener1, onModeChanged(Mode::MANUAL)).Times(0);
105 EXPECT_CALL(listener1, onOwnerChanged(Owner::HOST)).Times(0);
106 EXPECT_CALL(listener2, onModeChanged(Mode::MANUAL)).Times(0);
107 EXPECT_CALL(listener2, onOwnerChanged(Owner::HOST)).Times(0);
108
109 notifyPropertyChanged("time_mode", "NTP");
110 notifyPropertyChanged("time_owner", "SPLIT");
111
112 EXPECT_EQ("NTP", getRequestedMode());
113 EXPECT_EQ("SPLIT", getRequestedOwner());
Lei YU7f4fca52017-02-23 15:15:51 +0800114
115
116 // When host becomes off, the requested mode/owner shall be notified
117 // to listners, and be cleared
Lei YUa5003ce2017-02-24 15:35:25 +0800118 EXPECT_CALL(listener1, onModeChanged(Mode::NTP)).Times(1);
119 EXPECT_CALL(listener1, onOwnerChanged(Owner::SPLIT)).Times(1);
120 EXPECT_CALL(listener2, onModeChanged(Mode::NTP)).Times(1);
121 EXPECT_CALL(listener2, onOwnerChanged(Owner::SPLIT)).Times(1);
122
Lei YU7f4fca52017-02-23 15:15:51 +0800123 notifyPgoodChanged(false);
Lei YUa5003ce2017-02-24 15:35:25 +0800124
Lei YU7f4fca52017-02-23 15:15:51 +0800125 EXPECT_EQ("", getRequestedMode());
126 EXPECT_EQ("", getRequestedOwner());
127
128 // When host is on, and invalid property is changed,
129 // verify the code asserts because it shall never occur
130 notifyPgoodChanged(true);
131 ASSERT_DEATH(notifyPropertyChanged("invalid property", "whatever"), "");
132}
133
Lei YUddd54422017-04-18 16:38:44 +0800134TEST_F(TestManager, DISABLED_propertyChangedAndChangedbackWhenHostOn)
Lei YUa5003ce2017-02-24 15:35:25 +0800135{
136 // Property is now MANUAL/HOST
137 notifyPropertyChanged("time_mode", "MANUAL");
138 notifyPropertyChanged("time_owner", "HOST");
139
140 // Set host on
141 notifyPgoodChanged(true);
142
143 // Check mocked listeners shall not receive notifications
144 EXPECT_CALL(listener1, onModeChanged(_)).Times(0);
145 EXPECT_CALL(listener1, onOwnerChanged(_)).Times(0);
146 EXPECT_CALL(listener2, onModeChanged(_)).Times(0);
147 EXPECT_CALL(listener2, onOwnerChanged(_)).Times(0);
148
149 notifyPropertyChanged("time_mode", "NTP");
150 notifyPropertyChanged("time_owner", "SPLIT");
151
152 // Saved as requested mode/owner
153 EXPECT_EQ("NTP", getRequestedMode());
154 EXPECT_EQ("SPLIT", getRequestedOwner());
155
156 // Property changed back to MANUAL/HOST
157 notifyPropertyChanged("time_mode", "MANUAL");
158 notifyPropertyChanged("time_owner", "HOST");
159
160 // Requested mode/owner shall be updated
161 EXPECT_EQ("MANUAL", getRequestedMode());
162 EXPECT_EQ("HOST", getRequestedOwner());
163
164 // Because the latest mode/owner is the same as when host is off,
165 // The listeners shall not be notified, and requested mode/owner
166 // shall be cleared
167 EXPECT_CALL(listener1, onModeChanged(_)).Times(0);
168 EXPECT_CALL(listener1, onOwnerChanged(_)).Times(0);
169 EXPECT_CALL(listener2, onModeChanged(_)).Times(0);
170 EXPECT_CALL(listener2, onOwnerChanged(_)).Times(0);
171
172 notifyPgoodChanged(false);
173
174 EXPECT_EQ("", getRequestedMode());
175 EXPECT_EQ("", getRequestedOwner());
176}
177
Lei YUa7417132017-02-23 15:24:05 +0800178// TODO: if gmock is ready, add case to test
179// updateNtpSetting() and updateNetworkSetting()
180
Lei YU415b9642017-02-09 11:37:26 +0800181}
182}