package org.jooby.test;
import static com.google.common.base.Preconditions.checkState;
import java.io.IOException;
import org.apache.http.client.utils.URIBuilder;
import org.jooby.Jooby;
import org.junit.Before;
import org.junit.Rule;
import org.junit.runner.RunWith;
import com.google.common.base.Joiner;
/**
* Internal use only.
*
* @author edgar
*/
@RunWith(JoobySuite.class)
public abstract class ServerFeature extends Jooby {
public static boolean DEBUG = false;
protected int port;
protected int securePort;
public static String protocol = "http";
private Client server = null;
public ServerFeature(final String prefix) {
super(prefix);
}
public ServerFeature() {
}
@Before
public void debug() {
if (DEBUG) {
java.util.logging.Logger.getLogger("httpclient.wire.header").setLevel(
java.util.logging.Level.FINEST);
java.util.logging.Logger.getLogger("httpclient.wire.content").setLevel(
java.util.logging.Level.FINEST);
System.setProperty("org.apache.commons.logging.Log",
"org.apache.commons.logging.impl.SimpleLog");
System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true");
System.setProperty("org.apache.commons.logging.simplelog.log.httpclient.wire", "debug");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http", "debug");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http.headers",
"debug");
}
}
@Rule
public Client createServer() {
checkState(server == null, "Server was created already");
server = new Client(
protocol + "://localhost:" + (protocol.equals("https") ? securePort : port));
return server;
}
public Client request() {
checkState(server != null, "Server wasn't started");
return server;
}
public Client https() throws IOException {
server.stop();
server = new Client("https://localhost:" + securePort);
server.start();
return server;
}
protected URIBuilder ws(final String... parts) throws Exception {
URIBuilder builder = new URIBuilder("ws://localhost:" + port + "/"
+ Joiner.on("/").join(parts));
return builder;
}
@Override
public Jooby securePort(final int port) {
this.securePort = port;
return super.securePort(port);
}
@Override
public Jooby port(final int port) {
this.port = port;
return super.port(port);
}
}