fix tests

This commit is contained in:
2025-08-13 19:50:47 +03:00
parent 154cbd0160
commit 3625afa783
2 changed files with 53 additions and 38 deletions

View File

@@ -21,8 +21,8 @@
#ifndef MICRO_PIP
# include "piincludes_p.h"
# include "piprocess.h"
# include "piliterals_bytes.h"
# include "piprocess.h"
# ifndef WINDOWS
# include <csignal>
# include <sys/wait.h>
@@ -172,15 +172,27 @@ PRIVATE_DEFINITION_START(PIProcess)
void closePipe(StdFile pipe_type, PipeDirection direction) {
if (grab[pipe_type]) {
closePipe(pipes[pipe_type][direction]);
}
void closePipe(PipeHandleType & hpipe) {
# ifdef WINDOWS
CloseHandle(pipes[pipe_type][direction]);
pipes[pipe_type][direction] = 0;
if (hpipe] != 0) {
CloseHandle(hpipe);
hpipe = 0;
}
# else
::close(pipes[pipe_type][direction]);
pipes[pipe_type][direction] = -1;
if (hpipe != -1) {
::close(hpipe);
hpipe = -1;
}
# endif
}
void closeAllPipes() {
forEachPipe([this](PipeHandleType & hpipe) { closePipe(hpipe); });
}
@@ -220,6 +232,7 @@ PRIVATE_DEFINITION_START(PIProcess)
# else
sz = ::write(pipes[StdIn][PipeWrite], data.data(), data.size());
# endif
piCout << "writePipe" << sz;
return sz == data.size_s();
}
@@ -243,12 +256,14 @@ PIProcess::PIProcess(): PIThread() {
PIProcess::~PIProcess() {
PIThread::stopAndWait();
PRIVATE->closeAllPipes();
}
void PIProcess::exec_() {
exec_finished = false;
exec_start = false;
PRIVATE->closeAllPipes();
startOnce();
}
@@ -321,7 +336,6 @@ void PIProcess::startProc(bool detached) {
if (PRIVATE->grab[StdErr]) fcntl(PRIVATE->pipes[StdErr][PipeRead], F_SETFL, O_NONBLOCK);
exec_start = true;
piMinSleep();
if (!detached) {
waitpid(pid_, &exit_code, 0);
exec_finished = true;
@@ -387,20 +401,17 @@ void PIProcess::closeInput() {
}
void PIProcess::enableWriteStdIn(bool on)
{
void PIProcess::enableWriteStdIn(bool on) {
PRIVATE->grab[StdIn] = on;
}
void PIProcess::enableReadStdOut(bool on)
{
void PIProcess::enableReadStdOut(bool on) {
PRIVATE->grab[StdOut] = on;
}
void PIProcess::enableReadStdErr(bool on)
{
void PIProcess::enableReadStdErr(bool on) {
PRIVATE->grab[StdErr] = on;
}

View File

@@ -38,17 +38,15 @@ TEST_F(ProcessTest, Output) {
launcher.exec(command, args);
ASSERT_TRUE(launcher.isRunning());
piMSleep(100);
ASSERT_TRUE(launcher.waitForFinish());
ASSERT_TRUE(launcher.isExecFinished());
const auto out = PIString::fromConsole(launcher.readOutput());
const auto err = PIString::fromConsole(launcher.readError());
const auto out = PIString::fromAscii(launcher.readOutput());
const auto err = PIString::fromAscii(launcher.readError());
EXPECT_TRUE(out.contains("Hello from stdout"));
EXPECT_TRUE(err.contains("Hello from stderr"));
ASSERT_TRUE(launcher.waitForFinish());
const int exit_code = launcher.exitCode();
EXPECT_FALSE(launcher.isRunning());
@@ -71,21 +69,27 @@ TEST_F(ProcessTest, Input) {
launcher.enableWriteStdIn();
launcher.exec(command, args);
ASSERT_TRUE(launcher.isRunning());
piMSleep(100);
EXPECT_TRUE(launcher.isExecStarted());
EXPECT_TRUE(!launcher.isExecFinished());
const PIString test_input = "Test input string\n";
EXPECT_TRUE(launcher.writeInput(test_input.toSystem()));
EXPECT_TRUE(launcher.writeInput(test_input.toAscii()));
launcher.closeInput();
piMSleep(100);
ASSERT_TRUE(launcher.waitForFinish());
EXPECT_TRUE(launcher.isExecFinished());
const auto out = PIString::fromConsole(launcher.readOutput());
const auto out = PIString::fromAscii(launcher.readOutput());
EXPECT_TRUE(out.contains("Test input string"));
}
TEST_F(ProcessTest, DISABLED_NonexistentCommand) {
TEST_F(ProcessTest, NonexistentCommand) {
const PIString command = {"nonexistent_command_12345"};
launcher.exec(command);
EXPECT_FALSE(launcher.isRunning());
ASSERT_TRUE(launcher.isRunning());
ASSERT_TRUE(launcher.waitForFinish());
EXPECT_FALSE(!launcher.isExecFinished());
}