| 
									
										
										
										
											2021-08-28 10:03:17 +01: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 10:03:17 +01: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" |