a
    	¼3jwG  ã                   @   s:  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mZ d dl	m
Z d dlmZ d dlmZ G dd„ dejƒZG d	d
„ d
ƒZejdkr¼G dd„ deejƒZG dd„ deejƒZnzd dlZeedƒrâG dd„ deejƒZeedƒrG dd„ deejƒZeedƒr"G dd„ deejƒZG dd„ deejƒZdS )é    N)Úproactor_events)ÚcycleÚislice)Úutils)Úsupport)Úsocket_helperc                   @   s>   e Zd ZdZdZddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Z	dS )ÚMyProtoNc                 C   s2   d | _ d| _d| _|d ur.| ¡ | _| ¡ | _d S )NZINITIALr   )Ú	transportÚstateÚnbytesZcreate_futureÚ	connectedÚdone)ÚselfÚloop© r   ú`/www/server/python_manager/versions/3.9.10/lib/python3.9/test/test_asyncio/test_sock_lowlevel.pyÚ__init__   s    
zMyProto.__init__c                 C   s,   || _ d| _| jr| j d ¡ | d¡ d S )NZ	CONNECTEDs%   GET / HTTP/1.0
Host: example.com

)r	   r
   r   Ú
set_resultÚwrite)r   r	   r   r   r   Úconnection_made   s
    zMyProto.connection_madec                 C   s   |  j t|ƒ7  _ d S ©N)r   Úlen)r   Údatar   r   r   Údata_received"   s    zMyProto.data_receivedc                 C   s
   d| _ d S )NZEOF)r
   ©r   r   r   r   Úeof_received&   s    zMyProto.eof_receivedc                 C   s   d| _ | jr| j d ¡ d S )NZCLOSED)r
   r   r   )r   Úexcr   r   r   Úconnection_lost*   s    zMyProto.connection_lost)N)
Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r   r   r   r   r      s   
r   c                       sÆ   e Zd Zdd„ Z‡ fdd„Z‡ f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ejd!d"„ ƒZd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Z‡  ZS )+ÚBaseSockTestsMixinc                 C   s   t ‚d S r   )ÚNotImplementedErrorr   r   r   r   Úcreate_event_loop3   s    z$BaseSockTestsMixin.create_event_loopc                    s$   |   ¡ | _|  | j¡ tƒ  ¡  d S r   )r#   r   Zset_event_loopÚsuperÚsetUpr   ©Ú	__class__r   r   r%   6   s    
zBaseSockTestsMixin.setUpc                    s4   | j  ¡ st | j ¡ |  ¡  t ¡  tƒ  ¡  d S r   )	r   Z	is_closedÚ
test_utilsZrun_brieflyZ
doCleanupsr   Ú
gc_collectr$   ÚtearDownr   r&   r   r   r*   ;   s
    
zBaseSockTestsMixin.tearDownc                 C   sì  t | jtjƒsl| j d¡ | d¡ |  t¡( | j | j 	||j
¡¡ W d   ƒ n1 s^0    Y  |  t¡& | j | j |d¡¡ W d   ƒ n1 sž0    Y  |  t¡& | j | j |d¡¡ W d   ƒ n1 sÞ0    Y  |  t¡( | j | j |tƒ ¡¡ W d   ƒ n1 s"0    Y  |  t¡$ | j | j |¡¡ W d   ƒ n1 sb0    Y  | d¡ | j | j 	||j
¡¡ | j | j |d¡¡ | j | j |d¡¡}| j | j |d¡¡ | ¡  |  | d¡¡ d S )NTó   GET / HTTP/1.0

é   Fó   HTTP/1.0 200 OK)Ú
isinstancer   r   ZBaseProactorEventLoopZ	set_debugÚsetblockingÚassertRaisesÚ
ValueErrorÚrun_until_completeÚsock_connectÚaddressÚsock_sendallÚ	sock_recvÚsock_recv_intoÚ	bytearrayÚsock_acceptÚcloseÚ
assertTrueÚ
startswith)r   ÚhttpdÚsockr   r   r   r   Ú_basetest_sock_client_opsD   sL    
ÿ"ÿ"ÿ"ÿ$
ÿ$
ÿÿÿÿz,BaseSockTestsMixin._basetest_sock_client_opsc              	   C   sÀ   |  d¡ | j | j ||j¡¡ | j | j |d¡¡ tdƒ}t|ƒL}| j | j ||d d… ¡¡}| j | j |||d … ¡¡ W d   ƒ n1 sš0    Y  | 	¡  |  
| d¡¡ d S )NFr+   r,   r-   )r/   r   r2   r3   r4   r5   r8   Ú
memoryviewr7   r:   r;   r<   )r   r=   r>   r   Úbufr   r   r   r   Ú_basetest_sock_recv_intoh   s"    
ÿÿ
ÿÿ"z+BaseSockTestsMixin._basetest_sock_recv_intoc                 C   sT   t  ¡ 8}t ¡ }|  ||¡ t ¡ }|  ||¡ W d   ƒ n1 sF0    Y  d S r   )r(   Úrun_test_serverÚsocketr?   rB   ©r   r=   r>   r   r   r   Útest_sock_client_opsy   s
    
z'BaseSockTestsMixin.test_sock_client_opsc                 Ã   sœ   |  d¡ | j ||j¡I d H  t | j |d¡¡}t d¡I d H  | ¡  t | j 	|d¡¡ | j |d¡I d H }| j |d¡I d H  |  
| d¡¡ d S ©NFr,   r   r+   r-   )r/   r   r3   r4   ÚasyncioÚcreate_taskr6   ÚsleepÚcancelr5   r;   r<   )r   r=   r>   Útaskr   r   r   r   Ú_basetest_sock_recv_racing€   s    
ÿz-BaseSockTestsMixin._basetest_sock_recv_racingc              	   Ã   sî   |  d¡ | j ||j¡I d H  tdƒ}t|ƒ }t | j ||d d… ¡¡}t 	d¡I d H  | 
¡  t | j |d¡¡}| j ||d d… ¡I d H }| j |||d … ¡I d H  |  | d¡¡ W d   ƒ n1 sÖ0    Y  |I d H  d S rG   )r/   r   r3   r4   r8   r@   rH   rI   r7   rJ   rK   r5   r;   r<   )r   r=   r>   r   rA   rL   r   r   r   r   Ú_basetest_sock_recv_into_racing   s     

ÿÿ.z2BaseSockTestsMixin._basetest_sock_recv_into_racingc              	   ƒ   sv  |  d¡ | d¡ | tjtjd¡ | d¡ t ˆ j	 
|| ¡ ¡¡}t d¡I d H  | ¡ d ‰ˆ d¡ ˆî |I d H  d}|dkrÒˆ  t¡  | d| ¡ q–W d   ƒ n1 sº0    Y  t|d	 ƒ}q‚t ˆ j	 |d
¡¡}t d¡I d H  | ¡  ‡ ‡fdd„}t |ƒ ¡}ˆ j	 |d¡I d H  | tj¡ |I d H }ˆ  | d¡¡ W d   ƒ n1 sh0    Y  d S )N©z	127.0.0.1r   é   r,   Fr   é    é   ó    é   s   helloc                  “   s2   d} ˆ j  ˆd¡I d H }|s | S | | ¡ 7 } qd S )Nó    rQ   )r   r6   Ústrip)ÚrvrA   ©r   Zserverr   r   Úrecv_allÃ   s
    z?BaseSockTestsMixin._basetest_sock_send_racing.<locals>.recv_alls   world)ÚbindÚlistenÚ
setsockoptrD   Ú
SOL_SOCKETÚ	SO_SNDBUFr/   rH   rI   r   r3   ÚgetsocknamerJ   Úacceptr0   ÚBlockingIOErrorÚsendÚintr5   rK   ÚshutdownÚSHUT_WRr;   Úendswith)r   Úlistenerr>   rL   ÚsizerY   r   r   rX   r   Ú_basetest_sock_send_racing¤   s8    


ÿ

.ÿ
z-BaseSockTestsMixin._basetest_sock_send_racingc                 Ã   sþ   |  d¡ | ¡ }| d¡ t | j ||¡¡}t d¡I d H  | ¡  | 	d¡ d}t
dƒD ]}z| j ||¡I d H  W nl ty¢ } z|}W Y d }~q^d }~0  tyæ } z.|}t|ddƒdkrÒW Y d }~ qðW Y d }~q^d }~0 0  d S q^|  |¡ d S )	NrO   Fr   rP   zMax retries reachedé€   Úwinerrori&'  )rZ   r_   r/   rH   rI   r   r3   rJ   rK   r[   ÚrangeÚConnectionRefusedErrorÚOSErrorÚgetattrZskipTest)r   rg   r>   ÚaddrrL   Zskip_reasonÚiÚer   r   r   Ú_basetest_sock_connect_racingÛ   s&    


$z0BaseSockTestsMixin._basetest_sock_connect_racingc              
   C   s4  t  ¡  }t ¡ }|, | j t |  ||¡d¡¡ W d   ƒ n1 sH0    Y  t ¡ }|, | j t |  ||¡d¡¡ W d   ƒ n1 s0    Y  W d   ƒ n1 s®0    Y  t ¡ }t ¡ }|R |, | j t |  	||¡d¡¡ W d   ƒ n1 s0    Y  W d   ƒ n1 s&0    Y  d S ©Né
   )
r(   rC   rD   r   r2   rH   Úwait_forrM   rN   ri   )r   r=   r>   rg   r   r   r   Útest_sock_client_racingù   s"    

ÿ$
ÿB
ÿz*BaseSockTestsMixin.test_sock_client_racingc              
   C   sx   t   ¡ }t   ¡ }|P |, | j t |  ||¡d¡¡ W d   ƒ n1 sL0    Y  W d   ƒ n1 sj0    Y  d S rt   )rD   r   r2   rH   rv   rs   )r   rg   r>   r   r   r   Útest_sock_client_connect_racing	  s    
ÿz2BaseSockTestsMixin.test_sock_client_connect_racingc                 Ã   s€  t   ¡ }| d¡ d}d|d  }| j ||¡I d H  | j |dd|  d ¡I d H  t | j ||¡¡}| j ||¡I d H }|  | 	d¡¡ | 
d	¡d
kr¶|| j ||¡I d H 7 }qŽ|d | d	¡d … }|t|ƒd … }|}tdƒ}	tt|	t|ƒƒƒ}
|  ||
¡ |t|ƒ8 }| j ||¡I d H }|s0q^tt|	t|ƒƒƒ}
|  ||
¡ |t|ƒ8 }q|  |d¡ |I d H  | ¡  d S ©NFi@B s
   0123456789ru   s   POST /loop HTTP/1.0
s   Content-Length: %d
s   
r-   s   

éÿÿÿÿrR   r   )rD   r/   r   r3   r5   rH   rI   r6   r;   r<   ÚfindÚindexr   r   Úbytesr   ÚassertEqualr:   )r   r4   r>   Ú	DATA_SIZEÚchunkrL   r   Úheadersrh   ÚcheckerÚexpectedr   r   r   Ú_basetest_huge_content  sB    
ÿþÿ

z)BaseSockTestsMixin._basetest_huge_contentc                 C   s@   t  ¡ $}| j |  |j¡¡ W d   ƒ n1 s20    Y  d S r   )r(   rC   r   r2   r„   r4   ©r   r=   r   r   r   Útest_huge_content<  s    

ÿz$BaseSockTestsMixin.test_huge_contentc                 Ã   s¸  t   ¡ }| d¡ d}d|d  }| j ||¡I d H  | j |dd|  d ¡I d H  t | j ||¡¡}t|ƒ}t|ƒ}| j 	||¡I d H }t
|d |… ƒ}	|  |	 d¡¡ |	 d	¡d
krâ| j 	||¡I d H }t
|d |… ƒ}	q®|	d |	 d	¡d … }
|	t|
ƒd … }	|}tdƒ}t
t|t|	ƒƒƒ}|  |	|¡ |t|	ƒ8 }| j 	||¡I d H }|d |… }	|	shq–t
t|t|	ƒƒƒ}|  |	|¡ |t|	ƒ8 }q>|  |d¡ |I d H  | ¡  d S ry   )rD   r/   r   r3   r5   rH   rI   r8   r@   r7   r}   r;   r<   r{   r|   r   r   r   r~   r:   )r   r4   r>   r   r€   rL   ÚarrayrA   r   r   r   rh   r‚   rƒ   r   r   r   Ú_basetest_huge_content_recvintoA  sL    
ÿþÿ

z2BaseSockTestsMixin._basetest_huge_content_recvintoc                 C   s@   t  ¡ $}| j |  |j¡¡ W d   ƒ n1 s20    Y  d S r   )r(   rC   r   r2   rˆ   r4   r…   r   r   r   Útest_huge_content_recvintos  s    

ÿz-BaseSockTestsMixin.test_huge_content_recvintoc                 C   s\   t  ¡ @}t tj¡}|  ||¡ t tj¡}|  ||¡ W d   ƒ n1 sN0    Y  d S r   )r(   Zrun_test_unix_serverrD   ÚAF_UNIXr?   rB   rE   r   r   r   Útest_unix_sock_client_opsx  s
    
z,BaseSockTestsMixin.test_unix_sock_client_opsc                 C   s”   d }z&t   ¡ }| d¡ | ¡ }W | ¡  n
| ¡  0 t   ¡ }| d¡ |  t¡& | j | j 	||¡¡ W d   ƒ n1 s~0    Y  | ¡  d S )NrO   F)
rD   rZ   r_   r:   r/   r0   rm   r   r2   r3   )r   r4   Úsr>   r   r   r   Útest_sock_client_fail€  s    


ÿ"z(BaseSockTestsMixin.test_sock_client_failc                 C   s¨   t   ¡ }| d¡ | d¡ | d¡ t   ¡ }| | ¡ ¡ | j |¡}| j |¡\}}|  	| 
¡ d¡ |  	|| ¡ ¡ |  	| ¡ | ¡ ¡ | ¡  | ¡  | ¡  d S )NFrO   rP   r   )rD   r/   rZ   r[   Úconnectr_   r   r9   r2   r~   Ú
gettimeoutÚgetpeernamer:   )r   rg   ÚclientÚfÚconnrp   r   r   r   Útest_sock_accept‘  s    


z#BaseSockTestsMixin.test_sock_acceptc                 C   sä   t   ¡ }| d¡ | d¡ | d¡ | ¡ }t | j |¡d¡}|  	tj
¡ | j |¡ W d   ƒ n1 sp0    Y  | ¡  t   ¡ }| d¡ | j ||¡}|  	t¡ | j |¡ W d   ƒ n1 sÎ0    Y  | ¡  d S )NFrO   rP   gš™™™™™¹?)rD   r/   rZ   r[   r_   rH   rv   r   r9   r0   ÚTimeoutErrorr2   r:   r3   rm   )r   rg   Zsockaddrr’   r‘   r   r   r   Útest_cancel_sock_accept¢  s    


*
*z*BaseSockTestsMixin.test_cancel_sock_acceptc              
      s  t  ¡ ú}d }ˆ j ˆ jj|jdtjiŽ¡}|D ]Z\}}}}}z4tj|||d}| d¡ ˆ j ˆ j 	||¡¡ W n t
y„   Y q00  qŒq0ˆ jj‡ fdd„|d}	ˆ j |	¡\}
}ˆ  |
tj¡ ˆ  |tj¡ ˆ j |j¡ ˆ  |jd¡ |
 ¡  W d   ƒ n1 s
0    Y  d S )NÚtype)Úfamilyr—   ÚprotoFc                      s   t ˆ jdS )N)r   )r   r   r   r   r   r   Ú<lambda>É  rU   z@BaseSockTestsMixin.test_create_connection_sock.<locals>.<lambda>)r>   r   )r(   rC   r   r2   Úgetaddrinfor4   rD   ÚSOCK_STREAMr/   r3   ÚBaseExceptionÚcreate_connectionZassertIsInstancerH   Z	TransportÚProtocolr   ZassertGreaterr   r:   )r   r=   r>   Zinfosr˜   r—   r™   Zcnamer4   r’   ÚtrZprr   r   r   Útest_create_connection_sockµ  s8    
ÿÿÿ
ÿÿz.BaseSockTestsMixin.test_create_connection_sock)r   r   r    r#   r%   r*   r?   rB   rF   rM   rN   ri   rs   rw   rx   r„   r†   rˆ   r‰   r   Zskip_unless_bind_unix_socketr‹   r   r”   r–   r¡   Ú__classcell__r   r   r&   r   r!   1   s,   	$7,2
r!   Úwin32c                   @   s   e Zd Zdd„ ZdS )ÚSelectEventLoopTestsc                 C   s   t  ¡ S r   )rH   ÚSelectorEventLoopr   r   r   r   r#   ×  s    ú&SelectEventLoopTests.create_event_loopN©r   r   r    r#   r   r   r   r   r¤   Ô  s   r¤   c                   @   s   e Zd Zdd„ ZdS )ÚProactorEventLoopTestsc                 C   s   t  ¡ S r   )rH   ZProactorEventLoopr   r   r   r   r#   Ý  s    z(ProactorEventLoopTests.create_event_loopNr§   r   r   r   r   r¨   Ú  s   r¨   ÚKqueueSelectorc                   @   s   e Zd Zdd„ ZdS )ÚKqueueEventLoopTestsc                 C   s   t  t ¡ ¡S r   )rH   r¥   Ú	selectorsr©   r   r   r   r   r#   ç  s    ÿz&KqueueEventLoopTests.create_event_loopNr§   r   r   r   r   rª   ä  s   rª   ÚEpollSelectorc                   @   s   e Zd Zdd„ ZdS )ÚEPollEventLoopTestsc                 C   s   t  t ¡ ¡S r   )rH   r¥   r«   r¬   r   r   r   r   r#   ï  s    z%EPollEventLoopTests.create_event_loopNr§   r   r   r   r   r­   ì  s   r­   ÚPollSelectorc                   @   s   e Zd Zdd„ ZdS )ÚPollEventLoopTestsc                 C   s   t  t ¡ ¡S r   )rH   r¥   r«   r®   r   r   r   r   r#   ö  s    z$PollEventLoopTests.create_event_loopNr§   r   r   r   r   r¯   ó  s   r¯   c                   @   s   e Zd Zdd„ ZdS )r¤   c                 C   s   t  t ¡ ¡S r   )rH   r¥   r«   ÚSelectSelectorr   r   r   r   r#   ý  s    r¦   Nr§   r   r   r   r   r¤   ú  s   )rD   ÚtimerH   ÚsysZunittestr   Ú	itertoolsr   r   Ztest.test_asyncior   r(   Útestr   Ztest.supportr   rŸ   r   r!   ÚplatformZTestCaser¤   r¨   r«   Úhasattrrª   r­   r¯   r   r   r   r   Ú<module>   sJ   #   $
ÿÿ
ÿÿÿÿ