
    6bh$                        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j                  d       ej                  d	      Z G d
 dej                        Zedk(  r ej                           yy)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                   &   e Zd ZdZ ej
                         d        Z ej
                         d        Zd Zd Z	d Z
d Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Z ej,                  d      d        Zd Zd Zd Zd Zd Zd Zd Zd Zd Z y)	AuditTestNc                    t        j                  t        j                  dt        g|ddt         j
                  t         j
                        5 }|j                          t        j                  j                  |j                         t        j                  j                  |j                         |j                  r*| j                  dj                  |j                               d d d        y # 1 sw Y   y xY w)N-X utf8utf-8backslashreplace)encodingerrorsstdoutstderr )
subprocessPopensys
executableAUDIT_TESTS_PYPIPEwaitr   
writelinesr   
returncodefailjoin)selfargsps      9/opt/python-3.12.12/usr/lib/python3.12/test/test_audit.pydo_testzAuditTest.do_test   s    ^^Y>>%????
 FFHJJ!!!((+JJ!!!((+||		"''!((+,
 
 
s   BC00C9c                     g }t        j                  t        j                  dt        g|dt         j
                  t         j
                        5 }|j                          t        j                  j                  |j                         |j                  |j                  D cg c]!  }|j                         j                  d      # c}dj                  |j                        fcd d d        S c c}w # 1 sw Y   y xY w)Nr   r   )r   r   r    r   )r   r   r   r   r   r   r   r   r   r   r   strip	partitionr   )r   r   eventsr    lines        r!   
run_pythonzAuditTest.run_python$   s    ^^Y>>????	

 FFHJJ!!!((+9:B'',B!
 
 C
 
s   AC4"&C/C4/C44C=c                 &    | j                  d       y )N
test_basicr"   r   s    r!   r+   zAuditTest.test_basic5   s    \"    c                 &    | j                  d       y )Ntest_block_add_hookr,   r-   s    r!   r0   zAuditTest.test_block_add_hook8   s    *+r.   c                 &    | j                  d       y )N!test_block_add_hook_baseexceptionr,   r-   s    r!   r2   z+AuditTest.test_block_add_hook_baseexception;   s    89r.   c                 P    t        j                  d       | j                  d       y )Nmarshaltest_marshalr   import_moduler"   r-   s    r!   r5   zAuditTest.test_marshal>   s    ##I.^$r.   c                 P    t        j                  d       | j                  d       y )Npickletest_pickler6   r-   s    r!   r:   zAuditTest.test_pickleC   s    ##H-]#r.   c                 &    | j                  d       y )Ntest_monkeypatchr,   r-   s    r!   r<   zAuditTest.test_monkeypatchH   s    '(r.   c                 D    | j                  dt        j                         y )N	test_open)r"   r   TESTFNr-   s    r!   r>   zAuditTest.test_openK   s    [)"2"23r.   c                 &    | j                  d       y )Ntest_cantracer,   r-   s    r!   rA   zAuditTest.test_cantraceN   s    _%r.   c                 &    | j                  d       y )N	test_mmapr,   r-   s    r!   rC   zAuditTest.test_mmapQ   s    [!r.   c                     | j                  d      \  }}}|s| j                  d|        | j                  dg|       y )Ntest_excepthookzExpected fatal exception
)zsys.excepthookr$   zRuntimeError('fatal-error'))r)   r   assertSequenceEqualr   r   r'   r   s       r!   rE   zAuditTest.test_excepthookT   sE    %)__5F%G"
FFII26(;<  CDf	
r.   c                     | j                  d      \  }}}|r| j                  |       | j                  |d   d   d       | j                  |d   d   d       y )Ntest_unraisablehookr   zsys.unraisablehook   zDRuntimeError('nonfatal-error') Exception ignored for audit hook test)r)   r   assertEqualrG   s       r!   rI   zAuditTest.test_unraisablehook]   s\    %)__5J%K"
FFIIf1';<1IaLR	
r.   c                    t        j                  d       | j                  d      \  }}}|r| j                  |       | j	                  |d   d   d       | j	                  |d   d   d       |d   d   }| j                  |       | j                  dd	| d
g|d          | j                  dd	| dg|d          | j                  dd	|g|d          y )Nwinregtest_winregr   zwinreg.OpenKey   zwinreg.OpenKey/resultrJ   zwinreg.EnumKeyr$   z 0z 10000   zwinreg.PyHKEY.Detach   )r   r7   r)   r   rK   
assertTruerF   )r   r   r'   r   expecteds        r!   rN   zAuditTest.test_winregh   s    ##H-%)__]%C"
FFIIf1'781'>?!9Q<!  "2CH:R!I6RS9U  "2CH:V9L!MvVWyY  "8#x!H&QR)Tr.   c                    t        j                  d       | j                  d      \  }}}|r| j                  |       t        j
                  rt        |ddi | j                  |d   d   d       | j                  |d   d   d       | j                  |d	   d   d
       | j                  |d	   d	   j                  d             y )Nsockettest_socketsep
r   zsocket.gethostnamerO   zsocket.__new__rJ   zsocket.bindz('127.0.0.1', 8080))
r   r7   r)   r   r   verboseprintrK   rR   endswithrG   s       r!   rV   zAuditTest.test_socketv   s    ##H-%)__]%C"
FFIIf??6$t$1';<1'781}5q	!--.CDEr.   c                     | j                  d      \  }}}|r| j                  |       t        j                  rt	        |ddi | j                  |D cg c]  }|d   	 c}g d       y c c}w )Ntest_gcrW   rX   r   )zgc.get_objectszgc.get_referrerszgc.get_referentsr)   r   r   rY   rZ   rK   )r   r   r'   r   events        r!   r]   zAuditTest.test_gc   sd    %)__Y%?"
FFIIf??6$t$#)*6%U1X6*F	
*s   A*networkc                    t        j                  d       | j                  d      \  }}}|r| j                  |       t        j
                  rt        |ddi | j                  |d   d   d       | j                  |d   d   d       | j                  |d	   d   d
       |d	   d   dk7  r| j                  d|d	   d          y y )Nzhttp.clienttest_http_clientrW   rX   r   zhttp.client.connectrJ   zwww.python.org 80rO   zhttp.client.sendz[cannot send]HTTP)	r   r7   r)   r   r   rY   rZ   rK   assertInrG   s       r!   	test_httpzAuditTest.test_http   s    ##M2%)__5G%H"
FFIIf??6$t$1'<=1':;1'9:!9Q<?*MM&&)A,/ +r.   c                 N   t        j                  d      }| j                  d      \  }}}|r| j                  |       t        j
                  rt        |ddi |D cg c]  }|d   	 }}ddgdz  }t        |j                  d	      r|d
dgz  }| j                  ||       y c c}w )Nsqlite3test_sqlite3rW   rX   r   zsqlite3.connectzsqlite3.connect/handlerJ   enable_load_extensionzsqlite3.enable_load_extensionzsqlite3.load_extension)
r   r7   r)   r   r   rY   rZ   hasattr
ConnectionrK   )r   rg   r   r'   r   evactualrS   s           r!   rh   zAuditTest.test_sqlite3   s    --i8%)__^%D"
FFIIf??6$t$"()&B"Q%&)%'?@1D7%%'>?/( H 	* *s   B"c                     | j                  d      \  }}}|r| j                  |       t        j                  rt	        |ddi |D cg c]  }|d   |d   f }}dg}| j                  ||       y c c}w )Ntest_sys_getframerW   rX   r   rJ   )zsys._getframero   r^   r   r   r'   r   rl   rm   rS   s          r!   ro   zAuditTest.test_sys_getframe   sx    %)__5H%I"
FFIIf??6$t$+126R2a5"Q%.62:;* 3   A1c                     | j                  d      \  }}}|r| j                  |       t        j                  rt	        |ddi |D cg c]  }|d   |d   f }}dg}| j                  ||       y c c}w )Ntest_sys_getframemodulenamerW   rX   r   rJ   )zsys._getframemodulename0r^   rp   s          r!   rs   z%AuditTest.test_sys_getframemodulename   sx    %)__5R%S"
FFIIf??6$t$+126R2a5"Q%.6245* 3rq   c                     | j                  d      \  }}}|r| j                  |       t        j                  rt	        |ddi |D cg c]  }|d   |d   f }}ddg}| j                  ||       y c c}w )Ntest_threadingrW   rX   r   rJ   )z_thread.start_new_threadz(<test_func>, (), None))ztest.test_funcz()r^   rp   s          r!   rv   zAuditTest.test_threading   s    %)__5E%F"
FFIIf??6$t$+126R2a5"Q%.62C$

 	* 3s   A2c                    t        j                  d       | j                  d      \  }}}|r| j                  |       t        j
                  rt        |ddi |D cg c]  }|d   |d   f }}dg}| j                  ||       y c c}w )N_wmitest_wmi_exec_queryrW   rX   r   rJ   )z_wmi.exec_queryz#SELECT * FROM Win32_OperatingSystemr   r7   r)   r   r   rY   rZ   rK   rp   s          r!   ry   zAuditTest.test_wmi_exec_query   s    ##F+%)__5J%K"
FFIIf??6$t$+126R2a5"Q%.62NO* 3s   Bc                    t        j                  d      }| j                  d      \  }}}|r| j                  |       t        j
                  rt        dg|ddi | j                  |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	       y )Nsyslogtest_syslogzEvents:rW   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   r7   r)   r   r   rY   rZ   rF   LOG_USERLOG_INFO	LOG_DEBUG
LOG_NDELAY
LOG_LOCAL0)r   r|   r   r'   r   s        r!   r}   zAuditTest.test_syslog   s   ,,X6%)__]%C"
FFIIf??)1f1&1  y0A%BCcfoo%6e#<= #&*:*:);='cfoo%6f#=>s&77H$IJsof6G6G5H&J[J[I\$]^sgfoo->$?@')	
r.   c                 V    | j                  d      \  }}}|r| j                  |       y y )Ntest_not_in_gc)r)   r   )r   r   _r   s       r!   r   zAuditTest.test_not_in_gc   s,     $0@ A
AvIIf r.   c                     | j                  d      \  }}}|r| j                  |       t        j                  rt	        |ddi |D cg c]  }|d   |d   f }}dg}| j                  ||       y c c}w )N%test_sys_monitoring_register_callbackrW   rX   r   rJ   )z sys.monitoring.register_callbackz(None,)r^   rp   s          r!   r   z/AuditTest.test_sys_monitoring_register_callback  sx    %)__5\%]"
FFIIf??6$t$+126R2a5"Q%.62CD* 3rq   c                 (   t        j                  d      }d}| j                  d|      \  }}}|r| j                  |       t        j
                  rt        |ddi |D cg c]  }|d   |d   f }}dd	|d
fg}| j                  ||       y c c}w )N_winapiz+\\.\pipe\LOCAL\test_winapi_createnamed_pipetest_winapi_createnamedpiperW   rX   r   rJ   z_winapi.CreateNamedPipe(z, 3, 8)rz   )	r   winapi	pipe_namer   r'   r   rl   rm   rS   s	            r!   r   z%AuditTest.test_winapi_createnamedpipe  s    ,,Y7B	%)__5RT]%^"
FFIIf??6$t$+126R2a5"Q%.62.!I=0HIJ* 3s    B)!__name__
__module____qualname__maxDiffr   requires_subprocessr"   r)   r+   r0   r2   r5   r:   r<   r>   rA   rC   rE   rI   rN   rV   r]   requires_resourcere   rh   ro   rs   rv   ry   r}   r   r   r    r.   r!   r	   r	      s    G W  "- #- !W  " # #,:%
$
)4&"
	
UF

 Wy)0 *0+&
+
++ +
.
++r.   r	   __main__)__doc__r   r   unittesttestr   test.supportr   r   rj   SkipTestfindfiler   TestCaser	   r   mainr   r.   r!   <module>r      s     
   & " sN#73+@
(

L
MM!!!"23M+!! M+^ zHMMO r.   