logging.h raw
1 // Copyright (c) 2019-present The Bitcoin Core developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5 #ifndef BITCOIN_TEST_UTIL_LOGGING_H
6 #define BITCOIN_TEST_UTIL_LOGGING_H
7
8 #include <util/macros.h>
9
10 #include <functional>
11 #include <list>
12 #include <string>
13
14 class DebugLogHelper
15 {
16 public:
17 //! Custom match checking function.
18 //!
19 //! Invoked with pointers to lines containing matching strings, and with
20 //! null if check_found() is called without any successful match.
21 //!
22 //! Can return true to enable default DebugLogHelper behavior of:
23 //! (1) ending search after first successful match, and
24 //! (2) raising an error in check_found if no match was found
25 //! Can return false to do the opposite in either case.
26 using MatchFn = std::function<bool(const std::string* line)>;
27
28 explicit DebugLogHelper(std::string message, MatchFn match = [](const std::string*){ return true; });
29
30 DebugLogHelper(const DebugLogHelper&) = delete;
31 DebugLogHelper& operator=(const DebugLogHelper&) = delete;
32
33 ~DebugLogHelper();
34
35 private:
36 const std::string m_message;
37 bool m_found{false};
38 std::list<std::function<void(const std::string&)>>::iterator m_print_connection;
39 MatchFn m_match;
40 };
41
42 #define ASSERT_DEBUG_LOG(message) DebugLogHelper BITCOIN_UNIQUE_NAME(debugloghelper)(message)
43
44 #endif // BITCOIN_TEST_UTIL_LOGGING_H
45