1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * you may not use this file except in compliance with the License. 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * You may obtain a copy of the License at 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 17ab762bb740405d0fefcccf4a0899a234f995be13Narayan Kamathpackage org.apache.harmony.tests.java.lang; 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase; 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.BufferedReader; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.File; 239b576d3f8644c08e7534eecf2e5ef356dd53ab4cShubham Ajmeraimport java.io.FileOutputStream; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException; 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.InputStream; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.InputStreamReader; 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.OutputStream; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class ProcessManagerTest extends TestCase { 30f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Thread thread = null; 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Process process = null; 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean isThrown = false; 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testCat() throws IOException, InterruptedException { 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String[] commands = { "cat" }; 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Process process = Runtime.getRuntime().exec(commands, null, null); 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project OutputStream out = process.getOutputStream(); 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String greeting = "Hello, World!"; 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project out.write(greeting.getBytes()); 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project out.write('\n'); 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project out.close(); 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(greeting, readLine(process)); 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 47f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 486a6b612286976cc185c898803fe51e4e062bd9ebBrett Chabot // BrokenTest: Sporadic failures in CTS, but not in CoreTestRunner 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testSleep() throws IOException { 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String[] commands = { "sleep", "1" }; 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project process = Runtime.getRuntime().exec(commands, null, null); 52f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes try { 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(0, process.waitFor()); 54f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(InterruptedException ie) { 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("InterruptedException was thrown."); 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project isThrown = false; 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project thread = new Thread() { 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void run() { 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String[] commands = { "sleep", "1000"}; 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project process = Runtime.getRuntime().exec(commands, null, null); 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e1) { 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException was thrown."); 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project process.waitFor(); 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("InterruptedException was not thrown."); 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(InterruptedException ie) { 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project isThrown = true; 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 76f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 77f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes Thread interruptThread = new Thread() { 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void run() { 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sleep(10); 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(InterruptedException ie) { 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("InterruptedException was thrown in " + 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "the interruptThread."); 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project thread.interrupt(); 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project thread.start(); 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project interruptThread.start(); 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project interruptThread.join(); 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (InterruptedException e) { 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("InterruptedException was thrown."); 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Thread.sleep(100); 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(InterruptedException ie) { 98f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 100f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project thread.interrupt(); 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //process.destroy(); 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Thread.sleep(100); 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch(InterruptedException ie) { 106f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 108f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(isThrown); 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testPwd() throws IOException, InterruptedException { 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String[] commands = { "sh", "-c", "pwd" }; 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Process process = Runtime.getRuntime().exec( 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project commands, null, new File("/")); 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project logErrors(process); 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("/", readLine(process)); 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testEnvironment() throws IOException, InterruptedException { 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String[] commands = { "sh", "-c", "echo $FOO" }; 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Remember to set the path so we can find sh. 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String[] environment = { "FOO=foo", "PATH=" + System.getenv("PATH") }; 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Process process = Runtime.getRuntime().exec( 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project commands, environment, null); 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project logErrors(process); 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("foo", readLine(process)); 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String readLine(Process process) throws IOException { 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InputStream in = process.getInputStream(); 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project BufferedReader reader = new BufferedReader(new InputStreamReader(in)); 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return reader.readLine(); 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project void logErrors(final Process process) throws IOException { 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Thread thread = new Thread() { 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void run() { 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InputStream in = process.getErrorStream(); 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project BufferedReader reader 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project = new BufferedReader(new InputStreamReader(in)); 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String line; 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while ((line = reader.readLine()) != null) { 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project System.err.println(line); 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project e.printStackTrace(); 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project thread.setDaemon(true); 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project thread.start(); 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testHeavyLoad() { 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int i; 1596539d2364df3a3c8488ecadc42014280c194a9c5Jorg Pleumann for (i = 0; i < 100; i++) 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project stuff(); 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static void stuff() { 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime rt = Runtime.getRuntime(); 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Process proc = rt.exec("ls"); 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project proc.waitFor(); 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project proc = null; 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception ex) { 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project System.err.println("Failure: " + ex); 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new RuntimeException(ex); 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rt.gc(); 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rt = null; 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1779b576d3f8644c08e7534eecf2e5ef356dd53ab4cShubham Ajmera FileOutputStream out; 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testCloseNonStandardFds() 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws IOException, InterruptedException { 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String[] commands = { "ls", "/proc/self/fd" }; 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Process process = Runtime.getRuntime().exec(commands, null, null); 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int before = countLines(process); 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1869b576d3f8644c08e7534eecf2e5ef356dd53ab4cShubham Ajmera File tmpFile = File.createTempFile("testCloseNonStandardFds", ".txt"); 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Open a new fd. 1889b576d3f8644c08e7534eecf2e5ef356dd53ab4cShubham Ajmera this.out = new FileOutputStream(tmpFile); 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project process = Runtime.getRuntime().exec(commands, null, null); 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int after = countLines(process); 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Assert that the new fd wasn't open in the second run. 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(before, after); 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } finally { 1979b576d3f8644c08e7534eecf2e5ef356dd53ab4cShubham Ajmera this.out.close(); 1989b576d3f8644c08e7534eecf2e5ef356dd53ab4cShubham Ajmera tmpFile.delete(); 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Counts lines of input from the given process. Equivalent to "wc -l". 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private int countLines(Process process) throws IOException { 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project logErrors(process); 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InputStream in = process.getInputStream(); 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project BufferedReader reader = new BufferedReader(new InputStreamReader(in)); 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int count = 0; 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (reader.readLine() != null) { 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project count++; 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return count; 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testInvalidCommand() 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws IOException, InterruptedException { 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String[] commands = { "doesnotexist" }; 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Runtime.getRuntime().exec(commands, null, null); 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { /* expected */ } 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 224