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 )NÚ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@   || _ | jdksJ | jƒ‚d| _| jr2| j d ¡ | d¡ d S )Nr	   Ú	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 dksJ | j ƒ‚|  jt|ƒ7  _d S )Nr   )r   r   Úlen)r   Údatar   r   r   Údata_received"   s    zMyProto.data_receivedc                 C   s   | j dksJ | j ƒ‚d| _ d S )Nr   ÚEOF)r   ©r   r   r   r   Úeof_received&   s    zMyProto.eof_receivedc                 C   s0   | j dv sJ | j ƒ‚d| _ | jr,| j d ¡ d S )N)r   r   Z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 ©N)Ú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/   r0   )r2   r   r5   r6   r7   r8   r;   Ú
memoryviewr:   r=   r>   r?   )r   r@   rA   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ÚsocketrB   rE   ©r   r@   rA   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.   r0   )r2   r   r6   r7   ÚasyncioÚcreate_taskr9   ÚsleepÚcancelr8   r>   r?   )r   r@   rA   Ú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 rJ   )r2   r   r6   r7   r;   rC   rK   rL   r:   rM   rN   r8   r>   r?   )r   r@   rA   r   rD   rO   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ó    rT   )r   r9   Ústrip)ÚrvrD   ©r   Zserverr   r   Úrecv_allÃ   s
    z?BaseSockTestsMixin._basetest_sock_send_racing.<locals>.recv_alls   world)ÚbindÚlistenÚ
setsockoptrG   Ú
SOL_SOCKETÚ	SO_SNDBUFr2   rK   rL   r   r6   ÚgetsocknamerM   Úacceptr3   ÚBlockingIOErrorÚsendÚintr8   rN   ÚshutdownÚSHUT_WRr>   Úendswith)r   ÚlistenerrA   rO   Úsizer\   r   r   r[   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 )	NrR   Fr   rS   zMax retries reachedé€   Úwinerrori&'  )r]   rb   r2   rK   rL   r   r6   rM   rN   r^   ÚrangeÚConnectionRefusedErrorÚOSErrorÚgetattrZskipTest)r   rj   rA   ÚaddrrO   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+   rF   rG   r   r5   rK   Úwait_forrP   rQ   rl   )r   r@   rA   rj   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 rw   )rG   r   r5   rK   ry   rv   )r   rj   rA   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
   0123456789rx   s   POST /loop HTTP/1.0
s   Content-Length: %d
s   
r0   s   

éÿÿÿÿrU   r   )rG   r2   r   r6   r8   rK   rL   r9   r>   r?   ÚfindÚindexr   r   Úbytesr   ÚassertEqualr=   )r   r7   rA   Ú	DATA_SIZEÚchunkrO   r   Úheadersrk   Ú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+   rF   r   r5   r‡   r7   ©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 r|   )rG   r2   r   r6   r8   rK   rL   r;   rC   r:   r€   r>   r?   r~   r   r   r   r   r   r=   )r   r7   rA   r‚   rƒ   rO   ÚarrayrD   r   r   r„   rk   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+   rF   r   r5   r‹   r7   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_serverrG   ÚAF_UNIXrB   rE   rH   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 )NrR   F)
rG   r]   rb   r=   r2   r3   rp   r   r5   r6   )r   r7   ÚsrA   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 )NFrR   rS   r   )rG   r2   r]   r^   Úconnectrb   r   r<   r5   r   Ú
gettimeoutÚgetpeernamer=   )r   rj   ÚclientÚfÚconnrs   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 )NFrR   rS   gš™™™™™¹?)rG   r2   r]   r^   rb   rK   ry   r   r<   r3   ÚTimeoutErrorr5   r=   r6   rp   )r   rj   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 q20  qšq2dsšJ dƒ‚ˆ 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š   ÚprotoFzCan not create socket.c                      s   t ˆ jdS )N)r   )r   r   r   r   r   r   Ú<lambda>É  rX   z@BaseSockTestsMixin.test_create_connection_sock.<locals>.<lambda>)rA   r   )r+   rF   r   r5   Úgetaddrinfor7   rG   ÚSOCK_STREAMr2   r6   ÚBaseExceptionÚcreate_connectionZassertIsInstancerK   Z	TransportÚProtocolr   ZassertGreaterr   r=   )r   r@   rA   Zinfosr›   rš   rœ   Zcnamer7   r•   ÚtrZprr   r   r   Útest_create_connection_sockµ  s:    ÿÿÿ
ÿÿz.BaseSockTestsMixin.test_create_connection_sock)r    r!   r"   r&   r(   r-   rB   rE   rI   rP   rQ   rl   rv   rz   r{   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$   )rK   Ú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$   )rK   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$   )rK   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$   )rK   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$   )rK   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$   )rK   r¨   r®   ÚSelectSelectorr   r   r   r   r&   ý  s    r©   Nrª   r   r   r   r   r§   ú  s   )rG   ÚtimerK   Ú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   #   $
ÿÿ
ÿÿÿÿ