a
    ¼3j\g  ã                   @   s’  d dl Z d dlZd dlZd dlZd dlZd dlZd dl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jr„e d¡‚eedƒZG dd„ dƒZG d	d
„ d
ƒZG dd„ dƒZG dd„ dƒZdd„ Zdd„ ZG dd„ dejƒZG dd„ dejƒZG dd„ de jƒZG dd„ dejƒZe  ee dƒd¡G dd„ dejƒƒZ!G dd „ d e j"ƒZ#G d!d"„ d"e j"ƒZ$G d#d$„ d$e#ƒZ%G d%d&„ d&ƒZ&G d'd(„ d(e&ƒZ'e  ej(d)¡G d*d+„ d+e&ƒƒZ)e  ed,¡G d-d.„ d.e&ƒƒZ*G d/d0„ d0e'ejƒZ+e  eed1ƒd2¡G d3d4„ d4e'ejƒƒZ,G d5d6„ d6e)ejƒZ-e  eed1ƒd2¡G d7d8„ d8e)ejƒƒZ.G d9d:„ d:e*ejƒZ/e  eed1ƒd2¡G d;d<„ d<e*ejƒƒZ0e1d=krŽe 2¡  dS )>é    N)Úsupport)Úsocket_helper)ÚBytesIOztest is not helpful for PGOÚAF_UNIXc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Údummysocketc                 C   s
   d| _ d S ©NF©Úclosed©Úself© r   úN/www/server/python_manager/versions/3.9.10/lib/python3.9/test/test_asyncore.pyÚ__init__   s    zdummysocket.__init__c                 C   s
   d| _ d S ©NTr   r
   r   r   r   Úclose   s    zdummysocket.closec                 C   s   dS )Né*   r   r
   r   r   r   Úfileno   s    zdummysocket.filenoN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r      s   r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Údummychannelc                 C   s   t ƒ | _d S ©N)r   Úsocketr
   r   r   r   r   !   s    zdummychannel.__init__c                 C   s   | j  ¡  d S r   )r   r   r
   r   r   r   r   $   s    zdummychannel.closeN)r   r   r   r   r   r   r   r   r   r       s   r   c                   @   s(   e Zd Zdd„ Zdd„ ZeZeZeZdS )Úexitingdummyc                 C   s   d S r   r   r
   r   r   r   r   (   s    zexitingdummy.__init__c                 C   s   t  ¡ ‚d S r   )ÚasyncoreÚExitNowr
   r   r   r   Úhandle_read_event+   s    zexitingdummy.handle_read_eventN)r   r   r   r   r   Úhandle_write_eventÚhandle_closeÚhandle_expt_eventr   r   r   r   r   '   s
   r   c                   @   s0   e Zd Zdd„ Zdd„ ZeZeZeZdd„ ZdS )Úcrashingdummyc                 C   s
   d| _ d S r   ©Úerror_handledr
   r   r   r   r   3   s    zcrashingdummy.__init__c                 C   s
   t ƒ ‚d S r   ©Ú	Exceptionr
   r   r   r   r   6   s    zcrashingdummy.handle_read_eventc                 C   s
   d| _ d S r   r!   r
   r   r   r   Úhandle_error=   s    zcrashingdummy.handle_errorN©	r   r   r   r   r   r   r   r   r%   r   r   r   r   r    2   s   r    c                 C   sÜ   zÄz|  ¡  | ¡ \}}W n tjy.   Y n„0 d}t ¡ }|dkrªt ¡ | dk rªt |gg g d¡\}}}	|rž|d8 }| d¡}
| |
 	dd¡¡ d|
v ržqªt 
d	¡ q<| ¡  W | ¡  |  ¡  n| ¡  |  ¡  0 d S )
NéÈ   r   g      @çš™™™™™¹?é   é
   ó   
ó    ç{®Gáz„?)ÚlistenÚacceptr   ÚtimeoutÚtimeÚ	monotonicÚselectÚrecvÚwriteÚreplaceÚsleepr   Úset)ÚevtÚbufZservÚconnÚaddrÚnÚstartÚrÚwÚeÚdatar   r   r   Úcapture_serverA   s*    


ÿrC   c                 C   s6   t r(| jtjkr(t |¡ t | |¡ n
|  |¡ d S r   )	ÚHAS_UNIX_SOCKETSÚfamilyr   r   r   Úunlinkr   Zbind_unix_socketÚbind)Úsockr<   r   r   r   Úbind_af_awareZ   s    
rI   c                   @   sN   e Zd Zdd„ Ze eedƒd¡dd„ ƒZdd„ Z	d	d
„ Z
dd„ Zdd„ ZdS )ÚHelperFunctionTestsc                 C   sš   t ƒ }|  tjtj|¡ |  tjtj|¡ |  tjtj|¡ tƒ }t |¡ |  |j	d¡ tƒ }t |¡ |  |j	d¡ tƒ }t |¡ |  |j	d¡ d S r   )
r   ÚassertRaisesr   r   Úreadr5   Ú
_exceptionr    ÚassertEqualr"   )r   Útr1Útr2r   r   r   Útest_readwriteexce   s    


z%HelperFunctionTests.test_readwriteexcÚpollúselect.poll requiredc           
      C   sä   d}t jdft jdft jdft jdft jdft jdff}G dd„ dƒ}|D ]”\}}|ƒ }|  t||ƒd¡ t	 
||¡ |D ]}|  t||ƒ||k¡ qztƒ }|  t	jt	j
||¡ tƒ }	|  |	jd¡ t	 
|	|¡ |  |	jd	¡ qJd S )
N)rL   Úexptr5   r	   r"   rL   rT   r5   r	   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )z3HelperFunctionTests.test_readwrite.<locals>.testobjc                 S   s"   d| _ d| _d| _d| _d| _d S r   )rL   r5   r	   rT   r"   r
   r   r   r   r   ’   s
    z<HelperFunctionTests.test_readwrite.<locals>.testobj.__init__c                 S   s
   d| _ d S r   )rL   r
   r   r   r   r   ™   s    zEHelperFunctionTests.test_readwrite.<locals>.testobj.handle_read_eventc                 S   s
   d| _ d S r   )r5   r
   r   r   r   r   œ   s    zFHelperFunctionTests.test_readwrite.<locals>.testobj.handle_write_eventc                 S   s
   d| _ d S r   r   r
   r   r   r   r   Ÿ   s    z@HelperFunctionTests.test_readwrite.<locals>.testobj.handle_closec                 S   s
   d| _ d S r   )rT   r
   r   r   r   r   ¢   s    zEHelperFunctionTests.test_readwrite.<locals>.testobj.handle_expt_eventc                 S   s
   d| _ d S r   r!   r
   r   r   r   r%   ¥   s    z@HelperFunctionTests.test_readwrite.<locals>.testobj.handle_errorNr&   r   r   r   r   Útestobj‘   s   rU   FT)r3   ÚPOLLINÚPOLLPRIÚPOLLOUTÚPOLLERRÚPOLLHUPÚPOLLNVALrN   Úgetattrr   Z	readwriter   rK   r   r    r"   )
r   Z
attributesÚexpectedrU   ÚflagZexpectedattrZtobjÚattrrO   rP   r   r   r   Útest_readwrite‚   s*    ú	z"HelperFunctionTests.test_readwritec                 C   s   |   d¡ d S r   ©Úcloseall_checkr
   r   r   r   Útest_closeall¾   s    z!HelperFunctionTests.test_closeallc                 C   s   |   d¡ d S r   ra   r
   r   r   r   Útest_closeall_defaultÁ   s    z)HelperFunctionTests.test_closeall_defaultc                 C   s´   g }i }t dƒD ],}tƒ }| |¡ |  |jjd¡ |||< q|r|tj}z |t_t ¡  W tj| }t_q†tj| }t_0 n
t |¡ |  t	|ƒd¡ |D ]}|  |jjd¡ qšd S )Nr*   Fr   T)
Úranger   ÚappendrN   r   r	   r   Ú
socket_mapÚ	close_allÚlen)r   Z
usedefaultÚlZtestmapÚiÚcZ	socketmapr   r   r   rb   Ä   s"    


"
z"HelperFunctionTests.closeall_checkc                 C   s¢   zt dƒ‚W n"   t ¡ \}}}t ¡ }Y n0 |  d¡ |\\}}}}}	}
|  tj 	|¡d d¡ |  |d¡ |  ||¡ |  |	|¡ |  |
d|||f ¡ d S )NúI don't like spam!zExpected exceptionéÿÿÿÿztest_asyncore.pyÚtest_compact_tracebackz
[%s|%s|%s])
r$   ÚsysÚexc_infor   Zcompact_tracebackÚfailrN   ÚosÚpathÚsplit)r   Zreal_tZreal_vZreal_tbr?   ÚfÚfunctionÚlineÚtÚvÚinfor   r   r   ro   Þ   s    
z*HelperFunctionTests.test_compact_tracebackN)r   r   r   rQ   ÚunittestÚ
skipUnlessÚhasattrr3   r`   rc   rd   rb   ro   r   r   r   r   rJ   d   s   
;rJ   c                   @   sL   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S )ÚDispatcherTestsc                 C   s   d S r   r   r
   r   r   r   ÚsetUpð   s    zDispatcherTests.setUpc                 C   s   t  ¡  d S r   ©r   rh   r
   r   r   r   ÚtearDownó   s    zDispatcherTests.tearDownc                 C   s,   t  ¡ }|  | ¡ d¡ |  | ¡ d¡ d S r   )r   Ú
dispatcherrN   ÚreadableÚwritable©r   Údr   r   r   Ú
test_basicö   s    zDispatcherTests.test_basicc                 C   s$   t  ¡ }|  t|ƒdt|ƒ ¡ d S )Nz<asyncore.dispatcher at %#x>)r   rƒ   rN   ÚreprÚidr†   r   r   r   Ú	test_reprû   s    zDispatcherTests.test_reprc                 C   st   t  ¡ }d}d}t ¡ $}| |¡ | |¡ W d   ƒ n1 sB0    Y  | ¡  ¡ }|  |d| d| g¡ d S )NzLovely spam! Wonderful spam!rm   zlog: %s)r   rƒ   r   Zcaptured_stderrÚlogÚgetvalueÚ
splitlinesrN   )r   r‡   Úl1Úl2ÚstderrÚlinesr   r   r   Útest_logÿ   s    

(zDispatcherTests.test_logc                 C   s   t  ¡ }d}d}d}t ¡ 2}| |d¡ | |¡ | |d¡ W d   ƒ n1 sT0    Y  | ¡  ¡ }d| d| d| g}|  ||¡ d S )	Nz#Have you got anything without spam?z.Why can't she have egg bacon spam and sausage?zTHAT'S got spam in it!ZEGGSZSPAMzEGGS: %szinfo: %szSPAM: %s)r   rƒ   r   Úcaptured_stdoutZlog_infor   rŽ   rN   )r   r‡   r   r   Úl3Ústdoutr’   r]   r   r   r   Útest_log_info  s    

*zDispatcherTests.test_log_infoc                 C   sz   t  ¡ }d|_t ¡ 0}| ¡  | ¡  | ¡  | ¡  W d   ƒ n1 sL0    Y  | 	¡  
¡ }g d¢}|  ||¡ d S )Nr   )z*warning: unhandled incoming priority eventzwarning: unhandled read eventzwarning: unhandled write eventz warning: unhandled connect event)r   rƒ   Zignore_log_typesr   r”   Úhandle_exptÚhandle_readÚhandle_writeÚhandle_connectr   rŽ   rN   )r   r‡   r–   r’   r]   r   r   r   Útest_unhandled  s    
&zDispatcherTests.test_unhandledc                 C   sF   t  tj¡}ttdƒr*|  |t tj¡¡ t  d¡}|  |dk¡ d S )NÚstrerrorrn   Ú )	r   Z	_strerrorÚerrnoÚEPERMr~   rs   rN   r   Ú
assertTrue)r   Úerrr   r   r   Útest_strerror.  s
    

zDispatcherTests.test_strerrorN)r   r   r   r€   r‚   rˆ   r‹   r“   r—   rœ   r£   r   r   r   r   r   ï   s   r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Údispatcherwithsend_noreadc                 C   s   dS r   r   r
   r   r   r   r„   8  s    z"dispatcherwithsend_noread.readablec                 C   s   d S r   r   r
   r   r   r   r›   ;  s    z(dispatcherwithsend_noread.handle_connectN)r   r   r   r„   r›   r   r   r   r   r¤   7  s   r¤   c                   @   s*   e Zd Zdd„ Zdd„ Zejdd„ ƒZdS )ÚDispatcherWithSendTestsc                 C   s   d S r   r   r
   r   r   r   r€   @  s    zDispatcherWithSendTests.setUpc                 C   s   t  ¡  d S r   r   r
   r   r   r   r‚   C  s    z DispatcherWithSendTests.tearDownc           
   	   C   sþ   t  ¡ }t ¡ }| d¡ t |¡}tƒ }|||f}t jt|d}| 	¡  z¢t
 d¡ d}tƒ }| ¡  | tj|f¡ t
 d¡ | |¡ | |¡ | d¡ d}	|jrÄ|	dkrÄt ¡  |	d	8 }	q¤| ¡  |  | ¡ |d
 ¡ W t |¡ nt |¡ 0 d S )Né   )ÚtargetÚargsçš™™™™™É?s$   Suppose there isn't a 16-ton weight?r(   r+   iè  r   r)   é   )Ú	threadingÚEventr   Ú
settimeoutr   Z	bind_portr   ÚThreadrC   r>   r1   r7   r¤   Úcreate_socketÚconnectÚHOSTÚsendZ
out_bufferr   rR   ÚwaitrN   r   r   Újoin_thread)
r   r9   rH   ÚportZcapr¨   ry   rB   r‡   r=   r   r   r   Ú	test_sendF  s2    








z!DispatcherWithSendTests.test_sendN)r   r   r   r€   r‚   r   Úreap_threadsr¶   r   r   r   r   r¥   ?  s   r¥   Úfile_wrapperzasyncore.file_wrapper requiredc                   @   sV   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Ze e	e
d	ƒd
¡dd„ ƒZdd„ Zdd„ ZdS )ÚFileWrapperTestc                 C   sB   d| _ ttjdƒ}| | j ¡ W d   ƒ n1 s40    Y  d S )Ns   It's not dead, it's sleeping!Úwb)r‡   Úopenr   ÚTESTFNr5   )r   Úfiler   r   r   r€   q  s    zFileWrapperTest.setUpc                 C   s   t  t j¡ d S r   )r   rF   r¼   r
   r   r   r   r‚   v  s    zFileWrapperTest.tearDownc                 C   s‚   t  tjt j¡}t |¡}t  |¡ |  |j	|¡ |  | 
¡ |¡ |  | d¡d¡ |  | d¡d¡ | ¡  |  t|jd¡ d S )Né   s   It's not deadé   s   , it'sr)   )rs   r»   r   r¼   ÚO_RDONLYr   r¸   r   ZassertNotEqualÚfdr   rN   r4   rL   rK   ÚOSError)r   rÁ   r@   r   r   r   Ú	test_recvy  s    

zFileWrapperTest.test_recvc                 C   s˜   d}d}t  tjt jt jB ¡}t |¡}t  |¡ | 	|¡ | 
|¡ | ¡  ttjdƒ*}|  | ¡ | j| | ¡ W d   ƒ n1 sŠ0    Y  d S )Ns   Come again?s   I want to buy some cheese.Úrb)rs   r»   r   r¼   ÚO_WRONLYÚO_APPENDr   r¸   r   r5   r²   rN   rL   r‡   )r   Zd1Zd2rÁ   r@   r½   r   r   r   r¶   …  s    



zFileWrapperTest.test_sendÚfile_dispatcherz!asyncore.file_dispatcher requiredc                    sd   t  tjt j¡}g ‰ G ‡ fdd„dtjƒ}||ƒ}t  |¡ tjdddd |  	d 
ˆ ¡| j¡ d S )Nc                       s   e Zd Z‡ fdd„ZdS )z7FileWrapperTest.test_dispatcher.<locals>.FileDispatcherc                    s   ˆ   |  d¡¡ d S )Né   )rf   r4   r
   ©rB   r   r   r™   ˜  s    zCFileWrapperTest.test_dispatcher.<locals>.FileDispatcher.handle_readN©r   r   r   r™   r   rÉ   r   r   ÚFileDispatcher—  s   rË   r-   Trª   ©r0   Úuse_pollÚcountr,   )rs   r»   r   r¼   rÀ   r   rÇ   r   ÚlooprN   Újoinr‡   )r   rÁ   rË   Úsr   rÉ   r   Útest_dispatcher’  s    
zFileWrapperTest.test_dispatcherc                 C   sb   t  tjt j¡}t |¡}t  |¡ t dt	f¡ d }t 
¡  W d   ƒ n1 sT0    Y  d S )Nrž   )rs   r»   r   r¼   rÀ   r   r¸   r   Zcheck_warningsÚResourceWarningÚ
gc_collect©r   rÁ   rv   r   r   r   Útest_resource_warningŸ  s    

z%FileWrapperTest.test_resource_warningc                 C   s|   t  tjt j¡}t |¡}t  |¡ t  |j¡ |  	t
¡ | ¡  W d   ƒ n1 sX0    Y  |  |jd¡ | ¡  d S )Nrn   )rs   r»   r   r¼   rÀ   r   r¸   r   rÁ   rK   rÂ   rN   rÕ   r   r   r   Útest_close_twice©  s    

&z FileWrapperTest.test_close_twiceN)r   r   r   r€   r‚   rÃ   r¶   r|   r}   r~   r   rÒ   rÖ   r×   r   r   r   r   r¹   n  s   ÿ

r¹   c                   @   sF   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dS )ÚBaseTestHandlerNc                 C   s   t j | |¡ d| _d S r   )r   rƒ   r   r^   )r   rH   r   r   r   r   ¹  s    zBaseTestHandler.__init__c                 C   s   t dƒ‚d S )Nz'handle_accept not supposed to be calledr#   r
   r   r   r   Úhandle_accept½  s    zBaseTestHandler.handle_acceptc                 C   s   t dƒ‚d S )Nz)handle_accepted not supposed to be calledr#   r
   r   r   r   Úhandle_acceptedÀ  s    zBaseTestHandler.handle_acceptedc                 C   s   t dƒ‚d S )Nz(handle_connect not supposed to be calledr#   r
   r   r   r   r›   Ã  s    zBaseTestHandler.handle_connectc                 C   s   t dƒ‚d S )Nz%handle_expt not supposed to be calledr#   r
   r   r   r   r˜   Æ  s    zBaseTestHandler.handle_exptc                 C   s   t dƒ‚d S )Nz&handle_close not supposed to be calledr#   r
   r   r   r   r   É  s    zBaseTestHandler.handle_closec                  C   s   ‚ d S r   r   r
   r   r   r   r%   Ì  s    zBaseTestHandler.handle_error)N)
r   r   r   r   rÙ   rÚ   r›   r˜   r   r%   r   r   r   r   rØ   ·  s   
rØ   c                   @   s4   e Zd Zefdd„Zedd„ ƒZdd„ Zdd„ Zd	S )
Ú
BaseServerc                 C   s>   t j | ¡ |  |¡ |  ¡  t| j|ƒ |  d¡ || _d S ©Né   )	r   rƒ   r   r¯   Úset_reuse_addrrI   r   r.   Úhandler)r   rE   r<   rß   r   r   r   r   Õ  s    

zBaseServer.__init__c                 C   s
   | j  ¡ S r   )r   Úgetsocknamer
   r   r   r   ÚaddressÝ  s    zBaseServer.addressc                 C   s   |   |¡ d S r   )rß   ©r   rH   r<   r   r   r   rÚ   á  s    zBaseServer.handle_acceptedc                  C   s   ‚ d S r   r   r
   r   r   r   r%   ä  s    zBaseServer.handle_errorN)	r   r   r   rØ   r   Úpropertyrá   rÚ   r%   r   r   r   r   rÛ   Ð  s
   
rÛ   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú
BaseClientc                 C   s"   t  | ¡ |  |¡ |  |¡ d S r   )rØ   r   r¯   r°   )r   rE   rá   r   r   r   r   ê  s    

zBaseClient.__init__c                 C   s   d S r   r   r
   r   r   r   r›   ï  s    zBaseClient.handle_connectN)r   r   r   r   r›   r   r   r   r   rä   è  s   rä   c                   @   s¨   e Zd Zdd„ Zd%dd„Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Ze ej d¡d¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zejd"d#„ ƒZd$S )&ÚBaseTestAPIc                 C   s   t jdd d S )NT)Z
ignore_allr   r
   r   r   r   r‚   õ  s    zBaseTestAPI.tearDownrÝ   c                 C   s\   t |ƒd }d}tjrN|dkrNtjdd| jd |jr:d S |d8 }t |¡ q|  d¡ d S )Néd   r   r-   r)   )r0   rÎ   rÍ   zflag not set)	Úfloatr   rg   rÏ   rÍ   r^   r1   r7   rr   )r   Úinstancer0   rÎ   r   r   r   Úloop_waiting_for_flagø  s    z!BaseTestAPI.loop_waiting_for_flagc                 C   s:   G dd„ dt ƒ}t| j| jƒ}|| j|jƒ}|  |¡ d S )Nc                   @   s   e Zd Zdd„ ZdS )z3BaseTestAPI.test_handle_connect.<locals>.TestClientc                 S   s
   d| _ d S r   ©r^   r
   r   r   r   r›     s    zBBaseTestAPI.test_handle_connect.<locals>.TestClient.handle_connectN)r   r   r   r›   r   r   r   r   Ú
TestClient  s   rë   ©rä   rÛ   rE   r<   rá   ré   ©r   rë   ÚserverÚclientr   r   r   Útest_handle_connect  s    zBaseTestAPI.test_handle_connectc                 C   s:   G dd„ dt ƒ}|| j| jƒ}t| j|jƒ}|  |¡ d S )Nc                   @   s   e Zd Zdd„ Zdd„ ZdS )z4BaseTestAPI.test_handle_accept.<locals>.TestListenerc                 S   s:   t  | ¡ |  |¡ t| j|ƒ |  d¡ | j ¡ | _d S rÜ   ©rØ   r   r¯   rI   r   r.   rà   rá   ©r   rE   r<   r   r   r   r     s
    


z=BaseTestAPI.test_handle_accept.<locals>.TestListener.__init__c                 S   s
   d| _ d S r   rê   r
   r   r   r   rÙ     s    zBBaseTestAPI.test_handle_accept.<locals>.TestListener.handle_acceptN)r   r   r   r   rÙ   r   r   r   r   ÚTestListener  s   ró   ©rØ   rE   r<   rä   rá   ré   ©r   ró   rî   rï   r   r   r   Útest_handle_accept  s    zBaseTestAPI.test_handle_acceptc                 C   s:   G dd„ dt ƒ}|| j| jƒ}t| j|jƒ}|  |¡ d S )Nc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )z6BaseTestAPI.test_handle_accepted.<locals>.TestListenerc                 S   s:   t  | ¡ |  |¡ t| j|ƒ |  d¡ | j ¡ | _d S rÜ   rñ   rò   r   r   r   r   &  s
    


z?BaseTestAPI.test_handle_accepted.<locals>.TestListener.__init__c                 S   s   t j | ¡ d S r   )r   rƒ   rÙ   r
   r   r   r   rÙ   -  s    zDBaseTestAPI.test_handle_accepted.<locals>.TestListener.handle_acceptc                 S   s   |  ¡  d| _d S r   )r   r^   râ   r   r   r   rÚ   0  s    zFBaseTestAPI.test_handle_accepted.<locals>.TestListener.handle_acceptedN)r   r   r   r   rÙ   rÚ   r   r   r   r   ró   $  s   ró   rô   rõ   r   r   r   Útest_handle_accepted!  s    z BaseTestAPI.test_handle_acceptedc                 C   sL   G dd„ dt ƒ}G dd„ dtƒ}t| j| j|ƒ}|| j|jƒ}|  |¡ d S )Nc                   @   s   e Zd Zdd„ ZdS )z0BaseTestAPI.test_handle_read.<locals>.TestClientc                 S   s
   d| _ d S r   rê   r
   r   r   r   r™   =  s    z<BaseTestAPI.test_handle_read.<locals>.TestClient.handle_readNrÊ   r   r   r   r   rë   <  s   rë   c                   @   s   e Zd Zdd„ ZdS )z1BaseTestAPI.test_handle_read.<locals>.TestHandlerc                 S   s   t  | |¡ |  d¡ d S )Ns   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)rØ   r   r²   ©r   r;   r   r   r   r   A  s    z:BaseTestAPI.test_handle_read.<locals>.TestHandler.__init__N©r   r   r   r   r   r   r   r   ÚTestHandler@  s   rú   ©rä   rØ   rÛ   rE   r<   rá   ré   ©r   rë   rú   rî   rï   r   r   r   Útest_handle_read9  s
    zBaseTestAPI.test_handle_readc                 C   s:   G dd„ dt ƒ}t| j| jƒ}|| j|jƒ}|  |¡ d S )Nc                   @   s   e Zd Zdd„ ZdS )z1BaseTestAPI.test_handle_write.<locals>.TestClientc                 S   s
   d| _ d S r   rê   r
   r   r   r   rš   M  s    z>BaseTestAPI.test_handle_write.<locals>.TestClient.handle_writeN)r   r   r   rš   r   r   r   r   rë   L  s   rë   rì   rí   r   r   r   Útest_handle_writeI  s    zBaseTestAPI.test_handle_writec                 C   sL   G dd„ dt ƒ}G dd„ dtƒ}t| j| j|ƒ}|| j|jƒ}|  |¡ d S )Nc                   @   s   e Zd Zdd„ Zdd„ ZdS )z1BaseTestAPI.test_handle_close.<locals>.TestClientc                 S   s   |   d¡ d S )Né   )r4   r
   r   r   r   r™   Z  s    z=BaseTestAPI.test_handle_close.<locals>.TestClient.handle_readc                 S   s   d| _ |  ¡  d S r   ©r^   r   r
   r   r   r   r   _  s    z>BaseTestAPI.test_handle_close.<locals>.TestClient.handle_closeN)r   r   r   r™   r   r   r   r   r   rë   X  s   rë   c                   @   s   e Zd Zdd„ ZdS )z2BaseTestAPI.test_handle_close.<locals>.TestHandlerc                 S   s   t  | |¡ |  ¡  d S r   )rØ   r   r   rø   r   r   r   r   d  s    z;BaseTestAPI.test_handle_close.<locals>.TestHandler.__init__Nrù   r   r   r   r   rú   c  s   rú   rû   rü   r   r   r   Útest_handle_closeT  s
    zBaseTestAPI.test_handle_closec                    sX   d‰ G ‡ fdd„dt ƒ}G ‡ fdd„dtƒ}t| j| j|ƒ}|| j|jƒ}|  |¡ d S )Ns€                                                                                                                                   c                       s(   e Zd Z‡ fdd„Zdd„ Zdd„ ZdS )zCBaseTestAPI.test_handle_close_after_conn_broken.<locals>.TestClientc                    s   |   ˆ ¡ d S r   )r²   r
   rÉ   r   r   rš   t  s    zPBaseTestAPI.test_handle_close_after_conn_broken.<locals>.TestClient.handle_writec                 S   s   d| _ |  ¡  d S r   r   r
   r   r   r   r   w  s    zPBaseTestAPI.test_handle_close_after_conn_broken.<locals>.TestClient.handle_closec                 S   s   d| _ |  ¡  d S r   r   r
   r   r   r   r˜   {  s    zOBaseTestAPI.test_handle_close_after_conn_broken.<locals>.TestClient.handle_exptN)r   r   r   rš   r   r˜   r   rÉ   r   r   rë   r  s   rë   c                       s    e Zd Z‡ fdd„Zdd„ ZdS )zDBaseTestAPI.test_handle_close_after_conn_broken.<locals>.TestHandlerc                    s   |   tˆ ƒ¡ |  ¡  d S r   )r4   ri   r   r
   rÉ   r   r   r™     s    zPBaseTestAPI.test_handle_close_after_conn_broken.<locals>.TestHandler.handle_readc                 S   s   dS r   r   r
   r   r   r   r…   …  s    zMBaseTestAPI.test_handle_close_after_conn_broken.<locals>.TestHandler.writableN)r   r   r   r™   r…   r   rÉ   r   r   rú     s   rú   rû   rü   r   rÉ   r   Ú#test_handle_close_after_conn_brokenl  s    	z/BaseTestAPI.test_handle_close_after_conn_brokenZsunosz OOB support is broken on Solarisc                 C   s€   t r| jtjkr|  d¡ tjdkr4| jr4|  d¡ G dd„ dtƒ}G dd„ dt	ƒ}t
| j| j|ƒ}|| j|jƒ}|  |¡ d S )Nú"Not applicable to AF_UNIX sockets.Údarwinz(poll may fail on macOS; see issue #28087c                   @   s   e Zd Zdd„ ZdS )z0BaseTestAPI.test_handle_expt.<locals>.TestClientc                 S   s   | j  dt j¡ d| _d S )Nrÿ   T)r   r4   ÚMSG_OOBr^   r
   r   r   r   r˜   ™  s    z<BaseTestAPI.test_handle_expt.<locals>.TestClient.handle_exptN)r   r   r   r˜   r   r   r   r   rë   ˜  s   rë   c                   @   s   e Zd Zdd„ ZdS )z1BaseTestAPI.test_handle_expt.<locals>.TestHandlerc                 S   s*   t  | |¡ | j ttdƒdƒtj¡ d S )Néô   zlatin-1)rØ   r   r   r²   ÚbytesÚchrr  rø   r   r   r   r   ž  s    z:BaseTestAPI.test_handle_expt.<locals>.TestHandler.__init__Nrù   r   r   r   r   rú     s   rú   )rD   rE   r   r   ÚskipTestrp   ÚplatformrÍ   rä   rØ   rÛ   r<   rá   ré   rü   r   r   r   Útest_handle_exptŒ  s    

zBaseTestAPI.test_handle_exptc                 C   s:   G dd„ dt ƒ}t| j| jƒ}|| j|jƒ}|  |¡ d S )Nc                   @   s   e Zd Zdd„ Zdd„ ZdS )z1BaseTestAPI.test_handle_error.<locals>.TestClientc                 S   s   dd  d S )Ng      ð?r   r   r
   r   r   r   rš   ©  s    z>BaseTestAPI.test_handle_error.<locals>.TestClient.handle_writec                 S   s,   d| _ z‚ W n ty   Y n
0 tdƒ‚d S )NTzexception not raised)r^   ÚZeroDivisionErrorr$   r
   r   r   r   r%   «  s    z>BaseTestAPI.test_handle_error.<locals>.TestClient.handle_errorN)r   r   r   rš   r%   r   r   r   r   rë   ¨  s   rë   rì   rí   r   r   r   Útest_handle_error¦  s    zBaseTestAPI.test_handle_errorc                 C   sÞ   t | j| jƒ}t| j|jƒ}|  |j¡ |  |j¡ |  |j¡ t	j
d| jdd |  |j¡ |  |j¡ |  |j¡ |  |j¡ | ¡  |  |j¡ |  |j¡ |  |j¡ |  |j¡ | ¡  |  |j¡ |  |j¡ d S )Nr-   ræ   rÌ   )rÛ   rE   r<   rä   rá   ÚassertFalseZ	connectedr¡   Z	acceptingr   rÏ   rÍ   r   )r   rî   rï   r   r   r   Útest_connection_attributes¸  s$    z&BaseTestAPI.test_connection_attributesc                 C   s^   t  ¡ }| | j¡ |  |jjtj¡ |  |jj| j¡ |  |j ¡ d¡ |  	|j 
¡ ¡ d S )Nr   )r   rƒ   r¯   rE   rN   r   ÚtypeÚSOCK_STREAMÚ
gettimeoutr  Úget_inheritable)r   rÑ   r   r   r   Útest_create_socketÖ  s    zBaseTestAPI.test_create_socketc                 C   s„   t r| jtjkr|  d¡ t ¡ }| | j¡ | | j	¡ | 
d¡ |j ¡ d }t ¡ }| | j¡ |  t|j| j	d |f¡ d S )Nr  rÝ   r)   r   )rD   rE   r   r   r	  r   rƒ   r¯   rG   r<   r.   rà   rK   rÂ   )r   Ús1rµ   Ús2r   r   r   Ú	test_bindÞ  s    

zBaseTestAPI.test_bindc              	   C   sÞ   t r| jtjkr|  d¡ t | j¡¤}z| tjtjd¡ W n tyZ   t	 
d¡ Y nb0 t t | j¡¡}|  |j tjtj¡¡ |j ¡  | | j¡ | ¡  |  |j tjtj¡¡ W d   ƒ n1 sÐ0    Y  d S )Nr  r)   z+SO_REUSEADDR not supported on this platform)rD   rE   r   r   r	  Ú
setsockoptÚ
SOL_SOCKETÚSO_REUSEADDRrÂ   r|   Úskipr   rƒ   r  Ú
getsockoptr   r¯   rÞ   r¡   )r   rH   rÑ   r   r   r   Útest_set_reuse_addrì  s"    
ÿ
ÿzBaseTestAPI.test_set_reuse_addrc              
   C   sä   | j tjttdtƒ ƒfvr$|  d¡ t| j | jƒ}tj	dd„ d}| 
¡  zˆt | j tj¡Z}| d¡ | tjtjt ddd	¡¡ z| |j¡ W n ty¦   Y n0 W d   ƒ n1 s¼0    Y  W t |¡ nt |¡ 0 d S )
NÚAF_INET6z%test specific to AF_INET and AF_INET6c                   S   s   t jdddS )Nr(   rÝ   )r0   rÎ   )r   rÏ   r   r   r   r   Ú<lambda>	  s   ÿz0BaseTestAPI.test_quick_connect.<locals>.<lambda>)r§   r©   Úiir)   r   )rE   r   ÚAF_INETr\   Úobjectr	  rÛ   r<   r«   r®   r>   r  r­   r  r  Ú	SO_LINGERÚstructÚpackr°   rá   rÂ   r   r´   )r   rî   ry   rÑ   r   r   r   Útest_quick_connect  s     

ÿ&zBaseTestAPI.test_quick_connectN)rÝ   )r   r   r   r‚   ré   rð   rö   r÷   rý   rþ   r  r  r|   ZskipIfrp   r
  Ú
startswithr  r  r  r  r  r  r   r·   r&  r   r   r   r   rå   ó  s(   
 ÿ
rå   c                   @   s   e Zd ZejZejdfZdS )ÚTestAPI_UseIPv4Socketsr   N)	r   r   r   r   r!  rE   r   r±   r<   r   r   r   r   r(    s   r(  zIPv6 support requiredc                   @   s   e Zd ZejZejdfZdS )ÚTestAPI_UseIPv6Socketsr   N)	r   r   r   r   r  rE   r   ZHOSTv6r<   r   r   r   r   r)    s   r)  zUnix sockets requiredc                   @   s$   e Zd ZerejZejZ	dd„ Z
dS )ÚTestAPI_UseUnixSocketsc                 C   s   t  | j¡ t | ¡ d S r   )r   rF   r<   rå   r‚   r
   r   r   r   r‚   (  s    zTestAPI_UseUnixSockets.tearDownN)r   r   r   rD   r   r   rE   r   r¼   r<   r‚   r   r   r   r   r*  "  s   r*  c                   @   s   e Zd ZdZdS )ÚTestAPI_UseIPv4SelectFN©r   r   r   rÍ   r   r   r   r   r+  ,  s   r+  rR   rS   c                   @   s   e Zd ZdZdS )ÚTestAPI_UseIPv4PollTNr,  r   r   r   r   r-  /  s   r-  c                   @   s   e Zd ZdZdS )ÚTestAPI_UseIPv6SelectFNr,  r   r   r   r   r.  3  s   r.  c                   @   s   e Zd ZdZdS )ÚTestAPI_UseIPv6PollTNr,  r   r   r   r   r/  6  s   r/  c                   @   s   e Zd ZdZdS )ÚTestAPI_UseUnixSocketsSelectFNr,  r   r   r   r   r0  :  s   r0  c                   @   s   e Zd ZdZdS )ÚTestAPI_UseUnixSocketsPollTNr,  r   r   r   r   r1  =  s   r1  Ú__main__)3r   r|   r3   rs   r   rp   r1   rŸ   r$  r«   Útestr   Ztest.supportr   Úior   ZPGOZSkipTestr~   rD   r   r   r   r    rC   rI   ZTestCaserJ   r   Zdispatcher_with_sendr¤   r¥   r}   r¹   rƒ   rØ   rÛ   rä   rå   r(  ZIPV6_ENABLEDr)  r*  r+  r-  r.  r/  r0  r1  r   Úmainr   r   r   r   Ú<module>   sh   



 H/ÿG  (
	
