Skip to content

Commit 259758b

Browse files
committed
Read Lambda ClientContext correctly
lambda client context impl decode base64 header undo base64 lambda process resources
1 parent a559667 commit 259758b

File tree

7 files changed

+229
-4
lines changed

7 files changed

+229
-4
lines changed

extensions/amazon-lambda/common-runtime/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@
4646
<groupId>com.fasterxml.jackson.datatype</groupId>
4747
<artifactId>jackson-datatype-joda</artifactId>
4848
</dependency>
49+
<dependency>
50+
<groupId>org.junit.jupiter</groupId>
51+
<artifactId>junit-jupiter</artifactId>
52+
<scope>test</scope>
53+
</dependency>
4954
</dependencies>
5055

5156
<build>

extensions/amazon-lambda/common-runtime/src/main/java/io/quarkus/amazon/lambda/runtime/AmazonLambdaMapperRecorder.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import org.jboss.logging.Logger;
44

5-
import com.amazonaws.services.lambda.runtime.ClientContext;
65
import com.amazonaws.services.lambda.runtime.CognitoIdentity;
76
import com.fasterxml.jackson.databind.DeserializationFeature;
87
import com.fasterxml.jackson.databind.MapperFeature;
@@ -30,7 +29,7 @@ public void initObjectMapper() {
3029

3130
public void initContextReaders() {
3231
cognitoIdReader = objectMapper.readerFor(CognitoIdentity.class);
33-
clientCtxReader = objectMapper.readerFor(ClientContext.class);
32+
clientCtxReader = objectMapper.readerFor(ClientContextImpl.class);
3433

3534
}
3635

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package io.quarkus.amazon.lambda.runtime;
2+
3+
import java.util.Map;
4+
5+
import com.amazonaws.services.lambda.runtime.Client;
6+
import com.amazonaws.services.lambda.runtime.ClientContext;
7+
import com.fasterxml.jackson.annotation.JsonGetter;
8+
import com.fasterxml.jackson.annotation.JsonIgnore;
9+
import com.fasterxml.jackson.annotation.JsonSetter;
10+
11+
public class ClientContextImpl implements ClientContext {
12+
private ClientImpl impl;
13+
private Map<String, String> cust;
14+
private Map<String, String> env;
15+
16+
@JsonGetter("client")
17+
public ClientImpl getImpl() {
18+
return impl;
19+
}
20+
21+
@JsonSetter("client")
22+
public void setImpl(ClientImpl impl) {
23+
this.impl = impl;
24+
}
25+
26+
@JsonGetter("custom")
27+
public Map<String, String> getCust() {
28+
return cust;
29+
}
30+
31+
@JsonSetter("custom")
32+
public void setCust(Map<String, String> cust) {
33+
this.cust = cust;
34+
}
35+
36+
@JsonGetter("env")
37+
public Map<String, String> getEnv() {
38+
return env;
39+
}
40+
41+
@JsonSetter("env")
42+
public void setEnv(Map<String, String> env) {
43+
this.env = env;
44+
}
45+
46+
@Override
47+
@JsonIgnore
48+
public Client getClient() {
49+
return impl;
50+
}
51+
52+
@Override
53+
@JsonIgnore
54+
public Map<String, String> getCustom() {
55+
return cust;
56+
}
57+
58+
@Override
59+
@JsonIgnore
60+
public Map<String, String> getEnvironment() {
61+
return env;
62+
}
63+
}
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
package io.quarkus.amazon.lambda.runtime;
2+
3+
import com.amazonaws.services.lambda.runtime.Client;
4+
import com.fasterxml.jackson.annotation.JsonGetter;
5+
import com.fasterxml.jackson.annotation.JsonIgnore;
6+
import com.fasterxml.jackson.annotation.JsonSetter;
7+
8+
public class ClientImpl implements Client {
9+
private String id;
10+
private String title;
11+
private String versionName;
12+
private String versionCode;
13+
private String packageName;
14+
15+
@JsonGetter("client_id")
16+
public String getId() {
17+
return id;
18+
}
19+
20+
@JsonSetter("client_id")
21+
public void setId(String id) {
22+
this.id = id;
23+
}
24+
25+
@JsonGetter("app_title")
26+
public String getTitle() {
27+
return title;
28+
}
29+
30+
@JsonSetter("app_title")
31+
public void setTitle(String title) {
32+
this.title = title;
33+
}
34+
35+
@JsonGetter("app_version_name")
36+
public String getVersionName() {
37+
return versionName;
38+
}
39+
40+
@JsonSetter("app_version_name")
41+
public void setVersionName(String versionName) {
42+
this.versionName = versionName;
43+
}
44+
45+
@JsonGetter("app_version_code")
46+
public String getVersionCode() {
47+
return versionCode;
48+
}
49+
50+
@JsonSetter("app_version_code")
51+
public void setVersionCode(String versionCode) {
52+
this.versionCode = versionCode;
53+
}
54+
55+
@JsonGetter("app_package_name")
56+
public String getPackageName() {
57+
return packageName;
58+
}
59+
60+
@JsonSetter("app_package_name")
61+
public void setPackageName(String packageName) {
62+
this.packageName = packageName;
63+
}
64+
65+
@Override
66+
@JsonIgnore
67+
public String getInstallationId() {
68+
return id;
69+
}
70+
71+
@Override
72+
@JsonIgnore
73+
public String getAppTitle() {
74+
return title;
75+
}
76+
77+
@Override
78+
@JsonIgnore
79+
public String getAppVersionName() {
80+
return versionName;
81+
}
82+
83+
@Override
84+
@JsonIgnore
85+
public String getAppVersionCode() {
86+
return versionCode;
87+
}
88+
89+
@Override
90+
@JsonIgnore
91+
public String getAppPackageName() {
92+
return packageName;
93+
}
94+
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package io.quarkus.amazon.lambda.test;
2+
3+
import org.junit.jupiter.api.Assertions;
4+
import org.junit.jupiter.api.Test;
5+
6+
import com.amazonaws.services.lambda.runtime.ClientContext;
7+
import com.fasterxml.jackson.databind.DeserializationFeature;
8+
import com.fasterxml.jackson.databind.MapperFeature;
9+
import com.fasterxml.jackson.databind.ObjectMapper;
10+
import com.fasterxml.jackson.databind.ObjectReader;
11+
12+
import io.quarkus.amazon.lambda.runtime.ClientContextImpl;
13+
14+
public class ClientContextTest {
15+
16+
static final String ctx = "{\n" +
17+
" \"client\": {\n" +
18+
" \"client_id\":\"<client_id>\",\n" +
19+
" \"app_title\":\"<app_title>\",\n" +
20+
" \"app_version_name\":\"<app_version_name>\",\n" +
21+
" \"app_version_code\":\"<app_version_code>\",\n" +
22+
" \"app_package_name\":\"<app_package_name>\"\n" +
23+
" },\n" +
24+
" \n" +
25+
" \"custom\": { \"hello\": \"world\"},\n" +
26+
" \n" +
27+
" \"env\":{\n" +
28+
" \"platform\":\"<platform>\",\n" +
29+
" \"model\":\"<model>\",\n" +
30+
" \"make\":\"<make>\",\n" +
31+
" \"platform_version\":\"<platform_version>\",\n" +
32+
" \"locale\":\"<locale>\"\n" +
33+
" },\n" +
34+
"\n" +
35+
" \"services\": { \n" +
36+
" \"mobile_analytics\": {\n" +
37+
" \"app_id\":\"<mobile_analytics_app_id>\"\n" +
38+
" }\n" +
39+
" }\n" +
40+
" }";
41+
42+
@Test
43+
public void testContextMarshalling() throws Exception {
44+
ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
45+
.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
46+
47+
ObjectReader reader = mapper.readerFor(ClientContextImpl.class);
48+
49+
ClientContext clientContext = reader.readValue(ctx);
50+
Assertions.assertNotNull(clientContext.getClient());
51+
Assertions.assertNotNull(clientContext.getCustom());
52+
Assertions.assertNotNull(clientContext.getEnvironment());
53+
54+
Assertions.assertEquals("<client_id>", clientContext.getClient().getInstallationId());
55+
Assertions.assertEquals("<app_title>", clientContext.getClient().getAppTitle());
56+
Assertions.assertEquals("<app_version_name>", clientContext.getClient().getAppVersionName());
57+
Assertions.assertEquals("<app_version_code>", clientContext.getClient().getAppVersionCode());
58+
Assertions.assertEquals("<app_package_name>", clientContext.getClient().getAppPackageName());
59+
60+
Assertions.assertEquals("world", clientContext.getCustom().get("hello"));
61+
Assertions.assertEquals("<platform>", clientContext.getEnvironment().get("platform"));
62+
63+
}
64+
}

extensions/amazon-lambda/runtime/src/main/java/io/quarkus/amazon/lambda/runtime/AmazonLambdaRecorder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ public void chooseHandlerClass(List<Class<? extends RequestHandler<?, ?>>> uname
140140
@SuppressWarnings("rawtypes")
141141
public void startPollLoop(ShutdownContext context) {
142142
AbstractLambdaPollLoop loop = new AbstractLambdaPollLoop(AmazonLambdaMapperRecorder.objectMapper,
143-
AmazonLambdaMapperRecorder.cognitoIdReader, AmazonLambdaMapperRecorder.cognitoIdReader) {
143+
AmazonLambdaMapperRecorder.cognitoIdReader, AmazonLambdaMapperRecorder.clientCtxReader) {
144144

145145
@Override
146146
protected Object processRequest(Object input, AmazonLambdaContext context) throws Exception {

extensions/funqy/funqy-amazon-lambda/runtime/src/main/java/io/quarkus/funqy/lambda/FunqyLambdaBindingRecorder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ public static void handle(InputStream inputStream, OutputStream outputStream, Co
104104
@SuppressWarnings("rawtypes")
105105
public void startPollLoop(ShutdownContext context) {
106106
AbstractLambdaPollLoop loop = new AbstractLambdaPollLoop(AmazonLambdaMapperRecorder.objectMapper,
107-
AmazonLambdaMapperRecorder.cognitoIdReader, AmazonLambdaMapperRecorder.cognitoIdReader) {
107+
AmazonLambdaMapperRecorder.cognitoIdReader, AmazonLambdaMapperRecorder.clientCtxReader) {
108108

109109
@Override
110110
protected Object processRequest(Object input, AmazonLambdaContext context) throws Exception {

0 commit comments

Comments
 (0)