
    {                       d dl mZ d dlZd dlm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 dlmZmZ d dlmZ d dlZd dlmZ d d	lmZmZmZmZmZmZm Z m!Z! d d
l"m#Z#m$Z$m%Z%m&Z& d dl'm(Z( d dl)m*Z*m+Z+  G d d      Z, ed      Z-ej\                  d#d       Z/ G d d      Z0 G d d      Z1 G d d      Z2 G d de2      Z3 G d de2      Z4 G d de2      Z5 G d de2      Z6 G d d e2      Z7 G d! d"      Z8y)$    )annotationsN)	b64decode)IncompleteRead)BufferedReaderBytesIOTextIOWrapper)
onlyBrotlionlyZstd)mock)HTTPHeaderDict)BodyNotHttplibCompatibleDecodeErrorr   InvalidChunkLengthInvalidHeaderProtocolErrorResponseNotChunkedSSLError)BaseHTTPResponseBytesQueueBufferHTTPResponsebrotli)is_fp_closed)RequestHistoryRetryc                     e Zd ZddZddZddZddZddZddZe	j                  j                  dd d	 fd
      e	j                  j                  d      	 	 	 	 dd              Ze	j                  j                  d      dd       Zy)TestBytesQueueBufferc                p   t               }t        |      dk(  sJ t        j                  t        d      5  |j                  d      sJ 	 d d d        |j                  d      dk(  sJ |j                  d       t        j                  t        d      5  |j                  d       d d d        |j                  d	      d
k(  sJ |j                  d      dk(  sJ t        j                  t        d      5  |j                  d      sJ 	 d d d        y # 1 sw Y   xY w# 1 sw Y   zxY w# 1 sw Y   y xY w)Nr   zbuffer is emptymatch
          foozn should be > 0      f      oo)r   lenpytestraisesRuntimeErrorgetput
ValueErrorselfbuffers     9platform/gsutil/third_party/urllib3/test/test_response.pytest_single_chunkz&TestBytesQueueBuffer.test_single_chunk'   s    !#6{a]]</@A::b>!> B zz!}###

6]]:->?JJrN @ zz!}$$$zz!}%%%]]</@A::b>!> BA BA @?
 BAs#   DD 6D,D D),D5c                f    t               }|j                  d       |j                  d      dk(  sJ y )Nr"   d   )r   r-   r,   r/   s     r2   test_read_too_muchz'TestBytesQueueBuffer.test_read_too_much8   s,    !#

6zz#&(((r!   c                   t               }|j                  d       |j                  d       |j                  d       t        |      dk(  sJ |j                  d      dk(  sJ t        |      dk(  sJ |j                  d      d	k(  sJ t        |      dk(  sJ |j                  d      d
k(  sJ t        |      dk(  sJ y )Nr"      bar   baz	   r$   r%         s   oobas   rbazr   )r   r-   r(   r,   r/   s     r2   test_multiple_chunksz)TestBytesQueueBuffer.test_multiple_chunks=   s    !#

6

6

66{azz!}$$$6{azz!}'''6{azz!}'''6{ar!   c                b    t               }|j                         dk(  sJ t        |      dk(  sJ y )Nr!   r   )r   get_allr(   r0   qs     r2   test_get_all_emptyz'TestBytesQueueBuffer.test_get_all_emptyK   s.    yy{c!!!1v{{r!   c                    t               }|j                  d       |j                         dk(  sJ t        |      dk(  sJ y )N   ar   r   r-   r?   r(   r@   s     r2   test_get_all_singlez(TestBytesQueueBuffer.test_get_all_singleP   s9    	dyy{d"""1v{{r!   c                    t               }|j                  d       |j                  d       |j                  d       |j                         dk(  sJ t        |      dk(  sJ y )NrD      b   cs   abcr   rE   r@   s     r2   test_get_all_manyz&TestBytesQueueBuffer.test_get_all_manyV   sO    	d	d	dyy{f$$$1v{{r!   get_funcc                6    | j                  t        |             S N)r,   r(   bs    r2   <lambda>zTestBytesQueueBuffer.<lambda>`   s    155Q=r!   c                "    | j                         S rM   )r?   rN   s    r2   rP   zTestBytesQueueBuffer.<lambda>`   s
    AIIKr!   )r,   r?   )idsz12.5 MBc                    t               }t        d      D ]  }|j                  t        d              t	         ||            dk(  sJ y )Nr    i      )r   ranger-   bytesr(   )r0   rK   r1   is       r2   test_memory_usagez&TestBytesQueueBuffer.test_memory_usage^   sD     "#rAJJuU|$  8F#$
222r!   z10.01 MBc                x    t               }t        d      }|j                  |       |j                         |u sJ y )NrT   )r   rV   r-   r?   )r0   r1   chunks      r2   &test_get_all_memory_usage_single_chunkz;TestBytesQueueBuffer.test_get_all_memory_usage_single_chunko   s5    !#j!

5~~5(((r!   NreturnNone)rK   z(typing.Callable[[BytesQueueBuffer], str]r]   r^   )__name__
__module____qualname__r3   r6   r=   rB   rF   rJ   r)   markparametrizelimit_memoryrX   r[    r!   r2   r   r   &   s    "")
 
 [[	 "78  
 [[i(	3@	3		3 )	3 [[j)) *)r!   r   st  eJwFweuaoQAAANDfineQhiKLUiaiCzvuTEmNNlJGiL5QhnGpZ99z8luQfe1AHoMioB+QSWHQu/L+
lzd7W5CipqYmeVTBjdgSATdg4l4Z2zhikbuF+EKn69Q0DTpdmNJz8S33odfJoVEexw/l2SS9nFdi
pis7KOwXzfSqarSo9uJYgbDGrs1VNnQpT9f8zAorhYCEZronZQF9DuDFfNK3Hecc+WHLnZLQptwk
nufw8S9I43sEwxsT71BiqedHo0QeIrFE01F/4atVFXuJs2yxIOak3bvtXjUKAA6OKnQJ/nNvDGKZ
Khe5TF36JbnKVjdcL1EUNpwrWVfQpFYJ/WWm2b74qNeSZeQv5/xBhRdOmKTJFYgO96PwrHBlsnLn
a3l0LwJsloWpMbzByU5WLbRE6X5INFqjQOtIwYz5BAlhkn+kVqJvWM5vBlfrwP42ifonM5yF4ciJ
auHVks62997mNGOsM7WXNG3P98dBHPo2NhbTvHleL0BI5dus2JY81MUOnK3SGWLH8HeWPa1t5KcW
S5moAj5HexY/g/F8TctpxwsvyZp38dXeLDjSQvEQIkF7XR3YXbeZgKk3V34KGCPOAeeuQDIgyVhV
nP4HF2uWHA==c               #  \   K   t        j                          } |  | j                          y wrM   )socketclose)ss    r2   sockrj      s     A
GGGIs   *,c                      e Zd ZddZddZy)TestLegacyResponsec                    ddi}t        |      }t        j                  t        d      5  |j	                         t        |      k(  sJ 	 d d d        y # 1 sw Y   y xY w)Nhostexample.comheadersz)HTTPResponse.getheaders\(\) is deprecatedr   )r   r)   warnsDeprecationWarning
getheadersr   r0   rq   rs      r2   test_getheadersz"TestLegacyResponse.test_getheaders   sS    =))\\>
 <<>^G%<<<<	
 
 
s   AAc                    ddi}t        |      }t        j                  t        d      5  |j	                  d      dk(  sJ 	 d d d        y # 1 sw Y   y xY w)Nrn   ro   rp   z(HTTPResponse.getheader\(\) is deprecatedr   )r   r)   rr   rs   	getheaderru   s      r2   test_getheaderz!TestLegacyResponse.test_getheader   sQ    =))\\=
 ;;v&-777	
 
 
s   AANr\   )r_   r`   ra   rw   rz   re   r!   r2   rl   rl      s    =8r!   rl   c            
         e Zd ZdzdZdzdZdzdZdzdZdzdZdzdZdzdZ	dzdZ
ej                  j                  d	d
      d{d       ZdzdZej                  j                  dd
      	 	 	 	 d|d       ZdzdZdzdZdzdZdzdZdzdZdzdZej                  j                  dddg      d}d       ZdzdZdzdZdzdZdzdZ e       dzd       Z e       dzd       Z e       dzd       Z e        dzd        Z! e        dzd!       Z" e        dzd"       Z#d#d$gZ$ e        ej                  j                  d%e$      d~d&              Z% e        ej                  j                  d%e$      d~d'              Z& e        ej                  j                  d%e$      d~d(              Z' e        ej                  j                  d%e$      d~d)              Z( e        ej                  j                  d%e$      d~d*              Z)dzd+Z*dzd,Z+dzd-Z,dzd.Z-dzd/Z.ej                  j_                  d0      dzd1       Z0dd2Z1dd3Z2ej                  j                  d4d5      ej                  j                  d6d7      	 	 	 	 	 	 	 	 dd8              Z3ej                  j                  d6d7      	 	 	 	 	 	 dd9       Z4ej                  j                  d6d7      	 	 	 	 	 	 dd:       Z5dzd;Z6dzd<Z7dzd=Z8dzd>Z9dzd?Z:dzd@Z;dzdAZ<dzdBZ=dzdCZ>dzdDZ?dzdEZ@dzdFZAdzdGZBdzdHZCdzdIZDej                  j                  dJg dK      ej                  j                  dL      	 	 	 	 	 	 	 	 ddM              ZFej                  j                  dJg dK      ej                  j                  dN      	 	 	 	 	 	 	 	 ddO              ZGdzdPZHdzdQZIdzdRZJdzdSZKdzdTZLdzdUZMdzdVZNdzdWZOdzdXZPdzdYZQej                  j                  dZd
      	 	 	 	 dd[       ZRdzd\ZSdzd]ZTdzd^ZUdzd_ZVdzd`ZWdzdaZXdzdbZYdzdcZZdzddZ[dzdeZ\dzdfZ]dzdgZ^dzdhZ_dzdiZ`ej                  j                  djdkgdlg fdmdmgfdng dofdpdqdrgfdsg dtfg      ddu       ZadzdvZbdzdwZcdzdxZdyy)TestResponsec                    t        d      }|j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ y Nr"   )r   _bodydatar0   rv   s     r2   test_cache_contentzTestResponse.test_cache_content   sB     ww&   vvww&   r!   c                    t        d      }t        |d      }|j                  rJ |j                  dk(  sJ |j                  dk(  sJ |j                  dk(  sJ y Nr"   Fpreload_content)r   r   r   r   r0   fprv   s      r2    test_cache_content_preload_falsez-TestResponse.test_cache_content_preload_false   sY    V_U377{vvww&   vvr!   c                4    t               }|j                  J y rM   r   r   r   s     r2   test_defaultzTestResponse.test_default   s    Nvv~~r!   c                6    t        d       }|j                  J y rM   r   r   s     r2   	test_nonezTestResponse.test_none   s    vv~~r!   c                    t        d      }t        |d      }|j                         t        d      k(  sJ |j                  dk(  sJ y )Nr"   Tr   )r   r   tellr(   r   r   s      r2   test_preloadzTestResponse.test_preload   sA    V_T2wwyCK'''vvr!   c                    t        d      }t        |d      }|j                         dk(  sJ |j                  dk(  sJ |j                         t	        d      k(  sJ y )Nr"   Fr   r   )r   r   r   r   r(   r   s      r2   test_no_preloadzTestResponse.test_no_preload   sS    V_U3wwyA~~vvwwyCK'''r!   c                    t        d      }t        j                  t              5  t	        |ddi       d d d        y # 1 sw Y   y xY w)Ns
             content-encodingdeflaterp   r   r)   r*   r   r   r0   r   s     r2   test_decode_bad_dataz!TestResponse.test_decode_bad_data   s4    \"]];'&8)%DE (''	   >Ac                   t        d      }t        |d      }|j                  d      dk(  sJ |j                  d      dk(  sJ |j                  d      d	k(  sJ |j                         dk(  sJ |j                         dk(  sJ y )
Nr"   Fr   r   r!   r$   r%   r&   r'   r   r   readr   s      r2   test_reference_readz TestResponse.test_reference_read   s}    V_U3vvayCvvayD   vvayE!!!vvx3vvx3r!   	read_args)re   rM   r#   c                \    t        d      }t        |d      } |j                  | dk(  sJ y r   r   )r0   r   r   rv   s       r2   test_reference_read_until_eofz*TestResponse.test_reference_read_until_eof   s0    V_U3qvvy!V+++r!   c                   t        d      }t        |d      }|j                  d      dk(  sJ |j                  d      dk(  sJ |j                  d      d	k(  sJ |j                         d
k(  sJ |j                         dk(  sJ y )N   foobarFr   r   r!   r$   r%   r&   r'   r8   r   r   read1r   s      r2   test_reference_read1z!TestResponse.test_reference_read1   s    YU3wwqzS   wwqzT!!!wwqzU"""wwyF"""wwyCr!   
read1_argsc                \    t        d      }t        |d      } |j                  | dk(  sJ y r   r   )r0   r   r   rv   s       r2   "test_reference_read1_without_limitz/TestResponse.test_reference_read1_without_limit   s2     V_U3qww
#v---r!   c                   t        d      }t        |dd      }|j                  d      dk(  sJ |j                  d      dk(  sJ |j                  d      d	k(  sJ |j                         d
k(  sJ |j                         dk(  sJ y )Nr   Fr   decode_contentr   r!   r$   r%   r&   r'   r8   r   r   s      r2   test_reference_read1_nodecodez*TestResponse.test_reference_read1_nodecode   s    YU5IwwqzS   wwqzT!!!wwqzU"""wwyF"""wwyCr!   c                   t        j                  d      }t        |      }t        |ddid      }|j	                  d      dk(  sJ |j	                  d      d	k(  sJ |j	                         d
k(  sJ |j	                         dk(  sJ y )Nr   r   r   Frq   r   r$   r%   r&   r'   r8   r!   )zlibcompressr   r   r   r0   r   r   rv   s       r2   test_decoding_read1z TestResponse.test_decoding_read1   s    }}Y'T]+Y7
 wwqzT!!!wwqzU"""wwyF"""wwyCr!   c                    t        j                  d      }t        |      }t        |ddi      }|j                  dk(  sJ y )Nr"   r   r   rp   r   r   r   r   r   r   s       r2   test_decode_deflatez TestResponse.test_decode_deflate  =    }}V$T]&8)%DEvvr!   c                    t        j                  d      }t        |      }t        |ddi      }|j                  dk(  sJ y )Nr"   r   DeFlAtErp   r   r   s       r2   #test_decode_deflate_case_insensitvez0TestResponse.test_decode_deflate_case_insensitve  r   r!   c                   t        j                  d      }t        |      }t        |ddid      }|j	                  d      dk(  sJ |j	                  d      d	k(  sJ |j	                         d
k(  sJ |j	                         d
k(  sJ y )Nr"   r   r   Fr   r$   r%   r&   r'   r!   r   r   r   r   r   r   s       r2   test_chunked_decoding_deflatez*TestResponse.test_chunked_decoding_deflate  s    }}V$T]+Y7
 vvayD   vvayE!!!vvx3vvx3r!   c                   t        j                  dt         j                  t         j                         }|j	                  d      }||j                         z  }t        |      }t        |ddid      }|j                  d      dk(  sJ |j                  d	      d
k(  sJ |j                         dk(  sJ |j                         dk(  sJ y )N   r"   r   r   Fr   r$   r%   r&   r'   r!   	r   compressobjDEFLATED	MAX_WBITSr   flushr   r   r   r0   r   r   r   rv   s        r2   test_chunked_decoding_deflate2z+TestResponse.test_chunked_decoding_deflate2(  s    ##At}}t~~oF  (  T]+Y7
 vvayD   vvayE!!!vvx3vvx3r!   content_encodinggzipzx-gzipc                   t        j                  dt         j                  dt         j                  z         }|j	                  d      }||j                         z  }t        |      }t        |d|id      }|j                  d      dk(  sJ |j                  d	      d
k(  sJ |j                         dk(  sJ |j                         dk(  sJ y )Nr      r"   r   Fr   r$   r%   r&   r'   r!   r   )r0   r   r   r   r   rv   s         r2   test_chunked_decoding_gzipz'TestResponse.test_chunked_decoding_gzip7  s    ##At}}b4>>6IJ  (  T]+-=>PU
 vvayD   vvayE!!!vvx3vvx3r!   c                   t        j                  dt         j                  dt         j                  z         }|j	                  d      }||j                         z  }|dz  }t        |      }t        |ddi      }|j                  dk(  sJ y 	Nr   r   r"      r   r   rp   	   foofoofoo	r   r   r   r   r   r   r   r   r   r   s        r2   test_decode_gzip_multi_memberz*TestResponse.test_decode_gzip_multi_memberG  sz    ##At}}b4>>6IJ  (  axT]&8&%ABvv%%%r!   c                    t        d      }t        j                  t              5  t	        |ddi       d d d        y # 1 sw Y   y xY w)Nr"   r   r   rp   r   r   s     r2   test_decode_gzip_errorz#TestResponse.test_decode_gzip_errorR  s3    V_]];'&8&%AB (''r   c                t   t        j                  dt         j                  dt         j                  z         }|j	                  d      }||j                         z  }|dz  dz   }t        |      }t        |ddid      }d	}t        d
      D ]$  }||j                  d      z  }|j                  s$ n |dk(  sJ y )Nr   r   r"   r   r   r   Fr   r!   r5   r$   r   )r   r   r   r   r   r   r   r   rU   r   closed)r0   r   r   r   rv   ret_s          r2    test_decode_gzip_swallow_garbagez-TestResponse.test_decode_gzip_swallow_garbageW  s     ##At}}b4>>6IJ  (  ax& T]+V4e
 sA166!9Cxx 
 l"""r!   c                   t        j                  dt         j                  dt         j                  z         }|j	                  d      }||j                         z  }|dz  dz   }t        |      }t        |ddi      }|j                  dk(  sJ y r   r   r   s        r2   *test_chunked_decoding_gzip_swallow_garbagez7TestResponse.test_chunked_decoding_gzip_swallow_garbagel  s    ##At}}b4>>6IJ  (  ax& T]&8&%ABvv%%%r!   c                    t        j                  d      }t        |      }t        |ddi      }|j                  dk(  sJ y Nr"   r   brrp   )r   r   r   r   r   r   s       r2   test_decode_brotlizTestResponse.test_decode_brotliw  s=    v&T]&8$%?@vvr!   c                    t        j                  d      }t        |      }t        |ddid      }d}t	        d      D ]$  }||j                  d      z  }|j                  s$ n |dk(  sJ y )	N	   foobarbazr   r   Fr   r!   r5   r$   )r   r   r   r   rU   r   r   )r0   r   r   rv   r   r   s         r2   test_chunked_decoding_brotliz)TestResponse.test_chunked_decoding_brotli  sm    |,T]&8$%?QVWsA166!9Cxx  l"""r!   c                    t        d      }t        j                  t              5  t	        |ddi       d d d        y # 1 sw Y   y xY wr   r   r   s     r2   test_decode_brotli_errorz%TestResponse.test_decode_brotli_error  s3    V_]];'&8$%?@ (''r   c                    dd l }|j                  d      }t        |      }t        |ddi      }|j                  dk(  sJ y )Nr   r"   r   zstdrp   )	zstandardr   r   r   r   r0   r   r   r   rv   s        r2   test_decode_zstdzTestResponse.test_decode_zstd  s@     }}V$T]&8&%ABvvr!   c                    dd l }|j                  d      t        j                  d      z   |j                  d      z   }t	        |      }t        |ddi      }|j                  dk(  sJ y )	Nr   r"   z*50 2A 4D 1807 00 00 0000 00 00 00 00 00 00r8   r   r   rp   r   )r   r   rV   fromhexr   r   r   r   s        r2   test_decode_multiframe_zstdz(TestResponse.test_decode_multiframe_zstd  sp      MM&!mm' mmF#$ 	 T]&8&%ABvv"""r!   c                    dd l }|j                  d      }t        |      }t        |ddid      }d}t	        d      D ]$  }||j                  d	      z  }|j                  s$ n |dk(  sJ y )
Nr   r   r   r   Fr   r!   r5   r$   )r   r   r   r   rU   r   r   )r0   r   r   r   rv   r   r   s          r2   test_chunked_decoding_zstdz'TestResponse.test_chunked_decoding_zstd  st     }}\*T]+V4e
 sA166!9Cxx  l"""r!   r"   sd   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxr   c                    t        |      }t        j                  t              5  t	        |ddi       d d d        y # 1 sw Y   y xY w)Nr   r   rp   r   )r0   r   r   s      r2   test_decode_zstd_errorz#TestResponse.test_decode_zstd_error  s5     T]]];'&8&%AB (''r   c                    dd l }|j                  |      }t        |d d       }t        j                  t
              5  t        |ddi       d d d        y # 1 sw Y   y xY w)Nr   r#   r   r   rp   )r   r   r   r)   r*   r   r   )r0   r   r   r   s       r2   +test_decode_zstd_incomplete_preload_contentz8TestResponse.test_decode_zstd_incomplete_preload_content  sM     	!}}T"T#2Y]];'&8&%AB (''s   AAc                    dd l }|j                  |      }t        |d d       }t        |ddid      }t	        j
                  t              5  |j                  d       d d d        y # 1 sw Y   y xY w	Nr   r#   r   r   Fr   Tr   )r   r   r   r   r)   r*   r   r   )r0   r   r   r   rv   s        r2    test_decode_zstd_incomplete_readz-TestResponse.test_decode_zstd_incomplete_read  sf     	!}}T"T#2Y +V4e

 ]];'FF$F' (''s   A))A2c                D   dd l }|j                  |      }t        |d d       }t        |ddid      }t	        j
                  t              5  d}|t        |      k  r/|j                  d      }|t        |      z  }|t        |      k  r/d d d        y # 1 sw Y   y xY wr   )	r   r   r   r   r)   r*   r   r(   r   )r0   r   r   r   rv   amt_decodedparts          r2   !test_decode_zstd_incomplete_read1z.TestResponse.test_decode_zstd_incomplete_read1  s     	!}}T"T#2Y+V4e

 ]];'KD	)wwdw3s4y( D	) (''s   ?BBc                    dd l }|j                  |      }t        |      }t        |ddid      }d}d}|t	        |      k  r4|j                  d      }|t	        |      z  }||z  }|t	        |      k  r4||k(  sJ y )	Nr   r   r   Fr   r!   Tr   )r   r   r   r   r(   r   )	r0   r   r   encoded_datar   rv   r   decoded_datar   s	            r2   test_decode_zstd_read1z#TestResponse.test_decode_zstd_read1  s     	!}}T*\"+V4e
 CI%77$7/D3t9$KD L CI% t###r!   c                    t        j                  t        j                  d            }t        |      }t        |ddi      }|j                  dk(  sJ y )Nr"   r   deflate, deflaterp   r   r   s       r2   #test_multi_decoding_deflate_deflatez0TestResponse.test_multi_decoding_deflate_deflate  sG    }}T]]623T]&8:L%MNvvr!   c                4   t        j                  dt         j                  dt         j                  z         }|j	                  t        j                  d            }||j                         z  }t        |      }t        |ddi      }|j                  dk(  sJ y )Nr   r   r"   r   zdeflate, gziprp   r   r   s        r2    test_multi_decoding_deflate_gzipz-TestResponse.test_multi_decoding_deflate_gzip  sz    ##At}}b4>>6IJ  v!67  T]&8/%JKvvr!   c                   t        j                  dt         j                  dt         j                  z         }|j	                  d      }||j                         z  }t        j                  dt         j                  dt         j                  z         }|j	                  |      }||j                         z  }t        |      }t        |ddi      }|j                  dk(  sJ y )Nr   r   r"   r   z
gzip, gziprp   r   r   s        r2   test_multi_decoding_gzip_gzipz*TestResponse.test_multi_decoding_gzip_gzip)  s    ##At}}b4>>6IJ  (  ##At}}b4>>6IJ  &  T]&8,%GHvvr!   c                   d}t        j                  t        j                  |            }t        |      }t        |ddid      }|j	                  d      dk(  sJ |j	                  d      dk(  sJ |j	                  d      d	k(  sJ |j	                  d
      dk(  sJ |j	                  d      dk(  sJ |j	                  d      dk(  sJ |j	                         dk(  sJ y )Nsz  foobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazr   r   Fr   r   r"   r8   r9   r:   r      s   foobarbazfoobarbazfoobarbaziM  sM  foobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazfoobarbazr!   r   )r0   msgr   r   rv   s        r2   (test_read_multi_decoding_deflate_deflatez5TestResponse.test_read_multi_decoding_deflate_deflate7  s    }}T]]3/0T]+-?@RW
 vvayF"""vvayF"""vvayF"""vvayL(((vve} 0000vvf~!2222vvx3r!   c                X    t        d      }|j                  dk(  sJ |j                  sJ y r~   )r   r   r   r0   resps     r2   test_body_blobzTestResponse.test_body_blobH  s*    F#yyF"""{{{r!   z/ignore::pytest.PytestUnraisableExceptionWarningc                   t        dddd dd       }|j                  rJ |j                         rJ |j                         rJ t	        j
                  t              5  |j                          d d d        t	        j
                  t              5  |j                          d d d        y # 1 sw Y   <xY w# 1 sw Y   y xY w)N      zHTTP/1.1F)statusversionversion_stringreasonr   request_url)	r   r   readablewritabler)   r*   NotImplementedErrorr   rh   r  s     r2   test_base_iozTestResponse.test_base_ioM  s    % 
 ;;==?""==?""]]./IIK 0]]./JJL 0/ 0///s   B)B5)B25B>c                t   t        d      }t        |d      }|j                  rJ |j                         sJ |j	                         rJ t        j                  t              5  |j                          d d d        |j                          |j                  sJ 	 t        j                  |      }t        |d      }|j                  rJ |j                          |j                  sJ 	 |j                          t        d      }t        j                  t              5  |j                          d d d        d|_        |j                  sJ t        j                  t              5  |j                          d d d        y # 1 sw Y   xY w# j                          w xY w# 1 sw Y   sxY w# 1 sw Y   y xY w)Nr"   Fr   foodatar&   )r   r   r   r  r  r)   r*   IOErrorfilenorh   httplib_fp)r0   rj   r   r  hlrresp2resp3s          r2   test_iozTestResponse.test_ioa  s>   V_B6;;}}==?""]]7#KKM $ 	

{{{	&&t,C e<E||##KKM<<<IIK Y']]7#LLN $ 	 |||]]7#LLN $#5 $# IIK $# $#s1   $F AF F"&F. F
F"F+.F7c                   	 t        j                  |      }t        d      |_        d|_        d|_        t        |d      5 }|j                  rJ |j                  J |j                  j                         rJ t        |j                        rJ |j                         rJ |j                          |j                  sJ |j                  j                         sJ t        |j                        sJ |j                         sJ 	 d d d        |j                          y # 1 sw Y   xY w# j                          w xY wNr"   r   r   Fr   )r  r   r   r   chunkedlengthr   r  isclosedr   r   rh   )r0   rj   r   r  s       r2   #test_io_closed_consistently_by_readz0TestResponse.test_io_closed_consistently_by_read  s    	&&t,CV_CFCKCJc59T;;&xx+++88,,...'111==?**		{{"{xx((***#DHH---}}& : IIK :9 IIKs%   A D- CD!D- !D*&D- -D?read_amt)Nr   length_known)TFc                f   t        j                  |      5 }t        d      |_        d|_        |rdnd |_        t        |d      5 }|rd|_        |j                  rJ |j                  J |j                  j                         rJ t        |j                        rJ |j                         rJ |j                  |       |sr|j                  rJ |j                  J |j                  j                         rJ t        |j                        rJ |j                         rJ |j                  |       |j                  sJ |j                  j                         sJ t        |j                        sJ |j                         sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wr%  )r  r   r   r   r&  r'  length_remainingr   r  r(  r   r   )r0   rj   r+  r*  r   r  s         r2   $test_io_closed_consistently_by_read1z1TestResponse.test_io_closed_consistently_by_read1  sl   
 !!$'3V_CFCK*CJc59T,-D);;&xx+++88,,...'111==?**

8$ $#{{*?88///#xx00222+DHH555#}}..JJx({{"{xx((***#DHH---}}&+ :	 (' :9	 ('s$   0F'EF
F'F$	 F''F0c                   t        j                  |      5 }t        d      |_        d|_        d}|r|nd |_        t        |d      5 }|r||_        |r|j                  rJ |j                  J |j                  j                         rJ t        |j                        rJ |j                         rJ |j                  d      }t        |      dk(  sJ |dz  }|r|s|j                  rJ |j                  J |j                  j                         rJ t        |j                        rJ |j                         rJ |j                  d      }t        |      dk(  sJ |j                  sJ |j                  j                         sJ t        |j                        sJ |j                         sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr"   r   r   Fr   r$   )r  r   r   r   r&  r'  r-  r   r  r(  r   r   r(   r0   rj   r+  r   r-  r  r   s          r2   )test_io_not_closed_until_all_data_is_readz6TestResponse.test_io_not_closed_until_all_data_is_read  s    !!$'3V_CFCK -9)tCJc59T,<D)&#{{*?88///#xx00222+DHH555#}}..99Q<Dt9>)>$)$ ' $#{{*?88///#xx00222+DHH555#}}..99Q<Dt9>)>{{"{xx((***#DHH---}}&3 : ('
 :9 ('s+   2GBGCG6GG	GGc                   t        j                  |      5 }t        d      |_        d|_        d}|r|nd |_        t        |d      5 }|r||_        |j                  rJ |j                  J |j                  j                         rJ t        |j                        rJ |j                         rJ |j                  d      }|dk(  sJ |j                  rJ |j                  J |j                  j                         rJ t        |j                        rJ |j                         rJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr"   r   r   Fr   r!   )r  r   r   r   r&  r'  r-  r   r  r(  r   r   r0  s          r2   +test_io_not_closed_after_requesting_0_bytesz8TestResponse.test_io_not_closed_after_requesting_0_bytes  s/    !!$'3V_CFCK -9)tCJc59T,<D);;&xx+++88,,...'111==?**yy|s{"{;;&xx+++88,,...'111==?**? : ('
 :9 ('s$   2E
C$D>-E
>E	E

Ec                   t        d      }t        |d      }t        |      }|j                         dk(  sJ |j	                          |j
                  sJ t        d      }t        |d      }t        j                  t        d      5  t        t        |             d d d        d}t        |      }t        |d      }t        |d      }|j                  d	       t        |j                               t        |      dz
  k(  sJ |j
                  s|j                  d       |j
                  sy y # 1 sw Y   xY w)
Nr"   Fr      hello
worldreadline of closed filer   s   fooandahalf   r$   )r   r   r   r   rh   r   r)   r*   r.   listr(   )r0   r   r  r   rO   s        r2   test_io_bufferedreaderz#TestResponse.test_io_bufferedreader  s    V_B6D!wwyF"""

{{{ _%B6]]:-FG%& H QZB6D!$

2779~#a&1*--- ))GGAJ )) HGs   
D44D=c                   t        d      }t        |dd      }t        |      }t        |      ddgk(  sJ |j                  rJ |j                  rJ t        j                  t              5  t        |       d d d        |j                          |j                  sJ |j                  sJ t        j                  t        d      5  t        |       d d d        y # 1 sw Y   exY w# 1 sw Y   y xY w)Nr5  Fr   
auto_closes   hello
s   worldr6  r   )r   r   r   r8  r   r)   r*   StopIterationnextrh   r.   r0   r   r  readers       r2   $test_io_not_autoclose_bufferedreaderz1TestResponse.test_io_not_autoclose_bufferedreader  s    _%B%H%F|
H5555==  ;;]]=)L * 	}}}{{{]]:-FGL HG *) HGs   ,CC(C%(C1c                l   t        d      }t        |d      }t        |d      }|j                         dk(  sJ |j	                          |j
                  sJ t        d      }t        |d      }t        j                  t        d	      5  t        t        |             d d d        y # 1 sw Y   y xY w)
Ns   äöüßFr   utf8encodingu   äöüß   äöüß
αβγδI/O operation on closed file.?r   )
r   r   r   r   rh   r   r)   r*   r.   r8  )r0   r   r  r   s       r2   test_io_textiowrapperz"TestResponse.test_io_textiowrapper%  s    89B64&1wwyJ&&&

{{{ Q
 B6]]:-MNt$% ONNs   B**B3c                   t        d      }t        |dd      }t        |d      }t        |      ddgk(  sJ |j                  rJ |j                  rJ t        j                  t              5  t        |       d d d        |j                          |j                  sJ |j                  sJ t        j                  t        d	      5  t        |       d d d        y # 1 sw Y   exY w# 1 sw Y   y xY w)
NrF  Fr;  rC  rD  u	   äöüß
u   αβγδrG  r   )r   r   r   r8  r   r)   r*   r=  r>  rh   r.   r?  s       r2   #test_io_not_autoclose_textiowrapperz0TestResponse.test_io_not_autoclose_textiowrapper8  s    Q
 B%Htf5F|j9999==  ;;]]=)L * 	}}}{{{]]:-MNL ON *) ONs   .C	C*C'*C3c                   t        j                  d      }t        |      }t        |ddid      }|j	                  d      dk(  sJ t        j                  t        d	      5  |j	                  dd
       d d d        t        j                  t        d	      5  |j	                  d
       d d d        y # 1 sw Y   @xY w# 1 sw Y   y xY w)Nr"   r   r   Fr   r$   r%   zbCalling read\(decode_content=False\) is not supported after read\(decode_content=True\) was calledr   r   )r   r   r   r   r   r)   r*   r+   r0   r   r   r  s       r2   (test_read_with_illegal_mix_decode_togglez5TestResponse.test_read_with_illegal_mix_decode_toggleK  s    }}V$T]+Y7
 yy|t###]]:
 IIaI.
 ]]:
 IIUI+
 

 

 
   "B5C5B>C
c                   t        j                  d      }t        |      }t        |ddid      }|j	                  d      dk(  sJ t        j                  t        d	      5  |j	                  dd
       d d d        t        j                  t        d	      5  |j	                  d
       d d d        y # 1 sw Y   @xY w# 1 sw Y   y xY w)Nr"   r   r   Fr   r$   r%   zdCalling read1\(decode_content=False\) is not supported after read1\(decode_content=True\) was calledr   r   )r   r   r   r   r   r)   r*   r+   rL  s       r2   )test_read1_with_illegal_mix_decode_togglez6TestResponse.test_read1_with_illegal_mix_decode_toggleh  s    }}V$T]+Y7
 zz!}$$$]];
 JJqJ/
 ]];
 JJeJ,
 

 

 
rN  c                    t        j                  d      }t        |      }t        |ddid      }|j	                  dd      J |j	                  dd	      d
k(  sJ y )Nr"   r   r   Fr   r&   r   r$   Tr%   r   rL  s       r2    test_read_with_mix_decode_togglez-TestResponse.test_read_with_mix_decode_toggle  sf    }}V$T]+Y7
 yy5y1===yy4y0D888r!   c                   t        d      }t        |d      }|j                  dd      }t        |      dk(  sJ t        |      dk(  sJ t	        j
                  t              5  t        |       d d d        y # 1 sw Y   y xY w)Nr"   Fr   r&   r      fo   o)r   r   streamr>  r)   r*   r=  r0   r   r  rV  s       r2   test_streamingzTestResponse.test_streaming  sl    V_B6Qu5F|u$$$F|t###]]=)L *))s   %A::Bc                   t        d      }t        |d      }|j                  dd      }d}|t        t	        |            z  }d|k(  sJ ||j                         k(  sJ |t        t	        |            z  }d|k(  sJ ||j                         k(  sJ t        j                  t              5  t	        |       d d d        y # 1 sw Y   y xY w)Nr"   Fr   r&   r   r   r   )	r   r   rV  r(   r>  r   r)   r*   r=  )r0   r   r  rV  positions        r2   test_streaming_tellz TestResponse.test_streaming_tell  s    V_B6Qu5CV%%H}}499;&&&CV%%H}}499;&&&]]=)L *))s   -CCc                   t        j                  dt         j                  dt         j                  z         }|j	                  d      }||j                         z  }t        |      }t        |ddid      }|j                  d      }t        |      d	k(  sJ t        |      d
k(  sJ t        j                  t              5  t        |       d d d        y # 1 sw Y   y xY w)Nr   r   r"   r   r   Fr   r&   rT  rU  r   r   r   r   r   r   r   r   rV  r>  r)   r*   r=  r0   r   r   r   r  rV  s         r2   test_gzipped_streamingz#TestResponse.test_gzipped_streaming  s    ##At}}b4>>6IJ  (  T]+V4e
 QF|u$$$F|t###]]=)L *))s    CCc                   t        j                  dt         j                  dt         j                  z         }d}|j	                  |      }||j                         z  }t        |      }t        |ddid      }|j                         }t        |      }||k(  sJ t        |      |j                         k(  sJ t        j                  t              5  t        |       d d d        y # 1 sw Y   y xY w)Nr   r   r"   r   r   Fr   )r   r   r   r   r   r   r   r   rV  r>  r(   r   r)   r*   r=  )r0   r   uncompressed_datar   r   r  rV  payloads           r2   test_gzipped_streaming_tellz(TestResponse.test_gzipped_streaming_tell  s    ##At}}b4>>6IJ"  !23  T]+V4e
  v,++++4yDIIK''']]=)L *))s   C&&C/c                   dd} G fddt               }t        j                  t              }t	        t              z  } |t        |      }t        |ddid      }|j                  |      }|D cg c]  }||j                         f }	}|j                         }
t        j                  t              5  t        |       d d d        t        |	 \  }}d	j                  |      }||k(  sJ d
}||k(  sJ t	        t              |
k(  sJ t	        |      |z  }t	        |      |z  }|dk(  r|g|z  }n
|g|z  |gz   }||D cg c]  }t	        |       c}k(  sJ y c c}w # 1 sw Y   xY wc c}w )Nr    @   c                  .    e Zd ZdZd fdZddZddZy)	^TestResponse.test_deflate_streaming_tell_intermediate_point.<locals>.MockCompressedDataReadingz{
            A BytesIO-like reader returning ``payload`` in ``NUMBER_OF_READS``
            calls to ``read``.
            c                    t        dz         D cg c]  }|||z  |dz   |z    c}| _        dj                  | j                        |k(  sJ y c c}w )Nr$   r!   )rU   payloadsjoin)r0   rb  payload_part_sizerW   NUMBER_OF_READSs       r2   __init__zgTestResponse.test_deflate_streaming_tell_intermediate_point.<locals>.MockCompressedDataReading.__init__  sg     #?Q#67!7 A 11QU>O4OP7!
 xx.'999!s   Ac                j    t        | j                        dkD  r| j                  j                  d      S y)Nr   r!   )r(   ri  pop)r0   r   s     r2   r   zcTestResponse.test_deflate_streaming_tell_intermediate_point.<locals>.MockCompressedDataReading.read  s+    t}}%)==,,Q//r!   c                $    | j                  |      S rM   r   r0   amts     r2   r   zdTestResponse.test_deflate_streaming_tell_intermediate_point.<locals>.MockCompressedDataReading.read1  s    yy~%r!   N)rb  rV   rk  intr]   r^   )r   rt  r]   rV   rs  rt  r]   rV   )r_   r`   ra   __doc__rm  r   r   )rl  s   r2   MockCompressedDataReadingrg    s    
:&r!   rw  r   r   Fr   r!   )\         i  iB  ip  i  i  r   )r   r   
decompressZLIB_PAYLOADr(   r   rV  r   r)   r*   r=  r>  ziprj  )r0   	PART_SIZErw  ra  rk  r   r  rV  r   parts_positionsend_of_streamparts	positionsrb  expectedexpected_last_part_sizewhole_partsexpected_lengthsrl  s                     @r2   .test_deflate_streaming_tell_intermediate_pointz;TestResponse.test_deflate_streaming_tell_intermediate_point  s    		& 	&. !OOL9-@&|5FG+Y7
 Y';AB64D$))+.6B		]]=)L * 0y ((5/ G+++ ;9$$$ < M111 #&&7"89"D+,	9"a' ){[8 ){[8<S;TT%#@%$CI%#@@@@C C *)< $As   4E8E"E."E+c                8   t        j                  d      }t        |      }t        |ddid      }|j	                  d      }t        |      dk(  sJ t        |      dk(  sJ t        j                  t              5  t        |       d d d        y # 1 sw Y   y xY w)	Nr"   r   r   Fr   r&   rT  rU  )	r   r   r   r   rV  r>  r)   r*   r=  )r0   r   r   r  rV  s        r2   test_deflate_streamingz#TestResponse.test_deflate_streaming  s    }}V$T]+Y7
 QF|u$$$F|t###]]=)L *))   ;BBc                   t        j                  dt         j                  t         j                         }|j	                  d      }||j                         z  }t        |      }t        |ddid      }|j                  d      }t        |      dk(  sJ t        |      d	k(  sJ t        j                  t              5  t        |       d d d        y # 1 sw Y   y xY w)
Nr   r"   r   r   Fr   r&   rT  rU  r]  r^  s         r2   test_deflate2_streamingz$TestResponse.test_deflate2_streaming(  s    ##At}}t~~oF  (  T]+Y7
 QF|u$$$F|t###]]=)L *))s   >CCc                    t        d      }t        |d      }|j                  dd      }t        j                  t
              5  t        |       d d d        y # 1 sw Y   y xY w)Nr!   Fr   r&   r   )r   r   rV  r)   r*   r=  r>  rW  s       r2   test_empty_streamzTestResponse.test_empty_stream8  sH    S\B6Qu5]]=)L *))   AA#zpreload_content, amt, read_meth))TNr   )FNr   )FrT   r   )FNr   )FrT   r   z25 MBc                    d}t        t        j                  t        |                  }t	        ||ddi      }|r|j
                  n t        ||      |      }t        |      |k(  sJ y )NrT   r   r   r   rq   )r   r   r   rV   r   r   getattrr(   r0   r   rs  	read_methcontent_lengthr   r  r   s           r2   )test_buffer_memory_usage_decode_one_chunkz6TestResponse.test_buffer_memory_usage_decode_one_chunk@  si     $T]]5#89:+'3

 ,tyy1Iy1I#1N4yN***r!   z10.5 MBc                    d}t        t        |            }t        ||d      }|r|j                  n t	        ||      |      }t        |      |k(  sJ y )NrT   Fr   )r   rV   r   r   r  r(   r  s           r2   $test_buffer_memory_usage_no_decodingz1TestResponse.test_buffer_memory_usage_no_decodingX  sU     $U>*+BPUV+tyy1Iy1I#1N4yN***r!   c                P    t        d      }t        |d      }|j                  J y )N   12345Fr   r   r   r-  )r0   r   r  s      r2   test_length_no_headerz"TestResponse.test_length_no_headerl  s*    XB6$$,,,r!   c                `    ddi}t        d      }t        ||d      }|j                  dk(  sJ y )Ncontent-length5r  Fr   r7  r  r0   rq   r   r  s       r2   test_length_w_valid_headerz'TestResponse.test_length_w_valid_headerq  s8    #S)XBG$$)))r!   c                    ddi}t        d      }t        ||d      }|j                  J d|d<   t        ||d      }|j                  J y )Nr  foor  Fr   z-10r  )r0   garbager   r  s       r2   test_length_w_bad_headerz%TestResponse.test_length_w_bad_headerx  sa    #U+XBG$$,,,$) !BG$$,,,r!   c                \    ddd}t        d      }t        ||d      }|j                  J y )Nr  r&  )r  transfer-encodingr  Fr   r  r  s       r2   test_length_when_chunkedz%TestResponse.test_length_when_chunked  s8     &)yIXBG$$,,,r!   c                    ddi}ddi}t        d      }t        ||d      }|j                  dk(  sJ t        j                  t
              5  t        ||d       d d d        y # 1 sw Y   y xY w)Nr  z5, 5, 5z5, 42s   abcdeFr   r7  )r   r   r-  r)   r*   r   )r0   rq   r  r   r  s        r2   )test_length_with_multiple_content_lengthsz6TestResponse.test_length_with_multiple_content_lengths  sf    #Y/#W-XBG$$)))]]=)WeD *))s   A$$A-c                x   ddi}t        d      }t        |d      }|j                          |j                  J t        d      }t        ||d      }|j                          |j                  dk(  sJ t        d      }t        ||d      }|j	                  d      }t        |       |j                  d	k(  sJ y )
Nr  r  r  Fr   r   r   r&   r   )r   r   r   r-  rV  r>  )r0   rq   r   r  r   s        r2   test_length_after_readz#TestResponse.test_length_after_read  s    #S) XB6		$$,,, XBG		$$))) XBG{{1~T
$$)))r!   c                8    G d d      }t        d      } |       }||_        t        |d      }|j                  d      }t	        |      dk(  sJ t	        |      dk(  sJ t        j                  t              5  t	        |       d d d        y # 1 sw Y   y xY w)	Nc                  ,    e Zd ZddZddZddZddZy)CTestResponse.test_mock_httpresponse_stream.<locals>.MockHTTPRequestc                    d | _         y rM   r   r0   s    r2   rm  zLTestResponse.test_mock_httpresponse_stream.<locals>.MockHTTPRequest.__init__  s	    *.r!   c                j    | j                   J | j                   j                  |      }|sd | _         |S rM   )r   r   )r0   rs  r   s      r2   r   zHTestResponse.test_mock_httpresponse_stream.<locals>.MockHTTPRequest.read  s3    ww***ww||C("DGr!   c                $    | j                  d      S )Nr$   rq  rr  s     r2   r   zITestResponse.test_mock_httpresponse_stream.<locals>.MockHTTPRequest.read1  s    yy|#r!   c                    d | _         y rM   r  r  s    r2   rh   zITestResponse.test_mock_httpresponse_stream.<locals>.MockHTTPRequest.close  s	    r!   Nr\   ru  )r_   r`   ra   rm  r   r   rh   re   r!   r2   MockHTTPRequestr    s    /$r!   r  r"   Fr   r&   rT  rU  )r   r   r   rV  r>  r)   r*   r=  )r0   r  bior   r  rV  s         r2   test_mock_httpresponse_streamz*TestResponse.test_mock_httpresponse_stream  s    	 	$ foB6QF|u$$$F|t###]]=)L *))r  c                    g d}t        |      }t        j                  t              }||_        t        |dddi      }t        |j                               D ]  \  }}|||   k(  rJ  y )N)rT  rU  r8   Fr  r&  r  )MockChunkedEncodingResponser  r   MockSockr   	enumeraterV  )r0   rV  r   rv   r  rW   cs          r2   #test_mock_transfer_encoding_chunkedz0TestResponse.test_mock_transfer_encoding_chunked  sj    &(0  *u/BI.N
 dkkm,DAqq	>!> -r!   c                    dd}t        t         |                   }t        j                  t              }||_        ddd}t        |d|      }d}|j                  d	      D ]  }||z  }	 d
|k(  sJ y)z5Show that we can decode the gzipped and chunked body.c               3  
  K   t        j                  dt         j                  dt         j                  z         } | j	                  d      }|| j                         z  }t        dt        |      d      D ]  }|||dz      y w)Nr   r   r   r   r&   r   r   r   r   r   r   rU   r(   r   r   rW   s      r2   rV  zPTestResponse.test_mock_gzipped_transfer_encoding_chunked_decoded.<locals>.stream  so     ''4=="t~~:MNH$$Y/DHNN$$D1c$i+1q1uo% ,   BBr&  r   r  r   Fr  r!   Tr   r   Nr]   z#typing.Generator[bytes, None, None])r  r8  r  r   r  r   rV  r0   rV  r   rv   rq   r  r   r  s           r2   3test_mock_gzipped_transfer_encoding_chunked_decodedz@TestResponse.test_mock_gzipped_transfer_encoding_chunked_decoded  s{    	& )fh8  *(1vNAugFD1AAID 2 D   r!   c                    ddg}t        |      }t        j                  t              }||_        d|_        d |_        t        |dddi      }g d}t        |j                  d	            }||k(  sJ y )
N   foooo
   bbbbaaaaarTFr  r&  r  )rT  r'   rU     bbr     aar  s   arr&   	r  r  r   r  r   r&  
chunk_leftr8  read_chunked)r0   rV  r   rv   r  expected_responseresponses          r2   /test_mock_transfer_encoding_chunked_custom_readz<TestResponse.test_mock_transfer_encoding_chunked_custom_read  s~    M*(0  *	u/BI.N
 T))!,- H,,,r!   read_chunked_argsc                    ddg}t        |      }t        j                  t              }||_        d|_        d |_        t        |dddi      }|t         |j                  |       k(  sJ y )Nr  r  TFr  r&  r  r  )r0   r  rV  r   rv   r  s         r2   /test_mock_transfer_encoding_chunked_unlmtd_readz<TestResponse.test_mock_transfer_encoding_chunked_unlmtd_read   sx     M*(0  *	u/BI.N
 /d//1BCDDDDr!   c                    t        d      }t        |d      }|j                         }t        j                  t
              5  t        |       d d d        y # 1 sw Y   y xY wr   )r   r   r  r)   r*   r   r>  r0   r   r  rv   s       r2   (test_read_not_chunked_response_as_chunksz5TestResponse.test_read_not_chunked_response_as_chunks  sE    V_B6]]-.G /..s   AA c                    t        d      }t        |dddi      }|j                         }t        j                  t
              5  t        |       d d d        y # 1 sw Y   y xY w)Nr"   Fr  r&  r  )r   r   r  r)   r*   r   r>  r  s       r2   test_read_chunked_not_supportedz,TestResponse.test_read_chunked_not_supported  sR    V_0CY/O
 ]]34G 544r  c                j   d}t        d      }t        |dt        |      idd      }t        j                  t
              5 }|j                  d       d d d        j                  j                  d   }t        |t              sJ |j                  d	k(  sJ |j                  |k(  sJ y # 1 sw Y   WxY w)
Ni9  r!   r  FT)rq   r   enforce_content_lengthr   r$   r   )r   r   strr)   r*   r   r   valueargs
isinstancer   partialr  )r0   r  r   r  ctxorig_exs         r2   test_buggy_incomplete_readz'TestResponse.test_buggy_incomplete_read  s     S\%s>':;!#'	
 ]]=)SIIaL * ))..#'>222!###>111 *)s   B))B2c                   ddg}t        |      }t        j                  t              }||_        d|_        d |_        t        |dddi      }t        j                  t              5 }t        |j                                d d d        j                  j                  d   }t        |t              sJ y # 1 sw Y   5xY w)	Nr  r  TFr  r&  r  r$   )MockChunkedIncompleteReadr  r   r  r   r&  r  r)   r*   r   r>  r  r  r  r  httplib_IncompleteRead)r0   rV  r   rv   r  r  r  s          r2   test_incomplete_chunkz"TestResponse.test_incomplete_chunk2  s    M*&v.  *	u/BI.N
 ]]=)S""$% * ))..#'#9:::	 *)s   'B55B>c                   ddg}t        |      }t        j                  t              }||_        d|_        d |_        t        |dddi      }t        j                  t              5 }t        |j                                d d d        j                  j                  d   }d	}t        |j                        |k(  sJ t        |t               sJ |j"                  |j$                  j'                         k(  sJ y # 1 sw Y   zxY w)
Nr  r  TFr  r&  r  r$   z("Connection broken: InvalidChunkLength(got length b'ZZZ\\r\\n', 0 bytes read)", InvalidChunkLength(got length b'ZZZ\r\n', 0 bytes read)))MockChunkedInvalidChunkLengthr  r   r  r   r&  r  r)   r*   r   r>  r  r  r  r  r  r   r'  BAD_LENGTH_LINEencode)r0   rV  r   rv   r  r  r  r  s           r2   test_invalid_chunk_lengthz&TestResponse.test_invalid_chunk_lengthB  s    M**62  *	u/BI.N
 ]]=)S""$% * ))..#I 	 399~$$$'#5666~~!3!3!:!:!<<<< *)s   'C::Dc                `   ddg}t        |      }t        j                  t              }||_        d|_        d |_        t        |dddi      }t        j                  t              5 }t        |j                                d d d        t        j                        dk(  sJ y # 1 sw Y   $xY w)	Nr  r  TFr  r&  r  zResponse ended prematurely)MockChunkedNoChunksr  r   r  r   r&  r  r)   r*   r   r>  r  r  r  )r0   rV  r   rv   r  r  s         r2   test_truncated_before_chunkz(TestResponse.test_truncated_before_chunkX  s    M* (  *	u/BI.N
 ]]=)S""$% * 399~!==== *)s   'B$$B-c                    g d}t        |      }t        j                  t              }||_        d|_        d |_        t        |dddi      }|t        |j                               k(  sJ y )N)r"   r8   r9   TFr  r&  r  )	#MockChunkedEncodingWithoutCRLFOnEndr  r   r  r   r&  r  r8  rV  r0   rV  r   rv   r  s        r2   )test_chunked_response_without_crlf_on_endz6TestResponse.test_chunked_response_without_crlf_on_endg  sh    )08  *	u/BI.N
 dkkm,,,,r!   c                    ddg}t        |      }t        j                  t              }||_        d|_        d |_        t        |dddi      }|t        |j                               k(  sJ y )Nr"   r8   TFr  r&  r  )	!MockChunkedEncodingWithExtensionsr  r   r  r   r&  r  r8  rV  r  s        r2   %test_chunked_response_with_extensionsz2TestResponse.test_chunked_response_with_extensionss  sm    &!.v6  *	u/BI.N
 dkkm,,,,r!   c                P   t        j                  t        d      }d|_        d |_        t        ddddi|      }|j                  du sJ t        |d	d
        t        |dt        j                                |j                         D ]  } |j                  j                          y )NHEAD)methodT Fr  r&  )r   rq   original_responsesupports_chunked_readsc                      yNTre   re   r!   r2   rP   z9TestResponse.test_chunked_head_response.<locals>.<lambda>  s    r!   release_conn)r  r   r  r&  r  setattrr   MockrV  r   assert_called_once_with)r0   rv   r  r   s       r2   test_chunked_head_responsez'TestResponse.test_chunked_head_response  s      &9	!()4	
 ||t###.=ndiik2A 113r!   c                    ddi}t        |      }|j                  j                  d      dk(  sJ |j                  j                  d      dk(  sJ y )Nrn   ro   rp   Host)r   rq   r,   ru   s      r2   !test_get_case_insensitive_headersz.TestResponse.test_get_case_insensitive_headers  sL    =))yy}}V$555yy}}V$555r!   c                    t        d      }t        |      }|j                  J t               }t        ||      }|j                  |k(  sJ y )Nr!   retries)r   r   r
  r   )r0   r   r  retrys       r2   test_retrieszTestResponse.test_retries  sJ    S\B||###B.||u$$$r!   c                b    t        d      }d}t        ||      }|j                         |k(  sJ y )Nr!   https://example.comr  )r   r   geturlr0   r   r  r  s       r2   test_geturlzTestResponse.test_geturl  s0    S\+BK8{{}+++r!   c                    t        d      }d}t        ||      }|j                  |k(  sJ d|_        |j                  dk(  sJ y )Nr!   r  r  zhttps://anotherurl.com)r   r   urlr  s       r2   test_urlzTestResponse.test_url  sH    S\+BK8xx;&&&+xx3333r!   c                    t        d      }t        |d      }t        ddd dd      t        ddd dd      f}t        |	      }t        ||
      }|j	                         dk(  sJ y )Nr!   zhttp://example.comr  GETi-  zhttps://example.com/)r  r  errorr  redirect_locationzhttps://www.example.com)historyr	  )r   r   r   r   r  )r0   r   r  request_historiesr  s        r2   test_geturl_retriesz TestResponse.test_geturl_retries  s~    S\B,@A("8 *";
  /0B.{{} 9999r!   rb  expected_streamr!      
s   


)r  r  r  s   abc
defs   abc
s   defs   Hello
world


!)s   Hello
s   world
r  r     !c                n    g }t        t        |      d      D ]  }|j                  |        ||k(  sJ y )NFr   )r   r   append)r0   rb  r  actual_streamrZ   s        r2   test__iter__zTestResponse.test__iter__  s>     !''"2EJE  ' K ///r!   c                    d	d}t        t         |                   }t        j                  t              }||_        ddd}t        |d|      }d}|D ]  }||z  }	 d|k(  sJ y )
Nc               3  
  K   t        j                  dt         j                  dt         j                  z         } | j	                  d      }|| j                         z  }t        dt        |      d      D ]  }|||dz      y w)Nr   r      foo
barr   r&   r  r  s      r2   rV  z7TestResponse.test__iter__decode_content.<locals>.stream  so     ''4=="t~~:MNH$$[1DHNN$$D1c$i+1q1uo% ,r  r&  r   r  Fr  r!   r&  r  )r  r8  r  r   r  r   r  s           r2   test__iter__decode_contentz'TestResponse.test__iter__decode_content  sp    	& )fh8  *(1vNAugFAAID  d"""r!   c                Z   t        j                  ddd      t        j                  dfd       } |       5 }t	        j
                  t              5 }t        |       d d d        j                  j                  d   k(  sJ 	 d d d         |       5 }t        |d      }t	        j
                  t              5 }|j                          d d d        j                  j                  d   k(  sJ 	 d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   IxY w# 1 sw Y   y xY w)	NzSSL routinesssl3_get_recordz#decryption failed or bad record macc               3     K   t        d      } t        j                  j                  | d      5 }|_        |  d d d        y # 1 sw Y   y xY ww)Nr!   r   )r   r   patchobjectside_effect)r   fp_read	mac_errors     r2   make_bad_mac_fpzHTestResponse.test_non_timeout_ssl_error_on_read.<locals>.make_bad_mac_fp  s>     B""2v.'&/# /..s   ,AA	AA	Ar   Fr   )r]   z%typing.Generator[BytesIO, None, None])
sslr   
contextlibcontextmanagerr)   r*   r   r  r  r   )r0   r0  r   er  r/  s        @r2   "test_non_timeout_ssl_error_on_readz/TestResponse.test_non_timeout_ssl_error_on_read  s    LL-/T
	 
	"	"	 
#	 "x(AR  )77<<?i/// 
 "E:Dx(A		 )77<<?i///	 	 )(  )( sG   D	C=&D	'D!<D&D!=D	D		DD	D!!D*c                   t        j                  t              5 }t        d      }ddi}t	        |d|      }|j                  d       d d d        dt        j                        v sJ t        j                  t              5  t        d      }ddi}t	        |d|      }|j                  d       d d d        dt        |j                        v sJ t        j                  t              5  t        d      }t	        |d	      }|j                  d       d d d        dt        |j                        v sJ y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   ;xY w)
Nr  r  r     )r  rq   r   z Response may not contain content0)r  )r)   r*   r   r   r   r   r  r  )r0   excinfor   rq   r  s        r2   test_unexpected_bodyz!TestResponse.test_unexpected_body  s   ]]=)W"B'-G3@DIIbM	 *
 2S5GGGG]]=)"B'-G3@DIIbM	 *
 2S5GGGG]]=)"B3/DIIbM * 2S5GGGG% *) *) *)s#   /D8/E,*E8EEENr\   )r   tuple[typing.Any, ...]r]   r^   )r   r;  r]   r^   )r   r  r]   r^   )r   rV   r]   r^   )rj   socket.socketr]   r^   )rj   r<  r+  boolr*  z
int | Noner]   r^   )rj   r<  r+  r=  r]   r^   )r   r=  rs  rt  r  r  r]   r^   )r  r;  r]   r^   )rb  rV   r  list[bytes]r]   r^   )er_   r`   ra   r   r   r   r   r   r   r   r   r)   rb   rc   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r   r   r   r
   r   r   r   decode_param_setr   r   r   r   r   r  r  r  r	  r  filterwarningsr  r#  r)  r.  r1  r3  r9  rA  rH  rJ  rM  rP  rR  rX  r[  r_  rc  r  r  r  r  rd   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#  r'  r5  r:  re   r!   r2   r|   r|      s   !  (F
 [[[*>?, @,
  [[\+?@.0.	. A.     [[/&(1CD E	&C
#*	& \    \# # \A A
 Z    Z# #( Z# #& 	
 Z[[V%56C 7 C Z[[V%56C 7 C Z[[V%56( 7 ( Z[[V%56) 7 )$ Z[[V%56$ 7 $&   "
 [[ QR S&"H( [[Z3[[^];'!'15'AK'	' < 4'< [[^];!'!!'15!'	!' <!'F [[^];+!+15+	+ <+0<"&&&,:-:	9$ *GAR  [[)	
	 [[g&+#+*-+:=+	+ '	+ [[)	
	 [[i(+#+*-+:=+	+ )	+-
*	--	E*,B
"!.- [[02FGE!7E	E HE2&; =,>
-
-4$6%,4:. [[	%&"IUG-.8V,-#%QR	
	0	0#*00Hr!   r|   c                  Z    e Zd ZddZddZddZdddZddZdddZdddZ	ddZ
dd	Zy
)r  c                J    || _         d| _        d| _        d| _        d| _        y)zM
        content: collection of str, each str is a chunk in response
        r   Fr!   N)contentindexr   	cur_chunkchunks_exhausted)r0   rC  s     r2   rm  z$MockChunkedEncodingResponse.__init__  s(     
 %r!   c                L    t        |      dd}|j                         |z   dz   S )NX
   
)r(   r  )r0   rZ   r'  s      r2   _encode_chunkz)MockChunkedEncodingResponse._encode_chunk#  s*    Jq>&}}&00r!   c                4   | j                   ry	 | j                  | j                     }| xj                  dz  c_        | j	                  |      }t        |t              s|j                         }t        |t              sJ |S # t        $ r d}d| _         Y Yw xY w)Nr!   r$   T)rF  rC  rD  
IndexErrorrK  r  rV   r  r0   rZ   s     r2   _pop_new_chunkz*MockChunkedEncodingResponse._pop_new_chunk(  s      	LL,E
 JJ!OJ""5)%'LLNE%'''  	)E$(D!	)s   B BBc                   |dkD  r|rt        d      t        | j                        dk  r| j                         | _        |rG	 | j                  j	                  d      }| j                  d |dz    }| j                  |dz   d  | _        |S |dk  r| j                  }d| _        |S 	 | j                  d | }| j                  |d  | _        |S # t         $ r
 d| _        Y yw xY w# t
        $ r | j                  }d| _        Y |S w xY w)Nr   z Can't specify amt and till_crlf.rJ  r&   r!   r#   )r.   r(   rE  rO  rD  rM  )r0   rs  	till_crlfrW   
chunk_parts        r2   pop_current_chunkz-MockChunkedEncodingResponse.pop_current_chunk8  s   7y?@@t~~!#!002DN	"NN((1 "^^Ga!e4
!%A!8!!BYJ DN6!^^DS1

 "&!5)  !$  %!^^
!$ %s$   C	 $C 	CCC?>C?c                &    | j                  d      S )NT)rQ  rS  r  s    r2   readlinez$MockChunkedEncodingResponse.readlineV  s    %%%55r!   c                $    | j                  |      S rM   rU  rr  s     r2   r   z MockChunkedEncodingResponse.readY      %%c**r!   c                $    | j                  |      S rM   rU  rr  s     r2   r   z!MockChunkedEncodingResponse.read1\  rX  r!   c                     y rM   re   r  s    r2   r   z!MockChunkedEncodingResponse.flush_  s    r!   c                    d| _         y r  )r   r  s    r2   rh   z!MockChunkedEncodingResponse.closec  s	    r!   N)rC  r>  r]   r^   rZ   rV   r]   rV   )r]   rV   )r#   F)rs  rt  rQ  r=  r]   rV   r   ru  r\   )r_   r`   ra   rm  rK  rO  rS  rV  r   r   r   rh   re   r!   r2   r  r    s/    &1
 <6++r!   r  c                      e Zd ZddZy)r  c                F    d|j                          dj                         S )Nz9999
rI  )decoder  rN  s     r2   rK  z'MockChunkedIncompleteRead._encode_chunkh  s!    %,,.).5577r!   Nr\  r_   r`   ra   rK  re   r!   r2   r  r  g  s    8r!   r  c                      e Zd ZdZddZy)r  zZZZ
c                \    | j                    |j                          dj                         S )NrI  )r  r_  r  rN  s     r2   rK  z+MockChunkedInvalidChunkLength._encode_chunko  s*    &&''7t<CCEEr!   Nr\  )r_   r`   ra   r  rK  re   r!   r2   r  r  l  s    OFr!   r  c                      e Zd ZddZy)r  c                    dj                  t        |      |j                         t        |      dkD  rd      j                         S d      j                         S )Nz
{:X}
{}{}r   rI  r  )formatr(   r_  r  rN  s     r2   rK  z1MockChunkedEncodingWithoutCRLFOnEnd._encode_chunkt  sS    $$JLLN%j1nF
 &(		 +-
 &(		r!   Nr\  r`  re   r!   r2   r  r  s  s    r!   r  c                      e Zd ZddZy)r  c                ^    t        |      dd|j                          dj                         S )NrH  z
;asd=qwe
rI  )r(   r_  r  rN  s     r2   rK  z/MockChunkedEncodingWithExtensions._encode_chunk}  s+    e*Q|ELLN+;4@GGIIr!   Nr\  r`  re   r!   r2   r  r  |  s    Jr!   r  c                      e Zd ZddZy)r  c                     y)Nr!   re   rN  s     r2   rK  z!MockChunkedNoChunks._encode_chunk  s    r!   Nr\  r`  re   r!   r2   r  r    s    r!   r  c                      e Zd Zedd       Zy)r  c                     y rM   re   )clsr  kwargss      r2   makefilezMockSock.makefile  s    r!   N)r  
typing.Anyrm  ro  r]   r^   )r_   r`   ra   classmethodrn  re   r!   r2   r  r    s     r!   r  )r]   z+typing.Generator[socket.socket, None, None])9
__future__r   r2  http.clientclientr  rg   r1  typingr   base64r   r   r  ior   r   r   testr	   r
   unittestr   r)   urllib3r   urllib3.exceptionsr   r   r   r   r   r   r   urllib3.responser   r   r   r   urllib3.util.responser   urllib3.util.retryr   r   r   r|  fixturerj   rl   r|   r  r  r  r  r  r  r  re   r!   r2   <module>r     s    "    
    @ 5 5 %   "	 	 	  / 4N) N)j 	  8 8(qH qHh+L L^8 ; 8
F$? F*E J(C J
5 
 r!   