Skip to content

Commit

Permalink
test: Show debug log on unit test failure
Browse files Browse the repository at this point in the history
  • Loading branch information
MarcoFalke committed Jan 2, 2020
1 parent 17e14ac commit fa37e0a
Show file tree
Hide file tree
Showing 7 changed files with 34 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/bench/bench.cpp
Expand Up @@ -16,6 +16,7 @@
#include <regex>

const RegTestingSetup* g_testing_setup = nullptr;
const std::function<void(const std::string&)> G_TEST_LOG_FUN{};

void benchmark::ConsolePrinter::header()
{
Expand Down
2 changes: 2 additions & 0 deletions src/qt/test/test_main.cpp
Expand Up @@ -37,6 +37,8 @@ Q_IMPORT_PLUGIN(QCocoaIntegrationPlugin);
#endif
#endif

const std::function<void(const std::string&)> G_TEST_LOG_FUN{};

// This is all you need to run all the tests
int main(int argc, char *argv[])
{
Expand Down
4 changes: 4 additions & 0 deletions src/test/fuzz/fuzz.cpp
Expand Up @@ -4,10 +4,14 @@

#include <test/fuzz/fuzz.h>

#include <test/util/setup_common.h>

#include <cstdint>
#include <unistd.h>
#include <vector>

const std::function<void(const std::string&)> G_TEST_LOG_FUN{};

static bool read_stdin(std::vector<uint8_t>& data)
{
uint8_t buffer[1024];
Expand Down
15 changes: 15 additions & 0 deletions src/test/main.cpp
Expand Up @@ -2,6 +2,21 @@
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.

/**
* See https://www.boost.org/doc/libs/1_71_0/libs/test/doc/html/boost_test/utf_reference/link_references/link_boost_test_module_macro.html
*/
#define BOOST_TEST_MODULE Bitcoin Core Test Suite

#include <boost/test/unit_test.hpp>

#include <test/util/setup_common.h>

/** Redirect debug log to boost log */
const std::function<void(const std::string&)> G_TEST_LOG_FUN = [](const std::string& s) {
if (s.back() == '\n') {
// boost will insert the new line
BOOST_TEST_MESSAGE(s.substr(0, s.size() - 1));
} else {
BOOST_TEST_MESSAGE(s);
}
};
1 change: 1 addition & 0 deletions src/test/util/setup_common.cpp
Expand Up @@ -71,6 +71,7 @@ BasicTestingSetup::BasicTestingSetup(const std::string& chainName)
SelectParams(chainName);
SeedInsecureRand();
gArgs.ForceSetArg("-printtoconsole", "0");
if (G_TEST_LOG_FUN) LogInstance().PushBackCallback(G_TEST_LOG_FUN);
InitLogging();
LogInstance().StartLogging();
SHA256AutoDetect();
Expand Down
3 changes: 3 additions & 0 deletions src/test/util/setup_common.h
Expand Up @@ -18,6 +18,9 @@

#include <boost/thread.hpp>

/** This is connected to the logger. Can be used to redirect logs to any other log */
extern const std::function<void(const std::string&)> G_TEST_LOG_FUN;

// Enable BOOST_CHECK_EQUAL for enum class types
template <typename T>
std::ostream& operator<<(typename std::enable_if<std::is_enum<T>::value, std::ostream>::type& stream, const T& e)
Expand Down
8 changes: 8 additions & 0 deletions test/sanitizer_suppressions/tsan
Expand Up @@ -7,6 +7,14 @@ deadlock:WalletBatch
# Intentional deadlock in tests
deadlock:TestPotentialDeadLockDetected

# Race due to unprotected calls to thread-unsafe BOOST_TEST_MESSAGE from different threads:
# * G_TEST_LOG_FUN in the index thread
# * boost test case invoker (entering a test case) in the main thread
# TODO: get rid of BOOST_ macros, see also https://github.com/bitcoin/bitcoin/issues/8670
race:blockfilter_index_initial_sync_invoker
race:txindex_initial_sync_invoker
race:validation_block_tests::TestSubscriber

# Wildcard for all gui tests, should be replaced with non-wildcard suppressions
race:src/qt/test/*
deadlock:src/qt/test/*
Expand Down

0 comments on commit fa37e0a

Please sign in to comment.