a
    äze1  ã                   @   sv   d Z ddlZddlZddlZddlmZ eedƒr<eedƒsFe d¡‚e d¡Z	G dd	„ d	ej
ƒZed
krre ¡  dS )z)Tests for sys.audit and sys.addaudithook
é    N)ÚsupportÚaddaudithookÚauditz.test only relevant when sys.audit is availablezaudit-tests.pyc                   @   s”   e 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#S )$Ú	AuditTestc                 G   s‚   t jtjdtg|¢dt jt jdL}| ¡  tj |j¡ tj	 |j	¡ |j
r`|  d |j	¡¡ W d   ƒ n1 st0    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   ú%/usr/lib/python3.9/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F}| ¡  tj |j¡ |j	dd„ |j
D ƒd |j¡fW  d   ƒ S 1 sr0    Y  d S )Nr   r   r   c                 S   s   g | ]}|  ¡  d ¡‘qS )ú )ÚstripÚ	partition)Ú.0Úliner   r   r   Ú
<listcomp>)   ó    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   s   |   d¡ d S )NÚ
test_basic©r   ©r   r   r   r   r'   -   s    zAuditTest.test_basicc                 C   s   |   d¡ d S )NÚtest_block_add_hookr(   r)   r   r   r   r*   0   s    zAuditTest.test_block_add_hookc                 C   s   |   d¡ d S )NÚ!test_block_add_hook_baseexceptionr(   r)   r   r   r   r+   3   s    z+AuditTest.test_block_add_hook_baseexceptionc                 C   s   t  d¡ |  d¡ d S )NÚmarshalÚtest_marshal©r   Úimport_moduler   r)   r   r   r   r-   6   s    
zAuditTest.test_marshalc                 C   s   t  d¡ |  d¡ d S )NÚpickleÚtest_pickler.   r)   r   r   r   r1   ;   s    
zAuditTest.test_picklec                 C   s   |   d¡ d S )NÚtest_monkeypatchr(   r)   r   r   r   r2   @   s    zAuditTest.test_monkeypatchc                 C   s   |   dtj¡ d S )NÚ	test_open)r   r   ZTESTFNr)   r   r   r   r3   C   s    zAuditTest.test_openc                 C   s   |   d¡ d S )NÚtest_cantracer(   r)   r   r   r   r4   F   s    zAuditTest.test_cantracec                 C   s   |   d¡ d S )NÚ	test_mmapr(   r)   r   r   r   r5   I   s    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   r6   L   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   ÚassertEqualr8   r   r   r   r9   U   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   r/   r&   r   r;   Ú
assertTruer7   )r   r   r%   r   Zexpectedr   r   r   r=   `   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.gethostnamer>   zsocket.__new__r:   zsocket.bindz('127.0.0.1', 8080))	r   r/   r&   r   ÚverboseÚprintr;   rA   Úendswithr8   r   r   r   rC   n   s    

zAuditTest.test_socketc                 C   sP   |   d¡\}}}|r|  |¡ tjr2t|ddiŽ |  dd„ |D ƒg d¢¡ d S )NÚtest_gcrD   rE   c                 S   s   g | ]}|d  ‘qS )r   r   )r!   Úeventr   r   r   r#   ƒ   r$   z%AuditTest.test_gc.<locals>.<listcomp>)zgc.get_objectszgc.get_referrerszgc.get_referents)r&   r   r   rF   rG   r;   r8   r   r   r   rI   {   s    
þzAuditTest.test_gcc                 C   s"   |   d¡\}}}|r|  |¡ d S )NÚtest_not_in_gc)r&   r   )r   r   Ú_r   r   r   r   rK   ‡   s    zAuditTest.test_not_in_gcN)Ú__name__Ú
__module__Ú__qualname__r   r&   r'   r*   r+   r-   r1   r2   r3   r4   r5   r6   r9   r=   rC   rI   rK   r   r   r   r   r      s"   	r   Ú__main__)Ú__doc__r   r   ZunittestÚtestr   ÚhasattrZSkipTestZfindfiler   ZTestCaser   rM   Úmainr   r   r   r   Ú<module>   s   

~