kyua: Make "debug -p" skip writing stdout/stderr to tmp files

Reviewed by:	kp, ngie
Differential Revision:	https://reviews.freebsd.org/D54363
This commit is contained in:
Igor Ostapenko
2025-12-26 20:06:56 +00:00
parent 0d31189cbc
commit 350f319731
3 changed files with 25 additions and 7 deletions
+5 -1
View File
@@ -149,7 +149,11 @@ cmd_debug::run(cmdline::ui* ui, const cmdline::parsed_cmdline& cmdline,
const engine::test_filter filter = engine::test_filter::parse(
test_case_name);
auto debugger = std::shared_ptr< engine::debugger >(new dbg(ui, cmdline));
engine::debugger_ptr debugger = nullptr;
if (cmdline.has_option(pause_before_cleanup_upon_fail_option.long_name())
|| cmdline.has_option(pause_before_cleanup_option.long_name())) {
debugger = std::shared_ptr< engine::debugger >(new dbg(ui, cmdline));
}
const drivers::debug_test::result result = drivers::debug_test::drive(
debugger,
+15 -5
View File
@@ -1283,7 +1283,9 @@ scheduler::exec_handle
scheduler::scheduler_handle::spawn_test(
const model::test_program_ptr test_program,
const std::string& test_case_name,
const config::tree& user_config)
const config::tree& user_config,
const utils::optional<utils::fs::path>& stdout_target,
const utils::optional<utils::fs::path>& stderr_target)
{
_pimpl->generic.check_interrupt();
@@ -1305,7 +1307,7 @@ scheduler::scheduler_handle::spawn_test(
run_test_program(interface, test_program, test_case_name,
user_config),
test_case.get_metadata().timeout(),
unprivileged_user);
unprivileged_user, stdout_target, stderr_target);
const exec_data_ptr data(new test_exec_data(
test_program, test_case_name, interface, user_config, handle.pid()));
@@ -1563,8 +1565,16 @@ scheduler::scheduler_handle::debug_test(
const fs::path& stdout_target,
const fs::path& stderr_target)
{
optional<fs::path> out = none;
optional<fs::path> err = none;
const model::test_case& test_case = test_program->find(test_case_name);
if (test_case.get_debugger() != nullptr) {
out = stdout_target;
err = stderr_target;
}
const exec_handle exec_handle = spawn_test(
test_program, test_case_name, user_config);
test_program, test_case_name, user_config, out, err);
result_handle_ptr result_handle = wait_any();
// TODO(jmmv): We need to do this while the subprocess is alive. This is
@@ -1574,12 +1584,12 @@ scheduler::scheduler_handle::debug_test(
// Unfortunately, we cannot do so. We cannot just read and block from a
// file, waiting for further output to appear... as this only works on pipes
// or sockets. We need a better interface for this whole thing.
{
if (test_case.get_debugger() == nullptr) {
std::unique_ptr< std::ostream > output = utils::open_ostream(
stdout_target);
*output << utils::read_file(result_handle->stdout_file());
}
{
if (test_case.get_debugger() == nullptr) {
std::unique_ptr< std::ostream > output = utils::open_ostream(
stderr_target);
*output << utils::read_file(result_handle->stderr_file());
+5 -1
View File
@@ -74,6 +74,8 @@
#include "utils/process/executor_fwd.hpp"
#include "utils/process/status_fwd.hpp"
using utils::none;
namespace engine {
namespace scheduler {
@@ -248,7 +250,9 @@ class scheduler_handle {
const utils::config::tree&);
exec_handle spawn_test(const model::test_program_ptr,
const std::string&,
const utils::config::tree&);
const utils::config::tree&,
const utils::optional<utils::fs::path>& = none,
const utils::optional<utils::fs::path>& = none);
result_handle_ptr wait_any(void);
result_handle_ptr debug_test(const model::test_program_ptr,