1 #include <sdbusplus/bus.hpp> 2 #include <gtest/gtest.h> 3 4 #include "types.hpp" 5 #include "manager.hpp" 6 7 namespace phosphor 8 { 9 namespace time 10 { 11 12 class TestManager : public testing::Test 13 { 14 public: 15 sdbusplus::bus::bus bus; 16 Manager manager; 17 18 TestManager() 19 : bus(sdbusplus::bus::new_default()), 20 manager(bus) 21 { 22 // Empty 23 } 24 25 // Proxies for Manager's private members and functions 26 Mode getTimeMode() 27 { 28 return manager.timeMode; 29 } 30 Owner getTimeOwner() 31 { 32 return manager.timeOwner; 33 } 34 Mode convertToMode(const std::string& mode) 35 { 36 return Manager::convertToMode(mode); 37 } 38 Owner convertToOwner(const std::string& owner) 39 { 40 return Manager::convertToOwner(owner); 41 } 42 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 } 63 }; 64 65 TEST_F(TestManager, empty) 66 { 67 EXPECT_FALSE(hostOn()); 68 EXPECT_EQ("", getRequestedMode()); 69 EXPECT_EQ("", getRequestedOwner()); 70 EXPECT_EQ(Mode::NTP, getTimeMode()); 71 EXPECT_EQ(Owner::BMC, getTimeOwner()); 72 } 73 74 TEST_F(TestManager, convertToMode) 75 { 76 EXPECT_EQ(Mode::NTP, convertToMode("NTP")); 77 EXPECT_EQ(Mode::MANUAL, convertToMode("MANUAL")); 78 79 // All unrecognized strings are mapped to Ntp 80 EXPECT_EQ(Mode::NTP, convertToMode("")); 81 EXPECT_EQ(Mode::NTP, convertToMode("Manual")); 82 EXPECT_EQ(Mode::NTP, convertToMode("whatever")); 83 } 84 85 86 TEST_F(TestManager, convertToOwner) 87 { 88 EXPECT_EQ(Owner::BMC, convertToOwner("BMC")); 89 EXPECT_EQ(Owner::HOST, convertToOwner("HOST")); 90 EXPECT_EQ(Owner::SPLIT, convertToOwner("SPLIT")); 91 EXPECT_EQ(Owner::BOTH, convertToOwner("BOTH")); 92 93 // All unrecognized strings are mapped to Bmc 94 EXPECT_EQ(Owner::BMC, convertToOwner("")); 95 EXPECT_EQ(Owner::BMC, convertToOwner("Split")); 96 EXPECT_EQ(Owner::BMC, convertToOwner("xyz")); 97 } 98 99 TEST_F(TestManager, pgoodChange) 100 { 101 notifyPgoodChanged(true); 102 EXPECT_TRUE(hostOn()); 103 notifyPgoodChanged(false); 104 EXPECT_FALSE(hostOn()); 105 } 106 107 TEST_F(TestManager, propertyChange) 108 { 109 // When host is off, property change will be notified to listners 110 EXPECT_FALSE(hostOn()); 111 notifyPropertyChanged("time_mode", "MANUAL"); 112 notifyPropertyChanged("time_owner", "HOST"); 113 EXPECT_EQ("", getRequestedMode()); 114 EXPECT_EQ("", getRequestedOwner()); 115 // TODO: if gmock is ready, check mocked listners shall receive notifies 116 117 notifyPgoodChanged(true); 118 // When host is on, property changes are saved as requested ones 119 notifyPropertyChanged("time_mode", "MANUAL"); 120 notifyPropertyChanged("time_owner", "HOST"); 121 EXPECT_EQ("MANUAL", getRequestedMode()); 122 EXPECT_EQ("HOST", getRequestedOwner()); 123 124 125 // When host becomes off, the requested mode/owner shall be notified 126 // to listners, and be cleared 127 notifyPgoodChanged(false); 128 // TODO: if gmock is ready, check mocked listners shall receive notifies 129 EXPECT_EQ("", getRequestedMode()); 130 EXPECT_EQ("", getRequestedOwner()); 131 132 // When host is on, and invalid property is changed, 133 // verify the code asserts because it shall never occur 134 notifyPgoodChanged(true); 135 ASSERT_DEATH(notifyPropertyChanged("invalid property", "whatever"), ""); 136 } 137 138 // TODO: if gmock is ready, add case to test 139 // updateNtpSetting() and updateNetworkSetting() 140 141 } 142 } 143