;
Íâ"Ic               @   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
 Gd „  d e j j ƒ Z Gd „  d e j ƒ Z Gd „  d ƒ Z Gd	 „  d
 e j j ƒ Z Gd „  d e j ƒ Z d „  Z Gd „  d e j ƒ Z d „  Z e d k o e ƒ  n d S(   i    N(   u   supportc             B   s&   |  Ee  Z d  Z d „  Z d „  Z d S(   u^   HTTP server w/ a few modifications that make it useful for
    loopback testing purposes.
    c             C   s-   t  j j j |  | | ƒ |  j j d ƒ d  S(   Ng      ð?(   u   httpu   serveru
   HTTPServeru   __init__u   socketu
   settimeout(   u   selfu   server_addressu   RequestHandlerClass(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   __init__   s    c             C   s,   |  j  j ƒ  \ } } | j d ƒ | | f S(   u   HTTPServer method, overridden.g      $@(   u   socketu   acceptu
   settimeout(   u   selfu   requestu   client_address(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   get_request   s    N(   u   __name__u
   __module__u   __doc__u   __init__u   get_request(   u
   __locals__(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   LoopbackHttpServer   s   
		u   LoopbackHttpServerc             B   s/   |  Ee  Z d  Z d „  Z d „  Z d „  Z d S(   u2   Stoppable thread that runs a loopback http server.c             C   sV   t  j j |  ƒ d |  _ t  j ƒ  |  _ d | _ t d | ƒ |  _	 |  j	 j
 |  _ d  S(   Nu   HTTP/1.0u	   127.0.0.1i    F(   u	   127.0.0.1i    (   u	   threadingu   Threadu   __init__u   Falseu   _stop_serveru   Eventu   readyu   protocol_versionu   LoopbackHttpServeru   httpdu   server_portu   port(   u   selfu   request_handler(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   __init__+   s    		c             C   s   d |  _ |  j ƒ  d S(   u.   Stops the webserver if it's currently running.NT(   u   Trueu   _stop_serveru   join(   u   self(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   stop6   s    	c             C   s0   |  j  j ƒ  x |  j p |  j j ƒ  q Wd  S(   N(   u   readyu   setu   _stop_serveru   httpdu   handle_request(   u   self(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   run>   s     
N(   u   __name__u
   __module__u   __doc__u   __init__u   stopu   run(   u
   __locals__(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   LoopbackHttpServerThread(   s   
		u   LoopbackHttpServerThreadc             B   se   |  Ee  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 S(   u-   Handler for performing digest authentication.c             C   s1   d |  _  g  |  _ i  |  _ d |  _ d |  _ d  S(   Ni    u
   Test Realmu   auth(   u   _request_numu   _noncesu   _usersu   _realm_nameu   _qop(   u   self(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   __init__H   s
    				c             C   s   | |  _  d  S(   N(   u   _qop(   u   selfu   qop(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   set_qopO   s    c             C   s   | |  _  d  S(   N(   u   _users(   u   selfu   users(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu	   set_usersR   s    c             C   s   | |  _  d  S(   N(   u   _realm_name(   u   selfu   realm(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu	   set_realmV   s    c             C   sJ   |  j  d 7_  t j t |  j  ƒ j d ƒ ƒ j ƒ  } |  j j | ƒ | S(   Ni   u   ascii(   u   _request_numu   hashlibu   md5u   stru   encodeu	   hexdigestu   _noncesu   append(   u   selfu   nonce(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   _generate_nonceY   s    'c             C   sº   | j  d ƒ } | | d d  … } | j d ƒ } i  } x{ | D]s } | j d ƒ \ } } | j ƒ  } | d d k o% | d d k o | d d … } n | j ƒ  } | | | <q? W| S(   Nu    i   u   ,u   =i    u   "iÿÿÿÿ(   u   findu   splitu   strip(   u   selfu   auth_stru   first_space_indexu   partsu	   auth_dictu   partu   nameu   value(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   _create_auth_dict_   s     "c             C   sË   i  } | j  | ƒ | | d <| | d <| | d <d | } t j | j d ƒ ƒ j ƒ  } d | } t j | j d ƒ ƒ j ƒ  }	 | | d <|	 | d <d	 | }
 t j |
 j d ƒ ƒ j ƒ  } | | d
 k S(   Nu   passwordu   methodu   uriu#   %(username)s:%(realm)s:%(password)su   asciiu   %(method)s:%(uri)su   HA1u   HA2u3   %(HA1)s:%(nonce)s:%(nc)s:%(cnonce)s:%(qop)s:%(HA2)su   response(   u   updateu   hashlibu   md5u   encodeu	   hexdigest(   u   selfu	   auth_dictu   passwordu   methodu   uriu
   final_dictu   HA1_stru   HA1u   HA2_stru   HA2u   response_stru   response(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   _validate_authp   s    






c             C   sg   | j  d d ƒ | j d d ƒ | j d d |  j |  j |  j ƒ  f ƒ | j ƒ  | j j d ƒ d S(	   Ni—  u   Proxy Authentication Requiredu   Content-Typeu	   text/htmlu   Proxy-Authenticateu(   Digest realm="%s", qop="%s",nonce="%s", s   Proxy Authentication Required.F(	   u   send_responseu   send_headeru   _realm_nameu   _qopu   _generate_nonceu   end_headersu   wfileu   writeu   False(   u   selfu   request_handler(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   _return_auth_challenge‚   s    
c             C   s&  t  |  j ƒ d k o d Sd | j k o |  j | ƒ S|  j | j d ƒ } | d |  j k o |  j | d } n |  j | ƒ S| j d ƒ |  j k o |  j | ƒ S|  j j | d ƒ d } x@ | j
 | j g D], } |  j | | | j | ƒ o
 d } qÙ qÙ W| p |  j | ƒ Sd Sd S(   u  Performs digest authentication on the given HTTP request
        handler.  Returns True if authentication was successful, False
        otherwise.

        If no users have been set, then digest auth is effectively
        disabled and this method will always return True.
        i    u   Proxy-Authorizationu   usernameu   nonceNTF(   u   lenu   _usersu   Trueu   headersu   _return_auth_challengeu   _create_auth_dictu   getu   _noncesu   removeu   Falseu   pathu
   short_pathu   _validate_authu   command(   u   selfu   request_handleru	   auth_dictu   passwordu   auth_validatedu   path(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   handle_request‘   s.    	 	
N(   u   __name__u
   __module__u   __doc__u   __init__u   set_qopu	   set_usersu	   set_realmu   _generate_nonceu   _create_auth_dictu   _validate_authu   _return_auth_challengeu   handle_request(   u
   __locals__(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   DigestAuthHandlerE   s   
								u   DigestAuthHandlerc             B   s/   |  Ee  Z d  Z e ƒ  Z d „  Z d „  Z d S(   uÏ   This is a 'fake proxy' that makes it look like the entire
    internet has gone down due to a sudden zombie invasion.  It main
    utility is in providing us with authentication support for
    testing.
    c             G   s   d  S(   N(    (   u   selfu   formatu   args(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   log_messageÈ   s    c             C   s¨   t  j j |  j d ƒ \ } } } } } } | |  _ |  j j |  ƒ o^ |  j d d ƒ |  j d d ƒ |  j	 ƒ  |  j
 j t d |  j d ƒ ƒ |  j
 j d ƒ n d  S(	   Nu   httpiÈ   u   OKu   Content-Typeu	   text/htmlu   You've reached %s!<BR>u   asciisF   Our apologies, but our server is down due to a sudden zombie invasion.(   u   urllibu   parseu   urlparseu   pathu
   short_pathu   digest_auth_handleru   handle_requestu   send_responseu   send_headeru   end_headersu   wfileu   writeu   bytes(   u   selfu   scmu   netlocu   pathu   paramsu   queryu   fragment(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   do_GETÍ   s    	!	

N(   u   __name__u
   __module__u   __doc__u   DigestAuthHandleru   digest_auth_handleru   log_messageu   do_GET(   u
   __locals__(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   FakeProxyHandler¿   s   
		u   FakeProxyHandlerc             B   s\   |  Ee  Z d  Z d Z d Z d Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 S(   u   http://localhostu   testeru   test123u	   TestRealmc             C   s¶   t  j j i |  j |  j 6ƒ t  j j |  j ƒ t t  ƒ |  _ |  j j	 ƒ  |  j j
 j ƒ  d |  j j } t j j i | d 6ƒ } t j j ƒ  |  _ t j j | |  j ƒ |  _ d  S(   Nu   http://127.0.0.1:%du   http(   u   FakeProxyHandleru   digest_auth_handleru	   set_usersu   PASSWDu   USERu	   set_realmu   REALMu   LoopbackHttpServerThreadu   serveru   startu   readyu   waitu   portu   urllibu   requestu   ProxyHandleru   ProxyDigestAuthHandleru   _digest_auth_handleru   build_openeru   opener(   u   selfu	   proxy_urlu   handler(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   setUpã   s    	c             C   s   |  j  j ƒ  d  S(   N(   u   serveru   stop(   u   self(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   tearDownò   s    c             C   s_   |  j  j |  j |  j |  j |  j d ƒ t j j d ƒ |  j	 t
 j j |  j j |  j ƒ d  S(   Nu   badu   auth(   u   _digest_auth_handleru   add_passwordu   REALMu   URLu   USERu   PASSWDu   FakeProxyHandleru   digest_auth_handleru   set_qopu   assertRaisesu   urllibu   erroru	   HTTPErroru   openeru   open(   u   self(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu-   test_proxy_with_bad_password_raises_httperrorõ   s    	c             C   s6   t  j j d ƒ |  j t j j |  j j |  j	 ƒ d  S(   Nu   auth(
   u   FakeProxyHandleru   digest_auth_handleru   set_qopu   assertRaisesu   urllibu   erroru	   HTTPErroru   openeru   openu   URL(   u   self(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu,   test_proxy_with_no_password_raises_httperrorý   s    	c             C   sm   |  j  j |  j |  j |  j |  j ƒ t j j d ƒ |  j	 j
 |  j ƒ } x | j ƒ  o qM W| j ƒ  d  S(   Nu   auth(   u   _digest_auth_handleru   add_passwordu   REALMu   URLu   USERu   PASSWDu   FakeProxyHandleru   digest_auth_handleru   set_qopu   openeru   openu   readu   close(   u   selfu   result(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   test_proxy_qop_auth_works  s     c             C   sŸ   |  j  j |  j |  j |  j |  j ƒ t j j d ƒ y |  j	 j
 |  j ƒ } Wn  t j j k
 o d  } Yn X| o# x | j ƒ  o q{ W| j ƒ  n d  S(   Nu   auth-int(   u   _digest_auth_handleru   add_passwordu   REALMu   URLu   USERu   PASSWDu   FakeProxyHandleru   digest_auth_handleru   set_qopu   openeru   openu   urllibu   erroru   URLErroru   Noneu   readu   close(   u   selfu   result(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu0   test_proxy_qop_auth_int_works_or_throws_urlerror  s     N(   u   __name__u
   __module__u   URLu   USERu   PASSWDu   REALMu   setUpu   tearDownu-   test_proxy_with_bad_password_raises_httperroru,   test_proxy_with_no_password_raises_httperroru   test_proxy_qop_auth_worksu0   test_proxy_qop_auth_int_works_or_throws_urlerror(   u
   __locals__(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   ProxyAuthTestsÜ   s   
						u   ProxyAuthTestsc                s&   G‡ ‡  f d †  d t  j j ƒ ‰  ˆ  S(   Nc                sS   |  Ee  Z d  Z g  Z g  Z d Z d „  Z d „  Z ‡  ‡ f d †  Z d „  Z	 d S(   u	   TestHTTP/iP   c             S   s+   |  j  ƒ  } | o |  j j | ƒ n d  S(   N(   u	   send_headu   wfileu   write(   u   selfu   body(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   do_GET&  s    c             S   sC   |  j  d } |  j j t | ƒ ƒ } |  j ƒ  |  j j | ƒ d  S(   Nu   Content-Length(   u   headersu   rfileu   readu   intu   do_GETu   requestsu   append(   u   selfu   content_lengthu	   post_data(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   do_POST+  s    
c                s¦   |  j  ˆ _ |  j j |  j ƒ ˆ  j d ƒ \ } } } |  j | ƒ x+ | D]# \ } } |  j | | |  j ƒ qK W| o |  j d d ƒ |  j	 ƒ  | S|  j	 ƒ  d  S(   Ni    u   Content-typeu
   text/plain(
   u   headersu   headers_receivedu   requestsu   appendu   pathu   popu   send_responseu   send_headeru   portu   end_headers(   u   selfu   response_codeu   headersu   bodyu   headeru   value(   u	   responsesu   FakeHTTPRequestHandler(    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu	   send_head1  s     
c             W   s   d  S(   N(    (   u   selfu   args(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   log_message@  s    N(
   u   __name__u
   __module__u   server_versionu   requestsu   headers_receivedu   portu   do_GETu   do_POSTu	   send_headu   log_message(   u
   __locals__(   u	   responsesu   FakeHTTPRequestHandler(    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   FakeHTTPRequestHandler  s   
		u   FakeHTTPRequestHandler(   u   httpu   serveru   BaseHTTPRequestHandler(   u	   responses(    (   u   FakeHTTPRequestHandleru	   responsesu7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   GetRequestHandler  s    "%c             B   s   |  Ee  Z d  Z d „  Z d „  Z d d „ Z d d „ Z d „  Z d „  Z	 d „  Z
 d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d S(   uG  Tests urllib2.urlopen using the network.

    These tests are not exhaustive.  Assuming that testing using files does a
    good job overall of some of the basic interface features.  There are no
    tests exercising the optional 'data' and 'proxies' arguments.  No tests
    for transparent redirection have been written.
    c             C   s   d  |  _ d  S(   N(   u   Noneu   server(   u   self(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   setUpP  s    c             C   s%   |  j  d  k	 o |  j  j ƒ  n d  S(   N(   u   serveru   Noneu   stop(   u   self(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   tearDownS  s    c             C   s/   t  j j | | ƒ } | j ƒ  } | j ƒ  | S(   N(   u   urllibu   requestu   urlopenu   readu   close(   u   selfu   urlu   datau   fu   result(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   urlopenW  s    
c             C   st   | d  k o d g  d f g } n t | ƒ } t | ƒ |  _ |  j j ƒ  |  j j j ƒ  |  j j } | | _ | S(   NiÈ   s   we don't care(   u   Noneu   GetRequestHandleru   LoopbackHttpServerThreadu   serveru   startu   readyu   waitu   port(   u   selfu	   responsesu   handleru   port(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   start_server]  s    	c             C   sy   d } d d
 g d f d g  | f g } |  j  | ƒ } |  j d | j ƒ } |  j | | ƒ |  j | j d d	 g ƒ d  S(   Ns   We got here...i.  u   Locationu"   http://localhost:%s/somewhere_elseu    iÈ   u   http://localhost:%s/u   /u   /somewhere_else(   u   Locationu"   http://localhost:%s/somewhere_else(   u   start_serveru   urlopenu   portu   assertEqualsu   requests(   u   selfu   expected_responseu	   responsesu   handleru   data(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   test_redirectioni  s    c             C   s¶   d } |  j  d g  | f g ƒ } y |  j d | j ƒ WnC t j j k
 o1 } z | j ƒ  } | j ƒ  WYd  d  } ~ Xn X|  j d ƒ |  j	 | | ƒ |  j	 | j
 d g ƒ d  S(   Ns   Bad bad bad...i”  u   http://localhost:%s/weebleu   404 should raise URLErroru   /weeble(   u   start_serveru   urlopenu   portu   urllibu   erroru   URLErroru   readu   closeu   failu   assertEqualsu   requests(   u   selfu   expected_responseu   handleru   fu   data(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   test_404u  s    c             C   sa   d } |  j  d g  | f g ƒ } |  j d | j ƒ } |  j | | ƒ |  j | j d g ƒ d  S(   Ns   pycon 2008...iÈ   u   http://localhost:%s/bizarreu   /bizarre(   u   start_serveru   urlopenu   portu   assertEqualsu   requests(   u   selfu   expected_responseu   handleru   data(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   test_200„  s
    c             C   sg   d } |  j  d g  | f g ƒ } |  j d | j d ƒ } |  j | | ƒ |  j | j d d g ƒ d  S(   Ns   pycon 2008...iÈ   u   http://localhost:%s/bizarres   get=with_feelingu   /bizarre(   u   start_serveru   urlopenu   portu   assertEqualsu   requests(   u   selfu   expected_responseu   handleru   data(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   test_200_with_parameters‹  s    	c             C   s]   |  j  ƒ  } t j j d | j d i d d 6ƒ} t j j | ƒ |  j | j d d ƒ d  S(   Nu   http://localhost:%s/u   headersu   bytes=20-39u   Range(   u   start_serveru   urllibu   requestu   Requestu   portu   urlopenu   assertEqualu   headers_received(   u   selfu   handleru   req(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   test_sending_headers“  s
    c             C   s   |  j  ƒ  } t j j d | j ƒ } x+ d D]# } |  j t | | ƒ d | ƒ q, Wz |  j | j ƒ  d ƒ Wd  | j ƒ  Xd  S(	   Nu   http://localhost:%su   readu   closeu   infou   geturlu3   object returned from urlopen lacks the %s attributeu   calling 'read' failed(   u   readu   closeu   infou   geturl(	   u   start_serveru   urllibu   requestu   urlopenu   portu   assert_u   hasattru   readu   close(   u   selfu   handleru   open_urlu   attr(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu
   test_basicš  s     c          
   C   s   |  j  ƒ  } z^ t j j d | j ƒ } | j ƒ  } |  j t | t j	 j
 ƒ d ƒ |  j | j ƒ  d ƒ Wd  |  j j ƒ  Xd  S(   Nu   http://localhost:%suE   object returned by 'info' is not an instance of email.message.Messageu   plain(   u   start_serveru   urllibu   requestu   urlopenu   portu   infou   assert_u
   isinstanceu   emailu   messageu   Messageu   assertEqualu   get_content_subtypeu   serveru   stop(   u   selfu   handleru   open_urlu   info_obj(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu	   test_info¥  s    	c             C   sL   |  j  ƒ  } t j j d | j ƒ } | j ƒ  } |  j | d | j ƒ d  S(   Nu   http://localhost:%s(   u   start_serveru   urllibu   requestu   urlopenu   portu   geturlu   assertEqual(   u   selfu   handleru   open_urlu   url(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   test_geturl²  s    c             C   s   |  j  t t j j d ƒ d  S(   Nu   http://www.python.invalid./(   u   assertRaisesu   IOErroru   urllibu   requestu   urlopen(   u   self(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   test_bad_address¹  s    		N(   u   __name__u
   __module__u   __doc__u   setUpu   tearDownu   Noneu   urlopenu   start_serveru   test_redirectionu   test_404u   test_200u   test_200_with_parametersu   test_sending_headersu
   test_basicu	   test_infou   test_geturlu   test_bad_address(   u
   __locals__(    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   TestUrlopenG  s   
										u   TestUrlopenc               C   s   t  j t ƒ t  j t ƒ d  S(   N(   u   supportu   run_unittestu   ProxyAuthTestsu   TestUrlopen(    (    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu	   test_mainÆ  s    u   __main__(   u   emailu	   threadingu   urllib.parseu   urllibu   urllib.requestu   http.serveru   httpu   unittestu   hashlibu   testu   supportu   serveru
   HTTPServeru   LoopbackHttpServeru   Threadu   LoopbackHttpServerThreadu   DigestAuthHandleru   BaseHTTPRequestHandleru   FakeProxyHandleru   TestCaseu   ProxyAuthTestsu   GetRequestHandleru   TestUrlopenu	   test_mainu   __name__(    (    (    u7   /mit/python/lib/python3.0/test/test_urllib2_localnet.pyu   <module>   s"   zA	*	