Skip to content

Commit 1d670f0

Browse files
authored
add lambdaAsync utils for awssdkv2 (localstack#45)
1 parent e72688b commit 1d670f0

File tree

4 files changed

+50
-8
lines changed

4 files changed

+50
-8
lines changed

pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,12 @@
200200
<version>${aws.sdkv2.version}</version>
201201
<scope>provided</scope>
202202
</dependency>
203+
<dependency>
204+
<groupId>software.amazon.awssdk</groupId>
205+
<artifactId>lambda</artifactId>
206+
<version>${aws.sdkv2.version}</version>
207+
<scope>provided</scope>
208+
</dependency>
203209

204210

205211
<!-- test dependencies -->

src/main/java/cloud/localstack/awssdkv2/TestUtils.java

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

33
import software.amazon.awssdk.regions.Region;
44
import software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient;
5+
import software.amazon.awssdk.services.lambda.LambdaAsyncClient;
56
import software.amazon.awssdk.utils.*;
67
import software.amazon.awssdk.http.*;
78
import software.amazon.awssdk.services.cloudwatch.*;
@@ -58,6 +59,10 @@ public static CloudWatchAsyncClient getClientCloudWatchAsyncV2() {
5859
return wrapApiClientV2(CloudWatchAsyncClient.builder(), Localstack.INSTANCE.getEndpointCloudWatch()).build();
5960
}
6061

62+
public static LambdaAsyncClient getClientLambdaAsyncV2() {
63+
return wrapApiClientV2(LambdaAsyncClient.builder(), Localstack.INSTANCE.getEndpointCloudWatch()).build();
64+
}
65+
6166
public static <T extends SdkAsyncClientBuilder> T wrapApiClientV2(T builder, String endpointURL) {
6267
try {
6368
return (T) ((AwsClientBuilder)builder

src/test/java/cloud/localstack/awssdkv2/BasicFeaturesSDKV2Test.java

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,20 @@
22

33
import cloud.localstack.Constants;
44
import cloud.localstack.LocalstackTestRunner;
5+
import cloud.localstack.sample.LambdaHandler;
6+
import cloud.localstack.utils.LocalTestUtil;
7+
8+
import lombok.val;
59

6-
import com.amazonaws.services.dynamodbv2.model.ListTablesResult;
7-
import org.assertj.core.api.Assertions;
810
import software.amazon.awssdk.core.SdkSystemSetting;
911
import software.amazon.awssdk.services.cloudwatch.*;
1012
import software.amazon.awssdk.services.cloudwatch.model.*;
1113
import software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient;
1214
import software.amazon.awssdk.services.dynamodb.model.*;
1315
import software.amazon.awssdk.services.kinesis.*;
1416
import software.amazon.awssdk.services.kinesis.model.*;
17+
import software.amazon.awssdk.services.lambda.model.CreateFunctionRequest;
18+
import software.amazon.awssdk.services.lambda.model.Runtime;
1519
import software.amazon.awssdk.services.s3.*;
1620
import software.amazon.awssdk.services.s3.model.*;
1721
import software.amazon.awssdk.services.secretsmanager.SecretsManagerAsyncClient;
@@ -214,7 +218,7 @@ public void testCWMultipleDimentionsAndMetrics() throws Exception {
214218
.name("UNIQUE_PAGES"+i)
215219
.value("URLS"+i)
216220
.build());
217-
};
221+
}
218222

219223
// Set an Instant object
220224
String time = ZonedDateTime.now( ZoneOffset.UTC ).format( DateTimeFormatter.ISO_INSTANT );
@@ -229,7 +233,7 @@ public void testCWMultipleDimentionsAndMetrics() throws Exception {
229233
.value(dataPoint)
230234
.timestamp(instant)
231235
.dimensions(awsDimensionList).build());
232-
};
236+
}
233237

234238
PutMetricDataRequest request = PutMetricDataRequest.builder()
235239
.namespace("SITE/TRAFFIC")
@@ -238,4 +242,20 @@ public void testCWMultipleDimentionsAndMetrics() throws Exception {
238242
PutMetricDataResponse response = clientCW.putMetricData(request).get();
239243
Assert.assertNotNull(response);
240244
}
245+
246+
@Test
247+
public void testLambdaCreateListFunctions() throws Exception {
248+
val functionName = "test-f-"+UUID.randomUUID().toString();
249+
val lambdaClient = TestUtils.getClientLambdaAsyncV2();
250+
val createFunctionRequest = CreateFunctionRequest.builder().functionName(functionName)
251+
.runtime(Runtime.JAVA8)
252+
.role("r1")
253+
.code(LocalTestUtil.createFunctionCodeSDKV2(LambdaHandler.class))
254+
.handler(LambdaHandler.class.getName()).build();
255+
val response = lambdaClient.createFunction(createFunctionRequest).get();
256+
Assert.assertNotNull(response);
257+
val functions = lambdaClient.listFunctions().get();
258+
val function = functions.functions().stream().filter(f -> f.functionName().equals(functionName)).findFirst().get();
259+
Assert.assertNotNull(function);
260+
}
241261
}

src/test/java/cloud/localstack/utils/LocalTestUtil.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@
1010
import java.util.zip.ZipOutputStream;
1111

1212
import com.amazonaws.services.lambda.runtime.events.SQSEvent;
13+
import lombok.val;
1314
import org.apache.commons.io.IOUtils;
1415

1516
import com.amazonaws.services.kinesis.model.Record;
1617
import com.amazonaws.services.lambda.model.FunctionCode;
18+
import software.amazon.awssdk.core.SdkBytes;
1719

1820
/**
1921
* Utility methods used for the LocalStack unit and integration tests.
@@ -23,7 +25,18 @@
2325
public class LocalTestUtil {
2426

2527
public static FunctionCode createFunctionCode(Class<?> clazz) throws Exception {
26-
FunctionCode code = new FunctionCode();
28+
val code = new FunctionCode();
29+
code.setZipFile(createFunctionByteBuffer(clazz));
30+
return code;
31+
}
32+
33+
public static software.amazon.awssdk.services.lambda.model.FunctionCode createFunctionCodeSDKV2(Class<?> clazz) throws Exception{
34+
val codeBuilder = software.amazon.awssdk.services.lambda.model.FunctionCode.builder();
35+
codeBuilder.zipFile(SdkBytes.fromByteBuffer(createFunctionByteBuffer(clazz)));
36+
return codeBuilder.build();
37+
}
38+
39+
private static ByteBuffer createFunctionByteBuffer(Class<?> clazz) throws Exception{
2740
ByteArrayOutputStream zipOut = new ByteArrayOutputStream();
2841
ByteArrayOutputStream jarOut = new ByteArrayOutputStream();
2942
// create zip file
@@ -48,9 +61,7 @@ public static FunctionCode createFunctionCode(Class<?> clazz) throws Exception {
4861
zipStream.closeEntry();
4962

5063
zipStream.close();
51-
code.setZipFile(ByteBuffer.wrap(zipOut.toByteArray()));
52-
53-
return code;
64+
return ByteBuffer.wrap(zipOut.toByteArray());
5465
}
5566

5667
private static void addClassToJar(Class<?> clazz, JarOutputStream jarStream) throws IOException {

0 commit comments

Comments
 (0)