test_log_parser.cpp
Go to the documentation of this file.
1 // Test log parser
2 // Author: Max Schwarz <max.schwarz@ais.uni-bonn.de>
3 
4 #include <catch_ros/catch.hpp>
5 
6 #include "../../src/monitor/log_parser.h"
7 
8 using namespace rosmon::monitor;
9 
10 TEST_CASE("LogParser", "[log_parser]")
11 {
12  LogParser parser;
13 
14  int captures = 0;
15  LogParser::Event lastEvent;
16 
17  auto cb = [&](LogParser::Event&& event){
18  captures++;
19  lastEvent = std::move(event);
20  };
21  parser.setCallback(cb);
22 
23  SECTION("simple")
24  {
25  captures = 0;
26 
27  parser.processString("\e[0mThis is an info message\e[0m\n");
28  CHECK(captures == 1);
29  CHECK(lastEvent.severity == rosmon::LogEvent::Type::Info);
30  CHECK(lastEvent.message == "This is an info message");
31 
32  captures = 0;
33 
34  parser.processString("\e[31mThis is an error message\e[0m\n");
35  CHECK(captures == 1);
36  CHECK(lastEvent.severity == rosmon::LogEvent::Type::Error);
37  CHECK(lastEvent.message == "This is an error message");
38 
39  captures = 0;
40 
41  parser.processString("\e[32mThis is a debug message\e[0m\n");
42  CHECK(captures == 1);
43  CHECK(lastEvent.severity == rosmon::LogEvent::Type::Debug);
44  CHECK(lastEvent.message == "This is a debug message");
45 
46  captures = 0;
47 
48  parser.processString("\e[33mThis is a warning message\e[0m\n");
49  CHECK(captures == 1);
50  CHECK(lastEvent.severity == rosmon::LogEvent::Type::Warning);
51  CHECK(lastEvent.message == "This is a warning message");
52  }
53 
54  SECTION("raw")
55  {
56  captures = 0;
57 
58  parser.processString("This is a raw \e[31mred\e[0m message\n");
59  CHECK(captures == 1);
60  CHECK(lastEvent.severity == rosmon::LogEvent::Type::Raw);
61  CHECK(lastEvent.message == "This is a raw \e[31mred\e[0m message");
62 
63  captures = 0;
64 
65  parser.processString("\e[33mThis is a warning message with an end\e[0m and another start \e[33m and another end!\e[0m\n");
66  CHECK(captures == 1);
67  CHECK(lastEvent.severity == rosmon::LogEvent::Type::Raw);
68  CHECK(lastEvent.message == "\e[33mThis is a warning message with an end\e[0m and another start \e[33m and another end!\e[0m");
69  }
70 
71  SECTION("timeout")
72  {
73  captures = 0;
74 
75  auto t0 = std::chrono::steady_clock::time_point();
76  auto t1 = t0 + std::chrono::milliseconds(500);
77 
78  parser.processString("\e[33mThis is a warning message without its end!\n", t0);
79  CHECK(captures == 0);
80 
81  parser.checkPending(t0);
82  CHECK(captures == 0);
83 
84  parser.checkPending(t1);
85  CHECK(captures == 1);
86  CHECK(lastEvent.severity == rosmon::LogEvent::Type::Raw);
87  CHECK(lastEvent.message == "\e[33mThis is a warning message without its end!");
88  }
89 
90  SECTION("flush")
91  {
92  captures = 0;
93 
94  auto t0 = std::chrono::steady_clock::time_point();
95 
96  parser.processString("\e[33mThis is a warning message without its end!\n", t0);
97 
98  CHECK(captures == 0);
99 
100  parser.checkPending(t0);
101  CHECK(captures == 0);
102 
103  parser.flush();
104  CHECK(captures == 1);
105  CHECK(lastEvent.severity == rosmon::LogEvent::Type::Raw);
106  CHECK(lastEvent.message == "\e[33mThis is a warning message without its end!");
107  }
108 }
rosmon::monitor::LogParser::setCallback
void setCallback(const std::function< void(Event &&)> &cb)
Definition: log_parser.cpp:213
rosmon::monitor::LogParser::processString
void processString(const std::string &str, const std::chrono::steady_clock::time_point &time=std::chrono::steady_clock::now())
Definition: log_parser.h:34
rosmon::monitor::LogParser::flush
void flush()
Definition: log_parser.cpp:223
rosmon::LogEvent::Type::Info
@ Info
rosmon::monitor::LogParser::Event::severity
LogEvent::Type severity
Definition: log_parser.h:27
rosmon::LogEvent::Type::Debug
@ Debug
rosmon::monitor::LogParser::Event::message
std::string message
Definition: log_parser.h:26
rosmon::monitor::LogParser::checkPending
void checkPending(const std::chrono::steady_clock::time_point &time=std::chrono::steady_clock::now())
Definition: log_parser.cpp:218
rosmon::LogEvent::Type::Warning
@ Warning
rosmon::monitor
Definition: linux_process_info.cpp:14
TEST_CASE
TEST_CASE("LogParser", "[log_parser]")
Definition: test_log_parser.cpp:10
rosmon::LogEvent::Type::Error
@ Error
rosmon::monitor::LogParser
Definition: log_parser.h:18
rosmon::LogEvent::Type::Raw
@ Raw
rosmon::monitor::LogParser::Event
Definition: log_parser.h:24


rosmon_core
Author(s): Max Schwarz
autogenerated on Wed Feb 21 2024 04:01:14