1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage tests.api.java.lang; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20b441085db130d5bee561b8baec829bee50068b27Jorg Pleumannimport dalvik.annotation.BrokenTest; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.InputStream; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.OutputStream; 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class ProcessTest extends junit.framework.TestCase { 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 29229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.lang.Process#getInputStream() 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getInputStream() { 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for: 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Object[] execArgs = Support_Exec.execJava2( 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // new String[] { "tests.support.Support_AvailTest" }, null, 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // true); 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Process proc = (Process) execArgs[0]; 38f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 39f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes String[] commands = { "sleep", "1"}; 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Process proc = Runtime.getRuntime().exec(commands, null, null); 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project OutputStream os = proc.getOutputStream(); 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // first number indicates total stream length 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // second number indicates length of data after second space 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // this will allow us to verify length at start, middle, and end 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project os.write("10 5 abcde".getBytes()); 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project os.close(); 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InputStream is = proc.getInputStream(); 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project StringBuffer msg = new StringBuffer(""); 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (true) { 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int c = is.read(); 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (c == -1) 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project msg.append((char) c); 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project is.close(); 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project proc.waitFor(); 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Support_Exec.checkStderr(execArgs); 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project proc.destroy(); 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("true", msg.toString(), msg.toString()); 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException executing avail test: " + e); 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (InterruptedException e) { 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("InterruptedException executing avail test: " + e); 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 71229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.lang.Process#getOutputStream() 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getOutputStream() { 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 75f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes String[] commands = { "sleep", "1"}; 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Process proc = Runtime.getRuntime().exec(commands, null, null); 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project OutputStream os = proc.getOutputStream(); 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // send data, and check if it is echoed back correctly 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String str1 = "Some data for testing communication between processes\n"; 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String str2 = "More data that serves the same purpose.\n"; 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String str3 = "Here is some more data.\n"; 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project os.write(str1.getBytes()); 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Thread.sleep(2000); 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (InterruptedException e) { 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project e.printStackTrace(); 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project os.close(); 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InputStream is = proc.getInputStream(); 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project StringBuffer msg = new StringBuffer(""); 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (true) { 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int c = is.read(); 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (c == -1) 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project msg.append((char) c); 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project is.close(); 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project proc.waitFor(); 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //Support_Exec.checkStderr(execArgs); 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project proc.destroy(); 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String org = str1; 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String recvd = msg.toString(); 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Doesn't pass on RI 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // assertTrue("Data returned did not match data sent. Received: '" 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // + recvd + "' sent: '" + org + "'", recvd.equals(org)); 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException executing avail test: " + e); 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (InterruptedException e) { 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("InterruptedException executing avail test: " + e); 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_exitValue() { 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 115f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes String[] commands = { "ls" }; 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Process process = Runtime.getRuntime().exec(commands, null, null); 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Thread.sleep(5000); 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(Exception e) { 120f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(process.exitValue() == 0); 123f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String[] commandsSleep = { "sleep", "3" }; 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project process = Runtime.getRuntime().exec(commandsSleep, null, null); 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project process.destroy(); 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Thread.sleep(5000); 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) {} 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(process.exitValue() != 0); 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project process = Runtime.getRuntime().exec(commandsSleep, null, null); 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project process.exitValue(); 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalThreadStateException was not thrown."); 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(IllegalThreadStateException itse) { 137f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes //expected 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException was thrown."); 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 143f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_Constructor() { 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ProcessClass pc = new ProcessClass(); 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(pc.exitValue() == 0); 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 148f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 149b441085db130d5bee561b8baec829bee50068b27Jorg Pleumann @BrokenTest("Sporadic timeouts in CTS, but not in CoreTestRunner") 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_destroy() { 151f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes String[] commands = { "ls"}; 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Process process = Runtime.getRuntime().exec(commands, null, null); 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project process.destroy(); 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException was thrown."); 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 159f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void setUp() { 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void tearDown() { 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void doneSuite() { 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 168f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project class ProcessClass extends Process { 170f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ProcessClass() { 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(); 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void destroy() { 177f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int exitValue() { 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // TODO Auto-generated method stub 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return 0; 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public InputStream getErrorStream() { 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public InputStream getInputStream() { 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public OutputStream getOutputStream() { 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int waitFor() throws InterruptedException { 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // TODO Auto-generated method stub 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return 0; 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 206f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 209