2424import com .fasterxml .jackson .core .type .TypeReference ;
2525import com .fasterxml .jackson .databind .ObjectMapper ;
2626import org .apache .commons .codec .binary .Base64 ;
27- import org .apache .struts2 .StrutsJUnit4TestCase ;
27+ import org .apache .struts2 .StrutsRestTestCase ;
2828import org .junit .Test ;
2929import org .junit .runner .RunWith ;
3030import org .junit .runners .Parameterized ;
4949 * Unit test class for the Struts2 AWS_PROXY default implementation
5050 */
5151@ RunWith (Parameterized .class )
52- public class StrutsAwsProxyTest extends StrutsJUnit4TestCase <EchoAction > {
52+ public class StrutsAwsProxyTest extends StrutsRestTestCase <EchoAction > {
5353 private static final String CUSTOM_HEADER_KEY = "x-custom-header" ;
5454 private static final String CUSTOM_HEADER_VALUE = "my-custom-value" ;
5555 private static final String AUTHORIZER_PRINCIPAL_ID = "test-principal-" + UUID .randomUUID ().toString ();
56+ private static final String HTTP_METHOD_GET = "GET" ;
57+ private static final String QUERY_STRING_MODE = "mode" ;
5658 private static final String QUERY_STRING_KEY = "message" ;
5759 private static final String QUERY_STRING_ENCODED_VALUE = "Hello Struts2" ;
5860 private static final String USER_PRINCIPAL = "user1" ;
5961 private static final String CONTENT_TYPE_APPLICATION_JSON = "application/json; charset=UTF-8" ;
6062
6163
62- private static ObjectMapper objectMapper = new ObjectMapper ();
64+ private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper ();
6365 private final StrutsLambdaContainerHandler <AwsProxyRequest , AwsProxyResponse > handler = StrutsLambdaContainerHandler
6466 .getAwsProxyHandler ();
6567 private final StrutsLambdaContainerHandler <HttpApiV2ProxyRequest , AwsProxyResponse > httpApiHandler = StrutsLambdaContainerHandler
6668 .getHttpApiV2ProxyHandler ();
67- private static Context lambdaContext = new MockLambdaContext ();
68-
69- private String type ;
69+ private final Context lambdaContext = new MockLambdaContext ();
70+ private final String type ;
7071
7172 public StrutsAwsProxyTest (String reqType ) {
7273 type = reqType ;
@@ -92,8 +93,8 @@ private AwsProxyResponse executeRequest(AwsProxyRequestBuilder requestBuilder, C
9293
9394 @ Test
9495 public void headers_getHeaders_echo () {
95- AwsProxyRequestBuilder request = new AwsProxyRequestBuilder ("/echo-request-info" , "GET" )
96- .queryString ("mode" , "headers" )
96+ AwsProxyRequestBuilder request = new AwsProxyRequestBuilder ("/echo-request-info" , HTTP_METHOD_GET )
97+ .queryString (QUERY_STRING_MODE , "headers" )
9798 .header (CUSTOM_HEADER_KEY , CUSTOM_HEADER_VALUE )
9899 .json ();
99100
@@ -106,7 +107,7 @@ public void headers_getHeaders_echo() {
106107
107108 @ Test
108109 public void context_servletResponse_setCustomHeader () {
109- AwsProxyRequestBuilder request = new AwsProxyRequestBuilder ("/echo" , "GET" )
110+ AwsProxyRequestBuilder request = new AwsProxyRequestBuilder ("/echo" , HTTP_METHOD_GET )
110111 .queryString ("customHeader" , "true" )
111112 .json ();
112113
@@ -118,7 +119,7 @@ public void context_servletResponse_setCustomHeader() {
118119 @ Test
119120 public void context_serverInfo_correctContext () {
120121 assumeTrue ("API_GW" .equals (type ));
121- AwsProxyRequestBuilder request = new AwsProxyRequestBuilder ("/echo" , "GET" )
122+ AwsProxyRequestBuilder request = new AwsProxyRequestBuilder ("/echo" , HTTP_METHOD_GET )
122123 .queryString (QUERY_STRING_KEY , "Hello Struts2" )
123124 .header ("Content-Type" , "application/json" )
124125 .queryString ("contentType" , "true" );
@@ -131,8 +132,8 @@ public void context_serverInfo_correctContext() {
131132
132133 @ Test
133134 public void queryString_uriInfo_echo () {
134- AwsProxyRequestBuilder request = new AwsProxyRequestBuilder ("/echo-request-info" , "GET" )
135- .queryString ("mode" , "query-string" )
135+ AwsProxyRequestBuilder request = new AwsProxyRequestBuilder ("/echo-request-info" , HTTP_METHOD_GET )
136+ .queryString (QUERY_STRING_MODE , "query-string" )
136137 .queryString (CUSTOM_HEADER_KEY , CUSTOM_HEADER_VALUE )
137138 .json ();
138139
@@ -146,8 +147,8 @@ public void queryString_uriInfo_echo() {
146147
147148 @ Test
148149 public void requestScheme_valid_expectHttps () {
149- AwsProxyRequestBuilder request = new AwsProxyRequestBuilder ("/echo-request-info" , "GET" )
150- .queryString ("mode" , "scheme" )
150+ AwsProxyRequestBuilder request = new AwsProxyRequestBuilder ("/echo-request-info" , HTTP_METHOD_GET )
151+ .queryString (QUERY_STRING_MODE , "scheme" )
151152 .queryString (QUERY_STRING_KEY , QUERY_STRING_ENCODED_VALUE )
152153 .json ();
153154
@@ -161,8 +162,8 @@ public void requestScheme_valid_expectHttps() {
161162 @ Test
162163 public void authorizer_securityContext_customPrincipalSuccess () {
163164 assumeTrue ("API_GW" .equals (type ));
164- AwsProxyRequestBuilder request = new AwsProxyRequestBuilder ("/echo-request-info" , "GET" )
165- .queryString ("mode" , "principal" )
165+ AwsProxyRequestBuilder request = new AwsProxyRequestBuilder ("/echo-request-info" , HTTP_METHOD_GET )
166+ .queryString (QUERY_STRING_MODE , "principal" )
166167 .json ()
167168 .authorizerPrincipal (AUTHORIZER_PRINCIPAL_ID );
168169
@@ -175,7 +176,7 @@ public void authorizer_securityContext_customPrincipalSuccess() {
175176
176177 @ Test
177178 public void errors_unknownRoute_expect404 () {
178- AwsProxyRequestBuilder request = new AwsProxyRequestBuilder ("/unknown" , "GET" );
179+ AwsProxyRequestBuilder request = new AwsProxyRequestBuilder ("/unknown" , HTTP_METHOD_GET );
179180
180181 AwsProxyResponse output = executeRequest (request , lambdaContext );
181182 assertEquals (404 , output .getStatusCode ());
@@ -184,7 +185,7 @@ public void errors_unknownRoute_expect404() {
184185 @ Test
185186 public void error_contentType_invalidContentType () {
186187 AwsProxyRequestBuilder request = new AwsProxyRequestBuilder ("/echo-request-info" , "POST" )
187- .queryString ("mode" , "content-type" )
188+ .queryString (QUERY_STRING_MODE , "content-type" )
188189 .header ("Content-Type" , "application/octet-stream" )
189190 .body ("asdasdasd" );
190191
@@ -195,7 +196,7 @@ public void error_contentType_invalidContentType() {
195196 @ Test
196197 public void error_statusCode_methodNotAllowed () {
197198 AwsProxyRequestBuilder request = new AwsProxyRequestBuilder ("/echo-request-info" , "POST" )
198- .queryString ("mode" , "not-allowed" )
199+ .queryString (QUERY_STRING_MODE , "not-allowed" )
199200 .json ();
200201
201202 AwsProxyResponse output = executeRequest (request , lambdaContext );
@@ -209,7 +210,7 @@ public void responseBody_responseWriter_validBody() throws JsonProcessingExcepti
209210 value .put (QUERY_STRING_KEY , CUSTOM_HEADER_VALUE );
210211 AwsProxyRequestBuilder request = new AwsProxyRequestBuilder ("/echo" , "POST" )
211212 .json ()
212- .body (objectMapper .writeValueAsString (value ));
213+ .body (OBJECT_MAPPER .writeValueAsString (value ));
213214
214215 AwsProxyResponse output = executeRequest (request , lambdaContext );
215216 assertEquals (200 , output .getStatusCode ());
@@ -220,8 +221,8 @@ public void responseBody_responseWriter_validBody() throws JsonProcessingExcepti
220221
221222 @ Test
222223 public void statusCode_responseStatusCode_customStatusCode () {
223- AwsProxyRequestBuilder request = new AwsProxyRequestBuilder ("/echo-request-info" , "GET" )
224- .queryString ("mode" , "custom-status-code" )
224+ AwsProxyRequestBuilder request = new AwsProxyRequestBuilder ("/echo-request-info" , HTTP_METHOD_GET )
225+ .queryString (QUERY_STRING_MODE , "custom-status-code" )
225226 .queryString ("status" , "201" )
226227 .json ();
227228
@@ -231,7 +232,7 @@ public void statusCode_responseStatusCode_customStatusCode() {
231232
232233 @ Test
233234 public void base64_binaryResponse_base64Encoding () {
234- AwsProxyRequestBuilder request = new AwsProxyRequestBuilder ("/echo" , "GET" );
235+ AwsProxyRequestBuilder request = new AwsProxyRequestBuilder ("/echo" , HTTP_METHOD_GET );
235236
236237 AwsProxyResponse response = executeRequest (request , lambdaContext );
237238 assertNotNull (response .getBody ());
@@ -241,7 +242,7 @@ public void base64_binaryResponse_base64Encoding() {
241242 @ Test
242243 public void exception_mapException_mapToNotImplemented () {
243244 AwsProxyRequestBuilder request = new AwsProxyRequestBuilder ("/echo-request-info" , "POST" )
244- .queryString ("mode" , "not-implemented" );
245+ .queryString (QUERY_STRING_MODE , "not-implemented" );
245246
246247 AwsProxyResponse response = executeRequest (request , lambdaContext );
247248 assertNotNull (response .getBody ());
@@ -251,7 +252,7 @@ public void exception_mapException_mapToNotImplemented() {
251252
252253 @ Test
253254 public void stripBasePath_route_shouldRouteCorrectly () {
254- AwsProxyRequestBuilder request = new AwsProxyRequestBuilder ("/custompath/echo" , "GET" )
255+ AwsProxyRequestBuilder request = new AwsProxyRequestBuilder ("/custompath/echo" , HTTP_METHOD_GET )
255256 .json ()
256257 .queryString (QUERY_STRING_KEY , "stripped" );
257258 handler .stripBasePath ("/custompath" );
@@ -263,7 +264,7 @@ public void stripBasePath_route_shouldRouteCorrectly() {
263264
264265 @ Test
265266 public void stripBasePath_route_shouldReturn404 () {
266- AwsProxyRequestBuilder request = new AwsProxyRequestBuilder ("/custompath/echo/status-code" , "GET" )
267+ AwsProxyRequestBuilder request = new AwsProxyRequestBuilder ("/custompath/echo/status-code" , HTTP_METHOD_GET )
267268 .json ()
268269 .queryString ("status" , "201" );
269270 handler .stripBasePath ("/custom" );
@@ -275,8 +276,8 @@ public void stripBasePath_route_shouldReturn404() {
275276 @ Test
276277 public void securityContext_injectPrincipal_expectPrincipalName () {
277278 assumeTrue ("API_GW" .equals (type ));
278- AwsProxyRequestBuilder request = new AwsProxyRequestBuilder ("/echo-request-info" , "GET" )
279- .queryString ("mode" , "principal" )
279+ AwsProxyRequestBuilder request = new AwsProxyRequestBuilder ("/echo-request-info" , HTTP_METHOD_GET )
280+ .queryString (QUERY_STRING_MODE , "principal" )
280281 .authorizerPrincipal (USER_PRINCIPAL );
281282
282283 AwsProxyResponse resp = executeRequest (request , lambdaContext );
@@ -295,7 +296,7 @@ public void queryParam_encoding_expectUnencodedParam() {
295296 e .printStackTrace ();
296297 fail ("Could not decode parameter" );
297298 }
298- AwsProxyRequestBuilder request = new AwsProxyRequestBuilder ("/echo" , "GET" ).queryString (QUERY_STRING_KEY , decodedParam );
299+ AwsProxyRequestBuilder request = new AwsProxyRequestBuilder ("/echo" , HTTP_METHOD_GET ).queryString (QUERY_STRING_KEY , decodedParam );
299300
300301 AwsProxyResponse resp = executeRequest (request , lambdaContext );
301302 assertEquals (200 , resp .getStatusCode ());
@@ -306,7 +307,7 @@ public void queryParam_encoding_expectUnencodedParam() {
306307 public void queryParam_encoding_expectEncodedParam () {
307308 assumeTrue ("API_GW" .equals (type ));
308309 String paramValue = "p%2Fz%2B3" ;
309- AwsProxyRequestBuilder request = new AwsProxyRequestBuilder ("/echo" , "GET" ).queryString (QUERY_STRING_KEY , paramValue );
310+ AwsProxyRequestBuilder request = new AwsProxyRequestBuilder ("/echo" , HTTP_METHOD_GET ).queryString (QUERY_STRING_KEY , paramValue );
310311
311312 AwsProxyResponse resp = executeRequest (request , lambdaContext );
312313 assertEquals (200 , resp .getStatusCode ());
@@ -323,7 +324,7 @@ private void validateMapResponseModel(AwsProxyResponse output, String key, Strin
323324 TypeReference <HashMap <String , Object >> typeRef
324325 = new TypeReference <HashMap <String , Object >>() {
325326 };
326- HashMap <String , Object > response = objectMapper .readValue (output .getBody (), typeRef );
327+ HashMap <String , Object > response = OBJECT_MAPPER .readValue (output .getBody (), typeRef );
327328 assertNotNull (response .get (key ));
328329 assertEquals (value , response .get (key ));
329330 } catch (IOException e ) {
@@ -335,7 +336,7 @@ private void validateMapResponseModel(AwsProxyResponse output, String key, Strin
335336 private void validateSingleValueModel (AwsProxyResponse output , String value ) {
336337 try {
337338 assertNotNull (output .getBody ());
338- assertEquals (value , objectMapper .readerFor (String .class ).readValue (output .getBody ()));
339+ assertEquals (value , OBJECT_MAPPER .readerFor (String .class ).readValue (output .getBody ()));
339340 } catch (Exception e ) {
340341 e .printStackTrace ();
341342 fail ("Exception while parsing response body: " + e .getMessage ());
0 commit comments