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