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