From e0ded23b4db37259e15d678727bc3779718b5e86 Mon Sep 17 00:00:00 2001 From: Justin Lee Date: Fri, 18 Oct 2019 19:46:14 -0400 Subject: [PATCH] introduce an optional maven plugin to update the sam config rename module to amazon-lambda-http --- .gitignore | 6 +- bom/deployment/pom.xml | 2 +- bom/runtime/pom.xml | 7 +- .../deployment/pom.xml | 12 +- .../deployment/AmazonLambdaHttpProcessor.java | 13 ++ extensions/amazon-lambda-http/maven/pom.xml | 41 ++++++ .../lambda/http/AmazonLambdaHttpMojo.java | 116 ++++++++++++++++ .../maven/src/main/resources/template.yaml | 19 +++ .../pom.xml | 5 +- .../runtime/pom.xml | 6 +- .../amazon/lambda/http/HttpHandler.java} | 54 +++++--- .../sam/deployment/AmazonSamProcessor.java | 88 ------------ .../quarkus/amazon/sam/AmazonSamConfig.java | 42 ------ extensions/pom.xml | 2 +- .../pom.xml | 11 +- .../quarkus/amazon/sam/GenerateConfigIT.java | 130 ++++++++++++++++++ .../resources/filtered/quarkus.properties | 0 .../configure-during-lifecycle/pom.xml | 89 ++++++++++++ .../properties.yaml | 29 ++++ .../io/quarkus/amazon/sam/maven/SamApp.java | 0 .../src/main/resources/application.properties | 2 + .../configure-existing-template/pom.xml | 2 +- .../io/quarkus/amazon/sam/maven/SamApp.java | 0 .../src/main/resources/application.properties | 0 .../configure-existing-template/template.yaml | 0 .../projects/configure-named-template/pom.xml | 2 +- .../io/quarkus/amazon/sam/maven/SamApp.java | 0 .../src/main/resources/application.properties | 0 .../projects/configure-new-template/pom.xml | 2 +- .../io/quarkus/amazon/sam/maven/SamApp.java | 7 + .../src/main/resources/application.properties | 0 .../pom.xml | 76 ++++++++++ .../properties.yaml | 29 ++++ .../io/quarkus/amazon/sam/maven/SamApp.java | 7 + .../src/main/resources/application.properties | 2 + .../quarkus/amazon/sam/GenerateSamConfig.java | 106 -------------- integration-tests/pom.xml | 2 +- .../maven/it/verifier/RunningInvoker.java | 8 ++ 38 files changed, 628 insertions(+), 289 deletions(-) rename extensions/{amazon-sam => amazon-lambda-http}/deployment/pom.xml (80%) create mode 100644 extensions/amazon-lambda-http/deployment/src/main/java/io/quarkus/amazon/lambda.http/deployment/AmazonLambdaHttpProcessor.java create mode 100644 extensions/amazon-lambda-http/maven/pom.xml create mode 100644 extensions/amazon-lambda-http/maven/src/main/java/io/quarkus/amazon/lambda/http/AmazonLambdaHttpMojo.java create mode 100644 extensions/amazon-lambda-http/maven/src/main/resources/template.yaml rename extensions/{amazon-sam => amazon-lambda-http}/pom.xml (82%) rename extensions/{amazon-sam => amazon-lambda-http}/runtime/pom.xml (92%) rename extensions/{amazon-sam/runtime/src/main/java/io/quarkus/amazon/sam/SamHandler.java => amazon-lambda-http/runtime/src/main/java/io/quarkus/amazon/lambda/http/HttpHandler.java} (87%) delete mode 100644 extensions/amazon-sam/deployment/src/main/java/io/quarkus/amazon/sam/deployment/AmazonSamProcessor.java delete mode 100644 extensions/amazon-sam/runtime/src/main/java/io/quarkus/amazon/sam/AmazonSamConfig.java rename integration-tests/{amazon-sam => amazon-lambda-http}/pom.xml (92%) create mode 100644 integration-tests/amazon-lambda-http/src/test/java/io/quarkus/amazon/sam/GenerateConfigIT.java rename integration-tests/{amazon-sam => amazon-lambda-http}/src/test/resources/filtered/quarkus.properties (100%) create mode 100644 integration-tests/amazon-lambda-http/src/test/resources/projects/configure-during-lifecycle/pom.xml create mode 100644 integration-tests/amazon-lambda-http/src/test/resources/projects/configure-during-lifecycle/properties.yaml rename integration-tests/{amazon-sam/src/test/resources/projects/configure-existing-template => amazon-lambda-http/src/test/resources/projects/configure-during-lifecycle}/src/main/java/io/quarkus/amazon/sam/maven/SamApp.java (100%) create mode 100644 integration-tests/amazon-lambda-http/src/test/resources/projects/configure-during-lifecycle/src/main/resources/application.properties rename integration-tests/{amazon-sam => amazon-lambda-http}/src/test/resources/projects/configure-existing-template/pom.xml (97%) rename integration-tests/{amazon-sam/src/test/resources/projects/configure-named-template => amazon-lambda-http/src/test/resources/projects/configure-existing-template}/src/main/java/io/quarkus/amazon/sam/maven/SamApp.java (100%) rename integration-tests/{amazon-sam => amazon-lambda-http}/src/test/resources/projects/configure-existing-template/src/main/resources/application.properties (100%) rename integration-tests/{amazon-sam => amazon-lambda-http}/src/test/resources/projects/configure-existing-template/template.yaml (100%) rename integration-tests/{amazon-sam => amazon-lambda-http}/src/test/resources/projects/configure-named-template/pom.xml (97%) rename integration-tests/{amazon-sam/src/test/resources/projects/configure-new-template => amazon-lambda-http/src/test/resources/projects/configure-named-template}/src/main/java/io/quarkus/amazon/sam/maven/SamApp.java (100%) rename integration-tests/{amazon-sam => amazon-lambda-http}/src/test/resources/projects/configure-named-template/src/main/resources/application.properties (100%) rename integration-tests/{amazon-sam => amazon-lambda-http}/src/test/resources/projects/configure-new-template/pom.xml (97%) create mode 100644 integration-tests/amazon-lambda-http/src/test/resources/projects/configure-new-template/src/main/java/io/quarkus/amazon/sam/maven/SamApp.java rename integration-tests/{amazon-sam => amazon-lambda-http}/src/test/resources/projects/configure-new-template/src/main/resources/application.properties (100%) create mode 100644 integration-tests/amazon-lambda-http/src/test/resources/projects/configure-with-application-properties/pom.xml create mode 100644 integration-tests/amazon-lambda-http/src/test/resources/projects/configure-with-application-properties/properties.yaml create mode 100644 integration-tests/amazon-lambda-http/src/test/resources/projects/configure-with-application-properties/src/main/java/io/quarkus/amazon/sam/maven/SamApp.java create mode 100644 integration-tests/amazon-lambda-http/src/test/resources/projects/configure-with-application-properties/src/main/resources/application.properties delete mode 100644 integration-tests/amazon-sam/src/test/java/io/quarkus/amazon/sam/GenerateSamConfig.java diff --git a/.gitignore b/.gitignore index 6f2e3e6f9..f944d4575 100644 --- a/.gitignore +++ b/.gitignore @@ -31,8 +31,4 @@ build docker/distroless/bazel-* /.apt_generated_tests/ quarkus.log -replay_*.log - - - -/docs/src/main/asciidoc/generated/ +replay_*.logß \ No newline at end of file diff --git a/bom/deployment/pom.xml b/bom/deployment/pom.xml index cc5da5679..2dec575a9 100644 --- a/bom/deployment/pom.xml +++ b/bom/deployment/pom.xml @@ -408,7 +408,7 @@ io.quarkus - quarkus-amazon-sam-deployment + quarkus-amazon-lambda-http-deployment ${project.version} diff --git a/bom/runtime/pom.xml b/bom/runtime/pom.xml index 6b90ec162..eac40c440 100644 --- a/bom/runtime/pom.xml +++ b/bom/runtime/pom.xml @@ -622,12 +622,7 @@ io.quarkus - quarkus-amazon-lambda-resteasy - ${project.version} - - - io.quarkus - quarkus-amazon-sam + quarkus-amazon-lambda-http ${project.version} diff --git a/extensions/amazon-sam/deployment/pom.xml b/extensions/amazon-lambda-http/deployment/pom.xml similarity index 80% rename from extensions/amazon-sam/deployment/pom.xml rename to extensions/amazon-lambda-http/deployment/pom.xml index 4add8e856..ed4bbea70 100644 --- a/extensions/amazon-sam/deployment/pom.xml +++ b/extensions/amazon-lambda-http/deployment/pom.xml @@ -6,13 +6,13 @@ io.quarkus - quarkus-amazon-sam-parent + quarkus-amazon-lambda-http-parent 999-SNAPSHOT ../pom.xml - quarkus-amazon-sam-deployment - Quarkus - Amazon SAM - Deployment + quarkus-amazon-lambda-http-deployment + Quarkus - Amazon Lambda HTTP - Deployment @@ -29,11 +29,7 @@ io.quarkus - quarkus-amazon-sam - - - com.fasterxml.jackson.dataformat - jackson-dataformat-yaml + quarkus-amazon-lambda-http diff --git a/extensions/amazon-lambda-http/deployment/src/main/java/io/quarkus/amazon/lambda.http/deployment/AmazonLambdaHttpProcessor.java b/extensions/amazon-lambda-http/deployment/src/main/java/io/quarkus/amazon/lambda.http/deployment/AmazonLambdaHttpProcessor.java new file mode 100644 index 000000000..c378b451a --- /dev/null +++ b/extensions/amazon-lambda-http/deployment/src/main/java/io/quarkus/amazon/lambda.http/deployment/AmazonLambdaHttpProcessor.java @@ -0,0 +1,13 @@ +package io.quarkus.amazon.lambda.http.deployment; + +import io.quarkus.deployment.annotations.BuildStep; +import io.quarkus.deployment.builditem.LaunchModeBuildItem; +import io.quarkus.runtime.LaunchMode; +import io.quarkus.vertx.http.deployment.RequireVirtualHttpBuildItem; + +public class AmazonLambdaHttpProcessor { + @BuildStep + public RequireVirtualHttpBuildItem requestVirtualHttp(LaunchModeBuildItem launchMode) { + return launchMode.getLaunchMode() == LaunchMode.NORMAL ? RequireVirtualHttpBuildItem.MARKER : null; + } +} diff --git a/extensions/amazon-lambda-http/maven/pom.xml b/extensions/amazon-lambda-http/maven/pom.xml new file mode 100644 index 000000000..b79d76159 --- /dev/null +++ b/extensions/amazon-lambda-http/maven/pom.xml @@ -0,0 +1,41 @@ + + + 4.0.0 + + + io.quarkus + quarkus-amazon-lambda-http-parent + 999-SNAPSHOT + + + quarkus-amazon-lambda-http-maven + maven-plugin + + + + io.quarkus + quarkus-amazon-lambda-http + + + com.fasterxml.jackson.dataformat + jackson-dataformat-yaml + + + org.apache.maven + maven-plugin-api + provided + + + org.apache.maven.plugin-tools + maven-plugin-annotations + provided + + + org.apache.maven + maven-core + provided + + + \ No newline at end of file diff --git a/extensions/amazon-lambda-http/maven/src/main/java/io/quarkus/amazon/lambda/http/AmazonLambdaHttpMojo.java b/extensions/amazon-lambda-http/maven/src/main/java/io/quarkus/amazon/lambda/http/AmazonLambdaHttpMojo.java new file mode 100644 index 000000000..10e44e155 --- /dev/null +++ b/extensions/amazon-lambda-http/maven/src/main/java/io/quarkus/amazon/lambda/http/AmazonLambdaHttpMojo.java @@ -0,0 +1,116 @@ +package io.quarkus.amazon.lambda.http; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Properties; + +import org.apache.maven.plugin.AbstractMojo; +import org.apache.maven.plugins.annotations.Mojo; +import org.apache.maven.plugins.annotations.Parameter; +import org.apache.maven.project.MavenProject; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; + +@Mojo(name = "configure-aws-lambda", requiresProject = false) +public class AmazonLambdaHttpMojo extends AbstractMojo { + public static final String SAM_HANDLER = HttpHandler.class.getName() + "::handleRequest"; + public static final String SAM_RUNTIME = "java8"; + public static final String SAM_TEMPLATE = "quarkus.amazon-lambda-http.template"; + public static final String SAM_RESOURCE = "quarkus.amazon-lambda-http.resource-name"; + public static final String DEFAULT_TEMPLATE = "template.yaml"; + public static final String DEFAULT_RESOURCE = "Quarkus"; + + @Parameter(defaultValue = "${project}") + protected MavenProject project; + + @Parameter(property = "sam.template", defaultValue = DEFAULT_TEMPLATE) + private String templateFile; + + @Parameter(property = "sam.resource", defaultValue = DEFAULT_RESOURCE) + private String resourceName; + + @SuppressWarnings("unchecked") + @Override + public void execute() { + try { + System.out.println("******************* AmazonLambdaHttpMojo.execute"); + final ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); + Properties application = new Properties(); + File appProperties = new File("src/main/resources/application.properties"); + if (appProperties.exists()) { + try (InputStream stream = new FileInputStream(appProperties)) { + application.load(stream); + templateFile = apply(application, templateFile, SAM_TEMPLATE, DEFAULT_TEMPLATE); + + resourceName = apply(application, resourceName, SAM_RESOURCE, DEFAULT_RESOURCE); + } + } + File configFile = new File(templateFile); + System.out.println("********************* configFile = " + configFile.getAbsolutePath()); + + Map template; + Map resource; + if (!configFile.exists()) { + try (InputStream inputStream = getClass().getClassLoader().getResourceAsStream("template.yaml")) { + template = mapper.readValue(inputStream, LinkedHashMap.class); + Map resources = get(template, "Resources"); + + resource = get(resources, "Quarkus"); + resources.remove("Quarkus"); + + resources.put(resourceName, resource); + } + } else { + try (InputStream inputStream = new FileInputStream(configFile)) { + template = mapper.readValue(inputStream, LinkedHashMap.class); + Map resources = get(template, "Resources"); + + resource = get(resources, resourceName); + + if (resource == null && resources.size() == 1) { + resource = (Map) resources.entrySet().iterator().next().getValue(); + } + } + } + if (resource != null) { + Map properties = get(resource, "Properties"); + properties.put("Handler", SAM_HANDLER); + properties.put("Runtime", SAM_RUNTIME); + mapper.writer().withDefaultPrettyPrinter().writeValue(configFile, template); + } else { + throw new RuntimeException("Could not find the resource to update"); + } + + System.out.println("********************* template = " + template); + System.out.println("********************* new File(\".\").getAbsolutePath() = " + + new File(".").getAbsolutePath()); + } catch (IOException e) { + throw new RuntimeException(e.getMessage(), e); + } + } + + private String apply(Properties properties, String field, String key, String defaultValue) { + String value = properties.getProperty(key); + if (value != null && field.equals(defaultValue)) { + field = value; + } + return field; + } + + @SuppressWarnings("unchecked") + public static T get(final Map template, final String... keys) { + Map map = template; + for (int i = 0; i < keys.length - 1; i++) { + map = (Map) map.get(keys[i]); + if (map == null) { + throw new IllegalArgumentException("No object found with the key: " + keys[i]); + } + } + return (T) map.get(keys[keys.length - 1]); + } +} diff --git a/extensions/amazon-lambda-http/maven/src/main/resources/template.yaml b/extensions/amazon-lambda-http/maven/src/main/resources/template.yaml new file mode 100644 index 000000000..be073cd61 --- /dev/null +++ b/extensions/amazon-lambda-http/maven/src/main/resources/template.yaml @@ -0,0 +1,19 @@ +--- +AWSTemplateFormatVersion: "2010-09-09" +Transform: "AWS::Serverless-2016-10-31" +Globals: + Function: + Timeout: 5 +Resources: + Quarkus: + Type: "AWS::Serverless::Function" + Properties: + Handler: io.quarkus.amazon.lambda.http.HttpHandler::handleRequest+somethingelse + Runtime: "java8" + Policies: "AWSLambdaBasicExecutionRole" + Events: + GetResource: + Type: "Api" + Properties: + Path: "/{proxy+}" + Method: "any" diff --git a/extensions/amazon-sam/pom.xml b/extensions/amazon-lambda-http/pom.xml similarity index 82% rename from extensions/amazon-sam/pom.xml rename to extensions/amazon-lambda-http/pom.xml index 20e543830..a44b79ebe 100644 --- a/extensions/amazon-sam/pom.xml +++ b/extensions/amazon-lambda-http/pom.xml @@ -11,13 +11,14 @@ ../../build-parent/pom.xml - quarkus-amazon-sam-parent - Quarkus - Amazon SAM + quarkus-amazon-lambda-http-parent + Quarkus - Amazon Lambda HTTP pom runtime deployment + maven \ No newline at end of file diff --git a/extensions/amazon-sam/runtime/pom.xml b/extensions/amazon-lambda-http/runtime/pom.xml similarity index 92% rename from extensions/amazon-sam/runtime/pom.xml rename to extensions/amazon-lambda-http/runtime/pom.xml index fc111c5f1..bcc7bd34e 100644 --- a/extensions/amazon-sam/runtime/pom.xml +++ b/extensions/amazon-lambda-http/runtime/pom.xml @@ -6,13 +6,13 @@ io.quarkus - quarkus-amazon-sam-parent + quarkus-amazon-lambda-http-parent 999-SNAPSHOT ../pom.xml - quarkus-amazon-sam - Quarkus - Amazon SAM - Runtime + quarkus-amazon-lambda-http + Quarkus - Amazon Lambda HTTP - Runtime diff --git a/extensions/amazon-sam/runtime/src/main/java/io/quarkus/amazon/sam/SamHandler.java b/extensions/amazon-lambda-http/runtime/src/main/java/io/quarkus/amazon/lambda/http/HttpHandler.java similarity index 87% rename from extensions/amazon-sam/runtime/src/main/java/io/quarkus/amazon/sam/SamHandler.java rename to extensions/amazon-lambda-http/runtime/src/main/java/io/quarkus/amazon/lambda/http/HttpHandler.java index 4085da0f0..dc99c4108 100644 --- a/extensions/amazon-sam/runtime/src/main/java/io/quarkus/amazon/sam/SamHandler.java +++ b/extensions/amazon-lambda-http/runtime/src/main/java/io/quarkus/amazon/lambda/http/HttpHandler.java @@ -1,4 +1,21 @@ -package io.quarkus.amazon.sam; +package io.quarkus.amazon.lambda.http; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +import javax.ws.rs.core.HttpHeaders; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.amazonaws.serverless.proxy.AwsProxyExceptionHandler; import com.amazonaws.serverless.proxy.internal.SecurityUtils; @@ -12,6 +29,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectReader; import com.fasterxml.jackson.databind.ObjectWriter; import com.fasterxml.jackson.module.afterburner.AfterburnerModule; + import io.netty.buffer.Unpooled; import io.netty.handler.codec.http.DefaultHttpRequest; import io.netty.handler.codec.http.DefaultLastHttpContent; @@ -24,25 +42,10 @@ import io.netty.util.ReferenceCountUtil; import io.quarkus.netty.runtime.virtual.VirtualClientConnection; import io.quarkus.runtime.Application; import io.quarkus.vertx.http.runtime.VertxHttpRecorder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.ws.rs.core.HttpHeaders; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.PrintWriter; -import java.io.StringWriter; -import java.nio.charset.StandardCharsets; -import java.util.Base64; -import java.util.List; -import java.util.Map; -import java.util.concurrent.TimeUnit; @SuppressWarnings("unused") -public class SamHandler implements RequestStreamHandler { - private static final Logger LOG = LoggerFactory.getLogger(SamHandler.class); +public class HttpHandler implements RequestStreamHandler { + private static final Logger LOG = LoggerFactory.getLogger(HttpHandler.class); private static ObjectMapper objectMapper = new ObjectMapper(); private ObjectReader objectReader = objectMapper.readerFor(AwsProxyRequest.class); @@ -137,7 +140,20 @@ public class SamHandler implements RequestStreamHandler { } } if (msg instanceof LastHttpContent) { - response.setBody(new String(baos.toByteArray(), StandardCharsets.UTF_8)); + String contentType = response.getMultiValueHeaders().getFirst("Content-Type"); + //TODO: big hack, we should handle charset properly, base64 is always safe though + boolean requiresEncoding = true; + if (contentType != null) { + String ct = contentType.toLowerCase(); + requiresEncoding = !ct.contains("charset=utf-8") && !ct.contains("json"); + } + if (requiresEncoding) { + response.setBase64Encoded(true); + response.setBody(Base64.getMimeEncoder().encodeToString(baos.toByteArray())); + } else { + response.setBase64Encoded(false); + response.setBody(new String(baos.toByteArray(), StandardCharsets.UTF_8)); + } return response; } } finally { diff --git a/extensions/amazon-sam/deployment/src/main/java/io/quarkus/amazon/sam/deployment/AmazonSamProcessor.java b/extensions/amazon-sam/deployment/src/main/java/io/quarkus/amazon/sam/deployment/AmazonSamProcessor.java deleted file mode 100644 index ba2e8227d..000000000 --- a/extensions/amazon-sam/deployment/src/main/java/io/quarkus/amazon/sam/deployment/AmazonSamProcessor.java +++ /dev/null @@ -1,88 +0,0 @@ -package io.quarkus.amazon.sam.deployment; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.LinkedHashMap; -import java.util.Map; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; - -import io.quarkus.amazon.sam.AmazonSamConfig; -import io.quarkus.deployment.annotations.BuildStep; -import io.quarkus.deployment.builditem.LaunchModeBuildItem; -import io.quarkus.runtime.LaunchMode; -import io.quarkus.vertx.http.deployment.RequireVirtualHttpBuildItem; - -public class AmazonSamProcessor { - - public static final String SAM_HANDLER = "io.quarkus.amazon.lambda.resteasy.runtime.container.StreamLambdaHandler::handleRequest"; - public static final String SAM_RUNTIME = "java8"; - - AmazonSamConfig config; - - @BuildStep - public RequireVirtualHttpBuildItem requestVirtualHttp(LaunchModeBuildItem launchMode) { - return launchMode.getLaunchMode() == LaunchMode.NORMAL ? RequireVirtualHttpBuildItem.MARKER : null; - } - - @SuppressWarnings("unchecked") - @BuildStep - void sam() { - if (config.updateConfig) { - try { - File configFile = new File(config.template); - if (!configFile.exists()) { - try (InputStream inputStream = getClass().getClassLoader().getResourceAsStream("template.yaml")) { - ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); - Map template = mapper.readValue(inputStream, LinkedHashMap.class); - Map resources = walk(template, "Resources"); - - Map resource = walk(resources, "QuarkusSam"); - resources.put(config.resourceName, resource); - resources.remove("QuarkusSam"); - - mapper.writer().withDefaultPrettyPrinter().writeValue(configFile, template); - } - } else { - try (InputStream inputStream = new FileInputStream(configFile)) { - ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); - Map template = mapper.readValue(inputStream, LinkedHashMap.class); - Map resources = walk(template, "Resources"); - - Map resource = walk(resources, config.resourceName); - - if (resource == null && resources.size() == 1) { - resource = (Map) resources.entrySet().iterator().next().getValue(); - } - if (resource != null) { - Map properties = walk(resource, "Properties"); - properties.put("Handler", SAM_HANDLER); - properties.put("Runtime", SAM_RUNTIME); - } - - mapper.writer().withDefaultPrettyPrinter().writeValue(configFile, template); - } - - } - } catch (IOException e) { - throw new RuntimeException(e.getMessage(), e); - } - } - } - - @SuppressWarnings("unchecked") - public static T walk(final Map template, final String... keys) { - Map map = template; - for (int i = 0; i < keys.length - 1; i++) { - map = (Map) map.get(keys[i]); - if (map == null) { - throw new IllegalArgumentException("No object found with the key: " + keys[i]); - } - } - return (T) map.get(keys[keys.length - 1]); - } - -} diff --git a/extensions/amazon-sam/runtime/src/main/java/io/quarkus/amazon/sam/AmazonSamConfig.java b/extensions/amazon-sam/runtime/src/main/java/io/quarkus/amazon/sam/AmazonSamConfig.java deleted file mode 100644 index 39e79e17a..000000000 --- a/extensions/amazon-sam/runtime/src/main/java/io/quarkus/amazon/sam/AmazonSamConfig.java +++ /dev/null @@ -1,42 +0,0 @@ -package io.quarkus.amazon.sam; - -import io.quarkus.runtime.annotations.ConfigItem; -import io.quarkus.runtime.annotations.ConfigPhase; -import io.quarkus.runtime.annotations.ConfigRoot; - -@ConfigRoot(name = "amazon-sam", phase = ConfigPhase.BUILD_AND_RUN_TIME_FIXED) -public class AmazonSamConfig { - - /** - * The template file to create or update - */ - @ConfigItem(name = "sam-template", defaultValue = "template.yaml") - public String template; - - /** - * Indicates if we are in debug mode. - */ - @ConfigItem(defaultValue = "false") - public boolean debug; - - /** - * Indicates if we are in debug mode. - */ - @ConfigItem(defaultValue = "false") - public boolean updateConfig; - - /** - * The name of the SAM resource - */ - @ConfigItem(name = "resource-name") - public String resourceName; - - @Override - public String toString() { - return "AmazonSamConfig{" + - "debug=" + debug + - ", resourceName='" + resourceName + '\'' + - ", template='" + template + '\'' + - '}'; - } -} \ No newline at end of file diff --git a/extensions/pom.xml b/extensions/pom.xml index 1bd9c1c63..9b9039bf4 100644 --- a/extensions/pom.xml +++ b/extensions/pom.xml @@ -105,7 +105,7 @@ amazon-lambda - amazon-sam + amazon-lambda-http amazon-dynamodb azure-functions-http diff --git a/integration-tests/amazon-sam/pom.xml b/integration-tests/amazon-lambda-http/pom.xml similarity index 92% rename from integration-tests/amazon-sam/pom.xml rename to integration-tests/amazon-lambda-http/pom.xml index 8f367719e..6aedb6e44 100644 --- a/integration-tests/amazon-sam/pom.xml +++ b/integration-tests/amazon-lambda-http/pom.xml @@ -11,17 +11,19 @@ 4.0.0 - quarkus-integration-test-amazon-sam + Quarkus - Integration Tests - Amazon Lambda HTTP + quarkus-integration-test-amazon-lambda-http io.quarkus - quarkus-amazon-sam + quarkus-amazon-lambda-http-deployment + test - io.quarkus - quarkus-amazon-sam-deployment + quarkus-amazon-lambda-http-maven + ${project.version} test @@ -115,6 +117,7 @@ integration-test verify + compile diff --git a/integration-tests/amazon-lambda-http/src/test/java/io/quarkus/amazon/sam/GenerateConfigIT.java b/integration-tests/amazon-lambda-http/src/test/java/io/quarkus/amazon/sam/GenerateConfigIT.java new file mode 100644 index 000000000..eb5289ae0 --- /dev/null +++ b/integration-tests/amazon-lambda-http/src/test/java/io/quarkus/amazon/sam/GenerateConfigIT.java @@ -0,0 +1,130 @@ +package io.quarkus.amazon.sam; + +import static io.quarkus.amazon.lambda.http.AmazonLambdaHttpMojo.SAM_HANDLER; +import static io.quarkus.amazon.lambda.http.AmazonLambdaHttpMojo.SAM_RUNTIME; +import static java.util.Collections.emptyMap; +import static java.util.Collections.singletonList; +import static org.assertj.core.api.Assertions.assertThat; + +import java.io.File; +import java.io.IOException; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Properties; + +import org.apache.maven.shared.invoker.MavenInvocationException; +import org.junit.Assert; +import org.junit.jupiter.api.Test; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; + +import io.quarkus.amazon.lambda.http.AmazonLambdaHttpMojo; +import io.quarkus.maven.it.MojoTestBase; +import io.quarkus.maven.it.verifier.MavenProcessInvocationResult; +import io.quarkus.maven.it.verifier.RunningInvoker; + +public class GenerateConfigIT extends MojoTestBase { + private File testDir; + private String template = "properties.yaml"; + private String resource = "Quarkus"; + + // @Test + public void testConfigureWithNoTemplate() throws MavenInvocationException, IOException, InterruptedException { + testDir = initProject("projects/configure-new-template"); + template = "sam.yaml"; + resource = "new-template"; + + invoke(); + } + + // @Test + public void testConfigureWithConfiguredName() throws MavenInvocationException, IOException, InterruptedException { + testDir = initProject("projects/configure-named-template"); + resource = "named-template"; + + invoke(); + } + + // @Test + public void testConfigureWithExistingTemplate() throws MavenInvocationException, IOException, InterruptedException { + testDir = initProject("projects/configure-existing-template"); + resource = "ThumbnailFunction"; + + invoke(); + } + + // @Test + @SuppressWarnings("unchecked") + public void testConfigureWithApplicationProperties() throws MavenInvocationException, IOException, InterruptedException { + testDir = initProject("projects/configure-with-application-properties"); + template = null; + resource = null; + + invoke(); + Map content = new ObjectMapper(new YAMLFactory()) + .readValue(new File(testDir, "properties.yaml"), LinkedHashMap.class); + + Map properties = AmazonLambdaHttpMojo.get(content, "Resources", "properties-resource", "Properties"); + Assert.assertEquals(SAM_HANDLER, properties.get("Handler")); + Assert.assertEquals(SAM_RUNTIME, properties.get("Runtime")); + + } + + @Test + public void testConfigureDuringLifecycle() throws MavenInvocationException, IOException, InterruptedException { + testDir = initProject("projects/configure-during-lifecycle"); + + compile(); + } + + @SuppressWarnings("unchecked") + private void invoke() throws MavenInvocationException, IOException, InterruptedException { + Properties mavenProperties = new Properties(); + mavenProperties.put("projectGroupId", "org.acme"); + mavenProperties.put("projectArtifactId", "acme"); + mavenProperties.put("projectVersion", "1.0-SNAPSHOT"); + if (template != null) + mavenProperties.put("sam.template", template); + if (resource != null) + mavenProperties.put("sam.resource", resource); + + RunningInvoker running = new RunningInvoker(testDir, false); + final MavenProcessInvocationResult result = running.execute( + singletonList("io.quarkus:quarkus-amazon-lambda-http-maven:configure-aws-lambda"), emptyMap(), + mavenProperties); + + assertThat(result.getProcess().waitFor()).isEqualTo(0); + + if (template != null && resource != null) { + Map content = new ObjectMapper(new YAMLFactory()) + .readValue(new File(testDir, template), LinkedHashMap.class); + + Map properties = AmazonLambdaHttpMojo.get(content, "Resources", resource, "Properties"); + Assert.assertEquals(SAM_HANDLER, properties.get("Handler")); + Assert.assertEquals(SAM_RUNTIME, properties.get("Runtime")); + } + } + + @SuppressWarnings("unchecked") + private void compile() throws MavenInvocationException, IOException, InterruptedException { + Properties mavenProperties = new Properties(); + mavenProperties.put("projectGroupId", "org.acme"); + mavenProperties.put("projectArtifactId", "acme"); + mavenProperties.put("projectVersion", "1.0-SNAPSHOT"); + + RunningInvoker running = new RunningInvoker(testDir, false); + final MavenProcessInvocationResult result = running.execute(singletonList("compile"), emptyMap(), + mavenProperties); + + assertThat(result.getProcess().waitFor()).isEqualTo(0); + + Map content = new ObjectMapper(new YAMLFactory()) + .readValue(new File(testDir, "properties.yaml"), LinkedHashMap.class); + System.out.println("********************* content = " + content); + + Map properties = AmazonLambdaHttpMojo.get(content, "Resources", "properties-resource", "Properties"); + Assert.assertEquals(SAM_HANDLER, properties.get("Handler")); + Assert.assertEquals(SAM_RUNTIME, properties.get("Runtime")); + } +} diff --git a/integration-tests/amazon-sam/src/test/resources/filtered/quarkus.properties b/integration-tests/amazon-lambda-http/src/test/resources/filtered/quarkus.properties similarity index 100% rename from integration-tests/amazon-sam/src/test/resources/filtered/quarkus.properties rename to integration-tests/amazon-lambda-http/src/test/resources/filtered/quarkus.properties diff --git a/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-during-lifecycle/pom.xml b/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-during-lifecycle/pom.xml new file mode 100644 index 000000000..4e2946db9 --- /dev/null +++ b/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-during-lifecycle/pom.xml @@ -0,0 +1,89 @@ + + + 4.0.0 + org.acme + existing-template + 0.1-SNAPSHOT + jar + + + + + @project.groupId@ + quarkus-bom + ${quarkus.version} + pom + import + + + + + + + + maven-compiler-plugin + 3.8.0 + + 1.8 + 1.8 + + + + @project.groupId@ + quarkus-maven-plugin + ${quarkus.version} + + + + build + + + target/classes/ + + + + + + @project.groupId@ + quarkus-amazon-lambda-http-maven + ${quarkus.version} + + + + configure-aws-lambda + + compile + + + + + + + + UTF-8 + 999-SNAPSHOT + + + + + @project.groupId@ + quarkus-amazon-lambda-http + + + @project.groupId@ + quarkus-jsonb + + + @project.groupId@ + quarkus-jaxb + + + + junit + junit + 4.12 + test + + + diff --git a/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-during-lifecycle/properties.yaml b/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-during-lifecycle/properties.yaml new file mode 100644 index 000000000..e229ca0a5 --- /dev/null +++ b/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-during-lifecycle/properties.yaml @@ -0,0 +1,29 @@ +Transform: 'AWS::Serverless-2016-10-31' +Resources: + + properties-resource: + # This resource creates a Lambda function. + Type: 'AWS::Serverless::Function' + + Properties: + + # This function uses the Nodejs v6.10 runtime. + Runtime: nodejs6.10 + + # This is the Lambda function's handler. + Handler: index.handler + + # The location of the Lambda function code. + CodeUri: ./src + + # Event sources to attach to this function. In this case, we are attaching + # one API Gateway endpoint to the Lambda function. The function is + # called when a HTTP request is made to the API Gateway endpoint. + Events: + + ThumbnailApi: + # Define an API Gateway endpoint that responds to HTTP GET at /thumbnail + Type: Api + Properties: + Path: /thumbnail + Method: GET diff --git a/integration-tests/amazon-sam/src/test/resources/projects/configure-existing-template/src/main/java/io/quarkus/amazon/sam/maven/SamApp.java b/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-during-lifecycle/src/main/java/io/quarkus/amazon/sam/maven/SamApp.java similarity index 100% rename from integration-tests/amazon-sam/src/test/resources/projects/configure-existing-template/src/main/java/io/quarkus/amazon/sam/maven/SamApp.java rename to integration-tests/amazon-lambda-http/src/test/resources/projects/configure-during-lifecycle/src/main/java/io/quarkus/amazon/sam/maven/SamApp.java diff --git a/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-during-lifecycle/src/main/resources/application.properties b/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-during-lifecycle/src/main/resources/application.properties new file mode 100644 index 000000000..7a3000dfb --- /dev/null +++ b/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-during-lifecycle/src/main/resources/application.properties @@ -0,0 +1,2 @@ +quarkus.amazon-lambda-http.resource-name=properties-resource +quarkus.amazon-lambda-http.template=properties.yaml \ No newline at end of file diff --git a/integration-tests/amazon-sam/src/test/resources/projects/configure-existing-template/pom.xml b/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-existing-template/pom.xml similarity index 97% rename from integration-tests/amazon-sam/src/test/resources/projects/configure-existing-template/pom.xml rename to integration-tests/amazon-lambda-http/src/test/resources/projects/configure-existing-template/pom.xml index d910829ec..9db81a775 100644 --- a/integration-tests/amazon-sam/src/test/resources/projects/configure-existing-template/pom.xml +++ b/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-existing-template/pom.xml @@ -55,7 +55,7 @@ @project.groupId@ - quarkus-amazon-sam + quarkus-amazon-lambda-http @project.groupId@ diff --git a/integration-tests/amazon-sam/src/test/resources/projects/configure-named-template/src/main/java/io/quarkus/amazon/sam/maven/SamApp.java b/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-existing-template/src/main/java/io/quarkus/amazon/sam/maven/SamApp.java similarity index 100% rename from integration-tests/amazon-sam/src/test/resources/projects/configure-named-template/src/main/java/io/quarkus/amazon/sam/maven/SamApp.java rename to integration-tests/amazon-lambda-http/src/test/resources/projects/configure-existing-template/src/main/java/io/quarkus/amazon/sam/maven/SamApp.java diff --git a/integration-tests/amazon-sam/src/test/resources/projects/configure-existing-template/src/main/resources/application.properties b/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-existing-template/src/main/resources/application.properties similarity index 100% rename from integration-tests/amazon-sam/src/test/resources/projects/configure-existing-template/src/main/resources/application.properties rename to integration-tests/amazon-lambda-http/src/test/resources/projects/configure-existing-template/src/main/resources/application.properties diff --git a/integration-tests/amazon-sam/src/test/resources/projects/configure-existing-template/template.yaml b/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-existing-template/template.yaml similarity index 100% rename from integration-tests/amazon-sam/src/test/resources/projects/configure-existing-template/template.yaml rename to integration-tests/amazon-lambda-http/src/test/resources/projects/configure-existing-template/template.yaml diff --git a/integration-tests/amazon-sam/src/test/resources/projects/configure-named-template/pom.xml b/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-named-template/pom.xml similarity index 97% rename from integration-tests/amazon-sam/src/test/resources/projects/configure-named-template/pom.xml rename to integration-tests/amazon-lambda-http/src/test/resources/projects/configure-named-template/pom.xml index d8e1d6c3c..91708f8a3 100644 --- a/integration-tests/amazon-sam/src/test/resources/projects/configure-named-template/pom.xml +++ b/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-named-template/pom.xml @@ -56,7 +56,7 @@ @project.groupId@ - quarkus-amazon-sam + quarkus-amazon-lambda-http @project.groupId@ diff --git a/integration-tests/amazon-sam/src/test/resources/projects/configure-new-template/src/main/java/io/quarkus/amazon/sam/maven/SamApp.java b/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-named-template/src/main/java/io/quarkus/amazon/sam/maven/SamApp.java similarity index 100% rename from integration-tests/amazon-sam/src/test/resources/projects/configure-new-template/src/main/java/io/quarkus/amazon/sam/maven/SamApp.java rename to integration-tests/amazon-lambda-http/src/test/resources/projects/configure-named-template/src/main/java/io/quarkus/amazon/sam/maven/SamApp.java diff --git a/integration-tests/amazon-sam/src/test/resources/projects/configure-named-template/src/main/resources/application.properties b/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-named-template/src/main/resources/application.properties similarity index 100% rename from integration-tests/amazon-sam/src/test/resources/projects/configure-named-template/src/main/resources/application.properties rename to integration-tests/amazon-lambda-http/src/test/resources/projects/configure-named-template/src/main/resources/application.properties diff --git a/integration-tests/amazon-sam/src/test/resources/projects/configure-new-template/pom.xml b/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-new-template/pom.xml similarity index 97% rename from integration-tests/amazon-sam/src/test/resources/projects/configure-new-template/pom.xml rename to integration-tests/amazon-lambda-http/src/test/resources/projects/configure-new-template/pom.xml index 8985250be..dff6ad079 100644 --- a/integration-tests/amazon-sam/src/test/resources/projects/configure-new-template/pom.xml +++ b/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-new-template/pom.xml @@ -55,7 +55,7 @@ @project.groupId@ - quarkus-amazon-sam + quarkus-amazon-lambda-http @project.groupId@ diff --git a/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-new-template/src/main/java/io/quarkus/amazon/sam/maven/SamApp.java b/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-new-template/src/main/java/io/quarkus/amazon/sam/maven/SamApp.java new file mode 100644 index 000000000..a893a3741 --- /dev/null +++ b/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-new-template/src/main/java/io/quarkus/amazon/sam/maven/SamApp.java @@ -0,0 +1,7 @@ +package io.quarkus.amazon.sam.maven; + +import javax.ws.rs.Path; + +@Path("/sam") +public class SamApp { +} diff --git a/integration-tests/amazon-sam/src/test/resources/projects/configure-new-template/src/main/resources/application.properties b/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-new-template/src/main/resources/application.properties similarity index 100% rename from integration-tests/amazon-sam/src/test/resources/projects/configure-new-template/src/main/resources/application.properties rename to integration-tests/amazon-lambda-http/src/test/resources/projects/configure-new-template/src/main/resources/application.properties diff --git a/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-with-application-properties/pom.xml b/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-with-application-properties/pom.xml new file mode 100644 index 000000000..9db81a775 --- /dev/null +++ b/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-with-application-properties/pom.xml @@ -0,0 +1,76 @@ + + + 4.0.0 + org.acme + existing-template + 0.1-SNAPSHOT + jar + + + + + @project.groupId@ + quarkus-bom + ${quarkus.version} + pom + import + + + + + + + + maven-compiler-plugin + 3.8.0 + + 1.8 + 1.8 + + + + @project.groupId@ + quarkus-maven-plugin + ${quarkus.version} + + + + build + + + target/classes/ + + + + + + + + + UTF-8 + 999-SNAPSHOT + + + + + @project.groupId@ + quarkus-amazon-lambda-http + + + @project.groupId@ + quarkus-jsonb + + + @project.groupId@ + quarkus-jaxb + + + + junit + junit + 4.12 + test + + + diff --git a/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-with-application-properties/properties.yaml b/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-with-application-properties/properties.yaml new file mode 100644 index 000000000..e229ca0a5 --- /dev/null +++ b/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-with-application-properties/properties.yaml @@ -0,0 +1,29 @@ +Transform: 'AWS::Serverless-2016-10-31' +Resources: + + properties-resource: + # This resource creates a Lambda function. + Type: 'AWS::Serverless::Function' + + Properties: + + # This function uses the Nodejs v6.10 runtime. + Runtime: nodejs6.10 + + # This is the Lambda function's handler. + Handler: index.handler + + # The location of the Lambda function code. + CodeUri: ./src + + # Event sources to attach to this function. In this case, we are attaching + # one API Gateway endpoint to the Lambda function. The function is + # called when a HTTP request is made to the API Gateway endpoint. + Events: + + ThumbnailApi: + # Define an API Gateway endpoint that responds to HTTP GET at /thumbnail + Type: Api + Properties: + Path: /thumbnail + Method: GET diff --git a/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-with-application-properties/src/main/java/io/quarkus/amazon/sam/maven/SamApp.java b/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-with-application-properties/src/main/java/io/quarkus/amazon/sam/maven/SamApp.java new file mode 100644 index 000000000..a893a3741 --- /dev/null +++ b/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-with-application-properties/src/main/java/io/quarkus/amazon/sam/maven/SamApp.java @@ -0,0 +1,7 @@ +package io.quarkus.amazon.sam.maven; + +import javax.ws.rs.Path; + +@Path("/sam") +public class SamApp { +} diff --git a/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-with-application-properties/src/main/resources/application.properties b/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-with-application-properties/src/main/resources/application.properties new file mode 100644 index 000000000..7a3000dfb --- /dev/null +++ b/integration-tests/amazon-lambda-http/src/test/resources/projects/configure-with-application-properties/src/main/resources/application.properties @@ -0,0 +1,2 @@ +quarkus.amazon-lambda-http.resource-name=properties-resource +quarkus.amazon-lambda-http.template=properties.yaml \ No newline at end of file diff --git a/integration-tests/amazon-sam/src/test/java/io/quarkus/amazon/sam/GenerateSamConfig.java b/integration-tests/amazon-sam/src/test/java/io/quarkus/amazon/sam/GenerateSamConfig.java deleted file mode 100644 index 747ae7040..000000000 --- a/integration-tests/amazon-sam/src/test/java/io/quarkus/amazon/sam/GenerateSamConfig.java +++ /dev/null @@ -1,106 +0,0 @@ -package io.quarkus.amazon.sam; - -import static io.quarkus.amazon.sam.deployment.AmazonSamProcessor.SAM_HANDLER; -import static io.quarkus.amazon.sam.deployment.AmazonSamProcessor.SAM_RUNTIME; -import static io.quarkus.amazon.sam.deployment.AmazonSamProcessor.walk; -import static java.util.Arrays.asList; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.PrintStream; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Properties; - -import org.apache.maven.shared.invoker.DefaultInvocationRequest; -import org.apache.maven.shared.invoker.DefaultInvoker; -import org.apache.maven.shared.invoker.InvocationRequest; -import org.apache.maven.shared.invoker.InvokerLogger; -import org.apache.maven.shared.invoker.MavenInvocationException; -import org.apache.maven.shared.invoker.PrintStreamLogger; -import org.junit.Assert; -import org.junit.jupiter.api.Test; - -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; - -import io.quarkus.maven.it.MojoTestBase; - -public class GenerateSamConfig extends MojoTestBase { - - private File testDir; - private DefaultInvoker invoker; - - @Test - public void testConfigureSAMWithNoTemplate() throws MavenInvocationException, IOException { - testDir = initProject("projects/configure-new-template"); - initRepo(); - - Map properties = walk(invoke(testDir, "sam.yaml"), "Resources", "new-template", "Properties"); - Assert.assertEquals(SAM_HANDLER, properties.get("Handler")); - Assert.assertEquals(SAM_RUNTIME, properties.get("Runtime")); - } - - @Test - public void testConfigureSAMWithConfiguredName() throws MavenInvocationException, IOException { - testDir = initProject("projects/configure-named-template"); - - Map properties = walk(invoke(testDir, "sam.yaml"), "Resources", "named-template", "Properties"); - Assert.assertEquals(SAM_HANDLER, properties.get("Handler")); - Assert.assertEquals(SAM_RUNTIME, properties.get("Runtime")); - } - - @Test - public void testConfigureSAMWithExistingTemplate() throws MavenInvocationException, IOException { - testDir = initProject("projects/configure-existing-template"); - initRepo(); - - Map properties = walk(invoke(testDir, "template.yaml"), "Resources", "ThumbnailFunction", - "Properties"); - Assert.assertEquals(SAM_HANDLER, properties.get("Handler")); - Assert.assertEquals(SAM_RUNTIME, properties.get("Runtime")); - } - - @SuppressWarnings("unchecked") - private Map loadFile(String template) throws IOException { - return new ObjectMapper(new YAMLFactory()) - .readValue(new File(testDir, template), LinkedHashMap.class); - } - - private void initRepo() { - invoker = new DefaultInvoker(); - invoker.setWorkingDirectory(testDir); - String repo = System.getProperty("maven.repo"); - if (repo == null) { - repo = new File(System.getProperty("user.home"), ".m2/repository").getAbsolutePath(); - } - invoker.setLocalRepositoryDirectory(new File(repo)); - } - - private Map invoke(File testDir, String template) throws MavenInvocationException, IOException { - Properties properties = new Properties(); - properties.put("projectGroupId", "org.acme"); - properties.put("projectArtifactId", "acme"); - properties.put("projectVersion", "1.0-SNAPSHOT"); - - return invoke(template, properties); - } - - private Map invoke(String template, Properties properties) throws MavenInvocationException, IOException { - initRepo(); - InvocationRequest request = new DefaultInvocationRequest(); - request.setBatchMode(true); - request.setShowErrors(true); - request.setGoals(asList("package")); - request.setProperties(properties); - getEnv().forEach(request::addShellEnvironment); - File log = new File(testDir, "maven.log"); - PrintStreamLogger logger = new PrintStreamLogger(new PrintStream(new FileOutputStream(log), false, "UTF-8"), - InvokerLogger.DEBUG); - invoker.setLogger(logger); - invoker.execute(request); - - return loadFile(template); - } -} diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml index 720c86845..177655000 100644 --- a/integration-tests/pom.xml +++ b/integration-tests/pom.xml @@ -58,7 +58,7 @@ amazon-dynamodb test-extension amazon-lambda - amazon-sam + amazon-lambda-http kogito kogito-maven kubernetes-client diff --git a/test-framework/maven/src/main/java/io/quarkus/maven/it/verifier/RunningInvoker.java b/test-framework/maven/src/main/java/io/quarkus/maven/it/verifier/RunningInvoker.java index 8ad79c1e9..fba695201 100644 --- a/test-framework/maven/src/main/java/io/quarkus/maven/it/verifier/RunningInvoker.java +++ b/test-framework/maven/src/main/java/io/quarkus/maven/it/verifier/RunningInvoker.java @@ -3,6 +3,7 @@ package io.quarkus.maven.it.verifier; import java.io.*; import java.util.List; import java.util.Map; +import java.util.Properties; import java.util.stream.Collectors; import org.apache.commons.io.FileUtils; @@ -60,12 +61,19 @@ public class RunningInvoker extends MavenProcessInvoker { public MavenProcessInvocationResult execute(List goals, Map envVars) throws MavenInvocationException { + return execute(goals, envVars, new Properties()); + } + + public MavenProcessInvocationResult execute(List goals, Map envVars, Properties properties) + throws MavenInvocationException { + DefaultInvocationRequest request = new DefaultInvocationRequest(); request.setGoals(goals); request.setDebug(debug); request.setLocalRepositoryDirectory(getLocalRepositoryDirectory()); request.setBaseDirectory(getWorkingDirectory()); request.setPomFile(new File(getWorkingDirectory(), "pom.xml")); + request.setProperties(properties); if (System.getProperty("mavenOpts") != null) { request.setMavenOpts(System.getProperty("mavenOpts"));