package org.jboss.resteasy.plugins.server.netty.cdi;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.resteasy.cdi.CdiInjectorFactory;
import org.jboss.resteasy.cdi.ResteasyCdiExtension;
import org.jboss.resteasy.spi.ResteasyDeployment;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.StringAsset;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import javax.enterprise.inject.spi.CDI;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.core.Response;
import java.util.Random;
/**
* Created by John.Ament on 2/23/14.
*/
@RunWith(Arquillian.class)
public class CdiNettyTest {
private CdiNettyJaxrsServer server;
private int port;
@Deployment
public static JavaArchive createArchive() {
String beans = "<beans xmlns=\"http://xmlns.jcp.org/xml/ns/javaee\"\n" +
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
" xsi:schemaLocation=\"http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd\"\n" +
" version=\"1.1\" bean-discovery-mode=\"all\">\n" +
"</beans>\n";
return ShrinkWrap.create(JavaArchive.class, CdiNettyTest.class.getSimpleName() + ".jar")
.addPackage(CdiRequestDispatcher.class.getPackage())
.addClasses(EchoResource.class, DefaultExceptionMapper.class)
.addAsManifestResource(new StringAsset("org.jboss.resteasy.cdi.ResteasyCdiExtension"),
"services/javax.enterprise.inject.spi.Extension")
.addAsManifestResource(new StringAsset(beans), "beans.xml");
}
@Before
public void init() {
while (port < 8000)
this.port = (int) ((new Random().nextDouble() * 8000) + 1000);
ResteasyCdiExtension cdiExtension = CDI.current().select(ResteasyCdiExtension.class).get();
CdiNettyJaxrsServer netty = new CdiNettyJaxrsServer();
ResteasyDeployment rd = new ResteasyDeployment();
rd.setActualResourceClasses(cdiExtension.getResources());
rd.setInjectorFactoryClass(CdiInjectorFactory.class.getName());
rd.getActualProviderClasses().addAll(cdiExtension.getProviders());
netty.setDeployment(rd);
netty.setPort(port);
netty.setRootResourcePath("/api");
netty.start();
this.server = netty;
}
@After
public void shutdown() {
this.server.stop();
}
@Test
public void testLoadSuccess() {
String value = ClientBuilder.newClient().target("http://localhost:" + port)
.path("/api/echo").queryParam("name", "Bob").request().buildGet().invoke(String.class);
Assert.assertEquals("Hello, Bob!", value);
}
@Test
public void testLoadFailure() {
Response response = ClientBuilder.newClient().target("http://localhost:" + port)
.path("/api/echo").queryParam("name", "null").request().buildGet().invoke();
Assert.assertEquals(406, response.getStatus());
}
}