Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -469,10 +469,37 @@ private void updateFunction(LambdaClient lambdaClient, Exchange exchange) throws

if (ObjectHelper.isEmpty(exchange.getIn().getBody())
&& ObjectHelper.isEmpty(exchange.getIn().getHeader(Lambda2Constants.S3_BUCKET))
&& ObjectHelper.isEmpty(exchange.getIn().getHeader(Lambda2Constants.S3_KEY))) {
&& ObjectHelper.isEmpty(exchange.getIn().getHeader(Lambda2Constants.S3_KEY))
&& ObjectHelper.isEmpty(exchange.getIn().getHeader(Lambda2Constants.ZIP_FILE))) {
throw new IllegalArgumentException("At least S3 bucket/S3 key or zip file must be specified");
}

if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(Lambda2Constants.S3_BUCKET))) {
String s3Bucket = exchange.getIn().getHeader(Lambda2Constants.S3_BUCKET, String.class);
builder.s3Bucket(s3Bucket);
}

if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(Lambda2Constants.S3_KEY))) {
String s3Key = exchange.getIn().getHeader(Lambda2Constants.S3_KEY, String.class);
builder.s3Key(s3Key);
}

if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(Lambda2Constants.S3_OBJECT_VERSION))) {
String s3ObjectVersion = exchange.getIn().getHeader(Lambda2Constants.S3_OBJECT_VERSION, String.class);
builder.s3ObjectVersion(s3ObjectVersion);
}

if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(Lambda2Constants.ZIP_FILE))) {
String zipFile = exchange.getIn().getHeader(Lambda2Constants.ZIP_FILE, String.class);
File fileLocalPath = new File(zipFile);
try (FileInputStream inputStream = new FileInputStream(fileLocalPath)) {
builder.zipFile(SdkBytes.fromInputStream(inputStream));
}
}
if (ObjectHelper.isNotEmpty(exchange.getIn().getBody())) {
builder.zipFile(SdkBytes.fromByteBuffer(exchange.getIn().getBody(ByteBuffer.class)));
}

if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(Lambda2Constants.PUBLISH))) {
Boolean publish = exchange.getIn().getHeader(Lambda2Constants.PUBLISH, Boolean.class);
builder.publish(publish);
Expand Down Expand Up @@ -531,7 +558,7 @@ private void deleteEventSourceMapping(LambdaClient lambdaClient, Exchange exchan
if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(Lambda2Constants.EVENT_SOURCE_UUID))) {
builder.uuid(exchange.getIn().getHeader(Lambda2Constants.EVENT_SOURCE_UUID, String.class));
} else {
throw new IllegalArgumentException("Event Source Arn must be specified");
throw new IllegalArgumentException("Event Source UUID must be specified");
}
request = builder.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,8 @@

public class AmazonLambdaClientMock implements LambdaClient {

public UpdateFunctionCodeRequest updateFunctionCodeRequest;

public AmazonLambdaClientMock() {
}

Expand Down Expand Up @@ -319,6 +321,7 @@ public UntagResourceResponse untagResource(UntagResourceRequest untagResourceReq

@Override
public UpdateFunctionCodeResponse updateFunctionCode(UpdateFunctionCodeRequest updateFunctionCodeRequest) {
this.updateFunctionCodeRequest = updateFunctionCodeRequest;
UpdateFunctionCodeResponse.Builder result = UpdateFunctionCodeResponse.builder();

result.functionName(updateFunctionCodeRequest.functionName());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,29 @@ public void process(Exchange exchange) throws Exception {
assertNotNull(result.codeSha256());
}

@Test
public void lambdaUpdateFunctionTest() throws Exception {

Exchange exchange = template.send("direct:updateFunction", ExchangePattern.InOut, new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(
classLoader.getResource("org/apache/camel/component/aws2/lambda/function/node/GetHelloWithName.zip")
.getFile());
FileInputStream inputStream = new FileInputStream(file);
exchange.getIn().setBody(inputStream);
}
});

assertNotNull(exchange.getMessage().getBody());
// the fix: the code source (the zip taken from the body) must actually reach the request,
// otherwise AWS rejects UpdateFunctionCode with "Please provide a source for function code."
assertNotNull(clientMock.updateFunctionCodeRequest);
assertEquals("GetHelloWithName", clientMock.updateFunctionCodeRequest.functionName());
assertNotNull(clientMock.updateFunctionCodeRequest.zipFile());
}

@Test
public void lambdaDeleteFunctionTest() {

Expand Down