77import  os 
88import  re 
99import  tempfile 
10+ import  time 
1011import  traceback 
1112import  unittest 
1213from  io  import  StringIO 
@@ -914,11 +915,13 @@ def test_log_error_standard_log_sink(self, mock_stdout):
914915
915916    def  test_log_error_framed_log_sink (self ):
916917        with  NamedTemporaryFile () as  temp_file :
918+             before  =  int (time .time_ns () /  1000 )
917919            with  bootstrap .FramedTelemetryLogSink (
918920                os .open (temp_file .name , os .O_CREAT  |  os .O_RDWR )
919921            ) as  log_sink :
920922                err_to_log  =  bootstrap .make_error ("Error message" , "ErrorType" , None )
921923                bootstrap .log_error (err_to_log , log_sink )
924+             after  =  int (time .time_ns () /  1000 )
922925
923926            expected_logged_error  =  (
924927                "[ERROR] ErrorType: Error message\n Traceback (most recent call last):" 
@@ -928,12 +931,16 @@ def test_log_error_framed_log_sink(self):
928931                content  =  f .read ()
929932
930933                frame_type  =  int .from_bytes (content [:4 ], "big" )
931-                 self .assertEqual (frame_type , 0xA55A0001 )
934+                 self .assertEqual (frame_type , 0xA55A0003 )
932935
933936                length  =  int .from_bytes (content [4 :8 ], "big" )
934937                self .assertEqual (length , len (expected_logged_error .encode ("utf8" )))
935938
936-                 actual_message  =  content [8 :].decode ()
939+                 timestamp  =  int .from_bytes (content [8 :16 ], "big" )
940+                 self .assertTrue (before  <=  timestamp )
941+                 self .assertTrue (timestamp  <=  after )
942+ 
943+                 actual_message  =  content [16 :].decode ()
937944                self .assertEqual (actual_message , expected_logged_error )
938945
939946    @patch ("sys.stdout" , new_callable = StringIO ) 
@@ -951,13 +958,15 @@ def test_log_error_indentation_standard_log_sink(self, mock_stdout):
951958
952959    def  test_log_error_indentation_framed_log_sink (self ):
953960        with  NamedTemporaryFile () as  temp_file :
961+             before  =  int (time .time_ns () /  1000 )
954962            with  bootstrap .FramedTelemetryLogSink (
955963                os .open (temp_file .name , os .O_CREAT  |  os .O_RDWR )
956964            ) as  log_sink :
957965                err_to_log  =  bootstrap .make_error (
958966                    "Error message" , "ErrorType" , ["  line1  " , "  line2  " , "  " ]
959967                )
960968                bootstrap .log_error (err_to_log , log_sink )
969+             after  =  int (time .time_ns () /  1000 )
961970
962971            expected_logged_error  =  (
963972                "[ERROR] ErrorType: Error message\n Traceback (most recent call last):" 
@@ -968,12 +977,16 @@ def test_log_error_indentation_framed_log_sink(self):
968977                content  =  f .read ()
969978
970979                frame_type  =  int .from_bytes (content [:4 ], "big" )
971-                 self .assertEqual (frame_type , 0xA55A0001 )
980+                 self .assertEqual (frame_type , 0xA55A0003 )
972981
973982                length  =  int .from_bytes (content [4 :8 ], "big" )
974983                self .assertEqual (length , len (expected_logged_error .encode ("utf8" )))
975984
976-                 actual_message  =  content [8 :].decode ()
985+                 timestamp  =  int .from_bytes (content [8 :16 ], "big" )
986+                 self .assertTrue (before  <=  timestamp )
987+                 self .assertTrue (timestamp  <=  after )
988+ 
989+                 actual_message  =  content [16 :].decode ()
977990                self .assertEqual (actual_message , expected_logged_error )
978991
979992    @patch ("sys.stdout" , new_callable = StringIO ) 
@@ -988,13 +1001,15 @@ def test_log_error_empty_stacktrace_line_standard_log_sink(self, mock_stdout):
9881001
9891002    def  test_log_error_empty_stacktrace_line_framed_log_sink (self ):
9901003        with  NamedTemporaryFile () as  temp_file :
1004+             before  =  int (time .time_ns () /  1000 )
9911005            with  bootstrap .FramedTelemetryLogSink (
9921006                os .open (temp_file .name , os .O_CREAT  |  os .O_RDWR )
9931007            ) as  log_sink :
9941008                err_to_log  =  bootstrap .make_error (
9951009                    "Error message" , "ErrorType" , ["line1" , "" , "line2" ]
9961010                )
9971011                bootstrap .log_error (err_to_log , log_sink )
1012+             after  =  int (time .time_ns () /  1000 )
9981013
9991014            expected_logged_error  =  (
10001015                "[ERROR] ErrorType: Error message\n Traceback " 
@@ -1005,17 +1020,22 @@ def test_log_error_empty_stacktrace_line_framed_log_sink(self):
10051020                content  =  f .read ()
10061021
10071022                frame_type  =  int .from_bytes (content [:4 ], "big" )
1008-                 self .assertEqual (frame_type , 0xA55A0001 )
1023+                 self .assertEqual (frame_type , 0xA55A0003 )
10091024
10101025                length  =  int .from_bytes (content [4 :8 ], "big" )
10111026                self .assertEqual (length , len (expected_logged_error ))
10121027
1013-                 actual_message  =  content [8 :].decode ()
1028+                 timestamp  =  int .from_bytes (content [8 :16 ], "big" )
1029+                 self .assertTrue (before  <=  timestamp )
1030+                 self .assertTrue (timestamp  <=  after )
1031+ 
1032+                 actual_message  =  content [16 :].decode ()
10141033                self .assertEqual (actual_message , expected_logged_error )
10151034
10161035    # Just to ensure we are not logging the requestId from error response, just sending in the response 
10171036    def  test_log_error_invokeId_line_framed_log_sink (self ):
10181037        with  NamedTemporaryFile () as  temp_file :
1038+             before  =  int (time .time_ns () /  1000 )
10191039            with  bootstrap .FramedTelemetryLogSink (
10201040                os .open (temp_file .name , os .O_CREAT  |  os .O_RDWR )
10211041            ) as  log_sink :
@@ -1026,6 +1046,7 @@ def test_log_error_invokeId_line_framed_log_sink(self):
10261046                    "testrequestId" ,
10271047                )
10281048                bootstrap .log_error (err_to_log , log_sink )
1049+             after  =  int (time .time_ns () /  1000 )
10291050
10301051            expected_logged_error  =  (
10311052                "[ERROR] ErrorType: Error message\n Traceback " 
@@ -1036,12 +1057,16 @@ def test_log_error_invokeId_line_framed_log_sink(self):
10361057                content  =  f .read ()
10371058
10381059                frame_type  =  int .from_bytes (content [:4 ], "big" )
1039-                 self .assertEqual (frame_type , 0xA55A0001 )
1060+                 self .assertEqual (frame_type , 0xA55A0003 )
10401061
10411062                length  =  int .from_bytes (content [4 :8 ], "big" )
10421063                self .assertEqual (length , len (expected_logged_error ))
10431064
1044-                 actual_message  =  content [8 :].decode ()
1065+                 timestamp  =  int .from_bytes (content [8 :16 ], "big" )
1066+                 self .assertTrue (before  <=  timestamp )
1067+                 self .assertTrue (timestamp  <=  after )
1068+ 
1069+                 actual_message  =  content [16 :].decode ()
10451070                self .assertEqual (actual_message , expected_logged_error )
10461071
10471072
@@ -1090,45 +1115,58 @@ def test_create_framed_telemetry_log_sinks(self):
10901115    def  test_single_frame (self ):
10911116        with  NamedTemporaryFile () as  temp_file :
10921117            message  =  "hello world\n something on a new line!\n " 
1118+             before  =  int (time .time_ns () /  1000 )
10931119            with  bootstrap .FramedTelemetryLogSink (
10941120                os .open (temp_file .name , os .O_CREAT  |  os .O_RDWR )
10951121            ) as  ls :
10961122                ls .log (message )
1123+             after  =  int (time .time_ns () /  1000 )
10971124            with  open (temp_file .name , "rb" ) as  f :
10981125                content  =  f .read ()
10991126
11001127                frame_type  =  int .from_bytes (content [:4 ], "big" )
1101-                 self .assertEqual (frame_type , 0xA55A0001 )
1128+                 self .assertEqual (frame_type , 0xA55A0003 )
11021129
11031130                length  =  int .from_bytes (content [4 :8 ], "big" )
11041131                self .assertEqual (length , len (message ))
11051132
1106-                 actual_message  =  content [8 :].decode ()
1133+                 timestamp  =  int .from_bytes (content [8 :16 ], "big" )
1134+                 self .assertTrue (before  <=  timestamp )
1135+                 self .assertTrue (timestamp  <=  after )
1136+ 
1137+                 actual_message  =  content [16 :].decode ()
11071138                self .assertEqual (actual_message , message )
11081139
11091140    def  test_multiple_frame (self ):
11101141        with  NamedTemporaryFile () as  temp_file :
11111142            first_message  =  "hello world\n something on a new line!" 
11121143            second_message  =  "hello again\n here's another message\n " 
11131144
1145+             before  =  int (time .time_ns () /  1000 )
11141146            with  bootstrap .FramedTelemetryLogSink (
11151147                os .open (temp_file .name , os .O_CREAT  |  os .O_RDWR )
11161148            ) as  ls :
11171149                ls .log (first_message )
11181150                ls .log (second_message )
1151+             after  =  int (time .time_ns () /  1000 )
11191152
11201153            with  open (temp_file .name , "rb" ) as  f :
11211154                content  =  f .read ()
11221155                pos  =  0 
11231156                for  message  in  [first_message , second_message ]:
11241157                    frame_type  =  int .from_bytes (content [pos  : pos  +  4 ], "big" )
1125-                     self .assertEqual (frame_type , 0xA55A0001 )
1158+                     self .assertEqual (frame_type , 0xA55A0003 )
11261159                    pos  +=  4 
11271160
11281161                    length  =  int .from_bytes (content [pos  : pos  +  4 ], "big" )
11291162                    self .assertEqual (length , len (message ))
11301163                    pos  +=  4 
11311164
1165+                     timestamp  =  int .from_bytes (content [pos  : pos  +  8 ], "big" )
1166+                     self .assertTrue (before  <=  timestamp )
1167+                     self .assertTrue (timestamp  <=  after )
1168+                     pos  +=  8 
1169+ 
11321170                    actual_message  =  content [pos  : pos  +  len (message )].decode ()
11331171                    self .assertEqual (actual_message , message )
11341172                    pos  +=  len (message )
0 commit comments