| 
									
										
										
										
											2019-05-23 08:45:22 -07:00
										 |  |  | """Tests for sys.audit and sys.addaudithook
 | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import subprocess | 
					
						
							|  |  |  | import sys | 
					
						
							|  |  |  | import unittest | 
					
						
							|  |  |  | from test import support | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if not hasattr(sys, "addaudithook") or not hasattr(sys, "audit"): | 
					
						
							|  |  |  |     raise unittest.SkipTest("test only relevant when sys.audit is available") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-29 08:20:35 -07:00
										 |  |  | AUDIT_TESTS_PY = support.findfile("audit-tests.py") | 
					
						
							| 
									
										
										
										
											2019-05-23 08:45:22 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class AuditTest(unittest.TestCase): | 
					
						
							| 
									
										
										
										
											2019-05-29 08:20:35 -07:00
										 |  |  |     def do_test(self, *args): | 
					
						
							|  |  |  |         with subprocess.Popen( | 
					
						
							|  |  |  |             [sys.executable, "-X utf8", AUDIT_TESTS_PY, *args], | 
					
						
							|  |  |  |             encoding="utf-8", | 
					
						
							|  |  |  |             stdout=subprocess.PIPE, | 
					
						
							|  |  |  |             stderr=subprocess.PIPE, | 
					
						
							|  |  |  |         ) as p: | 
					
						
							|  |  |  |             p.wait() | 
					
						
							|  |  |  |             sys.stdout.writelines(p.stdout) | 
					
						
							|  |  |  |             sys.stderr.writelines(p.stderr) | 
					
						
							|  |  |  |             if p.returncode: | 
					
						
							|  |  |  |                 self.fail(''.join(p.stderr)) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-23 08:45:22 -07:00
										 |  |  |     def test_basic(self): | 
					
						
							| 
									
										
										
										
											2019-05-29 08:20:35 -07:00
										 |  |  |         self.do_test("test_basic") | 
					
						
							| 
									
										
										
										
											2019-05-23 08:45:22 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_block_add_hook(self): | 
					
						
							| 
									
										
										
										
											2019-05-29 08:20:35 -07:00
										 |  |  |         self.do_test("test_block_add_hook") | 
					
						
							| 
									
										
										
										
											2019-05-23 08:45:22 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_block_add_hook_baseexception(self): | 
					
						
							| 
									
										
										
										
											2019-05-29 08:20:35 -07:00
										 |  |  |         self.do_test("test_block_add_hook_baseexception") | 
					
						
							| 
									
										
										
										
											2019-05-23 08:45:22 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_finalize_hooks(self): | 
					
						
							|  |  |  |         events = [] | 
					
						
							|  |  |  |         with subprocess.Popen( | 
					
						
							| 
									
										
										
										
											2019-05-29 08:20:35 -07:00
										 |  |  |             [sys.executable, "-X utf8", AUDIT_TESTS_PY, "test_finalize_hooks"], | 
					
						
							| 
									
										
										
										
											2019-05-23 08:45:22 -07:00
										 |  |  |             encoding="utf-8", | 
					
						
							|  |  |  |             stdout=subprocess.PIPE, | 
					
						
							|  |  |  |             stderr=subprocess.PIPE, | 
					
						
							|  |  |  |         ) as p: | 
					
						
							|  |  |  |             p.wait() | 
					
						
							| 
									
										
										
										
											2019-05-29 08:20:35 -07:00
										 |  |  |             for line in p.stdout: | 
					
						
							| 
									
										
										
										
											2019-05-23 08:45:22 -07:00
										 |  |  |                 events.append(line.strip().partition(" ")) | 
					
						
							| 
									
										
										
										
											2019-05-29 08:20:35 -07:00
										 |  |  |             sys.stderr.writelines(p.stderr) | 
					
						
							|  |  |  |             if p.returncode: | 
					
						
							|  |  |  |                 self.fail(''.join(p.stderr)) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-23 08:45:22 -07:00
										 |  |  |         firstId = events[0][2] | 
					
						
							|  |  |  |         self.assertSequenceEqual( | 
					
						
							|  |  |  |             [ | 
					
						
							|  |  |  |                 ("Created", " ", firstId), | 
					
						
							|  |  |  |                 ("cpython._PySys_ClearAuditHooks", " ", firstId), | 
					
						
							|  |  |  |             ], | 
					
						
							|  |  |  |             events, | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_pickle(self): | 
					
						
							| 
									
										
										
										
											2019-05-29 08:20:35 -07:00
										 |  |  |         support.import_module("pickle") | 
					
						
							| 
									
										
										
										
											2019-05-23 08:45:22 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-29 08:20:35 -07:00
										 |  |  |         self.do_test("test_pickle") | 
					
						
							| 
									
										
										
										
											2019-05-23 08:45:22 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_monkeypatch(self): | 
					
						
							| 
									
										
										
										
											2019-05-29 08:20:35 -07:00
										 |  |  |         self.do_test("test_monkeypatch") | 
					
						
							| 
									
										
										
										
											2019-05-23 08:45:22 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_open(self): | 
					
						
							| 
									
										
										
										
											2019-05-29 08:20:35 -07:00
										 |  |  |         self.do_test("test_open", support.TESTFN) | 
					
						
							| 
									
										
										
										
											2019-05-23 08:45:22 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_cantrace(self): | 
					
						
							| 
									
										
										
										
											2019-05-29 08:20:35 -07:00
										 |  |  |         self.do_test("test_cantrace") | 
					
						
							| 
									
										
										
										
											2019-05-23 08:45:22 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-06-21 09:31:59 -06:00
										 |  |  |     def test_mmap(self): | 
					
						
							|  |  |  |         self.do_test("test_mmap") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-23 08:45:22 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | if __name__ == "__main__": | 
					
						
							|  |  |  |     unittest.main() |