fix tests
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user