1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove 25*b1cdbd2cSJim Jagielski #include "precompiled_sal.hxx" 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski #include <cppunit/simpleheader.hxx> 28*b1cdbd2cSJim Jagielski #include <osl/process.h> 29*b1cdbd2cSJim Jagielski #include <rtl/ustring.hxx> 30*b1cdbd2cSJim Jagielski #include <unistd.h> 31*b1cdbd2cSJim Jagielski #include <signal.h> 32*b1cdbd2cSJim Jagielski 33*b1cdbd2cSJim Jagielski #ifdef WNT 34*b1cdbd2cSJim Jagielski const rtl::OUString IMAGE_NAME = rtl::OUString::createFromAscii("ojpx.exe"); 35*b1cdbd2cSJim Jagielski #else 36*b1cdbd2cSJim Jagielski const rtl::OUString IMAGE_NAME = rtl::OUString::createFromAscii("ojpx"); 37*b1cdbd2cSJim Jagielski #endif 38*b1cdbd2cSJim Jagielski 39*b1cdbd2cSJim Jagielski const rtl::OUString CWD = rtl::OUString::createFromAscii("."); 40*b1cdbd2cSJim Jagielski 41*b1cdbd2cSJim Jagielski //------------------------------ 42*b1cdbd2cSJim Jagielski // 43*b1cdbd2cSJim Jagielski //------------------------------ 44*b1cdbd2cSJim Jagielski 45*b1cdbd2cSJim Jagielski class Test_osl_Process : public CppUnit::TestFixture 46*b1cdbd2cSJim Jagielski { 47*b1cdbd2cSJim Jagielski public: 48*b1cdbd2cSJim Jagielski 49*b1cdbd2cSJim Jagielski /*------------------------------------- 50*b1cdbd2cSJim Jagielski Start a process and join with this 51*b1cdbd2cSJim Jagielski process specify a timeout so that 52*b1cdbd2cSJim Jagielski osl_joinProcessWithTimeout returns 53*b1cdbd2cSJim Jagielski osl_Process_E_TimedOut 54*b1cdbd2cSJim Jagielski -------------------------------------*/ 55*b1cdbd2cSJim Jagielski test_osl_joinProcessWithTimeout_timeout_failure()56*b1cdbd2cSJim Jagielski void test_osl_joinProcessWithTimeout_timeout_failure() 57*b1cdbd2cSJim Jagielski { 58*b1cdbd2cSJim Jagielski oslProcess process; 59*b1cdbd2cSJim Jagielski oslProcessError osl_error = osl_executeProcess( 60*b1cdbd2cSJim Jagielski IMAGE_NAME.pData, 61*b1cdbd2cSJim Jagielski NULL, 62*b1cdbd2cSJim Jagielski 0, 63*b1cdbd2cSJim Jagielski osl_Process_NORMAL, 64*b1cdbd2cSJim Jagielski osl_getCurrentSecurity(), 65*b1cdbd2cSJim Jagielski CWD.pData, 66*b1cdbd2cSJim Jagielski NULL, 67*b1cdbd2cSJim Jagielski 0, 68*b1cdbd2cSJim Jagielski &process); 69*b1cdbd2cSJim Jagielski 70*b1cdbd2cSJim Jagielski CPPUNIT_ASSERT_MESSAGE 71*b1cdbd2cSJim Jagielski ( 72*b1cdbd2cSJim Jagielski "osl_createProcess failed", 73*b1cdbd2cSJim Jagielski osl_error == osl_Process_E_None 74*b1cdbd2cSJim Jagielski ); 75*b1cdbd2cSJim Jagielski 76*b1cdbd2cSJim Jagielski TimeValue timeout; 77*b1cdbd2cSJim Jagielski timeout.Seconds = 1; 78*b1cdbd2cSJim Jagielski timeout.Nanosec = 0; 79*b1cdbd2cSJim Jagielski 80*b1cdbd2cSJim Jagielski osl_error = osl_joinProcessWithTimeout(process, &timeout); 81*b1cdbd2cSJim Jagielski 82*b1cdbd2cSJim Jagielski CPPUNIT_ASSERT_MESSAGE 83*b1cdbd2cSJim Jagielski ( 84*b1cdbd2cSJim Jagielski "osl_joinProcessWithTimeout returned without timeout failure", 85*b1cdbd2cSJim Jagielski osl_Process_E_TimedOut == osl_error 86*b1cdbd2cSJim Jagielski ); 87*b1cdbd2cSJim Jagielski 88*b1cdbd2cSJim Jagielski osl_error = osl_terminateProcess(process); 89*b1cdbd2cSJim Jagielski 90*b1cdbd2cSJim Jagielski CPPUNIT_ASSERT_MESSAGE 91*b1cdbd2cSJim Jagielski ( 92*b1cdbd2cSJim Jagielski "osl_terminateProcess failed", 93*b1cdbd2cSJim Jagielski osl_error == osl_Process_E_None 94*b1cdbd2cSJim Jagielski ); 95*b1cdbd2cSJim Jagielski 96*b1cdbd2cSJim Jagielski osl_freeProcessHandle(process); 97*b1cdbd2cSJim Jagielski } 98*b1cdbd2cSJim Jagielski 99*b1cdbd2cSJim Jagielski /*------------------------------------- 100*b1cdbd2cSJim Jagielski Start a process and join with this 101*b1cdbd2cSJim Jagielski process specify a timeout so that 102*b1cdbd2cSJim Jagielski osl_joinProcessWithTimeout returns 103*b1cdbd2cSJim Jagielski osl_Process_E_None 104*b1cdbd2cSJim Jagielski -------------------------------------*/ 105*b1cdbd2cSJim Jagielski test_osl_joinProcessWithTimeout_without_timeout_failure()106*b1cdbd2cSJim Jagielski void test_osl_joinProcessWithTimeout_without_timeout_failure() 107*b1cdbd2cSJim Jagielski { 108*b1cdbd2cSJim Jagielski oslProcess process; 109*b1cdbd2cSJim Jagielski oslProcessError osl_error = osl_executeProcess( 110*b1cdbd2cSJim Jagielski IMAGE_NAME.pData, 111*b1cdbd2cSJim Jagielski NULL, 112*b1cdbd2cSJim Jagielski 0, 113*b1cdbd2cSJim Jagielski osl_Process_NORMAL, 114*b1cdbd2cSJim Jagielski osl_getCurrentSecurity(), 115*b1cdbd2cSJim Jagielski CWD.pData, 116*b1cdbd2cSJim Jagielski NULL, 117*b1cdbd2cSJim Jagielski 0, 118*b1cdbd2cSJim Jagielski &process); 119*b1cdbd2cSJim Jagielski 120*b1cdbd2cSJim Jagielski CPPUNIT_ASSERT_MESSAGE 121*b1cdbd2cSJim Jagielski ( 122*b1cdbd2cSJim Jagielski "osl_createProcess failed", 123*b1cdbd2cSJim Jagielski osl_error == osl_Process_E_None 124*b1cdbd2cSJim Jagielski ); 125*b1cdbd2cSJim Jagielski 126*b1cdbd2cSJim Jagielski TimeValue timeout; 127*b1cdbd2cSJim Jagielski timeout.Seconds = 10; 128*b1cdbd2cSJim Jagielski timeout.Nanosec = 0; 129*b1cdbd2cSJim Jagielski 130*b1cdbd2cSJim Jagielski osl_error = osl_joinProcessWithTimeout(process, &timeout); 131*b1cdbd2cSJim Jagielski 132*b1cdbd2cSJim Jagielski CPPUNIT_ASSERT_MESSAGE 133*b1cdbd2cSJim Jagielski ( 134*b1cdbd2cSJim Jagielski "osl_joinProcessWithTimeout returned with failure", 135*b1cdbd2cSJim Jagielski osl_Process_E_None == osl_error 136*b1cdbd2cSJim Jagielski ); 137*b1cdbd2cSJim Jagielski 138*b1cdbd2cSJim Jagielski osl_freeProcessHandle(process); 139*b1cdbd2cSJim Jagielski } 140*b1cdbd2cSJim Jagielski 141*b1cdbd2cSJim Jagielski /*------------------------------------- 142*b1cdbd2cSJim Jagielski Start a process and join with this 143*b1cdbd2cSJim Jagielski process specify an infinite timeout 144*b1cdbd2cSJim Jagielski -------------------------------------*/ 145*b1cdbd2cSJim Jagielski test_osl_joinProcessWithTimeout_infinite()146*b1cdbd2cSJim Jagielski void test_osl_joinProcessWithTimeout_infinite() 147*b1cdbd2cSJim Jagielski { 148*b1cdbd2cSJim Jagielski oslProcess process; 149*b1cdbd2cSJim Jagielski oslProcessError osl_error = osl_executeProcess( 150*b1cdbd2cSJim Jagielski IMAGE_NAME.pData, 151*b1cdbd2cSJim Jagielski NULL, 152*b1cdbd2cSJim Jagielski 0, 153*b1cdbd2cSJim Jagielski osl_Process_NORMAL, 154*b1cdbd2cSJim Jagielski osl_getCurrentSecurity(), 155*b1cdbd2cSJim Jagielski CWD.pData, 156*b1cdbd2cSJim Jagielski NULL, 157*b1cdbd2cSJim Jagielski 0, 158*b1cdbd2cSJim Jagielski &process); 159*b1cdbd2cSJim Jagielski 160*b1cdbd2cSJim Jagielski CPPUNIT_ASSERT_MESSAGE 161*b1cdbd2cSJim Jagielski ( 162*b1cdbd2cSJim Jagielski "osl_createProcess failed", 163*b1cdbd2cSJim Jagielski osl_error == osl_Process_E_None 164*b1cdbd2cSJim Jagielski ); 165*b1cdbd2cSJim Jagielski 166*b1cdbd2cSJim Jagielski osl_error = osl_joinProcessWithTimeout(process, NULL); 167*b1cdbd2cSJim Jagielski 168*b1cdbd2cSJim Jagielski CPPUNIT_ASSERT_MESSAGE 169*b1cdbd2cSJim Jagielski ( 170*b1cdbd2cSJim Jagielski "osl_joinProcessWithTimeout returned with failure", 171*b1cdbd2cSJim Jagielski osl_Process_E_None == osl_error 172*b1cdbd2cSJim Jagielski ); 173*b1cdbd2cSJim Jagielski 174*b1cdbd2cSJim Jagielski osl_freeProcessHandle(process); 175*b1cdbd2cSJim Jagielski } 176*b1cdbd2cSJim Jagielski 177*b1cdbd2cSJim Jagielski /*------------------------------------- 178*b1cdbd2cSJim Jagielski Start a process and join with this 179*b1cdbd2cSJim Jagielski process using osl_joinProcess 180*b1cdbd2cSJim Jagielski -------------------------------------*/ 181*b1cdbd2cSJim Jagielski test_osl_joinProcess()182*b1cdbd2cSJim Jagielski void test_osl_joinProcess() 183*b1cdbd2cSJim Jagielski { 184*b1cdbd2cSJim Jagielski oslProcess process; 185*b1cdbd2cSJim Jagielski oslProcessError osl_error = osl_executeProcess( 186*b1cdbd2cSJim Jagielski IMAGE_NAME.pData, 187*b1cdbd2cSJim Jagielski NULL, 188*b1cdbd2cSJim Jagielski 0, 189*b1cdbd2cSJim Jagielski osl_Process_NORMAL, 190*b1cdbd2cSJim Jagielski osl_getCurrentSecurity(), 191*b1cdbd2cSJim Jagielski CWD.pData, 192*b1cdbd2cSJim Jagielski NULL, 193*b1cdbd2cSJim Jagielski 0, 194*b1cdbd2cSJim Jagielski &process); 195*b1cdbd2cSJim Jagielski 196*b1cdbd2cSJim Jagielski CPPUNIT_ASSERT_MESSAGE 197*b1cdbd2cSJim Jagielski ( 198*b1cdbd2cSJim Jagielski "osl_createProcess failed", 199*b1cdbd2cSJim Jagielski osl_error == osl_Process_E_None 200*b1cdbd2cSJim Jagielski ); 201*b1cdbd2cSJim Jagielski 202*b1cdbd2cSJim Jagielski osl_error = osl_joinProcess(process); 203*b1cdbd2cSJim Jagielski 204*b1cdbd2cSJim Jagielski CPPUNIT_ASSERT_MESSAGE 205*b1cdbd2cSJim Jagielski ( 206*b1cdbd2cSJim Jagielski "osl_joinProcess returned with failure", 207*b1cdbd2cSJim Jagielski osl_Process_E_None == osl_error 208*b1cdbd2cSJim Jagielski ); 209*b1cdbd2cSJim Jagielski 210*b1cdbd2cSJim Jagielski osl_freeProcessHandle(process); 211*b1cdbd2cSJim Jagielski } 212*b1cdbd2cSJim Jagielski 213*b1cdbd2cSJim Jagielski CPPUNIT_TEST_SUITE(Test_osl_Process); 214*b1cdbd2cSJim Jagielski CPPUNIT_TEST(test_osl_joinProcessWithTimeout_timeout_failure); 215*b1cdbd2cSJim Jagielski CPPUNIT_TEST(test_osl_joinProcessWithTimeout_without_timeout_failure); 216*b1cdbd2cSJim Jagielski CPPUNIT_TEST(test_osl_joinProcessWithTimeout_infinite); 217*b1cdbd2cSJim Jagielski CPPUNIT_TEST(test_osl_joinProcess); 218*b1cdbd2cSJim Jagielski CPPUNIT_TEST_SUITE_END(); 219*b1cdbd2cSJim Jagielski }; 220*b1cdbd2cSJim Jagielski 221*b1cdbd2cSJim Jagielski CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(Test_osl_Process, "Test_osl_Process"); 222*b1cdbd2cSJim Jagielski 223*b1cdbd2cSJim Jagielski NOADDITIONAL; 224*b1cdbd2cSJim Jagielski 225