Skip to content

Commit 3ad7746

Browse files
committed
Clean up and add additional tests
1 parent 45df2b0 commit 3ad7746

File tree

2 files changed

+104
-12
lines changed

2 files changed

+104
-12
lines changed

aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java

Lines changed: 97 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import java.util.Base64;
1818
import java.util.List;
1919
import java.util.Map;
20-
import java.util.Arrays;
2120

2221

2322
public class AwsHttpServletRequestTest {
@@ -38,8 +37,12 @@ public class AwsHttpServletRequestTest {
3837
.queryString("one", "two").queryString("three", "four").build();
3938
private static final AwsProxyRequest queryStringNullValue = new AwsProxyRequestBuilder("/test", "GET")
4039
.queryString("one", "two").queryString("three", null).build();
40+
private static final AwsProxyRequest queryStringEmptyValue = new AwsProxyRequestBuilder("/test", "GET")
41+
.queryString("one", "two").queryString("three", "").build();
4142
private static final AwsProxyRequest encodedQueryString = new AwsProxyRequestBuilder("/test", "GET")
4243
.queryString("one", "two").queryString("json", "{\"name\":\"faisal\"}").build();
44+
private static final AwsProxyRequest encodedQueryStringAlb = new AwsProxyRequestBuilder("/test", "GET")
45+
.queryString("one", "two").queryString("json", "{\"name\":\"faisal\"}").alb().build();
4346
private static final AwsProxyRequest multipleParams = new AwsProxyRequestBuilder("/test", "GET")
4447
.queryString("one", "two").queryString("one", "three").queryString("json", "{\"name\":\"faisal\"}").build();
4548
private static final AwsProxyRequest formEncodedAndQueryString = new AwsProxyRequestBuilder("/test", "POST")
@@ -200,6 +203,20 @@ void queryString_generateQueryString_nullParameterIsEmpty() {
200203
assertTrue(parsedString.endsWith("three="));
201204
}
202205

206+
@Test
207+
void queryString_generateQueryString_emptyParameterIsEmpty() {
208+
AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(queryStringEmptyValue, mockContext, null, config);
209+
String parsedString = null;
210+
try {
211+
parsedString = request.generateQueryString(request.getAwsProxyRequest().getMultiValueQueryStringParameters(), true, config.getUriEncoding());
212+
} catch (ServletException e) {
213+
e.printStackTrace();
214+
fail("Could not generate query string");
215+
}
216+
217+
assertTrue(parsedString.endsWith("three="));
218+
}
219+
203220
@Test
204221
void queryStringWithEncodedParams_generateQueryString_validQuery() {
205222
AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(encodedQueryString, mockContext, null, config);
@@ -216,6 +233,22 @@ void queryStringWithEncodedParams_generateQueryString_validQuery() {
216233
assertTrue(parsedString.contains("&") && parsedString.indexOf("&") > 0 && parsedString.indexOf("&") < parsedString.length());
217234
}
218235

236+
@Test
237+
void queryStringWithEncodedParams_alb_generateQueryString_validQuery() {
238+
AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(encodedQueryStringAlb, mockContext, null, config);
239+
240+
String parsedString = null;
241+
try {
242+
parsedString = request.generateQueryString(request.getAwsProxyRequest().getMultiValueQueryStringParameters(), false, config.getUriEncoding());
243+
} catch (ServletException e) {
244+
e.printStackTrace();
245+
fail("Could not generate query string");
246+
}
247+
assertTrue(parsedString.contains("one=two"));
248+
assertTrue(parsedString.contains("json=%7B%22name%22%3A%22faisal%22%7D"));
249+
assertTrue(parsedString.contains("&") && parsedString.indexOf("&") > 0 && parsedString.indexOf("&") < parsedString.length());
250+
}
251+
219252
@Test
220253
void queryStringWithMultipleValues_generateQueryString_validQuery() {
221254
AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(multipleParams, mockContext, null, config);
@@ -265,6 +298,22 @@ void parameterMap_generateParameterMap_nullParameter() {
265298
assertTrue(paramMap.size() == 2);
266299
}
267300

301+
@Test
302+
void parameterMap_generateParameterMap_emptyParameter() {
303+
AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(queryStringEmptyValue, mockContext, null, config);
304+
Map<String, String[]> paramMap = null;
305+
try {
306+
paramMap = request.generateParameterMap(request.getAwsProxyRequest().getMultiValueQueryStringParameters(), config);
307+
} catch (Exception e) {
308+
e.printStackTrace();
309+
fail("Could not generate parameter map");
310+
}
311+
312+
assertArrayEquals(new String[]{"two"}, paramMap.get("one"));
313+
assertArrayEquals(new String[]{""}, paramMap.get("three"));
314+
assertTrue(paramMap.size() == 2);
315+
}
316+
268317
@Test
269318
void parameterMapWithEncodedParams_generateParameterMap_validQuery() {
270319
AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(encodedQueryString, mockContext, null, config);
@@ -319,12 +368,32 @@ void parameterMap_generateParameterMap_formEncodedAndQueryString() {
319368
}
320369

321370
@Test
322-
void parameterMap_generateParameterMap_differentCasing() {
323-
AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(differentCasing, mockContext, null, config);
371+
void parameterMap_generateParameterMap_differentCasing_caseSensitive() {
372+
ContainerConfig caseSensitiveConfig = ContainerConfig.defaultConfig();
373+
caseSensitiveConfig.setQueryStringCaseSensitive(true);
374+
AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(differentCasing, mockContext, null, caseSensitiveConfig);
375+
Map<String, String[]> paramMap = null;
376+
try {
377+
paramMap = request.generateParameterMap(request.getAwsProxyRequest().getMultiValueQueryStringParameters(), caseSensitiveConfig);
378+
} catch (Exception e) {
379+
e.printStackTrace();
380+
fail("Could not generate parameter map");
381+
}
382+
assertArrayEquals(new String[] {"two", "three"}, paramMap.get("one"));
383+
assertArrayEquals(new String[] {"four"}, paramMap.get("ONE"));
384+
assertTrue(paramMap.size() == 2);
385+
}
386+
387+
@Test
388+
void parameterMap_generateParameterMap_differentCasing_caseInsensitive() {
389+
ContainerConfig caseInsensitiveConfig = ContainerConfig.defaultConfig();
390+
caseInsensitiveConfig.setQueryStringCaseSensitive(false);
391+
392+
AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(differentCasing, mockContext, null, caseInsensitiveConfig);
324393

325394
Map<String, String[]> paramMap = null;
326395
try {
327-
paramMap = request.generateParameterMap(request.getAwsProxyRequest().getMultiValueQueryStringParameters(), config);
396+
paramMap = request.generateParameterMap(request.getAwsProxyRequest().getMultiValueQueryStringParameters(), caseInsensitiveConfig);
328397
} catch (Exception e) {
329398
e.printStackTrace();
330399
fail("Could not generate parameter map");
@@ -346,6 +415,17 @@ void queryParamValues_getQueryParamValues() {
346415
assertNull(result2);
347416
}
348417

418+
@Test
419+
void queryParamValues_getQueryParamValues_nullValue() {
420+
AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(new AwsProxyRequest(), mockContext, null);
421+
MultiValuedTreeMap<String, String> map = new MultiValuedTreeMap<>();
422+
map.add("test", null);
423+
String[] result1 = request.getQueryParamValues(map, "test", true);
424+
assertArrayEquals(new String[] {null}, result1);
425+
String[] result2 = request.getQueryParamValues(map, "TEST", true);
426+
assertNull(result2);
427+
}
428+
349429
@Test
350430
void queryParamValues_getQueryParamValues_caseInsensitive() {
351431
AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(new AwsProxyRequest(), mockContext, null);
@@ -358,4 +438,17 @@ void queryParamValues_getQueryParamValues_caseInsensitive() {
358438
assertArrayEquals(new String[]{"test", "test2"}, result2);
359439
}
360440

441+
@Test
442+
void queryParamValues_getQueryParamValues_multipleCaseInsensitive() {
443+
AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(new AwsProxyRequest(), mockContext, null);
444+
445+
MultiValuedTreeMap<String, String> map = new MultiValuedTreeMap<>();
446+
map.add("test", "test");
447+
map.add("TEST", "test2");
448+
String[] result1 = request.getQueryParamValues(map, "test", false);
449+
assertArrayEquals(new String[]{"test2"}, result1);
450+
String[] result2 = request.getQueryParamValues(map, "TEST", false);
451+
assertArrayEquals(new String[]{"test2"}, result2);
452+
}
453+
361454
}

aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ public class AwsProxyHttpServletRequestTest {
3434
private static final String FORM_PARAM_NAME_VALUE = "Stef";
3535
private static final String FORM_PARAM_TEST = "test_cookie_param";
3636
private static final String QUERY_STRING_NAME_VALUE = "Bob";
37+
private static final String QUERY_STRING_NAME = "name";
3738
private static final String REQUEST_SCHEME_HTTP = "http";
3839
private static final String USER_AGENT = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36";
3940
private static final String REFERER = "https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent/Firefox";
@@ -73,10 +74,9 @@ public class AwsProxyHttpServletRequestTest {
7374
}
7475

7576
private static final AwsProxyRequestBuilder REQUEST_QUERY = new AwsProxyRequestBuilder("/hello", "POST")
76-
.queryString(FORM_PARAM_NAME, QUERY_STRING_NAME_VALUE);
77+
.queryString(QUERY_STRING_NAME, QUERY_STRING_NAME_VALUE);
7778
private static final AwsProxyRequestBuilder REQUEST_QUERY_EMPTY_VALUE = new AwsProxyRequestBuilder("/hello", "POST")
78-
.queryString(FORM_PARAM_NAME, "");
79-
79+
.queryString(QUERY_STRING_NAME, "");
8080

8181
public void initAwsProxyHttpServletRequestTest(String type) {
8282
requestType = type;
@@ -102,7 +102,7 @@ private HttpServletRequest getRequest(AwsProxyRequestBuilder req, Context lambda
102102
}
103103
}
104104

105-
105+
106106
@MethodSource("data")
107107
@ParameterizedTest
108108
void headers_getHeader_validRequest(String type) {
@@ -269,7 +269,7 @@ void queryParameters_getParameterMap_nonNull(String type) {
269269
HttpServletRequest request = getRequest(REQUEST_QUERY, null, null);
270270
assertNotNull(request);
271271
assertEquals(1, request.getParameterMap().size());
272-
assertEquals(QUERY_STRING_NAME_VALUE, request.getParameterMap().get(FORM_PARAM_NAME)[0]);
272+
assertEquals(QUERY_STRING_NAME_VALUE, request.getParameterMap().get(QUERY_STRING_NAME)[0]);
273273
}
274274

275275
@MethodSource("data")
@@ -279,7 +279,7 @@ void queryParameters_getParameterMap_nonNull_EmptyParamValue(String type) {
279279
HttpServletRequest request = getRequest(REQUEST_QUERY_EMPTY_VALUE, null, null);
280280
assertNotNull(request);
281281
assertEquals(1, request.getParameterMap().size());
282-
assertEquals("", request.getParameterMap().get(FORM_PARAM_NAME)[0]);
282+
assertEquals("", request.getParameterMap().get(QUERY_STRING_NAME)[0]);
283283
}
284284

285285
@MethodSource("data")
@@ -300,7 +300,7 @@ void queryParameters_getParameterNames_notNull(String type) {
300300
List<String> parameterNames = Collections.list(request.getParameterNames());
301301
assertNotNull(request);
302302
assertEquals(1, parameterNames.size());
303-
assertTrue(parameterNames.contains(FORM_PARAM_NAME));
303+
assertTrue(parameterNames.contains(QUERY_STRING_NAME));
304304
}
305305

306306
@MethodSource("data")
@@ -470,7 +470,6 @@ void requestURL_getUrlWithContextPath_expectStageAsContextPath(String type) {
470470
LambdaContainerHandler.getContainerConfig().setUseStageAsServletContext(true);
471471
HttpServletRequest servletRequest = getRequest(req, null, null);
472472
String requestUrl = servletRequest.getRequestURL().toString();
473-
System.out.println(requestUrl);
474473
assertTrue(requestUrl.contains("/test-stage/"));
475474
LambdaContainerHandler.getContainerConfig().setUseStageAsServletContext(false);
476475
}

0 commit comments

Comments
 (0)