LCOV - code coverage report
Current view: top level - src/test/util - logging.cpp (source / functions) Hit Total Coverage
Test: fuzz_coverage.info Lines: 0 33 0.0 %
Date: 2023-11-06 23:13:05 Functions: 0 5 0.0 %
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : // Copyright (c) 2019-2021 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                 :            : #include <test/util/logging.h>
       6                 :            : 
       7                 :            : #include <logging.h>
       8                 :            : #include <noui.h>
       9                 :            : #include <tinyformat.h>
      10                 :            : #include <util/check.h>
      11                 :            : 
      12                 :            : #include <iostream>
      13                 :            : #include <stdexcept>
      14                 :            : 
      15                 :          0 : DebugLogHelper::DebugLogHelper(std::string message, MatchFn match, std::optional<std::chrono::milliseconds> timeout)
      16                 :          0 :     : m_message{std::move(message)}, m_timeout{timeout}, m_match(std::move(match))
      17                 :            : {
      18                 :          0 :     m_print_connection = LogInstance().PushBackCallback(
      19                 :          0 :         [this](const std::string& s) {
      20                 :          0 :             StdLockGuard lock{m_mutex};
      21                 :          0 :             if (!m_found) {
      22                 :          0 :                 if (s.find(m_message) != std::string::npos && m_match(&s)) {
      23                 :          0 :                     m_found = true;
      24                 :          0 :                     m_cv.notify_all();
      25                 :          0 :                 }
      26                 :          0 :             }
      27                 :          0 :         });
      28                 :          0 :     noui_test_redirect();
      29                 :          0 :     m_receiving_log = true;
      30                 :          0 : }
      31                 :            : 
      32                 :          0 : DebugLogHelper::~DebugLogHelper()
      33                 :            : {
      34                 :            :     {
      35                 :          0 :         StdUniqueLock lock{m_mutex};
      36                 :          0 :         if (m_timeout.has_value()) {
      37                 :          0 :             m_cv.wait_for(lock, m_timeout.value(), [this]() EXCLUSIVE_LOCKS_REQUIRED(m_mutex) { return m_found; });
      38                 :          0 :         }
      39                 :          0 :     }
      40                 :          0 :     StopReceivingLog();
      41                 :          0 :     if (!m_found && m_match(nullptr)) {
      42                 :          0 :         std::cerr << "Fatal error: expected message not found in the debug log: " << m_message << "\n";
      43                 :          0 :         std::abort();
      44                 :            :     }
      45                 :          0 : }
      46                 :            : 
      47                 :          0 : void DebugLogHelper::StopReceivingLog()
      48                 :            : {
      49                 :          0 :     if (m_receiving_log) {
      50                 :          0 :         noui_reconnect();
      51                 :          0 :         LogInstance().DeleteCallback(m_print_connection);
      52                 :          0 :         m_receiving_log = false;
      53                 :          0 :     }
      54                 :          0 : }

Generated by: LCOV version 1.14