
org.apache.openejb.test.RiTestServer Maven / Gradle / Ivy
/**
* 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 org.apache.openejb.test;
import java.io.DataInputStream;
import java.io.File;
import java.net.URL;
import java.util.Properties;
import javax.naming.Context;
/**
* The Client test suite needs the following environment variables
* to be set before it can be run.
*
* test.home
* server.classpath
*/
public class RiTestServer implements TestServer {
protected Process server;
protected boolean startServerProcess;
protected String configFile;
protected String serverClassName = " org.apache.openejb.ri.server.Server ";
protected String classPath;
protected DataInputStream in;
protected DataInputStream err;
protected String testHomePath;
protected File testHome;
/**
* The environment variable test.home
sould be set
* to the base directory where the test suite is located.
*/
public static final String TEST_HOME = "test.home";
public static final String SERVER_CLASSPATH = "server.classpath";
public static final String SERVER_CONFIG = "test.server.config";
public static final String START_SERVER_PROCESS = "test.start.server.process";
public static final String BAD_ENVIRONMENT_ERROR = "The following environment variables must be set before running the test suite:\n";
static {
System.setProperty("noBanner", "true");
}
public RiTestServer() {
}
public void init(final Properties props) {
try {
/* [DMB] Temporary fix */
try {
System.setSecurityManager(new TestSecurityManager());
} catch (final Exception e) {
e.printStackTrace();
}
/* [DMB] Temporary fix */
final String tmp = props.getProperty(START_SERVER_PROCESS, "true").trim();
startServerProcess = "true".equalsIgnoreCase(tmp);
/* If we will not be starting process for the
* server than we don't need to read in the other
* properties
*/
if (!startServerProcess) return;
testHomePath = props.getProperty(TEST_HOME);
classPath = props.getProperty(SERVER_CLASSPATH);
configFile = props.getProperty(SERVER_CONFIG);
checkEnvironment();
testHome = new File(testHomePath);
testHome = testHome.getAbsoluteFile();
testHomePath = testHome.getAbsolutePath();
prepareServerClasspath();
} catch (final Exception e) {
e.printStackTrace();
System.exit(-1);
}
}
public void destroy() {
}
/**
* Starts and Ri Server with the configuration file from
* the properties used to create this RiTestServer.
*
* @param confFileName
*/
public void start() {
if (!startServerProcess) return;
final String command = "java -classpath " + classPath + " " + serverClassName + " " + configFile;
try {
server = Runtime.getRuntime().exec(command);
in = new DataInputStream(server.getInputStream());
err = new DataInputStream(server.getErrorStream());
while (true) {
try {
final String line = in.readLine();
System.out.println(line);
if (line == null || "[RI Server] Ready!".equals(line)) break;
} catch (final Exception e) {
break;
}
}
final Thread t = new Thread(new Runnable() {
public void run() {
while (true) {
try {
final String line = in.readLine();
if (line == null) break;
System.out.println(line);
} catch (final Exception e) {
break;
}
}
}
});
t.start();
final Thread t2 = new Thread(new Runnable() {
public void run() {
while (true) {
try {
final String line = err.readLine();
if (line == null) break;
// System.out.println(line);
} catch (final Exception e) {
break;
}
}
}
});
t2.start();
} catch (final Exception e) {
e.printStackTrace();
}
}
public void stop() {
if (!startServerProcess) return;
if (server != null) server.destroy();
server = null;
try {
in.close();
err.close();
} catch (final Exception e) {
}
}
public Properties getContextEnvironment() {
final Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.ri.server.RiInitCtxFactory");
try {
properties.put(Context.PROVIDER_URL, new URL("http", "127.0.0.1", 1098, ""));
} catch (final Exception e) {
}
//properties.put(Context.SECURITY_PRINCIPAL, "STATEFUL_TEST_CLIENT");
//properties.put(Context.SECURITY_CREDENTIALS, "STATEFUL_TEST_CLIENT");
return properties;
}
//==========================================
// Methods supporting this implementation
// of the TestServer interface
//
private String getConfFilePath(final String confFileName) {
final String str = getConfFile(confFileName).getAbsolutePath();
return str;
}
private File getConfFile(final String confFileName) {
return new File(testHome, confFileName);
}
private void checkEnvironment() {
if (testHomePath == null || classPath == null || configFile == null) {
String error = BAD_ENVIRONMENT_ERROR;
error += (testHomePath == null) ? TEST_HOME + "\n" : "";
error += (classPath == null) ? SERVER_CLASSPATH + "\n" : "";
error += (configFile == null) ? SERVER_CONFIG + "\n" : "";
throw new RuntimeException(error);
}
}
private void prepareServerClasspath() {
final char PS = File.pathSeparatorChar;
final char FS = File.separatorChar;
final String javaTools = System.getProperty("java.home") + FS + "lib" + FS + "tools.jar";
classPath = classPath.replace('/', FS);
classPath = classPath.replace(':', PS);
classPath += PS + javaTools;
}
//
// Methods supporting this implementation
// of the TestServer interface
//==========================================
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy