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