| 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(); |
| } |
| } |
| } |