1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/*
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Licensed to the Apache Software Foundation (ASF) under one or more
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  contributor license agreements.  See the NOTICE file distributed with
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  this work for additional information regarding copyright ownership.
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  The ASF licenses this file to You under the Apache License, Version 2.0
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  (the "License"); you may not use this file except in compliance with
7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  the License.  You may obtain a copy of the License at
8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Unless required by applicable law or agreed to in writing, software
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  distributed under the License is distributed on an "AS IS" BASIS,
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  See the License for the specific language governing permissions and
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  limitations under the License.
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.luni.tests.java.lang;
19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.IOException;
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.InputStream;
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.OutputStream;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport tests.support.Support_Exec;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class ProcessTest extends junit.framework.TestCase {
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.lang.Process#getInputStream()
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_getInputStream() {
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			// Test for:
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			Object[] execArgs = Support_Exec.execJava2(
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					new String[] { "tests.support.Support_AvailTest" }, null,
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					true);
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			Process proc = (Process) execArgs[0];
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			OutputStream os = proc.getOutputStream();
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			// first number indicates total stream length
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			// second number indicates length of data after second space
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			// this will allow us to verify length at start, middle, and end
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			os.write("10 5 abcde".getBytes());
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			os.close();
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			InputStream is = proc.getInputStream();
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			StringBuffer msg = new StringBuffer("");
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			while (true) {
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				int c = is.read();
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				if (c == -1)
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					break;
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				msg.append((char) c);
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			is.close();
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			proc.waitFor();
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			Support_Exec.checkStderr(execArgs);
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			proc.destroy();
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertEquals("true", msg.toString(), msg.toString());
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (IOException e) {
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail("IOException executing avail test: " + e);
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (InterruptedException e) {
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail("InterruptedException executing avail test: " + e);
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.lang.Process#getOutputStream()
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_getOutputStream() {
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		try {
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			Object[] execArgs = Support_Exec
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					.execJava2(
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes							new String[] { "tests.support.Support_ProcessReadWriteTest" },
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes							null, true);
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			Process proc = (Process) execArgs[0];
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			OutputStream os = proc.getOutputStream();
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			// send data, and check if it is echoed back correctly
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			String str1 = "Some data for testing communication between processes\n";
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			String str2 = "More data that serves the same purpose.\n";
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			String str3 = "Here is some more data.\n";
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			os.write(str1.getBytes());
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			try {
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				Thread.sleep(1000);
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			} catch (InterruptedException e) {
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				e.printStackTrace();
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			os.write(str2.getBytes());
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			os.write(str3.getBytes());
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			os.close();
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			InputStream is = proc.getInputStream();
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			StringBuffer msg = new StringBuffer("");
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			while (true) {
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				int c = is.read();
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				if (c == -1)
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					break;
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				msg.append((char) c);
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			is.close();
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			proc.waitFor();
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			Support_Exec.checkStderr(execArgs);
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			proc.destroy();
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			String org = str1 + str2 + str3;
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			String recvd = msg.toString();
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			if (!recvd.equals(org)) {
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				System.out.println("Sent:");
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				for (int i = 0; i < org.length(); i++) {
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					if (i != 0 && i % 16 == 0)
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes						System.out.println();
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					System.out.print(Integer.toHexString(org.charAt(i)) + " ");
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				}
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				System.out.println();
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				System.out.println("Received:");
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				for (int i = 0; i < recvd.length(); i++) {
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					if (i != 0 && i % 16 == 0)
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes						System.out.println();
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					System.out
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes							.print(Integer.toHexString(recvd.charAt(i)) + " ");
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				}
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				System.out.println();
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue("Data returned did not match data sent. Received: '"
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					+ recvd + "' sent: '" + org + "'", recvd.equals(org));
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (IOException e) {
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail("IOException executing avail test: " + e);
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} catch (InterruptedException e) {
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			fail("InterruptedException executing avail test: " + e);
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	protected void setUp() {
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	protected void tearDown() {
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	protected void doneSuite() {
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
143