v29.4-roots.4 · Commit 2: [PATCH 02/37] runtime: preserve shared operator controls
src/test/system_tests.cpp
Before: src/test/system_tests.cpp · After: src/test/system_tests.cpp
File metadata
index a5d9be07d526864d075cb80b7081645f4f7d3b74..dec4d4182904012c3ff319866ce846254a72340b 100644
Download original patch · Release notes
Diff rows 1–66 of 66. Line numbers refer to the original before/after files.
+ Added− RemovedUnmarked lines are context.
Scroll the code area horizontally to read long lines. Before is on the left; after is on the right. Unified view fits narrow screens more easily.
src/test/system_tests.cpp
CHANGED
|
@@ -25,7 +25,11 @@ BOOST_AUTO_TEST_CASE(run_command)
|
|
| 25 |
BOOST_CHECK(result.isNull());
|
| 26 |
}
|
| 27 |
{
|
|
|
|
|
|
|
|
|
|
| 28 |
const UniValue result = RunCommandParseJSON("echo {\"success\": true}");
|
|
|
|
| 29 |
BOOST_CHECK(result.isObject());
|
| 30 |
const UniValue& success = result.find_value("success");
|
| 31 |
BOOST_CHECK(!success.isNull());
|
|
@@ -33,12 +37,20 @@ BOOST_AUTO_TEST_CASE(run_command)
|
|
| 33 |
}
|
| 34 |
{
|
| 35 |
// An invalid command is handled by cpp-subprocess
|
|
|
|
|
|
|
|
|
|
| 36 |
const std::string expected{"execve failed: "};
|
|
|
|
| 37 |
BOOST_CHECK_EXCEPTION(RunCommandParseJSON("invalid_command"), subprocess::CalledProcessError, HasReason(expected));
|
| 38 |
}
|
| 39 |
{
|
| 40 |
// Return non-zero exit code, no output to stderr
|
|
|
|
|
|
|
|
|
|
| 41 |
const std::string command{"false"};
|
|
|
|
| 42 |
BOOST_CHECK_EXCEPTION(RunCommandParseJSON(command), std::runtime_error, [&](const std::runtime_error& e) {
|
| 43 |
const std::string what{e.what()};
|
| 44 |
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)
|
|
| 47 |
}
|
| 48 |
{
|
| 49 |
// Return non-zero exit code, with error message for stderr
|
|
|
|
|
|
|
|
|
|
| 50 |
const std::string command{"sh -c 'echo err 1>&2 && false'"};
|
|
|
|
| 51 |
const std::string expected{"err"};
|
| 52 |
BOOST_CHECK_EXCEPTION(RunCommandParseJSON(command), std::runtime_error, [&](const std::runtime_error& e) {
|
| 53 |
const std::string what(e.what());
|
|
@@ -58,17 +74,23 @@ BOOST_AUTO_TEST_CASE(run_command)
|
|
| 58 |
}
|
| 59 |
{
|
| 60 |
// Unable to parse JSON
|
|
|
|
|
|
|
|
|
|
| 61 |
const std::string command{"echo {"};
|
|
|
|
| 62 |
BOOST_CHECK_EXCEPTION(RunCommandParseJSON(command), std::runtime_error, HasReason("Unable to parse JSON: {"));
|
| 63 |
}
|
| 64 |
-
// Test std::in
|
| 65 |
{
|
|
|
|
| 66 |
const UniValue result = RunCommandParseJSON("cat", "{\"success\": true}");
|
| 67 |
BOOST_CHECK(result.isObject());
|
| 68 |
const UniValue& success = result.find_value("success");
|
| 69 |
BOOST_CHECK(!success.isNull());
|
| 70 |
BOOST_CHECK_EQUAL(success.get_bool(), true);
|
| 71 |
}
|
|
|
|
| 72 |
}
|
| 73 |
#endif // ENABLE_EXTERNAL_SIGNER
|
| 74 |
|
|
|
|
| 25 |
BOOST_CHECK(result.isNull());
|
| 26 |
}
|
| 27 |
{
|
| 28 |
+
#ifdef WIN32
|
| 29 |
+
const UniValue result = RunCommandParseJSON("cmd.exe /c echo {\"success\": true}");
|
| 30 |
+
#else
|
| 31 |
const UniValue result = RunCommandParseJSON("echo {\"success\": true}");
|
| 32 |
+
#endif
|
| 33 |
BOOST_CHECK(result.isObject());
|
| 34 |
const UniValue& success = result.find_value("success");
|
| 35 |
BOOST_CHECK(!success.isNull());
|
|
|
|
| 37 |
}
|
| 38 |
{
|
| 39 |
// An invalid command is handled by cpp-subprocess
|
| 40 |
+
#ifdef WIN32
|
| 41 |
+
const std::string expected{"CreateProcess failed: "};
|
| 42 |
+
#else
|
| 43 |
const std::string expected{"execve failed: "};
|
| 44 |
+
#endif
|
| 45 |
BOOST_CHECK_EXCEPTION(RunCommandParseJSON("invalid_command"), subprocess::CalledProcessError, HasReason(expected));
|
| 46 |
}
|
| 47 |
{
|
| 48 |
// Return non-zero exit code, no output to stderr
|
| 49 |
+
#ifdef WIN32
|
| 50 |
+
const std::string command{"cmd.exe /c exit 1"};
|
| 51 |
+
#else
|
| 52 |
const std::string command{"false"};
|
| 53 |
+
#endif
|
| 54 |
BOOST_CHECK_EXCEPTION(RunCommandParseJSON(command), std::runtime_error, [&](const std::runtime_error& e) {
|
| 55 |
const std::string what{e.what()};
|
| 56 |
BOOST_CHECK(what.find(strprintf("RunCommandParseJSON error: process(%s) returned 1: \n", command)) != std::string::npos);
|
|
|
|
| 59 |
}
|
| 60 |
{
|
| 61 |
// Return non-zero exit code, with error message for stderr
|
| 62 |
+
#ifdef WIN32
|
| 63 |
+
const std::string command{"cmd.exe /c \"echo err 1>&2 && exit 1\""};
|
| 64 |
+
#else
|
| 65 |
const std::string command{"sh -c 'echo err 1>&2 && false'"};
|
| 66 |
+
#endif
|
| 67 |
const std::string expected{"err"};
|
| 68 |
BOOST_CHECK_EXCEPTION(RunCommandParseJSON(command), std::runtime_error, [&](const std::runtime_error& e) {
|
| 69 |
const std::string what(e.what());
|
|
|
|
| 74 |
}
|
| 75 |
{
|
| 76 |
// Unable to parse JSON
|
| 77 |
+
#ifdef WIN32
|
| 78 |
+
const std::string command{"cmd.exe /c echo {"};
|
| 79 |
+
#else
|
| 80 |
const std::string command{"echo {"};
|
| 81 |
+
#endif
|
| 82 |
BOOST_CHECK_EXCEPTION(RunCommandParseJSON(command), std::runtime_error, HasReason("Unable to parse JSON: {"));
|
| 83 |
}
|
| 84 |
+
#ifndef WIN32
|
| 85 |
{
|
| 86 |
+
// Test stdin
|
| 87 |
const UniValue result = RunCommandParseJSON("cat", "{\"success\": true}");
|
| 88 |
BOOST_CHECK(result.isObject());
|
| 89 |
const UniValue& success = result.find_value("success");
|
| 90 |
BOOST_CHECK(!success.isNull());
|
| 91 |
BOOST_CHECK_EQUAL(success.get_bool(), true);
|
| 92 |
}
|
| 93 |
+
#endif
|
| 94 |
}
|
| 95 |
#endif // ENABLE_EXTERNAL_SIGNER
|
| 96 |
|