B
    v9a(  ã               @   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	 d dlm
Z G dd„ dejƒZG dd„ deejƒZe ee d	ƒd
¡G dd„ deejƒƒZedkr¨e ¡  dS )é    N)Úsupport)Úutils)Ú
functionalc               @   s   e Zd Zdd„ Zdd„ ZdS )ÚBaseStartServerc             C   s   t ‚d S )N)ÚNotImplementedError)Úself© r   ú!/usr/lib/python3.7/test_server.pyÚnew_loop   s    zBaseStartServer.new_loopc          
      s  dd d ‰ ‡ ‡fdd„‰‡fdd„}dd	„ }| j  tj|tjd
| j dd¡‰|  ˆ ¡ ¡ | j  |ˆƒ¡‰ˆj	d
  
¡ ‰|  tj¡2 |  ‡‡fdd„¡ | j  ˆ¡ W d Q R X W d Q R X |  ˆj	g ¡ |  ˆj¡ |  ˆj¡ |  ˆ ¡ ¡ |  td¡ | j  ˆ ¡ ¡ W d Q R X d S )Ns   1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111é   ó   
c                s^   x(t dƒD ]}t d¡ ˆ ¡ r
P q
W t‚|  d¡ |  |¡ |  ˆ ¡ |  d¡ |  	¡  d S )Né
   gš™™™™™É?é   é   )
ÚrangeÚtimeZsleepÚ
is_servingÚRuntimeErrorÚ
settimeoutÚconnectÚsendÚrecv_allÚclose)ÚsockÚaddrÚi)Ú	HELLO_MSGÚsrvr   r	   Úclient   s    




z3BaseStartServer.test_start_server_1.<locals>.clientc             “   s:   |   ¡ I d H  ˆ  ¡  | d¡ | ¡  | ¡ I d H  d S )Nó   1)ÚreadlineÚcancelÚwriter   Úwait_closed)ÚreaderÚwriter)Ú	main_taskr   r	   Úserve"   s
    
z2BaseStartServer.test_start_server_1.<locals>.servec          
   Ó   s0   | 4 I d H š |   ¡ I d H  W d Q I d H R X d S )N)Úserve_forever)r   r   r   r	   Úmain)   s    z1BaseStartServer.test_start_server_1.<locals>.mainr   F)ÚloopÚstart_servingc                s
   ˆ| ˆ ƒS )Nr   )r   )r   r   r   r	   Ú<lambda>6   ó    z5BaseStartServer.test_start_server_1.<locals>.<lambda>z	is closed)r*   Úrun_until_completeÚasyncioZstart_serverr   ZHOSTv4ÚassertFalser   Úcreate_taskÚsocketsZgetsocknameÚassertRaisesÚCancelledErrorZ
tcp_clientÚassertEqualÚassertIsNoneÚ_socketsÚ_waitersÚassertRaisesRegexr   r(   )r   r'   r)   r   )r   r   r   r&   r   r	   Útest_start_server_1   s$    
 z#BaseStartServer.test_start_server_1N)Ú__name__Ú
__module__Ú__qualname__r
   r:   r   r   r   r	   r      s   r   c               @   s.   e Zd Zdd„ Ze eedƒd¡dd„ ƒZdS )ÚSelectorStartServerTestsc             C   s   t  ¡ S )N)r/   ZSelectorEventLoop)r   r   r   r	   r
   E   s    z!SelectorStartServerTests.new_loopZAF_UNIXzno Unix socketsc                s   dd d ‰ t  ¡ ‰‡ ‡fdd„‰‡fdd„}‡‡fdd	„}t ¡ Ò‰ˆj tj|ˆˆjd
d¡}ˆj ||ƒ¡‰ˆ 	tj
¡2 ˆ ‡‡fdd„¡ ˆj ˆ¡ W d Q R X W d Q R X ˆ |jg ¡ ˆ |j¡ ˆ |j¡ ˆ | ¡ ¡ ˆ td¡ ˆj | ¡ ¡ W d Q R X W d Q R X d S )Ns   1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111r   r   c                s>   |   d¡ ˆ d¡ |  |¡ |  ˆ ¡ |  d¡ |  ¡  d S )Nr   r   r   )r   Úwaitr   r   r   r   )r   r   )r   Ústartedr   r	   r   M   s    




zASelectorStartServerTests.test_start_unix_server_1.<locals>.clientc             “   s:   |   ¡ I d H  ˆ  ¡  | d¡ | ¡  | ¡ I d H  d S )Nr   )r    r!   r"   r   r#   )r$   r%   )r&   r   r	   r'   U   s
    
z@SelectorStartServerTests.test_start_unix_server_1.<locals>.servec          
   “   sb   | 4 I d H šF ˆ   |  ¡ ¡ |  ¡ I d H  ˆ  |  ¡ ¡ ˆ ¡  |  ¡ I d H  W d Q I d H R X d S )N)r0   r   r+   Z
assertTrueÚsetr(   )r   )r   r@   r   r	   r)   \   s    z?SelectorStartServerTests.test_start_unix_server_1.<locals>.mainF)r*   r+   c                s
   ˆ| ˆ ƒS )Nr   )r   )r   r   r   r	   r,   k   r-   zCSelectorStartServerTests.test_start_unix_server_1.<locals>.<lambda>z	is closed)Ú	threadingZEventÚ
test_utilsZunix_socket_pathr*   r.   r/   Zstart_unix_serverr1   r3   r4   Zunix_clientr5   r2   r6   r7   r8   r0   r   r9   r   r(   )r   r'   r)   r   r   )r   r   r   r&   r   r@   r	   Útest_start_unix_server_1H   s$    

 z1SelectorStartServerTests.test_start_unix_server_1N)	r;   r<   r=   r
   ÚunittestÚ
skipUnlessÚhasattrÚsocketrD   r   r   r   r	   r>   C   s   r>   ÚProactorEventLoopzWindows onlyc               @   s   e Zd Zdd„ ZdS )ÚProactorStartServerTestsc             C   s   t  ¡ S )N)r/   rI   )r   r   r   r	   r
   {   s    z!ProactorStartServerTests.new_loopN)r;   r<   r=   r
   r   r   r   r	   rJ   x   s   rJ   Ú__main__)r/   rH   r   rB   rE   Ztestr   Ztest.test_asyncior   rC   r   Z
func_testsZFunctionalTestCaseMixinr   ZTestCaser>   rF   rG   rJ   r;   r)   r   r   r   r	   Ú<module>   s   75