a
    !f/                    @   s   d dl Z G dd de jZG dd de jZG dd de jZdd	 ZG d
d deZG dd deZG dd deZ	G dd de	Z
G dd deZG dd deZddejfddZG dd deZdd Ze Z[dS )    Nc                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$S )%Test__Transferhttp://example.com/apic                 C   s   ddl m} |S )Nr   )	_Transfer)gcloud.streaming.transferr   )selfr    r   _/var/www/html/python-backend/venv/lib/python3.9/site-packages/gcloud/streaming/test_transfer.py_getTargetClass   s    zTest__Transfer._getTargetClassc                 O   s   |   |i |S Nr	   r   argskwr   r   r   _makeOne   s    zTest__Transfer._makeOnec                 C   s   ddl m} t }| |}| |j|u  | |j | |j	| | |j
 | |jd u  | |jd u  | |jd | |jd u  | |j d S )Nr   _DEFAULT_CHUNKSIZE   )r   r   _Streamr   
assertTruestreamassertFalseclose_streamassertEqual	chunksizeauto_transfer
bytes_httphttpnum_retriesurlinitialized)r   r   r   xferr   r   r   test_ctor_defaults   s    
z!Test__Transfer.test_ctor_defaultsc                 C   s   t  }t }d}d}| j|d|d||d}| |j|u  | |j | |j| | |j	 | |j
|u  | |j|u  | |j| d S )N      TF)r   r   r   r   r   )r   objectr   r   r   r   r   r   r   r   r   r   r   )r   r   HTTP
CHUNK_SIZEZNUM_RETRIESr    r   r   r   test_ctor_explicit   s$    z!Test__Transfer.test_ctor_explicitc                 C   s.   t  }t }| j||d}| |j|u  d S Nr   )r   r$   r   r   r   )r   r   r%   r    r   r   r    test_bytes_http_fallback_to_http/   s    z/Test__Transfer.test_bytes_http_fallback_to_httpc                 C   s:   t  }t }t }| j||d}||_| |j|u  d S r(   )r   r$   r   r   r   )r   r   r%   Z
BYTES_HTTPr    r   r   r   test_bytes_http_setter5   s    z%Test__Transfer.test_bytes_http_setterc                 C   sF   t  }| |}| t t |_W d    n1 s80    Y  d S r
   )r   r   assertRaises
ValueErrorr$   r   r   r   r    r   r   r   test_num_retries_setter_invalid=   s    
z.Test__Transfer.test_num_retries_setter_invalidc                 C   sD   t  }| |}| t d|_W d    n1 s60    Y  d S )N)r   r   r,   r-   r   r.   r   r   r    test_num_retries_setter_negativeC   s    
z/Test__Transfer.test_num_retries_setter_negativec                 C   sV   t  }t }| |}||| j | |j | |j|u  | |j| ju  d S r
   	r$   r   r   _initializeURLr   r   r   r   r   r%   r   r    r   r   r   /test__initialize_not_already_initialized_w_httpI   s    
z>Test__Transfer.test__initialize_not_already_initialized_w_httpc                 C   s^   ddl m} t }| |}|d | j | |j | t|j	| | |j
| ju  d S )Nr   )Http)Zhttplib2r7   r   r   r3   r4   r   r   
isinstancer   r   )r   r7   r   r    r   r   r   0test__initialize_not_already_initialized_wo_httpR   s    
z?Test__Transfer.test__initialize_not_already_initialized_wo_httpc                 C   sb   t  t   }}t }| j||d}||| j | |j | |j|u  | |j| ju  d S r(   r2   )r   HTTP_1HTTP_2r   r    r   r   r    test__initialize_w_existing_http[   s    z/Test__Transfer.test__initialize_w_existing_httpc                 C   sv   ddl m} d}t t  }}t }| |}||| j | | ||| W d    n1 sh0    Y  d S )Nr   TransferInvalidErrorhttp://example.com/other)gcloud.streaming.exceptionsr>   r$   r   r   r3   r4   r,   )r   r>   ZURL_2r:   r;   r   r    r   r   r   $test__initialize_already_initializedd   s    
z3Test__Transfer.test__initialize_already_initializedc                 C   s0   t  }t }| |}||| j |  d S r
   )r$   r   r   r3   r4   _ensure_initializedr5   r   r   r   test__ensure_initialized_hitn   s
    
z+Test__Transfer.test__ensure_initialized_hitc                 C   sR   ddl m} t }| |}| | |  W d    n1 sD0    Y  d S Nr   r=   )r@   r>   r   r   r,   rB   )r   r>   r   r    r   r   r   test__ensure_initialized_missu   s
    
z,Test__Transfer.test__ensure_initialized_missc                 C   s   t  }| |}|  d S r
   )r   r   _ensure_uninitializedr.   r   r   r   test__ensure_uninitialized_hit|   s    
z-Test__Transfer.test__ensure_uninitialized_hitc                 C   sf   ddl m} t }t }| |}||| j | | |  W d    n1 sX0    Y  d S rD   )	r@   r>   r   r$   r   r3   r4   r,   rF   )r   r>   r   r%   r    r   r   r   test__ensure_uninitialized_miss   s    
z.Test__Transfer.test__ensure_uninitialized_missc                 C   s2   t  }| j|dd}| |j ~| |j d S )NT)r   )r   r   r   _closedr   r.   r   r   r   test___del___closes_stream   s
    z)Test__Transfer.test___del___closes_streamN)__name__
__module____qualname__r4   r	   r   r!   r'   r*   r+   r/   r1   r6   r9   r<   rA   rC   rE   rG   rH   rJ   r   r   r   r   r      s$   			
	r   c                   @   s  e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Z d<d= Z!d>d? Z"d@dA Z#dBdC Z$dDdE Z%dFdG Z&dHdI Z'dJdK Z(dLdM Z)dNdO Z*dPdQ Z+dRdS Z,dTdU Z-dVdW Z.dXdY Z/dZd[ Z0d\d] Z1d^d_ Z2d`da Z3dbdc Z4ddde Z5dfdg Z6dhdi Z7djS )kTest_Downloadr   c                 C   s   ddl m} |S )Nr   )Download)r   rO   )r   rO   r   r   r   r	      s    zTest_Download._getTargetClassc                 O   s   |   |i |S r
   r   r   r   r   r   r      s    zTest_Download._makeOnec                 C   sb   t  }| |}| |j|u  | |jd u  | |jd | |jd u  | |jd u  d S Nr   )	r   r   r   r   _initial_responser   progress
total_sizeencoding)r   r   downloadr   r   r   r!      s    
z Test_Download.test_ctor_defaultsc                 C   s:   t  }d}| j||d}| |j|u  | |j| d S N{   r   )r   r   r   r   r   r   )r   r   r&   rU   r   r   r   test_ctor_w_kwds   s
    zTest_Download.test_ctor_w_kwdsc                 C   s:   t  }d}| j||d}| |j|u  | |j| d S NrW   rS   )r   r   r   r   r   rS   )r   r   SIZErU   r   r   r   test_ctor_w_total_size   s
    z$Test_Download.test_ctor_w_total_sizec              	   C   s   dd l }|  }t }|j|d}t|d}|d W d    n1 sP0    Y  | t |	| W d    n1 s0    Y  W d    n1 s0    Y  d S )Nr   file.outwEXISTING FILE
osr	   _tempdirpathjoinopenwriter,   r-   	from_file)r   rb   klasstempdirfilenamefileobjr   r   r   *test_from_file_w_existing_file_no_override   s    (z8Test_Download.test_from_file_w_existing_file_no_overridec              	   C   s   dd l }|  }t }|j|d}t|d}|d W d    n1 sP0    Y  |j|ddd}| |j	 ~t|d }| 
| d	 W d    n1 s0    Y  W d    n1 s0    Y  d S )
Nr   r^   r_   r`   TF)	overwriter   rb    )rb   r	   rc   rd   re   rf   rg   rh   r   r   r   read)r   rb   ri   rj   rk   rl   rU   r   r   r   :test_from_file_w_existing_file_w_override_wo_auto_transfer   s    (zHTest_Download.test_from_file_w_existing_file_w_override_wo_auto_transferc                 C   sH   t  }|  }||}| |j|u  | |j | |jd u  d S r
   )r   r	   from_streamr   r   r   rS   )r   r   ri   rU   r   r   r   test_from_stream_defaults   s    
z'Test_Download.test_from_stream_defaultsc                 C   sd   d}d}t  }|  }|j|d||d}| |j|u  | |j | |j| | |j	| d S )Nr"   rW   F)r   rS   r   )
r   r	   rs   r   r   r   r   r   rS   r   )r   r&   r\   r   ri   rU   r   r   r   test_from_stream_explicit   s    z'Test_Download.test_from_stream_explicitc                 C   s\   d}| j t |d}ti d}ti d}||| | |jddi | |jddi d S )	Nd   rX   )headersquery_paramsRangez
bytes=0-99Zaltmedia)r   r   _Dummyconfigure_requestr   rw   ry   )r   r&   rU   requesturl_builderr   r   r   test_configure_request   s    

z$Test_Download.test_configure_requestc                 C   s,   i }|  t }|| | |jd d S rP   r   r   
_set_totalr   rS   r   inforU   r   r   r   2test__set_total_wo_content_range_wo_existing_total   s    
z@Test_Download.test__set_total_wo_content_range_wo_existing_totalc                 C   s4   d}i }| j t |d}|| | |j| d S rZ   r   r   r\   r   rU   r   r   r   1test__set_total_wo_content_range_w_existing_total   s
    
z?Test_Download.test__set_total_wo_content_range_w_existing_totalc                 C   s8   d}ddi}| j t |d}|| | |jd d S )NrW   content-rangezbytes 123-234/4567r[   i  r   r   r   r   r   0test__set_total_w_content_range_w_existing_total   s
    
z>Test_Download.test__set_total_w_content_range_w_existing_totalc                 C   s0   ddi}|  t }|| | |jd d S )Nr   zbytes 123-234/*r   r   r   r   r   r   0test__set_total_w_content_range_w_asterisk_total   s    
z>Test_Download.test__set_total_w_content_range_w_asterisk_totalc                 C   sj   ddl m} t }| t }|d | j | |  |j|t	 d W d    n1 s\0    Y  d S )Nr   r=   r)   )
r@   r>   _Requestr   r   r3   r4   r,   initialize_downloadr$   )r   r>   r~   rU   r   r   r   ,test_initialize_download_already_initialized  s    z:Test_Download.test_initialize_download_already_initializedc                 C   sL   t  }t }| jt dd}||| | |j|u  | |j|j d S )NFr   )	r   r$   r   r   r   r   r   r   r   )r   r~   r   rU   r   r   r   (test_initialize_download_wo_autotransfer  s    z6Test_Download.test_initialize_download_wo_autotransferc           
   	   C   s   ddl m} ddlm} ddlm} ddlm} t }t	 }| j
t dd}t|j}t|}	|||	dF | | ||| W d    n1 s0    Y  W d    n1 s0    Y  | t|	jd	 | |	jd d |u  d S )
Nr   http_client_Monkeytransfer	HttpErrorTr   make_api_request   )	six.movesr   gcloud._testingr   gcloud.streamingr   r@   r   r   r$   r   r   _makeResponseBAD_REQUEST_MakeRequestr,   r   r   len
_requested)
r   r   r   MUTr   r~   r   rU   response	requesterr   r   r   /test_initialize_download_w_autotransfer_failing  s    
Hz=Test_Download.test_initialize_download_w_autotransfer_failingc                 C   s  ddl m} ddlm} ddlm} d}t }t }d|i}| jt	 dd}t
|j|}	t|	}
|||
d	 ||| W d    n1 s0    Y  | |jd u  | |jd | |j|u  | |j| | t|
jd
 | |
jd d |u  d S )Nr   r   r   r   r?   zcontent-locationTr   r   r   )r   r   r   r   r   r   r   r$   r   r   r   
NO_CONTENTr   r   r   rQ   r   rS   r   r   r   r   )r   r   r   r   ZREDIRECT_URLr~   r   r   rU   r   r   r   r   r   :test_initialize_download_w_autotransfer_w_content_location'  s$    *zHTest_Download.test_initialize_download_w_autotransfer_w_content_locationc                 C   sR   ddl m} | t }| | |dd W d    n1 sD0    Y  d S )Nr   r=   r0   )r@   r>   r   r   r,   _normalize_start_endr   r>   rU   r   r   r   ,test__normalize_start_end_w_end_w_start_lt_0>  s    z:Test_Download.test__normalize_start_end_w_end_w_start_lt_0c                 C   s`   ddl m} | t }|ddi | | |dd W d    n1 sR0    Y  d S )Nr   r=   r   bytes 0-1/2   r@   r>   r   r   r   r,   r   r   r   r   r   0test__normalize_start_end_w_end_w_start_gt_totalE  s
    z>Test_Download.test__normalize_start_end_w_end_w_start_gt_totalc                 C   s`   ddl m} | t }|ddi | | |dd W d    n1 sR0    Y  d S )Nr   r=   r   r   r   r   r   r   r   r   (test__normalize_start_end_w_end_lt_startM  s
    z6Test_Download.test__normalize_start_end_w_end_lt_startc                 C   s2   |  t }|ddi | |ddd d S )Nr   r   r      r   r   r   r   r   r   r   r   rU   r   r   r   (test__normalize_start_end_w_end_gt_startU  s    z6Test_Download.test__normalize_start_end_w_end_gt_startc                 C   sB   |  t }|ddi | |dd | |dd d S )Nr   r   )r   r   r0   r   r   r   r   r   r   -test__normalize_start_end_wo_end_w_start_lt_0Z  s    z;Test_Download.test__normalize_start_end_wo_end_w_start_lt_0c                 C   sB   |  t }|ddi | |dd | |dd d S )Nr   zbytes 0-1/100r   )r   c   r   )r   r   r   r   r   r   r   -test__normalize_start_end_wo_end_w_start_ge_0`  s    z;Test_Download.test__normalize_start_end_wo_end_w_start_ge_0c                 C   s4   t  }| t }||d | |jd d d S )Nr0   rangezbytes=-1r   r   r   Z_set_range_headerr   rw   r   r~   rU   r   r   r   #test__set_range_header_w_start_lt_0f  s    z1Test_Download.test__set_range_header_w_start_lt_0c                 C   s4   t  }| t }||d | |jd d d S )Nr   r   zbytes=0-r   r   r   r   r   *test__set_range_header_w_start_ge_0_wo_endl  s    z8Test_Download.test__set_range_header_w_start_ge_0_wo_endc                 C   s6   t  }| t }||dd | |jd d d S )Nr   r   r   z	bytes=0-1r   r   r   r   r   )test__set_range_header_w_start_ge_0_w_endr  s    z7Test_Download.test__set_range_header_w_start_ge_0_w_endc                 C   s$   |  t }| |ddd d S )Nr0   r   r   r   r   _compute_end_byter   r   r   r   )test__compute_end_byte_w_start_lt_0_w_endx  s    z7Test_Download.test__compute_end_byte_w_start_lt_0_w_endc                 C   s.   d}| j t |d}| |jdddd d S )Nr   rX   r   TZ
use_chunks   r   r   r&   rU   r   r   r   7test__compute_end_byte_w_start_ge_0_wo_end_w_use_chunks|  s    zETest_Download.test__compute_end_byte_w_start_ge_0_wo_end_w_use_chunksc                 C   sH   d}| j t |d}| |jddddd | |jddddd d S )Nr   rX   r   r   Tr   r   r   r   r   r   r   6test__compute_end_byte_w_start_ge_0_w_end_w_use_chunks  s    zDTest_Download.test__compute_end_byte_w_start_ge_0_w_end_w_use_chunksc                 C   sV   d}| j t |d}|ddi | |jddddd	 | |jdd
ddd
 d S )N2   rX   r   bytes 0-1/10r   rv   Fr   	   r#   r   r   r   r   r   r   r   r   r   6test__compute_end_byte_w_start_ge_0_w_end_w_total_size  s    zDTest_Download.test__compute_end_byte_w_start_ge_0_w_end_w_total_sizec                 C   s<   d}| j t |d}|ddi | |jdddd d S )	Nr   rX   r   r   r   Fr   r   r   r   r   r   r   7test__compute_end_byte_w_start_ge_0_wo_end_w_total_size  s    zETest_Download.test__compute_end_byte_w_start_ge_0_wo_end_w_total_sizec                 C   sR   ddl m} | t }| | |dd W d    n1 sD0    Y  d S Nr   r=   
   )r@   r>   r   r   r,   
_get_chunkr   r   r   r   test__get_chunk_not_initialized  s    z-Test_Download.test__get_chunk_not_initializedc           
      C   s   ddl m} ddlm} ddlm} t }| t }|	|| j
 t|j}t|}||t|d |dd}W d    n1 s0    Y  | ||u  | t|jd |jd d }	| |	jd d	 d S )
Nr   r   r   r   Requestr   r   r   r   z
bytes=0-10)r   r   r   r   r   r   r$   r   r   r3   r4   r   OKr   r   r   r   r   r   r   rw   )
r   r   r   r   r   rU   r   r   foundr~   r   r   r   test__get_chunk  s"    
*zTest_Download.test__get_chunkc                 C   sf   ddl m} ddlm} | t }t|j}| | |	| W d    n1 sX0    Y  d S Nr   r   r   )
r@   r   r   r   r   r   r   	FORBIDDENr,   _process_responser   r   r   rU   r   r   r   r   "test__process_response_w_FORBIDDEN  s    
z0Test_Download.test__process_response_w_FORBIDDENc                 C   sf   ddl m} ddlm} | t }t|j}| | |	| W d    n1 sX0    Y  d S r   )
r@   r   r   r   r   r   r   	NOT_FOUNDr,   r   r   r   r   r   "test__process_response_w_NOT_FOUND  s    
z0Test_Download.test__process_response_w_NOT_FOUNDc                 C   sf   ddl m} ddlm} | t }t|j}| | |	| W d    n1 sX0    Y  d S )Nr   TransferRetryErrorr   )
r@   r   r   r   r   r   r   r   r,   r   )r   r   r   rU   r   r   r   r   $test__process_response_w_other_error  s    
z2Test_Download.test__process_response_w_other_errorc                 C   sr   ddl m} t }| |}t|jdd}||}| ||u  | |j	dg | |j
d | |jd  d S )Nr   r   r   contentr   r   r   r   r   r   r   r   r   r   _writtenrR   rT   r   r   r   rU   r   r   r   r   r   'test__process_response_w_OK_wo_encoding  s    

z5Test_Download.test__process_response_w_OK_wo_encodingc                 C   sz   ddl m} t }| |}ddi}t|j|d}||}| ||u  | |j	dg | |j
d | |jd d S )Nr   r   zcontent-encodingZblahPARTIAL   r   )r   r   r   rU   r   r   r   r   r   r   3test__process_response_w_PARTIAL_CONTENT_w_encoding  s    

zATest_Download.test__process_response_w_PARTIAL_CONTENT_w_encodingc                 C   sl   ddl m} t }| |}t|j}||}| ||u  | |j	g  | |j
d | |jd  d S )Nr   r   )r   r   r   r   r   REQUESTED_RANGE_NOT_SATISFIABLEr   r   r   r   rR   rT   r   r   r   r   8test__process_response_w_REQUESTED_RANGE_NOT_SATISFIABLE  s    

zFTest_Download.test__process_response_w_REQUESTED_RANGE_NOT_SATISFIABLEc                 C   sp   ddl m} t }| |}t|jd}||}| ||u  | |j	dg | |j
d | |jd  d S )Nr   r   )status_code )r   r   r   r   r   r   r   r   r   r   rR   rT   r   r   r   r   #test__process_response_w_NO_CONTENT  s    

z1Test_Download.test__process_response_w_NO_CONTENTc                 C   sR   ddl m} | t }| | |dd W d    n1 sD0    Y  d S r   )r@   r>   r   r   r,   	get_ranger   r   r   r   test_get_range_not_initialized  s    z,Test_Download.test_get_range_not_initializedc                 C   s  ddl m} ddlm} ddlm} d}t|}d|f }d|d |f }t }t }	| 	|	}
|

|| j d	|i}t|j||}t|}||t|d
 |
d| W d    n1 s0    Y  | t|jd |jd d }| |jd|i | |	j|g | |
j| d S )Nr   r   r   r   
   ABCDEFGHIJ
bytes=0-%dbytes 0-%d/%dr   r   r   r   r   r   r   r   r   r   r   r$   r   r   r3   r4   r   r   r   r   r   r   r   r   rw   r   rS   )r   r   r   r   CONTENTLEN	REQ_RANGE
RESP_RANGEr   r   rU   r   r   r   r~   r   r   r   %test_get_range_wo_total_size_complete  s0    

*z3Test_Download.test_get_range_wo_total_size_completec                 C   s@  ddl m} ddlm} ddlm} d}t|}d}d}d||| d	 f }d
||d	 |f }	t }
t }| j	||d}|
|
| j d|	i}t|j|||d  }t|}||t|d || W d    n1 s0    Y  | t|jd	 |jd d }| |jd|i | |j||d  g | |j| d S )Nr   r   r   r   r   r   rW   bytes=%d-%dr   bytes %d-%d/%drX   r   r   r   r   )r   r   r   r   r   r   STARTr&   r   r   r   r   rU   r   r   r   r~   r   r   r   #test_get_range_wo_total_size_wo_end  s4    (z1Test_Download.test_get_range_wo_total_size_wo_endc                 C   s4  ddl m} ddlm} ddlm} d}t|}d}d|f }d||f }t }	t }
| j	|
|d	}|
|	| j d
|i}t|j||d | }||_t|}||t|d |d| W d    n1 s0    Y  | t|jd |jd d }| |jd|i | |
j|d | g | |j| d S )Nr   r   r   r   r   r   r   r   r[   r   r   r   r   )r   r   r   r   r   r   r   r$   r   r   r3   r4   r   r   lengthr   r   r   r   r   r   rw   r   rS   )r   r   r   r   r   r   ZPARTIAL_LENr   r   r   r   rU   r   r   r   r~   r   r   r   #test_get_range_w_total_size_partial4  s4    
*z1Test_Download.test_get_range_w_total_size_partialc              	   C   sf  ddl m} ddlm} ddlm} ddlm} d}t|}d}d}d	||| d
 f }	d||d
 |f }
t	 }t
 }| j||d}||| j d|
i}t|j|}t|}||t|dD | | || W d    n1 s0    Y  W d    n1 s0    Y  | t|jd
 |jd d }| |jd|	i | |jdg | |j| d S )Nr   r   r   r   r   r   r   rW   r   r   r   rX   r   r   r   r   )r   r   r   r   r   r   r@   r   r   r$   r   r   r3   r4   r   r   r   r   r,   r   r   r   r   rw   r   rS   )r   r   r   r   r   r   r   r   r&   r   r   r   r   rU   r   r   r   r~   r   r   r   test_get_range_w_empty_chunkQ  s8    Hz*Test_Download.test_get_range_w_empty_chunkc                 C   s*  ddl m} ddlm} ddlm} d}t|}d}d|d f }d	|d |f }t }	t }
| j	|
||d
}|
|	| j d|i}t|j||}t|}||t|d |jddd W d    n1 s0    Y  | t|jd |jd d }| |jd|i | |
j|g | |j| d S )Nr   r   r   r   r   r   r   r   r   rS   r   r   r   Fr   r   r   )r   r   r   r   r   r   r&   r   r   r   r   rU   r   r   r   r~   r   r   r   )test_get_range_w_total_size_wo_use_chunksp  s2    ,z7Test_Download.test_get_range_w_total_size_wo_use_chunksc                 C   s  ddl m} ddlm} ddlm} d}t|}d}d|d f }d	|d |f }d
||d f }	d||d |f }
t }t }| j	||d}|
|| j d|i}t|j||d | }d|
i}t|j|||d  }t||}||t|d |d W d    n1 s0    Y  | t|jd |jd d }| |jd|i |jd d }| |jd|	i | |jddg | |j| d S )Nr   r   r   r   s   ABCDEr   r   r   r   r   r   rX   r   r   r   r   s   ABCs   DE)r   r   r   r   r   r   r   r$   r   r   r3   r4   r   PARTIAL_CONTENTr   r   r   r   r   r   r   rw   r   rS   )r   r   r   r   r   r   r&   ZREQ_RANGE_1RESP_RANGE_1REQ_RANGE_2RESP_RANGE_2r   r   rU   info_1
response_1info_2
response_2r   	request_1	request_2r   r   r    test_get_range_w_multiple_chunks  sF    


*z.Test_Download.test_get_range_w_multiple_chunksc                 C   sN   ddl m} | t }| | |  W d    n1 s@0    Y  d S rD   )r@   r>   r   r   r,   stream_filer   r   r   r    test_stream_file_not_initialized  s    z.Test_Download.test_stream_file_not_initializedc           	      C   s   ddl m} d}t|}d|d |f }t }| j||d}d|i}t|j|||_t }|	|t
j |  | |j|g | |j| d S )Nr   r   r   r   r   r[   r   )r   r   r   r   r   r   r   rQ   r$   r3   r   r4   r  r   r   rS   )	r   r   r   r   r   r   rU   r   r   r   r   r   ,test_stream_file_w_initial_response_complete  s    z:Test_Download.test_stream_file_w_initial_response_completec                 C   sx  ddl m} ddlm} ddlm} d}d}t|}d|d |f }d	||d f }d
||d |f }	t }
t }| j	|
|d}d|i}t
|j||d | |_d|	i}t
|j|||d  }t|}||tj t }||t|d |  W d    n1 s0    Y  | t|jd |jd d }| |jd|i | |
j|d | ||d  g | |j| d S )Nr   r   r   r   r   s   ABCDEFr   r   r   r   rX   r   r   r   )r   r   r   r   r   r   r   r   r$   r   r   r  rQ   r   r   r3   r   r4   r  r   r   r   rw   r   rS   )r   r   r   r   r&   r   r   r  r  r  r   r   rU   r  r	  r
  r   r~   r   r   r   .test_stream_file_w_initial_response_incomplete  sF    (z<Test_Download.test_stream_file_w_initial_response_incompletec                 C   s&  ddl m} ddlm} ddlm} d}t|}d}d|d  }d	|d |f }t }	t }
| j	|	|d
}d|i}t
|j||}t|}||
tj t }||t|d |  W d    n1 s0    Y  | t|jd |jd d }| |jd|i | |	j|g | |j| d S )Nr   r   r   r   r   rW   r   r   r   rX   r   r   r   )r   r   r   r   r   r   r   r   r$   r   r   r   r   r3   r   r4   r  r   r   r   rw   r   rS   )r   r   r   r   r   r   r&   r   r   r   r   rU   r   r   r   r~   r   r   r   2test_stream_file_wo_initial_response_wo_total_size  s4    &z@Test_Download.test_stream_file_wo_initial_response_wo_total_sizeN)8rK   rL   rM   r4   r	   r   r!   rY   r]   rm   rr   rt   ru   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   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r   r   r   r   rN      sj   	
	$%rN   c                   @   sD  e Zd ZdZdZdZdd ZefddZdd	 Zd
d Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Z d:d; Z!d<d= Z"d>d? Z#d@dA Z$dBdC Z%dDdE Z&dFdG Z'dHdI Z(dJdK Z)dLdM Z*dNdO Z+dPdQ Z,dRdS Z-dTdU Z.dVdW Z/dXdY Z0dZd[ Z1d\d] Z2d^d_ Z3d`da Z4dbdc Z5ddde Z6dfdg Z7dhdi Z8djdk Z9dldm Z:dndo Z;dpdq Z<drds Z=dtdu Z>dvdw Z?dxdy Z@dzd{ ZAd|d} ZBd~d ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdS )Test_Uploadr   zapplication/octet-streamz#http://example.com/upload/id=foobarc                 C   s   ddl m} |S )Nr   )Upload)r   r  )r   r  r   r   r   r	     s    zTest_Upload._getTargetClassc                 O   s   |   ||g|R i |S r
   r   )r   r   	mime_typer   r   r   r   r   r     s    zTest_Upload._makeOnec                 C   s   ddl m} t }| |}| |j|u  | |jd u  | |jd u  | |j	 | 
|j| j | 
|jd | |jd u  | |jd u  | 
|j| d S )Nr   r   )r   r   r   r   r   r   _final_response_server_chunk_granularityr   completer   r  	MIME_TYPErR   strategyrS   r   )r   r   r   uploadr   r   r   r!     s    
zTest_Upload.test_ctor_defaultsc                 C   sJ   t  }d}| j||d}| |j|u  | |j| j | |j| d S rV   )r   r   r   r   r   r  r  r   )r   r   r&   r  r   r   r   rY   '  s    zTest_Upload.test_ctor_w_kwdsc                 C   sD   |   }d}| t || W d    n1 s60    Y  d S )Nz~nosuchuser/file.txt)r	   r,   OSErrorrh   )r   ri   rk   r   r   r   test_from_file_w_nonesuch_file/  s    z*Test_Upload.test_from_file_w_nonesuch_filec              	   C   s   dd l }|  }d}t }|j|d}t|d}|| W d    n1 sT0    Y  | t |	| W d    n1 s0    Y  W d    n1 s0    Y  d S )Nr   s%   EXISTING FILE W/ UNGUESSABLE MIMETYPEfile.unguessablewbra   )r   rb   ri   r   rj   rk   rl   r   r   r   1test_from_file_wo_mimetype_w_unguessable_filename5  s    (z=Test_Upload.test_from_file_wo_mimetype_w_unguessable_filenamec              	   C   s   dd l }|  }d}t }|j|d}t|d}|| W d    n1 sT0    Y  ||}| |j	d | 
|j | |jt| |j  W d    n1 s0    Y  d S )Nr   #   EXISTING FILE W/ GUESSABLE MIMETYPEzfile.txtr  
text/plain)rb   r	   rc   rd   re   rf   rg   rh   r   r  r   r   rS   r   _streamclose)r   rb   ri   r   rj   rk   rl   r  r   r   r   /test_from_file_wo_mimetype_w_guessable_filename@  s    (
z;Test_Upload.test_from_file_wo_mimetype_w_guessable_filenamec           	   	   C   s   dd l }|  }d}d}t }|j|d}t|d}|| W d    n1 sX0    Y  |j|| jd|d}| 	|j
| j | |j | 	|jt| | 	|j| |j  W d    n1 s0    Y  d S )Nr   r!  r   r  r  F)r  r   r   )rb   r	   rc   rd   re   rf   rg   rh   r  r   r  r   r   rS   r   r   r#  r$  )	r   rb   ri   r   r&   rj   rk   rl   r  r   r   r   0test_from_file_w_mimetype_w_auto_transfer_w_kwdsN  s&    (z<Test_Upload.test_from_file_w_mimetype_w_auto_transfer_w_kwdsc                 C   sJ   |   }t }| t |j|d d W d    n1 s<0    Y  d S N)r  )r	   r   r,   r-   rs   )r   ri   r   r   r   r   test_from_stream_wo_mimetypeb  s    z(Test_Upload.test_from_stream_wo_mimetypec                 C   sL   |   }t }|j|| jd}| |j| j | |j | |jd  d S r'  )	r	   r   rs   r  r   r  r   r   rS   )r   ri   r   r  r   r   r   rt   h  s    z%Test_Upload.test_from_stream_defaultsc                 C   sh   |   }t }d}d}|j|| jd||d}| |j| j | |j | |j| | |j	| d S )Nr   r   F)r  r   rS   r   )
r	   r   rs   r  r   r  r   r   rS   r   )r   ri   r   r\   r&   r  r   r   r   ru   p  s    z%Test_Upload.test_from_stream_explicitc                 C   sr   |  t }| t t |_W d    n1 s40    Y  | t d|_W d    n1 sd0    Y  d S )Nunknown)r   r   r,   r-   r$   r  r   r  r   r   r   test_strategy_setter_invalid  s
    &z(Test_Upload.test_strategy_setter_invalidc                 C   s0   ddl m} | t }||_| |j| d S Nr   SIMPLE_UPLOAD)r   r.  r   r   r  r   r   r.  r  r   r   r   "test_strategy_setter_SIMPLE_UPLOAD  s    z.Test_Upload.test_strategy_setter_SIMPLE_UPLOADc                 C   s0   ddl m} | t }||_| |j| d S )Nr   RESUMABLE_UPLOAD)r   r2  r   r   r  r   r   r2  r  r   r   r   %test_strategy_setter_RESUMABLE_UPLOAD  s    z1Test_Upload.test_strategy_setter_RESUMABLE_UPLOADc                 C   sb   ddl m} d}| t}t }||tj | | ||_	W d    n1 sT0    Y  d S )Nr   r=   rW   )
r@   r>   r   r   r$   r3   r   r4   r,   rS   )r   r>   r\   r  r   r   r   r   "test_total_size_setter_initialized  s    
z.Test_Upload.test_total_size_setter_initializedc                 C   s&   d}|  t}||_| |j| d S NrW   )r   r   rS   r   )r   r\   r  r   r   r   &test_total_size_setter_not_initialized  s    
z2Test_Upload.test_total_size_setter_not_initializedc                 C   sN   ddl m} tdddd}t }| t}||_||| | |j| d S )Nr   r1  /resumable/endpointT/upload/endpointresumable_pathsimple_multipartsimple_path)	r   r2  r|   r   r   r   r  _set_default_strategyr   )r   r2  configr~   r  r   r   r   .test__set_default_strategy_w_existing_strategy  s    
z:Test_Upload.test__set_default_strategy_w_existing_strategyc                 C   sJ   ddl m} td ddd}t }| t }||| | |j| d S )Nr   r-  Tr9  r:  )	r   r.  r|   r   r   r   r>  r   r  )r   r.  r?  r~   r  r   r   r   ,test__set_default_strategy_wo_resumable_path  s    z8Test_Upload.test__set_default_strategy_wo_resumable_pathc                 C   sV   ddl m} ddl m} t }t }| jt |d d}||| | |j	| d S )Nr   )RESUMABLE_UPLOAD_THRESHOLDr1  r   r[   )
r   rB  r2  _UploadConfigr   r   r   r>  r   r  )r   rB  r2  r?  r~   r  r   r   r   5test__set_default_strategy_w_total_size_gt_threshhold  s    
zATest_Upload.test__set_default_strategy_w_total_size_gt_threshholdc                 C   sX   ddl m} d}t }d|_t|d}| jt t|d}||| | 	|j
| d S )Nr   r1  r   Fbodyr[   )r   r2  rC  r<  r   r   r   r   r>  r   r  r   r2  r   r?  r~   r  r   r   r   .test__set_default_strategy_w_body_wo_multipart  s    
z:Test_Upload.test__set_default_strategy_w_body_wo_multipartc                 C   sX   ddl m} d}t }d |_t|d}| jt t|d}||| | 	|j
| d S )Nr   r1  r   rE  r[   )r   r2  rC  r=  r   r   r   r   r>  r   r  rG  r   r   r   <test__set_default_strategy_w_body_w_multipart_wo_simple_path  s    
zHTest_Upload.test__set_default_strategy_w_body_w_multipart_wo_simple_pathc                 C   sR   ddl m} d}t }t|d}| jt t|d}||| | |j	| d S )Nr   r-  r   rE  r[   )
r   r.  rC  r   r   r   r   r>  r   r  )r   r.  r   r?  r~   r  r   r   r   ;test__set_default_strategy_w_body_w_multipart_w_simple_path  s    
zGTest_Upload.test__set_default_strategy_w_body_w_multipart_w_simple_pathc                 C   sl   d}t  }||_t }t }| jt |d d}| t |||| W d    n1 s^0    Y  d S )N  r   r[   )	rC  max_sizer   r|   r   r   r,   r-   r}   )r   ZMAX_SIZEr?  r~   r   r  r   r   r   /test_configure_request_w_total_size_gt_max_size  s    z;Test_Upload.test_configure_request_w_total_size_gt_max_sizec                 C   s`   t  }d|_t }t }| t }| t |||| W d    n1 sR0    Y  d S )N)ztext/*)	rC  acceptr   r|   r   r   r,   r-   r}   )r   r?  r~   r   r  r   r   r   )test_configure_request_w_invalid_mimetype  s    z5Test_Upload.test_configure_request_w_invalid_mimetypec                 C   s   ddl m} d}t }t }ti d}| t|}||_|||| | 	|j
ddi | 	|j|j | 	|jd| ji | 	|j| | 	|jd d S )	Nr   r-     CONTENTrx   
uploadTyper{   content-typez<media body>)r   r.  rC  r   r|   r   r   r  r}   r   ry   relative_pathr=  rw   r  rF  loggable_body)r   r.  r   r?  r~   r   r  r   r   r   'test_configure_request_w_simple_wo_body  s    
z3Test_Upload.test_configure_request_w_simple_wo_bodyc                 C   s  ddl m} ddlm} d}d}t }t|d}d|jd< ti d	}| t	|}||_
|||| | |jd
di | |j|j | t|jdg dd |jd dD \}	}
| |	d | |
d | |
d d||
tdd  }|j|dd }| t|d t }||d  }| t|jddd | |j|d ||d  }| t|j| jddd | |j|d | d|jv  d S )Nr   )	_to_bytesr-  rP  s   BODYrE  r"  rR  rx   rQ  	multipartc                 S   s   g | ]}|  qS r   )strip).0xr   r   r   
<listcomp>  s   zFTest_Upload.test_configure_request_w_simple_w_body.<locals>.<listcomp>;zmultipart/relatedzboundary="==z=="s   --z
boundary="r0   r   r   z1.0)Content-TypeMIME-Versionasciibinary)r]  zContent-Transfer-Encodingr^  s   <media body>)Zgcloud._helpersrV  r   r.  rC  r   rw   r|   r   r   r  r}   r   ry   rS  r=  listsplitr   
startswithendswithr   rF  _email_chunk_parserrX  dict_headers_payloaddecoder  rT  )r   rV  r.  r   ZBODYr?  r~   r   r  ctypeboundarydividerchunksZparse_chunkZtext_msgZapp_msgr   r   r   &test_configure_request_w_simple_w_body  sP    



z2Test_Upload.test_configure_request_w_simple_w_bodyc                 C   s   ddl m} d}t }t }ti d}| t|}||_|||| | 	|j
ddi | 	|j|j | 	|jd| ji d S )Nr   r1  rP  rx   rQ  	resumableX-Upload-Content-Type)r   r2  rC  r   r|   r   r   r  r}   r   ry   rS  r;  rw   r  )r   r2  r   r?  r~   r   r  r   r   r   0test_configure_request_w_resumable_wo_total_size2  s    
z<Test_Upload.test_configure_request_w_resumable_wo_total_sizec                 C   s   ddl m} d}t|}t }t }ti d}| t|}||_||_	|
||| | |jddi | |j|j | |j| jd|f d d S )	Nr   r1  rP  rx   rQ  ro  %d)rp  zX-Upload-Content-Length)r   r2  r   rC  r   r|   r   r   rS   r  r}   r   ry   rS  r;  rw   r  )r   r2  r   r   r?  r~   r   r  r   r   r   /test_configure_request_w_resumable_w_total_sizeC  s"    
z;Test_Upload.test_configure_request_w_resumable_w_total_sizec                 C   s*   ddl m} | t }||_|  d S r,  )r   r.  r   r   r  refresh_upload_stater/  r   r   r   +test_refresh_upload_state_w_simple_strategyW  s    z7Test_Upload.test_refresh_upload_state_w_simple_strategyc                 C   s`   ddl m} ddlm} | t }||_| | |  W d    n1 sR0    Y  d S )Nr   r=   r1  )	r@   r>   r   r2  r   r   r  r,   rt  r   r>   r2  r  r   r   r   )test_refresh_upload_state_not_initialized]  s    z5Test_Upload.test_refresh_upload_state_not_initializedc                 C   s  ddl m} ddlm} ddlm} ddlm} d}t|}d|d |f }t	 }t
 }	| j|	|d	}
||
_|
|tj d
|i}t|j||}t|}||t|d |
  W d    n1 s0    Y  | |
j | |
j| | |	 | | |
j|u  d S Nr   r   r   r   r1  r   r   r   r[   r   r   )r   r   r   r   r   r   r   r2  r   r$   r   r   r  r3   r   r4   r   r   r   rt  r   r  r   rR   tellr  r   r   r   r   r2  r   r   r   r   r   r  r   r   r   r   r   r   test_refresh_upload_state_w_OKe  s0    &z*Test_Upload.test_refresh_upload_state_w_OKc                 C   s  ddl m} ddlm} ddlm} ddlm} d}t|}d|d |f }t	 }t
 }	| j|	|d	}
||
_|
|tj d
|i}t|j||}t|}||t|d |
  W d    n1 s0    Y  | |
j | |
j| | |	 | | |
j|u  d S rx  )r   r   r   r   r   r   r   r2  r   r$   r   r   r  r3   r   r4   r   CREATEDr   rt  r   r  r   rR   ry  r  rz  r   r   r   #test_refresh_upload_state_w_CREATED  s0    &z/Test_Upload.test_refresh_upload_state_w_CREATEDc                 C   s  ddl m} ddlm} ddlm} ddlm} d}t|}d}t	 }t
 }	| j|	|d}
||
_|
|tj d	d
|d f i}t|||}t|}||t|d |
  W d    n1 s0    Y  | |
j | |
j| | |	 | | |
j|u  d S )Nr   r   RESUME_INCOMPLETEr   r1  r   r   r[   r   z0-%dr   r   r   r   gcloud.streaming.http_wrapperr  r   r   r   r2  r   r$   r   r   r  r3   r   r4   r   r   rt  r   r  r   rR   ry  r  )r   r   r  r   r2  r   r   ZLASTr   r   r  r   r   r   r   r   r   5test_refresh_upload_state_w_RESUME_INCOMPLETE_w_range  s0    &zATest_Upload.test_refresh_upload_state_w_RESUME_INCOMPLETE_w_rangec                 C   s   ddl m} ddlm} ddlm} ddlm} d}t|}t	 }t
 }| j||d}	||	_|	|tj t||d}
t|
}||t|d	 |	  W d    n1 s0    Y  | |	j | |	jd | | d | |	j|
u  d S )
Nr   r   r~  r   r1  r   r[   r   r   r  )r   r   r  r   r2  r   r   r   r   r  r   r   r   r   r   6test_refresh_upload_state_w_RESUME_INCOMPLETE_wo_range  s,    &zBTest_Upload.test_refresh_upload_state_w_RESUME_INCOMPLETE_wo_rangec              	   C   s   ddl m} ddlm} ddlm} ddlm} ddlm	} d}t
|}t }t }	| j|	|d}
||
_|
|tj t|j}t|}||t|d	B | | |
  W d    n1 s0    Y  W d    n1 s0    Y  d S )
Nr   r   r   r   r   r1  r   r[   r   )r   r   r   r   r   r   r@   r   r   r2  r   r$   r   r   r  r3   r   r4   r   r   r   r,   rt  )r   r   r   r   r   r2  r   r   r   r   r  r   r   r   r   r   !test_refresh_upload_state_w_error  s(    
z-Test_Upload.test_refresh_upload_state_w_errorc                 C   s,   |  t }td }| ||d u  d S r
   )r   r   r   r   _get_range_headerr   r  r   r   r   r   test__get_range_header_miss  s    z'Test_Upload.test__get_range_header_missc                 C   s0   |  t }td ddi}| ||d d S )Nrz   123r   r   r   r   r  r  r   r   r   test__get_range_header_w_Range  s    z*Test_Upload.test__get_range_header_w_Rangec                 C   s0   |  t }td ddi}| ||d d S )Nr   r  r  r  r   r   r   test__get_range_header_w_range  s    z*Test_Upload.test__get_range_header_w_rangec                 C   sP   t  }| t }| t  |j|t d W d    n1 sB0    Y  d S r(   )r   r   r   r,   r-   initialize_uploadr$   )r   r~   r  r   r   r   "test_initialize_upload_no_strategy  s    z.Test_Upload.test_initialize_upload_no_strategyc                 C   s8   ddl m} t }| t }||_|j|t d d S )Nr   r-  r)   )r   r.  r   r   r   r  r  r$   )r   r.  r~   r  r   r   r   $test_initialize_upload_simple_w_http  s
    z0Test_Upload.test_initialize_upload_simple_w_httpc                 C   s|   ddl m} ddlm} t }| t }||_|d | j	 | 
|  |j|t d W d    n1 sn0    Y  d S )Nr   r=   r1  r)   )r@   r>   r   r2  r   r   r   r  r3   r4   r,   r  r$   )r   r>   r2  r~   r  r   r   r   4test_initialize_upload_resumable_already_initialized  s    z@Test_Upload.test_initialize_upload_resumable_already_initializedc           
   	   C   s   ddl m} ddlm} ddlm} ddlm} ddlm	} t
 }| t }||_t|j}t|}	|||	dJ | |  |j|t d W d    n1 s0    Y  W d    n1 s0    Y  d S )	Nr   r   r   r   r   r1  r   r)   )r   r   r   r   r   r   r@   r   r   r2  r   r   r   r  r   r   r   r,   r  r$   )
r   r   r   r   r   r2  r~   r  r   r   r   r   r   ?test_initialize_upload_w_http_resumable_not_initialized_w_error  s    
zKTest_Upload.test_initialize_upload_w_http_resumable_not_initialized_w_errorc           
      C   s   ddl m} ddlm} ddlm} ddlm} t }| j	t
 dd}||_d| ji}t|j|}t|}	|||	d	  |j|t d
 W d    n1 s0    Y  | |jd  | |j| j | |	jg  | t|	jd | |	jd d |u  d S )Nr   r   r   r   r1  Fr   locationr   r)   r   )r   r   r   r   r   r   r   r2  r   r   r   r  
UPLOAD_URLr   r   r   r  r$   r   r  r   
_responsesr   r   r   )
r   r   r   r   r2  r~   r  r   r   r   r   r   r   3test_initialize_upload_w_http_wo_auto_transfer_w_OK  s"    
.z?Test_Upload.test_initialize_upload_w_http_wo_auto_transfer_w_OKc                 C   sb  ddl m} ddlm} ddlm} ddlm} d}t }t	 }| j
t|dd}||_d	| jd
}	t|j|	}
t|j}t|
|}||t	|d ||| W d    n1 s0    Y  | |jd | |j| j | |jg  | t|jd | |jd d |u  |jd d }| t|t	 | |j| j | |jd | |j| d S )Nr   r   r   r   r1  r   rK  rX   100)zX-Goog-Upload-Chunk-Granularityr  r   rv   r   r   PUT)r   r   r   r   r   r   r   r2  r$   r   r   r   r  r  r   r   r   r  r   r  r   r  r   r   r   r8   http_methodrF  )r   r   r   r   r2  r   r   r~   r  r   r   Zchunk_responser   Zchunk_requestr   r   r   9test_initialize_upload_w_granularity_w_auto_transfer_w_OK0  s<    

*zETest_Upload.test_initialize_upload_w_granularity_w_auto_transfer_w_OKc                 C   s"   |  t }| |dd d S )Nz123-456i  )r   r   r   Z
_last_byter*  r   r   r   test__last_byteP  s    zTest_Upload.test__last_bytec                 C   s   |  t }|d d S r6  )r   r   _validate_chunksizer*  r   r   r   5test__validate_chunksize_wo__server_chunk_granularityT  s    zATest_Upload.test__validate_chunksize_wo__server_chunk_granularityc                 C   sJ   |  t }d|_| t |d W d    n1 s<0    Y  d S )Nrv   rW   )r   r   r  r,   r-   r  r*  r   r   r   9test__validate_chunksize_w__server_chunk_granularity_missX  s    zETest_Upload.test__validate_chunksize_w__server_chunk_granularity_missc                 C   s    |  t }d|_|d d S )Nrv   i  )r   r   r  r  r*  r   r   r   8test__validate_chunksize_w__server_chunk_granularity_hit^  s    zDTest_Upload.test__validate_chunksize_w__server_chunk_granularity_hitc                 C   sT   ddl m} | t }||_| t |  W d    n1 sF0    Y  d S r,  )r   r.  r   r   r  r,   r-   r  r/  r   r   r   "test_stream_file_w_simple_strategyc  s
    z.Test_Upload.test_stream_file_w_simple_strategyc                 C   sb   ddl m} | jt dd}||_d|_| t |jdd W d    n1 sT0    Y  d S )Nr   r1     rX   rv   Tr   )	r   r2  r   r   r  r  r,   r-   r  r3  r   r   r   0test_stream_file_w_use_chunks_invalid_chunk_sizej  s    z<Test_Upload.test_stream_file_w_use_chunks_invalid_chunk_sizec                 C   sj   ddl m} ddlm} | jt dd}||_d|_| | |	  W d    n1 s\0    Y  d S )Nr   r=   r1  r  rX      )
r@   r>   r   r2  r   r   r  r  r,   r  rv  r   r   r   r  r  s    z,Test_Upload.test_stream_file_not_initializedc                 C   sh   ddl m} t }t }t }| j|dd}||_d|_||tj ||_	d|_
| | |u  d S )Nr   r1  r  rX   r  T)r   r2  r$   r   r  r  r3   r   r4   r  	_completer   r  )r   r2  r   r   r   r  r   r   r   5test_stream_file_already_complete_w_unseekable_stream{  s    zATest_Upload.test_stream_file_already_complete_w_unseekable_streamc                 C   s   ddl m} ddlm} d}t }t|}t }| j|dd}||_d|_|	|t
j ||_d|_| | |  W d    n1 s0    Y  d S )	Nr   CommunicationErrorr1  r   r  rX   r  T)r@   r  r   r2  r$   r   r   r  r  r3   r   r4   r  r  r,   r  )r   r  r2  r   r   r   r   r  r   r   r   <test_stream_file_already_complete_w_seekable_stream_unsynced  s    zHTest_Upload.test_stream_file_already_complete_w_seekable_stream_unsyncedc                 C   s   dd l }ddlm} d}t }t|}|d|j t }| j|dd}||_d|_	|
|tj ||_d|_| |jdd	|u  d S )
Nr   r1  r   r  rX   r  TFr   )rb   r   r2  r$   r   seekSEEK_ENDr   r  r  r3   r   r4   r  r  r   r  r   rb   r2  r   r   r   r   r  r   r   r   ;test_stream_file_already_complete_wo_seekable_method_synced  s    zGTest_Upload.test_stream_file_already_complete_wo_seekable_method_syncedc                 C   s   dd l }ddlm} d}t }t|d}|d|j t }| j|dd}||_d|_	|
|tj ||_d|_| |jdd	|u  d S )
Nr   r1  r   Tr  rX   r  Fr   rb   r   r2  r$   _StreamWithSeekableMethodr  r  r   r  r  r3   r   r4   r  r  r   r  r  r   r   r   ?test_stream_file_already_complete_w_seekable_method_true_synced  s    
zKTest_Upload.test_stream_file_already_complete_w_seekable_method_true_syncedc                 C   s   dd l }ddlm} d}t }t|d}|d|j t }| j|dd}||_d|_	|
|tj ||_d|_| |jdd	|u  d S )
Nr   r1  r   Fr  rX   r  Tr   r  r  r   r   r   9test_stream_file_already_complete_w_seekable_method_false  s    
zETest_Upload.test_stream_file_already_complete_w_seekable_method_falsec                 C   s  ddl m} ddlm} ddlm} ddlm} ddlm	} d}t
 }t|}| j|dd	}	||	_d|	_|	|| j d
dd}
t||
}d
dd}t|j|}t||}||t|d |	 }W d    n1 s0    Y  | ||u  | t|jd | t|jd |jd d }| |j| j | |jd | |jd| jd | |j|d d  |jd d }| |j| j | |jd | |jd| jd | |j|dd   d S )Nr   r   r   r   r~  r1  r      rX   0z	bytes=0-5content-lengthr   z	bytes=6-9r   r   r  bytes 0-5/*Content-Ranger]  r   zbytes 6-9/10) r   r   r   r   r   r   r  r  r   r2  r$   r   r   r  r  r3   r  r   r   r   r   r  r   r   r   r  r   r   r  rw   r  rF  )r   r   r   r   r  r2  r   r   r   r  r  r  r	  r
  r   r   r  r  r   r   r   test_stream_file_incomplete  sV    



&z'Test_Upload.test_stream_file_incompletec              	   C   sr  ddl m} ddlm} ddlm} ddlm} ddlm	} d}t
 }t|}| j|dd	}	||	_d|	_|	|| j d
dd}
t||
}t|}||t|dB | | |	  W d    n1 s0    Y  W d    n1 s0    Y  | t|jd | t|jd |jd d }| |j| j | |jd | |jd| jd | |j|d d  d S )Nr   r   r   r  r~  r1  r   r  rX   r  	bytes=0-4r  r   r   r  r  r  )r   r   r   r   r@   r  r  r  r   r2  r$   r   r   r  r  r3   r  r   r   r   r,   r  r   r   r  r   r   r  rw   r  rF  )r   r   r   r  r  r2  r   r   r   r  r   r   r   r~   r   r   r   ,test_stream_file_incomplete_w_transfer_error  sD    
Dz8Test_Upload.test_stream_file_incomplete_w_transfer_errorc                 C   s  ddl m} ddlm} ddlm} d}t }t|}| |}||_	d| j
d}t| jd||}	d	d
d}
t||
}t|}|||d ||	d W d    n1 s0    Y  | t|jd | t|jd |jd \}}}| ||	u  | ||u  | | d d S )Nr   r   r   r~  r   bytes 0-9/10r  r  r  r  r  r   r   r   r   )r   r   r   r   r  r  r$   r   r   r   r  r   r  r   r   _send_media_requestr   r   r  r   r   ry  )r   r   r   r  r   r   r   r  rw   r~   r   r   r   Zused_requestZ	used_http_r   r   r   !test__send_media_request_wo_error  s.    


*z-Test_Upload.test__send_media_request_wo_errorc              	   C   s  ddl m} ddlm} ddlm} ddlm} ddlm	} ddl
m} d}t }t }	t|}
| |
}||_||	| j ||_d	| jd
}t| jd||}ddd}t|j|}ddd}t||}t||}||t|dH | | ||d W d    n1 s0    Y  W d    n1 s20    Y  | t|jd | t|jd |jd \}}}| ||u  | ||u  |jd \}}}| |j| j | |j d | |j!ddi | ||	u  d S )Nr   r   r   r   r   r~  r1  r   r  r  r  r  r  r  )zContent-Lengthrz   r   r   r   r   r  z	bytes */*)"r   r   r   r   r   r   r@   r   r  r  r   r2  r$   r   r   r  r3   r  r   r  r   r   r   r   r,   r  r   r   r  r   r   r   r  rw   )r   r   r   r   r   r  r2  r   r   r   r   r  rw   r~   r  r  r	  r
  r   Zfirst_requestZ
first_httpr  Zsecond_requestZsecond_httpr   r   r    test__send_media_request_w_error6  sL    




Lz,Test_Upload.test__send_media_request_w_errorc                 C   sP   ddl m} | t }| | |d W d    n1 sB0    Y  d S rD   )r@   r>   r   r   r,   _send_media_bodyr   r>   r  r   r   r   %test__send_media_body_not_initialized_  s    z1Test_Upload.test__send_media_body_not_initializedc                 C   sd   ddl m} t }| t }||tj | | |	d W d    n1 sV0    Y  d S rD   )
r@   r>   r$   r   r   r3   r   r4   r,   r  )r   r>   r   r  r   r   r   #test__send_media_body_wo_total_sizee  s    z/Test_Upload.test__send_media_body_wo_total_sizec                 C   s   ddl m} d}t }t }| j||d}||| j t }t|}||_|	d}| 
||u  |j\}	}
| |	j| j | |	jd |	j}| 
t|| | 
|j|u  | t|| | |	jd|f | jd|d |f d	 | |
| d S )
Nr   StreamSlice  r[   r  rr  r   r   r  r]  r  gcloud.streaming.stream_slicer  r$   r   r   r3   r  _MediaStreamerr  r  r   _called_withr   r   r  rF  r8   r#  r   rw   r  r   r  r\   r   r   r  r   streamerr   r~   endbody_streamr   r   r   )test__send_media_body_start_lt_total_sizem  s2    

z5Test_Upload.test__send_media_body_start_lt_total_sizec                 C   s   ddl m} d}t }t }| j||d}||| j t }t|}||_|	|}| 
||u  |j\}	}
| |	j| j | |	jd |	j}| 
t|| | 
|j|u  | t|d | |	jd| jd|f d | |
| d S )	Nr   r  r  r[   r  r  
bytes */%dr  r  r  r   r   r   )test__send_media_body_start_eq_total_size  s2    

z5Test_Upload.test__send_media_body_start_eq_total_sizec                 C   sP   ddl m} | t }| | |d W d    n1 sB0    Y  d S rD   )r@   r>   r   r   r,   _send_chunkr  r   r   r    test__send_chunk_not_initialized  s    z,Test_Upload.test__send_chunk_not_initializedc           
      C   s   d}t |}t }| jt|dd}||| j t }t|}||_| |j	d  |
d}| ||u  | |j	| |j\}}	| |j| j | |jd | |j| | |jd| | jd|d |f d	 | |	| d S )
Nr   rK  rX   r   r  rr  r   r   r  )r   r$   r   r   r3   r  r  r  r   rS   r  r   r  r   r  rF  rw   r  )
r   r   r\   r   r  r   r  r   r~   r  r   r   r   /test__send_chunk_wo_total_size_stream_exhausted  s.    

z;Test_Upload.test__send_chunk_wo_total_size_stream_exhaustedc                 C   s   d}t |}|d }t }| jt||d}||| j t }t|}||_| |j	d  |
d}| ||u  | |j	d  |j\}	}
| |	j| j | |	jd | |	j|d |  d| | jd|d f d	}| |	j| | |
| d S )
Nr   r   rX   r   r  rr  zbytes 0-%d/*r   r  )r   r$   r   r   r3   r  r  r  r   rS   r  r   r  r   r  rF  r  rw   )r   r   r\   r&   r   r  r   r  r   r~   r  expected_headersr   r   r   3test__send_chunk_wo_total_size_stream_not_exhausted  s.    

z?Test_Upload.test__send_chunk_wo_total_size_stream_not_exhaustedc                 C   s  ddl m} d}t|}|d }t }t|}| j|||d}||| j t }t|}	|	|_	|
d}
| |
|u  |	j\}}| |j| j | |jd |j}| t|| | |j|u  | t|| d| | jd|d	 |f d
}| |j| | || d S )Nr   r  r   r   r  r  rr  r   r   r  )r  r  r   r$   r   r   r3   r  r  r  r  r   r  r   r   r  rF  r8   r#  r  rw   )r   r  r   r\   r&   r   r   r  r   r  r   r~   r  r  r  r   r   r   2test__send_chunk_w_total_size_stream_not_exhausted  s4    

z>Test_Upload.test__send_chunk_w_total_size_stream_not_exhaustedc                 C   s   ddl m} d}t|}d}t }t|}| j|||d}||| j t }t|}	|	|_	|
|}
| |
|u  |	j\}}| |j| j | |jd |j}| t|| | |j|u  | t|d | |jd| jd|f d	 | || d S )
Nr   r  r   rK  r  r  r  r  r  )r  r  r   r$   r   r   r3   r  r  r  r  r   r  r   r   r  rF  r8   r#  rw   r  )r   r  r   r\   r&   r   r   r  r   r  r   r~   r  r  r   r   r   .test__send_chunk_w_total_size_stream_exhausted  s6    

z:Test_Upload.test__send_chunk_w_total_size_stream_exhaustedN)KrK   rL   rM   r4   r  r  r	   r   r!   rY   r  r   r%  r&  r(  rt   ru   r+  r0  r4  r5  r7  r@  rA  rD  rH  rI  rJ  rM  rO  rU  rn  rq  rs  ru  rw  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  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r    s   	


	
	+
 	-&)r  c                  C   sB   dd l } | jr&ddlm} | }|jS ddlm} | }|jS d S )Nr   )BytesParser)Parser)sixPY3email.parserr  
parsebytesr  parsestr)r  r  parserr  r   r   r   re    s    re  c                   @   s   e Zd Zdd ZdS )r|   c                 K   s   | j | d S r
   )__dict__update)r   r   r   r   r   __init__(  s    z_Dummy.__init__N)rK   rL   rM   r  r   r   r   r   r|   '  s   r|   c                   @   s    e Zd ZdZdZdZdZdZdS )rC  )z*/*Nr8  Tr9  )rK   rL   rM   rN  rL  r;  r<  r=  r   r   r   r   rC  ,  s
   rC  c                   @   sF   e Zd ZdZdddZdd Zddd	ZdddZdd Zdd Z	d
S )r   Frp   c                 C   s   dd l }g | _||| _d S rP   )ior   BytesIO_to_read)r   to_readr  r   r   r   r  7  s    z_Stream.__init__c                 C   s   | j | d S r
   )r   append)r   Zto_writer   r   r   rg   <  s    z_Stream.writer   c                 C   s   | j || d S r
   )r  r  )r   offsetwhencer   r   r   r  ?  s    z_Stream.seekNc                 C   s   |d ur| j |S | j  S r
   )r  rq   )r   sizer   r   r   rq   B  s    z_Stream.readc                 C   s
   | j  S r
   )r  ry  r   r   r   r   ry  G  s    z_Stream.tellc                 C   s
   d| _ d S )NT)rI   r  r   r   r   r$  J  s    z_Stream.close)rp   )r   )N)
rK   rL   rM   rI   r  rg   r  rq   ry  r$  r   r   r   r   r   4  s   


r   c                       s&   e Zd Zd fdd	Zdd Z  ZS )r  rp   Tc                    s   t t| | || _d S r
   )superr  r  	_seekable)r   r  seekable	__class__r   r   r  P  s    z"_StreamWithSeekableMethod.__init__c                 C   s   | j S r
   )r  r  r   r   r   r  T  s    z"_StreamWithSeekableMethod.seekable)rp   T)rK   rL   rM   r  r  __classcell__r   r   r  r   r  N  s   r  c                   @   s&   e Zd ZdZdZedddfddZdS )r   )r   r  rF  rw   rT  r   GETr   Nc                 C   s.   || _ || _| | _| _|d u r$i }|| _d S r
   )r   r  rF  rT  rw   )r   r   r  rF  rw   r   r   r   r  \  s    z_Request.__init__)rK   rL   rM   	__slots__r4   r  r   r   r   r   r   X  s   r   c                   @   s   e Zd Zdd Zdd ZdS )r   c                 G   s   t || _g | _d S r
   )ra  r  r   )r   	responsesr   r   r   r  g  s    
z_MakeRequest.__init__c                 K   s   | j |||f | jdS rP   )r   r  r  pop)r   r   r~   r   r   r   r   __call__k  s    z_MakeRequest.__call__N)rK   rL   rM   r  r  r   r   r   r   r   e  s   r   r   c                 C   s"   |d u ri }t | ||t||dS )N)r   r   r   r   request_url)r|   r   )r   r   r   r  r   r   r   r   p  s    r   c                   @   s    e Zd ZdZdd Zdd ZdS )r  Nc                 C   s
   || _ d S r
   )	_response)r   r   r   r   r   r    s    z_MediaStreamer.__init__c                 C   s   | j d u sJ ||f| _ | jS r
   )r  r  )r   r~   r  r   r   r   r    s    
z_MediaStreamer.__call__)rK   rL   rM   r  r  r  r   r   r   r   r  {  s   r  c                     s0   dd l } dd l dd l| j fdd}|S )Nr   c                  3   s     } | V   |  d S r
   )mkdtemprmtree)temp_dirshutiltempfiler   r   _tempdir_mgr  s    z$_tempdir_maker.<locals>._tempdir_mgr)
contextlibr  r  contextmanager)r   r  r   r  r   _tempdir_maker  s    r  )Z	unittest2ZTestCaser   rN   r  re  r$   r|   rC  r   r  r   r   r4   r   r  r  rc   r   r   r   r   <module>   s<        }        

