blob: cb10c34f58db1f2be6468a0d77b1e24018ebe7db [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package tests.api.java.lang;
import dalvik.annotation.BrokenTest;
import dalvik.annotation.TestLevel;
import dalvik.annotation.TestTargetNew;
import dalvik.annotation.TestTargetClass;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@TestTargetClass(Process.class)
public class ProcessTest extends junit.framework.TestCase {
/**
* @tests java.lang.Process#getInputStream()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getInputStream",
args = {}
)
public void test_getInputStream() {
try {
// Test for:
//Object[] execArgs = Support_Exec.execJava2(
// new String[] { "tests.support.Support_AvailTest" }, null,
// true);
//Process proc = (Process) execArgs[0];
String[] commands = { "sleep", "1"};
Process proc = Runtime.getRuntime().exec(commands, null, null);
OutputStream os = proc.getOutputStream();
// first number indicates total stream length
// second number indicates length of data after second space
// this will allow us to verify length at start, middle, and end
os.write("10 5 abcde".getBytes());
os.close();
InputStream is = proc.getInputStream();
StringBuffer msg = new StringBuffer("");
while (true) {
int c = is.read();
if (c == -1)
break;
msg.append((char) c);
}
is.close();
proc.waitFor();
//Support_Exec.checkStderr(execArgs);
proc.destroy();
assertEquals("true", msg.toString(), msg.toString());
} catch (IOException e) {
fail("IOException executing avail test: " + e);
} catch (InterruptedException e) {
fail("InterruptedException executing avail test: " + e);
}
}
/**
* @tests java.lang.Process#getOutputStream()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getOutputStream",
args = {}
)
public void test_getOutputStream() {
try {
String[] commands = { "sleep", "1"};
Process proc = Runtime.getRuntime().exec(commands, null, null);
OutputStream os = proc.getOutputStream();
// send data, and check if it is echoed back correctly
String str1 = "Some data for testing communication between processes\n";
String str2 = "More data that serves the same purpose.\n";
String str3 = "Here is some more data.\n";
os.write(str1.getBytes());
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
os.close();
InputStream is = proc.getInputStream();
StringBuffer msg = new StringBuffer("");
while (true) {
int c = is.read();
if (c == -1)
break;
msg.append((char) c);
}
is.close();
proc.waitFor();
//Support_Exec.checkStderr(execArgs);
proc.destroy();
String org = str1;
String recvd = msg.toString();
// Doesn't pass on RI
// assertTrue("Data returned did not match data sent. Received: '"
// + recvd + "' sent: '" + org + "'", recvd.equals(org));
} catch (IOException e) {
fail("IOException executing avail test: " + e);
} catch (InterruptedException e) {
fail("InterruptedException executing avail test: " + e);
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "exitValue",
args = {}
)
public void test_exitValue() {
try {
String[] commands = { "ls" };
Process process = Runtime.getRuntime().exec(commands, null, null);
try {
Thread.sleep(5000);
} catch(Exception e) {
}
assertTrue(process.exitValue() == 0);
String[] commandsSleep = { "sleep", "3" };
process = Runtime.getRuntime().exec(commandsSleep, null, null);
process.destroy();
try {
Thread.sleep(5000);
} catch (Exception e) {}
assertTrue(process.exitValue() != 0);
process = Runtime.getRuntime().exec(commandsSleep, null, null);
try {
process.exitValue();
fail("IllegalThreadStateException was not thrown.");
} catch(IllegalThreadStateException itse) {
//expected
}
} catch (IOException e) {
fail("IOException was thrown.");
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "Process",
args = {}
)
public void test_Constructor() {
ProcessClass pc = new ProcessClass();
assertTrue(pc.exitValue() == 0);
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "destroy",
args = {}
)
@BrokenTest("Sporadic timeouts in CTS, but not in CoreTestRunner")
public void test_destroy() {
String[] commands = { "ls"};
try {
Process process = Runtime.getRuntime().exec(commands, null, null);
process.destroy();
} catch (IOException e) {
fail("IOException was thrown.");
}
}
protected void setUp() {
}
protected void tearDown() {
}
protected void doneSuite() {
}
class ProcessClass extends Process {
ProcessClass() {
super();
}
@Override
public void destroy() {
}
@Override
public int exitValue() {
// TODO Auto-generated method stub
return 0;
}
@Override
public InputStream getErrorStream() {
return null;
}
@Override
public InputStream getInputStream() {
return null;
}
@Override
public OutputStream getOutputStream() {
return null;
}
@Override
public int waitFor() throws InterruptedException {
// TODO Auto-generated method stub
return 0;
}
}
}