1
1
package com .amazonaws .serverless .proxy .internal .servlet ;
2
2
3
3
import com .amazonaws .serverless .proxy .model .AwsProxyRequest ;
4
+ import com .amazonaws .serverless .proxy .model .MultiValuedTreeMap ;
4
5
import com .amazonaws .serverless .proxy .internal .testutils .AwsProxyRequestBuilder ;
5
6
import com .amazonaws .serverless .proxy .internal .testutils .MockLambdaContext ;
6
7
import com .amazonaws .serverless .proxy .model .ContainerConfig ;
15
16
16
17
import java .util .Base64 ;
17
18
import java .util .List ;
19
+ import java .util .Map ;
20
+ import java .util .Arrays ;
18
21
19
22
20
23
public class AwsHttpServletRequestTest {
@@ -33,6 +36,14 @@ public class AwsHttpServletRequestTest {
33
36
.queryString ("one" , "two" ).queryString ("json" , "{\" name\" :\" faisal\" }" ).build ();
34
37
private static final AwsProxyRequest multipleParams = new AwsProxyRequestBuilder ("/test" , "GET" )
35
38
.queryString ("one" , "two" ).queryString ("one" , "three" ).queryString ("json" , "{\" name\" :\" faisal\" }" ).build ();
39
+ private static final AwsProxyRequest formEncodedAndQueryString = new AwsProxyRequestBuilder ("/test" , "POST" )
40
+ .queryString ("one" , "two" ).queryString ("one" , "three" )
41
+ .queryString ("five" , "six" )
42
+ .form ("one" , "four" )
43
+ .form ("seven" , "eight" ).build ();
44
+ private static final AwsProxyRequest differentCasing = new AwsProxyRequestBuilder ("/test" , "POST" )
45
+ .queryString ("one" , "two" ).queryString ("one" , "three" )
46
+ .queryString ("ONE" , "four" ).build ();
36
47
37
48
private static final MockLambdaContext mockContext = new MockLambdaContext ();
38
49
@@ -182,4 +193,130 @@ void queryStringWithMultipleValues_generateQueryString_validQuery() {
182
193
assertTrue (parsedString .contains ("json=%7B%22name%22%3A%22faisal%22%7D" ));
183
194
assertTrue (parsedString .contains ("&" ) && parsedString .indexOf ("&" ) > 0 && parsedString .indexOf ("&" ) < parsedString .length ());
184
195
}
196
+
197
+ @ Test
198
+ void parameterMap_generateParameterMap_validQuery () {
199
+ AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest (queryString , mockContext , null , config );
200
+
201
+ Map <String , String []> paramMap = null ;
202
+ try {
203
+ paramMap = request .generateParameterMap (request .getAwsProxyRequest ().getMultiValueQueryStringParameters (), config );
204
+ } catch (Exception e ) {
205
+ e .printStackTrace ();
206
+ fail ("Could not generate parameter map" );
207
+ }
208
+ assertArrayEquals (new String []{"two" }, paramMap .get ("one" ));
209
+ assertArrayEquals (new String []{"four" }, paramMap .get ("three" ));
210
+ assertTrue (paramMap .size () == 2 );
211
+ }
212
+
213
+ @ Test
214
+ void parameterMap_generateParameterMap_nullParameter () {
215
+ AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest (queryStringNullValue , mockContext , null , config );
216
+ Map <String , String []> paramMap = null ;
217
+ try {
218
+ paramMap = request .generateParameterMap (request .getAwsProxyRequest ().getMultiValueQueryStringParameters (), config );
219
+ } catch (Exception e ) {
220
+ e .printStackTrace ();
221
+ fail ("Could not generate parameter map" );
222
+ }
223
+
224
+ assertArrayEquals (new String []{"two" }, paramMap .get ("one" ));
225
+ assertArrayEquals (new String []{null }, paramMap .get ("three" ));
226
+ assertTrue (paramMap .size () == 2 );
227
+ }
228
+
229
+ @ Test
230
+ void parameterMapWithEncodedParams_generateParameterMap_validQuery () {
231
+ AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest (encodedQueryString , mockContext , null , config );
232
+
233
+ Map <String , String []> paramMap = null ;
234
+ try {
235
+ paramMap = request .generateParameterMap (request .getAwsProxyRequest ().getMultiValueQueryStringParameters (), config );
236
+ } catch (Exception e ) {
237
+ e .printStackTrace ();
238
+ fail ("Could not generate parameter map" );
239
+ }
240
+
241
+ assertArrayEquals (new String []{"two" }, paramMap .get ("one" ));
242
+ assertArrayEquals (new String []{"{\" name\" :\" faisal\" }" }, paramMap .get ("json" ));
243
+ assertTrue (paramMap .size () == 2 );
244
+ }
245
+
246
+ @ Test
247
+ void parameterMapWithMultipleValues_generateParameterMap_validQuery () {
248
+ AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest (multipleParams , mockContext , null , config );
249
+
250
+ Map <String , String []> paramMap = null ;
251
+ try {
252
+ paramMap = request .generateParameterMap (request .getAwsProxyRequest ().getMultiValueQueryStringParameters (), config );
253
+ } catch (Exception e ) {
254
+ e .printStackTrace ();
255
+ fail ("Could not generate parameter map" );
256
+ }
257
+ assertArrayEquals (new String []{"two" , "three" }, paramMap .get ("one" ));
258
+ assertArrayEquals (new String []{"{\" name\" :\" faisal\" }" }, paramMap .get ("json" ));
259
+ assertTrue (paramMap .size () == 2 );
260
+ }
261
+
262
+ @ Test
263
+ void parameterMap_generateParameterMap_formEncodedAndQueryString () {
264
+ AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest (formEncodedAndQueryString , mockContext , null , config );
265
+
266
+ Map <String , String []> paramMap = null ;
267
+ try {
268
+ paramMap = request .generateParameterMap (request .getAwsProxyRequest ().getMultiValueQueryStringParameters (), config );
269
+ } catch (Exception e ) {
270
+ e .printStackTrace ();
271
+ fail ("Could not generate parameter map" );
272
+ }
273
+ // Combines form encoded parameters (one=four) with query string (one=two,three)
274
+ // The order between them is not officially guaranteed (it could be four,two,three or two,three,four)
275
+ // Current implementation gives form encoded parameters first
276
+ assertArrayEquals (new String []{"four" , "two" , "three" }, paramMap .get ("one" ));
277
+ assertArrayEquals (new String []{"six" }, paramMap .get ("five" ));
278
+ assertArrayEquals (new String []{"eight" }, paramMap .get ("seven" ));
279
+ assertTrue (paramMap .size () == 3 );
280
+ }
281
+
282
+ @ Test
283
+ void parameterMap_generateParameterMap_differentCasing () {
284
+ AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest (differentCasing , mockContext , null , config );
285
+
286
+ Map <String , String []> paramMap = null ;
287
+ try {
288
+ paramMap = request .generateParameterMap (request .getAwsProxyRequest ().getMultiValueQueryStringParameters (), config );
289
+ } catch (Exception e ) {
290
+ e .printStackTrace ();
291
+ fail ("Could not generate parameter map" );
292
+ }
293
+ // If a parameter is duplicated but with a different casing, it's replaced with only one of them
294
+ assertArrayEquals (paramMap .get ("one" ), paramMap .get ("ONE" ));
295
+ assertTrue (paramMap .size () == 2 );
296
+ }
297
+
298
+ @ Test
299
+ void queryParamValues_getQueryParamValues () {
300
+ AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest (new AwsProxyRequest (), mockContext , null );
301
+ MultiValuedTreeMap <String , String > map = new MultiValuedTreeMap <>();
302
+ map .add ("test" , "test" );
303
+ map .add ("test" , "test2" );
304
+ String [] result1 = request .getQueryParamValues (map , "test" , true );
305
+ assertArrayEquals (new String []{"test" , "test2" }, result1 );
306
+ String [] result2 = request .getQueryParamValues (map , "TEST" , true );
307
+ assertNull (result2 );
308
+ }
309
+
310
+ @ Test
311
+ void queryParamValues_getQueryParamValues_caseInsensitive () {
312
+ AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest (new AwsProxyRequest (), mockContext , null );
313
+ MultiValuedTreeMap <String , String > map = new MultiValuedTreeMap <>();
314
+ map .add ("test" , "test" );
315
+ map .add ("test" , "test2" );
316
+ String [] result1 = request .getQueryParamValues (map , "test" , false );
317
+ assertArrayEquals (new String []{"test" , "test2" }, result1 );
318
+ String [] result2 = request .getQueryParamValues (map , "TEST" , false );
319
+ assertArrayEquals (new String []{"test" , "test2" }, result2 );
320
+ }
321
+
185
322
}
0 commit comments