c25dd16233
Changed RMI tests to use random port numbers for the RMI Registry and RMID so the tests can be run concurrently without test failures due to tests using the same port numbers. Reviewed-by: smarks, alanb
126 lines
4.5 KiB
Java
126 lines
4.5 KiB
Java
/*
|
|
* Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* This code is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License version 2 only, as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
* version 2 for more details (a copy is included in the LICENSE file that
|
|
* accompanied this code).
|
|
*
|
|
* You should have received a copy of the GNU General Public License version
|
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*
|
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
|
* or visit www.oracle.com if you need additional information or have any
|
|
* questions.
|
|
*/
|
|
|
|
/**
|
|
*
|
|
*/
|
|
|
|
import java.io.*;
|
|
|
|
/**
|
|
* Pipe output of one stream into input of another.
|
|
*/
|
|
public class StreamPipe extends Thread {
|
|
|
|
private InputStream in;
|
|
private OutputStream out;
|
|
private String preamble;
|
|
private JavaVM javaVM;
|
|
private static Object lock = new Object();
|
|
private static int count = 0;
|
|
|
|
|
|
/* StreamPipe constructor : should only be called by plugTogether() method !!
|
|
* If passed vm is not null :
|
|
* - This is StreamPipe usage when streams to pipe come from a given
|
|
* vm (JavaVM) process (the vm process must be started with a prefixed
|
|
* "-showversion" option to be able to determine as soon as possible when
|
|
* the vm process is started through the redirection of the streams).
|
|
* There must be a close connection between the StreamPipe instance and
|
|
* the JavaVM object on which a start() call has been done.
|
|
* run() method will flag distant JavaVM as started.
|
|
* If passed vm is null :
|
|
* - We don't have control on the process which we want to redirect the passed
|
|
* streams.
|
|
* run() method will ignore distant process.
|
|
*/
|
|
private StreamPipe(JavaVM vm, InputStream in, OutputStream out, String name) {
|
|
super(name);
|
|
this.in = in;
|
|
this.out = out;
|
|
this.preamble = "# ";
|
|
this.javaVM = vm;
|
|
}
|
|
|
|
// Install redirection of passed InputStream and OutputStream from passed JavaVM
|
|
// to this vm standard output and input streams.
|
|
public static void plugTogether(JavaVM vm, InputStream in, OutputStream out) {
|
|
String name = null;
|
|
|
|
synchronized (lock) {
|
|
name = "TestLibrary: StreamPipe-" + (count ++ );
|
|
}
|
|
|
|
Thread pipe = new StreamPipe(vm, in, out, name);
|
|
pipe.setDaemon(true);
|
|
pipe.start();
|
|
}
|
|
|
|
/* Redirects the InputStream and OutputStream passed by caller to this
|
|
* vm standard output and input streams.
|
|
* (we just have to use fully parametered plugTogether() call with a null
|
|
* JavaVM input to do this).
|
|
*/
|
|
public static void plugTogether(InputStream in, OutputStream out) {
|
|
plugTogether(null, in, out);
|
|
}
|
|
|
|
// Starts redirection of streams.
|
|
public void run() {
|
|
BufferedReader r = new BufferedReader(new InputStreamReader(in), 1);
|
|
BufferedWriter w = new BufferedWriter(new OutputStreamWriter(out));
|
|
byte[] buf = new byte[256];
|
|
|
|
try {
|
|
String line;
|
|
|
|
/* This is to check that the distant vm has started,
|
|
* if such a vm has been provided at construction :
|
|
* - As soon as we can read something from r BufferedReader,
|
|
* that means the distant vm is already started.
|
|
* Thus we signal associated JavaVM object that it is now started.
|
|
*/
|
|
if (((line = r.readLine()) != null) &&
|
|
(javaVM != null)) {
|
|
javaVM.setStarted();
|
|
}
|
|
|
|
// Redirects r on w.
|
|
while (line != null) {
|
|
w.write(preamble);
|
|
w.write(line);
|
|
w.newLine();
|
|
w.flush();
|
|
line = r.readLine();
|
|
}
|
|
} catch (InterruptedIOException iioe) {
|
|
// Thread interrupted during IO operation. Terminate StreamPipe.
|
|
return;
|
|
} catch (IOException e) {
|
|
System.err.println("*** IOException in StreamPipe.run:");
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
}
|