
    X                    d   S SK Jr  S SKJr  S SKrS SKrS SKJr  S SKJ	r	  S SK
Jr  S SKJr  S SKJr  S SKJrJr  S SKrS S	KJr  S S
KJr  S SKJr  S SKJrJrJrJr  S SK J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(JrJ)r)  S SK*J+r+  S SK,J-r-  S SK.J/r/J0r0  SSK1J2r2J3r3   " S S\5      r4 " S S\5      r5 " S S5      r6g)    )annotationsN)HTTPException)Empty)error)SSLError)SHORT_TIMEOUT)Mockpatch)
DEFAULT_CA)Retry)HTTPConnection)HTTPConnectionPoolHTTPSConnectionPool_url_from_poolconnection_from_url)
ClosedPoolErrorEmptyPoolErrorFullPoolErrorHostChangedErrorLocationValueErrorMaxRetryErrorProtocolErrorReadTimeoutErrorr   TimeoutError)HTTPResponse)CertificateError)_DEFAULT_TIMEOUTTimeout   )MockChunkedEncodingResponseMockSockc                  0   ^  \ rS rSrSSU 4S jjjrSrU =r$ )HTTPUnixConnection+   c                J   > [         TU ]  S5        Xl        X l        S U l        g )N	localhost)super__init__unix_sockettimeoutsock)selfhostr*   kwargs	__class__s       ?platform/gsutil/third_party/urllib3/test/test_connectionpool.pyr(   HTTPUnixConnection.__init__,   s"    %	    )r+   r*   r)   )<   )r-   strr*   intr.   
typing.AnyreturnNone)__name__
__module____qualname____firstlineno__r(   __static_attributes____classcell__r/   s   @r0   r#   r#   +   s     r2   r#   c                      \ rS rSrSr\rSrg)HTTPUnixConnectionPool3   z	http+unix N)r9   r:   r;   r<   schemer#   ConnectionClsr=   rC   r2   r0   rA   rA   3   s    F&Mr2   rA   c                  >   \ rS rSrSr\R                  R                  S/ SQ5      S)S j5       r\R                  R                  S/ SQ5      S)S j5       r	\R                  R                  S/ SQ5      S)S	 j5       r
\R                  R                  S/ S
Q5      S)S j5       r\R                  R                  S/ SQ5      S)S j5       r\R                  R                  S/ SQ5      S)S j5       r\R                  R                  S/ SQ5      S)S j5       r\R                  R                  S/ SQ5      S)S j5       rS*S jr    S+S jrS*S jrS*S jrS*S jrS*S jrS*S jrS*S jrS*S jrS*S jrS*S jrS*S jrS*S  jrS*S! jrS*S" jrS*S# jrS*S$ jr S*S% jr!S*S& jr"S'r#g(),TestConnectionPool8   z
Tests in this suite should exercise the ConnectionPool functionality
without actually making any network requests or connections.
za, b))http://google.com//)rI   rI   )rI   http://google.com)rI   http://google.com/abra/cadabra)zhttp://google.com:42/z http://google.com:42/abracadabra)http://google.com:80/zhttp://google.com/abracadabra)rI    http://google.com:80/abracadabra)zhttps://google.com:443/https://google.com/abracadabra)https://google.com/"https://google.com:443/abracadabra)z)http://[2607:f8b0:4005:805::200e%25eth0]/z'http://[2607:f8b0:4005:805::200e%eth0]/)z.https://[2607:f8b0:4005:805::200e%25eth0]:443/z,https://[2607:f8b0:4005:805::200e%eth0]:443/)zhttp://[::1]/zhttp://[::1])z2http://[2001:558:fc00:200:f816:3eff:fef9:b954%lo]/z3http://[2001:558:fc00:200:f816:3eff:fef9:b954%25lo]c                    [        U5       nUR                  U5      (       d   e S S S 5        g ! , (       d  f       g = fNr   is_same_hostr,   abcs       r0   test_same_host!TestConnectionPool.test_same_host>   s/    : !#q>>!$$$$ $##   /
=))rP   rI   )rI   rP   )zhttp://yahoo.com/rI   )http://google.com:42rO   )rK   https://google.net/)r]   rK   )zhttps://google.com:42https://google.com)http://google.com:443rK   )https://google.com:80r_   )r`   r_   )ra   rK   )zhttps://google.com:443rK   )http://google.com:80r_   )zhttp://[dead::beef]zhttps://[dead::beef%en5]/c                    [        U5       nUR                  U5      (       a   e S S S 5        [        U5       nUR                  U5      (       a   e S S S 5        g ! , (       d  f       N<= f! , (       d  f       g = frS   rT   rV   s       r0   test_not_same_host%TestConnectionPool.test_not_same_host^   si    . !#q~~a((((( $ !#q~~a((((( $# $# $#   AA-
A*-
A;)
google.comrJ   rh   rI   )rh   rK   )rh   rL   )rh   rN   c                    [        U5       nUR                  U5      (       d   e S S S 5        g ! , (       d  f       g = frS   r   rU   rV   s       r0   test_same_host_no_port_http.TestConnectionPool.test_same_host_no_port_http{   s/      "a>>!$$$$ #""r\   )rg   rh   rP   )rh   r_   )rh   zhttps://google.com/abra/cadabra)rh   rQ   c                    [        U5       nUR                  U5      (       d   e S S S 5        g ! , (       d  f       g = frS   r   rU   rV   s       r0   test_same_host_no_port_https/TestConnectionPool.test_same_host_no_port_https   s/     !#q>>!$$$$ $##r\   )rn   )	yahoo.comrI   rh   r^   )rh   zhttp://google.com./c                    [        U5       nUR                  U5      (       a   e S S S 5        [        U5       nUR                  U5      (       a   e S S S 5        g ! , (       d  f       N<= f! , (       d  f       g = frS   rk   rV   s       r0   test_not_same_host_no_port_http2TestConnectionPool.test_not_same_host_no_port_http   si      "a~~a((((( #  "a~~a((((( #" #" #"rf   )ri   )rs   rP   rt   )rh   zhttps://google.com./c                    [        U5       nUR                  U5      (       a   e S S S 5        [        U5       nUR                  U5      (       a   e S S S 5        g ! , (       d  f       N<= f! , (       d  f       g = frS   rp   rV   s       r0    test_not_same_host_no_port_https3TestConnectionPool.test_not_same_host_no_port_https   si     !#q~~a((((( $ !#q~~a((((( $# $# $#rf   ))%2Fvar%2Frun%2Fdocker.sockz&http+unix://%2Fvar%2Frun%2Fdocker.sock)r{   z'http+unix://%2Fvar%2Frun%2Fdocker.sock/)r{   z2http+unix://%2Fvar%2Frun%2Fdocker.sock/abracadabra)%2Ftmp%2FTEST.sockhttp+unix://%2Ftmp%2FTEST.sock)r|   http+unix://%2Ftmp%2FTEST.sock/)r|   *http+unix://%2Ftmp%2FTEST.sock/abracadabrac                    [        U5       nUR                  U5      (       d   e S S S 5        g ! , (       d  f       g = frS   rA   rU   rV   s       r0   test_same_host_custom_protocol1TestConnectionPool.test_same_host_custom_protocol   s/     $A&!>>!$$$$ '&&r\   ))%2Ftmp%2Ftest.sockr}   )r   r~   )r   r   )r{   r}   c                    [        U5       nUR                  U5      (       a   e S S S 5        g ! , (       d  f       g = frS   r   rV   s       r0   "test_not_same_host_custom_protocol5TestConnectionPool.test_not_same_host_custom_protocol   s2     $A&!~~a((((( '&&r\   c                   [        SSSS9 nUR                  [        S9  [        R                  " [
        5         UR                  [        S9  S S S 5        [        R                  " [
        5         UR                  SS[        S9  S S S 5        UR                  S:X  d   e S S S 5        g ! , (       d  f       Nb= f! , (       d  f       N;= f! , (       d  f       g = f)	Nr&   r   Tr-   maxsizeblockr*   GETrJ   )pool_timeout)r   	_get_connr   pytestraisesr   requestnum_connectionsr,   pools     r0   test_max_connections'TestConnectionPool.test_max_connections   s    [!4HDNN=N1~.}5 / ~.UCmD / ''1,,, IH /. /. IHs:   .CB*"C0B;C*
B8	4C;
C		C
Cc                   [        SSSS9 nUR                  5       nUR                  5       n[        R                  " US5       n[        R                  " US5       nUR	                  U5        UR	                  U5        SSS5        SSS5        WR
                  SL d   eWR
                  SL d   eX2R                  5       :X  d   eXBR                  5       :w  d   eUR                  S:X  d   eS	UR                  ;   d   eS
UR                  ;   d   e SSS5        g! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g= f)zs
If maxsize = n and we _put_conn n + 1 conns, the n + 1th conn will
get closed and will not get added to the pool.
r&   r   Fr   closeNT   z.Connection pool is full, discarding connectionzConnection pool size: 1)r   r   r
   object	_put_conncalledr   text)r,   caplogr   conn1conn2conn1_closeconn2_closes          r0   +test_put_conn_when_pool_is_full_nonblocking>TestConnectionPool.test_put_conn_when_pool_is_full_nonblocking   s     [!5ITNN$E NN$EeW-\\%1[NN5)NN5) 2 .
 %%...%%---NN,,,,NN,,,,''1,,,Cv{{RRR,;;;' JI 21 .- JIs<   8D=D,#D?D,B
D=
D)%D,,
D:	6D==
Ec           	     n   [        SSSS9 nUR                  5       nUR                  5       n[        R                  " US5       n[        R                  " US5       nUR                  U5        [        R                  " [        5         UR                  U5        SSS5        SSS5        SSS5        WR                  SL d   eWR                  SL d   eX!R                  5       :X  d   e SSS5        g! , (       d  f       N_= f! , (       d  f       Nh= f! , (       d  f       Nq= f! , (       d  f       g= f)z[
If maxsize = n and we _put_conn n + 1 conns, the n + 1th conn will
cause a FullPoolError.
r&   r   Tr   r   NF)
r   r   	_new_connr
   r   r   r   r   r   r   )r,   r   r   r   r   r   s         r0   (test_put_conn_when_pool_is_full_blocking;TestConnectionPool.test_put_conn_when_pool_is_full_blocking  s    
  [!4HDNN$ENN$EeW-\\%1[NN5)}5u- 6 2 . %%...%%---NN,,,, IH 65 21 .-	 IHsS   8D&D,DC3	D"D*?D&3
D=D
DD
D#	D&&
D4c                T   [        SSSS9 nUR                  5       n[        R                  " US5       nUR	                  5         UR
                  b   eUR                  U5        S S S 5        WR                  SL d   e S S S 5        g ! , (       d  f       N)= f! , (       d  f       g = f)Nr&   r   Tr   r   )r   r   r
   r   r   r   r   r   )r,   r   r   r   s       r0   test_put_conn_closed_pool,TestConnectionPool.test_put_conn_closed_pool  s    [!4HDNN$EeW-

yy((( u% . %%--- IH-- IHs"   (B1B%B
B	B
B'c                H    [        [        [        SS9S5      5      S:X  d   eg )Nr&   r-   Test.z6HTTPConnectionPool(host='localhost', port=None): Test.)r4   r   r   r,   s    r0   test_exception_str%TestConnectionPool.test_exception_str&  s+    1{CWMNGH	
Hr2   c                    [        [        [        SS9SS 5      5      S:X  d   e[        S5      n[        [        [        SS9SU5      5      SU-  :X  d   eg )Nr&   r   r   zfHTTPConnectionPool(host='localhost', port=None): Max retries exceeded with url: Test. (Caused by None)TestzdHTTPConnectionPool(host='localhost', port=None): Max retries exceeded with url: Test. (Caused by %r))r4   r   r   SocketError)r,   errs     r0   test_retry_exception_str+TestConnectionPool.test_retry_exception_str,  sq    0kBGTRSDD	
D
 &!
 0kBGSQR"##	
#r2   c           
     8  ^^ Sm[        STSS9 m S       SUU4S jjjnU" [        [        [        5        U" [        [        [        5        [
        R                  " TS[        5       S9   [        R                  " [        5         TR                  SS	S[        S
9  S S S 5        S S S 5        TR                  c   eTR                  R                  5       T:X  d   e S S S 5        g ! , (       d  f       NO= f! , (       d  f       NX= f! , (       d  f       g = f)Nr   r&   Tr   c                  > [         R                  " TSU " 5       S9   [        R                  " U5       nTR	                  SS5        S S S 5        S S S 5        Ub'  [        WR                  R                  U5      (       d   eTR                  c   eTR                  R                  5       T:X  d   eg ! , (       d  f       Np= f! , (       d  f       Ny= f)N_make_requestside_effectr   rJ   )
r
   r   r   r   r   
isinstancevaluereasonr   qsize)	exceptionexpectr   excinfo	POOL_SIZEr   s       r0   _test0TestConnectionPool.test_pool_size.<locals>._testD  s    
 \\$Y[Qv.'UC0 / R %%gmm&:&:FCCCCyy,,,yy(I555 /. RQs"   CB1C1
B?	;C
Cr   r   r   rJ   )retriesr   rS   )r   type[BaseException]r   r   r   ztype[BaseException] | Noner7   r8   )r   BaseSSLErrorr   r   r   r
   r   r   r   r   r   r   r   r   )r,   r   r   r   s     @@r0   test_pool_size!TestConnectionPool.test_pool_size>  s    	it

 6:6.6+6 36 	6 6 ,x8"M8< dOQ]]=1LLQ]LS 2 R 99(((99??$	111=
 
6 21 RQ5
 
s<   AD.C:	C) C:(7D)
C73C::
D	D
Dc           	        [        SSSS9 n[        R                  " US[        US5      S9   [        R                  " US[	        S	5      S9   [
        R                  " [        5         UR                  S
S5        SSS5        SSS5        SSS5        SSS5        g! , (       d  f       N'= f! , (       d  f       N0= f! , (       d  f       N9= f! , (       d  f       g= f)z6Do not put None back in the pool if the pool was emptyr&   r   Tr   r   zPool is emptyr   r   zUnexpected _put_connr   rJ   N)r   r
   r   r   AssertionErrorr   r   r   r   s     r0   test_empty_does_not_put_conn/TestConnectionPool.test_empty_does_not_put_conn`  s      [!4HDk~dO/T \\ ./E F
  ~6UC0 7 IH 76   IHsR   !C B>B-(B	;B-B>C
B*&B--
B;7B>>
C	C
Cc                    [        S5       n[        R                  " [        5         UR	                  SSSS9  S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nrb   r   zhttp://yahoo.com:80T)assert_same_host)r   r   r   r   r   )r,   rY   s     r0   test_assert_same_host(TestConnectionPool.test_assert_same_hosto  sJ     !78A/0		%!6	N 1 9800 98s!   AA
A

A	A
A)c                   [        S5      nUR                  5       nUR                  5       nUR                  5       nUR                  U5        UR                  U5        UR                  nUR	                  5         UR                  b   e[
        R                  " [        5         UR                  5         S S S 5        UR                  U5        [
        R                  " [        5         UR                  5         S S S 5        [
        R                  " [        5         Uc   eUR                  SS9  S S S 5        g ! , (       d  f       N= f! , (       d  f       NW= f! , (       d  f       g = fNrb   F)r   )
r   r   r   r   r   r   r   r   r   getr,   r   r   r   conn3old_pool_queues         r0   test_pool_close"TestConnectionPool.test_pool_closet  s    "#9:    uu

yy   ]]?+NN , 	u]]?+NN , ]]5!!---U+ "! ,+
 ,+ "!s$   #D8'E	E8
E	
E
E(c                J   [        S5      nUR                  5       nUR                  5       nUR                  U5        UR                  U5        UR                  5         UR                  b   e UR                  5         g ! [
         a    [        R                  " S5         g f = f)Nrb   z<Pool of the ConnectionPool is None and has no attribute get.)r   r   r   r   r   AttributeErrorr   fail)r,   r   r   r   s       r0   test_pool_close_twice(TestConnectionPool.test_pool_close_twice  s    "#9:   uu

yy   	XJJL 	XKKVW	Xs   .A? ? B"!B"c                X   [        SS9 nUR                  5       nUR                  [        :X  d   eUR                  R                  [
        :X  d   eUR                  R                  [        :X  d   eUR                  R                  [        :X  d   eUR                  R                  b   e[        S[        S9nUR                  R                  [        :X  d   eUR                  R                  [        :X  d   eUR                  R                  b   e S S S 5        g ! , (       d  f       g = f)Nr&   r   )r-   r*   )r   r   r/   r   r*   r   _readr   _connecttotalr   r,   r   conns      r0   test_pool_timeouts%TestConnectionPool.test_pool_timeouts  s    [1T>>#D>>^333<<))W444<<%%)9999<<((,<<<<<<%%---%;ND<<%%666<<((M999<<%%--- 211s   DD
D)c                    [         R                  " [        5         [        S 5        S S S 5        g ! , (       d  f       g = frS   )r   r   r   r   r   s    r0   test_no_hostTestConnectionPool.test_no_host  s#    ]]-.t$ /..s   0
>c                   [        S5       nUR                  5       nUR                  5       nUR                  5       nUR                  U5        UR                  U5        UR                  nS S S 5        WR                  b   e[        R
                  " [        5         UR                  5         S S S 5        UR                  W5        [        R
                  " [        5         UR                  5         S S S 5        [        R
                  " [        5         Wc   eUR                  SS9  S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nh= f! , (       d  f       g = fr   )	r   r   r   r   r   r   r   r   r   r   s         r0   test_contextmanager&TestConnectionPool.test_contextmanager  s     !78DNN$ENN$ENN$ENN5!NN5!!YYN 9 yy   ]]?+NN , 	u]]?+NN ,]]5!!---U+ "!# 98 ,+ ,+!!s0   AD1E EE$1
D?
E
E!$
E2c                |    [        S5       nSnSU 3[        X5      :X  d   e S S S 5        g ! , (       d  f       g = f)Nrb   zpath?query=foorM   )r   r   )r,   r   paths      r0   test_url_from_pool%TestConnectionPool.test_url_from_pool  s8     !78D#D*4&1^D5OOOO 988s   -
;c                    [        S[        S9 nUR                  5       nUR                  [        R
                  :X  d   e S S S 5        g ! , (       d  f       g = f)Nra   )ca_certs)r   r   r   	cert_reqssslCERT_REQUIREDr   s      r0   #test_ca_certs_default_cert_required6TestConnectionPool.test_ca_certs_default_cert_required  sA     !8:NRV>>#D>>S%6%6666 ONNs   1A


Ac                  ^  " S S[         5      mSU4S jjn[        S5       n[        R                  " USU5         UR                  c   eUR                  R                  5       n UR                  SSS	S
9  SSS5        UR                  R                  5       nWU:X  d   e SSS5        g! T a     N<f = f! , (       d  f       NF= f! , (       d  f       g= f)z
This test validates that we clean up properly even on exceptions that
we'd not otherwise catch, i.e. those that inherit from BaseException
like KeyboardInterrupt or gevent.Timeout. See #805 for more details.
c                      \ rS rSrSrg)LTestConnectionPool.test_cleanup_on_extreme_connection_error.<locals>.RealBadi  rC   N)r9   r:   r;   r<   r=   rC   r2   r0   RealBadr     s    r2   r   c                    > T" 5       erS   rC   )argsr.   r   s     r0   kaboomKTestConnectionPool.test_cleanup_on_extreme_connection_error.<locals>.kaboom  s
    )Or2   zhttp://localhost:80r   Nr   rJ   F)release_conn)r   r6   r.   r6   r7   r8   )BaseExceptionr   r
   r   r   r   urlopen)r,   r  rY   initial_pool_sizenew_pool_sizer   s        @r0   (test_cleanup_on_extreme_connection_error;TestConnectionPool.test_cleanup_on_extreme_connection_error  s    	m 		 !!671a&9vv)))$%FFLLN! IIeSuI= : FFLLNM$555 87   :9 87s@   C
*B9(B-9*C
-B63B95B66B99
C	C


Cc                   ^  " S S5      mSU4S jjnU" [         5        U" [        5        U" [        5        U" [        5        g)a*  For successful ```urlopen(release_conn=False)```,
the connection isn't released, even after a retry.

This is a regression test for issue #651 [1], where the connection
would be released if the initial request failed, even if a retry
succeeded.

[1] <https://github.com/urllib3/urllib3/issues/651>
c                  b   ^  \ rS rSrSr      SU 4S jjr              SS jrSrU =r$ )yTestConnectionPool.test_release_conn_param_is_respected_after_http_error_retry.<locals>._raise_once_make_request_functioni  zCallable that can mimic `_make_request()`.

Raises the given exception on its first call, but returns a
successful response on subsequent calls.
c                :   > [         TU ]  5         Xl        X l        g rS   )r'   r(   _ex_pool)r,   exr   r/   s      r0   r(   ڂTestConnectionPool.test_release_conn_param_is_respected_after_http_error_retry.<locals>._raise_once_make_request_function.__init__   s      "79!
r2   c                  U R                   (       a  U R                   S sopl         U" 5       e[        R                  " [        5      n[	        / SQ5      Ul        [        R                  " 5       =Ul        Ul        UR                  S5      n	[        UUR                  UR                  UR                  UR                  UUUUSU	U R                  S9n
U
$ )N)   f   or  response_connF)bodyheadersstatusversionr   original_responser   request_methodrequest_urlpreload_content
connectionr   )r  httplibr   r!   r    fpHTTPMessager  msgr   r  r  r   r  )r,   r   methodurlr   r   r.   r  httplib_responser  responses              r0   __call__ڂTestConnectionPool.test_release_conn_param_is_respected_after_http_error_retry.<locals>._raise_once_make_request_function.__call__  s     88#'88TLB$J#*#7#7#A &ABT&U #BIBUBUBWW (+;+?7=zz/7R'),44+22,44+22&6##) #$),  r2   )r  r  )r  r   r   r   r7   r8   )r   r   r#  r4   r$  r4   r   r6   r   r   r.   r6   r7   r   )	r9   r:   r;   r<   __doc__r(   r'  r=   r>   r?   s   @r0   !_raise_once_make_request_functionr    ss    "-"5G""  $      	  
 "      %        r2   r*  c                  > [        SSSS9 n[        R                  " UST" X5      5         UR                  SSSSSSS	9nS S S 5        UR                  c   eUR                  R                  5       S
:X  d   eUR                  S:X  d   eWR                  c   eUR                  5         UR                  R                  5       S:X  d   eUR                  b   e S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr&   r   Tr   r   r   rJ   F)r   r  r  chunkedr      )	r   r
   r   r  r   r   r   r  r  )r   r   r&  r*  s      r0   r   ]TestConnectionPool.test_release_conn_param_is_respected_after_http_error_retry.<locals>._test)  s    #atLPT \\#5iF
  $|| !%*(- $  ,  H yy,,,yy(A---++q000**666%%'yy(A---**2221 ML 	 MLs#   C3C"BC3"
C0	,C33
DN)r   r   r7   r8   )r   r   r   r   )r,   r   r*  s     @r0   ;test_release_conn_param_is_respected_after_http_error_retryNTestConnectionPool.test_release_conn_param_is_respected_after_http_error_retry  s5    .	  .	 `	38 	lmkmr2   c           
        [        SSS9 n[        [        S9nSUl        [        R
                  " [        SS5         [        SSS5      n[        R                  " [        5         UR                  USSUS	9  S S S 5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g = f)
Nr&   r   )r-   r   )specFread_timeoutr    r   )r   r	   r   	is_closedr
   r   r   r   r   r   r   )r,   r   r   r*   s       r0   8test_read_timeout_0_does_not_raise_bad_status_line_errorKTestConnectionPool.test_read_timeout_0_does_not_raise_bad_status_line_errorJ  s    [!<^,D"DNg~q9!!Q*]]#34&&tRW&E 5 :	 =< 54 :9	 =<s:   1B2(B!$B7B!?B2
BB!!
B/	+B22
C rC   N)rW   r4   rX   r4   r7   r8   )r7   r8   )r   zpytest.LogCaptureFixturer7   r8   )$r9   r:   r;   r<   r)  r   markparametrizerZ   rd   rl   rq   rv   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r/  r6  r=   rC   r2   r0   rG   rG   8   s   
 [[	
8%98% [[	
,)-,) [[	

%
% [[	

%
% [[	
)) [[	
)) [[
	
%% [[	
))
-<.<	<8-(.

$ 2D1O
,6X".%,,P
7
68ZxFr2   rG   )7
__future__r   http.clientclientr  r   typingr   queuer   socketr   r   r   r   testr   unittest.mockr	   r
   r   dummyserver.socketserverr   urllib3r   urllib3.connectionr   urllib3.connectionpoolr   r   r   r   urllib3.exceptionsr   r   r   r   r   r   r   r   r   urllib3.responser   urllib3.util.ssl_match_hostnamer   urllib3.util.timeoutr   r   test_responser    r!   r#   rA   rG   rC   r2   r0   <module>rK     s}    "  
  %  ' (  %  /  -    * < : @ '/ '
ZF ZFr2   