Line data Source code
1 : // Copyright (c) 2006-2021 Made to Order Software Corp. All Rights Reserved
2 : //
3 : // https://snapwebsites.org/project/snaplogger
4 : // contact@m2osw.com
5 : //
6 : // This program is free software; you can redistribute it and/or modify
7 : // it under the terms of the GNU General Public License as published by
8 : // the Free Software Foundation; either version 2 of the License, or
9 : // (at your option) any later version.
10 : //
11 : // This program is distributed in the hope that it will be useful,
12 : // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 : // GNU General Public License for more details.
15 : //
16 : // You should have received a copy of the GNU General Public License along
17 : // with this program; if not, write to the Free Software Foundation, Inc.,
18 : // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19 :
20 : // self
21 : //
22 : #include "catch_main.h"
23 :
24 :
25 : // snaplogger lib
26 : //
27 : #include <snaplogger/buffer_appender.h>
28 : #include <snaplogger/exception.h>
29 : #include <snaplogger/format.h>
30 : #include <snaplogger/logger.h>
31 : #include <snaplogger/map_diagnostic.h>
32 : #include <snaplogger/message.h>
33 : #include <snaplogger/severity.h>
34 : #include <snaplogger/version.h>
35 :
36 :
37 : // C lib
38 : //
39 : #include <unistd.h>
40 : #include <netdb.h>
41 : #include <sys/param.h>
42 :
43 :
44 :
45 :
46 4 : CATCH_TEST_CASE("severity", "[severity]")
47 : {
48 4 : CATCH_START_SECTION("severity: Create Severity")
49 : {
50 1 : snaplogger::severity_t const err_plus_one(static_cast<snaplogger::severity_t>(static_cast<int>(snaplogger::severity_t::SEVERITY_ERROR) + 1));
51 :
52 : // user severity by name
53 : {
54 2 : snaplogger::severity::pointer_t s(std::make_shared<snaplogger::severity>(err_plus_one, "error"));
55 :
56 1 : CATCH_REQUIRE_THROWS_MATCHES(
57 : snaplogger::add_severity(s)
58 : , snaplogger::duplicate_error
59 : , Catch::Matchers::ExceptionMessage(
60 : "logger_error: a system severity (error) cannot be replaced (same name)."));
61 : }
62 :
63 : // system severity by name
64 : {
65 2 : snaplogger::severity::pointer_t s(std::make_shared<snaplogger::severity>(err_plus_one, "error", true));
66 :
67 1 : CATCH_REQUIRE_THROWS_MATCHES(
68 : snaplogger::add_severity(s)
69 : , snaplogger::duplicate_error
70 : , Catch::Matchers::ExceptionMessage(
71 : "logger_error: a system severity (error) cannot be replaced (same name)."));
72 : }
73 :
74 : // user severity by severity
75 : {
76 2 : snaplogger::severity::pointer_t s(std::make_shared<snaplogger::severity>(snaplogger::severity_t::SEVERITY_ERROR, "bad-error"));
77 :
78 1 : CATCH_REQUIRE_THROWS_MATCHES(
79 : snaplogger::add_severity(s)
80 : , snaplogger::duplicate_error
81 : , Catch::Matchers::ExceptionMessage(
82 : "logger_error: a system severity (200) cannot be replaced (same severity level: 200)."));
83 : }
84 :
85 : // user severity by severity
86 : {
87 2 : snaplogger::severity::pointer_t s(std::make_shared<snaplogger::severity>(snaplogger::severity_t::SEVERITY_ERROR, "bad-error", true));
88 :
89 1 : CATCH_REQUIRE_THROWS_MATCHES(
90 : snaplogger::add_severity(s)
91 : , snaplogger::duplicate_error
92 : , Catch::Matchers::ExceptionMessage(
93 : "logger_error: a system severity (200) cannot be replaced (same severity level: 200)."));
94 : }
95 :
96 : // actually create a valid severity
97 : {
98 1 : CATCH_REQUIRE(snaplogger::get_severity("bad-error") == nullptr);
99 1 : CATCH_REQUIRE(snaplogger::get_severity("big-error") == nullptr);
100 :
101 1 : snaplogger::severity_t const level(static_cast<snaplogger::severity_t>(205));
102 2 : snaplogger::severity::pointer_t s(std::make_shared<snaplogger::severity>(level, "bad-error"));
103 :
104 1 : CATCH_REQUIRE(s->get_severity() == level);
105 1 : CATCH_REQUIRE(s->get_name() == "bad-error");
106 :
107 1 : CATCH_REQUIRE(s->get_all_names().size() == 1);
108 1 : CATCH_REQUIRE(s->get_all_names()[0] == "bad-error");
109 :
110 1 : CATCH_REQUIRE(snaplogger::get_severity("bad-error") == nullptr);
111 1 : CATCH_REQUIRE(snaplogger::get_severity("big-error") == nullptr);
112 :
113 1 : snaplogger::add_severity(s);
114 :
115 1 : CATCH_REQUIRE(snaplogger::get_severity("bad-error") == s);
116 1 : CATCH_REQUIRE(snaplogger::get_severity("big-error") == nullptr);
117 :
118 1 : s->add_alias("big-error");
119 :
120 1 : CATCH_REQUIRE(s->get_all_names().size() == 2);
121 1 : CATCH_REQUIRE(s->get_all_names()[0] == "bad-error");
122 1 : CATCH_REQUIRE(s->get_all_names()[1] == "big-error");
123 :
124 1 : CATCH_REQUIRE(s->get_description() == "bad-error");
125 :
126 1 : s->set_description("bad error");
127 1 : CATCH_REQUIRE(s->get_description() == "bad error");
128 :
129 1 : s->set_description(std::string());
130 1 : CATCH_REQUIRE(s->get_description() == "bad-error");
131 :
132 1 : CATCH_REQUIRE(snaplogger::get_severity("bad-error") == s);
133 1 : CATCH_REQUIRE(snaplogger::get_severity("big-error") == s);
134 1 : CATCH_REQUIRE(snaplogger::get_severity(level) == s);
135 :
136 1 : s->set_styles("orange");
137 1 : CATCH_REQUIRE(s->get_styles() == "orange");
138 :
139 1 : snaplogger::severity_t const level_plus_one(static_cast<snaplogger::severity_t>(static_cast<int>(level) + 1));
140 1 : CATCH_REQUIRE(snaplogger::get_severity(level_plus_one) == nullptr);
141 :
142 2 : snaplogger::message msg(::snaplogger::severity_t::SEVERITY_ERROR, __FILE__, __func__, __LINE__);
143 1 : CATCH_REQUIRE(snaplogger::get_severity(msg, "bad-error") == s);
144 1 : CATCH_REQUIRE(snaplogger::get_severity(msg, "big-error") == s);
145 : }
146 :
147 : // verify that the "<name>"_sev syntax works as expected
148 : {
149 1 : snaplogger::severity_t const level(static_cast<snaplogger::severity_t>(25));
150 2 : snaplogger::severity::pointer_t s(std::make_shared<snaplogger::severity>(level, "remark"));
151 :
152 1 : snaplogger::add_severity(s);
153 :
154 1 : CATCH_REQUIRE(s->get_severity() == level);
155 1 : CATCH_REQUIRE(s->get_name() == "remark");
156 :
157 : #if defined(__GNUC__) && __GNUC__ >= 7 && __GNUC_MINOR__ >= 5 && __GNUC_PATCHLEVEL__ >= 0
158 2 : snaplogger::severity::pointer_t r("remark"_sev);
159 1 : CATCH_REQUIRE(r == s);
160 :
161 1 : CATCH_REQUIRE(r->get_severity() == level);
162 1 : CATCH_REQUIRE(r->get_name() == "remark");
163 : #endif
164 : }
165 : }
166 : CATCH_END_SECTION()
167 :
168 4 : CATCH_START_SECTION("severity: Print Severity")
169 : {
170 57 : struct level_and_name_t
171 : {
172 : ::snaplogger::severity_t f_level = ::snaplogger::severity_t::SEVERITY_ERROR;
173 : std::string f_name = std::string();
174 : };
175 :
176 1 : std::vector<level_and_name_t> level_and_name =
177 : {
178 : { ::snaplogger::severity_t::SEVERITY_ALL, "all" },
179 : { ::snaplogger::severity_t::SEVERITY_TRACE, "trace" },
180 : { ::snaplogger::severity_t::SEVERITY_DEBUG, "debug" },
181 : { ::snaplogger::severity_t::SEVERITY_NOTICE, "notice" },
182 : { ::snaplogger::severity_t::SEVERITY_UNIMPORTANT, "unimportant" },
183 : { ::snaplogger::severity_t::SEVERITY_VERBOSE, "verbose" },
184 : { ::snaplogger::severity_t::SEVERITY_INFORMATION, "information" },
185 : { ::snaplogger::severity_t::SEVERITY_IMPORTANT, "important" },
186 : { ::snaplogger::severity_t::SEVERITY_MINOR, "minor" },
187 : { ::snaplogger::severity_t::SEVERITY_DEPRECATED, "deprecated" },
188 : { ::snaplogger::severity_t::SEVERITY_WARNING, "warning" },
189 : { ::snaplogger::severity_t::SEVERITY_MAJOR, "major" },
190 : { ::snaplogger::severity_t::SEVERITY_RECOVERABLE_ERROR, "recoverable-error" },
191 : { ::snaplogger::severity_t::SEVERITY_ERROR, "error" },
192 : { ::snaplogger::severity_t::SEVERITY_CRITICAL, "critical" },
193 : { ::snaplogger::severity_t::SEVERITY_ALERT, "alert" },
194 : { ::snaplogger::severity_t::SEVERITY_EMERGENCY, "emergency" },
195 : { ::snaplogger::severity_t::SEVERITY_FATAL, "fatal" },
196 : { ::snaplogger::severity_t::SEVERITY_OFF, "off" },
197 2 : };
198 :
199 20 : for(auto const & ln : level_and_name)
200 : {
201 38 : std::stringstream buffer;
202 19 : buffer << ln.f_level;
203 19 : CATCH_REQUIRE(buffer.str() == ln.f_name);
204 : }
205 :
206 : {
207 2 : std::stringstream buffer;
208 1 : buffer << static_cast<::snaplogger::severity_t>(254);
209 1 : CATCH_REQUIRE(buffer.str() == "(unknown severity: 254)");
210 : }
211 : }
212 : CATCH_END_SECTION()
213 8 : }
214 :
215 :
216 :
217 : // vim: ts=4 sw=4 et
|