diff --git a/alib2integrationtest/test-src/testing/TimeoutAqlTest.cpp b/alib2integrationtest/test-src/testing/TimeoutAqlTest.cpp index ee0fa0a02993d2c1dd55ca753f1d8b0123ba7c79..cd47e920246d1d5891fb66b51a81ce683d128a27 100644 --- a/alib2integrationtest/test-src/testing/TimeoutAqlTest.cpp +++ b/alib2integrationtest/test-src/testing/TimeoutAqlTest.cpp @@ -6,6 +6,9 @@ #include <unistd.h> #include <sys/wait.h> #include <signal.h> +#include <string.h> + +#include <global/GlobalData.h> #define PIPE_RD 0 #define PIPE_WR 1 @@ -40,9 +43,16 @@ int aqlTest ( int fd, const ext::vector < std::string > & queries ) { try { cli::Environment environment; + std::stringstream ss; + common::Streams::out = ss; + common::Streams::err = ss; + for ( const std::string & q : queries ) { cli::Parser parser = cli::Parser ( cli::Lexer ( q ) ); parser.parse ( ) -> run ( environment ); + + if ( write ( fd, ss.str ( ).c_str ( ), ss.str ( ).length ( ) ) != ( ssize_t ) ss.str ( ).length ( ) ) + throw std::runtime_error ( "TimeoutAqlTest: child output write() failure (child to parent communication)" ); } return environment.getResult ( ); /* 0 = OK */ @@ -125,12 +135,16 @@ void _TimeoutAqlTest ( const std::chrono::microseconds & timeout, const ext::vec close ( pipefd [ PIPE_WR ] ); if ( WIFEXITED ( status ) ) { - // std::cerr << "Child process finished, code " << WEXITSTATUS ( status ) << std::endl; INFO ( "AqlTest failure. Trying to execute: " << queries ); INFO ( "Child output was: >" << childOutput << "<" ); REQUIRE ( WEXITSTATUS ( status ) == 0 ); } else if ( WIFSIGNALED ( status ) ) { - // std::cerr << "Child process signaled, signal ", WTERMSIG ( status ) << std::endl; - WARN ( "Timeout (" << timeout.count ( ) << " us) reached in test (" << queries << ")" ); + if ( WTERMSIG ( status ) == SIGTERM || WTERMSIG ( status ) == SIGKILL ) { /* killed by timeout control */ + WARN ( "Timeout (" << timeout.count ( ) << " us) reached in test (" << queries << ")" ); + } else { + INFO ( "Child process signaled, signal " << WTERMSIG ( status ) << " (" << strsignal ( WTERMSIG ( status ) ) << ")" ); + INFO ( "Child output was: >" << childOutput << "<" ); + FAIL ( ); + } } }