package org.jboss.resteasy.test.nextgen.wadl; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.util.HashSet; import java.util.Set; import javax.ws.rs.ApplicationPath; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.Application; import javax.ws.rs.core.Response; import org.jboss.resteasy.plugins.server.undertow.UndertowJaxrsServer; import org.jboss.resteasy.test.TestPortProvider; import org.jboss.resteasy.test.nextgen.wadl.resources.BasicResource; import org.jboss.resteasy.test.nextgen.wadl.resources.issues.RESTEASY1246; import org.jboss.resteasy.wadl.WadlUndertowConnector; import org.junit.After; import org.junit.Before; import org.junit.Test; /** * Created by weli on 6/14/16. */ public class WADLUndertowContainerTest { private UndertowJaxrsServer server; @Test public void basicTest() throws Exception { WadlUndertowConnector connector = new WadlUndertowConnector(); connector.deployToServer(server, MyApp.class); Client client = ClientBuilder.newClient(); WebTarget target = client.target("http://127.0.0.1:${port}/base/application.xml".replaceAll("\\$\\{port\\}", Integer.valueOf(TestPortProvider.getPort()).toString())); Response response = target.request().get(); // get Application org.jboss.resteasy.wadl.jaxb.Application application = response.readEntity(org.jboss.resteasy.wadl.jaxb.Application.class); assertNotNull("application not null", application); assertEquals(1, application.getResources().size()); // get BasicResource org.jboss.resteasy.wadl.jaxb.Resource basicResource = findResourceByName(application, "/basic"); assertNotNull("basic resouce not null", basicResource); { // verify the existence of params WADLTestExistenceVerifier paramExistenceVerifier = new WADLTestExistenceVerifier(); paramExistenceVerifier.createVerifier("name", "name2"); paramExistenceVerifier.verify(basicResource.getParam(), org.jboss.resteasy.wadl.jaxb.Param.class, "getName"); // verify existence of two methods: "get" and "post" WADLTestExistenceVerifier methodExistenceVerifier = new WADLTestExistenceVerifier(); methodExistenceVerifier.createVerifier("get", "post"); methodExistenceVerifier.verify(basicResource.getMethodOrResource(), org.jboss.resteasy.wadl.jaxb.Method.class, "getId"); // verify 'post' method has expected id and name org.jboss.resteasy.wadl.jaxb.Method post = findMethodById(basicResource, "post"); assertNotNull("post method not null", post); assertEquals("POST", post.getName()); assertNotNull("post response not null", post.getResponse()); assertNotNull("post response representation not null", post.getResponse().get(0).getRepresentation()); // verify 'get' method org.jboss.resteasy.wadl.jaxb.Method get = findMethodById(basicResource, "get"); assertEquals("GET", get.getName()); } { // verify existence of resources WADLTestExistenceVerifier resourceExistenceVerifier = new WADLTestExistenceVerifier(); String compositeResourceName = "composite/{pathParam}"; resourceExistenceVerifier.createVerifier(compositeResourceName); resourceExistenceVerifier.verify(basicResource.getMethodOrResource(), org.jboss.resteasy.wadl.jaxb.Resource.class, "getPath"); // verify resource 'intr/{foo}' org.jboss.resteasy.wadl.jaxb.Resource compositeResource = findResourceByName(basicResource, compositeResourceName); assertNotNull(compositeResource); assertEquals(compositeResourceName, compositeResource.getPath()); WADLTestExistenceVerifier paramExistenceVerifier = new WADLTestExistenceVerifier(); paramExistenceVerifier.createVerifier("pathParam", "matrixParam"); paramExistenceVerifier.verify(compositeResource.getParam(), org.jboss.resteasy.wadl.jaxb.Param.class, "getName"); WADLTestExistenceVerifier methodExistenceVerifier = new WADLTestExistenceVerifier(); methodExistenceVerifier.createVerifier("composite"); methodExistenceVerifier.verify(compositeResource.getMethodOrResource(), org.jboss.resteasy.wadl.jaxb.Method.class, "getId"); org.jboss.resteasy.wadl.jaxb.Method compositeMethod = findMethodById(compositeResource, "composite"); // verify response assertTrue(compositeResourceName + " response contains respresentation", compositeMethod.getResponse().get(0).getRepresentation().size() > 0); assertEquals("text/plain", compositeMethod.getResponse().get(0).getRepresentation().get(0).getMediaType()); WADLTestExistenceVerifier requestVerifier = new WADLTestExistenceVerifier(); requestVerifier.createVerifier("headerParam", "queryParam", "Cookie"); requestVerifier.verify(compositeMethod.getRequest().getParam(), org.jboss.resteasy.wadl.jaxb.Param.class, "getName"); } client.close(); } @Test public void test1246() throws Exception { WadlUndertowConnector connector = new WadlUndertowConnector(); connector.deployToServer(server, MyApp1246.class); Client client = ClientBuilder.newClient(); WebTarget target = client.target("http://127.0.0.1:${port}/base/application.xml".replaceAll("\\$\\{port\\}", Integer.valueOf(TestPortProvider.getPort()).toString())); Response response = target.request().get(); // get Application org.jboss.resteasy.wadl.jaxb.Application application = response.readEntity(org.jboss.resteasy.wadl.jaxb.Application.class); org.jboss.resteasy.wadl.jaxb.Method multipleProvides1 = findMethodById(findResourceByName(findResourceByName(application, "/issues/1246"), "/provides1"), "multipleProvides1"); assertEquals("Multiple representations should be present", 2, multipleProvides1.getResponse().get(0).getRepresentation().size()); org.jboss.resteasy.wadl.jaxb.Method multipleProvides2 = findMethodById(findResourceByName(findResourceByName(application, "/issues/1246"), "/provides2"), "multipleProvides2"); assertEquals("Multiple representations should be present", 2, multipleProvides2.getResponse().get(0).getRepresentation().size()); client.close(); } @Before public void before() throws Exception { server = new UndertowJaxrsServer().start(); } @After public void after() throws Exception { server.stop(); server = null; } protected org.jboss.resteasy.wadl.jaxb.Resource findResourceByName(Object target, String resourceName) { if (target.getClass().equals(org.jboss.resteasy.wadl.jaxb.Application.class)) { for (org.jboss.resteasy.wadl.jaxb.Resource resource : ((org.jboss.resteasy.wadl.jaxb.Application) target) .getResources().get(0).getResource()) { if (resource.getPath().equals(resourceName)) { return resource; } } } else if (target.getClass().equals(org.jboss.resteasy.wadl.jaxb.Resource.class)) { for (Object resource : ((org.jboss.resteasy.wadl.jaxb.Resource) target).getMethodOrResource()) { if (resource.getClass().equals(org.jboss.resteasy.wadl.jaxb.Resource.class) && ((org.jboss.resteasy.wadl.jaxb.Resource) resource).getPath().equals(resourceName)) { return (org.jboss.resteasy.wadl.jaxb.Resource) resource; } } } return null; } protected org.jboss.resteasy.wadl.jaxb.Method findMethodById(org.jboss.resteasy.wadl.jaxb.Resource resource, String id) { for (Object methodOrResource : resource.getMethodOrResource()) { if (methodOrResource.getClass().equals(org.jboss.resteasy.wadl.jaxb.Method.class)) if (((org.jboss.resteasy.wadl.jaxb.Method) methodOrResource).getId().equals(id)) return (org.jboss.resteasy.wadl.jaxb.Method) methodOrResource; } return null; } @ApplicationPath("/base") public static class MyApp extends Application { @Override public Set<Class<?>> getClasses() { HashSet<Class<?>> classes = new HashSet<Class<?>>(); classes.add(BasicResource.class); return classes; } } @ApplicationPath("/base") public static class MyApp1246 extends Application { @Override public Set<Class<?>> getClasses() { HashSet<Class<?>> classes = new HashSet<Class<?>>(); classes.add(RESTEASY1246.class); return classes; } } }