1+ package com .amazonaws .serverless .proxy .spring ;
2+
3+ import static org .junit .jupiter .api .Assertions .assertThrows ;
4+ import static org .mockito .ArgumentMatchers .any ;
5+ import static org .mockito .Mockito .doAnswer ;
6+ import static org .mockito .Mockito .never ;
7+ import static org .mockito .Mockito .times ;
8+ import static org .mockito .Mockito .verify ;
9+
10+ import com .amazonaws .serverless .exceptions .ContainerInitializationException ;
11+ import com .amazonaws .serverless .proxy .AwsProxyExceptionHandler ;
12+ import com .amazonaws .serverless .proxy .AwsProxySecurityContextWriter ;
13+ import com .amazonaws .serverless .proxy .InitializationWrapper ;
14+ import com .amazonaws .serverless .proxy .internal .servlet .AwsProxyHttpServletRequestReader ;
15+ import com .amazonaws .serverless .proxy .internal .servlet .AwsProxyHttpServletResponseWriter ;
16+ import com .amazonaws .serverless .proxy .model .AwsProxyRequest ;
17+ import com .amazonaws .serverless .proxy .model .AwsProxyResponse ;
18+ import com .amazonaws .serverless .proxy .spring .servletapp .ServletApplication ;
19+ import com .amazonaws .serverless .proxy .spring .webfluxapp .WebFluxTestApplication ;
20+ import java .util .Collection ;
21+ import java .util .List ;
22+ import org .junit .jupiter .params .ParameterizedTest ;
23+ import org .junit .jupiter .params .provider .EnumSource ;
24+ import org .junit .jupiter .params .provider .MethodSource ;
25+ import org .mockito .Mockito ;
26+ import org .springframework .boot .WebApplicationType ;
27+ import org .springframework .boot .builder .SpringApplicationBuilder ;
28+
29+ class SpringBootLambdaContainerHandlerTest {
30+
31+ SpringBootLambdaContainerHandler <AwsProxyRequest , AwsProxyResponse > handler ;
32+ SpringApplicationBuilder springApplicationBuilder ;
33+
34+ public static Collection <TestData > data () {
35+ return List .of (new TestData (WebApplicationType .SERVLET , ServletApplication .class ),
36+ new TestData (WebApplicationType .REACTIVE , WebFluxTestApplication .class ));
37+ }
38+
39+ private void initSpringBootLambdaContainerHandlerTest (Class <?> springBootInitializer ,
40+ WebApplicationType applicationType ) {
41+ handler = Mockito .spy (new SpringBootLambdaContainerHandler <>(AwsProxyRequest .class ,
42+ AwsProxyResponse .class ,
43+ new AwsProxyHttpServletRequestReader (),
44+ new AwsProxyHttpServletResponseWriter (),
45+ new AwsProxySecurityContextWriter (),
46+ new AwsProxyExceptionHandler (),
47+ springBootInitializer ,
48+ new InitializationWrapper (),
49+ applicationType ));
50+
51+ doAnswer (d -> {
52+ springApplicationBuilder = ((SpringApplicationBuilder ) Mockito .spy (d .callRealMethod ()));
53+ return springApplicationBuilder ;
54+ }).when (handler ).getSpringApplicationBuilder (any (Class [].class ));
55+ }
56+
57+ @ ParameterizedTest
58+ @ MethodSource ("data" )
59+ void initialize_withSpringBootInitializer (TestData data ) throws ContainerInitializationException {
60+ initSpringBootLambdaContainerHandlerTest (data .springBootApplication (), data .applicationType ());
61+ handler .initialize ();
62+
63+ verify (springApplicationBuilder , times (1 )).main (data .springBootApplication ());
64+ }
65+
66+ @ ParameterizedTest
67+ @ EnumSource (WebApplicationType .class )
68+ void initialize_withoutSpringBootInitializer (WebApplicationType webApplicationType ) {
69+ initSpringBootLambdaContainerHandlerTest (null , webApplicationType );
70+ assertThrows (IllegalArgumentException .class , handler ::initialize , "Source must not be null" );
71+
72+ verify (springApplicationBuilder , never ()).main (any ());
73+ }
74+
75+ record TestData (WebApplicationType applicationType , Class <?> springBootApplication ) {}
76+ }
0 commit comments