mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-03-16 16:32:47 +00:00
Merge bitcoin/bitcoin#34705: kernel: Use fs:: namespace and unicode path in kernel tests
89386e700ebc232e2beab3a3f3ea0d1ae78ac203 kernel: Use fs:: namespace and unicode path in kernel tests (sedited)
Pull request description:
Add support for unicode characters in paths to the kernel tests by using our fs:: wrappers for std::filesystem calls and adding the windows application manifest to the binary. This exercises their handling through the kernel API.
ACKs for top commit:
hebasto:
ACK 89386e700ebc232e2beab3a3f3ea0d1ae78ac203.
w0xlt:
ACK 89386e700ebc232e2beab3a3f3ea0d1ae78ac203
Tree-SHA512: 7b541f482d84a66c89eec63aea0e7f7626bbbd62082ad7a7fb2c7a517296c291a6ff301c628e5e9e1d7b850ead89005141481a2bfd06d8a9081622e32f7340cc
This commit is contained in:
commit
42f97c542d
1
.github/ci-windows-cross.py
vendored
1
.github/ci-windows-cross.py
vendored
@ -44,7 +44,6 @@ def check_manifests():
|
||||
skipped = { # Skip as they currently do not have manifests
|
||||
"fuzz.exe",
|
||||
"bench_bitcoin.exe",
|
||||
"test_kernel.exe",
|
||||
}
|
||||
for entry in release_dir.iterdir():
|
||||
if entry.suffix.lower() != ".exe":
|
||||
|
||||
1
.github/ci-windows.py
vendored
1
.github/ci-windows.py
vendored
@ -109,7 +109,6 @@ def check_manifests(ci_type):
|
||||
"fuzz.exe",
|
||||
"bench_bitcoin.exe",
|
||||
"test_bitcoin-qt.exe",
|
||||
"test_kernel.exe",
|
||||
"bitcoin-chainstate.exe",
|
||||
}
|
||||
for entry in release_dir.iterdir():
|
||||
|
||||
@ -9,4 +9,6 @@ target_link_libraries(test_kernel
|
||||
Boost::headers
|
||||
)
|
||||
|
||||
add_windows_application_manifest(test_kernel)
|
||||
|
||||
add_test(NAME test_kernel COMMAND test_kernel)
|
||||
|
||||
@ -4,6 +4,7 @@
|
||||
|
||||
#include <kernel/bitcoinkernel.h>
|
||||
#include <kernel/bitcoinkernel_wrapper.h>
|
||||
#include <util/fs.h>
|
||||
|
||||
#define BOOST_TEST_MODULE Bitcoin Kernel Test Suite
|
||||
#include <boost/test/included/unit_test.hpp>
|
||||
@ -13,7 +14,6 @@
|
||||
#include <charconv>
|
||||
#include <cstdint>
|
||||
#include <cstdlib>
|
||||
#include <filesystem>
|
||||
#include <iostream>
|
||||
#include <memory>
|
||||
#include <optional>
|
||||
@ -98,16 +98,16 @@ public:
|
||||
};
|
||||
|
||||
struct TestDirectory {
|
||||
std::filesystem::path m_directory;
|
||||
fs::path m_directory;
|
||||
TestDirectory(std::string directory_name)
|
||||
: m_directory{std::filesystem::temp_directory_path() / (directory_name + random_string(16))}
|
||||
: m_directory{fs::path{fs::temp_directory_path()} / fs::u8path(directory_name + "_🌽_" + random_string(16))}
|
||||
{
|
||||
std::filesystem::create_directories(m_directory);
|
||||
fs::create_directories(m_directory);
|
||||
}
|
||||
|
||||
~TestDirectory()
|
||||
{
|
||||
std::filesystem::remove_all(m_directory);
|
||||
fs::remove_all(m_directory);
|
||||
}
|
||||
};
|
||||
|
||||
@ -725,19 +725,19 @@ BOOST_AUTO_TEST_CASE(btck_chainman_tests)
|
||||
|
||||
{ // test with default context
|
||||
Context context{};
|
||||
ChainstateManagerOptions chainman_opts{context, test_directory.m_directory.string(), (test_directory.m_directory / "blocks").string()};
|
||||
ChainstateManagerOptions chainman_opts{context, PathToString(test_directory.m_directory), PathToString(test_directory.m_directory / "blocks")};
|
||||
ChainMan chainman{context, chainman_opts};
|
||||
}
|
||||
|
||||
{ // test with default context options
|
||||
ContextOptions options{};
|
||||
Context context{options};
|
||||
ChainstateManagerOptions chainman_opts{context, test_directory.m_directory.string(), (test_directory.m_directory / "blocks").string()};
|
||||
ChainstateManagerOptions chainman_opts{context, PathToString(test_directory.m_directory), PathToString(test_directory.m_directory / "blocks")};
|
||||
ChainMan chainman{context, chainman_opts};
|
||||
}
|
||||
{ // null or empty data_directory or blocks_directory are not allowed
|
||||
Context context{};
|
||||
auto valid_dir{test_directory.m_directory.string()};
|
||||
auto valid_dir{PathToString(test_directory.m_directory)};
|
||||
std::vector<std::pair<std::string_view, std::string_view>> illegal_cases{
|
||||
{"", valid_dir},
|
||||
{valid_dir, {nullptr, 0}},
|
||||
@ -753,7 +753,7 @@ BOOST_AUTO_TEST_CASE(btck_chainman_tests)
|
||||
auto notifications{std::make_shared<TestKernelNotifications>()};
|
||||
auto context{create_context(notifications, ChainType::MAINNET)};
|
||||
|
||||
ChainstateManagerOptions chainman_opts{context, test_directory.m_directory.string(), (test_directory.m_directory / "blocks").string()};
|
||||
ChainstateManagerOptions chainman_opts{context, PathToString(test_directory.m_directory), PathToString(test_directory.m_directory / "blocks")};
|
||||
chainman_opts.SetWorkerThreads(4);
|
||||
BOOST_CHECK(!chainman_opts.SetWipeDbs(/*wipe_block_tree=*/true, /*wipe_chainstate=*/false));
|
||||
BOOST_CHECK(chainman_opts.SetWipeDbs(/*wipe_block_tree=*/true, /*wipe_chainstate=*/true));
|
||||
@ -769,7 +769,7 @@ std::unique_ptr<ChainMan> create_chainman(TestDirectory& test_directory,
|
||||
bool chainstate_db_in_memory,
|
||||
Context& context)
|
||||
{
|
||||
ChainstateManagerOptions chainman_opts{context, test_directory.m_directory.string(), (test_directory.m_directory / "blocks").string()};
|
||||
ChainstateManagerOptions chainman_opts{context, PathToString(test_directory.m_directory), PathToString(test_directory.m_directory / "blocks")};
|
||||
|
||||
if (reindex) {
|
||||
chainman_opts.SetWipeDbs(/*wipe_block_tree=*/reindex, /*wipe_chainstate=*/reindex);
|
||||
@ -842,7 +842,7 @@ void chainman_reindex_chainstate_test(TestDirectory& test_directory)
|
||||
/*block_tree_db_in_memory=*/false, /*chainstate_db_in_memory=*/false, context)};
|
||||
|
||||
std::vector<std::string> import_files;
|
||||
import_files.push_back((test_directory.m_directory / "blocks" / "blk00000.dat").string());
|
||||
import_files.push_back(PathToString(test_directory.m_directory / "blocks" / "blk00000.dat"));
|
||||
BOOST_CHECK(chainman->ImportBlocks(import_files));
|
||||
}
|
||||
|
||||
@ -992,9 +992,9 @@ BOOST_AUTO_TEST_CASE(btck_chainman_in_memory_tests)
|
||||
BOOST_CHECK(new_block);
|
||||
}
|
||||
|
||||
BOOST_CHECK(std::filesystem::exists(in_memory_test_directory.m_directory / "blocks"));
|
||||
BOOST_CHECK(!std::filesystem::exists(in_memory_test_directory.m_directory / "blocks" / "index"));
|
||||
BOOST_CHECK(!std::filesystem::exists(in_memory_test_directory.m_directory / "chainstate"));
|
||||
BOOST_CHECK(fs::exists(in_memory_test_directory.m_directory / "blocks"));
|
||||
BOOST_CHECK(!fs::exists(in_memory_test_directory.m_directory / "blocks" / "index"));
|
||||
BOOST_CHECK(!fs::exists(in_memory_test_directory.m_directory / "chainstate"));
|
||||
|
||||
BOOST_CHECK(context.interrupt());
|
||||
}
|
||||
@ -1172,8 +1172,8 @@ BOOST_AUTO_TEST_CASE(btck_chainman_regtest_tests)
|
||||
BOOST_CHECK_EQUAL(count, chain.CountEntries());
|
||||
|
||||
|
||||
std::filesystem::remove_all(test_directory.m_directory / "blocks" / "blk00000.dat");
|
||||
fs::remove_all(test_directory.m_directory / "blocks" / "blk00000.dat");
|
||||
BOOST_CHECK(!chainman->ReadBlock(tip_2).has_value());
|
||||
std::filesystem::remove_all(test_directory.m_directory / "blocks" / "rev00000.dat");
|
||||
fs::remove_all(test_directory.m_directory / "blocks" / "rev00000.dat");
|
||||
BOOST_CHECK_THROW(chainman->ReadBlockSpentOutputs(tip), std::runtime_error);
|
||||
}
|
||||
|
||||
@ -105,7 +105,6 @@ pub fn lint_std_filesystem() -> LintResult {
|
||||
"./src/",
|
||||
":(exclude)src/ipc/libmultiprocess/",
|
||||
":(exclude)src/util/fs.h",
|
||||
":(exclude)src/test/kernel/test_kernel.cpp",
|
||||
":(exclude)src/bitcoin-chainstate.cpp",
|
||||
])
|
||||
.status()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user