LCOV - code coverage report
Current view: top level - src/test - util_threadnames_tests.cpp (source / functions) Hit Total Coverage
Test: total_coverage.info Lines: 22 22 100.0 %
Date: 2020-09-26 01:30:44 Functions: 12 12 100.0 %

          Line data    Source code
       1             : // Copyright (c) 2018-2020 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/setup_common.h>
       6             : #include <util/string.h>
       7             : #include <util/threadnames.h>
       8             : 
       9             : #include <mutex>
      10             : #include <set>
      11             : #include <thread>
      12             : #include <vector>
      13             : 
      14             : #if defined(HAVE_CONFIG_H)
      15             : #include <config/bitcoin-config.h>
      16             : #endif
      17             : 
      18             : #include <boost/test/unit_test.hpp>
      19             : 
      20          89 : BOOST_FIXTURE_TEST_SUITE(util_threadnames_tests, BasicTestingSetup)
      21             : 
      22          89 : const std::string TEST_THREAD_NAME_BASE = "test_thread.";
      23             : 
      24             : /**
      25             :  * Run a bunch of threads to all call util::ThreadRename.
      26             :  *
      27             :  * @return the set of name each thread has after attempted renaming.
      28             :  */
      29           1 : std::set<std::string> RenameEnMasse(int num_threads)
      30             : {
      31           1 :     std::vector<std::thread> threads;
      32           1 :     std::set<std::string> names;
      33           1 :     std::mutex lock;
      34             : 
      35         101 :     auto RenameThisThread = [&](int i) {
      36         100 :         util::ThreadRename(TEST_THREAD_NAME_BASE + ToString(i));
      37          97 :         std::lock_guard<std::mutex> guard(lock);
      38          97 :         names.insert(util::ThreadGetInternalName());
      39         100 :     };
      40             : 
      41         101 :     for (int i = 0; i < num_threads; ++i) {
      42         100 :         threads.push_back(std::thread(RenameThisThread, i));
      43             :     }
      44             : 
      45         101 :     for (std::thread& thread : threads) thread.join();
      46             : 
      47             :     return names;
      48           1 : }
      49             : 
      50             : /**
      51             :  * Rename a bunch of threads with the same basename (expect_multiple=true), ensuring suffixes are
      52             :  * applied properly.
      53             :  */
      54          95 : BOOST_AUTO_TEST_CASE(util_threadnames_test_rename_threaded)
      55             : {
      56             : #if !defined(HAVE_THREAD_LOCAL)
      57             :     // This test doesn't apply to platforms where we don't have thread_local.
      58             :     return;
      59             : #endif
      60             : 
      61           1 :     std::set<std::string> names = RenameEnMasse(100);
      62             : 
      63           1 :     BOOST_CHECK_EQUAL(names.size(), 100U);
      64             : 
      65             :     // Names "test_thread.[n]" should exist for n = [0, 99]
      66         101 :     for (int i = 0; i < 100; ++i) {
      67         100 :         BOOST_CHECK(names.find(TEST_THREAD_NAME_BASE + ToString(i)) != names.end());
      68             :     }
      69             : 
      70           1 : }
      71             : 
      72          89 : BOOST_AUTO_TEST_SUITE_END()

Generated by: LCOV version 1.15