18#include <boost/test/unit_test.hpp>
25constexpr const char* MOCK_PROCESS_ENV =
"BITCOIN_TEST_MOCK_PROCESS";
27const bool g_maybe_run_mock_dispatcher_before_main{[]() {
28 const char*
name = std::getenv(MOCK_PROCESS_ENV);
29 if (!
name)
return false;
30 const std::string_view n{
name};
31 if (n ==
"valid_json") {
32 std::cout << R
"({"success": true})" << std::endl;
35 if (n ==
"nonzeroexit_nooutput") {
36 std::_Exit(EXIT_FAILURE);
38 if (n ==
"nonzeroexit_stderroutput") {
39 std::cerr <<
"err" << std::endl;
40 std::_Exit(EXIT_FAILURE);
42 if (n ==
"invalid_json") {
43 std::cout <<
"{" << std::endl;
46 if (n ==
"pass_stdin_to_stdout") {
48 std::getline(std::cin,
s);
49 std::cout <<
s << std::endl;
52 std::cerr <<
"Unknown mock process: " << n << std::endl;
53 std::_Exit(EXIT_FAILURE);
62 _putenv_s(MOCK_PROCESS_ENV,
name.c_str());
64 setenv(MOCK_PROCESS_ENV,
name.c_str(), 1);
66 return {boost::unit_test::framework::master_test_suite().argv[0]};
85 const std::string expected{
"CreateProcess failed: "};
87 const std::string expected{
"execve failed: "};
95 const std::string what{e.what()};
103 const std::string expected{
"err"};
105 const std::string what(e.what());
107 BOOST_CHECK(what.find(expected) != std::string::npos);
BOOST_CHECK_EXCEPTION predicates to check the specific validation error.
const UniValue & find_value(std::string_view key) const
BOOST_FIXTURE_TEST_SUITE(cuckoocache_tests, BasicTestingSetup)
Test Suite for CuckooCache.
BOOST_AUTO_TEST_SUITE_END()
BOOST_CHECK_EQUAL(headers.FindFirst("key"), "value")
BOOST_CHECK_EXCEPTION(HTTPHeaders{}.Read(reader), std::runtime_error, HasReason{"Empty HTTP header name"})
auto Join(const C &container, const S &separator, UnaryOp unary_op)
Join all container items.
#define BOOST_CHECK(expr)
UniValue RunCommandParseJSON(const std::vector< std::string > &cmd_args, const std::string &str_std_in)
Execute a command which returns JSON, and parse the result.
static std::vector< std::string > mock_executable(const std::string &name)
BOOST_AUTO_TEST_CASE(run_command)