comparison OrthancFramework/UnitTestsSources/LoggingTests.cpp @ 4270:251a8b07fa37

logging categories
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 02 Nov 2020 18:45:50 +0100
parents 318c16cfccab
children d7a50b7b8466
comparison
equal deleted inserted replaced
4269:c7bd2f21ccc3 4270:251a8b07fa37
26 #endif 26 #endif
27 27
28 #include <gtest/gtest.h> 28 #include <gtest/gtest.h>
29 29
30 #include "../Sources/Logging.h" 30 #include "../Sources/Logging.h"
31 #include "../Sources/OrthancException.h"
31 32
32 #include <boost/regex.hpp> 33 #include <boost/regex.hpp>
33 #include <sstream> 34 #include <sstream>
34 35
35 using namespace Orthanc::Logging;
36 36
37 static std::stringstream testErrorStream; 37 static std::stringstream testErrorStream;
38 void TestError(const char* message) 38 void TestError(const char* message)
39 { 39 {
40 testErrorStream << message; 40 testErrorStream << message;
131 131
132 TEST(FuncStreamBuf, BasicTest) 132 TEST(FuncStreamBuf, BasicTest)
133 { 133 {
134 LoggingMementoScope loggingConfiguration; 134 LoggingMementoScope loggingConfiguration;
135 135
136 EnableTraceLevel(true); 136 Orthanc::Logging::EnableTraceLevel(true);
137 137
138 typedef void(*LoggingFunctionFunc)(const char*); 138 typedef void(*LoggingFunctionFunc)(const char*);
139 139
140 FuncStreamBuf<LoggingFunctionFunc> errorStreamBuf(TestError); 140 FuncStreamBuf<LoggingFunctionFunc> errorStreamBuf(TestError);
141 std::ostream errorStream(&errorStreamBuf); 141 std::ostream errorStream(&errorStreamBuf);
144 std::ostream warningStream(&warningStreamBuf); 144 std::ostream warningStream(&warningStreamBuf);
145 145
146 FuncStreamBuf<LoggingFunctionFunc> infoStreamBuf(TestInfo); 146 FuncStreamBuf<LoggingFunctionFunc> infoStreamBuf(TestInfo);
147 std::ostream infoStream(&infoStreamBuf); 147 std::ostream infoStream(&infoStreamBuf);
148 148
149 SetErrorWarnInfoLoggingStreams(errorStream, warningStream, infoStream); 149 Orthanc::Logging::SetErrorWarnInfoLoggingStreams(errorStream, warningStream, infoStream);
150 150
151 { 151 {
152 const char* text = "E is the set of all sets that do not contain themselves. Does E contain itself?"; 152 const char* text = "E is the set of all sets that do not contain themselves. Does E contain itself?";
153 LOG(ERROR) << text; 153 LOG(ERROR) << text;
154 std::string logLine = testErrorStream.str(); 154 std::string logLine = testErrorStream.str();
194 std::string payload; 194 std::string payload;
195 bool ok = GetLogLinePayload(payload, logLine); 195 bool ok = GetLogLinePayload(payload, logLine);
196 ASSERT_TRUE(ok); 196 ASSERT_TRUE(ok);
197 ASSERT_STREQ(payload.c_str(), text); 197 ASSERT_STREQ(payload.c_str(), text);
198 } 198 }
199 } 199
200 Orthanc::Logging::EnableTraceLevel(false); // Back to normal
201 }
202
203
204
205 TEST(Logging, Categories)
206 {
207 using namespace Orthanc::Logging;
208
209 // Unit tests are running in "--verbose" mode (not "--trace")
210 ASSERT_FALSE(IsTraceLevelEnabled());
211 ASSERT_TRUE(IsInfoLevelEnabled());
212 ASSERT_TRUE(IsCategoryEnabled(LogLevel_INFO, LogCategory_SQLITE));
213 ASSERT_FALSE(IsCategoryEnabled(LogLevel_TRACE, LogCategory_SQLITE));
214
215 // Cannot modify categories for ERROR and WARNING
216 ASSERT_THROW(SetCategoryEnabled(LogLevel_ERROR, LogCategory_GENERIC, true),
217 Orthanc::OrthancException);
218 ASSERT_THROW(SetCategoryEnabled(LogLevel_WARNING, LogCategory_GENERIC, false),
219 Orthanc::OrthancException);
220
221
222 EnableInfoLevel(false);
223 EnableTraceLevel(false);
224 ASSERT_FALSE(IsTraceLevelEnabled());
225 ASSERT_FALSE(IsInfoLevelEnabled());
226 ASSERT_TRUE(IsCategoryEnabled(LogLevel_ERROR, LogCategory_GENERIC));
227 ASSERT_TRUE(IsCategoryEnabled(LogLevel_ERROR, LogCategory_DICOM));
228 ASSERT_TRUE(IsCategoryEnabled(LogLevel_ERROR, LogCategory_SQLITE));
229 ASSERT_TRUE(IsCategoryEnabled(LogLevel_WARNING, LogCategory_GENERIC));
230 ASSERT_TRUE(IsCategoryEnabled(LogLevel_WARNING, LogCategory_DICOM));
231 ASSERT_TRUE(IsCategoryEnabled(LogLevel_WARNING, LogCategory_SQLITE));
232 ASSERT_FALSE(IsCategoryEnabled(LogLevel_INFO, LogCategory_GENERIC));
233 ASSERT_FALSE(IsCategoryEnabled(LogLevel_INFO, LogCategory_DICOM));
234 ASSERT_FALSE(IsCategoryEnabled(LogLevel_INFO, LogCategory_SQLITE));
235 ASSERT_FALSE(IsCategoryEnabled(LogLevel_TRACE, LogCategory_GENERIC));
236 ASSERT_FALSE(IsCategoryEnabled(LogLevel_TRACE, LogCategory_DICOM));
237 ASSERT_FALSE(IsCategoryEnabled(LogLevel_TRACE, LogCategory_SQLITE));
238
239
240 // Test the "category" setters at INFO level
241 SetCategoryEnabled(LogLevel_INFO, LogCategory_DICOM, true);
242 ASSERT_FALSE(IsCategoryEnabled(LogLevel_INFO, LogCategory_GENERIC));
243 ASSERT_TRUE(IsCategoryEnabled(LogLevel_INFO, LogCategory_DICOM));
244 ASSERT_FALSE(IsCategoryEnabled(LogLevel_TRACE, LogCategory_GENERIC));
245 ASSERT_FALSE(IsCategoryEnabled(LogLevel_TRACE, LogCategory_DICOM));
246 ASSERT_FALSE(IsTraceLevelEnabled());
247 ASSERT_TRUE(IsInfoLevelEnabled()); // At least one category is verbose
248
249 SetCategoryEnabled(LogLevel_INFO, LogCategory_GENERIC, true);
250 ASSERT_TRUE(IsCategoryEnabled(LogLevel_INFO, LogCategory_GENERIC));
251 ASSERT_TRUE(IsCategoryEnabled(LogLevel_INFO, LogCategory_DICOM));
252 ASSERT_FALSE(IsCategoryEnabled(LogLevel_TRACE, LogCategory_GENERIC));
253 ASSERT_FALSE(IsCategoryEnabled(LogLevel_TRACE, LogCategory_DICOM));
254 ASSERT_FALSE(IsTraceLevelEnabled());
255 ASSERT_TRUE(IsInfoLevelEnabled());
256
257 SetCategoryEnabled(LogLevel_INFO, LogCategory_DICOM, false);
258 ASSERT_TRUE(IsCategoryEnabled(LogLevel_INFO, LogCategory_GENERIC));
259 ASSERT_FALSE(IsCategoryEnabled(LogLevel_INFO, LogCategory_DICOM));
260 ASSERT_FALSE(IsCategoryEnabled(LogLevel_TRACE, LogCategory_GENERIC));
261 ASSERT_FALSE(IsCategoryEnabled(LogLevel_TRACE, LogCategory_DICOM));
262 ASSERT_FALSE(IsTraceLevelEnabled());
263 ASSERT_TRUE(IsInfoLevelEnabled()); // "GENERIC" is still verbose
264
265 SetCategoryEnabled(LogLevel_INFO, LogCategory_GENERIC, false);
266 ASSERT_FALSE(IsCategoryEnabled(LogLevel_INFO, LogCategory_GENERIC));
267 ASSERT_FALSE(IsCategoryEnabled(LogLevel_INFO, LogCategory_DICOM));
268 ASSERT_FALSE(IsCategoryEnabled(LogLevel_TRACE, LogCategory_GENERIC));
269 ASSERT_FALSE(IsCategoryEnabled(LogLevel_TRACE, LogCategory_DICOM));
270 ASSERT_FALSE(IsTraceLevelEnabled());
271 ASSERT_FALSE(IsInfoLevelEnabled());
272
273
274 // Test the "category" setters at TRACE level
275 SetCategoryEnabled(LogLevel_TRACE, LogCategory_DICOM, true);
276 ASSERT_FALSE(IsCategoryEnabled(LogLevel_INFO, LogCategory_GENERIC));
277 ASSERT_TRUE(IsCategoryEnabled(LogLevel_INFO, LogCategory_DICOM));
278 ASSERT_FALSE(IsCategoryEnabled(LogLevel_TRACE, LogCategory_GENERIC));
279 ASSERT_TRUE(IsCategoryEnabled(LogLevel_TRACE, LogCategory_DICOM));
280 ASSERT_TRUE(IsTraceLevelEnabled());
281 ASSERT_TRUE(IsInfoLevelEnabled());
282
283 SetCategoryEnabled(LogLevel_TRACE, LogCategory_GENERIC, true);
284 ASSERT_TRUE(IsCategoryEnabled(LogLevel_INFO, LogCategory_GENERIC));
285 ASSERT_TRUE(IsCategoryEnabled(LogLevel_INFO, LogCategory_DICOM));
286 ASSERT_TRUE(IsCategoryEnabled(LogLevel_TRACE, LogCategory_GENERIC));
287 ASSERT_TRUE(IsCategoryEnabled(LogLevel_TRACE, LogCategory_DICOM));
288 ASSERT_TRUE(IsTraceLevelEnabled());
289 ASSERT_TRUE(IsInfoLevelEnabled());
290
291 SetCategoryEnabled(LogLevel_INFO, LogCategory_DICOM, false);
292 ASSERT_TRUE(IsCategoryEnabled(LogLevel_INFO, LogCategory_GENERIC));
293 ASSERT_FALSE(IsCategoryEnabled(LogLevel_INFO, LogCategory_DICOM));
294 ASSERT_TRUE(IsCategoryEnabled(LogLevel_TRACE, LogCategory_GENERIC));
295 ASSERT_FALSE(IsCategoryEnabled(LogLevel_TRACE, LogCategory_DICOM));
296 ASSERT_TRUE(IsTraceLevelEnabled()); // "GENERIC" is still at trace level
297 ASSERT_TRUE(IsInfoLevelEnabled());
298
299 SetCategoryEnabled(LogLevel_TRACE, LogCategory_GENERIC, false);
300 ASSERT_TRUE(IsCategoryEnabled(LogLevel_INFO, LogCategory_GENERIC));
301 ASSERT_FALSE(IsCategoryEnabled(LogLevel_INFO, LogCategory_DICOM));
302 ASSERT_FALSE(IsCategoryEnabled(LogLevel_TRACE, LogCategory_GENERIC));
303 ASSERT_FALSE(IsCategoryEnabled(LogLevel_TRACE, LogCategory_DICOM));
304 ASSERT_FALSE(IsTraceLevelEnabled());
305 ASSERT_TRUE(IsInfoLevelEnabled());
306
307 SetCategoryEnabled(LogLevel_INFO, LogCategory_GENERIC, false);
308 ASSERT_FALSE(IsCategoryEnabled(LogLevel_INFO, LogCategory_GENERIC));
309 ASSERT_FALSE(IsCategoryEnabled(LogLevel_INFO, LogCategory_DICOM));
310 ASSERT_FALSE(IsCategoryEnabled(LogLevel_TRACE, LogCategory_GENERIC));
311 ASSERT_FALSE(IsCategoryEnabled(LogLevel_TRACE, LogCategory_DICOM));
312 ASSERT_FALSE(IsTraceLevelEnabled());
313 ASSERT_FALSE(IsInfoLevelEnabled());
314
315
316
317 // Test the "macro" setters
318 EnableInfoLevel(true);
319 EnableTraceLevel(false);
320 ASSERT_FALSE(IsTraceLevelEnabled());
321 ASSERT_TRUE(IsInfoLevelEnabled());
322 ASSERT_TRUE(IsCategoryEnabled(LogLevel_ERROR, LogCategory_GENERIC));
323 ASSERT_TRUE(IsCategoryEnabled(LogLevel_ERROR, LogCategory_DICOM));
324 ASSERT_TRUE(IsCategoryEnabled(LogLevel_ERROR, LogCategory_SQLITE));
325 ASSERT_TRUE(IsCategoryEnabled(LogLevel_WARNING, LogCategory_GENERIC));
326 ASSERT_TRUE(IsCategoryEnabled(LogLevel_WARNING, LogCategory_DICOM));
327 ASSERT_TRUE(IsCategoryEnabled(LogLevel_WARNING, LogCategory_SQLITE));
328 ASSERT_TRUE(IsCategoryEnabled(LogLevel_INFO, LogCategory_GENERIC));
329 ASSERT_TRUE(IsCategoryEnabled(LogLevel_INFO, LogCategory_DICOM));
330 ASSERT_TRUE(IsCategoryEnabled(LogLevel_INFO, LogCategory_SQLITE));
331 ASSERT_FALSE(IsCategoryEnabled(LogLevel_TRACE, LogCategory_GENERIC));
332 ASSERT_FALSE(IsCategoryEnabled(LogLevel_TRACE, LogCategory_DICOM));
333 ASSERT_FALSE(IsCategoryEnabled(LogLevel_TRACE, LogCategory_SQLITE));
334
335 EnableInfoLevel(false);
336 EnableTraceLevel(true); // "--trace" implies "--verbose"
337 ASSERT_TRUE(IsTraceLevelEnabled());
338 ASSERT_TRUE(IsInfoLevelEnabled());
339 ASSERT_TRUE(IsCategoryEnabled(LogLevel_ERROR, LogCategory_GENERIC));
340 ASSERT_TRUE(IsCategoryEnabled(LogLevel_ERROR, LogCategory_DICOM));
341 ASSERT_TRUE(IsCategoryEnabled(LogLevel_ERROR, LogCategory_SQLITE));
342 ASSERT_TRUE(IsCategoryEnabled(LogLevel_WARNING, LogCategory_GENERIC));
343 ASSERT_TRUE(IsCategoryEnabled(LogLevel_WARNING, LogCategory_DICOM));
344 ASSERT_TRUE(IsCategoryEnabled(LogLevel_WARNING, LogCategory_SQLITE));
345 ASSERT_TRUE(IsCategoryEnabled(LogLevel_INFO, LogCategory_GENERIC));
346 ASSERT_TRUE(IsCategoryEnabled(LogLevel_INFO, LogCategory_DICOM));
347 ASSERT_TRUE(IsCategoryEnabled(LogLevel_INFO, LogCategory_SQLITE));
348 ASSERT_TRUE(IsCategoryEnabled(LogLevel_TRACE, LogCategory_GENERIC));
349 ASSERT_TRUE(IsCategoryEnabled(LogLevel_TRACE, LogCategory_DICOM));
350 ASSERT_TRUE(IsCategoryEnabled(LogLevel_TRACE, LogCategory_SQLITE));
351
352
353
354 // Back to normal
355 EnableInfoLevel(true);
356 EnableTraceLevel(false);
357 ASSERT_FALSE(IsTraceLevelEnabled());
358 ASSERT_TRUE(IsInfoLevelEnabled());
359 ASSERT_TRUE(IsCategoryEnabled(LogLevel_INFO, LogCategory_SQLITE));
360 ASSERT_FALSE(IsCategoryEnabled(LogLevel_TRACE, LogCategory_SQLITE));
361 }