test: Reintroduce Windows support in system_tests/run_command test

This commit is contained in:
Hennadii Stepanov 2025-04-22 23:01:46 +01:00
parent 7835579d6d
commit 15e5125258
No known key found for this signature in database
GPG key ID: 410108112E7EA81F

View file

@ -25,7 +25,11 @@ BOOST_AUTO_TEST_CASE(run_command)
BOOST_CHECK(result.isNull()); BOOST_CHECK(result.isNull());
} }
{ {
#ifdef WIN32
const UniValue result = RunCommandParseJSON("cmd.exe /c echo {\"success\": true}");
#else
const UniValue result = RunCommandParseJSON("echo {\"success\": true}"); const UniValue result = RunCommandParseJSON("echo {\"success\": true}");
#endif
BOOST_CHECK(result.isObject()); BOOST_CHECK(result.isObject());
const UniValue& success = result.find_value("success"); const UniValue& success = result.find_value("success");
BOOST_CHECK(!success.isNull()); BOOST_CHECK(!success.isNull());
@ -33,12 +37,20 @@ BOOST_AUTO_TEST_CASE(run_command)
} }
{ {
// An invalid command is handled by cpp-subprocess // An invalid command is handled by cpp-subprocess
#ifdef WIN32
const std::string expected{"CreateProcess failed: "};
#else
const std::string expected{"execve failed: "}; const std::string expected{"execve failed: "};
#endif
BOOST_CHECK_EXCEPTION(RunCommandParseJSON("invalid_command"), subprocess::CalledProcessError, HasReason(expected)); BOOST_CHECK_EXCEPTION(RunCommandParseJSON("invalid_command"), subprocess::CalledProcessError, HasReason(expected));
} }
{ {
// Return non-zero exit code, no output to stderr // Return non-zero exit code, no output to stderr
#ifdef WIN32
const std::string command{"cmd.exe /c exit 1"};
#else
const std::string command{"false"}; const std::string command{"false"};
#endif
BOOST_CHECK_EXCEPTION(RunCommandParseJSON(command), std::runtime_error, [&](const std::runtime_error& e) { BOOST_CHECK_EXCEPTION(RunCommandParseJSON(command), std::runtime_error, [&](const std::runtime_error& e) {
const std::string what{e.what()}; const std::string what{e.what()};
BOOST_CHECK(what.find(strprintf("RunCommandParseJSON error: process(%s) returned 1: \n", command)) != std::string::npos); BOOST_CHECK(what.find(strprintf("RunCommandParseJSON error: process(%s) returned 1: \n", command)) != std::string::npos);
@ -47,7 +59,11 @@ BOOST_AUTO_TEST_CASE(run_command)
} }
{ {
// Return non-zero exit code, with error message for stderr // Return non-zero exit code, with error message for stderr
#ifdef WIN32
const std::string command{"cmd.exe /c \"echo err 1>&2 && exit 1\""};
#else
const std::string command{"sh -c 'echo err 1>&2 && false'"}; const std::string command{"sh -c 'echo err 1>&2 && false'"};
#endif
const std::string expected{"err"}; const std::string expected{"err"};
BOOST_CHECK_EXCEPTION(RunCommandParseJSON(command), std::runtime_error, [&](const std::runtime_error& e) { BOOST_CHECK_EXCEPTION(RunCommandParseJSON(command), std::runtime_error, [&](const std::runtime_error& e) {
const std::string what(e.what()); const std::string what(e.what());
@ -58,17 +74,23 @@ BOOST_AUTO_TEST_CASE(run_command)
} }
{ {
// Unable to parse JSON // Unable to parse JSON
#ifdef WIN32
const std::string command{"cmd.exe /c echo {"};
#else
const std::string command{"echo {"}; const std::string command{"echo {"};
#endif
BOOST_CHECK_EXCEPTION(RunCommandParseJSON(command), std::runtime_error, HasReason("Unable to parse JSON: {")); BOOST_CHECK_EXCEPTION(RunCommandParseJSON(command), std::runtime_error, HasReason("Unable to parse JSON: {"));
} }
// Test std::in #ifndef WIN32
{ {
// Test stdin
const UniValue result = RunCommandParseJSON("cat", "{\"success\": true}"); const UniValue result = RunCommandParseJSON("cat", "{\"success\": true}");
BOOST_CHECK(result.isObject()); BOOST_CHECK(result.isObject());
const UniValue& success = result.find_value("success"); const UniValue& success = result.find_value("success");
BOOST_CHECK(!success.isNull()); BOOST_CHECK(!success.isNull());
BOOST_CHECK_EQUAL(success.get_bool(), true); BOOST_CHECK_EQUAL(success.get_bool(), true);
} }
#endif
} }
#endif // ENABLE_EXTERNAL_SIGNER #endif // ENABLE_EXTERNAL_SIGNER