package org.jboss.resteasy.test;
import static org.jboss.resteasy.test.TestPortProvider.generateURL;
import io.vertx.core.Vertx;
import io.vertx.core.VertxOptions;
import io.vertx.core.http.HttpServer;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Context;
import org.jboss.resteasy.plugins.server.vertx.VertxContainer;
import org.jboss.resteasy.plugins.server.vertx.VertxRequestHandler;
import org.jboss.resteasy.plugins.server.vertx.VertxResteasyDeployment;
import org.junit.Assert;
import org.junit.Test;
/**
* @author <a href="mailto:julien@julienviet.com">Julien Viet</a>
*/
public class DeploymentTest
{
@Path("/")
public static class Resource
{
@GET
@Path("/test")
@Produces("text/plain")
public String context(
@Context io.vertx.core.Context context,
@Context io.vertx.core.Vertx vertx,
@Context io.vertx.core.http.HttpServerRequest req,
@Context io.vertx.core.http.HttpServerResponse resp)
{
if (context != null && vertx != null && req != null && resp != null)
{
return Thread.currentThread().getName();
} else
{
return "fail";
}
}
}
@Test
public void testPerInstance() throws Exception
{
VertxContainer.start().getRegistry().addPerInstanceResource(Resource.class);
try
{
Set<String> results = new HashSet<>();
for (int i = 0; i < 100; i++)
{
Client client = ClientBuilder.newClient();
String val;
try
{
WebTarget target = client.target(generateURL("/test"));
val = target.request().get(String.class);
} finally
{
client.close();
}
Assert.assertTrue(val.startsWith("vert.x-eventloop-thread-"));
results.add(val);
}
Assert.assertEquals(VertxOptions.DEFAULT_EVENT_LOOP_POOL_SIZE, results.size());
} finally
{
try
{
VertxContainer.stop();
} catch (Exception ignore)
{
}
}
}
@Test
public void testEmbed() throws Exception
{
VertxResteasyDeployment deployment = new VertxResteasyDeployment();
deployment.start();
deployment.getRegistry().addPerInstanceResource(Resource.class);
Vertx vertx = Vertx.vertx();
Client client = ClientBuilder.newClient();
try
{
HttpServer server = vertx.createHttpServer();
server.requestHandler(new VertxRequestHandler(vertx, deployment));
CompletableFuture<Void> listenLatch = new CompletableFuture<>();
server.listen(TestPortProvider.getPort(), ar -> {
if (ar.succeeded())
{
listenLatch.complete(null);
} else
{
listenLatch.completeExceptionally(ar.cause());
}
});
listenLatch.get(10, TimeUnit.SECONDS);
WebTarget target = client.target(generateURL("/test"));
String val = target.request().get(String.class);
Assert.assertTrue(val.startsWith("vert.x-eventloop-thread-"));
} finally
{
client.close();
vertx.close();
deployment.stop();
}
}
}