2021-08-28 09:03:17 +00:00
|
|
|
import json
|
|
|
|
import time
|
|
|
|
import uuid
|
|
|
|
import boto3
|
2021-10-18 19:44:29 +00:00
|
|
|
import sure # noqa # pylint: disable=unused-import
|
2021-08-28 09:03:17 +00:00
|
|
|
from moto import mock_sqs, mock_lambda, mock_logs
|
|
|
|
|
|
|
|
from tests.test_awslambda.test_lambda import get_test_zip_file1, get_role_name
|
|
|
|
|
|
|
|
|
|
|
|
@mock_logs
|
|
|
|
@mock_lambda
|
|
|
|
@mock_sqs
|
|
|
|
def test_invoke_function_from_sqs_exception():
|
|
|
|
logs_conn = boto3.client("logs", region_name="us-east-1")
|
|
|
|
sqs = boto3.resource("sqs", region_name="us-east-1")
|
|
|
|
queue = sqs.create_queue(QueueName="test-sqs-queue1")
|
|
|
|
|
|
|
|
conn = boto3.client("lambda", region_name="us-east-1")
|
|
|
|
func = conn.create_function(
|
|
|
|
FunctionName="testFunction",
|
|
|
|
Runtime="python2.7",
|
|
|
|
Role=get_role_name(),
|
|
|
|
Handler="lambda_function.lambda_handler",
|
|
|
|
Code={"ZipFile": get_test_zip_file1()},
|
|
|
|
Description="test lambda function",
|
|
|
|
Timeout=3,
|
|
|
|
MemorySize=128,
|
|
|
|
Publish=True,
|
|
|
|
)
|
|
|
|
|
|
|
|
response = conn.create_event_source_mapping(
|
|
|
|
EventSourceArn=queue.attributes["QueueArn"], FunctionName=func["FunctionArn"]
|
|
|
|
)
|
|
|
|
|
|
|
|
assert response["EventSourceArn"] == queue.attributes["QueueArn"]
|
|
|
|
assert response["State"] == "Enabled"
|
|
|
|
|
|
|
|
entries = [
|
|
|
|
{
|
|
|
|
"Id": "1",
|
|
|
|
"MessageBody": json.dumps({"uuid": str(uuid.uuid4()), "test": "test"}),
|
|
|
|
}
|
|
|
|
]
|
|
|
|
|
|
|
|
queue.send_messages(Entries=entries)
|
|
|
|
|
|
|
|
start = time.time()
|
|
|
|
while (time.time() - start) < 30:
|
|
|
|
result = logs_conn.describe_log_streams(logGroupName="/aws/lambda/testFunction")
|
|
|
|
log_streams = result.get("logStreams")
|
|
|
|
if not log_streams:
|
|
|
|
time.sleep(1)
|
|
|
|
continue
|
|
|
|
assert len(log_streams) >= 1
|
|
|
|
|
|
|
|
result = logs_conn.get_log_events(
|
|
|
|
logGroupName="/aws/lambda/testFunction",
|
|
|
|
logStreamName=log_streams[0]["logStreamName"],
|
|
|
|
)
|
|
|
|
for event in result.get("events"):
|
|
|
|
if "custom log event" in event["message"]:
|
|
|
|
return
|
|
|
|
time.sleep(1)
|
|
|
|
|
|
|
|
assert False, "Test Failed"
|