σ
mάJ]c           @` s  d  d l  m Z m Z m Z m Z d  d l Z e 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 m Z m Z m Z m Z d  d l Z d   Z d   Z d   Z d	 Z d
 e f d     YZ d e f d     YZ d S(   i    (   t   absolute_importt   divisiont   print_functiont   unicode_literalsN(   t   patch(   t   decode_utf8(   t   generate_session_idt   generate_secret_keyt   check_session_id_signaturet   _get_sysrandomt
   _signaturet   _reseed_if_neededt   _base64_encodec         C` sl   t  |   d } | d k r1 |  d d | }  n  t  |   d d k sM t  t j |  d  } t j |  S(   Ni   i    u   =u   ascii(   t   lent   AssertionErrort   codecst   encodet   base64t   urlsafe_b64decode(   t   encodedt   modt   encoded_as_bytes(    (    s?   lib/python2.7/site-packages/bokeh/util/tests/test_session_id.pyt   _base64_decode0   s    c         C` s   t  j t |   d  S(   Nu   utf-8(   R   t   decodeR   (   R   (    (    s?   lib/python2.7/site-packages/bokeh/util/tests/test_session_id.pyt   _base64_decode_utf8:   s    c          C` s   d   }  |  S(   Nc           S` s   t     d  S(   N(   t   NotImplementedError(    (    (    s?   lib/python2.7/site-packages/bokeh/util/tests/test_session_id.pyt   func>   s    (    (   R   (    (    s?   lib/python2.7/site-packages/bokeh/util/tests/test_session_id.pyt   _nie=   s    	uj   A secure pseudo-random number generator is not available on your system. Falling back to Mersenne Twister.t   TestSessionIdc           B` sk   e  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` sT   xM d d d d d d d d d	 d
 d g D]$ } | t  t |   k s( t  q( Wd  S(   Nu    u   au   abu   abcu   abcdu   abcdeu   abcdefu   abcdefgu   abcdefghu	   abcdefghiu   abcdefghijklmnopqrstuvwxyz(   R   R   R   (   t   selft   s(    (    s?   lib/python2.7/site-packages/bokeh/util/tests/test_session_id.pyt   test_base64_roundtripI   s    c         C` s΄   t  j t j d d   t  j   } t d t d d   | t  j   k sP t  t	 j
 j j  } z> t  t	 j
 j _  t d t d d  | t  j   k s t  Wd  | t	 j
 j _  Xd  S(   Nu   abcdefgu   utf-8t   using_sysrandomt
   secret_keyu   abc(   t   randomt   seedR   R   t   getstateR   t   Truet   NoneR   t   bokeht   utilt
   session_idt   False(   R   t   statet   saved(    (    s?   lib/python2.7/site-packages/bokeh/util/tests/test_session_id.pyt   test_reseed_if_neededO   s    c         C` s^   t  d d d } t  d d d } | | k s6 t  t  d d d } | | k sZ t  d  S(   Nu   xyzR!   u   abcu   qrs(   R
   R   (   R   t   sigt   with_same_keyt   with_different_key(    (    s?   lib/python2.7/site-packages/bokeh/util/tests/test_session_id.pyt   test_signature`   s
    c         C` sd   t  d t  } d t |  k s' t  t  d t  } d t |  k sN t  | | k s` t  d  S(   Nt   signedi,   (   R   R*   R   R   (   R   R)   t   another_session_id(    (    s?   lib/python2.7/site-packages/bokeh/util/tests/test_session_id.pyt   test_generate_unsignedg   s
    c         C` sh   t  d t d d  } d | k s' t  t | d d d t sE t  t | d d d t sd t  d  S(   NR2   R!   u   abcu   -u   qrs(   R   R%   R   R   (   R   R)   (    (    s?   lib/python2.7/site-packages/bokeh/util/tests/test_session_id.pyt   test_generate_signedo   s    c         C` s8   t  d t d d  } t | d d d t s4 t  d  S(   NR2   R!   u   abc(   R   R*   R   R%   R   (   R   R)   (    (    s?   lib/python2.7/site-packages/bokeh/util/tests/test_session_id.pyt    test_check_signature_of_unsignedu   s    c         C` s#   t  d d d d t s t  d  S(   Nu    R!   u   abcR2   (   R   R%   R   (   R   (    (    s?   lib/python2.7/site-packages/bokeh/util/tests/test_session_id.pyt$   test_check_signature_of_empty_stringy   s    c         C` s#   t  d d d d t s t  d  S(   Nu   foo-bar-bazR!   u   abcR2   (   R   R%   R   (   R   (    (    s?   lib/python2.7/site-packages/bokeh/util/tests/test_session_id.pyt.   test_check_signature_of_junk_with_hyphen_in_it|   s    c         C` s"   t  d d d d t s t  d  S(   Nu   gobbledygookR!   u   abcR2   (   R   R*   R   (   R   (    (    s?   lib/python2.7/site-packages/bokeh/util/tests/test_session_id.pyt*   test_check_signature_with_signing_disabled   s    c         C` sX   t    } d t |  k s! t  t    } d t |  k sB t  | | k sT t  d  S(   Ni,   (   R   R   R   (   R   t   keyt   key2(    (    s?   lib/python2.7/site-packages/bokeh/util/tests/test_session_id.pyt   test_generate_secret_key   s
    		c         C` s[   t  d t d d  } t | d d d t s3 t  t t |  d d d t sW t  d  S(   NR2   R!   u   abc(   R   R%   R   R   R   (   R   R)   (    (    s?   lib/python2.7/site-packages/bokeh/util/tests/test_session_id.pyt5   test_string_encoding_does_not_affect_session_id_check   s    (   t   __name__t
   __module__R   R-   R1   R4   R5   R6   R7   R8   R9   R<   R=   (    (    (    s?   lib/python2.7/site-packages/bokeh/util/tests/test_session_id.pyR   H   s   										t   Test__get_sysrandomc           B` sG   e  Z d    Z e d d e d    Z e d d e d    Z RS(   c         C` s_   d d  l  } y | j   t } Wn t k
 r9 t } n Xt   \ } } | | k s[ t  d  S(   Ni    (   R"   t   SystemRandomR%   R   R*   R	   R   (   R   R"   t   expectedt   _randomR    (    (    s?   lib/python2.7/site-packages/bokeh/util/tests/test_session_id.pyt   test_default   s    


u   random.SystemRandomt   new_callablec         C` s   t  j t  { } t   \ } } | s. t  t |  d k sF t  | d j j d t k sf t  | d j j d d k s t  Wd  QXd  S(   Ni   i    i   u‘   A secure pseudo-random number generator is not available and no BOKEH_SECRET_KEY has been set. Setting a secret key will mitigate the lack of a secure generator.(	   t   pytestt   warnst   UserWarningR	   R   R   t   messaget   argst   _MERSENNE_MSG(   R   t   _mock_sysrandomRG   R"   R    (    (    s?   lib/python2.7/site-packages/bokeh/util/tests/test_session_id.pyt$   test_missing_sysrandom_no_secret_key£   s     c         C` s   d t  j d <t j t  [ } t   \ } } | s; t  t |  d k sS t  | d j j	 d t
 k ss t  Wd  QXt  j d =d  S(   Nu   foou   BOKEH_SECRET_KEYi   i    (   t   ost   environRF   RG   RH   R	   R   R   RI   RJ   RK   (   R   RL   RG   R"   R    (    (    s?   lib/python2.7/site-packages/bokeh/util/tests/test_session_id.pyt&   test_missing_sysrandom_with_secret_key±   s    &(   R>   R?   RD   R   R   RM   RP   (    (    (    s?   lib/python2.7/site-packages/bokeh/util/tests/test_session_id.pyR@      s   	
(   t
   __future__R    R   R   R   RF   R   R   RN   R"   t   mockR   t   bokeh.util.stringR   t   bokeh.util.session_idR   R   R   R	   R
   R   R   R'   R   R   R   RK   t   objectR   R@   (    (    (    s?   lib/python2.7/site-packages/bokeh/util/tests/test_session_id.pyt   <module>   s    " 4		
		O