@@ -296,6 +296,58 @@ def __init__(self, message):
296296 self .assertEqual (len (xray_fault ["paths" ]), 1 )
297297 self .assertTrue (xray_fault ["paths" ][0 ].endswith (os .path .relpath (__file__ )))
298298
299+ def test_handle_event_request_custom_empty_error_message_exception (self ):
300+ def raise_exception_handler (json_input , lambda_context ):
301+ class MyError (Exception ):
302+ def __init__ (self , message ):
303+ self .message = message
304+
305+ raise MyError ("" )
306+
307+ expected_response = {"errorType" : "MyError" , "errorMessage" : "" }
308+ bootstrap .handle_event_request (
309+ self .lambda_runtime ,
310+ raise_exception_handler ,
311+ "invoke_id" ,
312+ self .event_body ,
313+ "application/json" ,
314+ {},
315+ {},
316+ "invoked_function_arn" ,
317+ 0 ,
318+ bootstrap .StandardLogSink (),
319+ )
320+ args , _ = self .lambda_runtime .post_invocation_error .call_args
321+ error_response = json .loads (args [1 ])
322+ self .assertEqual (args [0 ], "invoke_id" )
323+ self .assertTrue (
324+ expected_response .items () <= error_response .items (),
325+ "Expected response is not a subset of the actual response\n Expected: {}\n Actual: {}" .format (
326+ expected_response , error_response
327+ ),
328+ )
329+ xray_fault = json .loads (args [2 ])
330+ self .assertEqual (xray_fault ["working_directory" ], self .working_directory )
331+ self .assertEqual (len (xray_fault ["exceptions" ]), 1 )
332+ self .assertEqual (
333+ xray_fault ["exceptions" ][0 ]["message" ], expected_response ["errorMessage" ]
334+ )
335+ self .assertEqual (
336+ xray_fault ["exceptions" ][0 ]["type" ], expected_response ["errorType" ]
337+ )
338+ self .assertEqual (len (xray_fault ["exceptions" ][0 ]["stack" ]), 1 )
339+ self .assertEqual (
340+ xray_fault ["exceptions" ][0 ]["stack" ][0 ]["label" ], "raise_exception_handler"
341+ )
342+ self .assertIsInstance (xray_fault ["exceptions" ][0 ]["stack" ][0 ]["line" ], int )
343+ self .assertTrue (
344+ xray_fault ["exceptions" ][0 ]["stack" ][0 ]["path" ].endswith (
345+ os .path .relpath (__file__ )
346+ )
347+ )
348+ self .assertEqual (len (xray_fault ["paths" ]), 1 )
349+ self .assertTrue (xray_fault ["paths" ][0 ].endswith (os .path .relpath (__file__ )))
350+
299351 def test_handle_event_request_no_module (self ):
300352 def unable_to_import_module (json_input , lambda_context ):
301353 import invalid_module
@@ -835,7 +887,9 @@ def test_log_error_standard_log_sink(self, mock_stdout):
835887 err_to_log = bootstrap .make_error ("Error message" , "ErrorType" , None )
836888 bootstrap .log_error (err_to_log , bootstrap .StandardLogSink ())
837889
838- expected_logged_error = "[ERROR] ErrorType: Error message\r Traceback (most recent call last):\n "
890+ expected_logged_error = (
891+ "[ERROR] ErrorType: Error message\r Traceback (most recent call last):\n "
892+ )
839893 self .assertEqual (mock_stdout .getvalue (), expected_logged_error )
840894
841895 def test_log_error_framed_log_sink (self ):
@@ -844,7 +898,9 @@ def test_log_error_framed_log_sink(self):
844898 err_to_log = bootstrap .make_error ("Error message" , "ErrorType" , None )
845899 bootstrap .log_error (err_to_log , log_sink )
846900
847- expected_logged_error = "[ERROR] ErrorType: Error message\n Traceback (most recent call last):"
901+ expected_logged_error = (
902+ "[ERROR] ErrorType: Error message\n Traceback (most recent call last):"
903+ )
848904
849905 with open (temp_file .name , "rb" ) as f :
850906 content = f .read ()
0 commit comments