
    Ne{P                        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ZddlZddl	m
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 d
dlmZ d
dlmZ ddlmZ ddlmZ ej4                  j6                  ZdZ ej<                  ddg      d        Zej<                  d        Z d(dZ!ej<                  d        Z"d Z#d Z$ej<                  d        Z%ej<                  d        Z&ej<                  d        Z'ej<                  d        Z( ej<                  eeg      d        Z)ej<                  d        Z*ej<                  d        Z+ G d  d!      Z, G d" d#      Z- G d$ d%      Z.ej^                  j                   G d& d'             Z0y))zTests for the KernelManager    N)PIPE)paths)Config   )_ShutdownStatus)start_new_async_kernel)start_new_kernel   AsyncKMSubclassSyncKMSubclass)AsyncKernelManagerKernelManager   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.)sysplatformparampytestskip)requests    I/usr/lib/python3/dist-packages/jupyter_client/tests/test_kernelmanager.py	transportr      s0    
||w7==E#9?@==    c                 h    t               }| |j                  _        | dk(  rd|j                  _        |S )Nr   test)r   r   r   ip)r   cs     r   configr%   %   s.    A )AOOE#Hr    c           
      H   |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        y # 1 sw Y   y xY w)Nkernelszkernel.jsonwz-mz!jupyter_client.tests.signalkernelz-fz{connection_file}zSignal Test Kernel	TEST_VARSz${TEST_VARS}:test_var_2)argvdisplay_nameenv)pjoinr   jupyter_data_dirosmakedirsopenwritejsondumpsr   
executable)name	extra_env
kernel_dirfs       r   _install_kernelr:   .   s    	u--/DAJKK
	eJ.	4 
	JJ ;+ %9')BPiP
	

 
 
s   A BB!c                      t               S Nr:    r    r   install_kernelr?   E   s    r    c                       t        dddi       y )Nsignaltest-no-shutdownNO_SHUTDOWN_REPLY1r=   r>   r    r   install_kernel_dont_shutdownrD   J   s    ,/BC.HIr    c                       t        dddd      S )Nsignaltest-no-terminaterC   )rB   NO_SIGTERM_REPLYr=   r>   r    r   install_kernel_dont_terminaterH   N   s    !RU#V r    c               #      K   t        d      \  } }| |f |j                          | j                          | j                  j                  sJ y wN
signaltestkernel_name)r	   stop_channelsshutdown_kernelcontextclosedkmkcs     r   start_kernelrU   T   sH     ,7FB
b&L::s   AAc                     t        |       }|S N)r%   r   r%   rS   s     r   rS   rS   ]   s    	f	%BIr    c                     t        |       }|S rW   r   rX   s     r   km_subclassrZ   c   s    	v	&BIr    c               #   \   K   dd l } | j                         }| |j                          y w)Nr   )zmqContextterm)r\   ctxs     r   zmq_contextr`   i   s"     
++-C
IHHJs   *,c                 *    | j                  |      }|S rW   )r   )r   r%   rS   s      r   async_kmrb   r   s    	f	%BIr    c                     t        |       }|S rW   r   rX   s     r   async_km_subclassrd   x   s    		'BIr    c                    K   t        d       d {   \  } }| |f |j                          | j                          d {    | j                  j                  sJ y 7 O7 wrJ   )r   rN   rO   rP   rQ   rR   s     r   start_async_kernelrf   ~   s]     )lCCFB
b&L



::	 D s!   A&A"1A&A$A&$A&c                      e Zd Zddeej
                  fdeej                  fdeej                  fgfZ
ej                  j                  ej                  dk(  d       ej                  j                   e
 d               Zej                  j$                  ej                  j                  ej                  dk(  d       ej                  j                   e
 d	                      Zy
)#TestKernelManagerShutDownGracefullyzname, install, expectedrK   rA   rF   r   Windows doesn't support signalsreasonc                    |t         j                  k(  r't        j                  dk  rt	        j
                           |        t        |      \  }}|j                  t         j                  k(  sJ |j                         sJ |j                          |j                          |t         j                  k(  r|t         j                  g}n|g}|j                  |v sJ y )N)      rL   )r   ShutdownRequestr   version_infor   r   r	   _shutdown_statusUnsetis_aliverN   rO   SigtermRequestselfr6   installexpectedrS   rT   s         r   test_signal_kernel_subprocesseszCTestKernelManagerShutDownGracefully.test_signal_kernel_subprocesses   s     6663;K;Kf;TKKM	!d3B""o&;&;;;;{{}}

666 /"@"@AH zH""h...r    c                   K    |        t        |       d {   \  }}|j                  t        j                  k(  sJ |j	                          d {   sJ |j                          |j                          d {    |t        j                  k(  r|t        j                  g}n|g}|j                  |v sJ y 7 7 j7 Bw)NrL   )	r   rq   r   rr   rs   rN   rO   ro   rt   ru   s         r   %test_async_signal_kernel_subprocesseszITestKernelManagerShutDownGracefully.test_async_signal_kernel_subprocesses   s      		-$??B""o&;&;;;;[[]""""
  """666 /"@"@AH zH""h... @" 	#s3   CB<9CB>)C=C >?C>C CN)__name__
__module____qualname__r:   r   ro   rD   rt   rH   SigkillRequest
parametersr   markskipifr   r   parametrizery   asyncior{   r>   r    r   rh   rh      s    !?O,K,KL(,.. *-..	
J" [[/8YZV[[j)/ * [/& [[[[/8YZV[[j)/ * [ /r    rh   c                       e Zd Zd Zd Zej                  j                  ej                  dk(  d      d        Z
d Zd Zd	 Zd
 Zd Zd Zy)TestKernelManagerc                    |j                  t        t               |j                         }|j                         sJ |j                  j                         }|sJ |j                  d       |j                         sJ |j                          t        |t              sJ |j                          |j                  d       |j                  j                  sJ y )NstdoutstderrTnow)rU   r   clientrs   readydonerestart_kernelinterrupt_kernel
isinstancer   rN   rO   rP   rQ   )rv   rS   rT   is_dones       r   test_lifecyclez TestKernelManager.test_lifecycle   s    
tD1YY[{{}}((--/w
d#{{}}
"m,,,

t$zz    r    c                 ~    |j                         }t        |j                               }t        g d      }||k(  sJ y N)	r#   r   hb_port
shell_port
stdin_port
iopub_portcontrol_portkeysignature_schemeget_connection_infosortedkeys)rv   rS   cinfor   rx   s        r   test_get_connect_infoz'TestKernelManager.test_get_connect_info   s?    &&(ejjl#

 xr    r   ri   rj   c                 L  	 |\  }		fd}d}t        |      D ]
  } |d        t        j                  d        |d      }|d   d   d g|z  k(  sJ 	j                  d       t        j                  d       |j	                          	j                  t              }|d	   }|d
   dk(  sJ |d   d   sJ t        d      D ]?  } |d      }|d   d   t        j                   g|z  k7  rt        j                  d       ? n |d   d   t        j                   g|z  k(  sJ y )Nc                     j                  |       }	 j                  t              }|d   d   |k(  rn"|d   }|d   dk(  sJ |S Nparent_headermsg_idcontentstatusokexecuteget_shell_msgTIMEOUTcmd
request_idreplyr   rT   s       r   r   zBTestKernelManager.test_signal_kernel_subprocesses.<locals>.execute   a    CJ((1)(3zA  I&G8$,,,Nr       startr
   checkuser_expressionspollsleepr   r   r   interruptedd   皙?)	rangetimer   r   r   r   r   signalSIGINT)
rv   r?   rU   rS   r   Nir   r   rT   s
            @r   ry   z1TestKernelManager.test_signal_kernel_subprocesses   sD    B	 q 	AG	

1 '(0TFQJ>>> 	

7

1
  )	"x D((()*=999s 	AG$E'(0fmm^4Dq4HH

3	 '(0fmm^4Dq4HHHHr    c                     |\  }}|j                         sJ |j                         sJ |j                  j                  du sJ y NF)rs   rP   rQ   rv   r?   rU   rS   rT   s        r   test_start_new_kernelz'TestKernelManager.test_start_new_kernel  s?    B{{}}{{}}zz  E)))r    c                 B    fd} |d      }|J |d   d   dk(  sJ y )Nc                     j                  |       }	 j                  t              }|d   d   |k(  rn"|d   }|d   dk(  sJ |S r   r   r   s       r   r   z1TestKernelManager._env_test_body.<locals>.execute  r   r    r,   r   ztest_var_1:test_var_2r>   )rv   rT   r   r   s    `  r   _env_test_bodyz TestKernelManager._env_test_body  s9    	    '(/3JJJJr    c                     |\  }}|j                         sJ |j                         sJ |j                  j                  du sJ | j                  |       y r   )rs   rP   rQ   r   r   s        r   test_templated_kspec_envz*TestKernelManager.test_templated_kspec_env   sM    B{{}}{{}}zz  E)))Br    c                 t    |j                   J |j                  d       |j                   j                  sJ y )NFrestart)rP   cleanup_resourcesrQ   )rv   rS   s     r   test_cleanup_contextz&TestKernelManager.test_cleanup_context'  s6    zz%%%
U+zz    r    c                     t        |      }|j                  |k(  sJ |j                  J |j                  d       |j                  j                  du sJ |j                  du sJ y)z0kernel manager does not terminate shared context)rP   NFr   )r   rP   r   rQ   )rv   r`   rS   s      r   test_no_cleanup_shared_contextz0TestKernelManager.test_no_cleanup_shared_context,  sk    ;/zz[(((zz%%%
U+zz  E)))!!U***r    c                    |j                          |j                  t        t               |j                  d      dk(  sJ |j                  d      dk(  sJ |j	                         }|sJ |j                          |j                  d       |j                  d      dk(  sJ |j                  d      dk(  sJ |j                  d	      dk(  sJ |j                  d
      dk(  sJ |j                  d      dk(  sJ |j                  d      dk(  sJ |j                  d      dk(  sJ |j                  d      dk(  sJ |j	                         }|sJ |j                  d      dk\  sJ |j                          |j                          |j                  d	      dk(  sJ |j                  d      dk(  sJ t        |t              sJ |j                          |j                  d       |j                  d      dk(  sJ |j                  d	      dk(  sJ |j                  d      dk(  sJ |j                  d      dk(  sJ |j                  d      dk(  sJ |j                  d      dk(  sJ |j                  d      dk\  sJ |j	                         }|du sJ |j                  d      dk\  sJ |j                  j                  sJ y )Nr   rU   r
   _launch_kernelTr   r   rO   r   _kill_kernelr   signal_kernelrs   Frequest_shutdownfinish_shutdown)reset_countsrU   r   
call_countrs   r   r   r   r   rO   rP   rQ   )rv   rZ   rs   s      r   test_subclass_callablesz)TestKernelManager.test_subclass_callables6  s     "  T :%%n5:::%%&671<<<'')x  """t",%%&671<<<%%&78A===%%&89Q>>>%%n5:::%%&9:a???%%n5:::%%&671<<<%%o6!;;;'')x%%j1Q666  "$$&%%&89Q>>>%%o6!;;;+}555  "###.%%&78A===%%&89Q>>>%%&89Q>>>%%&78A===%%&9:a???%%o6!;;;%%j1Q666'')5   %%j1Q666""))))r    N)r|   r}   r~   r   r   r   r   r   r   r   ry   r   r   r   r   r   r   r>   r    r   r   r      sa    ! $ [[/8YZ%I [%IN*K !
+-*r    r   c                   h   e Zd Zej                  j                  e      d        Zej                  j                  edz         d        Zej                  j                  e      ej                  j                  e
j                  dk(  xr  e
j                  dk\  xr e
j                  dk  d      d	               Zej                  j                  e      ej                  j                  e
j                  dk(  xr  e
j                  dk\  xr e
j                  dk  d      d
               ZefdZddZy)TestParallelc                 j    | j                  |       | j                  |       | j                  |       y)zAEnsure that a sequence of kernel startups doesn't break anything.N)_run_signaltest_lifecycle)rv   r%   r?   s      r   test_start_sequence_kernelsz(TestParallel.test_start_sequence_kernelsg  s.     	&&v.&&v.&&v.r    
   c                    |j                   j                  dk(  rt        j                  d       | j	                  |       t
        j                  j                  d      5 }|j                  | j                  |      }|j                  | j                  |      }|j                          |j                          d d d        y # 1 sw Y   y xY w)Nr   5IPC transport is currently not working for this test!r   max_workers)
r   r   r   r   r   
concurrentfuturesThreadPoolExecutorsubmitresult)rv   r%   r?   thread_executorfuture1future2s         r   "test_start_parallel_thread_kernelsz/TestParallel.test_start_parallel_thread_kernelsn  s    ))U2KKOP&&v.22q2A 	_%,,T-K-KVTG%,,T-K-KVTGNNNN		 	 	s    ACCdarwin)rm      )rm      z"Bad file descriptor" errorrj   c                    |j                   j                  dk(  rt        j                  d       | j	                  |       t
        j                  j                  d      5 }|j                  | j                  |      }t
        j                  j                  d      5 }|j                  | j                  |      }|j                          d d d        |j                          d d d        y # 1 sw Y   "xY w# 1 sw Y   y xY wNr   r   r
   r   )r   r   r   r   r   r   r   r   r   ProcessPoolExecutorr   )rv   r%   r?   r   r   process_executorr   s          r   #test_start_parallel_process_kernelsz0TestParallel.test_start_parallel_process_kernelsz  s     ))U2KKOP&&v.22q2A 	_%,,T-K-KVTG##77A7F !JZ*11$2P2PRXY ! NN	 	! !	 	s$    =C7-C+
C7+C4	0C77D c                 D   |j                   j                  dk(  rt        j                  d       | j	                  |       t
        j                  j                  d      5 }|j                  | j                  |      }|j                          d d d        y # 1 sw Y   y xY wr   )
r   r   r   r   r   r   r   r   r   r   )rv   r%   r?   pool_executorfutures        r   #test_start_sequence_process_kernelsz0TestParallel.test_start_sequence_process_kernels  s     ))U2KKOP&&v.333B 	m"))$*H*H&QFMMO	 	 	s    -BBc                      |j                   di | |j                         }|j                          	 |j                  |       |S # t        $ r" |j                          |j                           w xY w)N)timeoutr>   )rU   r   start_channelswait_for_readyRuntimeErrorrN   rO   )rv   rS   startup_timeoutkwargsrT   s        r   _prepare_kernelzTestParallel._prepare_kernel  ss    !&!YY[
	o6 	  	 	s   A +A3Nc                    t        |d      }| j                  |t        t              fd} |d       |j                         sJ  |d       |j                         sJ |j	                  d       |j                         sJ  |d       |j                          |j                  j                  sJ j                          y )	NrK   )r%   rM   r   c                     j                  |       }	 j                  t              }|d   d   |k(  rn"|d   }|d   dk(  sJ |S r   r   r   s       r   r   z7TestParallel._run_signaltest_lifecycle.<locals>.execute  r   r    r   r   Tr   )	r   r  r   rs   r   rO   rP   rQ   rN   )rv   r%   rS   r   rT   s       @r   r   z&TestParallel._run_signaltest_lifecycle  s    &lC!!"T$!?	 	{{}}{{}}
d#{{}}
zz    
r    r<   )r|   r}   r~   r   r   r   r   r   r   r   r   r   rp   r   r   r  r   r>   r    r   r   r   f  s7   [[!/ "/ [[2&	 '	 [[![[		!c(8(8F(BcIYIY\bIb,  		 "
	 [[![[		!c(8(8F(BcIYIY\bIb,  	 "
 3: r    r   c                       e Zd Zd Zd Zej                  j                  d      ej                  j                  e	j                  dk(  d      d               Zej                  j                  d      d        Zd	 Zy
)TestAsyncKernelManagerc                 B  K   |j                  t        t               d {    |j                          d {   }|sJ |j                  j	                         }|sJ |j                  d       d {    |j                          d {   }|sJ |j                          d {    t        |t              sJ |j                  d       d {    |j                          d {   }|du sJ |j                  j                  sJ y 7 7 7 7 7 o7 E7 /w)Nr   Tr   F)rU   r   rs   r   r   r   r   r   r   rO   rP   rQ   )rv   rb   rs   is_readys       r   r   z%TestAsyncKernelManager.test_lifecycle  s    ##4#===!**,,x>>&&(x%%$%///!**,,x'')))($6777&&4&000!**,,5   &&&& 	>, 	0,)0,sy   DDDD;D5D6DDD)D*+DDD-D.$DDDDDDDc                    K   |j                         }t        |j                               }t        g d      }||k(  sJ y wr   r   )rv   rb   r   r   rx   s        r   r   z,TestAsyncKernelManager.test_get_connect_info  sC     ,,.ejjl#

 xs   ?Ar   r   ri   rj   c                   
K   |\  }

fd}d}t        |      D ]  } |d       d {     t        j                  d       d {     |d       d {   }|d   d   d g|z  k(  sJ 
j                  d      }t        j                  d       d {    |j	                          d {    	 
j                  t               d {   }|d
   d   |k(  rn*|d   }	|	d   dk(  sJ |	d   d   d	u sJ t        d      D ]O  } |d       d {   }|d   d   t        j                   g|z  k7  rt        j                  d       d {    O n |d   d   t        j                   g|z  k(  sJ y 7 O7 37 &7 7 7 7 s7 :w)Nc                    K   j                  |       }	 j                  t               d {   }|d   d   |k(  rn*|d   }|d   dk(  sJ |S 7 "wr   r   r   s       r   r   zGTestAsyncKernelManager.test_signal_kernel_subprocesses.<locals>.execute  sm     CJ ..w77)(3zA  I&G8$,,,N 8s   +AA#Ar   r   r
   r   r   r   r   Tr   r   r   r   r   r   2   r   )	r   r   r   r   r   r   r   r   r   )rv   r?   rf   rS   r   r   r   r   r   r   rT   s             @r   ry   z6TestAsyncKernelManager.test_signal_kernel_subprocesses  s     $B	 q 	#A'"""	#mmAg&&'(0TFQJ>>> ZZ(
mmA!!###**733E_%h/:=  	"x D((()*=9TAAAr 	A!'**E'(0fmm^4Dq4HHmmC(((	 '(0fmm^4Dq4HHHH1 #&
 	#3 +(s   &FE8FE;	FE>>FFF/F0FFAFF:FF	*F;F>FFFFF	Fc                    K   |\  }}|j                          d {   }|sJ |j                          d {   }|sJ y 7 %7 wr<   )rs   )rv   r?   rf   rS   rT   rs   s         r   test_start_new_async_kernelz2TestAsyncKernelManager.test_start_new_async_kernel  sB     #B&x&x '&s   AAAA
AAc                 X  K   |j                          |j                  t        t               d {    |j                  d      dk(  sJ |j                  d      dk(  sJ |j	                          d {   }|sJ |j                  d      dk\  sJ |j                          |j                  d       d {    |j                  d      dk(  sJ |j                  d	      dk(  sJ |j                  d
      dk(  sJ |j                  d      dk(  sJ |j                  d      dk(  sJ |j                  d      dk(  sJ |j                  d      dk(  sJ |j                  d      dk(  sJ |j	                          d {   }|sJ |j                  d      dk\  sJ |j                          |j                          d {    |j                  d
      dk(  sJ |j                  d      dk(  sJ t        |t              sJ |j                          |j                  d       d {    |j                  d	      dk(  sJ |j                  d
      dk(  sJ |j                  d      dk(  sJ |j                  d      dk(  sJ |j                  d      dk(  sJ |j                  d      dk(  sJ |j                  d      dk\  sJ |j	                          d {   }|du sJ |j                  d      dk\  sJ |j                  j                  sJ y 7 7 7 d7 7 `7 7 Jw)Nr   rU   r
   r   rs   Tr   r   rO   r   r   r   r   Fr   r   )r   rU   r   r   rs   r   r   r   r   rO   rP   rQ   )rv   rd   rs   s      r   r   z.TestAsyncKernelManager.test_subclass_callables  sb    &&(,,D,FFF ++N;q@@@ ++,<=BBB*3355x ++J71<<<&&(..4.888 ++,<=BBB ++,=>!CCC ++,>?1DDD ++N;q@@@ ++,?@AEEE ++N;q@@@ ++,<=BBB ++O<AAA*3355x ++J71<<<&&(00222 ++,>?1DDD ++O<AAA+-?@@@&&(//E/::: ++,=>!CCC ++,>?1DDD ++,>?1DDD ++,=>!CCC ++,?@AEEE ++O<AAA ++J71<<<*33555    ++J71<<< ((////W 	G 6
 	9 6
 	3 	; 6s   /L*LAL*5L6AL*9L:CL*L AL*L#A'L*+L&,B1L*L(:L*L*L* L*#L*&L*(L*N)r|   r}   r~   r   r   r   r   r   r   r   r   ry   r  r   r>   r    r   r  r    s    '  $ [[[[/8YZ+I [ +IZ [[ .0r    r  )rK   N)1__doc__r   concurrent.futuresr   r3   r/   r   r   r   
subprocessr   r   jupyter_corer   traitlets.config.loaderr   managerr   r   r	   utilsr   r   jupyter_clientr   r   pathjoinr-   r   fixturer   r%   r:   r?   rD   rH   rU   rS   rZ   r`   rb   rd   rf   rh   r   r   r   r  r>   r    r   <module>r     s   !    	  
     * % , & " ! - (

 u~& '  
.  J    
  
   *O<= >
  
  8/ 8/va* a*HW Wt H0 H0 H0r    