MCPcopy Create free account
hub / github.com/bitcoin/bitcoin / BOOST_AUTO_TEST_CASE

Function BOOST_AUTO_TEST_CASE

src/test/system_tests.cpp:43–97  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

41}
42
43BOOST_AUTO_TEST_CASE(run_command)
44{
45 {
46 const UniValue result = RunCommandParseJSON({});
47 BOOST_CHECK(result.isNull());
48 }
49 {
50 const UniValue result = RunCommandParseJSON(mock_executable("valid_json"));
51 BOOST_CHECK(result.isObject());
52 const UniValue& success = result.find_value("success");
53 BOOST_CHECK(!success.isNull());
54 BOOST_CHECK_EQUAL(success.get_bool(), true);
55 }
56 {
57 // An invalid command is handled by cpp-subprocess
58#ifdef WIN32
59 const std::string expected{"CreateProcess failed: "};
60#else
61 const std::string expected{"execve failed: "};
62#endif
63 BOOST_CHECK_EXCEPTION(RunCommandParseJSON({"invalid_command"}), subprocess::CalledProcessError, HasReason(expected));
64 }
65 {
66 // Return non-zero exit code, no output to stderr
67 const std::vector<std::string> command = mock_executable("nonzeroexit_nooutput");
68 BOOST_CHECK_EXCEPTION(RunCommandParseJSON(command), std::runtime_error, [&](const std::runtime_error& e) {
69 const std::string what{e.what()};
70 BOOST_CHECK(what.find(strprintf("RunCommandParseJSON error: process(%s) returned %d: \n", util::Join(command, " "), boost::exit_test_failure)) != std::string::npos);
71 return true;
72 });
73 }
74 {
75 // Return non-zero exit code, with error message for stderr
76 const std::vector<std::string> command = mock_executable("nonzeroexit_stderroutput");
77 const std::string expected{"err"};
78 BOOST_CHECK_EXCEPTION(RunCommandParseJSON(command), std::runtime_error, [&](const std::runtime_error& e) {
79 const std::string what(e.what());
80 BOOST_CHECK(what.find(strprintf("RunCommandParseJSON error: process(%s) returned %s: %s", util::Join(command, " "), boost::exit_test_failure, "err")) != std::string::npos);
81 BOOST_CHECK(what.find(expected) != std::string::npos);
82 return true;
83 });
84 }
85 {
86 // Unable to parse JSON
87 BOOST_CHECK_EXCEPTION(RunCommandParseJSON(mock_executable("invalid_json")), std::runtime_error, HasReason("Unable to parse JSON: {"));
88 }
89 {
90 // Test stdin
91 const UniValue result = RunCommandParseJSON(mock_executable("pass_stdin_to_stdout"), "{\"success\": true}");
92 BOOST_CHECK(result.isObject());
93 const UniValue& success = result.find_value("success");
94 BOOST_CHECK(!success.isNull());
95 BOOST_CHECK_EQUAL(success.get_bool(), true);
96 }
97}
98#endif // ENABLE_EXTERNAL_SIGNER
99
100BOOST_AUTO_TEST_SUITE_END()

Callers

nothing calls this directly

Calls 9

RunCommandParseJSONFunction · 0.85
mock_executableFunction · 0.85
HasReasonClass · 0.85
JoinFunction · 0.85
isNullMethod · 0.80
isObjectMethod · 0.80
get_boolMethod · 0.80
findMethod · 0.80
whatMethod · 0.45

Tested by

no test coverage detected