ó
ç'ÊUc           @   s  d  d l  Z  d  d l Z d  d l 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  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 e j e f d „  ƒ  YZ d e f d „  ƒ  YZ d S(   iÿÿÿÿN(   t   Thread(   t
   controllert   proxy(   t	   http_auth(   t
   LogCapture(   t   defer(   t   TestCase(   t   get_crawler(   t   Request(   t   SimpleSpidert   SingleRequestSpider(   t
   MockServert
   HTTPSProxyc           B   s   e  Z d  „  Z RS(   c         C   sœ   t  j d d ƒ } t  j | d ƒ } t j j t j j t j j t ƒ ƒ d d ƒ } t	 j
 t	 j d | d | ƒ | ƒ } t j |  ƒ t j j |  | ƒ d  S(   Nt   scrapyt	   mitmproxyt   keyss   mitmproxy-ca.pemt   authenticatort   cacert(   R   t   PassManSingleUsert   BasicProxyAutht   ost   patht   joint   abspatht   dirnamet   __file__R   t   ProxyServert   ProxyConfigR    t   __init__R   t   Master(   t   selft   portt   password_managerR   t	   cert_patht   server(    (    s<   /home/travis/build/scrapy/scrapy/tests/test_proxy_connect.pyR      s    $	(   t   __name__t
   __module__R   (    (    (    s<   /home/travis/build/scrapy/scrapy/tests/test_proxy_connect.pyR      s   t   ProxyConnectTestCasec           B   s˜   e  Z d  „  Z d „  Z e j d „  ƒ Z e j d „  ƒ Z e j d „  ƒ Z e j d „  ƒ Z	 e j d „  ƒ Z
 e j d „  ƒ Z d „  Z d	 „  Z RS(
   c         C   sr   t  ƒ  |  _ |  j j ƒ  t j j ƒ  |  _ t d ƒ |  _ |  j j	 ƒ  t
 j d ƒ d t j d <d t j d <d  S(   Ni¸"  g      ð?s#   http://scrapy:scrapy@localhost:8888t
   http_proxyt   https_proxy(   R   t
   mockservert	   __enter__R   t   environt   copyt   _oldenvR   t   _proxyt   startt   timet   sleep(   R   (    (    s<   /home/travis/build/scrapy/scrapy/tests/test_proxy_connect.pyt   setUp#   s    c         C   s3   |  j  j d  d  d  ƒ |  j j ƒ  |  j t _ d  S(   N(   R(   t   __exit__t   NoneR-   t   shutdownR,   R   R*   (   R   (    (    s<   /home/travis/build/scrapy/scrapy/tests/test_proxy_connect.pyt   tearDown.   s    c         c   s@   t  t ƒ } t ƒ   } | j d ƒ VWd  QX|  j d | ƒ d  S(   Ns#   https://localhost:8999/status?n=200iÈ   (   R   R	   R   t   crawlt   _assert_got_response_code(   R   t   crawlert   l(    (    s<   /home/travis/build/scrapy/scrapy/tests/test_proxy_connect.pyt   test_https_connect_tunnel3   s    c         c   sZ   d t  j d <t t ƒ } t ƒ   } | j d ƒ VWd  QX|  j d | ƒ d t  j d <d  S(   Ns-   http://scrapy:scrapy@localhost:8888?noconnectR'   s#   https://localhost:8999/status?n=200iÈ   s#   http://scrapy:scrapy@localhost:8888(   R   R*   R   R	   R   R6   R7   (   R   R8   R9   (    (    s<   /home/travis/build/scrapy/scrapy/tests/test_proxy_connect.pyt   test_https_noconnect:   s    c         c   s=   t  t ƒ } t ƒ   } | j d ƒ VWd  QX|  j | ƒ d  S(   Ns$   https://localhost:99999/status?n=200(   R   R	   R   R6   t   _assert_got_tunnel_error(   R   R8   R9   (    (    s<   /home/travis/build/scrapy/scrapy/tests/test_proxy_connect.pyt   test_https_connect_tunnel_errorC   s    c         c   sW   d t  j d <t t ƒ } t ƒ   } | j d ƒ VWd  QX|  j | ƒ d t  j d <d  S(   Ns#   http://wrong:wronger@localhost:8888R'   s#   https://localhost:8999/status?n=200s#   http://scrapy:scrapy@localhost:8888(   R   R*   R   R	   R   R6   R<   (   R   R8   R9   (    (    s<   /home/travis/build/scrapy/scrapy/tests/test_proxy_connect.pyt   test_https_tunnel_auth_errorJ   s    c         c   s†   t  d ƒ } t t ƒ } t ƒ   } | j d | ƒ VWd  QX|  j d | ƒ t j | j j	 d d j
 ƒ } |  j d | d k ƒ d  S(   Ns   https://localhost:8999/echot   seediÈ   t	   responsesi    s   Proxy-Authorizationt   headers(   R   R   R
   R   R6   R7   t   jsont   loadst   spidert   metat   bodyt
   assertTrue(   R   t   requestR8   R9   t   echo(    (    s<   /home/travis/build/scrapy/scrapy/tests/test_proxy_connect.pyt9   test_https_tunnel_without_leak_proxy_authorization_headerU   s     c         c   sM   d t  j d <t t ƒ } t ƒ   } | j d ƒ VWd  QX|  j d | ƒ d  S(   Ns-   http://wrong:wronger@localhost:8888?noconnectR'   s#   https://localhost:8999/status?n=200i—  (   R   R*   R   R	   R   R6   R7   (   R   R8   R9   (    (    s<   /home/travis/build/scrapy/scrapy/tests/test_proxy_connect.pyt   test_https_noconnect_auth_error_   s
    c         C   s'   |  j  t | ƒ j d | ƒ d ƒ d  S(   Ns   Crawled (%d)i   (   t   assertEqualt   strt   count(   R   t   codet   log(    (    s<   /home/travis/build/scrapy/scrapy/tests/test_proxy_connect.pyR7   g   s    c         C   s#   |  j  t | ƒ j d ƒ d ƒ d  S(   Nt   TunnelErrori   (   RL   RM   RN   (   R   RP   (    (    s<   /home/travis/build/scrapy/scrapy/tests/test_proxy_connect.pyR<   j   s    (   R#   R$   R1   R5   R   t   inlineCallbacksR:   R;   R=   R>   RJ   RK   R7   R<   (    (    (    s<   /home/travis/build/scrapy/scrapy/tests/test_proxy_connect.pyR%   !   s   			
	(   RB   R   R/   t	   threadingR    t	   libmproxyR   R   t   netlibR   t   testfixturesR   t   twisted.internetR   t   twisted.trial.unittestR   t   scrapy.utils.testR   t   scrapy.httpR   t   tests.spidersR	   R
   t   tests.mockserverR   R   R   R%   (    (    (    s<   /home/travis/build/scrapy/scrapy/tests/test_proxy_connect.pyt   <module>   s   