package org.nutz.mvc.testapp;
import static org.junit.Assert.assertNotNull;
import java.net.URL;
import java.util.Arrays;
import java.util.Map;
import org.apache.tomcat.InstanceManager;
import org.apache.tomcat.SimpleInstanceManager;
import org.eclipse.jetty.apache.jsp.JettyJasperInitializer;
import org.eclipse.jetty.plus.annotation.ContainerInitializer;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;
import org.junit.After;
import org.junit.Before;
import org.nutz.http.Header;
import org.nutz.http.Http;
import org.nutz.http.Request;
import org.nutz.http.Request.METHOD;
import org.nutz.http.Response;
import org.nutz.http.Sender;
/**
* 需要Jetty 7.3.1 的jar包
*
* @author wendal
*
*/
public abstract class BaseWebappTest {
protected Server server;
protected Response resp;
private boolean isRunInMaven = false;
private String serverURL = "http://localhost:8888";
// {
// for (StackTraceElement ste : Thread.currentThread().getStackTrace()) {
// if (ste.getClassName().startsWith("org.apache.maven.surefire")) {
// isRunInMaven = true;
// serverURL = "http://nutztest.herokuapp.com";
// break;
// }
// }
// }
@Before
public void startServer() throws Throwable {
if (!isRunInMaven) {
try {
URL url = getClass().getClassLoader().getResource("org/nutz/mvc/testapp/Root/FLAG");
String path = url.toExternalForm();
System.err.println(url);
server = new Server(8888);
String warUrlString = path.substring(0, path.length() - 4);
WebAppContext webapp = new WebAppContext(warUrlString, getContextPath());
webapp.setAttribute("org.eclipse.jetty.containerInitializers" , Arrays.asList (
new ContainerInitializer(new JettyJasperInitializer(), null)));
webapp.setAttribute(InstanceManager.class.getName(), new SimpleInstanceManager());
server.setHandler(webapp);
server.start();
}
catch (Throwable e) {
if (server != null)
server.stop();
throw e;
}
}
}
@After
public void shutdownServer() throws Throwable {
if (!isRunInMaven) {
if (server != null)
server.stop();
}
}
public String getContextPath() {
return "/nutztest";
}
public String getBaseURL() {
return serverURL + getContextPath();
}
public Response get(String path) {
resp = Http.get(getBaseURL() + path);
assertNotNull(resp);
return resp;
}
public Response post(String path, Map<String, Object> params) {
Header header = Header.create();
header.set("Content-Type", "application/x-www-form-urlencoded");
resp = Sender.create(Request.create(getBaseURL() + path, METHOD.POST, params, header)).send();
assertNotNull(resp);
return resp;
}
public Response post(String path, String data) {
Request req = Request.create(getBaseURL() + path, METHOD.POST);
req.setData(data);
resp = Sender.create(req).send();
assertNotNull(resp);
return resp;
}
public Response post(String path, byte[] bytes) {
Request req = Request.create(getBaseURL() + path, METHOD.POST);
req.setData(bytes);
resp = Sender.create(req).send();
assertNotNull(resp);
return resp;
}
public Response upload(String path, Map<String, Object> params) {
Header header = Header.create();
resp = Sender.create(Request.create(getBaseURL() + path, METHOD.POST, params, header)).send();
assertNotNull(resp);
return resp;
}
}