/**
* 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.tomee;
import org.apache.openejb.loader.Files;
import org.apache.openejb.loader.IO;
import org.apache.openejb.util.NetworkUtil;
import org.junit.After;
import org.junit.Test;
import javax.ejb.embeddable.EJBContainer;
import java.io.File;
import java.io.FileFilter;
import java.io.FileWriter;
import java.io.IOException;
import java.net.URL;
import java.util.HashMap;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
public class RemoteTomEEEJBContainerIT {
private EJBContainer container;
@After
public void close() {
try {
if (container != null) {
container.close();
}
} catch (final RuntimeException re) {
// no-op
}
}
@Test(timeout = 300000)
public void run() throws IOException {
final File app = new File("target/mock/webapp");
Files.mkdirs(app);
final FileWriter writer = new FileWriter(new File(app, "index.html"));
writer.write("Hello");
writer.close();
File work = new File("target/webprofile-work-dir/").getAbsoluteFile();
if (!work.exists()) {
//May be running from root
work = new File("apache-tomee/target/webprofile-work-dir/").getAbsoluteFile();
}
final File[] files = work.listFiles(new FileFilter() {
@Override
public boolean accept(final File pathname) {
return pathname.isDirectory() && pathname.getName().startsWith("apache-tomcat-");
}
});
final File tomee = (null != files ? files[0] : null);
if (tomee == null) {
fail("Failed to find Tomcat directory required for this test - Ensure you have run at least the maven phase: mvn process-resources");
}
final FileWriter serverXml = new FileWriter(new File(tomee, "conf/server.xml"));
final int http = NetworkUtil.getNextAvailablePort();
serverXml.write("<?xml version='1.0' encoding='utf-8'?>\n" +
"<Server port=\"" + NetworkUtil.getNextAvailablePort() + "\" shutdown=\"SHUTDOWN\">\n" +
" <!-- TomEE plugin for Tomcat -->\n" +
" <Listener className=\"org.apache.tomee.catalina.ServerListener\" />\n" +
" <Service name=\"Catalina\">\n" +
" <Connector port=\"" + http + "\" protocol=\"HTTP/1.1\" xpoweredBy=\"false\" server=\"Apache TomEE\" />\n" +
" <Engine name=\"Catalina\" defaultHost=\"localhost\">\n" +
" <Host name=\"localhost\" appBase=\"webapps\"\n" +
" unpackWARs=\"true\" autoDeploy=\"true\">\n" +
" </Host>\n" +
" </Engine>\n" +
" </Service>\n" +
"</Server>\n");
serverXml.close();
container = null;
try {
container = EJBContainer.createEJBContainer(new HashMap<Object, Object>() {{
put(EJBContainer.PROVIDER, "tomee-remote");
put(EJBContainer.MODULES, app.getAbsolutePath());
put("openejb.home", tomee.getAbsolutePath());
put("retries", "120");
put("debug", System.getProperty("RemoteTomEEEJBContainerIT.debug", "false"));
}});
final URL url = new URL("http://localhost:" + http + "/webapp/index.html");
assertEquals("Hello", IO.slurp(url));
} finally {
if (container != null) {
container.close();
container = null;
}
}
}
}