Bitcoin Core  27.99.0
P2P Digital Currency
util_threadnames_tests.cpp
Go to the documentation of this file.
1 // Copyright (c) 2018-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 <util/string.h>
6 #include <util/threadnames.h>
7 
8 #include <mutex>
9 #include <set>
10 #include <string>
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 BOOST_AUTO_TEST_SUITE(util_threadnames_tests)
21 
22 const std::string TEST_THREAD_NAME_BASE = "test_thread.";
23 
29 std::set<std::string> RenameEnMasse(int num_threads)
30 {
31  std::vector<std::thread> threads;
32  std::set<std::string> names;
33  std::mutex lock;
34 
35  auto RenameThisThread = [&](int i) {
37  std::lock_guard<std::mutex> guard(lock);
38  names.insert(util::ThreadGetInternalName());
39  };
40 
41  threads.reserve(num_threads);
42  for (int i = 0; i < num_threads; ++i) {
43  threads.emplace_back(RenameThisThread, i);
44  }
45 
46  for (std::thread& thread : threads) thread.join();
47 
48  return names;
49 }
50 
55 BOOST_AUTO_TEST_CASE(util_threadnames_test_rename_threaded)
56 {
57 #if !defined(HAVE_THREAD_LOCAL)
58  // This test doesn't apply to platforms where we don't have thread_local.
59  return;
60 #endif
61 
62  std::set<std::string> names = RenameEnMasse(100);
63 
64  BOOST_CHECK_EQUAL(names.size(), 100U);
65 
66  // Names "test_thread.[n]" should exist for n = [0, 99]
67  for (int i = 0; i < 100; ++i) {
68  BOOST_CHECK(names.find(TEST_THREAD_NAME_BASE + ToString(i)) != names.end());
69  }
70 
71 }
72 
BOOST_AUTO_TEST_SUITE(cuckoocache_tests)
Test Suite for CuckooCache.
BOOST_AUTO_TEST_SUITE_END()
const std::string & ThreadGetInternalName()
Get the thread's internal (in-memory) name; used e.g.
Definition: threadnames.cpp:55
void ThreadRename(std::string &&)
Rename a thread both in terms of an internal (in-memory) name as well as its system thread name.
Definition: threadnames.cpp:59
#define BOOST_CHECK_EQUAL(v1, v2)
Definition: object.cpp:18
#define BOOST_CHECK(expr)
Definition: object.cpp:17
std::string ToString(const T &t)
Locale-independent version of std::to_string.
Definition: string.h:110
BOOST_AUTO_TEST_CASE(util_threadnames_test_rename_threaded)
Rename a bunch of threads with the same basename (expect_multiple=true), ensuring suffixes are applie...
std::set< std::string > RenameEnMasse(int num_threads)
Run a bunch of threads to all call util::ThreadRename.
const std::string TEST_THREAD_NAME_BASE