
    NeS.                     v   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 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 ddlmZ ddlm Z  ddlm!Z! ddlm"Z" ejF                  jH                  Z% G d de"      Z& G d de       Z' G d de'      Z(d1de)dee)   ddfdZ*d  Z+d! Z,ejZ                  d"        Z. ejZ                  g d#$      d%        Z/d&d'd(d)Z0dee   fd*Z1defd+Z2ejZ                  d,        Z3 G d- d.      Z4 G d/ d0      Z5y)2zTest Provisioning    N)PIPE)Any)Dict)List)Optional)
EntryPoint)NoSuchEntryPoint)paths)Int)Unicode   )KernelConnectionInfo)KernelSpecManager)NoSuchKernel)launch_kernel)AsyncKernelManager)KernelProvisionerBase)KernelProvisionerFactory)LocalProvisionerc                   F    e Zd ZU  ed      Zeed<    ed      Ze	ed<   y)SubclassedTestProvisionerTconfigconfig_var_1config_var_2N)
__name__
__module____qualname__r   r   int__annotations__r   r   str     H/usr/lib/python3/dist-packages/jupyter_client/tests/test_provisioning.pyr   r   "   s#    4(L#(t,L#,r#   r   c                        e Zd ZU dZdZdZ ed      Zee	d<    e
d      Zee	d<   edefd       Zdee   fdZdee   fd	Zd
eddfdZdddZdddZdedeeef   f fdZdee   dedefdZdddZ xZS )CustomTestProvisionerNTr   r   r   returnc                     | j                   d uS N)process)selfs    r$   has_processz!CustomTestProvisioner.has_process3   s    ||4''r#   c                 ^   K   d}| j                   r| j                   j                         }|S w)Nr   )r*   poll)r+   rets     r$   r.   zCustomTestProvisioner.poll7   s)     <<,,##%C
s   +-c                 t  K   d}| j                   r| j                          d {   6t        j                  d       d {    | j                          d {   6| j                   j	                         }dD ]+  }t        | j                   |      }|s|j                          - d | _         |S 7 7 r7 \w)Nr   g?)stdoutstderrstdin)r*   r.   asynciosleepwaitgetattrclose)r+   r/   attrfids       r$   r6   zCustomTestProvisioner.wait=   s     <<		#+mmC((( 		#+ ,,##%C5  dllD1IIK   DL
 $( $s?   "B8B2B8B4B8B6B87B8B84B86B8signumc                   K   | j                   r|t        j                  k(  r6t        j                  dk(  r#ddlm}  || j                   j                         y | j                  r2t        t        d      r"	 t        j                  | j                  |       y | j                   j                  |      S y # t        $ r Y 'w xY ww)Nwin32r   )send_interruptkillpg)r*   signalSIGINTsysplatformwin_interruptr>   win32_interrupt_eventpgidhasattrosr?   OSErrorsend_signal)r+   r;   r>   s      r$   rJ   z!CustomTestProvisioner.send_signalM   s     <<&3<<7+B:t||AAB yyWR2IIdii0 <<++F33   s*   A2C5 B2 C2	B>;C=B>>Cc                 Z   K   | j                   r| j                   j                          y y wr)   )r*   killr+   restarts     r$   rL   zCustomTestProvisioner.kill^   s"     <<LL    )+c                 Z   K   | j                   r| j                   j                          y y wr)   )r*   	terminaterM   s     r$   rQ   zCustomTestProvisioner.terminateb   s"     <<LL""$ rO   kwargsc                   K   | j                   }|rw|j                         |_        |j                  dg       }|j	                          |j                         | _        |j                  |      }t        | $  dd|i| d {   S y 7 w)Nextra_arguments)rT   cmdr"   )
parentcopy_launch_argspopwrite_connection_fileget_connection_infoconnection_infoformat_kernel_cmdsuper
pre_launch)r+   rR   kmrT   
kernel_cmd	__class__s        r$   r_   z CustomTestProvisioner.pre_launchf   s     [[$kkmBO$jj):B?O $$&#%#9#9#;D -- / . J +E
EfEEE  Fs   BBB
BrU   c                 "  K   |}t        |fi || _        d }t        t        d      r*	 t        j                  | j                  j
                        }| j                  j
                  | _        || _        | j                  S # t        $ r Y 9w xY ww)Ngetpgid)	r   r*   rG   rH   rd   pidrI   rF   r\   )r+   rU   rR   scrubbed_kwargsrF   s        r$   r   z#CustomTestProvisioner.launch_kernelx   s      $S<O<2y!zz$,,"2"23 <<##	###  s(   &B)B  .B 	B	BBBc                    K   y wr)   r"   rM   s     r$   cleanupzCustomTestProvisioner.cleanup   s	     s   )F)r'   N)r   r   r   r*   re   rF   r   r   r   r    r   r   r!   propertyboolr,   r   r.   r6   rJ   rL   rQ   r   r   r_   r   r   r   rh   __classcell__)rb   s   @r$   r&   r&   *   s    G
CD4(L#(t,L#,(T ( (HSM HSM  4 4 4" %F Fc3h F$$tCy $C $DX $ r#   r&   c                       e Zd Zy)NewTestProvisionerN)r   r   r   r"   r#   r$   rm   rm      s    r#   rm   nameprovisionerr'   c                    t         j                  ddddgd| ddii d}|r-d	d
|ii}|d   j                  |       |dk7  rd| d|d   d	   d<   t        t	        j
                         d|       }t        j                  |       t        t        |d      d      5 }|j                  t        j                  |             d d d        y # 1 sw Y   y xY w)Nz-mz!jupyter_client.tests.signalkernelz-fz{connection_file}zSignal Test Kernel w 	TEST_VARSz${TEST_VARS}:test_var_2)argvdisplay_nameenvmetadatakernel_provisionerprovisioner_nameru   local-provisioner*   )r   r   r   kernelszkernel.jsonw)rB   
executableupdatepjoinr
   jupyter_data_dirrH   makedirsopenwritejsondumps)rn   ro   specrv   
kernel_dirfs         r$   build_kernelspecr      s     NN/
 0}=67D 25G4UVZ 23-- " $@D128<
 u--/DAJKK
	eJ.	4 "	

4 !" " "s   %CCc                      t        dd       y )Nnew_provisionernew-test-provisionerr   r"   r#   r$   r   r      s    &(>?r#   c                      t        dd       y )Ncustom_provisionercustom-test-provisionerr   r"   r#   r$   r   r      s    )+DEr#   c                  v    t        d       t        dd       t        dd       t        dd       t                y )Nno_provisionermissing_provisionerzmissing-provisionerdefault_provisionerrx   subclassed_provisionersubclassed-test-provisioner)r   r   r"   r#   r$   all_provisionersr      s5    %&*,AB*,?@-/LMr#   )r   r   r   r   r   )paramsc                 .    t        | j                        S )Nkernel_name)r   param)requestr   s     r$   akmr      s     '--88r#   )zjupyter_client.provisioningr   )&jupyter_client.tests.test_provisioningr   )r   r&   )rx   r   r   c            	          g } t         j                         D ]'  \  }}| j                  t        ||d   |d                ) | S )Nr      )initial_provisioner_mapitemsappendr   )resultrn   epstrs      r$   mock_get_all_provisionersr      sE    F.446 <ejuQxq:;<Mr#   c                     |dk(  rt        ddd      S |t        v r!t        |t        |   d   t        |   d         S t        t        j                  |      )Nr   r   rm   r   r   )r   r   r	   r   
GROUP_NAME)factoryrn   s     r$   mock_get_provisionerr      sg    %%"$LNb
 	
 &&$ 7 =a @BYZ^B_`aBbcc
3>>
EEr#   c                     | j                  t        dt               | j                  t        dt               t        j                         }|S )zISetup the Kernel Provisioner Factory, mocking the entrypoint fetch calls._get_all_provisioners_get_provisioner)setattrr   r   r   instance)monkeypatchr   s     r$   kpfr      sE      "9;T 02DFZ[&//1GNr#   c                       e Zd Zd Zd Zd Zy)TestDiscoveryc                     t               }|j                         }d|v sJ d|v sJ d|v sJ d|v sJ d|vsJ d|vsJ y )Nr   r   r   r   r   r   )r   get_all_specs)r+   r   r   ksmrz   s        r$   test_find_all_specsz!TestDiscovery.test_find_all_specs   sn    !##%  7***$///'7222#w...$G333 ///r#   c                     t               }t        j                  t              5  |j	                  d       d d d        y # 1 sw Y   y xY w)Nr   )r   pytestraisesr   get_kernel_spec)r+   r   r   s      r$   test_get_missingzTestDiscovery.test_get_missing   s:    !]]<( 	7 56	7 	7 	7s	   ?Ac                 |    t                t               }|j                  d      }d|j                  d   d   k(  sJ y )Nr   r   rv   rw   )r   r   r   ru   )r+   r   r   kernels       r$   test_get_newzTestDiscovery.test_get_new  s?    !$$%67%9M)NOa)bbbbr#   N)r   r   r   r   r   r   r"   r#   r$   r   r      s    07
cr#   r   c                      e Zd Zd Zej
                  j                  d        Zej
                  j                  d        Zej
                  j                  d        Z	ej
                  j                  d        Z
edefd       Zy)	TestRuntimec                   K   |j                   J |j                  dk(  r;t        j                  t              5  |j                          d{    ddd       y|j                          d{    t        j                  |       |j                          d{    |j                   j                  du sJ y7 m# 1 sw Y   yxY w7 Z7 /w)zQStarts a kernel, validates the associated provisioner's config, shuts down kernelNr   F)
ro   r   r   r   r   start_kernelr   validate_provisionershutdown_kernelr,   )r+   
kernel_mgrs     r$   akm_testzTestRuntime.akm_test  s      %%---!!%::|, 0 --///0 0 ))+++,,Z8,,...))55>>> 00 0 , /sL   7CB=B;B=C.C	/,CCC;B==CCCc                 B   K   | j                  |       d {    y 7 wr)   )r   )r+   r   r   s      r$   test_existingzTestRuntime.test_existing  s     mmC   s   c                 n   K   t                t        d      }| j                  |       d {    y 7 w)Nr   r   )r   r   r   )r+   r   new_kms      r$   test_newzTestRuntime.test_new  s)     #0ABmmF###s   +535c                 2  K   t                t        d      }|j                  t        t               d {    |j	                          d {   }|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   r   r1   r2   TnowF)r   r   r   r   is_aliverestart_kernelinterrupt_kernel
isinstancer   contextclosed)r+   r   async_kmr   s       r$   test_custom_lifecyclez!TestRuntime.test_custom_lifecycle%  s    %2FG##4#===!**,,x%%$%///!**,,x'')))($6777&&4&000!**,,5   &&&& 	>,/,)0,s{   5DD	DDD-D.DDD!D"+DDD%D&$DDDDDDDc                   K   d|_         t        d      }|j                  t        t               d {    |j	                          d {   }|sJ t        |j                  t              sJ |j                  j                  dk(  sJ |j                  d       d {    |j	                          d {   }|du sJ |j                  j                  sJ y 7 7 7 ?7 )w)	Nr   r   r   r   r   Tr   F)default_provisioner_namer   r   r   r   r   ro   r&   r   r   r   r   )r+   r   r   r   r   s        r$   test_default_provisioner_configz+TestRuntime.test_default_provisioner_config6  s     '@$%2BC##4#===!**,,x(..0EFFF##00A555&&4&000!**,,5   &&&& 	>, 	1,sF   2C%CC%CAC%!C!"C%9C#:$C%C%!C%#C%r   c                    | j                   | j                   j                  sJ | j                  dv r0t        | j                   d      rJ t        | j                   d      rBJ | j                   j                  dk(  sJ | j                   j
                  | j                  k(  sJ | j                  dv ret        | j                   t              sJ | j                  dk(  rt        | j                   t              sJ t        | j                   t              rJ y y t        | j                   t              sJ t        | j                   t              rJ | j                  dk(  rt        | j                   t              sJ y y )N)r   r   r   r   ry   )r   r   r   r   r   )ro   r,   r   rG   r   r   r   r   r   r&   rm   )r   s    r$   r   z TestRuntime.validate_provisionerF  sB    *s/J/JJJ ??GGs???s?????//2555??//3??BBB ??aacoo/?@@@"::!#//3LMMM%coo7PQQQQ N coo/DEEE!#//3CDDD"33!#//3EFFF 4r#   N)r   r   r   r   r   markr4   r   r   r   r   staticmethodr   r   r"   r#   r$   r   r     s    ? [[! ! [[$ $
 [[' '  [[' ' G"4 G Gr#   r   r)   )6__doc__r4   r   rH   r@   rB   
subprocessr   typingr   r   r   r   r   entrypointsr   r	   jupyter_corer
   	traitletsr   r   connectr   
kernelspecr   r   launcherr   managerr   provisioningr   r   r   pathjoinr~   r   r&   rm   r!   r   r   r   fixturer   r   r   r   r   r   r   r   r"   r#   r$   <module>r      sY      	  
       " (    * * % $ ( 0 3 +
	 0 	]1 ]@	. 	"3 "Xc] "d ":@F   99
 M$  c 4
#3 	F: 	F  c c4SG SGr#   