blob: 59d52463724f55664df600e2f19c8c52521a1d9f [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.camel.component.aws.lambda;
import java.nio.*;
import java.nio.charset.StandardCharsets;
import java.util.*;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.AmazonWebServiceRequest;
import com.amazonaws.ResponseMetadata;
import com.amazonaws.regions.Region;
import com.amazonaws.services.lambda.AbstractAWSLambda;
import com.amazonaws.services.lambda.model.AddPermissionRequest;
import com.amazonaws.services.lambda.model.AddPermissionResult;
import com.amazonaws.services.lambda.model.CreateAliasRequest;
import com.amazonaws.services.lambda.model.CreateAliasResult;
import com.amazonaws.services.lambda.model.CreateEventSourceMappingRequest;
import com.amazonaws.services.lambda.model.CreateEventSourceMappingResult;
import com.amazonaws.services.lambda.model.CreateFunctionRequest;
import com.amazonaws.services.lambda.model.CreateFunctionResult;
import com.amazonaws.services.lambda.model.DeleteAliasRequest;
import com.amazonaws.services.lambda.model.DeleteAliasResult;
import com.amazonaws.services.lambda.model.DeleteEventSourceMappingRequest;
import com.amazonaws.services.lambda.model.DeleteEventSourceMappingResult;
import com.amazonaws.services.lambda.model.DeleteFunctionConcurrencyRequest;
import com.amazonaws.services.lambda.model.DeleteFunctionConcurrencyResult;
import com.amazonaws.services.lambda.model.DeleteFunctionRequest;
import com.amazonaws.services.lambda.model.DeleteFunctionResult;
import com.amazonaws.services.lambda.model.EventSourceMappingConfiguration;
import com.amazonaws.services.lambda.model.FunctionConfiguration;
import com.amazonaws.services.lambda.model.GetAccountSettingsRequest;
import com.amazonaws.services.lambda.model.GetAccountSettingsResult;
import com.amazonaws.services.lambda.model.GetAliasRequest;
import com.amazonaws.services.lambda.model.GetAliasResult;
import com.amazonaws.services.lambda.model.GetEventSourceMappingRequest;
import com.amazonaws.services.lambda.model.GetEventSourceMappingResult;
import com.amazonaws.services.lambda.model.GetFunctionConfigurationRequest;
import com.amazonaws.services.lambda.model.GetFunctionConfigurationResult;
import com.amazonaws.services.lambda.model.GetFunctionRequest;
import com.amazonaws.services.lambda.model.GetFunctionResult;
import com.amazonaws.services.lambda.model.GetPolicyRequest;
import com.amazonaws.services.lambda.model.GetPolicyResult;
import com.amazonaws.services.lambda.model.InvokeAsyncRequest;
import com.amazonaws.services.lambda.model.InvokeAsyncResult;
import com.amazonaws.services.lambda.model.InvokeRequest;
import com.amazonaws.services.lambda.model.InvokeResult;
import com.amazonaws.services.lambda.model.ListAliasesRequest;
import com.amazonaws.services.lambda.model.ListAliasesResult;
import com.amazonaws.services.lambda.model.ListEventSourceMappingsRequest;
import com.amazonaws.services.lambda.model.ListEventSourceMappingsResult;
import com.amazonaws.services.lambda.model.ListFunctionsRequest;
import com.amazonaws.services.lambda.model.ListFunctionsResult;
import com.amazonaws.services.lambda.model.ListTagsRequest;
import com.amazonaws.services.lambda.model.ListTagsResult;
import com.amazonaws.services.lambda.model.ListVersionsByFunctionRequest;
import com.amazonaws.services.lambda.model.ListVersionsByFunctionResult;
import com.amazonaws.services.lambda.model.PublishVersionRequest;
import com.amazonaws.services.lambda.model.PublishVersionResult;
import com.amazonaws.services.lambda.model.PutFunctionConcurrencyRequest;
import com.amazonaws.services.lambda.model.PutFunctionConcurrencyResult;
import com.amazonaws.services.lambda.model.RemovePermissionRequest;
import com.amazonaws.services.lambda.model.RemovePermissionResult;
import com.amazonaws.services.lambda.model.Runtime;
import com.amazonaws.services.lambda.model.TagResourceRequest;
import com.amazonaws.services.lambda.model.TagResourceResult;
import com.amazonaws.services.lambda.model.TracingConfigResponse;
import com.amazonaws.services.lambda.model.TracingMode;
import com.amazonaws.services.lambda.model.UntagResourceRequest;
import com.amazonaws.services.lambda.model.UntagResourceResult;
import com.amazonaws.services.lambda.model.UpdateAliasRequest;
import com.amazonaws.services.lambda.model.UpdateAliasResult;
import com.amazonaws.services.lambda.model.UpdateEventSourceMappingRequest;
import com.amazonaws.services.lambda.model.UpdateEventSourceMappingResult;
import com.amazonaws.services.lambda.model.UpdateFunctionCodeRequest;
import com.amazonaws.services.lambda.model.UpdateFunctionCodeResult;
import com.amazonaws.services.lambda.model.UpdateFunctionConfigurationRequest;
import com.amazonaws.services.lambda.model.UpdateFunctionConfigurationResult;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.joda.time.DateTime;
public class AmazonLambdaClientMock extends AbstractAWSLambda {
public AmazonLambdaClientMock() {
super();
}
@Override
public AddPermissionResult addPermission(AddPermissionRequest addPermissionRequest) {
throw new UnsupportedOperationException();
}
@Override
public CreateAliasResult createAlias(CreateAliasRequest createAliasRequest) {
throw new UnsupportedOperationException();
}
@Override
public CreateEventSourceMappingResult createEventSourceMapping(CreateEventSourceMappingRequest createEventSourceMappingRequest) {
CreateEventSourceMappingResult result = new CreateEventSourceMappingResult();
result.setBatchSize(100);
result.setFunctionArn("arn:aws:lambda:eu-central-1:643534317684:function:" + createEventSourceMappingRequest.getFunctionName());
result.setState("Enabled");
result.setEventSourceArn("arn:aws:sqs:eu-central-1:643534317684:testqueue");
return result;
}
@Override
public CreateFunctionResult createFunction(CreateFunctionRequest createFunctionRequest) {
CreateFunctionResult result = new CreateFunctionResult();
result.setFunctionName(createFunctionRequest.getFunctionName());
result.setDeadLetterConfig(createFunctionRequest.getDeadLetterConfig());
result.setDescription(createFunctionRequest.getDescription());
result.setHandler(createFunctionRequest.getHandler());
result.setFunctionArn("arn:aws:lambda:eu-central-1:643534317684:function:" + createFunctionRequest.getFunctionName());
try {
Runtime runtime = Runtime.fromValue(createFunctionRequest.getRuntime());
result.setRuntime(runtime);
} catch (Exception e) {
throw new AmazonServiceException("validation error detected: Value '"
+ createFunctionRequest.getRuntime()
+ "' at 'runtime' failed to satisfy constraint: Member must satisfy enum value set: [java8, nodejs, nodejs4.3, nodejs6.10, python2.7, python3.6, dotnetcore1.0]");
}
result.setRole("arn:aws:iam::643534317684:role/" + createFunctionRequest.getRole());
result.setCodeSize(340L);
result.setCodeSha256("PKt5ygvZ6G8vWJASlWIypsBmKzAdmRrvTO");
result.setMemorySize(128);
result.setTimeout(3);
result.setLastModified(DateTime.now().toString());
result.setVersion("$LATEST");
result.setTracingConfig(new TracingConfigResponse().withMode(TracingMode.PassThrough));
return result;
}
@Override
public DeleteAliasResult deleteAlias(DeleteAliasRequest deleteAliasRequest) {
throw new UnsupportedOperationException();
}
@Override
public DeleteEventSourceMappingResult deleteEventSourceMapping(DeleteEventSourceMappingRequest deleteEventSourceMappingRequest) {
DeleteEventSourceMappingResult result = new DeleteEventSourceMappingResult();
result.setUUID("a1239494949382882383");
result.setState("Deleting");
return result;
}
@Override
public DeleteFunctionResult deleteFunction(DeleteFunctionRequest deleteFunctionRequest) {
return new DeleteFunctionResult();
}
@Override
public GetAccountSettingsResult getAccountSettings(GetAccountSettingsRequest getAccountSettingsRequest) {
throw new UnsupportedOperationException();
}
@Override
public GetAliasResult getAlias(GetAliasRequest getAliasRequest) {
throw new UnsupportedOperationException();
}
@Override
public GetEventSourceMappingResult getEventSourceMapping(GetEventSourceMappingRequest getEventSourceMappingRequest) {
throw new UnsupportedOperationException();
}
@Override
public GetFunctionResult getFunction(GetFunctionRequest getFunctionRequest) {
GetFunctionResult result = new GetFunctionResult();
FunctionConfiguration configuration = new FunctionConfiguration();
configuration.setFunctionName(getFunctionRequest.getFunctionName());
configuration.setFunctionArn("arn:aws:lambda:eu-central-1:643534317684:function:" + getFunctionRequest.getFunctionName());
configuration.setRuntime("nodejs6.10");
configuration.setRole("arn:aws:iam::643534317684:role/lambda-execution-role");
configuration.setHandler(getFunctionRequest.getFunctionName() + ".handler");
configuration.setCodeSize(640L);
configuration.setCodeSha256("PKt5ygvZ6G8vWJASlWIypsBmKzAdmRrvTO/eBH06mBA=");
configuration.setMemorySize(128);
configuration.setTimeout(3);
configuration.setLastModified(DateTime.now().toString());
configuration.setVersion("$LATEST");
configuration.setTracingConfig(new TracingConfigResponse().withMode(TracingMode.PassThrough));
result.setConfiguration(configuration);
return result;
}
@Override
public GetFunctionConfigurationResult getFunctionConfiguration(GetFunctionConfigurationRequest getFunctionConfigurationRequest) {
throw new UnsupportedOperationException();
}
@Override
public GetPolicyResult getPolicy(GetPolicyRequest getPolicyRequest) {
throw new UnsupportedOperationException();
}
@Override
public InvokeResult invoke(InvokeRequest invokeRequest) {
InvokeResult result = new InvokeResult();
Map<String, Object> payload = new HashMap<>();
try {
ObjectMapper mapper = new ObjectMapper();
payload = mapper.readValue(StandardCharsets.UTF_8.decode(invokeRequest.getPayload()).toString(), new TypeReference<Map<String, String>>() {
});
} catch (Exception e) {
}
String responsePayload = "{\"Hello\":\"" + payload.get("name") + "\"}";
result.setPayload(ByteBuffer.wrap(responsePayload.getBytes()));
return result;
}
@Override
public ListAliasesResult listAliases(ListAliasesRequest listAliasesRequest) {
throw new UnsupportedOperationException();
}
@Override
public ListEventSourceMappingsResult listEventSourceMappings(ListEventSourceMappingsRequest listEventSourceMappingsRequest) {
ListEventSourceMappingsResult result = new ListEventSourceMappingsResult();
List<EventSourceMappingConfiguration> confList = new ArrayList<EventSourceMappingConfiguration>();
EventSourceMappingConfiguration conf = new EventSourceMappingConfiguration();
conf.setBatchSize(100);
conf.setFunctionArn("arn:aws:lambda:eu-central-1:643534317684:function:" + listEventSourceMappingsRequest.getFunctionName());
conf.setState("Enabled");
conf.setEventSourceArn("arn:aws:sqs:eu-central-1:643534317684:testqueue");
confList.add(conf);
result.setEventSourceMappings(confList);
return result;
}
@Override
public ListEventSourceMappingsResult listEventSourceMappings() {
throw new UnsupportedOperationException();
}
@Override
public ListFunctionsResult listFunctions(ListFunctionsRequest listFunctionsRequest) {
throw new UnsupportedOperationException();
}
@Override
public ListFunctionsResult listFunctions() {
ListFunctionsResult result = new ListFunctionsResult();
Collection<FunctionConfiguration> listFunctions = new ArrayList<>();
FunctionConfiguration configuration = new FunctionConfiguration();
configuration.setFunctionName("GetHelloWithName");
configuration.setFunctionArn("arn:aws:lambda:eu-central-1:643534317684:function:GetHelloWithName");
configuration.setRuntime("nodejs6.10");
configuration.setRole("arn:aws:iam::643534317684:role/lambda-execution-role");
configuration.setHandler("GetHelloWithName.handler");
configuration.setCodeSize(640L);
configuration.setCodeSha256("PKt5ygvZ6G8vWJASlWIypsBmKzAdmRrvTO/eBH06mBA=");
configuration.setMemorySize(128);
configuration.setTimeout(3);
configuration.setLastModified(DateTime.now().toString());
configuration.setVersion("$LATEST");
configuration.setTracingConfig(new TracingConfigResponse().withMode(TracingMode.PassThrough));
listFunctions.add(configuration);
result.setFunctions(listFunctions);
return result;
}
@Override
public ListTagsResult listTags(ListTagsRequest listTagsRequest) {
ListTagsResult result = new ListTagsResult();
result.addTagsEntry("test", "lambda-tag");
return result;
}
@Override
public ListVersionsByFunctionResult listVersionsByFunction(ListVersionsByFunctionRequest listVersionsByFunctionRequest) {
ListVersionsByFunctionResult res = new ListVersionsByFunctionResult();
FunctionConfiguration conf = new FunctionConfiguration();
conf.setVersion("1");
conf.setFunctionName(listVersionsByFunctionRequest.getFunctionName());
res.setVersions(Collections.singleton(conf));
return res;
}
@Override
public PublishVersionResult publishVersion(PublishVersionRequest publishVersionRequest) {
PublishVersionResult res = new PublishVersionResult();
res.setFunctionName(publishVersionRequest.getFunctionName());
res.setDescription(publishVersionRequest.getDescription());
return res;
}
@Override
public RemovePermissionResult removePermission(RemovePermissionRequest removePermissionRequest) {
throw new UnsupportedOperationException();
}
@Override
public TagResourceResult tagResource(TagResourceRequest tagResourceRequest) {
TagResourceResult res = new TagResourceResult();
return res;
}
@Override
public UntagResourceResult untagResource(UntagResourceRequest untagResourceRequest) {
UntagResourceResult res = new UntagResourceResult();
return res;
}
@Override
public UpdateAliasResult updateAlias(UpdateAliasRequest updateAliasRequest) {
throw new UnsupportedOperationException();
}
@Override
public UpdateEventSourceMappingResult updateEventSourceMapping(UpdateEventSourceMappingRequest updateEventSourceMappingRequest) {
throw new UnsupportedOperationException();
}
@Override
public UpdateFunctionCodeResult updateFunctionCode(UpdateFunctionCodeRequest updateFunctionCodeRequest) {
UpdateFunctionCodeResult result = new UpdateFunctionCodeResult();
result.setFunctionName(updateFunctionCodeRequest.getFunctionName());
result.setFunctionArn("arn:aws:lambda:eu-central-1:643534317684:function:" + updateFunctionCodeRequest.getFunctionName());
result.setCodeSize(340L);
result.setCodeSha256("PKt5ygvZ6G8vWJASlWIypsBmKzAdmRrvTO");
result.setMemorySize(128);
result.setTimeout(3);
result.setLastModified(DateTime.now().toString());
result.setVersion("$LATEST");
result.setTracingConfig(new TracingConfigResponse().withMode(TracingMode.PassThrough));
return result;
}
@Override
public UpdateFunctionConfigurationResult updateFunctionConfiguration(UpdateFunctionConfigurationRequest updateFunctionConfigurationRequest) {
throw new UnsupportedOperationException();
}
@Override
public ResponseMetadata getCachedResponseMetadata(AmazonWebServiceRequest amazonWebServiceRequest) {
throw new UnsupportedOperationException();
}
@Override
public void setEndpoint(String endpoint) {
}
@Override
public void setRegion(Region region) {
}
@Override
public DeleteFunctionConcurrencyResult deleteFunctionConcurrency(DeleteFunctionConcurrencyRequest deleteFunctionConcurrencyRequest) {
throw new UnsupportedOperationException();
}
@Override
public InvokeAsyncResult invokeAsync(InvokeAsyncRequest invokeAsyncRequest) {
throw new UnsupportedOperationException();
}
@Override
public PutFunctionConcurrencyResult putFunctionConcurrency(PutFunctionConcurrencyRequest putFunctionConcurrencyRequest) {
throw new UnsupportedOperationException();
}
@Override
public void shutdown() {
throw new UnsupportedOperationException();
}
}