package org.jboss.resteasy.test;
import static org.jboss.resteasy.test.TestPortProvider.generateURL;
import io.netty.handler.codec.http.HttpHeaders.Values;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.core.Response;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.After;
import org.junit.Test;
import javax.ws.rs.client.Invocation.Builder;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class JaxrsAsyncTest
{
static String BASE_URI = generateURL("");
static Client client;
static final int REQUEST_TIMEOUT = 1000;
@BeforeClass
public static void setupSuite() throws Exception
{
NettyContainer.start().getRegistry().addSingletonResource(new AsyncJaxrsResource());
}
@AfterClass
public static void tearDownSuite() throws Exception
{
NettyContainer.stop();
}
@Before
public void setupTest() throws Exception
{
client = ClientBuilder.newClient();
}
@After
public void tearDownTest() throws Exception
{
client.close();
}
@Test(timeout=REQUEST_TIMEOUT)
public void testInjectionFailure()
{
System.out.println("***INJECTION FAILURE***");
Response response = client.target(BASE_URI).path("jaxrs/injection-failure/abcd").request().get();
Assert.assertEquals(Response.Status.NOT_FOUND.getStatusCode(), response.getStatus());
response.close();
}
@Test(timeout=REQUEST_TIMEOUT)
public void testMethodFailure() throws Exception
{
System.out.println("***method FAILURE***");
Response response = client.target(BASE_URI).path("jaxrs/method-failure").request().get();
Assert.assertEquals(Response.Status.FORBIDDEN.getStatusCode(), response.getStatus());
response.close();
}
@Test(timeout=REQUEST_TIMEOUT)
public void testAsync() throws Exception
{
callAsync(client);
//callAsync(client);
//callAsync(client);
}
private void callAsync(Client client)
{
Response response = client.target(BASE_URI).path("jaxrs").request().get();
Assert.assertEquals(200, response.getStatus());
System.out.println(response.getHeaders().size());
System.out.println(response.getHeaders().keySet().iterator().next());
Assert.assertEquals("hello", response.readEntity(String.class));
response.close();
}
@Test(timeout=3*REQUEST_TIMEOUT)
public void testEmpty() throws Exception
{
callEmpty(client);
callEmpty(client);
callEmpty(client);
}
private void callEmpty(Client client)
{
long start = System.currentTimeMillis();
Response response = client.target(BASE_URI).path("jaxrs/empty").request().get();
long end = System.currentTimeMillis() - start;
Assert.assertEquals(204, response.getStatus());
Assert.assertTrue(end < REQUEST_TIMEOUT); // should take less than 1 second
response.close();
}
@Test(timeout=REQUEST_TIMEOUT)
public void testTimeout() throws Exception
{
Response response = client.target(BASE_URI).path("jaxrs/timeout").request().get();
Assert.assertEquals(503, response.getStatus());
response.close();
}
@Test(timeout=REQUEST_TIMEOUT)
public void testCancelled() throws Exception
{
Response response = null;
response = client.target(BASE_URI).path("jaxrs/cancelled").request().put(null);
Assert.assertEquals(204, response.getStatus());
response.close();
response = client.target(BASE_URI).path("jaxrs/cancelled").request().get();
Assert.assertEquals(500, response.getStatus());
response.close();
}
@Test
public void testCancel() throws Exception
{
Response response = null;
response = client.target(BASE_URI).path("jaxrs/cancelled").request().put(null);
Assert.assertEquals(204, response.getStatus());
response.close();
response = client.target(BASE_URI).path("jaxrs/cancelled").request().get();
Assert.assertEquals(500, response.getStatus());
response.close();
response = client.target(BASE_URI).path("jaxrs/cancel").request().get();
Assert.assertEquals(503, response.getStatus());
response.close();
response = client.target(BASE_URI).path("jaxrs/cancelled").request().get();
Assert.assertEquals(204, response.getStatus());
response.close();
}
@Test(timeout=REQUEST_TIMEOUT)
public void testResumeObject() throws Exception
{
Response response = client.target(BASE_URI).path("jaxrs/resume/object").request().get();
Assert.assertEquals(200, response.getStatus());
Assert.assertEquals("bill", response.readEntity(XmlData.class).getName());
response.close();
}
@Test(timeout=REQUEST_TIMEOUT)
public void testResumeObjectThread() throws Exception
{
Response response = client.target(BASE_URI).path("jaxrs/resume/object/thread").request().get();
Assert.assertEquals(200, response.getStatus());
Assert.assertEquals("bill", response.readEntity(XmlData.class).getName());
response.close();
}
@Test(timeout=REQUEST_TIMEOUT)
public void testConnectionCloseHeader() throws Exception
{
Builder requestBuilder = client.target(BASE_URI).path("jaxrs/empty").request();
requestBuilder.header("Connection", "close");
Response response = requestBuilder.get();
Assert.assertEquals(Values.CLOSE, response.getHeaderString("Connection"));
response.close();
}
}