o
    GXîhÜ  ã                   @   s’   d Z ddlZddlZddlZddlmZ ddlmZ ddlmZ e	edƒr*e	edƒs/e 
d¡‚e d	¡ZG d
d„ dejƒZedkrGe ¡  dS dS )z)Tests for sys.audit and sys.addaudithook
é    N)Úsupport)Úimport_helper)Ú	os_helperÚaddaudithookÚauditz.test only relevant when sys.audit is availablezaudit-tests.pyc                   @   s°   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ ZdS )*Ú	AuditTestNc                 G   s”   t jtjdtg|¢dt jt jd/}| ¡  tj |j¡ tj	 |j	¡ |j
r8|  d |j	¡¡ W d   ƒ d S W d   ƒ d S 1 sCw   Y  d S )Nú-X utf8úutf-8©ÚencodingÚstdoutÚstderrÚ )Ú
subprocessÚPopenÚsysÚ
executableÚAUDIT_TESTS_PYÚPIPEÚwaitr   Ú
writelinesr   Ú
returncodeÚfailÚjoin)ÚselfÚargsÚp© r   ú9/opt/python-3.10.19/usr/lib/python3.10/test/test_audit.pyÚdo_test   s   üö	"÷zAuditTest.do_testc                 G   s€   g }t jtjdtg|¢dt jt jd#}| ¡  tj |j¡ |j	dd„ |j
D ƒd |j¡fW  d   ƒ S 1 s9w   Y  d S )Nr   r	   r
   c                 S   s   g | ]	}|  ¡  d ¡‘qS )ú )ÚstripÚ	partition)Ú.0Úliner   r   r   Ú
<listcomp>.   s    z(AuditTest.run_python.<locals>.<listcomp>r   )r   r   r   r   r   r   r   r   r   r   r   r   )r   r   Úeventsr   r   r   r   Ú
run_python"   s   ü
ý$øzAuditTest.run_pythonc                 C   ó   |   d¡ d S )NÚ
test_basic©r   ©r   r   r   r   r)   2   ó   zAuditTest.test_basicc                 C   r(   )NÚtest_block_add_hookr*   r+   r   r   r   r-   5   r,   zAuditTest.test_block_add_hookc                 C   r(   )NÚ!test_block_add_hook_baseexceptionr*   r+   r   r   r   r.   8   r,   z+AuditTest.test_block_add_hook_baseexceptionc                 C   ó   t  d¡ |  d¡ d S )NÚmarshalÚtest_marshal©r   Úimport_moduler   r+   r   r   r   r1   ;   ó   
zAuditTest.test_marshalc                 C   r/   )NÚpickleÚtest_pickler2   r+   r   r   r   r6   @   r4   zAuditTest.test_picklec                 C   r(   )NÚtest_monkeypatchr*   r+   r   r   r   r7   E   r,   zAuditTest.test_monkeypatchc                 C   s   |   dtj¡ d S )NÚ	test_open)r   r   ZTESTFNr+   r   r   r   r8   H   s   zAuditTest.test_openc                 C   r(   )NÚtest_cantracer*   r+   r   r   r   r9   K   r,   zAuditTest.test_cantracec                 C   r(   )NÚ	test_mmapr*   r+   r   r   r   r:   N   r,   zAuditTest.test_mmapc                 C   s6   |   d¡\}}}|s|  d|› ¡ |  dg|¡ d S )NÚtest_excepthookzExpected fatal exception
)zsys.excepthookr    zRuntimeError('fatal-error'))r'   r   ÚassertSequenceEqual©r   r   r&   r   r   r   r   r;   Q   s   ÿzAuditTest.test_excepthookc                 C   sJ   |   d¡\}}}|r|  |¡ |  |d d d¡ |  |d d d¡ d S )NÚtest_unraisablehookr   zsys.unraisablehooké   zDRuntimeError('nonfatal-error') Exception ignored for audit hook test)r'   r   ÚassertEqualr=   r   r   r   r>   Z   s   

þzAuditTest.test_unraisablehookc                 C   s¸   t  d¡ |  d¡\}}}|r|  |¡ |  |d d d¡ |  |d d d¡ |d d }|  |¡ |  dd	|› d
g|d ¡ |  dd	|› dg|d ¡ |  dd	|g|d ¡ d S )NÚwinregÚtest_winregr   zwinreg.OpenKeyé   zwinreg.OpenKey/resultr?   zwinreg.EnumKeyr    z 0z 10000é   zwinreg.PyHKEY.Detaché   )r   r3   r'   r   r@   Ú
assertTruer<   )r   r   r&   r   Úexpectedr   r   r   rB   e   s   


zAuditTest.test_winregc                 C   s”   t  d¡ |  d¡\}}}|r|  |¡ tjrt|ddiŽ |  |d d d¡ |  |d d d¡ |  |d	 d d
¡ |  |d	 d	  	d¡¡ d S )NÚsocketÚtest_socketÚsepÚ
r   zsocket.gethostnamerC   zsocket.__new__r?   zsocket.bindz('127.0.0.1', 8080))
r   r3   r'   r   r   ÚverboseÚprintr@   rF   Úendswithr=   r   r   r   rI   s   s   

zAuditTest.test_socketc                 C   sP   |   d¡\}}}|r|  |¡ tjrt|ddiŽ |  dd„ |D ƒg d¢¡ d S )NÚtest_gcrJ   rK   c                 S   ó   g | ]}|d  ‘qS ©r   r   )r#   Úeventr   r   r   r%   ˆ   ó    z%AuditTest.test_gc.<locals>.<listcomp>)zgc.get_objectszgc.get_referrerszgc.get_referents)r'   r   r   rL   rM   r@   r=   r   r   r   rO   €   s   
þzAuditTest.test_gcc                 C   s¤   t  d¡ |  d¡\}}}|r|  |¡ tjrt|ddiŽ |  |d d d¡ |  |d d d¡ |  |d	 d d
¡ |d	 d dkrP|  d|d	 d ¡ d S d S )Nzhttp.clientZtest_http_clientrJ   rK   r   zhttp.client.connectr?   zwww.python.org 80rC   zhttp.client.sendz[cannot send]ZHTTP)	r   r3   r'   r   r   rL   rM   r@   ZassertInr=   r   r   r   Ú	test_http   s   

ÿzAuditTest.test_httpc                 C   s~   t  d¡}|  d¡\}}}|r|  |¡ tjrt|ddiŽ dd„ |D ƒ}ddgd	 }t|jd
ƒr7|ddg7 }|  	||¡ d S )NÚsqlite3Útest_sqlite3rJ   rK   c                 S   rP   rQ   r   )r#   Zevr   r   r   r%   ¤   rS   z*AuditTest.test_sqlite3.<locals>.<listcomp>zsqlite3.connectzsqlite3.connect/handler?   Zenable_load_extensionzsqlite3.enable_load_extensionzsqlite3.load_extension)
r   r3   r'   r   r   rL   rM   ÚhasattrÚ
Connectionr@   )r   rU   r   r&   r   ÚactualrG   r   r   r   rV   œ   s   

þzAuditTest.test_sqlite3c                 C   sÌ   t  d¡}|  d¡\}}}|r|  |¡ tjr"tdg|¢R ddiŽ |  |ddd|j› fd	d|j	› d
fdd|j
› fdd	d|j	› dfddd|j› fddd|j› d|j› fddd|j› fdg	¡ d S )NÚsyslogÚtest_syslogzEvents:rJ   z
  zsyslog.openlogr    z	python 0 zsyslog.syslogz testzsyslog.setlogmask)zsyslog.closelogr   r   z test2zaudit-tests.py 0 zaudit-tests.py zNone 0 )r   r3   r'   r   r   rL   rM   r<   ZLOG_USERZLOG_INFOZ	LOG_DEBUGZ
LOG_NDELAYZ
LOG_LOCAL0)r   rZ   r   r&   r   r   r   r   r[   ¯   s&   

øþzAuditTest.test_syslogc                 C   s&   |   d¡\}}}|r|  |¡ d S d S )NÚtest_not_in_gc)r'   r   )r   r   Ú_r   r   r   r   r\   Æ   s   ÿzAuditTest.test_not_in_gc)Ú__name__Ú
__module__Ú__qualname__ZmaxDiffr   r'   r)   r-   r.   r1   r6   r7   r8   r9   r:   r;   r>   rB   rI   rO   rT   rV   r[   r\   r   r   r   r   r      s,    	r   Ú__main__)Ú__doc__r   r   ZunittestÚtestr   Ztest.supportr   r   rW   ZSkipTestZfindfiler   ZTestCaser   r^   Úmainr   r   r   r   Ú<module>   s    

 ;ÿ