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