package org.jboss.resteasy.test.resource.param;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.container.test.api.RunAsClient;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.resteasy.client.jaxrs.ProxyBuilder;
import org.jboss.resteasy.client.jaxrs.ResteasyClient;
import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder;
import org.jboss.resteasy.test.resource.param.resource.QueryParamAsPrimitiveResource;
import org.jboss.resteasy.test.resource.param.resource.QueryParamAsPrimitiveResourceArray;
import org.jboss.resteasy.test.resource.param.resource.QueryParamAsPrimitiveResourceArrayDefault;
import org.jboss.resteasy.test.resource.param.resource.QueryParamAsPrimitiveResourceArrayDefaultNull;
import org.jboss.resteasy.test.resource.param.resource.QueryParamAsPrimitiveResourceArrayDefaultOverride;
import org.jboss.resteasy.test.resource.param.resource.QueryParamAsPrimitiveResourceDefault;
import org.jboss.resteasy.test.resource.param.resource.QueryParamAsPrimitiveResourceDefaultNull;
import org.jboss.resteasy.test.resource.param.resource.QueryParamAsPrimitiveResourceDefaultOverride;
import org.jboss.resteasy.test.resource.param.resource.QueryParamAsPrimitiveResourceList;
import org.jboss.resteasy.test.resource.param.resource.QueryParamAsPrimitiveResourceListDefault;
import org.jboss.resteasy.test.resource.param.resource.QueryParamAsPrimitiveResourceListDefaultNull;
import org.jboss.resteasy.test.resource.param.resource.QueryParamAsPrimitiveResourceListDefaultOverride;
import org.jboss.resteasy.test.resource.param.resource.QueryParamAsPrimitiveResourceQueryPrimitivesInterface;
import org.jboss.resteasy.test.resource.param.resource.QueryParamAsPrimitiveResourceResourceArray;
import org.jboss.resteasy.test.resource.param.resource.QueryParamAsPrimitiveResourceResourceListInterface;
import org.jboss.resteasy.test.resource.param.resource.QueryParamAsPrimitiveResourceResourceWrappersInterface;
import org.jboss.resteasy.test.resource.param.resource.QueryParamAsPrimitiveResourceWrappers;
import org.jboss.resteasy.test.resource.param.resource.QueryParamAsPrimitiveResourceWrappersDefault;
import org.jboss.resteasy.test.resource.param.resource.QueryParamAsPrimitiveResourceWrappersDefaultNull;
import org.jboss.resteasy.test.resource.param.resource.QueryParamAsPrimitiveResourceWrappersDefaultOverride;
import org.jboss.resteasy.util.HttpHeaderNames;
import org.jboss.resteasy.util.HttpResponseCodes;
import org.jboss.resteasy.utils.PortProviderUtil;
import org.jboss.resteasy.utils.TestUtil;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import javax.ws.rs.client.Invocation;
import javax.ws.rs.core.Response;
import java.util.ArrayList;
import java.util.List;
import static org.jboss.resteasy.util.HttpClient4xUtils.updateQuery;
/**
* @tpSubChapter Parameters
* @tpChapter Integration tests
* @tpTestCaseDetails Test all variants of primitive query parameters (boolean, int, long, float, etc.)
* @tpSince RESTEasy 3.0.16
*/
@RunWith(Arquillian.class)
@RunAsClient
public class QueryParamAsPrimitiveTest {
public static final String ERROR_MESSAGE = "Wrong object received";
private static QueryParamAsPrimitiveResourceQueryPrimitivesInterface resourceQueryPrimitives;
private static QueryParamAsPrimitiveResourceResourceWrappersInterface resourceQueryPrimitiveWrappers;
private static QueryParamAsPrimitiveResourceResourceListInterface resourceQueryPrimitiveList;
private static QueryParamAsPrimitiveResourceResourceArray resourceQueryPrimitiveArray;
private static ResteasyClient client;
@Deployment
public static Archive<?> deploy() throws Exception {
WebArchive war = TestUtil.prepareArchive(QueryParamAsPrimitiveTest.class.getSimpleName());
war.addClass(QueryParamAsPrimitiveResourceQueryPrimitivesInterface.class);
war.addClass(QueryParamAsPrimitiveResourceResourceArray.class);
war.addClass(QueryParamAsPrimitiveResourceResourceListInterface.class);
war.addClass(QueryParamAsPrimitiveResourceResourceWrappersInterface.class);
war.addClass(QueryParamAsPrimitiveTest.class);
return TestUtil.finishContainerPrepare(war, null,
QueryParamAsPrimitiveResource.class,
QueryParamAsPrimitiveResourceDefault.class,
QueryParamAsPrimitiveResourceDefaultOverride.class,
QueryParamAsPrimitiveResourceDefaultNull.class,
QueryParamAsPrimitiveResourceWrappers.class,
QueryParamAsPrimitiveResourceWrappersDefault.class,
QueryParamAsPrimitiveResourceWrappersDefaultNull.class,
QueryParamAsPrimitiveResourceWrappersDefaultOverride.class,
QueryParamAsPrimitiveResourceList.class,
QueryParamAsPrimitiveResourceListDefault.class,
QueryParamAsPrimitiveResourceListDefaultNull.class,
QueryParamAsPrimitiveResourceListDefaultOverride.class,
QueryParamAsPrimitiveResourceArray.class,
QueryParamAsPrimitiveResourceArrayDefault.class,
QueryParamAsPrimitiveResourceArrayDefaultNull.class,
QueryParamAsPrimitiveResourceArrayDefaultOverride.class);
}
@BeforeClass
public static void before() throws Exception {
client = new ResteasyClientBuilder().build();
resourceQueryPrimitives = ProxyBuilder.builder(QueryParamAsPrimitiveResourceQueryPrimitivesInterface.class, client.target(generateBaseUrl())).build();
resourceQueryPrimitiveWrappers = ProxyBuilder.builder(QueryParamAsPrimitiveResourceResourceWrappersInterface.class, client.target(generateBaseUrl())).build();
resourceQueryPrimitiveList = ProxyBuilder.builder(QueryParamAsPrimitiveResourceResourceListInterface.class, client.target(generateBaseUrl())).build();
resourceQueryPrimitiveArray = ProxyBuilder.builder(QueryParamAsPrimitiveResourceResourceArray.class, client.target(generateBaseUrl())).build();
}
@AfterClass
public static void after() throws Exception {
client.close();
}
private static String generateURL(String path) {
return PortProviderUtil.generateURL(path, QueryParamAsPrimitiveTest.class.getSimpleName());
}
private static String generateBaseUrl() {
return PortProviderUtil.generateBaseUrl(QueryParamAsPrimitiveTest.class.getSimpleName());
}
public void basicTest(String type, String value) {
String param = type + "=" + value;
{
String uri = updateQuery(generateURL("/"), param);
Invocation.Builder request = client.target(uri).request();
request.header(HttpHeaderNames.ACCEPT, "application/" + type);
try {
Response response = request.get();
Assert.assertEquals(HttpResponseCodes.SC_OK, response.getStatus());
response.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
{
String uri = updateQuery(generateURL("/wrappers"), param);
Invocation.Builder request = client.target(uri).request();
request.header(HttpHeaderNames.ACCEPT, "application/" + type);
try {
Response response = request.get();
Assert.assertEquals(HttpResponseCodes.SC_OK, response.getStatus());
response.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
{
String uri = updateQuery(generateURL("/list"), param + "&" + param + "&" + param);
Invocation.Builder request = client.target(uri).request();
request.header(HttpHeaderNames.ACCEPT, "application/" + type);
try {
Response response = request.get();
Assert.assertEquals(HttpResponseCodes.SC_OK, response.getStatus());
response.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
{
String uri = updateQuery(generateURL("/array"), param + "&" + param + "&" + param);
Invocation.Builder request = client.target(uri).request();
request.header(HttpHeaderNames.ACCEPT, "application/" + type);
try {
Response response = request.get();
Assert.assertEquals(HttpResponseCodes.SC_OK, response.getStatus());
response.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
public void testDefault(String base, String type, String value) {
{
Invocation.Builder request = client.target(generateURL("" + base + "default/null")).request();
request.header(HttpHeaderNames.ACCEPT, "application/" + type);
try {
Response response = request.get();
Assert.assertEquals(HttpResponseCodes.SC_OK, response.getStatus());
response.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
{
Invocation.Builder request = client.target(generateURL("" + base + "default")).request();
request.header(HttpHeaderNames.ACCEPT, "application/" + type);
try {
Response response = request.get();
Assert.assertEquals(HttpResponseCodes.SC_OK, response.getStatus());
response.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
String param = type + "=" + value;
{
String uri = updateQuery(generateURL("" + base + "default/override"), param);
Invocation.Builder request = client.target(uri).request();
request.header(HttpHeaderNames.ACCEPT, "application/" + type);
try {
Response response = request.get();
Assert.assertEquals(HttpResponseCodes.SC_OK, response.getStatus());
response.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
public void testDefault(String type, String value) {
testDefault("/", type, value);
}
public void testWrappersDefault(String type, String value) {
testDefault("/wrappers/", type, value);
}
public void testListDefault(String type, String value) {
testDefault("/list/", type, value);
}
public void testArrayDefault(String type, String value) {
testDefault("/array/", type, value);
}
/**
* @tpTestDetails Test boolean primitive object for get request
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testGetBoolean() {
basicTest("boolean", "true");
resourceQueryPrimitives.doGet(true);
resourceQueryPrimitiveWrappers.doGet(true);
List<Boolean> list = new ArrayList<Boolean>();
list.add(Boolean.TRUE);
list.add(Boolean.TRUE);
list.add(Boolean.TRUE);
resourceQueryPrimitiveList.doGetBoolean(list);
boolean[] array =
{true, true, true};
resourceQueryPrimitiveArray.doGetBoolean(array);
}
/**
* @tpTestDetails Test boolean primitive object
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testGetBooleanPrimitivesDefault() {
testDefault("boolean", "true");
}
/**
* @tpTestDetails Test boolean primitive object with proxy
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testGetBooleanPrimitiveWrapperDefault() {
testWrappersDefault("boolean", "true");
}
/**
* @tpTestDetails Test boolean primitive objects in list
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testGetBooleanPrimitiveListDefault() {
testListDefault("boolean", "true");
}
/**
* @tpTestDetails Test boolean primitive objects in array
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testGetBooleanPrimitiveArrayDefault() {
testArrayDefault("boolean", "true");
}
/**
* @tpTestDetails Test byte primitive object for get method
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testGetByte() {
basicTest("byte", "127");
resourceQueryPrimitives.doGet((byte) 127);
resourceQueryPrimitiveWrappers.doGet((byte) 127);
List<Byte> list = new ArrayList<Byte>();
list.add(new Byte((byte) 127));
list.add(new Byte((byte) 127));
list.add(new Byte((byte) 127));
resourceQueryPrimitiveList.doGetByte(list);
byte[] array =
{(byte) 127, (byte) 127, (byte) 127};
resourceQueryPrimitiveArray.doGetByte(array);
}
/**
* @tpTestDetails Test byte primitive object
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testGetBytePrimitivesDefault() {
testDefault("byte", "127");
}
/**
* @tpTestDetails Test byte primitive object with proxy
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testGetBytePrimitiveWrappersDefault() {
testWrappersDefault("byte", "127");
}
/**
* @tpTestDetails Test byte primitive objects in list
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testGetBytePrimitiveListDefault() {
testListDefault("byte", "127");
}
/**
* @tpTestDetails Test byte primitive objects in array
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testGetBytePrimitiveArrayDefault() {
testArrayDefault("byte", "127");
}
/**
* @tpTestDetails Test short primitive object for get method
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testGetShort() {
basicTest("short", "32767");
}
/**
* @tpTestDetails Test short primitive object
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testGetShortPrimtivesDefault() {
testDefault("short", "32767");
}
/**
* @tpTestDetails Test short primitive object with proxy
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testGetShortPrimtiveWrappersDefault() {
testWrappersDefault("short", "32767");
}
/**
* @tpTestDetails Test short primitive objects in list
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testGetShortPrimtiveListDefault() {
testListDefault("short", "32767");
}
/**
* @tpTestDetails Test int primitive object for get method
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testGetInt() {
basicTest("int", "2147483647");
}
/**
* @tpTestDetails Test int primitive object
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testGetIntPrimitivesDefault() {
testDefault("int", "2147483647");
}
/**
* @tpTestDetails Test int primitive object with proxy
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testGetIntPrimitiveWrappersDefault() {
testWrappersDefault("int", "2147483647");
}
/**
* @tpTestDetails Test int primitive objects in list
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testGetIntPrimitiveListDefault() {
testListDefault("int", "2147483647");
}
/**
* @tpTestDetails Test long primitive object with get method
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testGetLong() {
basicTest("long", "9223372036854775807");
}
/**
* @tpTestDetails Test long primitive object
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testGetLongPrimitivesDefault() {
testDefault("long", "9223372036854775807");
}
/**
* @tpTestDetails Test long primitive object with proxy
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testGetLongPrimitiveWrappersDefault() {
testWrappersDefault("long", "9223372036854775807");
}
/**
* @tpTestDetails Test long primitive objects in list
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testGetLongPrimitiveListDefault() {
testListDefault("long", "9223372036854775807");
}
/**
* @tpTestDetails Test float primitive object with get method
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testGetFloat() {
basicTest("float", "3.14159265");
}
/**
* @tpTestDetails Test float primitive object
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testGetFloatPrimitivesDefault() {
testDefault("float", "3.14159265");
}
/**
* @tpTestDetails Test float primitive object with proxy
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testGetFloatPrimitiveWrappersDefault() {
testWrappersDefault("float", "3.14159265");
}
/**
* @tpTestDetails Test float primitive objects in list
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testGetFloatPrimitiveListDefault() {
testListDefault("float", "3.14159265");
}
/**
* @tpTestDetails Test double primitive object with get method
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testGetDouble() {
basicTest("double", "3.14159265358979");
}
/**
* @tpTestDetails Test double primitive object
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testGetDoublePrimitivesDefault() {
testDefault("double", "3.14159265358979");
}
/**
* @tpTestDetails Test double primitive object with proxy
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testGetDoublePrimitiveWrappersDefault() {
testWrappersDefault("double", "3.14159265358979");
}
/**
* @tpTestDetails Test double primitive objects in list
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testGetDoublePrimitiveListDefault() {
testListDefault("double", "3.14159265358979");
}
/**
* @tpTestDetails Negative testing: accept only int, but string is provided. Error is excepted.
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testBadPrimitiveValue() {
{
String uri = updateQuery(generateURL("/"), "int=abcdef");
Invocation.Builder request = client.target(uri).request();
request.header(HttpHeaderNames.ACCEPT, "application/int");
try {
Response response = request.get();
Assert.assertEquals(404, response.getStatus());
response.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
/**
* @tpTestDetails Negative testing: accept only int, but string is provided. Error is excepted.
* Proxy is used.
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testBadPrimitiveWrapperValue() {
{
String uri = updateQuery(generateURL("/wrappers"), "int=abcdef");
Invocation.Builder request = client.target(uri).request();
request.header(HttpHeaderNames.ACCEPT, "application/int");
try {
Response response = request.get();
Assert.assertEquals(404, response.getStatus());
response.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
/**
* @tpTestDetails Negative testing: accept only int, but string is provided. Error is excepted.
* List is tested
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testBadPrimitiveListValue() {
{
String uri = updateQuery(generateURL("/list"), "int=abcdef&int=abcdef");
Invocation.Builder request = client.target(uri).request();
request.header(HttpHeaderNames.ACCEPT, "application/int");
try {
Response response = request.get();
Assert.assertEquals(404, response.getStatus());
response.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
}