fix lambda endpoint parsing (#1395)

* fix endpoint parsing

* add new unittest

* finish test
This commit is contained in:
Alexander Mohr 2018-03-21 22:14:10 -07:00 committed by Jack Danger
commit 941d817da4
3 changed files with 80 additions and 9 deletions

View file

@ -603,7 +603,7 @@ class LambdaBackend(BaseBackend):
def list_functions(self):
return self._lambdas.all()
def send_message(self, function_name, message, subject=None):
def send_message(self, function_name, message, subject=None, qualifier=None):
event = {
"Records": [
{
@ -636,8 +636,8 @@ class LambdaBackend(BaseBackend):
]
}
self._functions[function_name][-1].invoke(json.dumps(event), {}, {})
pass
func = self._lambdas.get_function(function_name, qualifier)
func.invoke(json.dumps(event), {}, {})
def list_tags(self, resource):
return self.get_function_by_arn(resource).tags

View file

@ -100,9 +100,21 @@ class Subscription(BaseModel):
requests.post(self.endpoint, json=post_data)
elif self.protocol == 'lambda':
# TODO: support bad function name
function_name = self.endpoint.split(":")[-1]
region = self.arn.split(':')[3]
lambda_backends[region].send_message(function_name, message, subject=subject)
# http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html
arr = self.endpoint.split(":")
region = arr[3]
qualifier = None
if len(arr) == 7:
assert arr[5] == 'function'
function_name = arr[-1]
elif len(arr) == 8:
assert arr[5] == 'function'
qualifier = arr[-1]
function_name = arr[-2]
else:
assert False
lambda_backends[region].send_message(function_name, message, subject=subject, qualifier=qualifier)
def _matches_filter_policy(self, message_attributes):
# TODO: support Anything-but matching, prefix matching and