From e281e96b921705edeea30ee3687aa8cd2d2fad2a Mon Sep 17 00:00:00 2001 From: "Alexander A. Klimov" Date: Wed, 22 Nov 2023 12:15:51 +0100 Subject: [PATCH] Test Downtime#CanBeTriggered() --- lib/icinga/downtime.hpp | 3 +- test/CMakeLists.txt | 1 + test/icinga-downtime.cpp | 70 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 test/icinga-downtime.cpp 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 c317d4ebe..38952e7d7 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -113,6 +113,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 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()