Skip to content

Commit 7a808b7

Browse files
committed
Clarify Tests, ensure it works with Bean injection
1 parent e4967c4 commit 7a808b7

File tree

8 files changed

+64
-14
lines changed

8 files changed

+64
-14
lines changed

aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyServletContext.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,9 @@ public String getVirtualServerName() {
410410
return null;
411411
}
412412

413+
public String getStage() {
414+
return awsProxyRequest.getRequestContext().getStage();
415+
}
413416

414417
public static ServletContext getInstance(AwsProxyRequest request, Context lambdaContext) {
415418
if (instance == null) {
@@ -418,4 +421,8 @@ public static ServletContext getInstance(AwsProxyRequest request, Context lambda
418421

419422
return instance;
420423
}
424+
425+
public static void clearServletContextCache() {
426+
instance = null;
427+
}
421428
}

aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/LambdaSpringApplicationInitializer.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ public class LambdaSpringApplicationInitializer implements WebApplicationInitial
4747
private ConfigurableWebApplicationContext applicationContext;
4848
private boolean refreshContext = true;
4949
private List<ServletContextListener> contextListeners;
50+
private String lambdaStage;
5051

5152
// Dynamically instantiated properties
5253
private ServletConfig dispatcherConfig;
@@ -84,8 +85,13 @@ public void dispatch(HttpServletRequest request, HttpServletResponse response)
8485
dispatcherServlet.service(request, response);
8586
}
8687

88+
public void setLambdaStage(String lambdaStage) {
89+
this.lambdaStage = lambdaStage;
90+
}
91+
8792
@Override
8893
public void onStartup(ServletContext servletContext) throws ServletException {
94+
applicationContext.getEnvironment().setActiveProfiles(lambdaStage);
8995
applicationContext.setServletContext(servletContext);
9096

9197
dispatcherConfig = new DefaultDispatcherConfig(servletContext);

aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,7 @@
1616
import com.amazonaws.serverless.proxy.internal.*;
1717
import com.amazonaws.serverless.proxy.internal.model.AwsProxyRequest;
1818
import com.amazonaws.serverless.proxy.internal.model.AwsProxyResponse;
19-
import com.amazonaws.serverless.proxy.internal.servlet.AwsHttpServletResponse;
20-
import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequest;
21-
import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequestReader;
22-
import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletResponseWriter;
19+
import com.amazonaws.serverless.proxy.internal.servlet.*;
2320
import com.amazonaws.services.lambda.runtime.Context;
2421
import org.springframework.web.context.ConfigurableWebApplicationContext;
2522
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
@@ -112,6 +109,7 @@ protected void handleRequest(AwsProxyHttpServletRequest containerRequest, AwsHtt
112109

113110
// wire up the application context on the first invocation
114111
if (!initialized) {
112+
initializer.setLambdaStage(((AwsProxyServletContext) containerRequest.getServletContext()).getStage());
115113
ServletContext context = containerRequest.getServletContext();
116114
initializer.onStartup(context);
117115
initialized = true;

aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoSpringAppConfig.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@
22

33
import com.amazonaws.serverless.exceptions.ContainerInitializationException;
44
import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext;
5-
import com.amazonaws.serverless.proxy.spring.LambdaSpringApplicationInitializer;
65
import com.amazonaws.serverless.proxy.spring.SpringLambdaContainerHandler;
7-
import com.amazonaws.services.lambda.runtime.Context;
86
import com.fasterxml.jackson.databind.ObjectMapper;
97
import org.springframework.beans.factory.annotation.Autowired;
108
import org.springframework.context.annotation.Bean;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.amazonaws.serverless.proxy.spring.echoapp.profile;
2+
3+
import org.springframework.context.annotation.Bean;
4+
import org.springframework.context.annotation.Configuration;
5+
6+
@Configuration
7+
public class DefaultProfileConfiguration {
8+
@Bean
9+
public String beanInjectedValue() {
10+
return "default-profile-from-bean";
11+
}
12+
}

aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/profile/DefaultProfileResource.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.amazonaws.serverless.proxy.spring.echoapp.profile;
22

33
import com.amazonaws.serverless.proxy.spring.echoapp.model.MapResponseModel;
4+
import org.springframework.beans.factory.annotation.Autowired;
45
import org.springframework.beans.factory.annotation.Value;
56
import org.springframework.web.bind.annotation.RequestMapping;
67
import org.springframework.web.bind.annotation.RequestMethod;
@@ -15,12 +16,16 @@ public class DefaultProfileResource {
1516
@Value("${spring-proxy.not-overridden-test}")
1617
private String noOverride;
1718

19+
@Autowired
20+
private String beanInjectedValue;
21+
1822
@RequestMapping(path = "/spring-properties", method = RequestMethod.GET)
1923
public MapResponseModel loadProperties() {
2024
MapResponseModel model = new MapResponseModel();
2125

2226
model.addValue("profileTest", profileTest);
2327
model.addValue("noOverride", noOverride);
28+
model.addValue("beanInjectedValue", beanInjectedValue);
2429
return model;
2530
}
2631
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.amazonaws.serverless.proxy.spring.echoapp.profile;
2+
3+
import org.springframework.context.annotation.Bean;
4+
import org.springframework.context.annotation.Configuration;
5+
import org.springframework.context.annotation.Profile;
6+
7+
@Configuration
8+
@Profile("override")
9+
public class OverrideProfileConfiguration {
10+
@Bean
11+
public String beanInjectedValue() {
12+
return "override-profile-from-bean";
13+
}
14+
}

aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/profile/SpringProfileTest.java

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,61 +2,71 @@
22

33
import com.amazonaws.serverless.proxy.internal.model.AwsProxyRequest;
44
import com.amazonaws.serverless.proxy.internal.model.AwsProxyResponse;
5+
import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyServletContext;
56
import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder;
67
import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext;
78
import com.amazonaws.serverless.proxy.spring.SpringLambdaContainerHandler;
89
import com.amazonaws.serverless.proxy.spring.echoapp.EchoSpringAppConfig;
910
import com.amazonaws.serverless.proxy.spring.echoapp.model.MapResponseModel;
1011
import com.fasterxml.jackson.databind.ObjectMapper;
12+
import org.junit.Before;
1113
import org.junit.Test;
1214
import org.junit.runner.RunWith;
1315
import org.springframework.beans.factory.annotation.Autowired;
1416
import org.springframework.test.context.ContextConfiguration;
17+
import org.springframework.test.context.TestExecutionListeners;
1518
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
19+
import org.springframework.test.context.support.DependencyInjectionTestExecutionListener;
1620
import org.springframework.test.context.web.WebAppConfiguration;
1721

18-
import java.io.IOException;
19-
2022
import static org.junit.Assert.assertEquals;
2123

22-
2324
@RunWith(SpringJUnit4ClassRunner.class)
24-
@ContextConfiguration(classes = {EchoSpringAppConfig.class})
25+
@ContextConfiguration(classes = EchoSpringAppConfig.class)
2526
@WebAppConfiguration
27+
@TestExecutionListeners(inheritListeners = false, listeners = {DependencyInjectionTestExecutionListener.class})
2628
public class SpringProfileTest {
2729
@Autowired
2830
private ObjectMapper objectMapper;
2931

3032
@Autowired
3133
private MockLambdaContext lambdaContext;
3234

33-
@Autowired
34-
private SpringLambdaContainerHandler<AwsProxyRequest, AwsProxyResponse> handler;
35+
@Before
36+
public void clearServletContextCache() {
37+
AwsProxyServletContext.clearServletContextCache();
38+
}
3539

3640
@Test
37-
public void profile_defaultProfile() throws IOException {
41+
public void profile_defaultProfile() throws Exception {
3842
AwsProxyRequest request = new AwsProxyRequestBuilder("/profile/spring-properties", "GET")
3943
.build();
4044

45+
SpringLambdaContainerHandler<AwsProxyRequest, AwsProxyResponse> handler = SpringLambdaContainerHandler.getAwsProxyHandler(EchoSpringAppConfig.class);
4146
AwsProxyResponse output = handler.proxy(request, lambdaContext);
4247
assertEquals(200, output.getStatusCode());
4348

4449
MapResponseModel response = objectMapper.readValue(output.getBody(), MapResponseModel.class);
50+
assertEquals(3, response.getValues().size());
4551
assertEquals("default-profile", response.getValues().get("profileTest"));
4652
assertEquals("not-overridden", response.getValues().get("noOverride"));
53+
assertEquals("default-profile-from-bean", response.getValues().get("beanInjectedValue"));
4754
}
4855

4956
@Test
50-
public void profile_overrideProfile() throws IOException {
57+
public void profile_overrideProfile() throws Exception {
5158
AwsProxyRequest request = new AwsProxyRequestBuilder("/profile/spring-properties", "GET")
5259
.stage("override")
5360
.build();
5461

62+
SpringLambdaContainerHandler<AwsProxyRequest, AwsProxyResponse> handler = SpringLambdaContainerHandler.getAwsProxyHandler(EchoSpringAppConfig.class);
5563
AwsProxyResponse output = handler.proxy(request, lambdaContext);
5664
assertEquals(200, output.getStatusCode());
5765

5866
MapResponseModel response = objectMapper.readValue(output.getBody(), MapResponseModel.class);
67+
assertEquals(3, response.getValues().size());
5968
assertEquals("override-profile", response.getValues().get("profileTest"));
6069
assertEquals("not-overridden", response.getValues().get("noOverride"));
70+
assertEquals("override-profile-from-bean", response.getValues().get("beanInjectedValue"));
6171
}
6272
}

0 commit comments

Comments
 (0)