package org.jboss.resteasy.links.test.el; import static org.jboss.resteasy.test.TestPortProvider.generateBaseUrl; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; import javax.ws.rs.InternalServerErrorException; import org.apache.http.client.HttpClient; import org.apache.http.impl.client.DefaultHttpClient; import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder; import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget; import org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine; import org.jboss.resteasy.core.Dispatcher; import org.jboss.resteasy.links.test.BookStoreService; import org.jboss.resteasy.plugins.server.netty.NettyJaxrsServer; import org.jboss.resteasy.plugins.server.resourcefactory.POJOResourceFactory; import org.jboss.resteasy.test.TestPortProvider; import org.junit.After; import org.junit.AfterClass; import org.junit.Assert; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; @RunWith(Parameterized.class) public class TestLinksInvalidEL { private static NettyJaxrsServer server; private static Dispatcher dispatcher; @BeforeClass public static void beforeClass() throws Exception { server = new NettyJaxrsServer(); server.setPort(TestPortProvider.getPort()); server.setRootResourcePath("/"); server.start(); dispatcher = server.getDeployment().getDispatcher(); } @AfterClass public static void afterClass() throws Exception { server.stop(); server = null; dispatcher = null; } @Parameters public static List<Class<?>[]> getParameters(){ List<Class<?>[]> classes = new ArrayList<Class<?>[]>(); classes.add(new Class<?>[]{BookStoreInvalidEL.class}); return classes; } private Class<?> resourceType; private String url; private BookStoreService client; private HttpClient httpClient; public TestLinksInvalidEL(Class<?> resourceType){ this.resourceType = resourceType; } @Before public void before(){ POJOResourceFactory noDefaults = new POJOResourceFactory(resourceType); dispatcher.getRegistry().addResourceFactory(noDefaults); httpClient = new DefaultHttpClient(); ApacheHttpClient4Engine engine = new ApacheHttpClient4Engine(httpClient); url = generateBaseUrl(); ResteasyWebTarget target = new ResteasyClientBuilder().httpEngine(engine).build().target(url); client = target.proxy(BookStoreService.class); } @After public void after(){ // TJWS does not support chunk encodings well so I need to kill kept // alive connections httpClient.getConnectionManager().closeIdleConnections(0, TimeUnit.MILLISECONDS); dispatcher.getRegistry().removeRegistrations(resourceType); } @SuppressWarnings("unchecked") @Test public void testELWorksWithoutPackageXML() throws Exception { try{ client.getBookXML("foo"); Assert.fail("This should have caused a 500"); }catch(InternalServerErrorException x){ System.err.println("Failure is "+x.getResponse().readEntity(String.class)); Assert.assertEquals(500, x.getResponse().getStatus()); }catch(Exception x){ Assert.fail("Expected InternalServerErrorException"); } } @SuppressWarnings("unchecked") @Test public void testELWorksWithoutPackageJSON() throws Exception { try{ client.getBookJSON("foo"); Assert.fail("This should have caused a 500"); }catch(InternalServerErrorException x){ System.err.println("Failure is "+x.getResponse().readEntity(String.class)); Assert.assertEquals(500, x.getResponse().getStatus()); }catch(Exception x){ Assert.fail("Expected InternalServerErrorException"); } } }