1 /* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */
3 #include "icinga/legacytimeperiod.hpp"
4 #include <BoostTestTargetConfig.h>
6 using namespace icinga;
8 BOOST_AUTO_TEST_SUITE(icinga_legacytimeperiod);
10 struct GlobalTimezoneFixture
14 GlobalTimezoneFixture()
18 _putenv_s("TZ", "UTC");
25 ~GlobalTimezoneFixture()
42 BOOST_GLOBAL_FIXTURE(GlobalTimezoneFixture);
44 BOOST_AUTO_TEST_CASE(simple)
48 // check parsing of "YYYY-MM-DD" specs
49 LegacyTimePeriod::ParseTimeSpec("2016-01-01", &beg, &end, &ref);
50 BOOST_CHECK_EQUAL(mktime(&beg), (time_t) 1451606400);
51 BOOST_CHECK_EQUAL(mktime(&end), (time_t) 1451692800);
53 LegacyTimePeriod::ParseTimeSpec("2015-12-31", &beg, &end, &ref);
54 BOOST_CHECK_EQUAL(mktime(&beg), (time_t) 1451520000);
55 BOOST_CHECK_EQUAL(mktime(&end), (time_t) 1451606400);
57 BOOST_CHECK_THROW(LegacyTimePeriod::ParseTimeSpec("2015-12-32", &beg, &end, &ref),
58 std::invalid_argument);
60 BOOST_CHECK_THROW(LegacyTimePeriod::ParseTimeSpec("2015-28-01", &beg, &end, &ref),
61 std::invalid_argument);
63 // check parsing of "day X" and "day -X" specs
64 ref.tm_year = 2016 - 1900;
66 LegacyTimePeriod::ParseTimeSpec("day 2", &beg, &end, &ref);
67 BOOST_CHECK_EQUAL(mktime(&beg), (time_t) 1454371200); // 2016-02-02
68 BOOST_CHECK_EQUAL(mktime(&end), (time_t) 1454457600); // 2016-02-03
70 ref.tm_year = 2018 - 1900;
72 LegacyTimePeriod::ParseTimeSpec("day 31", &beg, &end, &ref);
73 BOOST_CHECK_EQUAL(mktime(&beg), (time_t) 1546214400); // 2018-12-31
74 BOOST_CHECK_EQUAL(mktime(&end), (time_t) 1546300800); // 2019-01-01
76 ref.tm_year = 2012 - 1900;
78 LegacyTimePeriod::ParseTimeSpec("day -1", &beg, &end, &ref);
79 BOOST_CHECK_EQUAL(mktime(&beg), (time_t) 1343692800); // 2012-07-31
80 BOOST_CHECK_EQUAL(mktime(&end), (time_t) 1343779200); // 2012-08-01
82 ref.tm_year = 2016 - 1900; // leap year
84 LegacyTimePeriod::ParseTimeSpec("day -1", &beg, &end, &ref);
85 BOOST_CHECK_EQUAL(mktime(&beg), (time_t) 1456704000); // 2016-02-29
86 BOOST_CHECK_EQUAL(mktime(&end), (time_t) 1456790400); // 2016-03-01
89 BOOST_AUTO_TEST_SUITE_END()