package com.xoom.oss.feathercon; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.client.WebResource; import com.sun.jersey.api.client.config.ClientConfig; import com.sun.jersey.api.client.config.DefaultClientConfig; import com.sun.jersey.api.json.JSONConfiguration; import com.sun.jersey.spi.container.servlet.ServletContainer; import org.eclipse.jetty.servlet.DefaultServlet; import org.hamcrest.core.IsEqual; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.MatcherAssert.assertThat; public class WebappServerBuilderTest extends BaseTest { private String restPathSpec = "/api/*"; private int serverPort = 8888; private String jerseyScanPackages = "com.xoom.oss.feathercon"; private WebappServerBuilder webappServerBuilder; private String resourceBase; private FeatherCon server; @Before public void setup() throws Exception { String resourcePath = getClass().getResource("/content-root/anchor").getFile(); resourceBase = new File(resourcePath).getParentFile().getAbsolutePath() + "/static/"; webappServerBuilder = new WebappServerBuilder(jerseyScanPackages, restPathSpec, resourceBase, serverPort); server = webappServerBuilder.build(); server.start(); } @After public void teardown() throws Exception { server.stop(); } @Test public void testWebAppBuilder() throws Exception { assertThat(webappServerBuilder.servletConfigurations.size(), equalTo(2)); ServletConfiguration jaxRsConfig = webappServerBuilder.servletConfigurations.get(0); assertThat(jaxRsConfig.servletClass.equals(ServletContainer.class), equalTo(true)); assertThat(jaxRsConfig.initParameters.get("com.sun.jersey.config.property.packages"), equalTo(jerseyScanPackages)); assertThat(jaxRsConfig.initParameters.get("com.sun.jersey.api.json.POJOMappingFeature"), equalTo("true")); assertThat(jaxRsConfig.pathSpecs.get(0), equalTo(restPathSpec)); ServletConfiguration staticConfig = webappServerBuilder.servletConfigurations.get(1); assertThat(staticConfig.servletClass.equals(DefaultServlet.class), equalTo(true)); assertThat(staticConfig.initParameters.get("resourceBase"), equalTo(resourceBase)); assertThat(staticConfig.pathSpecs.get(0), equalTo("/")); assertThat(server.port, equalTo(serverPort)); assertThat(server.contextName, equalTo("/")); server.toString(); } @Test public void testStaticContentServer() throws Exception { ClientConfig clientConfig = new DefaultClientConfig(); clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE); Client client = Client.create(clientConfig); WebResource resource = client.resource(String.format("http://localhost:%d/hello.html", serverPort)); ClientResponse clientResponse = resource.get(ClientResponse.class); String clientHtml = clientResponse.getEntity(String.class); FileReader fileReader = new FileReader(String.format("%s/hello.html", resourceBase)); BufferedReader br = new BufferedReader(fileReader); String s; StringBuilder persistentHtml = new StringBuilder(); while ((s = br.readLine()) != null) { persistentHtml.append(s).append('\n'); } assertThat(clientHtml, IsEqual.equalTo(persistentHtml.toString())); } }