From f64a8b1e00488132975d6e4419838c0973738c92 Mon Sep 17 00:00:00 2001 From: Vitor Carvalho Date: Fri, 26 Feb 2021 00:22:18 +0000 Subject: [PATCH 1/2] Add lambdaAsync for awssdkv2 and unit test --- pom.xml | 6 ++++ .../cloud/localstack/awssdkv2/TestUtils.java | 5 ++++ .../awssdkv2/BasicFeaturesSDKV2Test.java | 28 ++++++++++++++++--- .../cloud/localstack/utils/LocalTestUtil.java | 19 ++++++++++--- 4 files changed, 50 insertions(+), 8 deletions(-) diff --git a/pom.xml b/pom.xml index 6683ebb..9a71167 100644 --- a/pom.xml +++ b/pom.xml @@ -187,6 +187,12 @@ ${aws.sdkv2.version} provided + + software.amazon.awssdk + lambda + ${aws.sdkv2.version} + provided + diff --git a/src/main/java/cloud/localstack/awssdkv2/TestUtils.java b/src/main/java/cloud/localstack/awssdkv2/TestUtils.java index 97bdf91..a5d1c36 100644 --- a/src/main/java/cloud/localstack/awssdkv2/TestUtils.java +++ b/src/main/java/cloud/localstack/awssdkv2/TestUtils.java @@ -2,6 +2,7 @@ import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient; +import software.amazon.awssdk.services.lambda.LambdaAsyncClient; import software.amazon.awssdk.utils.*; import software.amazon.awssdk.http.*; import software.amazon.awssdk.services.cloudwatch.*; @@ -58,6 +59,10 @@ public static CloudWatchAsyncClient getClientCloudWatchAsyncV2() { return wrapApiClientV2(CloudWatchAsyncClient.builder(), Localstack.INSTANCE.getEndpointCloudWatch()).build(); } + public static LambdaAsyncClient getClientLambdaAsyncV2() { + return wrapApiClientV2(LambdaAsyncClient.builder(), Localstack.INSTANCE.getEndpointCloudWatch()).build(); + } + public static T wrapApiClientV2(T builder, String endpointURL) { try { return (T) ((AwsClientBuilder)builder diff --git a/src/test/java/cloud/localstack/awssdkv2/BasicFeaturesSDKV2Test.java b/src/test/java/cloud/localstack/awssdkv2/BasicFeaturesSDKV2Test.java index a29cd94..d2d8657 100644 --- a/src/test/java/cloud/localstack/awssdkv2/BasicFeaturesSDKV2Test.java +++ b/src/test/java/cloud/localstack/awssdkv2/BasicFeaturesSDKV2Test.java @@ -2,9 +2,11 @@ import cloud.localstack.Constants; import cloud.localstack.LocalstackTestRunner; +import cloud.localstack.sample.LambdaHandler; +import cloud.localstack.utils.LocalTestUtil; + +import lombok.val; -import com.amazonaws.services.dynamodbv2.model.ListTablesResult; -import org.assertj.core.api.Assertions; import software.amazon.awssdk.core.SdkSystemSetting; import software.amazon.awssdk.services.cloudwatch.*; import software.amazon.awssdk.services.cloudwatch.model.*; @@ -12,6 +14,8 @@ import software.amazon.awssdk.services.dynamodb.model.*; import software.amazon.awssdk.services.kinesis.*; import software.amazon.awssdk.services.kinesis.model.*; +import software.amazon.awssdk.services.lambda.model.CreateFunctionRequest; +import software.amazon.awssdk.services.lambda.model.Runtime; import software.amazon.awssdk.services.s3.*; import software.amazon.awssdk.services.s3.model.*; import software.amazon.awssdk.services.secretsmanager.SecretsManagerAsyncClient; @@ -214,7 +218,7 @@ public void testCWMultipleDimentionsAndMetrics() throws Exception { .name("UNIQUE_PAGES"+i) .value("URLS"+i) .build()); - }; + } // Set an Instant object String time = ZonedDateTime.now( ZoneOffset.UTC ).format( DateTimeFormatter.ISO_INSTANT ); @@ -229,7 +233,7 @@ public void testCWMultipleDimentionsAndMetrics() throws Exception { .value(dataPoint) .timestamp(instant) .dimensions(awsDimensionList).build()); - }; + } PutMetricDataRequest request = PutMetricDataRequest.builder() .namespace("SITE/TRAFFIC") @@ -238,4 +242,20 @@ public void testCWMultipleDimentionsAndMetrics() throws Exception { PutMetricDataResponse response = clientCW.putMetricData(request).get(); Assert.assertNotNull(response); } + + @Test + public void testLambdaCreateListFunctions() throws Exception { + val functionName = "test-f-"+UUID.randomUUID().toString(); + val lambdaClient = TestUtils.getClientLambdaAsyncV2(); + val createFunctionRequest = CreateFunctionRequest.builder().functionName(functionName) + .runtime(Runtime.JAVA8) + .role("r1") + .code(LocalTestUtil.createFunctionCodeSDKV2(LambdaHandler.class)) + .handler(LambdaHandler.class.getName()).build(); + val response = lambdaClient.createFunction(createFunctionRequest).get(); + Assert.assertNotNull(response); + val functions = lambdaClient.listFunctions().get(); + val function = functions.functions().stream().filter(f -> f.functionName().equals(functionName)).findFirst().get(); + Assert.assertNotNull(function); + } } diff --git a/src/test/java/cloud/localstack/utils/LocalTestUtil.java b/src/test/java/cloud/localstack/utils/LocalTestUtil.java index 48967dc..dcb3171 100644 --- a/src/test/java/cloud/localstack/utils/LocalTestUtil.java +++ b/src/test/java/cloud/localstack/utils/LocalTestUtil.java @@ -10,10 +10,12 @@ import java.util.zip.ZipOutputStream; import com.amazonaws.services.lambda.runtime.events.SQSEvent; +import lombok.val; import org.apache.commons.io.IOUtils; import com.amazonaws.services.kinesis.model.Record; import com.amazonaws.services.lambda.model.FunctionCode; +import software.amazon.awssdk.core.SdkBytes; /** * Utility methods used for the LocalStack unit and integration tests. @@ -23,7 +25,18 @@ public class LocalTestUtil { public static FunctionCode createFunctionCode(Class clazz) throws Exception { - FunctionCode code = new FunctionCode(); + val code = new FunctionCode(); + code.setZipFile(createFunctionByteBuffer(clazz)); + return code; + } + + public static software.amazon.awssdk.services.lambda.model.FunctionCode createFunctionCodeSDKV2(Class clazz) throws Exception{ + val codeBuilder = software.amazon.awssdk.services.lambda.model.FunctionCode.builder(); + codeBuilder.zipFile(SdkBytes.fromByteBuffer(createFunctionByteBuffer(clazz))); + return codeBuilder.build(); + } + + private static ByteBuffer createFunctionByteBuffer(Class clazz) throws Exception{ ByteArrayOutputStream zipOut = new ByteArrayOutputStream(); ByteArrayOutputStream jarOut = new ByteArrayOutputStream(); // create zip file @@ -48,9 +61,7 @@ public static FunctionCode createFunctionCode(Class clazz) throws Exception { zipStream.closeEntry(); zipStream.close(); - code.setZipFile(ByteBuffer.wrap(zipOut.toByteArray())); - - return code; + return ByteBuffer.wrap(zipOut.toByteArray()); } private static void addClassToJar(Class clazz, JarOutputStream jarStream) throws IOException { From 7d0384107275757e7329c46b561842e25f581ae5 Mon Sep 17 00:00:00 2001 From: Vitor Carvalho <17650668+vitorfec@users.noreply.github.com> Date: Tue, 15 Jun 2021 13:31:59 +0100 Subject: [PATCH 2/2] Update TestUtils.java Fix Lambda endpoint --- src/main/java/cloud/localstack/awssdkv2/TestUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/cloud/localstack/awssdkv2/TestUtils.java b/src/main/java/cloud/localstack/awssdkv2/TestUtils.java index a5d1c36..cb698ea 100644 --- a/src/main/java/cloud/localstack/awssdkv2/TestUtils.java +++ b/src/main/java/cloud/localstack/awssdkv2/TestUtils.java @@ -60,7 +60,7 @@ public static CloudWatchAsyncClient getClientCloudWatchAsyncV2() { } public static LambdaAsyncClient getClientLambdaAsyncV2() { - return wrapApiClientV2(LambdaAsyncClient.builder(), Localstack.INSTANCE.getEndpointCloudWatch()).build(); + return wrapApiClientV2(LambdaAsyncClient.builder(), Localstack.INSTANCE.getEndpointLambda()).build(); } public static T wrapApiClientV2(T builder, String endpointURL) {