From eb71e16995190b0036ad21584a9779f44ab35315 Mon Sep 17 00:00:00 2001 From: Markus Frosch Date: Fri, 23 Mar 2018 13:30:12 +0100 Subject: [PATCH 1/2] tests: Move IcingaApplicationFixture out of test-runner And make it basically a singleton that would be callable by other test units. --- test/CMakeLists.txt | 5 ++- test/icingaapplication-fixture.cpp | 49 ++++++++++++++++++++++++++++++ test/icingaapplication-fixture.hpp | 38 +++++++++++++++++++++++ test/test-runner.cpp | 24 --------------- 4 files changed, 91 insertions(+), 25 deletions(-) create mode 100644 test/icingaapplication-fixture.cpp create mode 100644 test/icingaapplication-fixture.hpp diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 46750ffa5..5fce79833 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -18,6 +18,7 @@ include(BoostTestTargets) set(base_test_SOURCES + icingaapplication-fixture.cpp base-array.cpp base-base64.cpp base-convert.cpp @@ -56,7 +57,7 @@ endif() add_boost_test(base SOURCES test-runner.cpp ${base_test_SOURCES} LIBRARIES ${base_DEPS} - TESTS + TESTS base_array/construct base_array/getset base_array/resize @@ -145,6 +146,7 @@ add_boost_test(base if(ICINGA2_WITH_LIVESTATUS) set(livestatus_test_SOURCES + icingaapplication-fixture.cpp livestatus-fixture.cpp livestatus.cpp ${base_OBJS} @@ -167,6 +169,7 @@ if(ICINGA2_WITH_LIVESTATUS) endif() set(icinga_checkable_test_SOURCES + icingaapplication-fixture.cpp icinga-checkable-fixture.cpp icinga-checkable-flapping.cpp ${base_OBJS} diff --git a/test/icingaapplication-fixture.cpp b/test/icingaapplication-fixture.cpp new file mode 100644 index 000000000..bb3b1c710 --- /dev/null +++ b/test/icingaapplication-fixture.cpp @@ -0,0 +1,49 @@ +/****************************************************************************** +* Icinga 2 * +* Copyright (C) 2012-2018 Icinga Development Team (https://www.icinga.com/) * +* * +* This program is free software; you can redistribute it and/or * +* modify it under the terms of the GNU General Public License * +* as published by the Free Software Foundation; either version 2 * +* of the License, or (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program; if not, write to the Free Software Foundation * +* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * +******************************************************************************/ + +#include "icingaapplication-fixture.hpp" + +using namespace icinga; + +static bool IcingaInitialized = false; + +IcingaApplicationFixture::IcingaApplicationFixture() +{ + if (!IcingaInitialized) + InitIcingaApplication(); +} + +void IcingaApplicationFixture::InitIcingaApplication() +{ + BOOST_TEST_MESSAGE("Initializing Application..."); + Application::InitializeBase(); + + BOOST_TEST_MESSAGE("Initializing IcingaApplication..."); + IcingaApplication::Ptr appInst = new IcingaApplication(); + static_pointer_cast(appInst)->OnConfigLoaded(); + + IcingaInitialized = true; +} + +IcingaApplicationFixture::~IcingaApplicationFixture() +{ + IcingaApplication::GetInstance().reset(); +} + +BOOST_GLOBAL_FIXTURE(IcingaApplicationFixture); diff --git a/test/icingaapplication-fixture.hpp b/test/icingaapplication-fixture.hpp new file mode 100644 index 000000000..d79836b8b --- /dev/null +++ b/test/icingaapplication-fixture.hpp @@ -0,0 +1,38 @@ +/****************************************************************************** +* Icinga 2 * +* Copyright (C) 2012-2018 Icinga Development Team (https://www.icinga.com/) * +* * +* This program is free software; you can redistribute it and/or * +* modify it under the terms of the GNU General Public License * +* as published by the Free Software Foundation; either version 2 * +* of the License, or (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program; if not, write to the Free Software Foundation * +* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * +******************************************************************************/ + +#ifndef ICINGAAPPLICATION_FIXTURE_H +#define ICINGAAPPLICATION_FIXTURE_H + +#include "icinga/icingaapplication.hpp" +#include "base/application.hpp" +#include + +using namespace icinga; + +struct IcingaApplicationFixture +{ + IcingaApplicationFixture(); + + void InitIcingaApplication(); + + ~IcingaApplicationFixture(); +}; + +#endif // ICINGAAPPLICATION_FIXTURE_H diff --git a/test/test-runner.cpp b/test/test-runner.cpp index f950c4834..4ed6aa30a 100644 --- a/test/test-runner.cpp +++ b/test/test-runner.cpp @@ -19,28 +19,4 @@ #define BOOST_TEST_MAIN -#include "icinga/icingaapplication.hpp" -#include "base/application.hpp" #include - -using namespace icinga; - -struct TestIcingaApplication -{ - TestIcingaApplication() - { - Application::InitializeBase(); - - IcingaApplication::Ptr appInst; - - appInst = new IcingaApplication(); - static_pointer_cast(appInst)->OnConfigLoaded(); - } - - ~TestIcingaApplication() - { - IcingaApplication::GetInstance().reset(); - } -}; - -BOOST_GLOBAL_FIXTURE(TestIcingaApplication); From 3adfd396f4170ed77ead6a2791255850f3cd3838 Mon Sep 17 00:00:00 2001 From: Markus Frosch Date: Fri, 23 Mar 2018 13:31:34 +0100 Subject: [PATCH 2/2] tests: Ensure IcingaApplication is initialized before adding config This avoids an ordering problem noticed in Boost 1.55 --- test/livestatus-fixture.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/livestatus-fixture.cpp b/test/livestatus-fixture.cpp index 8007b159a..c016ffe95 100644 --- a/test/livestatus-fixture.cpp +++ b/test/livestatus-fixture.cpp @@ -21,6 +21,7 @@ #include "config/configitem.hpp" #include "base/application.hpp" #include "base/loader.hpp" +#include "icingaapplication-fixture.hpp" #include using namespace icinga; @@ -29,6 +30,9 @@ struct LivestatusFixture { LivestatusFixture() { + // ensure IcingaApplication is initialized before we try to add config + IcingaApplicationFixture icinga; + BOOST_TEST_MESSAGE("Preparing config objects..."); ConfigItem::RunWithActivationContext(new Function("CreateTestObjects", CreateTestObjects));