@@ -24,7 +24,23 @@ def do_test(self, *args):
2424 sys .stdout .writelines (p .stdout )
2525 sys .stderr .writelines (p .stderr )
2626 if p .returncode :
27- self .fail ('' .join (p .stderr ))
27+ self .fail ("" .join (p .stderr ))
28+
29+ def run_python (self , * args ):
30+ events = []
31+ with subprocess .Popen (
32+ [sys .executable , "-X utf8" , AUDIT_TESTS_PY , * args ],
33+ encoding = "utf-8" ,
34+ stdout = subprocess .PIPE ,
35+ stderr = subprocess .PIPE ,
36+ ) as p :
37+ p .wait ()
38+ sys .stderr .writelines (p .stderr )
39+ return (
40+ p .returncode ,
41+ [line .strip ().partition (" " ) for line in p .stdout ],
42+ "" .join (p .stderr ),
43+ )
2844
2945 def test_basic (self ):
3046 self .do_test ("test_basic" )
@@ -36,19 +52,11 @@ def test_block_add_hook_baseexception(self):
3652 self .do_test ("test_block_add_hook_baseexception" )
3753
3854 def test_finalize_hooks (self ):
39- events = []
40- with subprocess .Popen (
41- [sys .executable , "-X utf8" , AUDIT_TESTS_PY , "test_finalize_hooks" ],
42- encoding = "utf-8" ,
43- stdout = subprocess .PIPE ,
44- stderr = subprocess .PIPE ,
45- ) as p :
46- p .wait ()
47- for line in p .stdout :
48- events .append (line .strip ().partition (" " ))
49- sys .stderr .writelines (p .stderr )
50- if p .returncode :
51- self .fail ('' .join (p .stderr ))
55+ returncode , events , stderr = self .run_python ("test_finalize_hooks" )
56+ if stderr :
57+ print (stderr , file = sys .stderr )
58+ if returncode :
59+ self .fail (stderr )
5260
5361 firstId = events [0 ][2 ]
5462 self .assertSequenceEqual (
@@ -76,6 +84,26 @@ def test_cantrace(self):
7684 def test_mmap (self ):
7785 self .do_test ("test_mmap" )
7886
87+ def test_excepthook (self ):
88+ returncode , events , stderr = self .run_python ("test_excepthook" )
89+ if not returncode :
90+ self .fail (f"Expected fatal exception\n { stderr } " )
91+
92+ self .assertSequenceEqual (
93+ [("sys.excepthook" , " " , "RuntimeError('fatal-error')" )], events
94+ )
95+
96+ def test_unraisablehook (self ):
97+ returncode , events , stderr = self .run_python ("test_unraisablehook" )
98+ if returncode :
99+ self .fail (stderr )
100+
101+ self .assertEqual (events [0 ][0 ], "sys.unraisablehook" )
102+ self .assertEqual (
103+ events [0 ][2 ],
104+ "RuntimeError('nonfatal-error') Exception ignored for audit hook test" ,
105+ )
106+
79107
80108if __name__ == "__main__" :
81109 unittest .main ()
0 commit comments