ó
‹'=[c           @   s  d  Z  d d l Z d d l Z d d l Z d d l Z d d l m Z m 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 m Z m Z d e f d	 „  ƒ  YZ d
 „  Z d e j f d „  ƒ  YZ d e f d „  ƒ  YZ d S(   s   Test Notebook signingiÿÿÿÿN(   t   Popent   PIPEi   (   t	   TestsBase(   t   Config(   t   readt   signt   writet
   TestNotaryc           B   sª   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c      	   C   s—   t  j ƒ  |  _ t j d d d d d |  j ƒ |  _ |  j d d ƒ  } t | d d ƒ|  _ Wd  QX|  j d d ƒ  } t | d d	 ƒ|  _	 Wd  QXd  S(
   Nt   db_files   :memory:t   secrett   data_diru   test3.ipynbu   rt
   as_versioni   i   (
   t   tempfilet   mkdtempR
   R   t   NotebookNotaryt   notaryt   fopenR   t   nbt   nb3(   t   selft   f(    (    s7   lib/python2.7/site-packages/nbformat/tests/test_sign.pyt   setUp   s    	c         C   s$   |  j  j j ƒ  t j |  j ƒ d  S(   N(   R   t   storet   closet   shutilt   rmtreeR
   (   R   (    (    s7   lib/python2.7/site-packages/nbformat/tests/test_sign.pyt   tearDown$   s    c         C   s¸   t  j j |  j d ƒ } t | d ƒ  } | j d ƒ Wd  QXt j d | d d ƒ } | j |  j ƒ | j	 j
 ƒ  t j t  j j |  j | ƒ ƒ t j t  j j |  j | d ƒ ƒ d  S(   Ns   invalid_db_file.dbt   wu   [invalid data]R   R	   s   .bak(   t   ost   patht   joinR
   t   openR   R   R   R   R   R   t   testpatht   assert_isfile(   R   t   invalid_sql_fileR   t   invalid_notary(    (    s7   lib/python2.7/site-packages/nbformat/tests/test_sign.pyt   test_invalid_db_file(   s    		c         C   sU   d } xH t  j D]= } | |  j _ |  j j |  j ƒ } |  j | | ƒ | } q Wd  S(   Nt    (   R   t
   algorithmsR   t	   algorithmt   compute_signatureR   t   assertNotEqual(   R   t   last_sigt   algot   sig(    (    s7   lib/python2.7/site-packages/nbformat/tests/test_sign.pyt   test_algorithms8   s    c         C   s>   |  j  j |  j ƒ } |  j  j |  j ƒ } |  j | | ƒ d S(   s5   Multiple signatures of the same notebook are the sameN(   R   R(   R   t   assertEqual(   R   t   sig1t   sig2(    (    s7   lib/python2.7/site-packages/nbformat/tests/test_sign.pyt   test_sign_same@   s    c         C   sJ   |  j  j |  j ƒ } d |  j  _ |  j  j |  j ƒ } |  j | | ƒ d S(   s)   Changing the secret changes the signaturet	   differentN(   R   R(   R   R	   R)   (   R   R/   R0   (    (    s7   lib/python2.7/site-packages/nbformat/tests/test_sign.pyt   test_change_secretF   s    c         C   sO   |  j  |  j j |  j ƒ ƒ |  j j |  j ƒ |  j |  j j |  j ƒ ƒ d  S(   N(   t   assertFalseR   t   check_signatureR   R   t
   assertTrue(   R   (    (    s7   lib/python2.7/site-packages/nbformat/tests/test_sign.pyt	   test_signM   s    c         C   s‘   |  j  j |  j ƒ |  j |  j  j |  j ƒ ƒ |  j  j |  j ƒ |  j |  j  j |  j ƒ ƒ |  j  j |  j ƒ |  j |  j  j |  j ƒ ƒ d  S(   N(   R   R   R   R6   R5   t   unsignR4   (   R   (    (    s7   lib/python2.7/site-packages/nbformat/tests/test_sign.pyt   test_unsignR   s    c         C   sõ  d } g  t  d ƒ D] } t j |  j ƒ ^ q } x% |  j j j j d ƒ D] } | GHqJ Wd |  j j _ x: t	 | d  ƒ D]( \ } } | | j
 _ |  j j | ƒ qy WxK t	 | d  ƒ D]9 \ } } t j | ƒ |  j |  j j | ƒ d | ƒ q¶ W|  j j | d ƒ |  j |  j j | d ƒ ƒ |  j |  j j | d ƒ ƒ |  j |  j j | d ƒ ƒ |  j |  j j | d	 ƒ ƒ |  j j | d ƒ |  j j | d ƒ |  j j | d ƒ |  j |  j j | d	 ƒ ƒ |  j |  j j | d
 ƒ ƒ d  S(   Ngü©ñÒMb`?i
   s   SELECT * FROM nbsignaturesi   s   nb %i is trustedi    i   i   i   i   (   t   ranget   copyt   deepcopyR   R   R   t   dbt   executet
   cache_sizet	   enumeratet   metadatat   dirtyR   t   timet   sleepR6   R5   R4   (   R   t   dtt   it   nbst   rowR   (    (    s7   lib/python2.7/site-packages/nbformat/tests/test_sign.pyt   test_cull_dbZ   s*    +	$c         C   sÂ   |  j  } | j } |  j } | j } | j d d  ƒ |  j | | ƒ ƒ | j | ƒ | _ |  j | | ƒ ƒ d | _	 | j
 | ƒ d | _	 |  j | | ƒ ƒ | j
 | ƒ |  j | | ƒ ƒ d  S(   Nt	   signaturet   sha224t   sha256(   R   RA   R   R5   t   popt   NoneR4   R(   RJ   R'   R   R6   (   R   R   t   mdR   R5   (    (    s7   lib/python2.7/site-packages/nbformat/tests/test_sign.pyt   test_check_signaturez   s    						c         C   s’   |  j  j } |  j j |  j  t ƒ xi | D]a } |  j d | ƒ | j d k rw |  j d | j ƒ |  j	 | j j
 ƒ q) |  j d | j ƒ q) Wd  S(   Nt   trustedt   code(   R   t   cellsR   t
   mark_cellst   Falset   assertNotInt	   cell_typet   assertInRA   R4   RQ   (   R   RS   t   cell(    (    s7   lib/python2.7/site-packages/nbformat/tests/test_sign.pyt   test_mark_cells_untrustedŽ   s    c         C   s’   |  j  j } |  j j |  j  t ƒ xi | D]a } |  j d | ƒ | j d k rw |  j d | j ƒ |  j	 | j j
 ƒ q) |  j d | j ƒ q) Wd  S(   NRQ   RR   (   R   RS   R   RT   t   TrueRV   RW   RX   RA   R6   RQ   (   R   RS   RY   (    (    s7   lib/python2.7/site-packages/nbformat/tests/test_sign.pyt   test_mark_cells_trusted™   s    c         C   s­   |  j  } |  j j | t ƒ |  j |  j j | ƒ ƒ x! | j D] } |  j d | ƒ q? W|  j j | t ƒ |  j	 |  j j | ƒ ƒ x! | j D] } |  j d | ƒ q Wd  S(   NRQ   (
   R   R   RT   R[   R6   t   check_cellsRS   RV   RU   R4   (   R   R   RY   (    (    s7   lib/python2.7/site-packages/nbformat/tests/test_sign.pyt   test_check_cells¤   s    	c         C   sh   |  j  } |  j j | t ƒ x, | j D]! } | j d k r& g  | _ q& q& W|  j |  j j | ƒ ƒ d  S(   NRR   (	   R   R   RT   RU   RS   RW   t   outputsR6   R]   (   R   R   RY   (    (    s7   lib/python2.7/site-packages/nbformat/tests/test_sign.pyt   test_trust_no_output¯   s    	c         C   sœ   |  j  } | j d j } |  j j | t ƒ xi | D]a } |  j d | ƒ | j d k r |  j d | j	 ƒ |  j
 | j	 j ƒ q3 |  j d | j	 ƒ q3 Wd  S(   Ni    RQ   RR   (   R   t
   worksheetsRS   R   RT   RU   RV   RW   RX   RA   R4   RQ   (   R   R   RS   RY   (    (    s7   lib/python2.7/site-packages/nbformat/tests/test_sign.pyt   test_mark_cells_untrusted_v3·   s    	c         C   sœ   |  j  } | j d j } |  j j | t ƒ xi | D]a } |  j d | ƒ | j d k r |  j d | j	 ƒ |  j
 | j	 j ƒ q3 |  j d | j	 ƒ q3 Wd  S(   Ni    RQ   RR   (   R   Ra   RS   R   RT   R[   RV   RW   RX   RA   R6   RQ   (   R   R   RS   RY   (    (    s7   lib/python2.7/site-packages/nbformat/tests/test_sign.pyt   test_mark_cells_trusted_v3Ã   s    	c         C   s·   |  j  } | j d j } |  j j | t ƒ |  j |  j j | ƒ ƒ x | D] } |  j d | ƒ qL W|  j j | t	 ƒ |  j
 |  j j | ƒ ƒ x | D] } |  j d | ƒ q™ Wd  S(   Ni    RQ   (   R   Ra   RS   R   RT   R[   R6   R]   RV   RU   R4   (   R   R   RS   RY   (    (    s7   lib/python2.7/site-packages/nbformat/tests/test_sign.pyt   test_check_cells_v3Ï   s    	c            sQ   ‡  f d †  } | ˆ  j  ƒ } ˆ  j d | ƒ | ˆ  j  ƒ } ˆ  j d | ƒ d  S(   Nc            s¾   t  j j ƒ  } ˆ  j | d <t t j d d d g d t d t d | ƒ} t |  t	 j
 d ƒ | j ƒ ƒ | j j ƒ  | j ƒ  ˆ  j | j d	 ƒ | j j ƒ  j d d
 ƒ } | j j ƒ  | S(   Nt   JUPYTER_DATA_DIRs   -ms   nbformat.signs   --log-level=0t   stdint   stdoutt   envt   utf8i    t   replace(   R   t   environR;   R
   R    t   syst
   executableR   R   t   codecst	   getwriterRf   R   t   waitR.   t
   returncodeRg   R   t   decode(   R   Rh   t   pt   out(   R   (    s7   lib/python2.7/site-packages/nbformat/tests/test_sign.pyt
   sign_stdinÜ   s    $	
s   Signing notebook: <stdin>s   already signed: <stdin>(   R   RX   (   R   Ru   Rt   (    (   R   s7   lib/python2.7/site-packages/nbformat/tests/test_sign.pyt   test_sign_stdinÛ   s
    (   t   __name__t
   __module__R   R   R$   R-   R1   R3   R7   R9   RI   RP   RZ   R\   R^   R`   Rb   Rc   Rd   Rv   (    (    (    s7   lib/python2.7/site-packages/nbformat/tests/test_sign.pyR      s$   									 								c             sU   t  j ƒ  ‰  t ƒ  }  ‡  f d †  |  j _ t  j d |  ƒ } | j ˆ  k sQ t ‚ d  S(   Nc              s   ˆ  S(   N(    (    (   R   (    s7   lib/python2.7/site-packages/nbformat/tests/test_sign.pyt   <lambda>ó   s    t   config(   R   t   MemorySignatureStoreR   R   t   store_factoryR   t   AssertionError(   t   cR   (    (   R   s7   lib/python2.7/site-packages/nbformat/tests/test_sign.pyt   test_config_storeï   s
    	t   SignatureStoreTestsc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   t  j ƒ  |  _ d  S(   N(   R   R{   R   (   R   (    (    s7   lib/python2.7/site-packages/nbformat/tests/test_sign.pyR   ø   s    c         C   s‰   d } d } |  j  j | | ƒ s( t ‚ |  j  j | | ƒ |  j  j | | ƒ sV t ‚ |  j  j | | ƒ |  j  j | | ƒ s… t ‚ d  S(   Nt   0123457689abceft   fake_sha(   R   R5   R}   t   store_signaturet   remove_signature(   R   t   digestR+   (    (    s7   lib/python2.7/site-packages/nbformat/tests/test_sign.pyt   test_basicsû   s    (   Rw   Rx   R   R†   (    (    (    s7   lib/python2.7/site-packages/nbformat/tests/test_sign.pyR€   ÷   s   	t   SQLiteSignatureStoreTestsc           B   s   e  Z d  „  Z RS(   c         C   s   t  j d ƒ |  _ d  S(   Ns   :memory:(   R   t   SQLiteSignatureStoreR   (   R   (    (    s7   lib/python2.7/site-packages/nbformat/tests/test_sign.pyR     s    (   Rw   Rx   R   (    (    (    s7   lib/python2.7/site-packages/nbformat/tests/test_sign.pyR‡     s   (   t   __doc__Rn   R;   R   R   t
   subprocessR    R   Rl   RC   R   R    t   unittestt   baseR   t   traitlets.configR   t   nbformatR   R   R   R   R   t   TestCaseR€   R‡   (    (    (    s7   lib/python2.7/site-packages/nbformat/tests/test_sign.pyt   <module>   s"   Ù	