def test_it_gracefully_handles_client_errors(mock_emit, mock_sanitize): sqs_message = MagicMock() mock_emit.side_effect = ClientError({}, "PutItem") handle_error(sqs_message, "{}", "Some error") # Verify it attempts to emit the failure mock_sanitize.assert_called() mock_emit.assert_called() # Verify even if emitting fails, the message visibility changes sqs_message.change_visibility.assert_called()
def test_it_gracefully_handles_invalid_job_id(mock_emit, mock_sanitize): sqs_message = MagicMock() mock_emit.side_effect = KeyError("Invalid Job ID") handle_error(sqs_message, "{}", "Some error") # Verify it attempts to emit the failure mock_sanitize.assert_called() mock_emit.assert_called() # Verify even if emitting fails, the message visibility changes sqs_message.change_visibility.assert_called()
def test_it_gracefully_handles_change_message_visibility_failure(mock_emit): sqs_message = MagicMock() e = boto3.client("sqs").exceptions.ReceiptHandleIsInvalid sqs_message.meta.client.exceptions.MessageNotInflight = e sqs_message.meta.client.exceptions.ReceiptHandleIsInvalid = e sqs_message.change_visibility.side_effect = e({}, "ReceiptHandleIsInvalid") handle_error(sqs_message, "{}", "Some error") # Verify it attempts to emit the failure mock_emit.assert_called() sqs_message.change_visibility.assert_called() # Implicit graceful handling
def test_it_doesnt_change_message_visibility_when_rollback_fails( mock_emit, mock_sanitize): sqs_message = MagicMock() mock_emit.side_effect = ClientError({}, "DeleteObjectVersion") handle_error(sqs_message, "{}", "Some error", "ObjectRollbackFailed", False) # Verify it attempts to emit the failure mock_sanitize.assert_called() mock_emit.assert_called() # Verify that the visibility doesn't change for a rollback event sqs_message.change_visibility.assert_not_called()
def test_error_handler(mock_emit): msg = MagicMock() handle_error(msg, "{}", "Test Error") mock_emit.assert_called_with("{}", "Test Error", "ObjectUpdateFailed") msg.change_visibility.assert_called_with(VisibilityTimeout=0)