U
    ‰ª/e¥  ã                
   @   sâ   U 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	 ddl
Z
ddlZddlmZ ddlmZ ddlmZ d	d
lmZ ddd	dddddddœ	Zeed< G dd„ deƒZdd„ Zdd„ Zdd„ Zedd„ ƒZdd „ ZdS )!z%Tests for kernel connection utilitiesé    N)ÚTemporaryDirectory)Úno_type_check)Úpatch)ÚConfig)Úconnect)ÚIPKernelAppé   )ÚTemporaryWorkingDirectoryz1.2.3.4Zipcé   é   é   é   s   abc123zhmac-md5)	ÚipÚ	transportZ
shell_portZhb_portZ
iopub_portZ
stdin_portZcontrol_portÚkeyZsignature_schemeÚsample_infoc                   @   s   e Zd Zdd„ Zddd„ZdS )ÚDummyKernelAppc                 C   s   dS )Nr   © )Úselfr   r   ú@/tmp/pip-unpacked-wheel-g43y689f/ipykernel/tests/test_connect.pyÚ_default_shell_port$   s    z"DummyKernelApp._default_shell_portNc                 C   s   |   ¡  |  ¡  d S )N)Zinit_profile_dirZinit_connection_file)r   Úargvr   r   r   Ú
initialize'   s    zDummyKernelApp.initialize)N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   #   s   r   c               
   C   s´   t ƒ } tƒ ž}|| j_d}t| |d}| ¡  tj |j	|¡}||j
ksLt‚t|dƒ}| d¡ W 5 Q R X tj |¡s|t‚t |¡|ksŽt‚||_t |¡|ks¦t‚W 5 Q R X d S )Núkernel.json©ÚconfigÚconnection_fileÚwz{})r   r	   Ú
ProfileDirÚlocationr   r   ÚosÚpathÚjoinZconnection_dirZabs_connection_fileÚAssertionErrorÚopenÚwriteÚexistsr   Zget_connection_filer   )ÚcfgÚdÚcfÚappZ
profile_cfÚfr   r   r   Útest_get_connection_file,   s    r/   c               	   C   s°   t ƒ :} tj | d¡}tj|ftŽ t |¡}tj|dd}W 5 Q R X t|t	ƒsTt
‚dd„ | ¡ D ƒ}|tksrt
‚t |¡}|d  d¡|d< dd„ | ¡ D ƒ}|tks¬t
‚d S )	Nr   T)Úunpackc                 S   s   i | ]\}}|t kr||“qS r   ©r   ©Ú.0ÚkÚvr   r   r   Ú
<dictcomp>G   s       z,test_get_connection_info.<locals>.<dictcomp>r   zutf-8c                 S   s   i | ]\}}|t kr||“qS r   r1   r2   r   r   r   r6   L   s       )r   r#   r$   r%   r   Zwrite_connection_filer   Zget_connection_infoÚ
isinstanceÚstrr&   ÚitemsÚjsonÚloadsÚencode)r+   r,   Z	json_infoÚinfoZsub_infoZinfo2Z	sub_info2r   r   r   Útest_get_connection_info?   s    

r>   c                 C   sœ   t ƒ }tƒ †}||j_d}t||d}|  |j¡ | ¡  t 	|d¡B}t
 dd¡|_t t
j¡ | ¡  W 5 Q R X |jdks„t‚W 5 Q R X W 5 Q R X d S )Nr   r   Ú_try_bind_socketiœÿÿÿzfails for unknown error typesr   )r   r	   r!   r"   r   ÚaddfinalizerÚcloser   r   ÚobjectÚzmqÚZMQErrorÚside_effectÚpytestÚraisesÚinit_socketsÚ
call_countr&   ©Úrequestr*   r+   r,   r-   Úmock_try_bindr   r   r   Útest_port_bind_failure_raisesP   s    rM   c              
   C   sÖ   z
t j W n: tk
rD   tjt dddd}| ¡  |  |j¡ Y nX tƒ }t	ƒ z}||j
_d}t||d}|  |j¡ | ¡  t |d¡6}t t jd¡t t jd	¡gd
gd  |_| ¡  W 5 Q R X W 5 Q R X d S )NÚWSAEADDRINUSEi90  T)Úcreater   r   r?   zfails for non-bind unixzfails for non-bind windowsr   éd   )ÚerrnorN   ÚAttributeErrorr   rB   Ústartr@   Ústopr   r	   r!   r"   r   rA   r   rC   rD   Ú
EADDRINUSErE   rH   )rK   Úpr*   r+   r,   r-   rL   r   r   r   Útest_port_bind_failure_recovery_   s(    
þýrW   c                 C   sž   t ƒ }tƒ ˆ}||j_d}t||d}|  |j¡ | ¡  t 	|d¡D}t
 tjd¡|_t t
j¡ | ¡  W 5 Q R X |jdks†t‚W 5 Q R X W 5 Q R X d S )Nr   r   r?   zfails for non-bindrP   )r   r	   r!   r"   r   r@   rA   r   r   rB   rC   rD   rQ   rU   rE   rF   rG   rH   rI   r&   rJ   r   r   r   Ú'test_port_bind_failure_gives_up_retriesy   s    rX   )Ú__doc__rQ   r:   r#   Útempfiler   Útypingr   Zunittest.mockr   rF   rC   Ztraitlets.config.loaderr   Z	ipykernelr   Zipykernel.kernelappr   Úutilsr	   r   ÚdictÚ__annotations__r   r/   r>   rM   rW   rX   r   r   r   r   Ú<module>   s:   ÷	
