]> granicus.if.org Git - icinga2/blob - test/icinga-legacytimeperiod.cpp
Merge pull request #6999 from Icinga/bugfix/compiler-warnings
[icinga2] / test / icinga-legacytimeperiod.cpp
1 /* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */
2
3 #include "icinga/legacytimeperiod.hpp"
4 #include <BoostTestTargetConfig.h>
5
6 using namespace icinga;
7
8 BOOST_AUTO_TEST_SUITE(icinga_legacytimeperiod);
9
10 struct GlobalTimezoneFixture
11 {
12         char *tz;
13
14         GlobalTimezoneFixture()
15         {
16                 tz = getenv("TZ");
17 #ifdef _WIN32
18                 _putenv_s("TZ", "UTC");
19 #else
20                 setenv("TZ", "", 1);
21 #endif
22                 tzset();
23         }
24
25         ~GlobalTimezoneFixture()
26         {
27 #ifdef _WIN32
28                 if (tz)
29                         _putenv_s("TZ", tz);
30                 else
31                         _putenv_s("TZ", "");
32 #else
33                 if (tz)
34                         setenv("TZ", tz, 1);
35                 else
36                         unsetenv("TZ");
37 #endif
38                 tzset();
39         }
40 };
41
42 BOOST_GLOBAL_FIXTURE(GlobalTimezoneFixture);
43
44 BOOST_AUTO_TEST_CASE(simple)
45 {
46         tm beg, end, ref;
47
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);
52
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);
56
57         BOOST_CHECK_THROW(LegacyTimePeriod::ParseTimeSpec("2015-12-32", &beg, &end, &ref),
58             std::invalid_argument);
59
60         BOOST_CHECK_THROW(LegacyTimePeriod::ParseTimeSpec("2015-28-01", &beg, &end, &ref),
61             std::invalid_argument);
62
63         // check parsing of "day X" and "day -X" specs
64         ref.tm_year = 2016 - 1900;
65         ref.tm_mon = 1;
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
69
70         ref.tm_year = 2018 - 1900;
71         ref.tm_mon = 11;
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
75
76         ref.tm_year = 2012 - 1900;
77         ref.tm_mon = 6;
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
81
82         ref.tm_year = 2016 - 1900; // leap year
83         ref.tm_mon = 1;
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
87 }
88
89 BOOST_AUTO_TEST_SUITE_END()