ó
Ýà‹]c           @   s  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 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 d l m Z m Z d d	 l m Z d d
 l m Z d d l m Z d e
 e f d „  ƒ  YZ d e j f d „  ƒ  YZ e d d d d d d d d d d d d d d d d d  d! d" d# ƒ 
Z e d d d d d d d d d d d d d d d d d  d! d" d$ ƒ 
Z  d% „  Z! d& „  Z" d' „  Z# d( „  Z$ d) „  Z% d* „  Z& d+ „  Z' d, „  Z( d- „  Z) d. „  Z* d/ „  Z+ d0 „  Z, d S(1   s%   Tests for kernel connection utilitiesiÿÿÿÿN(   t   Config(   t
   JupyterApp(   t   jupyter_runtime_dir(   t   TemporaryDirectoryt   TemporaryWorkingDirectory(   t   str_to_bytes(   t   connectt   KernelClient(   t   JupyterConsoleApp(   t   Session(   t   secure_writet   DummyConsoleAppc           B   s   e  Z g  d  „ Z RS(   c         C   s!   t  j |  d | ƒ|  j ƒ  d  S(   Nt   argv(   R   t
   initializet   init_connection_file(   t   selfR   (    (    s@   lib/python2.7/site-packages/jupyter_client/tests/test_connect.pyR      s    (   t   __name__t
   __module__R   (    (    (    s@   lib/python2.7/site-packages/jupyter_client/tests/test_connect.pyR      s   t   DummyConfigurablec           B   s   e  Z d  „  Z RS(   c         C   s   d  S(   N(    (   R   (    (    s@   lib/python2.7/site-packages/jupyter_client/tests/test_connect.pyR      s    (   R   R   R   (    (    (    s@   lib/python2.7/site-packages/jupyter_client/tests/test_connect.pyR      s   t   ips   1.2.3.4t	   transportt   ipct
   shell_porti   t   hb_porti   t
   iopub_porti   t
   stdin_porti   t   control_porti   t   keyt   abc123t   signature_schemes   hmac-md5t   kernel_namet   pythont   testc       
   C   s    t  ƒ  k }  t j j |  d ƒ } t j | t  t j j | ƒ sI t ‚ t	 | d ƒ  } t
 j | ƒ } Wd  QXWd  QXt | d ƒ | d <| t k sœ t ‚ d  S(   Ns   kernel.jsont   rR   (   R   t   ost   patht   joinR   t   write_connection_filet   sample_infot   existst   AssertionErrort   opent   jsont   loadR   (   t   dt   cft   ft   info(    (    s@   lib/python2.7/site-packages/jupyter_client/tests/test_connect.pyt   test_write_connection_file,   s    c          C   s´   t  ƒ  }  t d t  ƒ  ƒ } | j d g  ƒ | j }  t ƒ  ? } t j j | d ƒ } t j	 | t
  | | _ | j ƒ  Wd QX|  j t
 d k s— t ‚ |  j t
 d k s° t ‚ d S(   s"   test load_connection_file() after t   sessionR   s   kernel.jsonNR   R   (   R	   R   R   R1   R   R"   R#   R$   R   R%   R&   t   connection_filet   load_connection_fileR   R(   R   (   R1   t   appR,   R-   (    (    s@   lib/python2.7/site-packages/jupyter_client/tests/test_connect.pyt!   test_load_connection_file_session7   s    			c          C   s´   t  ƒ  }  t d t  ƒ  ƒ } | j d g  ƒ | j }  t ƒ  ? } t j j | d ƒ } t j	 | t
  | | _ | j ƒ  Wd QX|  j t
 d k s— t ‚ |  j t
 d k s° t ‚ d S(   s"   test load_connection_file() after R1   R   s   kernel.jsonNR   R   (   R	   R   R   R1   R   R"   R#   R$   R   R%   t   sample_info_knR2   R3   R   R(   R   (   R1   R4   R,   R-   (    (    s@   lib/python2.7/site-packages/jupyter_client/tests/test_connect.pyt)   test_load_connection_file_session_with_knH   s    			c          C   s½   t  ƒ  K }  t j j |  d ƒ } t j | t  t d | ƒ } | j d g  ƒ Wd QXx` t j	 ƒ  D]R \ } } | d k r qc n  t
 | | ƒ } | | k sc t d | | | f ƒ ‚ qc Wd S(	   s9   test `ipython console --existing` loads a connection files   kernel.jsonR2   R   NR   R   s   app.%s = %s != %s(   R   R   (   R   R"   R#   R$   R   R%   R&   R   R   t   itemst   getattrR(   (   R,   R-   R4   t   attrt   expectedt   value(    (    s@   lib/python2.7/site-packages/jupyter_client/tests/test_connect.pyt   test_app_load_connection_fileY   s    c          C   s¶   t  ƒ  }  i	 d d 6d d 6d d 6d d 6d	 d
 6d d 6d d 6d d 6d d 6} |  j | ƒ |  j | d k st t ‚ |  j j j d ƒ | d
 k s™ t ‚ |  j | d k s² t ‚ d  S(   NiÆÑ  R   iÉÑ  R   iÇÑ  R   s   0.0.0.0R   t   secretR   iÄÑ  R   s   hmac-sha256R   iÅÑ  R   t   tcpR   t   ascii(   R   t   load_connection_infoR   R(   R1   R   t   decodeR   (   t   clientR/   (    (    s@   lib/python2.7/site-packages/jupyter_client/tests/test_connect.pyt   test_load_connection_infoh   s    	
%c       
   C   s°   t  ƒ  ¡ }  d } t d |  d | ƒ } | j ƒ  | j } t j j | | ƒ } t | d ƒ  } | j d ƒ Wd  QXx/ d
 D]' } t	 j
 | d	 | ƒ| k s{ t ‚ q{ WWd  QXd  S(   Ns   kernel.jsont   runtime_dirR2   t   ws   {}s   kern*s   *ernel*s   k*R#   (   s   kernel.jsons   kern*s   *ernel*s   k*(   R   R   R   RE   R"   R#   R$   R)   t   writeR   t   find_connection_fileR(   (   R,   R-   R4   t   security_dirt
   profile_cfR.   t   query(    (    s@   lib/python2.7/site-packages/jupyter_client/tests/test_connect.pyt   test_find_connection_file{   s    
	   
c          C   s©   t  ƒ  š }  d } t j j | ƒ } t | d ƒ  } | j d ƒ Wd  QXxS d d | t j j d d ƒ f D]0 } t j | d d t	 ƒ  g ƒ| k sk t
 ‚ qk WWd  QXd  S(   Ns	   test.jsonRF   s   {}R    t   .R#   (   R   R"   R#   t   abspathR)   RG   R$   R   RH   R   R(   (   R,   R-   t   abs_cfR.   RK   (    (    s@   lib/python2.7/site-packages/jupyter_client/tests/test_connect.pyt   test_find_connection_file_local   s    c          C   sÚ   t  ƒ  Ë }  d } t j d ƒ t j j d d ƒ } t j j | ƒ } t | d ƒ  } | j d ƒ Wd  QXxb t j j d d d ƒ t j j d d ƒ | f D]0 } t j	 | d d t
 ƒ  g ƒ| k sœ t ‚ qœ WWd  QXd  S(   Ns	   test.jsont   subdirRF   s   {}RM   R#   (   R   R"   t   mkdirR#   R$   RN   R)   RG   R   RH   R   R(   (   R,   R-   RO   R.   RK   (    (    s@   lib/python2.7/site-packages/jupyter_client/tests/test_connect.pyt"   test_find_connection_file_relative    s    c       
   C   s„   t  ƒ  u }  d } t j j | ƒ } t | d ƒ  } | j d ƒ Wd  QXt j | d t ƒ  ƒ| k sm t	 ‚ t j
 | ƒ Wd  QXd  S(   Ns   absolute.jsonRF   s   {}R#   (   R   R"   R#   RN   R)   RG   R   RH   R   R(   t   remove(   R,   R-   RO   R.   (    (    s@   lib/python2.7/site-packages/jupyter_client/tests/test_connect.pyt!   test_find_connection_file_abspath±   s    $c          C   s}   t  ƒ  n }  t d |  d d d d ƒ } | j ƒ  | j s@ t ‚ t j j | j ƒ s[ t ‚ | j	 t
 j k ss t ‚ Wd  QXd  S(   Nt   data_dirR   s   via-tcpR   R?   (   R   R   R%   t   _connection_file_writtenR(   R"   R#   R'   R2   t   _random_port_namesR   t
   port_names(   R,   t   dc(    (    s@   lib/python2.7/site-packages/jupyter_client/tests/test_connect.pyt   test_mixin_record_random_ports»   s    
c          C   s–   t  ƒ  ‡ }  t d |  d d d d ƒ } | j ƒ  | j } | j ƒ  t j j | ƒ s] t ‚ x, | j	 D]! } t
 | | ƒ d k sg t ‚ qg WWd  QXd  S(   NRV   R   s   via-tcpR   R?   i    (   R   R   R%   R2   t   cleanup_random_portsR"   R#   R'   R(   RX   R9   (   R,   RZ   t   filenamet   name(    (    s@   lib/python2.7/site-packages/jupyter_client/tests/test_connect.pyt   test_mixin_cleanup_random_portsÅ   s    
	
c       	      s  d „  ‰  ‡  f d †  }  t  j ƒ  } t j j | d ƒ } zÌ t | ƒ  } | j d ƒ Wd  QX|  | ƒ t | d ƒ  } | j ƒ  d k s’ t	 ‚ Wd  QXt j
 | d ƒ t | ƒ  } | j d ƒ Wd  QX|  | ƒ t | d ƒ  } | j ƒ  d k sþ t	 ‚ Wd  QXWd  t j | ƒ Xd  S(   Nc         S   sí   i  } xà t  t j d |  ƒ j ƒ  j ƒ  ƒ D]¹ \ } } | d k rf | j |  ƒ d j ƒ  j ƒ  } n  t j	 d | ƒ } | rÕ | j
 ƒ  \ } } | j ƒ  j d ƒ d } t d „  | j d ƒ Dƒ ƒ } | | | <q, | j ƒ  s, Pq, q, W| S(   s1   Extracts file permissions on windows using icaclss	   icacls %si    iÿÿÿÿs   \s*([^:]+):\(([^\)]*)\)s   \c         s   s   |  ] } | j  ƒ  Vq d  S(   N(   t   lower(   t   .0t   p(    (    s@   lib/python2.7/site-packages/jupyter_client/tests/test_connect.pys	   <genexpr>Ü   s    t   ,(   t	   enumerateR"   t   popent   readt
   splitlinest   splitt   stripR`   t   ret   matcht   groupst   set(   R]   t   role_permissionst   indext   lineRk   t	   usergroupt   permissions(    (    s@   lib/python2.7/site-packages/jupyter_client/tests/test_connect.pyt   fetch_win32_permissionsÒ   s    2"c            s  t  j d k rË d d  l } | j ƒ  j ƒ  } ˆ  |  ƒ } | | k sK t ‚ | | t d d g ƒ k sm t ‚ d | k s t ‚ | d t d g ƒ k sž t ‚ d | k s° t ‚ t | ƒ d k s
t ‚ n? t  j |  ƒ j	 } d	 t
 t j | ƒ ƒ j d
 d ƒ k s
t ‚ d  S(   Nt   ntiÿÿÿÿR!   RF   t   administratorsR.   t   everyonei   t   0600t   0ot   0(   R"   R^   t   win32apit   GetUserNameR`   R(   Rm   t   lent   statt   st_modet   octt   S_IMODEt   replace(   t   fnameRz   t   usernameRr   t   mode(   Rs   (    s@   lib/python2.7/site-packages/jupyter_client/tests/test_connect.pyt   check_user_only_permissionsâ   s    "t   check_permss   test 1R!   ií  s   test 2(   t   tempfilet   mkdtempR"   R#   R$   R
   RG   R)   Rf   R(   t   chmodt   shutilt   rmtree(   R…   t	   directoryR‚   R.   (    (   Rs   s@   lib/python2.7/site-packages/jupyter_client/tests/test_connect.pyt   test_secure_writeÑ   s"    	

"(-   t   __doc__R*   R"   Rj   R}   R‡   RŠ   t   traitlets.configR    t   jupyter_core.applicationR   t   jupyter_core.pathsR   t   ipython_genutils.tempdirR   R   t   ipython_genutils.py3compatR   t   jupyter_clientR   R   t   jupyter_client.consoleappR   t   jupyter_client.sessionR	   t   jupyter_client.connectR
   R   t   ConnectionFileMixinR   t   dictR&   R6   R0   R5   R7   R=   RD   RL   RP   RS   RU   R[   R_   R   (    (    (    s@   lib/python2.7/site-packages/jupyter_client/tests/test_connect.pyt   <module>   sF   									
	
	