1717import java .util .Base64 ;
1818import java .util .List ;
1919import java .util .Map ;
20- import java .util .Arrays ;
2120
2221
2322public 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}
0 commit comments