blob: c51e62ca253e1933ac9581dd389a4e3b32921c06 [file] [log] [blame]
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.core.DefaultResourceConfig;
import com.sun.jersey.spi.inject.SingletonTypeInjectableProvider;
import com.sun.jersey.test.framework.AppDescriptor;
import com.sun.jersey.test.framework.LowLevelAppDescriptor;
import com.sun.jersey.test.framework.spi.container.TestContainer;
import com.sun.jersey.test.framework.spi.container.TestContainerFactory;
import com.sun.jersey.test.framework.spi.container.grizzly.GrizzlyTestContainerFactory;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriBuilder;
import java.net.URI;
/**
* @author hanl
* @date 29/07/2015
*/
public abstract class FastJerseyTest {
protected static String API_VERSION = "v0.1";
private static DefaultResourceConfig resourceConfig = new DefaultResourceConfig();
private static TestContainerFactory testContainerFactory;
private static TestContainer testContainer;
private static Client client;
public static void addClass(Class<?> resourceClass) {
resourceConfig.getClasses().add(resourceClass);
}
public static void addSingleton(Object resourceSingleton) {
resourceConfig.getSingletons().add(resourceSingleton);
}
public static <T> void addProviderForContext(Class<T> contextClass,
T contextObject) {
addSingleton(
new SingletonTypeInjectableProvider<Context, T>(contextClass,
contextObject) {
});
}
public static void addRequestFilter(Object filter) {
resourceConfig.getContainerRequestFilters().add(filter);
}
public static void addResponseFilter(Object filter) {
resourceConfig.getContainerResponseFilters().add(filter);
}
public static void setTestContainerFactory(
TestContainerFactory newTestContainerFactory) {
testContainerFactory = newTestContainerFactory;
}
@BeforeClass
public static void cleanStaticVariables() {
resourceConfig = new DefaultResourceConfig();
}
public static void initServer() {
AppDescriptor ad = new LowLevelAppDescriptor.Builder(resourceConfig)
.build();
TestContainerFactory tcf = testContainerFactory;
if (tcf == null) {
tcf = new GrizzlyTestContainerFactory();
}
testContainer = tcf
.create(UriBuilder.fromUri("http://localhost/").port(9998)
.build(), ad);
client = testContainer.getClient();
if (client == null) {
client = Client.create(ad.getClientConfig());
}
}
public static void startServer() {
if (testContainer != null) {
testContainer.start();
}
}
@AfterClass
public static void stopServer() {
testContainer.stop();
testContainer = null;
client = null;
}
public Client client() {
return client;
}
public URI getBaseUri() {
return testContainer.getBaseUri();
}
public WebResource resource() {
return client.resource(getBaseUri());
}
@Before
public void startServerBeforeFirstTestRun() {
if (testContainer == null) {
initServer();
startServer();
}
}
}