
    Ib%                     (   d 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mZ dd	lmZ dd
lmZ ddlmZmZ 	 ddlmZ dZ G d d      Z G d de      Z G d de      Z G d de      ZdZdZ G d de      Z y# e$ r dZY Dw xY w)zTest the kernels service API.    N)	HTTPError)Config)HTTPRequest)IOLoop)websocket_connect)SkipTest)NATIVE_KERNEL_NAME)url_path_join)NotebookTestBaseassert_http_error)AsyncMultiKernelManagerTFc                   L    e Zd ZdZd ZddZd Zd ZefdZ	d Z
d	 Zd
 Zd Zy)	KernelAPIz$Wrapper for kernel REST API requestsc                 .    || _         || _        || _        y N)requestbase_urlheaders)selfr   r   r   s       R/usr/lib/python3/dist-packages/notebook/services/kernels/tests/test_kernels_api.py__init__zKernelAPI.__init__   s         Nc                     | j                  |t        d|      |      }d|j                  cxk  rdk  rn n	 |j                         d   |_        |j                          |S #  Y xY w)Napi/kernels)datai  iX  message)r   r
   status_codejsonreasonraise_for_status)r   verbpathbodyresponses        r   _reqzKernelAPI._req!   sl    <<mT2   ? (&&,,"*--/)"< 	!!#	s   A" "A&c                 &    | j                  dd      S )NGET r%   r   s    r   listzKernelAPI.list.       yy##r   c                 &    | j                  d|      S )Nr'   r)   r   ids     r   getzKernelAPI.get1   r,   r   c                 V    t        j                  d|i      }| j                  dd|      S )NnamePOSTr(   )r   dumpsr%   )r   r2   r#   s      r   startzKernelAPI.start4   s'    zz64.)yyT**r   c                 &    | j                  d|      S )NDELETEr)   r.   s     r   shutdownzKernelAPI.shutdown8   s    yy2&&r   c                 :    | j                  dt        |d            S )Nr3   	interruptr%   r
   r.   s     r   r:   zKernelAPI.interrupt;   s    yyr;!?@@r   c                 :    | j                  dt        |d            S )Nr3   restartr;   r.   s     r   r=   zKernelAPI.restart>   s    yyr9!=>>r   c           	          t               }|j                          t        t        | j                  j                  ddd      d|d      | j                        }t        |      |j                  fd      S )Nhttpws   r   channels)r   c                       S r    )fs   r   <lambda>z%KernelAPI.websocket.<locals>.<lambda>I   s    a r   )	r   make_currentr   r
   r   replacer   r   run_sync)r   r/   loopreqrE   s       @r   	websocketzKernelAPI.websocketA   se    x$--//a@-QSU_`LL
 c"}}Z((r   r   )__name__
__module____qualname____doc__r   r%   r+   r0   r	   r5   r8   r:   r=   rL   rD   r   r   r   r      s8    .
$$ , +'A?)r   r   c                   :    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
y	)
KernelAPITestz Test the kernels web service APIc                 v    t        | j                  | j                         | j                               | _        y N)r   r   r   r   r   auth_headerskern_apir*   s    r   setUpzKernelAPITest.setUpN   )    !$,,+/==?*.*;*;*=$r   c                     | j                   j                         j                         D ]   }| j                   j                  |d          " y Nr/   rW   r+   r   r8   r   ks     r   tearDownzKernelAPITest.tearDownT   =    ##%**, 	,AMM""1T7+	,r   c                 x    | j                   j                         j                         }| j                  |g        y)z3Make sure there are no kernels running at the startN)rW   r+   r   assertEqual)r   kernelss     r   test_no_kernelszKernelAPITest.test_no_kernelsX   s-    --$$&++-"%r   c           	         | j                   j                  dd      }|j                         }| j                  |j                  d   t        | j                  d|d                | j                  |j                  d       | j                  |t               t        | j                  d      }dj                  d	d
|z   dg      }| j                  |j                  d   |       y )Nr3   r(   locationr   r/      api/security/csp-report; frame-ancestors 'self'report-uri default-src 'none'Content-Security-Policy)rW   r%   r   rb   r   r
   
url_prefixr   assertIsInstancedictjoin)r   rkern1
report_uriexpected_csps        r   test_default_kernelz!KernelAPITest.test_default_kernel]   s    MMvr*:.doo}^cdh^i0jk,eT*"4??4MN
yy$J& "
 
 	#<=|Lr   c           	         | j                   j                         }|j                         }| j                  |j                  d   t        | j                  d|d                | j                  |j                  d       | j                  |t               t        | j                  d      }dj                  dd|z   d	g      }| j                  |j                  d
   |       | j                   j                         }| j                  |j                  d       t        |j                         t              sJ | j                  |j                         d   d   |d          | j                  |j                         d   d   |d          | j                   j                         j                         }t        |t              sJ | j                   j                         }|j                         }| j                  |j                  d       t        |t              sJ | j                  t        |      d       | j                   j                  |d         }| j                  |j                  d       | j                   j                  |d         }|j                         }| j                  |d   |d          | j                  |d   |d          y )Nrf   r   r/   rg   rh   ri   rj   rk   rl   rm      r   r2         )rW   r5   r   rb   r   r
   rn   r   ro   rp   rq   r+   
isinstancelenr:   r=   )r   rr   rs   rt   ru   kern2rc   rekerns           r   test_main_kernel_handlerz&KernelAPITest.test_main_kernel_handlerm   sG   MM!:.doo}^cdh^i0jk,eT*"4??4MN
yy$J& "
 
 	#<=|L MM ,!&&(D)))!T*E$K8!V,eFm< ##%**,%&&&MM &&(,'4(((Wq) MM##E$K0, MM!!%+.uT{3v7r   c                 @   | j                   j                         j                         d   }| j                   j                  |      }|j                         }| j	                  |j
                  d       t        |t              sJ | j                  d|       | j	                  |d   |       d}t        dd|z         5  | j                   j                  |       d d d        | j                   j                  |      }| j	                  |j
                  d       | j                   j                         j                         }| j	                  |g        d}t        dd|z         5  | j                   j                  |       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr/   rx   z111-111-111-111-111  zKernel does not exist: rz   )rW   r5   r   r0   rb   r   r{   rp   assertInr   r8   r+   )r   kidrr   rs   bad_idrc   s         r   test_kernel_handlerz!KernelAPITest.test_kernel_handler   s]   mm!!#((*40MMc",%&&&dE"tc* 's$=$FG 	&MMf%	& MM""3',--$$&++-"% 's$=$FG 	+MM""6*	+ 	+	& 	&	+ 	+s   =F#FFFc                    | j                   j                         j                         d   }| j                   j                  |      j                         }| j	                  |d   d       | j                   j                  |      }| j                   j                  |      j                         }| j	                  |d   d       |j                          t        d      D ]J  }| j                   j                  |      j                         }|d   dkD  rt        j                  d       J n | j                   j                  |      j                         }| j	                  |d   d       y )Nr/   connectionsr   rA   
   g?)
rW   r5   r   r0   rb   rL   closerangetimesleep)r   r   modelr@   is        r   test_connectionszKernelAPITest.test_connections   s"   mm!!#((*40!!#&++-}-q1]]$$S)!!#&++-}-q1

r 	AMM%%c*//1E]#a'

3	 !!#&++-}-q1r   N)rM   rN   rO   rP   rX   r_   rd   rv   r   r   r   rD   r   r   rR   rR   L   s*    *$,&
M )8V+62r   rR   c                   @     e Zd ZdZe fd       Ze fd       Z xZS )AsyncKernelAPITestzDTest the kernels web service API using the AsyncMappingKernelManagerc                 D    t         st        d      t        |           y )NzBAsyncKernelAPITest tests skipped due to down-level jupyter_client!)async_testing_enabledr   supersetup_class)cls	__class__s    r   r   zAsyncKernelAPITest.setup_class   s    $_``r   c                 T    t         |          }t        r|j                  dg       |S )Nzd--NotebookApp.kernel_manager_class=notebook.services.kernels.kernelmanager.AsyncMappingKernelManager)r   get_argvr   extendr   argvr   s     r   r   zAsyncKernelAPITest.get_argv   s3    w! !KK \ ] ^r   )rM   rN   rO   rP   classmethodr   r   __classcell__r   s   @r   r   r      s,    N 
  r   r   c                   0    e Zd Z eddddgiii      Zd Zy)KernelFilterTestNotebookAppMappingKernelManagerallowed_message_typeskernel_info_requestc                 f    | j                  | j                  j                  j                  dg       y )Nr   )rb   notebookkernel_managerr   r*   s    r   test_configzKernelFilterTest.test_config   s&    55KKNcMder   N)rM   rN   rO   r   configr   rD   r   r   r   r      s2     "'*?)@%
 Ffr   r      rA   c                   D     e Zd ZdZe fd       Zd Zd Zd Zd Z	 xZ
S )KernelCullingTestzTest kernel culling c                 h    t         |          }|j                  dt         dt         dg       |S )Nz)--MappingKernelManager.cull_idle_timeout=z%--MappingKernelManager.cull_interval=z+--MappingKernelManager.cull_connected=False)r   r   r   CULL_TIMEOUTCULL_INTERVALr   s     r   r   zKernelCullingTest.get_argv   sC    w! 	@O<]OLBD 	E r   c                 v    t        | j                  | j                         | j                               | _        y rT   rU   r*   s    r   rX   zKernelCullingTest.setUp   rY   r   c                     | j                   j                         j                         D ]   }| j                   j                  |d          " y r[   r\   r]   s     r   r_   zKernelCullingTest.tearDown  r`   r   c                 x   | j                   j                         j                         d   }| j                   j                  |      }| j                   j	                  |      j                         }| j                  |d   d       | j                  |      rJ |j                          | j                  |      sJ y )Nr/   r   rA   )rW   r5   r   rL   r0   rb   get_cull_statusr   )r   r   r@   r   s       r   test_cullingzKernelCullingTest.test_culling  s    mm!!#((*40]]$$S)!!#&++-}-q1'',,,

##C(((r   c                 (   d}d}t        t        t        t        z   |z              D ]3  }	 | j                  j                  |       t        j                  |       5 |S # t        $ r)}|j                  j                  dk(  sJ d}Y d }~ |S d }~ww xY w)Ng      ?Fr   T)r   intr   r   rW   r0   r   r   r   r$   r   )r   r   	frequencyculled_es         r   r   z!KernelCullingTest.get_cull_status  s    	sL=8)CDE 	&A&!!#& 

9%	&   zz--444 s   A	B(BB)rM   rN   rO   rP   r   r   rX   r_   r   r   r   r   s   @r   r   r      s,     $,)r   r   )!rP   r   r   requestsr   traitlets.configr   tornado.httpclientr   tornado.ioloopr   tornado.websocketr   unittestr   jupyter_client.kernelspecr	   notebook.utilsr
   notebook.tests.launchnotebookr   r   jupyter_clientr   r   ImportErrorr   rR   r   r   r   r   r   rD   r   r   <module>r      s    #    # * ! /  8 ( M"6 
/) /)dx2$ x2v *f' f" ,( ,w  "!"s   B BB