test_trigger.cpp (94f71c5190b64bb47aa34cdce4eb4cca71d36faa) | test_trigger.cpp (b4ef22e4d365bde35a7fce7950033c9271c68ce7) |
---|---|
1#include "dbus_environment.hpp" 2#include "helpers.hpp" 3#include "mocks/json_storage_mock.hpp" | 1#include "dbus_environment.hpp" 2#include "helpers.hpp" 3#include "mocks/json_storage_mock.hpp" |
4#include "mocks/report_manager_mock.hpp" |
|
4#include "mocks/sensor_mock.hpp" 5#include "mocks/threshold_mock.hpp" 6#include "mocks/trigger_factory_mock.hpp" 7#include "mocks/trigger_manager_mock.hpp" 8#include "params/trigger_params.hpp" 9#include "trigger.hpp" 10#include "trigger_manager.hpp" 11#include "utils/conversion_trigger.hpp" --- 19 unchanged lines hidden (view full) --- 31 discrete::LabeledThresholdParam{ 32 "userId", discrete::Severity::warning, 33 Milliseconds(10).count(), "15.2"}, 34 discrete::LabeledThresholdParam{ 35 "userId_2", discrete::Severity::critical, 36 Milliseconds(5).count(), "32.7"}, 37 }); 38 | 5#include "mocks/sensor_mock.hpp" 6#include "mocks/threshold_mock.hpp" 7#include "mocks/trigger_factory_mock.hpp" 8#include "mocks/trigger_manager_mock.hpp" 9#include "params/trigger_params.hpp" 10#include "trigger.hpp" 11#include "trigger_manager.hpp" 12#include "utils/conversion_trigger.hpp" --- 19 unchanged lines hidden (view full) --- 32 discrete::LabeledThresholdParam{ 33 "userId", discrete::Severity::warning, 34 Milliseconds(10).count(), "15.2"}, 35 discrete::LabeledThresholdParam{ 36 "userId_2", discrete::Severity::critical, 37 Milliseconds(5).count(), "32.7"}, 38 }); 39 |
40 std::unique_ptr<ReportManagerMock> reportManagerMockPtr = 41 std::make_unique<NiceMock<ReportManagerMock>>(); |
|
39 std::unique_ptr<TriggerManagerMock> triggerManagerMockPtr = 40 std::make_unique<NiceMock<TriggerManagerMock>>(); 41 std::unique_ptr<TriggerFactoryMock> triggerFactoryMockPtr = 42 std::make_unique<NiceMock<TriggerFactoryMock>>(); 43 testing::NiceMock<StorageMock> storageMock; 44 std::vector<std::shared_ptr<interfaces::Threshold>> thresholdMocks; 45 std::unique_ptr<Trigger> sut; 46 --- 18 unchanged lines hidden (view full) --- 65 66 return std::make_unique<Trigger>( 67 DbusEnvironment::getIoc(), DbusEnvironment::getObjServer(), 68 params.id(), params.name(), params.triggerActions(), 69 std::make_shared<std::vector<std::string>>( 70 params.reportIds().begin(), params.reportIds().end()), 71 std::vector<std::shared_ptr<interfaces::Threshold>>(thresholdMocks), 72 *triggerManagerMockPtr, storageMock, *triggerFactoryMockPtr, | 42 std::unique_ptr<TriggerManagerMock> triggerManagerMockPtr = 43 std::make_unique<NiceMock<TriggerManagerMock>>(); 44 std::unique_ptr<TriggerFactoryMock> triggerFactoryMockPtr = 45 std::make_unique<NiceMock<TriggerFactoryMock>>(); 46 testing::NiceMock<StorageMock> storageMock; 47 std::vector<std::shared_ptr<interfaces::Threshold>> thresholdMocks; 48 std::unique_ptr<Trigger> sut; 49 --- 18 unchanged lines hidden (view full) --- 68 69 return std::make_unique<Trigger>( 70 DbusEnvironment::getIoc(), DbusEnvironment::getObjServer(), 71 params.id(), params.name(), params.triggerActions(), 72 std::make_shared<std::vector<std::string>>( 73 params.reportIds().begin(), params.reportIds().end()), 74 std::vector<std::shared_ptr<interfaces::Threshold>>(thresholdMocks), 75 *triggerManagerMockPtr, storageMock, *triggerFactoryMockPtr, |
73 SensorMock::makeSensorMocks(params.sensors())); | 76 SensorMock::makeSensorMocks(params.sensors()), 77 *reportManagerMockPtr); |
74 } 75 76 static interfaces::JsonStorage::FilePath to_file_path(std::string name) 77 { 78 return interfaces::JsonStorage::FilePath( 79 std::to_string(std::hash<std::string>{}(name))); 80 } 81 --- 45 unchanged lines hidden (view full) --- 127 getProperty<bool>(sut->getPath(), "Discrete"), 128 Eq(isTriggerThresholdDiscrete(triggerParams.thresholdParams()))); 129 EXPECT_THAT( 130 getProperty<TriggerThresholdParams>(sut->getPath(), "Thresholds"), 131 Eq(std::visit(utils::FromLabeledThresholdParamConversion(), 132 triggerParams.thresholdParams()))); 133} 134 | 78 } 79 80 static interfaces::JsonStorage::FilePath to_file_path(std::string name) 81 { 82 return interfaces::JsonStorage::FilePath( 83 std::to_string(std::hash<std::string>{}(name))); 84 } 85 --- 45 unchanged lines hidden (view full) --- 131 getProperty<bool>(sut->getPath(), "Discrete"), 132 Eq(isTriggerThresholdDiscrete(triggerParams.thresholdParams()))); 133 EXPECT_THAT( 134 getProperty<TriggerThresholdParams>(sut->getPath(), "Thresholds"), 135 Eq(std::visit(utils::FromLabeledThresholdParamConversion(), 136 triggerParams.thresholdParams()))); 137} 138 |
139TEST_F(TestTrigger, checkBasicGetters) 140{ 141 EXPECT_THAT(sut->getId(), Eq(triggerParams.id())); 142 EXPECT_THAT(sut->getPath(), Eq(Trigger::triggerDir + triggerParams.id())); 143 EXPECT_THAT(sut->getReportIds(), Eq(triggerParams.reportIds())); 144} 145 |
|
135TEST_F(TestTrigger, setPropertyNameToCorrectValue) 136{ 137 std::string name = "custom name 1234 %^#5"; 138 EXPECT_THAT(setProperty(sut->getPath(), "Name", name), 139 Eq(boost::system::errc::success)); 140 EXPECT_THAT(getProperty<std::string>(sut->getPath(), "Name"), Eq(name)); 141} 142 143TEST_F(TestTrigger, setPropertyReportNames) 144{ 145 std::vector<std::string> newNames = {"abc", "one", "two"}; 146 EXPECT_THAT(setProperty(sut->getPath(), "ReportNames", newNames), 147 Eq(boost::system::errc::success)); 148 EXPECT_THAT( 149 getProperty<std::vector<std::string>>(sut->getPath(), "ReportNames"), 150 Eq(newNames)); | 146TEST_F(TestTrigger, setPropertyNameToCorrectValue) 147{ 148 std::string name = "custom name 1234 %^#5"; 149 EXPECT_THAT(setProperty(sut->getPath(), "Name", name), 150 Eq(boost::system::errc::success)); 151 EXPECT_THAT(getProperty<std::string>(sut->getPath(), "Name"), Eq(name)); 152} 153 154TEST_F(TestTrigger, setPropertyReportNames) 155{ 156 std::vector<std::string> newNames = {"abc", "one", "two"}; 157 EXPECT_THAT(setProperty(sut->getPath(), "ReportNames", newNames), 158 Eq(boost::system::errc::success)); 159 EXPECT_THAT( 160 getProperty<std::vector<std::string>>(sut->getPath(), "ReportNames"), 161 Eq(newNames)); |
162 EXPECT_THAT( 163 getProperty<std::vector<std::string>>(sut->getPath(), "ReportNames"), 164 Eq(sut->getReportIds())); |
|
151} 152 | 165} 166 |
167TEST_F(TestTrigger, settingPropertyReportNamesUptadesTriggerIdsInReports) 168{ 169 std::vector<std::string> newPropertyVal = {"abc", "one", "two"}; 170 171 for (const auto& reportId : newPropertyVal) 172 { 173 EXPECT_CALL( 174 *reportManagerMockPtr, 175 updateTriggerIds(reportId, sut->getId(), TriggerIdUpdate::Add)); 176 } 177 for (const auto& reportId : triggerParams.reportIds()) 178 { 179 EXPECT_CALL( 180 *reportManagerMockPtr, 181 updateTriggerIds(reportId, sut->getId(), TriggerIdUpdate::Remove)); 182 } 183 184 EXPECT_THAT(setProperty(sut->getPath(), "ReportNames", newPropertyVal), 185 Eq(boost::system::errc::success)); 186} 187 188TEST_F(TestTrigger, settingPropertyReportNamesWillNotRemoveTriggerIdsInReports) 189{ 190 std::vector<std::string> newPropertyVal = triggerParams.reportIds(); 191 std::vector<std::string> newNames{"abc", "one", "two"}; 192 newPropertyVal.insert(newPropertyVal.end(), newNames.begin(), 193 newNames.end()); 194 195 for (const auto& reportId : newNames) 196 { 197 EXPECT_CALL( 198 *reportManagerMockPtr, 199 updateTriggerIds(reportId, sut->getId(), TriggerIdUpdate::Add)); 200 } 201 202 EXPECT_THAT(setProperty(sut->getPath(), "ReportNames", newPropertyVal), 203 Eq(boost::system::errc::success)); 204} 205 206TEST_F(TestTrigger, 207 settingPropertyReportNamesToSameValueWillNotUpdateTriggerIdsInReports) 208{ 209 std::vector<std::string> newPropertyVal = triggerParams.reportIds(); 210 211 EXPECT_CALL(*reportManagerMockPtr, updateTriggerIds(_, _, _)).Times(0); 212 213 EXPECT_THAT(setProperty(sut->getPath(), "ReportNames", newPropertyVal), 214 Eq(boost::system::errc::success)); 215} 216 217TEST_F(TestTrigger, 218 DISABLED_settingPropertyReportNamesThrowsExceptionWhenDuplicateReportIds) 219{ 220 std::vector<std::string> newPropertyVal{"trigger1", "trigger2", "trigger1"}; 221 222 EXPECT_CALL(*reportManagerMockPtr, updateTriggerIds(_, _, _)).Times(0); 223 224 EXPECT_THAT(setProperty(sut->getPath(), "ReportNames", newPropertyVal), 225 Eq(boost::system::errc::invalid_argument)); 226} 227 |
|
153TEST_F(TestTrigger, setPropertySensors) 154{ 155 EXPECT_CALL(*triggerFactoryMockPtr, updateSensors(_, _)); 156 for (const auto& threshold : thresholdMocks) 157 { 158 auto thresholdMockPtr = 159 std::dynamic_pointer_cast<NiceMock<ThresholdMock>>(threshold); 160 EXPECT_CALL(*thresholdMockPtr, updateSensors(_)); --- 65 unchanged lines hidden (view full) --- 226 Eq(base.at_label<utils::tstring::ThresholdValue>())); 227 } 228} 229 230TEST_F(TestTrigger, deleteTrigger) 231{ 232 EXPECT_CALL(storageMock, remove(to_file_path(sut->getId()))); 233 EXPECT_CALL(*triggerManagerMockPtr, removeTrigger(sut.get())); | 228TEST_F(TestTrigger, setPropertySensors) 229{ 230 EXPECT_CALL(*triggerFactoryMockPtr, updateSensors(_, _)); 231 for (const auto& threshold : thresholdMocks) 232 { 233 auto thresholdMockPtr = 234 std::dynamic_pointer_cast<NiceMock<ThresholdMock>>(threshold); 235 EXPECT_CALL(*thresholdMockPtr, updateSensors(_)); --- 65 unchanged lines hidden (view full) --- 301 Eq(base.at_label<utils::tstring::ThresholdValue>())); 302 } 303} 304 305TEST_F(TestTrigger, deleteTrigger) 306{ 307 EXPECT_CALL(storageMock, remove(to_file_path(sut->getId()))); 308 EXPECT_CALL(*triggerManagerMockPtr, removeTrigger(sut.get())); |
309 for (const auto& reportId : triggerParams.reportIds()) 310 { 311 EXPECT_CALL( 312 *reportManagerMockPtr, 313 updateTriggerIds(reportId, sut->getId(), TriggerIdUpdate::Remove)); 314 } |
|
234 auto ec = deleteTrigger(sut->getPath()); 235 EXPECT_THAT(ec, Eq(boost::system::errc::success)); 236} 237 238TEST_F(TestTrigger, deletingNonExistingTriggerReturnInvalidRequestDescriptor) 239{ 240 auto ec = deleteTrigger(Trigger::triggerDir + "NonExisting"s); 241 EXPECT_THAT(ec.value(), Eq(EBADR)); --- 5 unchanged lines hidden (view full) --- 247 248 bool persistent = false; 249 EXPECT_THAT(setProperty(sut->getPath(), "Persistent", persistent), 250 Eq(boost::system::errc::success)); 251 EXPECT_THAT(getProperty<bool>(sut->getPath(), "Persistent"), 252 Eq(persistent)); 253} 254 | 315 auto ec = deleteTrigger(sut->getPath()); 316 EXPECT_THAT(ec, Eq(boost::system::errc::success)); 317} 318 319TEST_F(TestTrigger, deletingNonExistingTriggerReturnInvalidRequestDescriptor) 320{ 321 auto ec = deleteTrigger(Trigger::triggerDir + "NonExisting"s); 322 EXPECT_THAT(ec.value(), Eq(EBADR)); --- 5 unchanged lines hidden (view full) --- 328 329 bool persistent = false; 330 EXPECT_THAT(setProperty(sut->getPath(), "Persistent", persistent), 331 Eq(boost::system::errc::success)); 332 EXPECT_THAT(getProperty<bool>(sut->getPath(), "Persistent"), 333 Eq(persistent)); 334} 335 |
255class TestTriggerErrors : public TestTrigger | 336class TestTriggerInitialization : public TestTrigger |
256{ 257 public: 258 void SetUp() override 259 {} 260 261 nlohmann::json storedConfiguration; 262}; 263 | 337{ 338 public: 339 void SetUp() override 340 {} 341 342 nlohmann::json storedConfiguration; 343}; 344 |
264TEST_F(TestTriggerErrors, exceptionDuringTriggerStoreDisablesPersistency) | 345TEST_F(TestTriggerInitialization, 346 exceptionDuringTriggerStoreDisablesPersistency) |
265{ 266 EXPECT_CALL(storageMock, store(_, _)) 267 .WillOnce(Throw(std::runtime_error("Generic error!"))); 268 269 sut = makeTrigger(triggerParams); 270 271 EXPECT_THAT(getProperty<bool>(sut->getPath(), "Persistent"), Eq(false)); 272} 273 | 347{ 348 EXPECT_CALL(storageMock, store(_, _)) 349 .WillOnce(Throw(std::runtime_error("Generic error!"))); 350 351 sut = makeTrigger(triggerParams); 352 353 EXPECT_THAT(getProperty<bool>(sut->getPath(), "Persistent"), Eq(false)); 354} 355 |
274TEST_F(TestTriggerErrors, creatingTriggerThrowsExceptionWhenIdIsInvalid) | 356TEST_F(TestTriggerInitialization, creatingTriggerThrowsExceptionWhenIdIsInvalid) |
275{ 276 EXPECT_CALL(storageMock, store(_, _)).Times(0); 277 278 EXPECT_THROW(makeTrigger(triggerParams.id("inv?lidId")), 279 sdbusplus::exception::SdBusError); 280} 281 | 357{ 358 EXPECT_CALL(storageMock, store(_, _)).Times(0); 359 360 EXPECT_THROW(makeTrigger(triggerParams.id("inv?lidId")), 361 sdbusplus::exception::SdBusError); 362} 363 |
364TEST_F(TestTriggerInitialization, creatingTriggerUpdatesTriggersIdsInReports) 365{ 366 for (const auto& reportId : triggerParams.reportIds()) 367 { 368 EXPECT_CALL(*reportManagerMockPtr, 369 updateTriggerIds(reportId, triggerParams.id(), 370 TriggerIdUpdate::Add)); 371 } 372 373 sut = makeTrigger(triggerParams); 374} 375 |
|
282class TestTriggerStore : public TestTrigger 283{ 284 public: 285 nlohmann::json storedConfiguration; 286 nlohmann::json storedDiscreteConfiguration; 287 std::unique_ptr<Trigger> sutDiscrete; 288 289 void SetUp() override --- 90 unchanged lines hidden --- | 376class TestTriggerStore : public TestTrigger 377{ 378 public: 379 nlohmann::json storedConfiguration; 380 nlohmann::json storedDiscreteConfiguration; 381 std::unique_ptr<Trigger> sutDiscrete; 382 383 void SetUp() override --- 90 unchanged lines hidden --- |