ó
L]c           @   sô   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 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 e f d „  ƒ  YZ e d	 „ Z d
 „  Z d „  Z d e f d „  ƒ  YZ d S(   iÿÿÿÿN(   t   ThreadAuthenticator(   t   u(   t   BaseZMQTestCaset   SkipTestt	   skip_pypyt   BaseAuthTestCasec           B   s>   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s¼   t  j ƒ  d k  r! t d ƒ ‚ n  y t  j ƒ  Wn  t  j k
 rQ t d ƒ ‚ n Xt t |  ƒ j ƒ  t j	 d ƒ j
 t j ƒ |  j ƒ  |  _ |  j j ƒ  |  j ƒ  \ |  _ |  _ |  _ d  S(   Ni   i    s   security is new in libzmq 4.0s.   security requires libzmq to have curve supports   zmq.auth(   i   i    (   t   zmqt   zmq_version_infoR   t   curve_keypairt   ZMQErrort   superR   t   setUpt   loggingt	   getLoggert   setLevelt   DEBUGt	   make_autht   autht   startt   create_certst   base_dirt   public_keys_dirt   secret_keys_dir(   t   self(    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyR      s    c         C   s   t  ƒ  ‚ d  S(   N(   t   NotImplementedError(   R   (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyR   $   s    c         C   sI   |  j  r" |  j  j ƒ  d  |  _  n  |  j |  j ƒ t t |  ƒ j ƒ  d  S(   N(   R   t   stopt   Nonet   remove_certsR   R
   R   t   tearDown(   R   (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyR   '   s
    	c   
      C   si  t  j ƒ  } t j j | d ƒ } t j j | d ƒ } t j j | d ƒ } t j | ƒ t j | ƒ t j | ƒ t j j | d ƒ \ } } t j j | d ƒ \ } } xW t j	 | ƒ D]F }	 |	 j
 d ƒ r¸ t j t j j | |	 ƒ t j j | d ƒ ƒ q¸ q¸ WxW t j	 | ƒ D]F }	 |	 j
 d ƒ rt j t j j | |	 ƒ t j j | d ƒ ƒ qqW| | | f S(	   s$   Create CURVE certificates for a testt   certificatest   public_keyst   private_keyst   servert   clients   .keyt   .s   .key_secret(   t   tempfilet   mkdtempt   ost   patht   joint   mkdirR   R   t   create_certificatest   listdirt   endswitht   shutilt   move(
   R   R   t   keys_dirR   R   t   server_public_filet   server_secret_filet   client_public_filet   client_secret_filet   key_file(    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyR   .   s$    c         C   s   t  j | ƒ d S(   s   Remove certificates for a testN(   R,   t   rmtree(   R   R   (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyR   M   s    c         C   sj   t  j j | d ƒ } t  j j | d ƒ } t j j | ƒ \ } } t j j | ƒ \ } } | | | | f S(   s)   Return server and client certificate keyss   server.key_secrets   client.key_secret(   R%   R&   R'   R   R   t   load_certificate(   R   R   R0   R2   t   server_publict   server_secrett   client_publict   client_secret(    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyt
   load_certsQ   s
    (   t   __name__t
   __module__R   R   R   R   R   R:   (    (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyR      s   					t   TestThreadAuthenticationc           B   se   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 e d	 „  ƒ Z RS(
   s'   Test authentication running in a threadc         C   s   t  |  j ƒ S(   N(   R    t   context(   R   (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyR   _   s    c         C   s˜   t  } d } | j | ƒ } | j d | | f ƒ d g } | j d t j ƒ r` | j | ƒ n  | j d ƒ r” | j ƒ  } |  j | | ƒ t	 } n  | S(   s9   Check if client can connect to server using tcp transports   tcp://127.0.0.1s   %s:%is   Hello Worldiè  (
   t   Falset   bind_to_random_portt   connectt   pollR   t   POLLOUTt   send_multipartt   recv_multipartt   assertEqualt   True(   R   R    R!   t   resultt   ifacet   portt   msgt   rcvd_msg(    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyt   can_connectb   s    		c         C   s¬   |  j  j ƒ  d |  _  |  j ƒ  |  _ |  j t j ƒ } |  j t j ƒ } |  j	 |  j
 | | ƒ ƒ |  j t j ƒ } d | _ |  j t j ƒ } |  j	 |  j
 | | ƒ ƒ d S(   s   threaded auth - NULLt   globalN(   R   R   R   t   ContextR>   t   socketR   t   PUSHt   PULLt
   assertTrueRM   t
   zap_domain(   R   R    R!   (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyt	   test_nullq   s    		c         C   sZ   |  j  j d ƒ |  j t j ƒ } d | _ |  j t j ƒ } |  j |  j | | ƒ ƒ d S(   s   threaded auth - Blacklists	   127.0.0.1RN   N(	   R   t   denyRP   R   RQ   RT   RR   t   assertFalseRM   (   R   R    R!   (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyt   test_blacklist†   s
    	c         C   sZ   |  j  j d ƒ |  j t j ƒ } d | _ |  j t j ƒ } |  j |  j | | ƒ ƒ d S(   s   threaded auth - Whitelists	   127.0.0.1RN   N(	   R   t   allowRP   R   RQ   RT   RR   RS   RM   (   R   R    R!   (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyt   test_whitelist‘   s
    	c         C   s“  |  j  t j ƒ } t | _ |  j  t j ƒ } d | _ d | _ |  j |  j	 | | ƒ ƒ |  j  t j ƒ } t | _ |  j  t j ƒ } d | _ d | _ |  j
 j d d d i d d 6ƒ |  j |  j	 | | ƒ ƒ |  j  t j ƒ } t | _ |  j  t j ƒ } d | _ d | _ |  j |  j	 | | ƒ ƒ |  j
 j ƒ  d |  _
 |  j  t j ƒ } |  j  t j ƒ } |  j |  j	 | | ƒ ƒ | j ƒ  | j ƒ  d S(   s   threaded auth - PLAINt   admint   Passwordt   domaint   *t	   passwordst   BogusN(   RP   R   RQ   RG   t   plain_serverRR   t   plain_usernamet   plain_passwordRW   RM   R   t   configure_plainRS   R   R   t   close(   R   R    R!   (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyt
   test_plainœ   s4    						 				
c         C   s  |  j  j d ƒ |  j |  j ƒ } | \ } } } } |  j t j ƒ } | | _ | | _ t	 | _
 |  j t j ƒ } | | _ | | _ | | _ |  j |  j | | ƒ ƒ |  j  j d d d t j  j ƒ |  j t j ƒ } | | _ | | _ t	 | _
 |  j t j ƒ } | | _ | | _ | | _ |  j |  j | | ƒ ƒ |  j  j d d d |  j ƒ |  j t j ƒ } | | _ | | _ t	 | _
 |  j t j ƒ } | | _ | | _ | | _ |  j | | ƒ sÇt ‚ |  j  j ƒ  d |  _  |  j t j ƒ } |  j t j ƒ } |  j |  j | | ƒ ƒ d S(   s   threaded auth - CURVEs	   127.0.0.1R]   R^   t   locationN(   R   RY   R:   R   RP   R   RQ   t   curve_publickeyt   curve_secretkeyRG   t   curve_serverRR   t   curve_serverkeyRW   RM   t   configure_curvet   CURVE_ALLOW_ANYRS   R   t   AssertionErrorR   R   (   R   t   certsR6   R7   R8   R9   R    R!   (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyt
   test_curveÂ   sJ    																			c   
         sû  |  j  j d ƒ |  j |  j ƒ } | \ } } ‰  } |  j t j ƒ } | | _ | | _ t	 | _
 |  j t j ƒ } ˆ  | _ | | _ | | _ |  j |  j | | ƒ ƒ d t f ‡  f d †  ƒ  Y} | ƒ  } |  j  j d | ƒ |  j t j ƒ } | | _ | | _ t	 | _
 |  j t j ƒ } ˆ  | _ | | _ | | _ |  j |  j | | ƒ ƒ d t f d „  ƒ  Y}	 |	 ƒ  } |  j  j d | ƒ |  j t j ƒ } | | _ | | _ t	 | _
 |  j t j ƒ } ˆ  | _ | | _ | | _ |  j |  j | | ƒ ƒ d S(   s2   threaded auth - CURVE with callback authentications	   127.0.0.1t   CredentialsProviderc              s    e  Z ‡  f d  †  Z d „  Z RS(   c            s   ˆ  |  _  d  S(   N(   R!   (   R   (   R8   (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyt   __init__  s    c         S   s   | |  j  k r t St Sd  S(   N(   R!   RG   R?   (   R   R]   t   key(    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyt   callback  s    (   R;   R<   Rr   Rt   (    (   R8   (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyRq     s   t   credentials_providert   WrongCredentialsProviderc           B   s   e  Z d  „  Z d „  Z RS(   c         S   s   d |  _  d  S(   Nt   WrongCredentials(   R!   (   R   (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyRr      s    c         S   s   | |  j  k r t St Sd  S(   N(   R!   RG   R?   (   R   R]   Rs   (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyRt   #  s    (   R;   R<   Rr   Rt   (    (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyRv     s   	N(   R   RY   R:   R   RP   R   RQ   Rh   Ri   RG   Rj   RR   Rk   RW   RM   t   objectt   configure_curve_callbackRS   (
   R   Ro   R6   R7   R9   R    R!   Rq   t   providerRv   (    (   R8   s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyt   test_curve_callbackô   sH    						
							
							c         C   s  |  j  j d ƒ |  j |  j ƒ } | \ } } } } |  j  j d d d |  j ƒ |  j t j ƒ } | | _	 | | _
 t | _ |  j t j ƒ } | | _	 | | _
 | | _ |  j | | ƒ sÂ t ‚ | j d ƒ |  j | d t ƒ} | j d k sù t ‚ y | j d ƒ }	 Wn t j k
 r"n X|	 t | ƒ k s;t ‚ d „  |  j  _ |  j t j ƒ }
 | |
 _	 | |
 _
 | |
 _ |  j |
 | ƒ st ‚ |
 j d	 ƒ |  j | d t ƒ} | j d	 k sÆt ‚ y | j d ƒ }	 Wn t j k
 rïn X|	 d
 k st ‚ d S(   s   threaded auth - CURVEs	   127.0.0.1R]   R^   Rg   t   testt   copys   User-Idc         S   s   d S(   Nu   custom(    (   t
   client_key(    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyt   <lambda>U  t    t   test2u   customN(   R   RY   R:   R   Rl   R   RP   R   RR   Rh   Ri   RG   Rj   RQ   Rk   RM   Rn   t   sendt   recvR?   t   bytest   gett   ZMQVersionErrorR   t   curve_user_id(   R   Ro   R6   R7   R8   R9   R    R!   RK   t   user_idt   client2(    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyt   test_curve_user_id7  sF    									(   R;   R<   t   __doc__R   RM   RU   RX   RZ   Rf   Rp   R{   R   RŠ   (    (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyR=   \   s   						&	2	Cc            s   ‡  ‡ f d †  } | S(   s*   decorator for running tests with an IOLoopc            sÃ   ˆ |  ƒ } |  j  } ˆ  r1 |  j j |  j ƒ n |  j j |  j ƒ | j d |  j ƒ | j d |  j ƒ ˆ  r† | j d |  j ƒ n | j d |  j	 ƒ | j
 ƒ  |  j r¿ |  j |  j ƒ n  | S(   Ni   g333333ó?i   (   t   io_loopt
   pullstreamt   on_recvt   on_message_succeedt   on_message_failt
   call_latert   attempt_connectiont   send_msgt   on_test_timeout_failt   on_test_timeout_succeedR   t   fail_msgt   fail(   R   t   rt   loop(   t   expect_successt   method(    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyt   test_methodj  s    	
	(    (   R›   Rš   Rœ   (    (   Rš   R›   s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyt   with_iolooph  s    c         C   s   t  |  t ƒ S(   N(   R   RG   (   R›   (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyt   should_auth‚  s    c         C   s   t  |  t ƒ S(   N(   R   R?   (   R›   (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyt   should_not_auth…  s    t   TestIOLoopAuthenticationc           B   sõ   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z e d
 „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z RS(   s%   Test authentication running in ioloopc         C   sÔ   y d d l  m } Wn t k
 r4 t j d ƒ n Xd d l m } d  |  _ | j	 ƒ  |  _
 t t |  ƒ j ƒ  |  j t j ƒ |  _ |  j t j ƒ |  _ | j |  j |  j
 ƒ |  _ | j |  j |  j
 ƒ |  _ d  S(   Niÿÿÿÿ(   t   ioloops   Requires tornado(   t	   zmqstream(   t   tornadoR¡   t   ImportErrort   pytestt   skipt   zmq.eventloopR¢   R   R–   t   IOLoopRŒ   R
   R    R   RP   R   RQ   R    RR   R!   t	   ZMQStreamt
   pushstreamR   (   R   R¡   R¢   (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyR   ‹  s    	c         C   s&   d d l  m } | |  j d |  j ƒS(   Niÿÿÿÿ(   t   IOLoopAuthenticatorRŒ   (   t   zmq.auth.ioloopR«   R>   RŒ   (   R   R«   (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyR   ™  s    c         C   sL   |  j  r" |  j  j ƒ  d  |  _  n  |  j j d t ƒ t t |  ƒ j ƒ  d  S(   Nt   all_fds(	   R   R   R   RŒ   Re   RG   R
   R    R   (   R   (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyR     s
    	c         C   s6   d } |  j  j | ƒ } |  j j d | | f ƒ d S(   s9   Check if client can connect to server using tcp transports   tcp://127.0.0.1s   %s:%iN(   R    R@   R!   RA   (   R   RI   RJ   (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyR’   ¤  s    c         C   s   d g } |  j  j | ƒ d S(   s&   Send a message from server to a clients   Hello WorldN(   Rª   RD   (   R   RK   (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyR“   ª  s    	c         C   s,   | d g k r d |  _  n  |  j j ƒ  d S(   s$   A message was received, as expected.s   Hello Worlds   Unexpected message receivedN(   R–   RŒ   R   (   R   t   frames(    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyR   ¯  s    c         C   s   d |  _  |  j j ƒ  d S(   s%   A message was received, unexpectedly.s/   Received messaged unexpectedly, security failedN(   R–   RŒ   R   (   R   R®   (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyR   µ  s    	c         C   s   |  j  j ƒ  d S(   s*   Test timer expired, indicates test successN(   RŒ   R   (   R   (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyR•   º  s    c         C   s   d |  _  |  j j ƒ  d S(   s*   Test timer expired, indicates test failures   Test timed outN(   R–   RŒ   R   (   R   (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyR”   ¾  s    	c         C   s   |  j  j ƒ  d |  _  d S(   s   ioloop auth - NONEN(   R   R   R   (   R   (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyt	   test_noneÃ  s    c         C   s   d |  j  _ d S(   s   ioloop auth - NULLRN   N(   R    RT   (   R   (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyRU   Ì  s    c         C   s    |  j  j d ƒ d |  j _ d S(   s   ioloop auth - Blacklists	   127.0.0.1RN   N(   R   RV   R    RT   (   R   (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyRX   Ô  s    c         C   s*   |  j  j d ƒ |  j j t j d ƒ d S(   s   ioloop auth - Whitelists	   127.0.0.1RN   N(   R   RY   R    t
   setsockoptR   t
   ZAP_DOMAIN(   R   (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyRZ   Û  s    c         C   s(   d |  j  _ d |  j  _ t |  j _ d S(   s(   ioloop auth - PLAIN, unconfigured serverR[   R\   N(   R!   Rb   Rc   RG   R    Ra   (   R   (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyt   test_plain_unconfigured_serverã  s    c         C   sH   d |  j  _ d |  j  _ t |  j _ |  j j d d d i d d 6ƒ d S(   s&   ioloop auth - PLAIN, configured serverR[   R\   R]   R^   R_   N(   R!   Rb   Rc   RG   R    Ra   R   Rd   (   R   (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyt   test_plain_configured_serverë  s    c         C   sH   d |  j  _ d |  j  _ t |  j _ |  j j d d d i d d 6ƒ d S(   s&   ioloop auth - PLAIN, bogus credentialsR[   R`   R]   R^   R_   R\   N(   R!   Rb   Rc   RG   R    Ra   R   Rd   (   R   (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyt   test_plain_bogus_credentialsô  s    c         C   s€   |  j  |  j ƒ } | \ } } } } |  j j d ƒ | |  j _ | |  j _ t |  j _ | |  j	 _ | |  j	 _ | |  j	 _
 d S(   s(   ioloop auth - CURVE, unconfigured servers	   127.0.0.1N(   R:   R   R   RY   R    Rh   Ri   RG   Rj   R!   Rk   (   R   Ro   R6   R7   R8   R9   (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyt   test_curve_unconfigured_serverý  s    c         C   sŸ   |  j  |  j ƒ } | \ } } } } |  j j d ƒ |  j j d d d t j j ƒ | |  j _ | |  j _	 t
 |  j _ | |  j _ | |  j _	 | |  j _ d S(   s$   ioloop auth - CURVE, CURVE_ALLOW_ANYs	   127.0.0.1R]   R^   Rg   N(   R:   R   R   RY   Rl   R   Rm   R    Rh   Ri   RG   Rj   R!   Rk   (   R   Ro   R6   R7   R8   R9   (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyt   test_curve_allow_any  s    c         C   sœ   |  j  j d ƒ |  j |  j ƒ } | \ } } } } |  j  j d d d |  j ƒ | |  j _ | |  j _ t	 |  j _
 | |  j _ | |  j _ | |  j _ d S(   s&   ioloop auth - CURVE, configured servers	   127.0.0.1R]   R^   Rg   N(   R   RY   R:   R   Rl   R   R    Rh   Ri   RG   Rj   R!   Rk   (   R   Ro   R6   R7   R8   R9   (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyt   test_curve_configured_server  s    (   R;   R<   R‹   R   R   R   R’   R“   R   R   R•   R”   Rž   R¯   RU   RŸ   RX   RZ   R²   R³   R´   Rµ   R¶   R·   (    (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyR    ˆ  s(   												(   R   R%   R,   t   sysR#   R¥   t   zmq.authR   t   zmq.auth.threadR    t   zmq.utils.strtypesR   t	   zmq.testsR   R   R   R   R=   RG   R   Rž   RŸ   R    (    (    (    s2   lib/python2.7/site-packages/zmq/tests/test_auth.pyt   <module>   s    Gÿ 		