13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#ifndef _XSPOSIXTESTPROCESS_HPP 23c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define _XSPOSIXTESTPROCESS_HPP 33c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*------------------------------------------------------------------------- 43c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * drawElements Quality Program Execution Server 53c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * --------------------------------------------- 63c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 73c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Copyright 2014 The Android Open Source Project 83c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 93c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Licensed under the Apache License, Version 2.0 (the "License"); 103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * you may not use this file except in compliance with the License. 113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * You may obtain a copy of the License at 123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * http://www.apache.org/licenses/LICENSE-2.0 143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Unless required by applicable law or agreed to in writing, software 163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * distributed under the License is distributed on an "AS IS" BASIS, 173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * See the License for the specific language governing permissions and 193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * limitations under the License. 203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*! 223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \file 233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief TestProcess implementation for Unix-like systems. 243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "xsDefs.hpp" 273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "xsTestProcess.hpp" 283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "xsPosixFileReader.hpp" 293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deProcess.hpp" 303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deThread.hpp" 313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <vector> 333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <string> 343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 353c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace xs 363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 373c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace posix 383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 403c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass CaseListWriter : public de::Thread 413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 423c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CaseListWriter (void); 443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ~CaseListWriter (void); 453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void start (const char* caseList, deFile* dst); 473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void stop (void); 483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void run (void); 503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 513c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deFile* m_file; 533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::vector<char> m_caseList; 543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry bool m_run; 553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 573c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass PipeReader : public de::Thread 583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 593c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry PipeReader (ThreadedByteBuffer* dst); 613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ~PipeReader (void); 623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void start (deFile* file); 643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void stop (void); 653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry void run (void); 673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 683c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deFile* m_file; 703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ThreadedByteBuffer* m_buf; 713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // posix 743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 753c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass PosixTestProcess : public TestProcess 763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 773c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry PosixTestProcess (void); 793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual ~PosixTestProcess (void); 803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual void start (const char* name, const char* params, const char* workingDir, const char* caseList); 823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual void terminate (void); 833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual void cleanup (void); 843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual bool isRunning (void); 863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual int getExitCode (void) const; 883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual int readTestLog (deUint8* dst, int numBytes); 903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual int readInfoLog (deUint8* dst, int numBytes) { return m_infoBuffer.tryRead(numBytes, dst); } 913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 923c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate: 933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry PosixTestProcess (const PosixTestProcess& other); 943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry PosixTestProcess& operator= (const PosixTestProcess& other); 953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry de::Process* m_process; 973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry deUint64 m_processStartTime; //!< Used for determining log file timeout. 983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry std::string m_logFileName; 993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ThreadedByteBuffer m_infoBuffer; 1003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry // Threads. 1023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry posix::CaseListWriter m_caseListWriter; 1033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry posix::PipeReader m_stdOutReader; 1043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry posix::PipeReader m_stdErrReader; 1053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry posix::FileReader m_logReader; 1063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 1073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // xs 1093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#endif // _XSPOSIXTESTPROCESS_HPP 111