def test_log_error_invokeId_line_framed_log_sink(self): with NamedTemporaryFile() as temp_file: with bootstrap.FramedTelemetryLogSink(temp_file.name) as log_sink: err_to_log = bootstrap.make_error( "Error message", "ErrorType", ["line1", "", "line2"], "testrequestId", ) bootstrap.log_error(err_to_log, log_sink) expected_logged_error = ( "[ERROR] ErrorType: Error message\nTraceback " "(most recent call last):\nline1\n\nline2") with open(temp_file.name, "rb") as f: content = f.read() frame_type = int.from_bytes(content[:4], "big") self.assertEqual(frame_type, 0xA55A0001) length = int.from_bytes(content[4:8], "big") self.assertEqual(length, len(expected_logged_error)) actual_message = content[8:].decode() self.assertEqual(actual_message, expected_logged_error)
def test_multiple_frame(self): with NamedTemporaryFile() as temp_file: first_message = "hello world\nsomething on a new line!" second_message = "hello again\nhere's another message\n" with bootstrap.FramedTelemetryLogSink(temp_file.name) as ls: ls.log(first_message) ls.log(second_message) with open(temp_file.name, "rb") as f: content = f.read() pos = 0 for message in [first_message, second_message]: frame_type = int.from_bytes(content[pos:pos + 4], "big") self.assertEqual(frame_type, 0xA55A0001) pos += 4 length = int.from_bytes(content[pos:pos + 4], "big") self.assertEqual(length, len(message)) pos += 4 actual_message = content[pos:pos + len(message)].decode() self.assertEqual(actual_message, message) pos += len(message) self.assertEqual(content[pos:], b"")
def test_log_error_indentation_framed_log_sink(self): with NamedTemporaryFile() as temp_file: with bootstrap.FramedTelemetryLogSink( os.open(temp_file.name, os.O_CREAT | os.O_RDWR)) as log_sink: err_to_log = bootstrap.make_error( "Error message", "ErrorType", [" line1 ", " line2 ", " "]) bootstrap.log_error(err_to_log, log_sink) expected_logged_error = ( "[ERROR] ErrorType: Error message\nTraceback (most recent call last):" "\n\xa0\xa0line1 \n\xa0\xa0line2 \n\xa0\xa0") with open(temp_file.name, "rb") as f: content = f.read() frame_type = int.from_bytes(content[:4], "big") self.assertEqual(frame_type, 0xA55A0001) length = int.from_bytes(content[4:8], "big") self.assertEqual(length, len(expected_logged_error.encode("utf8"))) actual_message = content[8:].decode() self.assertEqual(actual_message, expected_logged_error)
def test_single_frame(self): with NamedTemporaryFile() as temp_file: message = "hello world\nsomething on a new line!\n" with bootstrap.FramedTelemetryLogSink(temp_file.name) as ls: ls.log(message) with open(temp_file.name, "rb") as f: content = f.read() frame_type = int.from_bytes(content[:4], "big") self.assertEqual(frame_type, 0xA55A0001) length = int.from_bytes(content[4:8], "big") self.assertEqual(length, len(message)) actual_message = content[8:].decode() self.assertEqual(actual_message, message)
def test_log_error_framed_log_sink(self): with NamedTemporaryFile() as temp_file: with bootstrap.FramedTelemetryLogSink(temp_file.name) as log_sink: err_to_log = bootstrap.make_error("Error message", "ErrorType", None) bootstrap.log_error(err_to_log, log_sink) expected_logged_error = "[ERROR] ErrorType: Error message" with open(temp_file.name, "rb") as f: content = f.read() frame_type = int.from_bytes(content[:4], "big") self.assertEqual(frame_type, 0xA55A0001) length = int.from_bytes(content[4:8], "big") self.assertEqual(length, len(expected_logged_error.encode("utf8"))) actual_message = content[8:].decode() self.assertEqual(actual_message, expected_logged_error)