Add/improve Lambda coverage - no functionality changes

This commit is contained in:
Bert Blommers 2019-11-15 16:34:14 +00:00
parent 1f6b600d49
commit 42311c40ad
4 changed files with 63 additions and 38 deletions

View File

@ -3977,46 +3977,46 @@
- [ ] update_resource
## lambda
0% implemented
41% implemented
- [ ] add_layer_version_permission
- [ ] add_permission
- [ ] create_alias
- [ ] create_event_source_mapping
- [ ] create_function
- [X] create_event_source_mapping
- [X] create_function
- [ ] delete_alias
- [ ] delete_event_source_mapping
- [ ] delete_function
- [X] delete_event_source_mapping
- [X] delete_function
- [ ] delete_function_concurrency
- [ ] delete_layer_version
- [ ] get_account_settings
- [ ] get_alias
- [ ] get_event_source_mapping
- [ ] get_function
- [X] get_event_source_mapping
- [X] get_function
- [ ] get_function_configuration
- [ ] get_layer_version
- [ ] get_layer_version_by_arn
- [ ] get_layer_version_policy
- [ ] get_policy
- [ ] invoke
- [X] invoke
- [ ] invoke_async
- [ ] list_aliases
- [ ] list_event_source_mappings
- [ ] list_functions
- [X] list_event_source_mappings
- [X] list_functions
- [ ] list_layer_versions
- [ ] list_layers
- [ ] list_tags
- [ ] list_versions_by_function
- [X] list_tags
- [X] list_versions_by_function
- [ ] publish_layer_version
- [ ] publish_version
- [ ] put_function_concurrency
- [ ] remove_layer_version_permission
- [ ] remove_permission
- [ ] tag_resource
- [ ] untag_resource
- [X] tag_resource
- [X] untag_resource
- [ ] update_alias
- [ ] update_event_source_mapping
- [ ] update_function_code
- [ ] update_function_configuration
- [X] update_event_source_mapping
- [X] update_function_code
- [X] update_function_configuration
## lex-models
0% implemented

View File

@ -979,6 +979,32 @@ class LambdaBackend(BaseBackend):
def add_policy(self, function_name, policy):
self.get_function(function_name).policy = policy
def update_function_code(self, function_name, qualifier, body):
fn = self.get_function(function_name, qualifier)
if fn:
if body.get("Publish", False):
fn = self.publish_function(function_name)
config = fn.update_function_code(body)
return config
else:
return None
def update_function_configuration(self, function_name, qualifier, body):
fn = self.get_function(function_name, qualifier)
return fn.update_configuration(body) if fn else None
def invoke(self, function_name, qualifier, body, headers, response_headers):
fn = self.get_function(function_name, qualifier)
if fn:
payload = fn.invoke(body, headers, response_headers)
response_headers["Content-Length"] = str(len(payload))
return response_headers, payload
else:
return response_headers, None
def do_validate_s3():
return os.environ.get("VALIDATE_LAMBDA_S3", "") in ["", "1", "true"]

View File

@ -168,10 +168,10 @@ class LambdaResponse(BaseResponse):
function_name = self.path.rsplit("/", 2)[-2]
qualifier = self._get_param("qualifier")
fn = self.lambda_backend.get_function(function_name, qualifier)
if fn:
payload = fn.invoke(self.body, self.headers, response_headers)
response_headers["Content-Length"] = str(len(payload))
response_header, payload = self.lambda_backend.invoke(
function_name, qualifier, self.body, self.headers, response_headers
)
if payload:
return 202, response_headers, payload
else:
return 404, response_headers, "{}"
@ -337,26 +337,23 @@ class LambdaResponse(BaseResponse):
def _put_configuration(self, request):
function_name = self.path.rsplit("/", 2)[-2]
qualifier = self._get_param("Qualifier", None)
resp = self.lambda_backend.update_function_configuration(
function_name, qualifier, body=self.json_body
)
fn = self.lambda_backend.get_function(function_name, qualifier)
if fn:
config = fn.update_configuration(self.json_body)
return 200, {}, json.dumps(config)
if resp:
return 200, {}, json.dumps(resp)
else:
return 404, {}, "{}"
def _put_code(self):
function_name = self.path.rsplit("/", 2)[-2]
qualifier = self._get_param("Qualifier", None)
resp = self.lambda_backend.update_function_code(
function_name, qualifier, body=self.json_body
)
fn = self.lambda_backend.get_function(function_name, qualifier)
if fn:
if self.json_body.get("Publish", False):
fn = self.lambda_backend.publish_function(function_name)
config = fn.update_function_code(self.json_body)
return 200, {}, json.dumps(config)
if resp:
return 200, {}, json.dumps(resp)
else:
return 404, {}, "{}"

View File

@ -7,16 +7,18 @@ import boto3
script_dir = os.path.dirname(os.path.abspath(__file__))
alternative_service_names = {'lambda': 'awslambda'}
def get_moto_implementation(service_name):
service_name_standardized = service_name.replace("-", "") if "-" in service_name else service_name
if not hasattr(moto, service_name_standardized):
service_name = service_name.replace("-", "") if "-" in service_name else service_name
alt_service_name = alternative_service_names[service_name] if service_name in alternative_service_names else service_name
if not hasattr(moto, alt_service_name):
return None
module = getattr(moto, service_name_standardized)
module = getattr(moto, alt_service_name)
if module is None:
return None
mock = getattr(module, "mock_{}".format(service_name_standardized))
mock = getattr(module, "mock_{}".format(service_name))
if mock is None:
return None
backends = list(mock().backends.values())