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 18ab762bb740405d0fefcccf4a0899a234f995be13Narayan Kamathpackage org.apache.harmony.tests.java.lang; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.InputStream; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 231f4eba15dc9e4086ce7e2a4fc7cac83fe6bbc03dJesse Wilsonimport static tests.support.Support_Exec.javaProcessBuilder; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class Process2Test extends junit.framework.TestCase { 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 27229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.lang.Process#getInputStream(), 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * java.lang.Process#getErrorStream() 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * java.lang.Process#getOutputStream() 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Tests if these methods return buffered streams. 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 321f4eba15dc9e4086ce7e2a4fc7cac83fe6bbc03dJesse Wilson public void test_streams() 331f4eba15dc9e4086ce7e2a4fc7cac83fe6bbc03dJesse Wilson throws IOException, InterruptedException { 341f4eba15dc9e4086ce7e2a4fc7cac83fe6bbc03dJesse Wilson Process p = javaProcessBuilder().start(); 351f4eba15dc9e4086ce7e2a4fc7cac83fe6bbc03dJesse Wilson assertNotNull(p.getInputStream()); 361f4eba15dc9e4086ce7e2a4fc7cac83fe6bbc03dJesse Wilson assertNotNull(p.getErrorStream()); 371f4eba15dc9e4086ce7e2a4fc7cac83fe6bbc03dJesse Wilson assertNotNull(p.getOutputStream()); 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 39f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getErrorStream() { 41da57c8f771867837ebdbc6047180595dfdd013d7Paul Duffin String[] commands = {"sh", "-c", "echo"}; 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Process process = null; 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project process = Runtime.getRuntime().exec(commands, null, null); 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InputStream is = process.getErrorStream(); 46da57c8f771867837ebdbc6047180595dfdd013d7Paul Duffin StringBuilder msg = new StringBuilder(""); 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (true) { 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int c = is.read(); 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (c == -1) 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project msg.append((char) c); 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("", msg.toString()); 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException was thrown."); 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } finally { 57da57c8f771867837ebdbc6047180595dfdd013d7Paul Duffin if (process != null) { 58da57c8f771867837ebdbc6047180595dfdd013d7Paul Duffin process.destroy(); 59da57c8f771867837ebdbc6047180595dfdd013d7Paul Duffin } 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 61f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 62da57c8f771867837ebdbc6047180595dfdd013d7Paul Duffin String[] unknownCommands = {"sh", "-c", "echo oops >&2"}; 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Process erProcess = null; 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project erProcess = Runtime.getRuntime().exec(unknownCommands, null, null); 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InputStream is = erProcess.getErrorStream(); 67da57c8f771867837ebdbc6047180595dfdd013d7Paul Duffin StringBuilder msg = new StringBuilder(""); 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (true) { 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int c = is.read(); 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (c == -1) 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project msg.append((char) c); 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 74da57c8f771867837ebdbc6047180595dfdd013d7Paul Duffin assertEquals("oops\n", msg.toString()); 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException was thrown."); 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } finally { 78da57c8f771867837ebdbc6047180595dfdd013d7Paul Duffin if (erProcess != null) { 79da57c8f771867837ebdbc6047180595dfdd013d7Paul Duffin erProcess.destroy(); 80da57c8f771867837ebdbc6047180595dfdd013d7Paul Duffin } 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 84