diff --git a/src/main/java/com/xti/jenkins/plugin/awslambda/invoke/InvokeConfig.java b/src/main/java/com/xti/jenkins/plugin/awslambda/invoke/InvokeConfig.java index a6be3a5..5617713 100644 --- a/src/main/java/com/xti/jenkins/plugin/awslambda/invoke/InvokeConfig.java +++ b/src/main/java/com/xti/jenkins/plugin/awslambda/invoke/InvokeConfig.java @@ -5,12 +5,14 @@ public class InvokeConfig implements Serializable { private String functionName; + private String qualifier; private String payload; private boolean synchronous; private List jsonParameters; - public InvokeConfig(String functionName, String payload, boolean synchronous, List jsonParameters) { + public InvokeConfig(String functionName, final String qualifier, String payload, boolean synchronous, List jsonParameters) { this.functionName = functionName; + this.qualifier = qualifier; this.payload = payload; this.synchronous = synchronous; this.jsonParameters = jsonParameters; @@ -24,6 +26,14 @@ public void setFunctionName(String functionName) { this.functionName = functionName; } + public String getQualifier() { + return qualifier; + } + + public void setQualifier(final String qualifier) { + this.qualifier = qualifier; + } + public String getPayload() { return payload; } diff --git a/src/main/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokeAction.java b/src/main/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokeAction.java index b29059c..c920176 100644 --- a/src/main/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokeAction.java +++ b/src/main/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokeAction.java @@ -38,15 +38,18 @@ public class LambdaInvokeAction implements ProminentProjectAction { private final String displayName; - public LambdaInvokeAction(String functionName, Boolean success) { + public LambdaInvokeAction(String functionName, String qualifier, Boolean success) { + + final String qualifierWithColon = qualifier!=null && !qualifier.isEmpty()? ":" + qualifier:""; + if(success){ iconFileName = "/plugin/aws-lambda/images/Lambda_24.png"; bigIconFileName = "/plugin/aws-lambda/images/Lambda_48.png"; - displayName = "Invoked Lambda: " + functionName; + displayName = "Invoked Lambda: " + functionName + qualifierWithColon; }else { iconFileName = "/plugin/aws-lambda/images/Lambda_24_grey.png"; bigIconFileName = "/plugin/aws-lambda/images/Lambda_48_grey.png"; - displayName = "Lambda invocation failure: " + functionName; + displayName = "Lambda invocation failure: " + functionName + qualifierWithColon; } } diff --git a/src/main/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokeBuildStep.java b/src/main/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokeBuildStep.java index 28e4566..5376834 100644 --- a/src/main/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokeBuildStep.java +++ b/src/main/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokeBuildStep.java @@ -82,7 +82,7 @@ public void perform(LambdaInvokeBuildStepVariables lambdaInvokeBuildStepVariable run.addAction(new LambdaOutputInjectionAction(entry.getKey(), entry.getValue())); } run.getEnvironment(listener); - run.addAction(new LambdaInvokeAction(executionVariables.getFunctionName(), invocationResult.isSuccess())); + run.addAction(new LambdaInvokeAction(executionVariables.getFunctionName(), executionVariables.getQualifier(), invocationResult.isSuccess())); } catch (Exception exc) { throw new RuntimeException(exc); } diff --git a/src/main/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokeBuildStepVariables.java b/src/main/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokeBuildStepVariables.java index d3b564e..08620c2 100644 --- a/src/main/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokeBuildStepVariables.java +++ b/src/main/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokeBuildStepVariables.java @@ -47,24 +47,27 @@ public class LambdaInvokeBuildStepVariables extends AbstractDescribableImpl jsonParameters; @DataBoundConstructor - public LambdaInvokeBuildStepVariables(String awsRegion, String functionName, boolean synchronous) { + public LambdaInvokeBuildStepVariables(String awsRegion, String functionName, String qualifier, boolean synchronous) { this.awsRegion = awsRegion; this.functionName = functionName; + this.qualifier = qualifier; this.synchronous = synchronous; } @Deprecated - public LambdaInvokeBuildStepVariables(boolean useInstanceCredentials, String awsAccessKeyId, Secret awsSecretKey, String awsRegion, String functionName, String payload, boolean synchronous, List jsonParameters) { + public LambdaInvokeBuildStepVariables(boolean useInstanceCredentials, String awsAccessKeyId, Secret awsSecretKey, String awsRegion, String functionName, final String qualifier, String payload, boolean synchronous, List jsonParameters) { this.useInstanceCredentials = useInstanceCredentials; this.awsAccessKeyId = awsAccessKeyId; this.awsSecretKey = awsSecretKey != null ? awsSecretKey.getEncryptedValue() : null; this.awsRegion = awsRegion; this.functionName = functionName; + this.qualifier = qualifier; this.payload = payload; this.synchronous = synchronous; this.jsonParameters = jsonParameters; @@ -105,6 +108,10 @@ public String getFunctionName() { return functionName; } + public String getQualifier() { + return qualifier; + } + public String getPayload() { return payload; } @@ -137,6 +144,9 @@ public void expandVariables(EnvVars env) { awsRegion = ExpansionUtils.expand(awsRegion, env); functionName = ExpansionUtils.expand(functionName, env); payload = ExpansionUtils.expand(payload, env); + if(qualifier !=null){ + qualifier = ExpansionUtils.expand(qualifier, env); + } if(jsonParameters != null) { for (JsonParameterVariables jsonParameter : jsonParameters) { jsonParameter.expandVariables(env); @@ -145,7 +155,7 @@ public void expandVariables(EnvVars env) { } public LambdaInvokeBuildStepVariables getClone(){ - LambdaInvokeBuildStepVariables lambdaInvokeBuildStepVariables = new LambdaInvokeBuildStepVariables(awsRegion, functionName, synchronous); + LambdaInvokeBuildStepVariables lambdaInvokeBuildStepVariables = new LambdaInvokeBuildStepVariables(awsRegion, functionName, qualifier, synchronous); lambdaInvokeBuildStepVariables.setUseInstanceCredentials(useInstanceCredentials); lambdaInvokeBuildStepVariables.setAwsAccessKeyId(awsAccessKeyId); lambdaInvokeBuildStepVariables.setAwsSecretKey(awsSecretKey); @@ -159,7 +169,7 @@ public InvokeConfig getInvokeConfig(){ for (JsonParameterVariables jsonParameterVariables : getJsonParameters()) { jsonParameters.add(jsonParameterVariables.buildJsonParameter()); } - return new InvokeConfig(functionName, payload, synchronous, jsonParameters); + return new InvokeConfig(functionName, qualifier, payload, synchronous, jsonParameters); } public LambdaClientConfig getLambdaClientConfig(){ @@ -199,6 +209,8 @@ public boolean equals(Object o) { return false; if (getFunctionName() != null ? !getFunctionName().equals(variables.getFunctionName()) : variables.getFunctionName() != null) return false; + if (getQualifier() != null ? !getQualifier().equals(variables.getQualifier()) : variables.getQualifier() != null) + return false; if (getPayload() != null ? !getPayload().equals(variables.getPayload()) : variables.getPayload() != null) return false; return !(getJsonParameters() != null ? !getJsonParameters().equals(variables.getJsonParameters()) : variables.getJsonParameters() != null); @@ -212,6 +224,7 @@ public int hashCode() { result = 31 * result + (getAwsSecretKey() != null ? getAwsSecretKey().hashCode() : 0); result = 31 * result + (getAwsRegion() != null ? getAwsRegion().hashCode() : 0); result = 31 * result + (getFunctionName() != null ? getFunctionName().hashCode() : 0); + result = 31 * result + (getQualifier() != null ? getQualifier().hashCode() : 0); result = 31 * result + (getPayload() != null ? getPayload().hashCode() : 0); result = 31 * result + (getSynchronous() ? 1 : 0); result = 31 * result + (getJsonParameters() != null ? getJsonParameters().hashCode() : 0); diff --git a/src/main/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokePublisher.java b/src/main/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokePublisher.java index 76d4a0f..8490feb 100644 --- a/src/main/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokePublisher.java +++ b/src/main/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokePublisher.java @@ -106,7 +106,7 @@ public boolean perform(LambdaInvokeVariables lambdaInvokeVariables,AbstractBuild build.addAction(new LambdaOutputInjectionAction(entry.getKey(), entry.getValue())); } build.getEnvironment(listener); - build.addAction(new LambdaInvokeAction(executionVariables.getFunctionName(), invocationResult.isSuccess())); + build.addAction(new LambdaInvokeAction(executionVariables.getFunctionName(), executionVariables.getQualifier(), invocationResult.isSuccess())); return true; } catch (Exception exc) { throw new RuntimeException(exc); diff --git a/src/main/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokeVariables.java b/src/main/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokeVariables.java index d33d9d7..a91de11 100644 --- a/src/main/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokeVariables.java +++ b/src/main/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokeVariables.java @@ -47,25 +47,28 @@ public class LambdaInvokeVariables extends AbstractDescribableImpl jsonParameters = new ArrayList(); @DataBoundConstructor - public LambdaInvokeVariables(String awsRegion, String functionName, boolean synchronous) { + public LambdaInvokeVariables(String awsRegion, String functionName, String qualifier, boolean synchronous) { this.awsRegion = awsRegion; this.functionName = functionName; + this.qualifier = qualifier; this.synchronous = synchronous; } @Deprecated - public LambdaInvokeVariables(boolean useInstanceCredentials, String awsAccessKeyId, Secret awsSecretKey, String awsRegion, String functionName, String payload, boolean synchronous, boolean successOnly, List jsonParameters) { + public LambdaInvokeVariables(boolean useInstanceCredentials, String awsAccessKeyId, Secret awsSecretKey, String awsRegion, String functionName, String qualifier, String payload, boolean synchronous, boolean successOnly, List jsonParameters) { this.useInstanceCredentials = useInstanceCredentials; this.awsAccessKeyId = awsAccessKeyId; this.awsSecretKey = awsSecretKey != null ? awsSecretKey.getEncryptedValue() : null; this.awsRegion = awsRegion; this.functionName = functionName; + this.qualifier = qualifier; this.payload = payload; this.synchronous = synchronous; this.successOnly = successOnly; @@ -107,6 +110,15 @@ public String getFunctionName() { return functionName; } + + public String getQualifier() { + return qualifier; + } + + public void setQualifier(String qualifier) { + this.qualifier = qualifier; + } + public String getPayload() { return payload; } @@ -148,6 +160,9 @@ public void expandVariables(EnvVars env) { awsRegion = ExpansionUtils.expand(awsRegion, env); functionName = ExpansionUtils.expand(functionName, env); payload = ExpansionUtils.expand(payload, env); + if(qualifier !=null){ + qualifier = ExpansionUtils.expand(qualifier, env); + } if(jsonParameters != null) { for (JsonParameterVariables jsonParameter : jsonParameters) { jsonParameter.expandVariables(env); @@ -156,7 +171,7 @@ public void expandVariables(EnvVars env) { } public LambdaInvokeVariables getClone(){ - LambdaInvokeVariables lambdaInvokeVariables = new LambdaInvokeVariables(awsRegion, functionName, synchronous); + LambdaInvokeVariables lambdaInvokeVariables = new LambdaInvokeVariables(awsRegion, functionName, qualifier, synchronous); lambdaInvokeVariables.setUseInstanceCredentials(useInstanceCredentials); lambdaInvokeVariables.setAwsAccessKeyId(awsAccessKeyId); lambdaInvokeVariables.setAwsSecretKey(awsSecretKey); @@ -171,7 +186,7 @@ public InvokeConfig getInvokeConfig(){ for (JsonParameterVariables jsonParameterVariables : getJsonParameters()) { jsonParameters.add(jsonParameterVariables.buildJsonParameter()); } - return new InvokeConfig(functionName, payload, synchronous, jsonParameters); + return new InvokeConfig(functionName, qualifier, payload, synchronous, jsonParameters); } public LambdaClientConfig getLambdaClientConfig(){ @@ -212,6 +227,8 @@ public boolean equals(Object o) { return false; if (getFunctionName() != null ? !getFunctionName().equals(that.getFunctionName()) : that.getFunctionName() != null) return false; + if (getQualifier() != null ? !getQualifier().equals(that.getQualifier()) : that.getQualifier() != null) + return false; if (getPayload() != null ? !getPayload().equals(that.getPayload()) : that.getPayload() != null) return false; return !(getJsonParameters() != null ? !getJsonParameters().equals(that.getJsonParameters()) : that.getJsonParameters() != null); @@ -224,6 +241,7 @@ public int hashCode() { result = 31 * result + (getAwsSecretKey() != null ? getAwsSecretKey().hashCode() : 0); result = 31 * result + (getAwsRegion() != null ? getAwsRegion().hashCode() : 0); result = 31 * result + (getFunctionName() != null ? getFunctionName().hashCode() : 0); + result = 31 * result + (getQualifier() != null ? getQualifier().hashCode() : 0); result = 31 * result + (getPayload() != null ? getPayload().hashCode() : 0); result = 31 * result + (getSynchronous() ? 1 : 0); result = 31 * result + (getSuccessOnly() ? 1 : 0); diff --git a/src/main/java/com/xti/jenkins/plugin/awslambda/service/LambdaInvokeService.java b/src/main/java/com/xti/jenkins/plugin/awslambda/service/LambdaInvokeService.java index c85600a..8fa3e51 100644 --- a/src/main/java/com/xti/jenkins/plugin/awslambda/service/LambdaInvokeService.java +++ b/src/main/java/com/xti/jenkins/plugin/awslambda/service/LambdaInvokeService.java @@ -32,6 +32,10 @@ public String invokeLambdaFunction(InvokeConfig invokeConfig) throws LambdaInvok .withFunctionName(invokeConfig.getFunctionName()) .withPayload(invokeConfig.getPayload()); + if(invokeConfig.getQualifier() !=null && !invokeConfig.getQualifier().isEmpty()){ + invokeRequest.withQualifier(invokeConfig.getQualifier()); + } + if(invokeConfig.isSynchronous()){ invokeRequest .withInvocationType(InvocationType.RequestResponse) diff --git a/src/test/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokeActionTest.java b/src/test/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokeActionTest.java index bad7707..1def07e 100644 --- a/src/test/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokeActionTest.java +++ b/src/test/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokeActionTest.java @@ -8,7 +8,7 @@ public class LambdaInvokeActionTest { @Test public void testLambdaInvokeActionSuccess(){ - LambdaInvokeAction lambdaInvokeAction = new LambdaInvokeAction("lambda1", true); + LambdaInvokeAction lambdaInvokeAction = new LambdaInvokeAction("lambda1", null, true); assertEquals("Invoked Lambda: lambda1", lambdaInvokeAction.getDisplayName()); assertEquals("console", lambdaInvokeAction.getUrlName()); @@ -18,11 +18,31 @@ public void testLambdaInvokeActionSuccess(){ @Test public void testLambdaInvokeActionFailure(){ - LambdaInvokeAction lambdaInvokeAction = new LambdaInvokeAction("lambda1", false); + LambdaInvokeAction lambdaInvokeAction = new LambdaInvokeAction("lambda1",null, false); assertEquals("Lambda invocation failure: lambda1", lambdaInvokeAction.getDisplayName()); assertEquals("console", lambdaInvokeAction.getUrlName()); assertEquals("/plugin/aws-lambda/images/Lambda_24_grey.png", lambdaInvokeAction.getIconFileName()); assertEquals("/plugin/aws-lambda/images/Lambda_48_grey.png", lambdaInvokeAction.getBigIconFileName()); } + + @Test + public void testLambdaInvokeActionSuccessWithQualifier(){ + LambdaInvokeAction lambdaInvokeAction = new LambdaInvokeAction("lambda1", "alias", true); + + assertEquals("Invoked Lambda: lambda1:alias", lambdaInvokeAction.getDisplayName()); + assertEquals("console", lambdaInvokeAction.getUrlName()); + assertEquals("/plugin/aws-lambda/images/Lambda_24.png", lambdaInvokeAction.getIconFileName()); + assertEquals("/plugin/aws-lambda/images/Lambda_48.png", lambdaInvokeAction.getBigIconFileName()); + } + + @Test + public void testLambdaInvokeActionFailureWithQualifier(){ + LambdaInvokeAction lambdaInvokeAction = new LambdaInvokeAction("lambda1","alias", false); + + assertEquals("Lambda invocation failure: lambda1:alias", lambdaInvokeAction.getDisplayName()); + assertEquals("console", lambdaInvokeAction.getUrlName()); + assertEquals("/plugin/aws-lambda/images/Lambda_24_grey.png", lambdaInvokeAction.getIconFileName()); + assertEquals("/plugin/aws-lambda/images/Lambda_48_grey.png", lambdaInvokeAction.getBigIconFileName()); + } } \ No newline at end of file diff --git a/src/test/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokeBuildStepTest.java b/src/test/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokeBuildStepTest.java index d38cc11..8d8462e 100644 --- a/src/test/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokeBuildStepTest.java +++ b/src/test/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokeBuildStepTest.java @@ -45,7 +45,7 @@ public class LambdaInvokeBuildStepTest { public void testHtml() throws Exception { List jsonParameterVariables = new ArrayList(); jsonParameterVariables.add(new JsonParameterVariables("KEY", "value")); - LambdaInvokeBuildStepVariables variables = new LambdaInvokeBuildStepVariables(false, "accessKeyId", Secret.fromString("secretKey"), "eu-west-1", "function", "payload", true, jsonParameterVariables); + LambdaInvokeBuildStepVariables variables = new LambdaInvokeBuildStepVariables(false, "accessKeyId", Secret.fromString("secretKey"), "eu-west-1", "function", "alias", "payload", true, jsonParameterVariables); FreeStyleProject p = j.createFreeStyleProject(); LambdaInvokeBuildStep before = new LambdaInvokeBuildStep(variables); @@ -71,7 +71,7 @@ public void testHtml() throws Exception { public void testPerform() throws IOException, ExecutionException, InterruptedException { List jsonParameterVariables = new ArrayList(); jsonParameterVariables.add(new JsonParameterVariables("KEY", "$.key2")); - LambdaInvokeBuildStepVariables clone = new LambdaInvokeBuildStepVariables(false, "accessKeyId", Secret.fromString("secretKey"), "eu-west-1", "function", "payload", true, jsonParameterVariables); + LambdaInvokeBuildStepVariables clone = new LambdaInvokeBuildStepVariables(false, "accessKeyId", Secret.fromString("secretKey"), "eu-west-1", "function", "alias", "payload", true, jsonParameterVariables); LambdaInvokeBuildStepVariables spy = Mockito.spy(clone); when(original.getClone()).thenReturn(spy); @@ -100,7 +100,7 @@ public void testPerform() throws IOException, ExecutionException, InterruptedExc public void testPerformFailure() throws IOException, ExecutionException, InterruptedException { List jsonParameterVariables = new ArrayList(); jsonParameterVariables.add(new JsonParameterVariables("KEY", "$.key2")); - LambdaInvokeBuildStepVariables clone = new LambdaInvokeBuildStepVariables(false, "accessKeyId", Secret.fromString("secretKey"), "eu-west-1", "function", "payload", true, jsonParameterVariables); + LambdaInvokeBuildStepVariables clone = new LambdaInvokeBuildStepVariables(false, "accessKeyId", Secret.fromString("secretKey"), "eu-west-1", "function", "alias", "payload", true, jsonParameterVariables); LambdaInvokeBuildStepVariables spy = Mockito.spy(clone); when(original.getClone()).thenReturn(spy); diff --git a/src/test/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokeBuildStepVariablesTest.java b/src/test/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokeBuildStepVariablesTest.java index aa705e3..17c13f3 100644 --- a/src/test/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokeBuildStepVariablesTest.java +++ b/src/test/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokeBuildStepVariablesTest.java @@ -22,7 +22,7 @@ public class LambdaInvokeBuildStepVariablesTest { public void testCloneExpandVariables() throws Exception { List jsonParameterVariables = new ArrayList(); jsonParameterVariables.add(new JsonParameterVariables("ENV_$ENV_ENV_NAME", "$.$ENV_JSON_PATH")); - LambdaInvokeBuildStepVariables variables = new LambdaInvokeBuildStepVariables(false, "${ENV_ID}", Secret.fromString("$ENV_SECRET}"), "${ENV_REGION}", "${ENV_FUNCTION}", "{\"payload\":\"v${ENV_PAYLOAD}\"}", true, jsonParameterVariables); + LambdaInvokeBuildStepVariables variables = new LambdaInvokeBuildStepVariables(false, "${ENV_ID}", Secret.fromString("$ENV_SECRET}"), "${ENV_REGION}", "${ENV_FUNCTION}", "${ENV_QUALIFIER}","{\"payload\":\"v${ENV_PAYLOAD}\"}", true, jsonParameterVariables); LambdaInvokeBuildStepVariables clone = variables.getClone(); EnvVars envVars = new EnvVars(); @@ -30,6 +30,7 @@ public void testCloneExpandVariables() throws Exception { envVars.put("ENV_SECRET", "SECRET"); envVars.put("ENV_REGION", "eu-west-1"); envVars.put("ENV_FUNCTION", "FUNCTION"); + envVars.put("ENV_QUALIFIER", "alias"); envVars.put("ENV_PAYLOAD", "hello"); envVars.put("ENV_ENV_NAME", "NAME"); envVars.put("ENV_JSON_PATH", "path"); @@ -38,7 +39,7 @@ public void testCloneExpandVariables() throws Exception { List jsonParameterVariablesExpected = new ArrayList(); jsonParameterVariablesExpected.add(new JsonParameterVariables("ENV_NAME", "$.path")); - LambdaInvokeBuildStepVariables expected = new LambdaInvokeBuildStepVariables(false, "ID", Secret.fromString("$ENV_SECRET}"), "eu-west-1", "FUNCTION", "{\"payload\":\"vhello\"}", true, jsonParameterVariablesExpected); + LambdaInvokeBuildStepVariables expected = new LambdaInvokeBuildStepVariables(false, "ID", Secret.fromString("$ENV_SECRET}"), "eu-west-1", "FUNCTION", "alias", "{\"payload\":\"vhello\"}", true, jsonParameterVariablesExpected); assertEquals(expected.getAwsAccessKeyId(), clone.getAwsAccessKeyId()); assertEquals(expected.getAwsSecretKey(), clone.getAwsSecretKey()); @@ -52,7 +53,7 @@ public void testCloneExpandVariables() throws Exception { @Test public void testCloneExpandVariablesNoJsonParameters() throws Exception { - LambdaInvokeBuildStepVariables variables = new LambdaInvokeBuildStepVariables(false, "${ENV_ID}", Secret.fromString("$ENV_SECRET}"), "${ENV_REGION}", "${ENV_FUNCTION}", "{\"payload\":\"v${ENV_PAYLOAD}\"}", true, null); + LambdaInvokeBuildStepVariables variables = new LambdaInvokeBuildStepVariables(false, "${ENV_ID}", Secret.fromString("$ENV_SECRET}"), "${ENV_REGION}", "${ENV_FUNCTION}", "${ENV_QUALIFIER}","{\"payload\":\"v${ENV_PAYLOAD}\"}", true, null); LambdaInvokeBuildStepVariables clone = variables.getClone(); EnvVars envVars = new EnvVars(); @@ -60,13 +61,14 @@ public void testCloneExpandVariablesNoJsonParameters() throws Exception { envVars.put("ENV_SECRET", "SECRET"); envVars.put("ENV_REGION", "eu-west-1"); envVars.put("ENV_FUNCTION", "FUNCTION"); + envVars.put("ENV_QUALIFIER", "alias"); envVars.put("ENV_PAYLOAD", "hello"); envVars.put("ENV_ENV_NAME", "NAME"); envVars.put("ENV_JSON_PATH", "path"); envVars.put(".", "bad"); clone.expandVariables(envVars); - LambdaInvokeBuildStepVariables expected = new LambdaInvokeBuildStepVariables(false, "ID", Secret.fromString("$ENV_SECRET}"), "eu-west-1", "FUNCTION", "{\"payload\":\"vhello\"}", true, null); + LambdaInvokeBuildStepVariables expected = new LambdaInvokeBuildStepVariables(false, "ID", Secret.fromString("$ENV_SECRET}"), "eu-west-1", "FUNCTION", "alias", "{\"payload\":\"vhello\"}", true, null); assertEquals(expected.getAwsAccessKeyId(), clone.getAwsAccessKeyId()); assertEquals(expected.getAwsSecretKey(), clone.getAwsSecretKey()); @@ -80,10 +82,11 @@ public void testCloneExpandVariablesNoJsonParameters() throws Exception { public void testGetInvokeConfig() throws Exception { List jsonParameterVariables = new ArrayList(); jsonParameterVariables.add(new JsonParameterVariables("ENV_NAME", "$.path")); - LambdaInvokeBuildStepVariables variables = new LambdaInvokeBuildStepVariables(false, "ID", Secret.fromString("SECRET}"), "eu-west-1", "FUNCTION", "${\"payload\":\"hello\"", true, jsonParameterVariables); + LambdaInvokeBuildStepVariables variables = new LambdaInvokeBuildStepVariables(false, "ID", Secret.fromString("SECRET}"), "eu-west-1", "FUNCTION", "alias", "${\"payload\":\"hello\"", true, jsonParameterVariables); InvokeConfig invokeConfig = variables.getInvokeConfig(); assertEquals(variables.getFunctionName(), invokeConfig.getFunctionName()); + assertEquals(variables.getQualifier(), invokeConfig.getQualifier()); assertEquals(variables.getPayload(), invokeConfig.getPayload()); assertEquals(variables.getSynchronous(), invokeConfig.isSynchronous()); assertEquals(variables.getJsonParameters().get(0).getEnvVarName(), invokeConfig.getJsonParameters().get(0).getEnvVarName()); @@ -94,7 +97,7 @@ public void testGetInvokeConfig() throws Exception { public void testGetLambdaClientConfig() throws Exception { List jsonParameterVariables = new ArrayList(); jsonParameterVariables.add(new JsonParameterVariables("ENV_NAME", "$.path")); - LambdaInvokeBuildStepVariables variables = new LambdaInvokeBuildStepVariables(false, "ID", Secret.fromString("SECRET}"), "eu-west-1", "FUNCTION", "${\"payload\":\"hello\"", true, jsonParameterVariables); + LambdaInvokeBuildStepVariables variables = new LambdaInvokeBuildStepVariables(false, "ID", Secret.fromString("SECRET}"), "eu-west-1", "FUNCTION", "alias", "${\"payload\":\"hello\"", true, jsonParameterVariables); LambdaClientConfig clientConfig = variables.getLambdaClientConfig(); assertNotNull(clientConfig); diff --git a/src/test/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokePublisherTest.java b/src/test/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokePublisherTest.java index 2297dd9..b92b341 100644 --- a/src/test/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokePublisherTest.java +++ b/src/test/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokePublisherTest.java @@ -49,7 +49,7 @@ public class LambdaInvokePublisherTest { public void testHtml() throws Exception { List jsonParameterVariables = new ArrayList<>(); jsonParameterVariables.add(new JsonParameterVariables("KEY", "value")); - LambdaInvokeVariables variables = new LambdaInvokeVariables(false, "accessKeyId", Secret.fromString("secretKey"), "eu-west-1", "function", "payload", true, true, jsonParameterVariables); + LambdaInvokeVariables variables = new LambdaInvokeVariables(false, "accessKeyId", Secret.fromString("secretKey"), "eu-west-1", "function", null, "payload", true, true, jsonParameterVariables); List variablesList = new ArrayList<>(); variablesList.add(variables); @@ -69,7 +69,7 @@ public void testHtml() throws Exception { public void testHtmlInstanceRole() throws Exception { List jsonParameterVariables = new ArrayList<>(); jsonParameterVariables.add(new JsonParameterVariables("KEY", "value")); - LambdaInvokeVariables variables = new LambdaInvokeVariables(true, "accessKeyId", Secret.fromString("secretKey"), "eu-west-1", "function", "payload", true, true, jsonParameterVariables); + LambdaInvokeVariables variables = new LambdaInvokeVariables(true, "accessKeyId", Secret.fromString("secretKey"), "eu-west-1", "function", null, "payload", true, true, jsonParameterVariables); List variablesList = new ArrayList<>(); variablesList.add(variables); @@ -107,7 +107,7 @@ public void testHtmlInstanceRole() throws Exception { public void testPerform() throws IOException, ExecutionException, InterruptedException { List jsonParameterVariables = new ArrayList<>(); jsonParameterVariables.add(new JsonParameterVariables("KEY", "$.key2")); - LambdaInvokeVariables clone = new LambdaInvokeVariables(false, "accessKeyId", Secret.fromString("secretKey"), "eu-west-1", "function", "payload", true, true, jsonParameterVariables); + LambdaInvokeVariables clone = new LambdaInvokeVariables(false, "accessKeyId", Secret.fromString("secretKey"), "eu-west-1", "function", "alias", "payload", true, true, jsonParameterVariables); LambdaInvokeVariables spy = Mockito.spy(clone); when(original.getClone()).thenReturn(spy); @@ -136,7 +136,7 @@ public void testPerform() throws IOException, ExecutionException, InterruptedExc public void testPerformInstanceRole() throws IOException, ExecutionException, InterruptedException { List jsonParameterVariables = new ArrayList<>(); jsonParameterVariables.add(new JsonParameterVariables("KEY", "$.key2")); - LambdaInvokeVariables clone = new LambdaInvokeVariables(true, "accessKeyId", Secret.fromString("secretKey"), "eu-west-1", "function", "payload", true, true, jsonParameterVariables); + LambdaInvokeVariables clone = new LambdaInvokeVariables(true, "accessKeyId", Secret.fromString("secretKey"), "eu-west-1", "function", "alias", "payload", true, true, jsonParameterVariables); LambdaInvokeVariables spy = Mockito.spy(clone); when(original.getClone()).thenReturn(spy); @@ -165,7 +165,7 @@ public void testPerformInstanceRole() throws IOException, ExecutionException, In public void testPerformBuildUnstableNotSuccessOnly() throws IOException, ExecutionException, InterruptedException { List jsonParameterVariables = new ArrayList<>(); jsonParameterVariables.add(new JsonParameterVariables("KEY", "$.key2")); - LambdaInvokeVariables clone = new LambdaInvokeVariables(false, "accessKeyId", Secret.fromString("secretKey"), "eu-west-1", "function", "payload", true, false, jsonParameterVariables); + LambdaInvokeVariables clone = new LambdaInvokeVariables(false, "accessKeyId", Secret.fromString("secretKey"), "eu-west-1", "function", null, "payload", true, false, jsonParameterVariables); LambdaInvokeVariables spy = Mockito.spy(clone); when(original.getClone()).thenReturn(spy); @@ -201,7 +201,7 @@ public boolean perform(AbstractBuild build, Launcher launcher, public void testPerformBuildUnstableSuccessOnly() throws IOException, ExecutionException, InterruptedException { List jsonParameterVariables = new ArrayList<>(); jsonParameterVariables.add(new JsonParameterVariables("KEY", "$.key2")); - LambdaInvokeVariables clone = new LambdaInvokeVariables(false, "accessKeyId", Secret.fromString("secretKey"), "eu-west-1", "function", "payload", true, true, jsonParameterVariables); + LambdaInvokeVariables clone = new LambdaInvokeVariables(false, "accessKeyId", Secret.fromString("secretKey"), "eu-west-1", "function", "alias", "payload", true, true, jsonParameterVariables); LambdaInvokeVariables spy = Mockito.spy(clone); when(original.getClone()).thenReturn(spy); @@ -228,7 +228,7 @@ public boolean perform(AbstractBuild build, Launcher launcher, public void testPerformBuildFailure() throws IOException, ExecutionException, InterruptedException { List jsonParameterVariables = new ArrayList<>(); jsonParameterVariables.add(new JsonParameterVariables("KEY", "$.key2")); - LambdaInvokeVariables clone = new LambdaInvokeVariables(false, "accessKeyId", Secret.fromString("secretKey"), "eu-west-1", "function", "payload", true, true, jsonParameterVariables); + LambdaInvokeVariables clone = new LambdaInvokeVariables(false, "accessKeyId", Secret.fromString("secretKey"), "eu-west-1", "function", null, "payload", true, true, jsonParameterVariables); LambdaInvokeVariables spy = Mockito.spy(clone); when(original.getClone()).thenReturn(spy); @@ -255,7 +255,7 @@ public boolean perform(AbstractBuild build, Launcher launcher, public void testPerformFailure() throws IOException, ExecutionException, InterruptedException { List jsonParameterVariables = new ArrayList<>(); jsonParameterVariables.add(new JsonParameterVariables("KEY", "$.key2")); - LambdaInvokeVariables clone = new LambdaInvokeVariables(false, "accessKeyId", Secret.fromString("secretKey"), "eu-west-1", "function", "payload", true, true, jsonParameterVariables); + LambdaInvokeVariables clone = new LambdaInvokeVariables(false, "accessKeyId", Secret.fromString("secretKey"), "eu-west-1", "function", null, "payload", true, true, jsonParameterVariables); LambdaInvokeVariables spy = Mockito.spy(clone); when(original.getClone()).thenReturn(spy); diff --git a/src/test/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokeVariablesTest.java b/src/test/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokeVariablesTest.java index 9a218d2..7a19f7f 100644 --- a/src/test/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokeVariablesTest.java +++ b/src/test/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokeVariablesTest.java @@ -22,7 +22,7 @@ public class LambdaInvokeVariablesTest { public void testCloneExpandVariables() throws Exception { List jsonParameterVariables = new ArrayList(); jsonParameterVariables.add(new JsonParameterVariables("ENV_$ENV_ENV_NAME", "$.$ENV_JSON_PATH")); - LambdaInvokeVariables variables = new LambdaInvokeVariables(false, "${ENV_ID}", Secret.fromString("$ENV_SECRET}"), "${ENV_REGION}", "${ENV_FUNCTION}", "${\"payload\":\"${ENV_PAYLOAD}\"", true, true, jsonParameterVariables); + LambdaInvokeVariables variables = new LambdaInvokeVariables(false, "${ENV_ID}", Secret.fromString("$ENV_SECRET}"), "${ENV_REGION}", "${ENV_FUNCTION}", "${ENV_QUALIFIER}", "${\"payload\":\"${ENV_PAYLOAD}\"", true, true, jsonParameterVariables); LambdaInvokeVariables clone = variables.getClone(); EnvVars envVars = new EnvVars(); @@ -30,6 +30,7 @@ public void testCloneExpandVariables() throws Exception { envVars.put("ENV_SECRET", "SECRET"); envVars.put("ENV_REGION", "eu-west-1"); envVars.put("ENV_FUNCTION", "FUNCTION"); + envVars.put("ENV_QUALIFIER", "alias"); envVars.put("ENV_PAYLOAD", "hello"); envVars.put("ENV_ENV_NAME", "NAME"); envVars.put("ENV_JSON_PATH", "path"); @@ -38,7 +39,7 @@ public void testCloneExpandVariables() throws Exception { List jsonParameterVariablesExpected = new ArrayList(); jsonParameterVariablesExpected.add(new JsonParameterVariables("ENV_NAME", "$.path")); - LambdaInvokeVariables expected = new LambdaInvokeVariables(false, "ID", Secret.fromString("$ENV_SECRET}"), "eu-west-1", "FUNCTION", "${\"payload\":\"hello\"", true, true, jsonParameterVariablesExpected); + LambdaInvokeVariables expected = new LambdaInvokeVariables(false, "ID", Secret.fromString("$ENV_SECRET}"), "eu-west-1", "FUNCTION", "alias", "${\"payload\":\"hello\"", true, true, jsonParameterVariablesExpected); assertEquals(expected.getAwsAccessKeyId(), clone.getAwsAccessKeyId()); assertEquals(expected.getAwsSecretKey(), clone.getAwsSecretKey()); @@ -55,10 +56,11 @@ public void testCloneExpandVariables() throws Exception { public void testGetInvokeConfig() throws Exception { List jsonParameterVariables = new ArrayList(); jsonParameterVariables.add(new JsonParameterVariables("ENV_NAME", "$.path")); - LambdaInvokeVariables variables = new LambdaInvokeVariables(false, "ID", Secret.fromString("SECRET}"), "eu-west-1", "FUNCTION", "${\"payload\":\"hello\"", true, true, jsonParameterVariables); + LambdaInvokeVariables variables = new LambdaInvokeVariables(false, "ID", Secret.fromString("SECRET}"), "eu-west-1", "FUNCTION", "alias", "${\"payload\":\"hello\"", true, true, jsonParameterVariables); InvokeConfig invokeConfig = variables.getInvokeConfig(); assertEquals(variables.getFunctionName(), invokeConfig.getFunctionName()); + assertEquals(variables.getQualifier(), invokeConfig.getQualifier()); assertEquals(variables.getPayload(), invokeConfig.getPayload()); assertEquals(variables.getSynchronous(), invokeConfig.isSynchronous()); assertEquals(variables.getJsonParameters().get(0).getEnvVarName(), invokeConfig.getJsonParameters().get(0).getEnvVarName()); @@ -69,7 +71,7 @@ public void testGetInvokeConfig() throws Exception { public void testGetLambdaClientConfig() throws Exception { List jsonParameterVariables = new ArrayList(); jsonParameterVariables.add(new JsonParameterVariables("ENV_NAME", "$.path")); - LambdaInvokeVariables variables = new LambdaInvokeVariables(false, "ID", Secret.fromString("SECRET}"), "eu-west-1", "FUNCTION", "${\"payload\":\"hello\"", true, true, jsonParameterVariables); + LambdaInvokeVariables variables = new LambdaInvokeVariables(false, "ID", Secret.fromString("SECRET}"), "eu-west-1", "FUNCTION", "alias", "${\"payload\":\"hello\"", true, true, jsonParameterVariables); LambdaClientConfig clientConfig = variables.getLambdaClientConfig(); assertNotNull(clientConfig); diff --git a/src/test/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokerTest.java b/src/test/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokerTest.java index 8b287e3..aef9e0b 100644 --- a/src/test/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokerTest.java +++ b/src/test/java/com/xti/jenkins/plugin/awslambda/invoke/LambdaInvokerTest.java @@ -32,7 +32,7 @@ public void testInvokeSuccess() throws Exception { LambdaInvoker invoker = new LambdaInvoker(service, logger); - InvokeConfig invokeConfig = new InvokeConfig("function", "{\"key\":\"value\"}", true, Collections.singletonList(new JsonParameter("LAMBDA_ENV_VAR", "$.key2"))); + InvokeConfig invokeConfig = new InvokeConfig("function", "alias", "{\"key\":\"value\"}", true, Collections.singletonList(new JsonParameter("LAMBDA_ENV_VAR", "$.key2"))); LambdaInvocationResult result = invoker.invoke(invokeConfig); @@ -46,7 +46,7 @@ public void testInvokeFailure() throws Exception { LambdaInvoker invoker = new LambdaInvoker(service, logger); - InvokeConfig invokeConfig = new InvokeConfig("function", "{\"key\":\"value\"}", true, new ArrayList()); + InvokeConfig invokeConfig = new InvokeConfig("function", "alias", "{\"key\":\"value\"}", true, new ArrayList()); LambdaInvocationResult result = invoker.invoke(invokeConfig); diff --git a/src/test/java/com/xti/jenkins/plugin/awslambda/service/LambdaInvokeServiceTest.java b/src/test/java/com/xti/jenkins/plugin/awslambda/service/LambdaInvokeServiceTest.java index 96219c9..d810e22 100644 --- a/src/test/java/com/xti/jenkins/plugin/awslambda/service/LambdaInvokeServiceTest.java +++ b/src/test/java/com/xti/jenkins/plugin/awslambda/service/LambdaInvokeServiceTest.java @@ -51,7 +51,7 @@ public void testProcessLambdaDeployment() throws Exception { @Test public void testInvokeLambdaFunctionAsynchronous() throws Exception { - InvokeConfig invokeConfig = new InvokeConfig("function", "{\"key1\": \"value1\"}", false, null); + InvokeConfig invokeConfig = new InvokeConfig("function", "alias","{\"key1\": \"value1\"}", false, null); when(awsLambdaClient.invoke(any(InvokeRequest.class))) .thenReturn(new InvokeResult()); @@ -70,7 +70,7 @@ public void testInvokeLambdaFunctionAsynchronous() throws Exception { @Test public void testInvokeLambdaFunctionAsynchronousError() throws Exception { - InvokeConfig invokeConfig = new InvokeConfig("function", "{\"key1\": \"value1\"}", false, null); + InvokeConfig invokeConfig = new InvokeConfig("function", "alias","{\"key1\": \"value1\"}", false, null); when(awsLambdaClient.invoke(any(InvokeRequest.class))) .thenReturn(new InvokeResult().withFunctionError("Handled")); @@ -98,7 +98,7 @@ public void testInvokeLambdaFunctionSynchronous() throws Exception { final String requestPayload = "{\"key1\": \"value1\"}"; final String responsePayload = "{\"key2\": \"value2\"}"; - InvokeConfig invokeConfig = new InvokeConfig("function", requestPayload, true, null); + InvokeConfig invokeConfig = new InvokeConfig("function", "alias", requestPayload, true, null); InvokeResult invokeResult = new InvokeResult() .withLogResult(logBase64) @@ -138,7 +138,7 @@ public void testInvokeLambdaFunctionSynchronousError() throws Exception { final String requestPayload = "{\"key1\": \"value1\"}"; final String responsePayload = "{\"errorMessage\":\"event_fail\"}"; - InvokeConfig invokeConfig = new InvokeConfig("function", requestPayload, true, null); + InvokeConfig invokeConfig = new InvokeConfig("function", null, requestPayload, true, null); InvokeResult invokeResult = new InvokeResult() .withLogResult(logBase64)