
    Ne                      j   d 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 ddlmZ ddlmZ ej                  j                   ZddZej&                  d	        Zej&                  d
        Zej&                  d        Z ej&                  ddg      d        Zej&                  d        Zej&                  d        Zej4                  j                  d        Zej4                  j                  d        Zej4                  j                  d        Zej4                  j                  d        Zy)zTests for the KernelManager    N)paths)Config)
get_logger)AsyncIOLoopKernelManager)IOLoopKernelManagerc           
      L   |i }t        t        j                         d|       }t        j                  |       t        t        |d      d      5 }|j                  t        j                  t        j                  ddddgdd	d
i|d             d d d        | S # 1 sw Y   | S xY w)Nkernelszkernel.jsonwz-mz"jupyter_client.tests.problemkernelz-fz{connection_file}zProblematic Test Kernel	TEST_VARSz${TEST_VARS}:test_var_2)argvdisplay_nameenv)pjoinr   jupyter_data_dirosmakedirsopenwritejsondumpssys
executable)name	extra_env
kernel_dirfs       E/usr/lib/python3/dist-packages/jupyter_client/tests/test_restarter.py_install_kernelr      s    	u--/DAJKK
	eJ.	4 
	JJ <+ %>')BPiP
	

  K!
  Ks   A BB#c                      t        d      S )Nproblemtestr        r   install_kernelr$   ,   s    =))r#   c                       t        dddi      S )Nzproblemtest-failFAIL_ON_START1r   r!   r"   r#   r   install_fail_kernelr)   1   s    -/39OPPr#   c                  "    t        dddd      S )Nzproblemtest-slow5r'   )STARTUP_DELAYr&   r(   r!   r"   r#   r   install_slow_fail_kernelr-   6   s    c&R r#   tcpipc)paramsc                     t         j                  dk(  r$| j                  dk(  rt        j                  d       | j                  S )Nwin32r/   z)Transport 'ipc' not supported on Windows.)r   platformparampytestskip)requests    r   	transportr8   =   s0    
||w7==E#9?@==r#   c                 h    t               }| |j                  _        | dk(  rd|j                  _        |S )Nr/   test)r   KernelManagerr8   ip)r8   cs     r   configr>   D   s.    A )AOOE#Hr#   c                  6    t               j                  d       y )NDEBUG)r   setLevelr"   r#   r   debug_loggingrB   M   s    L'"r#   c                   	
K   d		| j                   _        d| j                   _        t        ||       }d
t	        	      D cg c]  }t        j                          c}	
fd}	 |j                          |j                  |d       	 t	        	dz         D ]  }|j                         }|j                          |j                  d       |j                          |	k  sL|j                   j#                          d	{    |    d	{    d
}d}||k  rH|j%                         r8t        j&                  d       d	{    |dz  }||k  r|j%                         r8||k  s|j%                         rt        j&                  d       d	{    |dz  }||k  s|j%                         s: 
	k(  sJ |j%                         sJ 	 |j                  d       |j(                  j*                  sJ y	c c}w # t        $ r |j                  r|j                           w xY w7 +7 !7 7 # |j                  d       |j(                  j*                  sJ w xY ww).Test that the kernel is restarted and recovers   Tkernel_namer>   r   c                  ^     k\  rt        d z           j                  d       dz  y Nz$Kernel restarted more than %d times!TrE   RuntimeError
set_result
N_restartscbsrestartss   r   cbztest_restart_check.<locals>.cb^   7    *E
RSS  &qr#   restart<   timeoutN      $@        皙?now)KernelRestarterrestart_limitdebugr   rangeasyncioFuturestart_kerneladd_restart_callbackBaseException
has_kernelshutdown_kernelclientstart_channelswait_for_readystop_channelsprovisionerkillis_alivesleepcontextclosedr>   r$   rB   kmirQ   kcmax_waitwaitedrN   rO   rP   s            @@@r   test_restart_checkrw   R   s)     J+5F(#'F 		GB
C*/
*;<Q <H

I.!zA~& 	"ABb):~nn))+++qk!!x'BKKM!--,,,cMF x'BKKM x'!--,,,cMF x'	"& j   {{}} 	t$zz    W =  ==  ,!
 - - 	t$zz    s   AI*H!
I*,"H AH; )H; H1H; H45H; 	H7
H; )H; /H;  H; H9H; )H; :H; 0I*'H..I*1H; 4H; 7H; 9H; ;,I''I*c                   	
K   d| j                   _        d| j                   _        t        ||       }dt	              D cg c]  }t        j                          c}

fd}t        j                         		fd}	 |j                          |j                  |d       |j                  |d       	 t	              D ]  }
|    d	{     	 d	{   sJ k(  sJ 	 |j                  d
       |j                  j                  sJ y	c c}w # t        $ r |j                  r|j                           w xY w7 t7 j# |j                  d
       |j                  j                  sJ w xY ww)ATest that the restarter gives up after reaching the restart limitrE   TrF   r   c                  ^     k\  rt        d z           j                  d       dz  y rI   rJ   rM   s   r   rQ   z#test_restarter_gives_up.<locals>.cb   rR   r#   c                  (     j                  d       y NTrL   dieds   r   on_deathz)test_restarter_gives_up.<locals>.on_death       r#   rS   deadNrZ   )r\   r]   r^   r   r_   r`   ra   rb   rc   rd   re   rf   ro   rp   )r>   r)   rB   rr   rs   rQ   r   rN   rO   r   rP   s          @@@@r   test_restarter_gives_upr      sd     J+5F(#'F 	)<V	LB
C*/
*;<Q <H >>D

I.
&1
!z" 	A1+	 zzzj    	t$zz    C =$  ==  
 	t$zz    s`   AE9D"#E94D ;E
 EE
 EE
 ,0E9'EE9E
 E
 
,E66E9c                   	
K   d		| j                   _        d| j                   _        t        ||       }d
t	        	      D cg c]  }t        j                          c}	
fd}	 |j                          d{    |j                  |d       	 t	        	dz         D ]E  }|j                         }|j                          |j                  d	       d{    |j                          |	k  sT|j                   j#                          d{    |    d{    d
}d}||k  rX|j%                          d{   r@t        j&                  d       d{    |dz  }||k  r|j%                          d{   r@||k  s|j%                          d{   rt        j&                  d       d{    |dz  }||k  s-|j%                          d{   sBH 
	k(  sJ |j%                          d{   sJ 	 |j                  d       d{    |j(                  j*                  sJ yc c}w 7 # t        $ r' |j                  r|j                          d{  7    w xY w7 7 k7 a7 C7 )7 
7 7 7 7 7 r# |j                  d       d{  7   |j(                  j*                  sJ w xY ww)rD   rE   TrF   r   c                  ^     k\  rt        d z           j                  d       dz  y rI   rJ   rM   s   r   rQ   z$test_async_restart_check.<locals>.cb   rR   r#   NrS   rT   rU   rW   rX   rY   rZ   )r\   r]   r^   r   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   s            @@@r   test_async_restart_checkr      s     J+5F(#'F 	!nV	LB
C*/
*;<Q <Hoo
I.!zA~& 	"AB##B#///:~nn))+++qk!!x'"++-,?,?!--,,,cMF x'"++-,?,? x'bkkm0C0C!--,,,cMF x'bkkm0C0C	"& j   [[]""""   T ***zz    W = 	  ==$$&&& 0 ,! -@, -@ 1D, 1D
 # 	+b  T ***zz    sQ  AKI!
K,I ?I I AJ I>J 9J JJ #J$ J JJ !J
"!J JJ 	J J "J#J )J JJ J %J&J +J J	J K%J&"KI (I;3I64I;;K>J J J J 
J J J J J J KK0J31KKc                 ^  	
K   d| j                   _        d| j                   _        d| j                   _        t	        ||       }dt              D cg c]  }t        j                          c}

fd}t        j                         		fd}	 |j                          d{    |j                  |d	       |j                  |d
       	 t        j                  
  d{    	 d{   sJ k(  sJ 	 |j                  d       d{    |j                  j                  sJ yc c}w 7 # t        $ r' |j                  r|j                          d{  7    w xY w7 7 }7 [# |j                  d       d{  7   |j                  j                  sJ w xY ww)ry      Tg      >@rF   r   c                  ^     k\  rt        d z           j                  d       dz  y rI   rJ   rM   s   r   rQ   z)test_async_restarter_gives_up.<locals>.cb   rR   r#   c                  (     j                  d       y r|   r}   r~   s   r   r   z/test_async_restarter_gives_up.<locals>.on_death  r   r#   NrS   r   rZ   )r\   r]   r^   stable_start_timer   r_   r`   ra   rb   rc   rd   re   rf   gatherro   rp   )r>   r-   rB   rr   rs   rQ   r   rN   rO   r   rP   s          @@@@r   test_async_restarter_gives_upr      s     J+5F(#'F /3F,	!.Fv	VB
C*/
*;<Q <H >>Doo
I.
&1	!nnh'''zzzj      T ***zz    A = 	   ==$$&&& 	(
 	+b  T ***zz    s   AF-D53#F-D< *D:+(D< E5 )E/*	E5 3E14E5 F-E3"F-:D< <(E,$E'%E,,F-/E5 1E5 3F-5F*FF**F-)r    N)__doc__r`   r   r   r   r5   jupyter_corer   traitlets.config.loaderr   traitlets.logr   jupyter_client.ioloopr   r   pathjoinr   r   fixturer$   r)   r-   r8   r>   rB   markrw   r   r   r   r"   r#   r   <module>r      sR   !   	 
   * $ : 5
0 * * Q Q   u~& '   # # 4! 4!n *! *!Z 4! 4!n *! *!r#   