diff --git a/lib/icinga/downtime.hpp b/lib/icinga/downtime.hpp index 8be69826f..03f2cdc64 100644 --- a/lib/icinga/downtime.hpp +++ b/lib/icinga/downtime.hpp @@ -47,6 +47,7 @@ public: bool IsInEffect() const; bool IsTriggered() const; bool IsExpired() const; + bool CanBeTriggered(); bool HasValidConfigOwner() const; static void StaticInitialize(); @@ -93,8 +94,6 @@ private: Timer::Ptr m_CleanupTimer; - bool CanBeTriggered(); - void SetupCleanupTimer(); static void DowntimesStartTimerHandler(); diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index c87679b08..c52784fd9 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -82,6 +82,7 @@ set(base_test_SOURCES config-ops.cpp icinga-checkresult.cpp icinga-dependencies.cpp + icinga-downtime.cpp icinga-legacytimeperiod.cpp icinga-macros.cpp icinga-notification.cpp @@ -239,6 +240,13 @@ add_boost_test(base icinga_dependencies/default_redundancy_group_registration_unregistration icinga_dependencies/simple_redundancy_group_registration_unregistration icinga_dependencies/mixed_redundancy_group_registration_unregsitration + icinga_downtime/canbetriggered_fixed + icinga_downtime/canbetriggered_flexible + icinga_downtime/canbetriggered_inactive + icinga_downtime/canbetriggered_removed + icinga_downtime/canbetriggered_triggered + icinga_downtime/canbetriggered_expired + icinga_downtime/canbetriggered_tooearly icinga_notification/strings icinga_notification/state_filter icinga_notification/type_filter diff --git a/test/icinga-downtime.cpp b/test/icinga-downtime.cpp new file mode 100644 index 000000000..b2ffa3c99 --- /dev/null +++ b/test/icinga-downtime.cpp @@ -0,0 +1,70 @@ +/* Icinga 2 | (c) 2023 Icinga GmbH | GPLv2+ */ + +#include "base/utility.hpp" +#include "icinga/downtime.hpp" +#include + +using namespace icinga; + +static void CanBeTriggeredHelper( + bool active, bool fixed, double relStart, double relEnd, double duration, Value relTriggered, Value relRemoved, bool canBeTriggered +) +{ + Downtime::Ptr dt = new Downtime(); + auto now (Utility::GetTime()); + + dt->SetActive(active, true); + dt->SetFixed(fixed, true); + dt->SetStartTime(now + relStart, true); + dt->SetEndTime(now + relEnd, true); + dt->SetDuration(duration, true); + + if (!relTriggered.IsEmpty()) { + dt->SetTriggerTime(now + relTriggered, true); + } + + if (!relRemoved.IsEmpty()) { + dt->SetRemoveTime(now + relRemoved, true); + } + + BOOST_CHECK(dt->CanBeTriggered() == canBeTriggered); +} + +BOOST_AUTO_TEST_SUITE(icinga_downtime) + +BOOST_AUTO_TEST_CASE(canbetriggered_fixed) +{ + CanBeTriggeredHelper(true, true, -2, 8, 0, Empty, Empty, true); +} + +BOOST_AUTO_TEST_CASE(canbetriggered_flexible) +{ + CanBeTriggeredHelper(true, false, -2, 8, 20, Empty, Empty, true); +} + +BOOST_AUTO_TEST_CASE(canbetriggered_inactive) +{ + CanBeTriggeredHelper(false, true, -2, 8, 0, Empty, Empty, false); +} + +BOOST_AUTO_TEST_CASE(canbetriggered_removed) +{ + CanBeTriggeredHelper(true, true, -2, 8, 0, Empty, -4, false); +} + +BOOST_AUTO_TEST_CASE(canbetriggered_triggered) +{ + CanBeTriggeredHelper(true, true, -2, 8, 0, -1, Empty, false); +} + +BOOST_AUTO_TEST_CASE(canbetriggered_expired) +{ + CanBeTriggeredHelper(true, true, -12, -2, 0, Empty, Empty, false); +} + +BOOST_AUTO_TEST_CASE(canbetriggered_tooearly) +{ + CanBeTriggeredHelper(true, true, 2, 12, 0, Empty, Empty, false); +} + +BOOST_AUTO_TEST_SUITE_END()