a
    ù!fXY  ã                   @   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Zd	ZG d
d„ de jƒ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S )é    Nc                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestMIMEApplicationHTTPc                 C   s   ddl m} |S )Nr   )ÚMIMEApplicationHTTP)Úgcloud.storage.batchr   )Úselfr   © r   úZ/var/www/html/python-backend/venv/lib/python3.9/site-packages/gcloud/storage/test_batch.pyÚ_getTargetClass   s    z'TestMIMEApplicationHTTP._getTargetClassc                 O   s   |   ¡ |i |¤ŽS ©N©r   ©r   ÚargsÚkwr   r   r   Ú_makeOne   s    z TestMIMEApplicationHTTP._makeOnec                 C   sH   d}d}ddg}|   ||i d ¡}|  | ¡ d¡ |  | ¡  ¡ |¡ d S )NÚDELETEú/path/to/apizDELETE /path/to/api HTTP/1.1Ú zapplication/http)r   ÚassertEqualÚget_content_typeÚget_payloadÚ
splitlines)r   ÚMETHODÚPATHÚLINESÚmahr   r   r   Útest_ctor_body_None   s    þz+TestMIMEApplicationHTTP.test_ctor_body_Nonec                 C   sJ   d}d}d}t |ƒddœ}g d¢}|  ||||¡}|  | ¡  ¡ |¡ d S )NÚGETr   ÚABCú
text/plain)úContent-LengthúContent-Type)úGET /path/to/api HTTP/1.1zContent-Length: 3zContent-Type: text/plainr   r   )Úlenr   r   r   r   ©r   r   r   ZBODYÚHEADERSr   r   r   r   r   Útest_ctor_body_str&   s    z*TestMIMEApplicationHTTP.test_ctor_body_strc                 C   sD   d}d}ddi}i }g d¢}|   ||||¡}|  | ¡  ¡ |¡ d S )Nr   r   ÚfooÚbar)r    zContent-Length: 14úContent-Type: application/jsonr   z{"foo": "bar"})r   r   r   r   r"   r   r   r   Útest_ctor_body_dict5   s    z+TestMIMEApplicationHTTP.test_ctor_body_dictN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r$   r(   r   r   r   r   r      s
   r   c                   @   sœ   e 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%S )&Ú	TestBatchc                 C   s   ddl m} |S )Nr   )ÚBatch)r   r-   )r   r-   r   r   r   r   G   s    zTestBatch._getTargetClassc                 O   s   |   ¡ |i |¤ŽS r	   r
   r   r   r   r   r   K   s    zTestBatch._makeOnec                 C   sZ   t ƒ }t|d}t|ƒ}|  |¡}|  |j|u ¡ |  t|jƒd¡ |  t|j	ƒd¡ d S )N©Úhttpr   )
Ú_HTTPÚ_ConnectionÚ_Clientr   Ú
assertTrueZ_clientr   r!   Ú	_requestsÚ_target_objects)r   r/   Ú
connectionÚclientÚbatchr   r   r   Ú	test_ctorN   s    

zTestBatch.test_ctorc                 C   s„   ddl m} d}tƒ }|||d}|  |¡}|  | ¡ d u ¡ | |¡ |  | ¡ |u ¡ |  |¡}| |¡ |  | ¡ |u ¡ d S )Nr   ©ÚClientÚPROJECT©ÚprojectÚcredentials)Úgcloud.storage.clientr;   Ú_Credentialsr   r3   ÚcurrentZ_push_batch)r   r;   r>   r?   r7   Zbatch1Zbatch2r   r   r   Útest_currentW   s    



zTestBatch.test_currentc                 C   sö   ddl m} d}tƒ }t|dfƒ}t|d}|  |¡}tƒ }|jd||d\}}	|  |j	d¡ |  
t|	|ƒ¡ |  
|j|	u ¡ |  |jg ¡ d	d
g}
|j\}|  |d d¡ |  |d |¡ |d }|
D ]\}}|  || |¡ qÈ|  |d d ¡ d S )Nr   ©Ú_FutureDictúhttp://example.com/apir   r.   r   ©Útarget_objectéÌ   ©zAccept-EncodingÚgzip©r   Ú0é   é   é   )r   rE   Ú	_Responser0   r1   r   Ú_MockObjectÚ_make_requestr   Ústatusr3   Ú
isinstanceÚ_propertiesr4   )r   rE   ÚURLÚexpectedr/   r6   r8   ÚtargetÚresponseÚcontentÚEXPECTED_HEADERSÚsolo_requestÚheadersÚkeyÚvaluer   r   r   Útest__make_request_GET_normalf   s0    

ÿ
þz'TestBatch.test__make_request_GET_normalc                 C   sô   ddl m} d}tƒ }t|d}|  |¡}tƒ }|jd|ddi|d\}}|  |jd	¡ |  	t
||ƒ¡ |  	|j|u ¡ |  |jg ¡ d
dg}	|j\}
|  |
d d¡ |  |
d |¡ |
d }|	D ]\}}|  || |¡ qÂ|  |
d ddi¡ d S )Nr   rD   rF   r.   ÚPOSTr%   rN   ©ÚdatarH   rI   rJ   ©r   Ú10rO   rP   ©r   rE   r0   r1   r   rR   rS   r   rT   r3   rU   rV   r4   ©r   rE   rW   r/   r6   r8   rY   rZ   r[   r\   r]   r^   r_   r`   r   r   r   Útest__make_request_POST_normal€   s.    

ÿ
þz(TestBatch.test__make_request_POST_normalc                 C   sô   ddl m} d}tƒ }t|d}|  |¡}tƒ }|jd|ddi|d\}}|  |jd	¡ |  	t
||ƒ¡ |  	|j|u ¡ |  |jg ¡ d
dg}	|j\}
|  |
d d¡ |  |
d |¡ |
d }|	D ]\}}|  || |¡ qÂ|  |
d ddi¡ d S )Nr   rD   rF   r.   ÚPATCHr%   rN   rc   rI   rJ   re   rO   rP   rg   rh   r   r   r   Útest__make_request_PATCH_normal™   s.    

ÿ
þz)TestBatch.test__make_request_PATCH_normalc                 C   sê   ddl m} d}tƒ }t|d}|  |¡}tƒ }|jd||d\}}|  |jd¡ |  	t
||ƒ¡ |  	|j|u ¡ |  |jg ¡ dd	g}	|j\}
|  |
d d¡ |  |
d
 |¡ |
d }|	D ]\}}|  || |¡ q¼|  |
d d ¡ d S )Nr   rD   rF   r.   r   rG   rI   rJ   rL   rN   rO   rP   rg   rh   r   r   r   Ú test__make_request_DELETE_normal²   s.    

ÿ
þz*TestBatch.test__make_request_DELETE_normalc                 C   sj   d}t ƒ }t|d}|  |¡}d|_|j d|i ddif¡ | jt|jd|ddid |  	|j
|u ¡ d S )	NrF   r.   rN   rb   r&   rO   r%   )rd   )r0   r1   r   Z_MAX_BATCH_SIZEr4   ÚappendÚassertRaisesÚ
ValueErrorrS   r3   r/   )r   rW   r/   r6   r8   r   r   r   Ú)test__make_request_POST_too_many_requestsË   s    

ÿz3TestBatch.test__make_request_POST_too_many_requestsc                 C   s<   t ƒ }t|d}|  |¡}|  t|j¡ |  |j|u ¡ d S )Nr.   )r0   r1   r   rn   ro   Úfinishr3   r/   )r   r/   r6   r8   r   r   r   Útest_finish_emptyÖ   s
    

zTestBatch.test_finish_emptyc                 C   s”   |  ¡ }|  t|ƒd¡ |  |d d¡ |  |d d¡ |  |d d¡ |  |d d¡ |  |d	 d
||f ¡ |  |d d¡ |  |d d¡ d S )Né   r   r   rN   úContent-Type: application/httprO   úMIME-Version: 1.0rP   é   ú%s %s HTTP/1.1é   é   )r   r   r!   )r   ÚchunkÚmethodÚurlÚlinesr   r   r   Ú_check_subrequest_no_payloadÝ   s    z&TestBatch._check_subrequest_no_payloadc                 C   s  dd l }| ¡ }| |¡}|  |d d¡ |  |d d¡ |  |d d¡ |  |d d¡ |  |d d	||f ¡ |d
kr¬|  t|ƒd¡ |  |d d¡ |  |d d¡ n^|  t|ƒd¡ |  |d dt|ƒ ¡ |  |d d¡ |  |d d¡ |  | |d ¡|¡ d S )Nr   r   rN   rt   rO   ru   rP   rv   rw   r   rs   rx   ry   é	   zContent-Length: %dr'   é   )Újsonr   Údumpsr   r!   Úloads)r   rz   r{   r|   Úpayloadr   r}   Zpayload_strr   r   r   Ú_check_subrequest_payloadé   s"    
z#TestBatch._check_subrequest_payloadc                 C   s6  dd l }d}tƒ }d|d< t|tfƒ}t|d}t|ƒ}|  |¡}d|_| d|i dd	d
œd ¡ | d|i ddid ¡ | d|i d d ¡ | 	¡ }|  
t|ƒt|jƒ¡ | ddddœ¡}	|  
|d |	dd	d
œf¡ |	}
|  
|d |
ddd
œf¡ | dddœ¡}|  
|d	 |df¡ |  
t|jƒd¡ |jd \}}}}|  
|d¡ |  
|d¡ |  
t|ƒd	¡ dd„ |d  d¡D ƒ\}}|  
|d¡ |  | d¡¡ |  | d¡¡ |  
|d d ¡ d!|td"ƒd#…  }| |¡dd#… }|  
t|ƒd¡ |  |d d|dd	d
œ¡ |  |d d|ddi¡ |  |d	 d|¡ d S )$Nr   ú http://api.example.com/other_apiú%multipart/mixed; boundary="DEADBEEF="úcontent-typer.   úhttp://api.example.comrb   rN   rO   ©r%   r&   rj   r&   rP   r   Ú20úapplication/json; charset=UTF-8Ú200©úcontent-lengthrˆ   rT   rM   Ú204©r   rT   r   úhttp://api.example.com/batchc                 S   s   g | ]}|  ¡ ‘qS r   ©Ústrip©Ú.0Úxr   r   r   Ú
<listcomp>  s   ÿz2TestBatch.test_finish_nonempty.<locals>.<listcomp>r   ú;úmultipart/mixedúboundary="==ú=="úMIME-Versionú1.0ú--ú
boundary="éÿÿÿÿ)Úhttplib2rQ   r0   Ú_THREE_PART_MIME_RESPONSEr1   r2   r   ÚAPI_BASE_URLÚ_do_requestrq   r   r!   r4   ÚResponseÚsplitr3   Ú
startswithÚendswithr…   r~   )r   r¢   rW   rX   r/   r6   r7   r8   ÚresultÚ	response0Ú	response1Ú	response2r{   Úurir^   ÚbodyÚctypeÚboundaryÚdividerÚchunksr   r   r   Útest_finish_nonemptyþ   s^    

ýþÿ
ÿzTestBatch.test_finish_nonemptyc                 C   sf   d}t ƒ }d|d< t|tfƒ}t|d}t|ƒ}|  |¡}d|_|j d|i d f¡ |  	t
|j¡ d S )Nr†   r‡   rˆ   r.   r‰   r   )rQ   r0   Ú!_TWO_PART_MIME_RESPONSE_WITH_FAILr1   r2   r   r¤   r4   rm   rn   ro   rq   ©r   rW   rX   r/   r6   r7   r8   r   r   r   Útest_finish_responses_mismatch1  s    

z(TestBatch.test_finish_responses_mismatchc                 C   sÖ  ddl m} d}tƒ }d|d< t|tfƒ}t|d}t|ƒ}|  |¡}d|_t	ƒ }t	ƒ }	| 
d|i d |¡ | 
d|i d |	¡ |  d	d
„ |jD ƒ||	g¡ |	j}
|  ||j¡ |  |jdddœ¡ |  |	j|
u ¡ |  t|jƒd¡ |jd \}}}}|  |d¡ |  |d¡ |  t|ƒd¡ dd
„ |d  d¡D ƒ\}}|  |d¡ |  | d¡¡ |  | d¡¡ |  |d d¡ d|tdƒd…  }| |¡dd… }|  t|ƒd¡ |  |d d|i ¡ |  |d d|i ¡ d S )Nr   )ÚNotFoundr†   r‡   rˆ   r.   r‰   r   c                 S   s   g | ]}|‘qS r   r   )r–   Úfuturer   r   r   r˜   L  ó    zFTestBatch.test_finish_nonempty_with_status_failure.<locals>.<listcomp>rN   rO   rŠ   rb   r’   c                 S   s   g | ]}|  ¡ ‘qS r   r“   r•   r   r   r   r˜   Y  s   ÿr   r™   rš   r›   rœ   r   rž   rŸ   r    r¡   )Zgcloud.exceptionsr¸   rQ   r0   rµ   r1   r2   r   r¤   rR   r¥   r   r5   rV   rn   rq   r3   r!   r4   r§   r¨   r©   r…   )r   r¸   rW   rX   r/   r6   r7   r8   Útarget1Útarget2Ztarget2_future_beforer{   r®   r^   r¯   r°   r±   r²   r³   r   r   r   Ú(test_finish_nonempty_with_status_failure=  sN    

ÿÿÿ
z2TestBatch.test_finish_nonempty_with_status_failurec                 C   s’   d}t ƒ }d|d< t|dfƒ}t|d}t|ƒ}|  |¡}|j d|i ddd	œf¡ |j d
|i ddif¡ |j d|i d f¡ |  t|j	¡ d S )Nr†   r   rˆ   zNOT A MIME_RESPONSEr.   rb   rN   rO   rŠ   rj   r&   rP   r   )
rQ   r0   r1   r2   r   r4   rm   rn   ro   rq   r¶   r   r   r   Ú+test_finish_nonempty_non_multipart_responseg  s    

z5TestBatch.test_finish_nonempty_non_multipart_responsec                 C   sœ  ddl m} d}tƒ }d|d< t|tfƒ}d}tƒ }|||d}||j_|  t	|j
ƒg ¡ tƒ }tƒ }	tƒ }
|  |¡b}|  t	|j
ƒ|g¡ |jd|d	d
dœ|d |jd|ddi|	d |jd||
d W d   ƒ n1 sÞ0    Y  |  t	|j
ƒg ¡ |  t|jƒd¡ |  |jd d d¡ |  |jd	 d d¡ |  |jd
 d d¡ |  |j||	|
g¡ |  |jd	d
dœ¡ |  |	jd	ddœ¡ |  |
jd¡ d S )Nr   r:   rF   r‡   rˆ   r<   r=   rb   rN   rO   rŠ   rG   rj   r&   rP   r   r   )r@   r;   rQ   r0   r£   rA   Ú_connectionZ_httpr   ÚlistÚ_batch_stackrR   r   rS   r!   r4   r5   rV   )r   r;   rW   rX   r/   r>   r?   r7   r»   r¼   Útarget3r8   r   r   r   Útest_as_context_mgr_wo_errort  sF    ÿÿ.ÿÿz&TestBatch.test_as_context_mgr_wo_errorc                 C   sŒ  ddl m} ddlm} d}tƒ }t|d}d}tƒ }|||d}||_|  t	|j
ƒg ¡ tƒ }	tƒ }
tƒ }z†|  |¡h}|  t	|j
ƒ|g¡ |jd|d	d
dœ|	d |jd|ddi|
d |jd||d tƒ ‚W d   ƒ n1 sæ0    Y  W n ty   Y n0 |  t	|j
ƒg ¡ |  t|jƒd¡ |  t|jƒd¡ |  |j|	|
|g¡ |  t|	j|ƒ¡ |  t|
j|ƒ¡ |  t|j|ƒ¡ d S )Nr   rD   r:   rF   r.   r<   r=   rb   rN   rO   rŠ   rG   rj   r&   rP   r   )r   rE   r@   r;   r0   r1   rA   r¿   r   rÀ   rÁ   rR   r   rS   ro   r!   r4   r5   r3   rU   rV   )r   rE   r;   rW   r/   r6   r>   r?   r7   r»   r¼   rÂ   r8   r   r   r   Útest_as_context_mgr_w_error˜  sB    
ÿÿ(z%TestBatch.test_as_context_mgr_w_errorN)r)   r*   r+   r   r   r9   rC   ra   ri   rk   rl   rp   rr   r~   r…   r´   r·   r½   r¾   rÃ   rÄ   r   r   r   r   r,   E   s$   	3*$r,   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTest__unpack_batch_responsec                 C   s   ddl m} |||ƒS )Nr   )Ú_unpack_batch_response)r   rÆ   )r   rZ   r[   rÆ   r   r   r   Ú_callFUTÁ  s    z$Test__unpack_batch_response._callFUTc                 C   sš   dd l }t|  ||¡ƒ}|  t|ƒd¡ | ddddœ¡}|  |d |ddd	œf¡ |}|  |d |ddd
œf¡ | dddœ¡}|  |d |df¡ d S )Nr   rP   r‹   rŒ   r   rŽ   rO   rN   )r&   r%   rŠ   rM   r   r‘   r   )r¢   rÀ   rÇ   r   r!   r¦   )r   rZ   r[   r¢   rª   r«   r¬   r­   r   r   r   Ú_unpack_helperÅ  s     ýþz*Test__unpack_batch_response._unpack_helperc                 C   s   ddi}t }|  ||¡ d S )Nrˆ   s%   multipart/mixed; boundary="DEADBEEF=")r£   rÈ   ©r   ZRESPONSEZCONTENTr   r   r   Ú
test_bytes×  s    z&Test__unpack_batch_response.test_bytesc                 C   s"   ddi}t  d¡}|  ||¡ d S )Nrˆ   r‡   zutf-8)r£   ÚdecoderÈ   rÉ   r   r   r   Útest_unicodeÜ  s    
z(Test__unpack_batch_response.test_unicodeN)r)   r*   r+   rÇ   rÈ   rÊ   rÌ   r   r   r   r   rÅ   ¿  s   rÅ   sÈ  --DEADBEEF=
Content-Type: application/http
Content-ID: <response-8a09ca85-8d1d-4f45-9eb0-da8e8b07ec83+1>

HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Content-Length: 20

{"foo": 1, "bar": 2}

--DEADBEEF=
Content-Type: application/http
Content-ID: <response-8a09ca85-8d1d-4f45-9eb0-da8e8b07ec83+2>

HTTP/1.1 404 Not Found
Content-Type: application/json; charset=UTF-8
Content-Length: 35

{"error": {"message": "Not Found"}}

--DEADBEEF=--
sG  --DEADBEEF=
Content-Type: application/http
Content-ID: <response-8a09ca85-8d1d-4f45-9eb0-da8e8b07ec83+1>

HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Content-Length: 20

{"foo": 1, "bar": 2}

--DEADBEEF=
Content-Type: application/http
Content-ID: <response-8a09ca85-8d1d-4f45-9eb0-da8e8b07ec83+2>

HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Content-Length: 20

{"foo": 1, "bar": 3}

--DEADBEEF=
Content-Type: application/http
Content-ID: <response-8a09ca85-8d1d-4f45-9eb0-da8e8b07ec83+3>

HTTP/1.1 204 No Content
Content-Length: 0

--DEADBEEF=--
c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTest__FutureDictc                 O   s   ddl m} ||i |¤ŽS )Nr   rD   )r   rE   )r   r   r   rE   r   r   r   r     s    zTest__FutureDict._makeOnec                 C   s   |   ¡ }|  t|jd ¡ d S r	   )r   rn   ÚKeyErrorÚget©r   r¹   r   r   r   Útest_get   s    zTest__FutureDict.test_getc                 C   sV   |   ¡ }tƒ  }}|  t¡ |d  }W d   ƒ n1 s:0    Y  |  ||u ¡ d S r	   )r   Úobjectrn   rÎ   r3   )r   r¹   r`   Z
orig_valuer   r   r   Útest___getitem__$  s
    
&z!Test__FutureDict.test___getitem__c                 C   s>   |   ¡ }|  t¡ d |d < W d   ƒ n1 s00    Y  d S r	   )r   rn   rÎ   rÐ   r   r   r   Útest___setitem__+  s    z!Test__FutureDict.test___setitem__N)r)   r*   r+   r   rÑ   rÓ   rÔ   r   r   r   r   rÍ     s   rÍ   c                   @   s"   e Zd ZdZdd„ Zddd„ZdS )r1   ZTESTINGc                 K   s   | j  |¡ d S r	   )Ú__dict__Úupdate)r   r   r   r   r   Ú__init__5  s    z_Connection.__init__Nc                 C   s   | j j||||dS )N)r®   r{   r^   r¯   )r/   Úrequest)r   r{   r|   rd   r^   r   r   r   rS   8  s    
ÿz_Connection._make_request)NN)r)   r*   r+   r>   r×   rS   r   r   r   r   r1   1  s   r1   c                       s   e Zd Zd‡ fdd„	Z‡  ZS )rQ   éÈ   c                    s    || _ tt| ƒjf i |¤Ž d S r	   )rT   ÚsuperrQ   r×   )r   rT   r   ©Ú	__class__r   r   r×   ?  s    z_Response.__init__)rÙ   )r)   r*   r+   r×   Ú__classcell__r   r   rÛ   r   rQ   =  s   rQ   c                   @   s   e Zd Zdd„ Zdd„ ZdS )r0   c                 G   s   g | _ t|ƒ| _d S r	   )r4   rÀ   Ú
_responses)r   Ú	responsesr   r   r   r×   F  s    z_HTTP.__init__c                 C   s4   | j  ||||f¡ | jd | jdd …  }| _|S )Nr   rN   )r4   rm   rÞ   )r   r®   r{   r^   r¯   rZ   r   r   r   rØ   J  s    z_HTTP.requestN)r)   r*   r+   r×   rØ   r   r   r   r   r0   D  s   r0   c                   @   s   e Zd ZdS )rR   N)r)   r*   r+   r   r   r   r   rR   P  s   rR   c                   @   s   e Zd Zdd„ ZdS )r2   c                 C   s
   || _ d S r	   )r¿   )r   r6   r   r   r   r×   V  s    z_Client.__init__N)r)   r*   r+   r×   r   r   r   r   r2   T  s   r2   c                   @   s$   e Zd ZdZedd„ ƒZdd„ ZdS )rA   Nc                   C   s   dS )NTr   r   r   r   r   Úcreate_scoped_required^  s    z#_Credentials.create_scoped_requiredc                 C   s
   || _ | S r	   )Ú_scopes)r   Úscoper   r   r   Úcreate_scopedb  s    z_Credentials.create_scoped)r)   r*   r+   rá   Ústaticmethodrà   rã   r   r   r   r   rA   Z  s   
rA   )Z	unittest2ZTestCaser   r,   rÅ   rµ   r£   rÍ   rÒ   r1   ÚdictrQ   r0   rR   r2   rA   r   r   r   r   Ú<module>   s   3  |# 