a
    ù!fçm  ã                   @   sn   d dl 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dS )é    Nc                   @   sV   e Zd ZdZdef Zdef ZdZdeef Zdef ZdZ	dee	f Z
d	d
„ ZdS )Ú_BaseÚPROJECTzprojects/%s/topicszprojects/%s/subscriptionsZ
topic_namezprojects/%s/topics/%sz%s/subscriptionsZsubscription_namezprojects/%s/subscriptions/%sc                 O   s   |   ¡ |i |¤ŽS ©N©Ú_getTargetClass©ÚselfÚargsÚkw© r   ú^/var/www/html/python-backend/venv/lib/python3.9/site-packages/gcloud/pubsub/test_connection.pyÚ_makeOne   s    z_Base._makeOneN)Ú__name__Ú
__module__Ú__qualname__r   ÚLIST_TOPICS_PATHÚLIST_SUBSCRIPTIONS_PATHZ
TOPIC_NAMEÚ
TOPIC_PATHÚLIST_TOPIC_SUBSCRIPTIONS_PATHZSUB_NAMEÚSUB_PATHr   r   r   r   r   r      s   


r   c                   @   sL   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S )ÚTestConnectionc                 C   s   ddl m} |S )Nr   )Ú
Connection)Úgcloud.pubsub.connectionr   )r   r   r   r   r   r   "   s    zTestConnection._getTargetClassc                 C   s$   |   ¡ }|  ¡ }|  |j|j¡ d S r   )r   r   ÚassertEqualÚapi_base_urlÚAPI_BASE_URL)r   ÚconnÚklassr   r   r   Útest_default_url&   s    zTestConnection.test_default_urlc                 C   s   dd l }ddlm} ddlm} d}||i}|||jd |  ¡ }W d   ƒ n1 sX0    Y  |  ¡ }|  |j	|j
¡ |  |j	d| ¡ d S )Nr   ©Ú_Monkey©ÚPUBSUB_EMULATORzlocalhost:8187©Úgetenvzhttp://)ÚosÚgcloud._testingr    Úgcloud.environment_varsr"   Úgetr   r   ÚassertNotEqualr   r   r   )r   r%   r    r"   ÚHOSTÚfake_environr   r   r   r   r   Útest_custom_url_from_env+   s    &z'TestConnection.test_custom_url_from_envc                 C   s<   t ƒ }| j|d}|  ¡ }|  |j|j¡ |  |j|¡ d S )N©r   )Úobjectr   r   r)   r   r   r   )r   r*   r   r   r   r   r   Ú test_custom_url_from_constructor:   s
    z/TestConnection.test_custom_url_from_constructorc           	      C   s¦   dd l }ddlm} ddlm} tƒ }tƒ }||i}|||jd | j|d}W d   ƒ n1 sd0    Y  |  ¡ }|  	|j
|j¡ |  	|j
|¡ |  |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"   ZHOST1ZHOST2r+   r   r   r   r   r   Ú#test_custom_url_constructor_and_envB   s    *z2TestConnection.test_custom_url_constructor_and_envc                 C   s2   |   ¡ }d |j|jdg¡}|  | d¡|¡ d S )Nú/Úfooú/foo)r   Újoinr   ÚAPI_VERSIONr   Úbuild_api_url)r   r   ÚURIr   r   r   Ú(test_build_api_url_no_extra_query_paramsS   s    ýz7TestConnection.test_build_api_url_no_extra_query_paramsc                 C   s’   ddl m} ddl m} |  ¡ }| dddi¡}||ƒ\}}}}}	|  d||f |j¡ |  |d d	|jd
g¡¡ t	||ƒƒ}
|  |
d d¡ d S )Nr   )Ú	parse_qsl)Úurlsplitr3   ÚbarZbazz%s://%sr1   Ú r2   )
Zsix.moves.urllib.parser9   r:   r   r6   r   r   r4   r5   Údict)r   r9   r:   r   ÚuriÚschemeÚnetlocÚpathÚqsÚ_Zparmsr   r   r   Ú'test_build_api_url_w_extra_query_params\   s    ÿz6TestConnection.test_build_api_url_w_extra_query_paramsc                 C   s@   d}d}| j |d}d ||jdg¡}|  |jd|d|¡ d S )Nzapi-base-url1zapi-base-url2r-   r1   r2   r3   )r   r4   r5   r   r6   )r   Z	base_url1Z	base_url2r   r7   r   r   r   Ú&test_build_api_url_w_base_url_overrideh   s    ýÿz5TestConnection.test_build_api_url_w_base_url_overrideN)r   r   r   r   r   r,   r/   r0   r8   rD   rE   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 )&ÚTest_PublisherAPIc                 C   s   ddl m} |S )Nr   )Ú_PublisherAPI)r   rG   )r   rG   r   r   r   r   w   s    z!Test_PublisherAPI._getTargetClassc                 O   s   |   ¡ |i |¤ŽS r   r   r   r   r   r   r   {   s    zTest_PublisherAPI._makeOnec                 C   s$   t ƒ }|  |¡}|  |j|u ¡ d S r   ©Ú_Connectionr   Ú
assertTrueÚ_connection©r   Ú
connectionÚapir   r   r   Ú	test_ctor~   s    
zTest_PublisherAPI.test_ctorc                 C   sº   dd| j igi}t|ƒ}|  |¡}| | j¡\}}|  t|ƒd¡ |d }|  |t¡ |  |d | j ¡ |  |d ¡ |  |j	d d¡ d| j
f }|  |j	d |¡ |  |j	d	 i ¡ d S )
NÚtopicsÚnameé   r   ÚmethodÚGETú/%srA   Úquery_params©r   rI   r   Úlist_topicsr   r   ÚlenÚassertIsInstancer=   Ú_called_withr   )r   ÚRETURNEDrM   rN   rP   Ú
next_tokenÚtopicrA   r   r   r   Útest_list_topics_no_pagingƒ   s    
z,Test_PublisherAPI.test_list_topics_no_pagingc                 C   sÔ   d}d}d}d| j igddœ}t|ƒ}|  |¡}|j| j||d\}}|  t|ƒd¡ |d }	|  |	t¡ |  |	d | j ¡ |  ||¡ |  |j	d d	¡ d
| j
f }
|  |j	d |
¡ |  |j	d ||dœ¡ d S )NÚTOKEN1ÚTOKEN2rR   rQ   )rP   ÚnextPageToken©Z
page_tokenZ	page_sizer   rS   rT   rU   rA   rV   ©Z	pageTokenZpageSizerW   )r   r`   ra   ÚSIZEr\   rM   rN   rP   r]   r^   rA   r   r   r   Útest_list_topics_with_paging•   s,    
þ
ÿ
ÿz.Test_PublisherAPI.test_list_topics_with_pagingc                 C   sˆ   i }t |ƒ}|  |¡}| | j¡\}}|  t|ƒd¡ |  |d ¡ |  |jd d¡ d| jf }|  |jd |¡ |  |jd i ¡ d S ©Nr   rS   rT   rU   rA   rV   )rI   r   rX   r   r   rY   r[   r   )r   r\   rM   rN   rP   r]   rA   r   r   r   Útest_list_topics_missing_key¯   s    
z.Test_PublisherAPI.test_list_topics_missing_keyc                 C   sh   d| j i}t|ƒ}|  |¡}| | j ¡}|  ||¡ |  |jd d¡ d| j f }|  |jd |¡ d S )NrQ   rS   ÚPUTrU   rA   )r   rI   r   Útopic_creater   r[   ©r   r\   rM   rN   ÚresourcerA   r   r   r   Útest_topic_create¾   s    

z#Test_PublisherAPI.test_topic_createc                 C   sŒ   ddl m} tƒ }||_|  |¡}|  |¡ | | j¡ W d   ƒ n1 sN0    Y  |  |j	d d¡ d| jf }|  |j	d |¡ d S )Nr   )ÚConflictrS   ri   rU   rA   )
Úgcloud.exceptionsrn   rI   Ú_no_response_errorr   ÚassertRaisesrj   r   r   r[   )r   rn   rM   rN   rA   r   r   r   Ú test_topic_create_already_existsÊ   s    
*z2Test_PublisherAPI.test_topic_create_already_existsc                 C   sh   d| j i}t|ƒ}|  |¡}| | j ¡}|  ||¡ |  |jd d¡ d| j f }|  |jd |¡ d S )NrQ   rS   rT   rU   rA   )r   rI   r   Ú	topic_getr   r[   rk   r   r   r   Útest_topic_get_hit×   s    

z$Test_PublisherAPI.test_topic_get_hitc                 C   s†   ddl m} tƒ }|  |¡}|  |¡ | | j¡ W d   ƒ n1 sH0    Y  |  |jd d¡ d| jf }|  |jd |¡ d S )Nr   ©ÚNotFoundrS   rT   rU   rA   )	ro   rv   rI   r   rq   rs   r   r   r[   ©r   rv   rM   rN   rA   r   r   r   Útest_topic_get_missã   s    
*z%Test_PublisherAPI.test_topic_get_missc                 C   sV   i }t |ƒ}|  |¡}| | j¡ |  |jd d¡ d| jf }|  |jd |¡ d S ©NrS   ÚDELETErU   rA   )rI   r   Útopic_deleter   r   r[   ©r   r\   rM   rN   rA   r   r   r   Útest_topic_delete_hitï   s    
z'Test_PublisherAPI.test_topic_delete_hitc                 C   s†   ddl m} tƒ }|  |¡}|  |¡ | | j¡ W d   ƒ n1 sH0    Y  |  |jd d¡ d| jf }|  |jd |¡ d S )Nr   ru   rS   rz   rU   rA   )	ro   rv   rI   r   rq   r{   r   r   r[   rw   r   r   r   Útest_topic_delete_missú   s    
*z(Test_PublisherAPI.test_topic_delete_missc                 C   s°   dd l }d}| |¡ d¡}d}|i dœ}d|gi}t|ƒ}|  |¡}| | j|g¡}	|  |	|g¡ |  |jd d¡ d	| jf }
|  |jd
 |
¡ |  |jd d|gi¡ d S )Nr   ó   This is the message textÚasciiÚDEADBEEF©ÚdataÚ
attributesZ
messageIdsrS   ÚPOSTú/%s:publishrA   rƒ   Úmessages)	Úbase64Ú	b64encodeÚdecoderI   r   Útopic_publishr   r   r[   )r   rˆ   ÚPAYLOADÚB64ZMSGIDÚMESSAGEr\   rM   rN   rl   rA   r   r   r   Útest_topic_publish_hit  s     


ÿz(Test_PublisherAPI.test_topic_publish_hitc           	      C   sÈ   dd l }ddlm} d}| |¡ d¡}|i dœ}tƒ }|  |¡}|  |¡  | | j	|g¡ W d   ƒ n1 sr0    Y  |  
|jd d¡ d| j	f }|  
|jd	 |¡ |  
|jd
 d|gi¡ d S )Nr   ru   r   r€   r‚   rS   r…   r†   rA   rƒ   r‡   )rˆ   ro   rv   r‰   rŠ   rI   r   rq   r‹   r   r   r[   )	r   rˆ   rv   rŒ   r   rŽ   rM   rN   rA   r   r   r   Útest_topic_publish_miss  s    

.ÿz)Test_PublisherAPI.test_topic_publish_missc           	      C   sÔ   | j | jdœ}d|gi}t|ƒ}|  |¡}| | j¡\}}|  t|ƒd¡ |d }|  |t¡ |  |d | j ¡ |  |d | j¡ |  |d ¡ |  |j	d d¡ d	| j
f }|  |j	d
 |¡ |  |j	d i ¡ d S ©N©rQ   r^   ÚsubscriptionsrR   r   rQ   r^   rS   rT   rU   rA   rV   ©r   r   rI   r   Útopic_list_subscriptionsr   rY   rZ   r=   r[   r   ©	r   ÚSUB_INFOr\   rM   rN   r“   r]   ÚsubscriptionrA   r   r   r   Ú'test_topic_list_subscriptions_no_paging+  s"    

ÿz9Test_PublisherAPI.test_topic_list_subscriptions_no_pagingc                 C   sî   d}d}d}| j | jdœ}|gddœ}t|ƒ}|  |¡}|j| j||d\}}	|  t|ƒd¡ |d }
|  |
t¡ |  |
d | j ¡ |  |
d	 | j¡ |  |	|¡ |  |j	d
 d¡ d| j
f }|  |j	d |¡ |  |j	d ||dœ¡ d S ©Nr`   ra   rR   r’   )r“   rb   rc   r   rQ   r^   rS   rT   rU   rA   rV   rd   r”   ©r   r`   ra   re   r—   r\   rM   rN   r“   r]   r˜   rA   r   r   r   Ú)test_topic_list_subscriptions_with_paging@  s0    þ
ÿ
ÿz;Test_PublisherAPI.test_topic_list_subscriptions_with_pagingc                 C   sˆ   i }t |ƒ}|  |¡}| | j¡\}}|  t|ƒd¡ |  |d ¡ |  |jd d¡ d| jf }|  |jd |¡ |  |jd i ¡ d S rg   )rI   r   r•   r   r   rY   r[   r   ©r   r\   rM   rN   r“   r]   rA   r   r   r   Ú)test_topic_list_subscriptions_missing_key\  s    
ÿz;Test_PublisherAPI.test_topic_list_subscriptions_missing_keyc                 C   s˜   ddl m} tƒ }|  |¡}|  |¡ | | j¡ W d   ƒ n1 sH0    Y  |  |jd d¡ d| j	f }|  |jd |¡ |  |jd i ¡ d S )Nr   ru   rS   rT   rU   rA   rV   )
ro   rv   rI   r   rq   r•   r   r   r[   r   rw   r   r   r   Ú"test_topic_list_subscriptions_missl  s    
*z4Test_PublisherAPI.test_topic_list_subscriptions_missN)r   r   r   r   r   rO   r_   rf   rh   rm   rr   rt   rx   r}   r~   r   r   r™   rœ   rž   rŸ   r   r   r   r   rF   u   s$   rF   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S ) ÚTest_SubscriberAPIc                 C   s   ddl m} |S )Nr   )Ú_SubscriberAPI)r   r¡   )r   r¡   r   r   r   r   |  s    z"Test_SubscriberAPI._getTargetClassc                 O   s   |   ¡ |i |¤ŽS r   r   r   r   r   r   r   €  s    zTest_SubscriberAPI._makeOnec                 C   s$   t ƒ }|  |¡}|  |j|u ¡ d S r   rH   rL   r   r   r   rO   ƒ  s    
zTest_SubscriberAPI.test_ctorc           	      C   sÔ   | j | jdœ}d|gi}t|ƒ}|  |¡}| | j¡\}}|  t|ƒd¡ |d }|  |t	¡ |  |d | j ¡ |  |d | j¡ |  |d ¡ |  |j
d d¡ d	| jf }|  |j
d
 |¡ |  |j
d i ¡ d S r‘   ©r   r   rI   r   Úlist_subscriptionsr   r   rY   rZ   r=   r[   r   r–   r   r   r   Ú!test_list_subscriptions_no_pagingˆ  s    

z4Test_SubscriberAPI.test_list_subscriptions_no_pagingc                 C   sî   d}d}d}| j | jdœ}|gddœ}t|ƒ}|  |¡}|j| j||d\}}	|  t|ƒd¡ |d }
|  |
t	¡ |  |
d | j ¡ |  |
d	 | j¡ |  |	|¡ |  |j
d
 d¡ d| jf }|  |j
d |¡ |  |j
d ||dœ¡ d S rš   r¢   r›   r   r   r   Ú#test_list_subscriptions_with_pagingœ  s0    þ
ÿ
ÿz6Test_SubscriberAPI.test_list_subscriptions_with_pagingc                 C   sˆ   i }t |ƒ}|  |¡}| | j¡\}}|  t|ƒd¡ |  |d ¡ |  |jd d¡ d| jf }|  |jd |¡ |  |jd i ¡ d S rg   )rI   r   r£   r   r   rY   r[   r   r   r   r   r   Ú#test_list_subscriptions_missing_key¸  s    
z6Test_SubscriberAPI.test_list_subscriptions_missing_keyc                 C   s   d| j i}| ¡ }| j|d< t|ƒ}|  |¡}| | j| j ¡}|  ||¡ |  |jd d¡ d| jf }|  |jd |¡ |  |jd |¡ d S )Nr^   rQ   rS   ri   rU   rA   rƒ   ©r   Úcopyr   rI   r   Zsubscription_creater   r[   )r   ÚRESOURCEr\   rM   rN   rl   rA   r   r   r   Ú!test_subscription_create_defaultsÇ  s    


z4Test_SubscriberAPI.test_subscription_create_defaultsc           	      C   s¦   d}d}| j |d|idœ}| ¡ }| j|d< t|ƒ}|  |¡}|j| j| j ||d}|  ||¡ |  |jd d¡ d	| jf }|  |jd
 |¡ |  |jd |¡ d S )NéZ   úhttps://api.example.com/pushÚpushEndpoint)r^   ÚackDeadlineSecondsÚ
pushConfigrQ   )Zack_deadlineZpush_endpointrS   ri   rU   rA   rƒ   r§   )	r   ÚACK_DEADLINEÚPUSH_ENDPOINTr©   r\   rM   rN   rl   rA   r   r   r   Ú!test_subscription_create_explicitÖ  s(    ÿý

þz4Test_SubscriberAPI.test_subscription_create_explicitc                 C   s|   d}d}| j | j|d|idœ}t|ƒ}|  |¡}| | j¡}|  ||¡ |  |jd d¡ d| jf }|  |jd |¡ d S )	Nr«   r¬   r­   )r^   rQ   r®   r¯   rS   rT   rU   rA   )r   r   rI   r   Zsubscription_getr   r[   )r   r°   r±   r\   rM   rN   rl   rA   r   r   r   Útest_subscription_getï  s    ü
z(Test_SubscriberAPI.test_subscription_getc                 C   sV   i }t |ƒ}|  |¡}| | j¡ |  |jd d¡ d| jf }|  |jd |¡ d S ry   )rI   r   Zsubscription_deleter   r   r[   r|   r   r   r   Útest_subscription_delete  s    
z+Test_SubscriberAPI.test_subscription_deletec                 C   sz   d}dd|ii}i }t |ƒ}|  |¡}| | j|¡ |  |jd d¡ d| jf }|  |jd |¡ |  |jd |¡ d S )	Nr¬   r¯   r­   rS   r…   z/%s:modifyPushConfigrA   rƒ   )rI   r   Zsubscription_modify_push_configr   r   r[   )r   r±   ÚBODYr\   rM   rN   rA   r   r   r   Ú$test_subscription_modify_push_config  s    ÿ
z7Test_SubscriberAPI.test_subscription_modify_push_configc                 C   sÂ   dd l }d}| |¡ d¡}d}d}||ddidœ}d	||d
œgi}t|ƒ}|  |¡}	dddœ}
|	 | j¡}|  ||d	 ¡ |  |jd d¡ d| jf }|  |jd |¡ |  |jd |
¡ d S )Nr   r   r€   r   ÚBEADCAFEÚaÚb©Z	messageIdrƒ   r„   ÚreceivedMessages©ZackIdÚmessageFrR   ©ZreturnImmediatelyZmaxMessagesrS   r…   ú/%s:pullrA   rƒ   ©	rˆ   r‰   rŠ   rI   r   Zsubscription_pullr   r   r[   )r   rˆ   rŒ   r   ÚACK_IDÚMSG_IDrŽ   r\   rM   rN   rµ   ÚreceivedrA   r   r   r   Útest_subscription_pull_defaults  s&    ÿ
þz2Test_SubscriberAPI.test_subscription_pull_defaultsc                 C   sÌ   dd l }d}| |¡ d¡}d}d}||ddidœ}d	||d
œgi}t|ƒ}|  |¡}	d}
d|
dœ}|	j| jd|
d}|  ||d	 ¡ |  |jd d¡ d| jf }|  |jd |¡ |  |jd |¡ d S )Nr   r   r€   r   r·   r¸   r¹   rº   r»   r¼   é
   Tr¾   )Zreturn_immediatelyZmax_messagesrS   r…   r¿   rA   rƒ   rÀ   )r   rˆ   rŒ   r   rÁ   rÂ   rŽ   r\   rM   rN   ZMAX_MESSAGESrµ   rÃ   rA   r   r   r   Útest_subscription_pull_explicit6  s,    ÿ
þÿz2Test_SubscriberAPI.test_subscription_pull_explicitc                 C   s‚   d}d}d||gi}i }t |ƒ}|  |¡}| | j||g¡ |  |jd d¡ d| jf }|  |jd |¡ |  |jd |¡ d S )	Nr   r·   ÚackIdsrS   r…   z/%s:acknowledgerA   rƒ   )rI   r   Zsubscription_acknowledger   r   r[   )r   ÚACK_ID1ÚACK_ID2rµ   r\   rM   rN   rA   r   r   r   Útest_subscription_acknowledgeQ  s    ÿ
z0Test_SubscriberAPI.test_subscription_acknowledgec           	      C   sŠ   d}d}d}||g|dœ}i }t |ƒ}|  |¡}| | j||g|¡ |  |jd d¡ d| jf }|  |jd |¡ |  |jd	 |¡ d S )
Nr   r·   r«   )rÇ   r®   rS   r…   z/%s:modifyAckDeadlinerA   rƒ   )rI   r   Z subscription_modify_ack_deadliner   r   r[   )	r   rÈ   rÉ   ZNEW_DEADLINErµ   r\   rM   rN   rA   r   r   r   Ú%test_subscription_modify_ack_deadlineb  s     þ
ÿz8Test_SubscriberAPI.test_subscription_modify_ack_deadlineN)r   r   r   r   r   rO   r¤   r¥   r¦   rª   r²   r³   r´   r¶   rÄ   rÆ   rÊ   rË   r   r   r   r   r    z  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S )ÚTest_IAMPolicyAPIc                 C   s   ddl m} |S )Nr   )Ú_IAMPolicyAPI)r   rÍ   )r   rÍ   r   r   r   r   y  s    z!Test_IAMPolicyAPI._getTargetClassc                 C   s$   t ƒ }|  |¡}|  |j|u ¡ d S r   rH   rL   r   r   r   rO   }  s    
zTest_IAMPolicyAPI.test_ctorc                 C   sº   ddl m}m}m} d}d}d}d}d}d}	dd|||gd	œ|||gd	œ|||	gd	œgd
œ}
t|
ƒ}|  |¡}| | j¡}|  ||
¡ |  |j	d d¡ d| jf }|  |j	d |¡ d S )Nr   ©Ú
OWNER_ROLEÚEDITOR_ROLEÚVIEWER_ROLEúuser:phred@example.comúgroup:cloud-logs@google.comúdomain:google.comú.serviceAccount:1234-abcdef@service.example.comr   é   ©ZroleÚmembers©ÚetagÚversionZbindingsrS   rT   z/%s:getIamPolicyrA   )
Úgcloud.pubsub.iamrÏ   rÐ   rÑ   rI   r   Zget_iam_policyr   r   r[   )r   rÏ   rÐ   rÑ   ÚOWNER1ÚOWNER2ÚEDITOR1ÚEDITOR2ÚVIEWER1ÚVIEWER2r\   rM   rN   ÚpolicyrA   r   r   r   Útest_get_iam_policy‚  s*    ýý	
z%Test_IAMPolicyAPI.test_get_iam_policyc                 C   sÚ   ddl m}m}m} d}d}d}d}d}d}	dd|||gd	œ|||gd	œ|||	gd	œgd
œ}
|
 ¡ }t|ƒ}|  |¡}| | j|
¡}|  	||¡ |  	|j
d d¡ d| jf }|  	|j
d |¡ |  	|j
d d|
i¡ d S )Nr   rÎ   rÒ   rÓ   rÔ   rÕ   r   rÖ   r×   rÙ   rS   r…   z/%s:setIamPolicyrA   rƒ   rã   )rÜ   rÏ   rÐ   rÑ   r¨   rI   r   Zset_iam_policyr   r   r[   )r   rÏ   rÐ   rÑ   rÝ   rÞ   rß   rà   rá   râ   ZPOLICYr\   rM   rN   rã   rA   r   r   r   Útest_set_iam_policy  s2    ýý	
ÿz%Test_IAMPolicyAPI.test_set_iam_policyc                 C   s¨   ddl m}m}m} |||g}|dd … }d|i}t|ƒ}|  |¡}| | j|¡}	|  |	|¡ |  |j	d d¡ d| jf }
|  |j	d |
¡ |  |j	d	 d|i¡ d S )
Nr   rÎ   rR   ÚpermissionsrS   r…   ú/%s:testIamPermissionsrA   rƒ   ©
rÜ   rÏ   rÐ   rÑ   rI   r   Ztest_iam_permissionsr   r   r[   )r   rÏ   rÐ   rÑ   Ú	ALL_ROLESZALLOWEDr\   rM   rN   ÚallowedrA   r   r   r   Útest_test_iam_permissions»  s    

ÿz+Test_IAMPolicyAPI.test_test_iam_permissionsc           
      C   s˜   ddl m}m}m} |||g}i }t|ƒ}|  |¡}| | j|¡}|  |g ¡ |  |j	d d¡ d| jf }	|  |j	d |	¡ |  |j	d d|i¡ d S )	Nr   rÎ   rS   r…   rç   rA   rƒ   ræ   rè   )
r   rÏ   rÐ   rÑ   ré   r\   rM   rN   rê   rA   r   r   r   Ú%test_test_iam_permissions_missing_keyÌ  s    

ÿz7Test_IAMPolicyAPI.test_test_iam_permissions_missing_keyN)	r   r   r   r   rO   rä   rå   rë   rì   r   r   r   r   rÌ   w  s   rÌ   c                   @   s$   e Zd ZdZdZdd„ Zdd„ ZdS )rI   Nc                 G   s
   || _ d S r   )Ú
_responses)r   Ú	responsesr   r   r   Ú__init__â  s    z_Connection.__init__c                 K   s\   ddl m} || _z | jd | jdd …  }| _W n$ tyV   | jpH|}|dƒ‚Y n0 |S )Nr   ru   rR   Zmiss)ro   rv   r[   rí   Ú
IndexErrorrp   )r   r
   rv   ÚresponseZ	err_classr   r   r   Úapi_requestå  s     
z_Connection.api_request)r   r   r   r[   rp   rï   rò   r   r   r   r   rI   Ý  s   rI   )	Z	unittest2ZTestCaser   r   rF   r    rÌ   r.   rI   r   r   r   r   Ú<module>   s   U   ~f