1 | #include "includes.h" |
2 | #include "spdlog/sinks/dup_filter_sink.h" |
3 | #include "test_sink.h" |
4 | |
5 | TEST_CASE("dup_filter_test1" , "[dup_filter_sink]" ) |
6 | { |
7 | using spdlog::sinks::dup_filter_sink_st; |
8 | using spdlog::sinks::test_sink_mt; |
9 | |
10 | dup_filter_sink_st dup_sink{std::chrono::seconds{5}}; |
11 | auto test_sink = std::make_shared<test_sink_mt>(); |
12 | dup_sink.add_sink(test_sink); |
13 | |
14 | for (int i = 0; i < 10; i++) |
15 | { |
16 | dup_sink.log(spdlog::details::log_msg{"test" , spdlog::level::info, "message1" }); |
17 | } |
18 | |
19 | REQUIRE(test_sink->msg_counter() == 1); |
20 | } |
21 | |
22 | TEST_CASE("dup_filter_test2" , "[dup_filter_sink]" ) |
23 | { |
24 | using spdlog::sinks::dup_filter_sink_st; |
25 | using spdlog::sinks::test_sink_mt; |
26 | |
27 | dup_filter_sink_st dup_sink{std::chrono::seconds{0}}; |
28 | auto test_sink = std::make_shared<test_sink_mt>(); |
29 | dup_sink.add_sink(test_sink); |
30 | |
31 | for (int i = 0; i < 10; i++) |
32 | { |
33 | dup_sink.log(spdlog::details::log_msg{"test" , spdlog::level::info, "message1" }); |
34 | std::this_thread::sleep_for(std::chrono::milliseconds(5)); |
35 | } |
36 | |
37 | REQUIRE(test_sink->msg_counter() == 10); |
38 | } |
39 | |
40 | TEST_CASE("dup_filter_test3" , "[dup_filter_sink]" ) |
41 | { |
42 | using spdlog::sinks::dup_filter_sink_st; |
43 | using spdlog::sinks::test_sink_mt; |
44 | |
45 | dup_filter_sink_st dup_sink{std::chrono::seconds{1}}; |
46 | auto test_sink = std::make_shared<test_sink_mt>(); |
47 | dup_sink.add_sink(test_sink); |
48 | |
49 | for (int i = 0; i < 10; i++) |
50 | { |
51 | dup_sink.log(spdlog::details::log_msg{"test" , spdlog::level::info, "message1" }); |
52 | dup_sink.log(spdlog::details::log_msg{"test" , spdlog::level::info, "message2" }); |
53 | } |
54 | |
55 | REQUIRE(test_sink->msg_counter() == 20); |
56 | } |
57 | |
58 | TEST_CASE("dup_filter_test4" , "[dup_filter_sink]" ) |
59 | { |
60 | using spdlog::sinks::dup_filter_sink_mt; |
61 | using spdlog::sinks::test_sink_mt; |
62 | |
63 | dup_filter_sink_mt dup_sink{std::chrono::milliseconds{10}}; |
64 | auto test_sink = std::make_shared<test_sink_mt>(); |
65 | dup_sink.add_sink(test_sink); |
66 | |
67 | dup_sink.log(spdlog::details::log_msg{"test" , spdlog::level::info, "message" }); |
68 | std::this_thread::sleep_for(std::chrono::milliseconds(50)); |
69 | dup_sink.log(spdlog::details::log_msg{"test" , spdlog::level::info, "message" }); |
70 | REQUIRE(test_sink->msg_counter() == 2); |
71 | } |
72 | |
73 | TEST_CASE("dup_filter_test5" , "[dup_filter_sink]" ) |
74 | { |
75 | using spdlog::sinks::dup_filter_sink_mt; |
76 | using spdlog::sinks::test_sink_mt; |
77 | |
78 | dup_filter_sink_mt dup_sink{std::chrono::seconds{5}}; |
79 | auto test_sink = std::make_shared<test_sink_mt>(); |
80 | test_sink->set_pattern("%v" ); |
81 | dup_sink.add_sink(test_sink); |
82 | |
83 | dup_sink.log(spdlog::details::log_msg{"test" , spdlog::level::info, "message1" }); |
84 | dup_sink.log(spdlog::details::log_msg{"test" , spdlog::level::info, "message1" }); |
85 | dup_sink.log(spdlog::details::log_msg{"test" , spdlog::level::info, "message1" }); |
86 | dup_sink.log(spdlog::details::log_msg{"test" , spdlog::level::info, "message2" }); |
87 | |
88 | REQUIRE(test_sink->msg_counter() == 3); // skip 2 messages but log the "skipped.." message before message2 |
89 | REQUIRE(test_sink->lines()[1] == "Skipped 2 duplicate messages.." ); |
90 | } |
91 | |