a
    !fx                     @   s   d dl Z G dd de j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                   @   s  e Zd ZdZdZdeef 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>S )?	TestTopicPROJECTZ
topic_nameprojects/%s/topics/%sc                 C   s   ddl m} |S )Nr   )Topic)gcloud.pubsub.topicr   )selfr    r   Y/var/www/html/python-backend/venv/lib/python3.9/site-packages/gcloud/pubsub/test_topic.py_getTargetClass   s    zTestTopic._getTargetClassc                 O   s   |   |i |S Nr
   )r   argskwr   r   r	   _makeOne   s    zTestTopic._makeOnec                 C   s^   t | jd}| j| j|dd}| |j| j | |j| j | |j| j | 	|j
 d S )NprojectTclienttimestamp_messages)_Clientr   r   
TOPIC_NAMEassertEqualnamer   	full_name
TOPIC_PATH
assertTruer   )r   r   topicr   r   r	   test_ctor_w_explicit_timestamp   s    z(TestTopic.test_ctor_w_explicit_timestampc                 C   sp   t | jd}d| ji}|  }|j||d}| |j| j | |j	|u  | |j
| j | |j| j d S Nr   r   r   )r   r   r   r
   from_api_reprr   r   r   r   Z_clientr   r   )r   r   resourceklassr   r   r   r	   test_from_api_repr(   s    
zTestTopic.test_from_api_reprc                 C   sH   d}d}t |d}d|| jf }d|i}|  }| jt|j||d d S )NPROJECT1PROJECT2r   r   r   r   )r   r   r
   assertRaises
ValueErrorr    )r   r$   r%   r   PATHr!   r"   r   r   r	   "test_from_api_repr_with_bad_client2   s    

z,TestTopic.test_from_api_repr_with_bad_clientc                 C   sP   t | jd}t  }|_d| ji|_| j| j|d}|  | 	|j
| j d S r   r   r   _FauxPublisherAPIpublisher_apir   _topic_create_responser   r   creater   _topic_createdr   r   apir   r   r   r	   test_create_w_bound_client<   s    z$TestTopic.test_create_w_bound_clientc                 C   s`   t | jd}t | jd}t  }|_d| ji|_| j| j|d}|j|d | 	|j
| j d S r   r*   r   client1client2r1   r   r   r   r	   test_create_w_alternate_clientF   s    z(TestTopic.test_create_w_alternate_clientc                 C   sJ   t | jd}t  }|_| j| j|d}| |  | |j	| j
 d S Nr   r   )r   r   r+   r,   r   r   ZassertFalseexistsr   
_topic_gotr   r0   r   r   r	   test_exists_miss_w_bound_clientQ   s
    z)TestTopic.test_exists_miss_w_bound_clientc                 C   sf   t | jd}t | jd}t  }|_d| ji|_| j| j|d}| |j	|d | 
|j| j d S r   )r   r   r+   r,   r   _topic_get_responser   r   r   r8   r   r9   r3   r   r   r	   "test_exists_hit_w_alternate_clientZ   s    z,TestTopic.test_exists_hit_w_alternate_clientc                 C   sJ   t | jd}t  }|_i |_| j| j|d}|  | |j	| j
 d S r7   r   r   r+   r,   _topic_delete_responser   r   deleter   _topic_deletedr   r0   r   r   r	   test_delete_w_bound_cliente   s    z$TestTopic.test_delete_w_bound_clientc                 C   sZ   t | jd}t | jd}t  }|_i |_| j| j|d}|j|d | |j	| j
 d S r7   r=   r3   r   r   r	   test_delete_w_alternate_cliento   s    z(TestTopic.test_delete_w_alternate_clientc           
      C   s   dd l }d}||d}d}|i d}t| jd}t  }|_|g|_| j| j	|d}|
|}	| |	| | |j| j|gf d S )Nr      This is the message textasciiDEADBEEFdata
attributesr   r   base64	b64encodedecoder   r   r+   r,   _topic_publish_responser   r   publishr   _topic_publishedr   
r   rJ   PAYLOADB64MSGIDMESSAGEr   r1   r   msgidr   r   r	   1test_publish_single_bytes_wo_attrs_w_bound_clientz   s    

z;TestTopic.test_publish_single_bytes_wo_attrs_w_bound_clientc                    s  dd l }dd l}ddlm} ddlm} ddlm} |j   fdd}d}|	|
d}d	}	|d
 |id}
t| jd}t| jd}t  }|_|	g|_| j| j|dd}|||d |j||d}W d    n1 s0    Y  | ||	 | |j| j|
gf d S )Nr   )r   )_RFC3339_MICROS)_Monkeyc                      s    S r   r   r   ZNOWr   r	   _utcnow   s    zXTestTopic.test_publish_single_bytes_wo_attrs_w_add_timestamp_alt_client.<locals>._utcnowrC   rD   rE   	timestamprF   r   Tr   )Z_NOWr   )rJ   datetimeZgcloud.pubsubr   Zgcloud._helpersrW   Zgcloud._testingrX   utcnowrK   rL   strftimer   r   r+   r,   rM   r   r   rN   r   rO   r   )r   rJ   r\   ZMUTrW   rX   rZ   rQ   rR   rS   rT   r4   r5   r1   r   rU   r   rY   r	   =test_publish_single_bytes_wo_attrs_w_add_timestamp_alt_client   s0    

,zGTestTopic.test_publish_single_bytes_wo_attrs_w_add_timestamp_alt_clientc                 C   s   dd l }d}||d}d}d}|d|id}t| jd}t  }|_|g|_| j| j	|d	d
}	|	j
||d}
| |
| | |j| j|gf d S )Nr   rC   rD   rE   z2015-04-10T16:46:22.868399Zr[   rF   r   Tr   )r[   rI   )r   rJ   rQ   rR   rS   ZOVERRIDErT   r   r1   r   rU   r   r   r	   7test_publish_single_bytes_w_add_timestamp_w_ts_in_attrs   s"    
zATestTopic.test_publish_single_bytes_w_add_timestamp_w_ts_in_attrsc           
      C   s   dd l }d}||d}d}|dddd}t| jd	}t  }|_|g|_| j| j	|d
}|j
|ddd}	| |	| | |j| j|gf d S )Nr   rC   rD   rE   value1value2Zattr1Zattr2rF   r   r   rI   rP   r   r   r	   test_publish_single_w_attrs   s    z%TestTopic.test_publish_single_w_attrsc                 C   s  dd l }d}d}||}||}d}d}|di d}|ddd	d
d}	t| jd}
t  }|
_||g|_| j| j	|
d}|
 *}|| |j|dd	d
 W d    n1 s0    Y  | t|||g | t|jg  | |j| j||	gf d S Nr      This is the first message text   This is the second message textrE   BEADCAFErD   rF   ra   rb   rc   r   r   rJ   rK   rL   r   r   r+   r,   rM   r   r   batchrN   r   listmessagesrO   r   r   rJ   PAYLOAD1PAYLOAD2B64_1B64_2MSGID1MSGID2MESSAGE1MESSAGE2r   r1   r   rj   r   r   r	   $test_publish_multiple_w_bound_client   s2    




.z.TestTopic.test_publish_multiple_w_bound_clientc                 C   sz   t | jd}t  }|_g |_| j| j|d}| }W d    n1 sL0    Y  | t	|j
g  | |jd d S )Nr   r   r   )r   r   r+   r,   rM   r   r   rj   r   rk   rl   _api_called)r   r   r1   r   rj   r   r   r	   test_publish_w_no_messages   s    
z$TestTopic.test_publish_w_no_messagesc                 C   s  dd l }d}d}||}||}d}d}|di d}|ddd	d
d}	t| jd}
t| jd}t  }|_||g|_| j| j	|
d}|j
|d*}|| |j|dd	d
 W d    n1 s0    Y  | t|||g | t|jg  | |j| j||	gf d S re   ri   r   rJ   rn   ro   rp   rq   rr   rs   rt   ru   r4   r5   r1   r   rj   r   r   r	   (test_publish_multiple_w_alternate_client   s0    



.z2TestTopic.test_publish_multiple_w_alternate_clientc                 C   s   d}d}t | jd}t  }|_| j| j|d}zL| 0}|| |j|ddd t W d    n1 sp0    Y  W n ty   Y n0 | 	t
|g  | 	t|d| |  d S )	Nrf   rg   r   r   ra   rb   rc   rO   )r   r   r+   r,   r   r   rj   rN   _Bugoutr   rk   getattr)r   rn   ro   r   r1   r   rj   r   r   r	   test_publish_multiple_error  s    

(z%TestTopic.test_publish_multiple_errorc                 C   sd   ddl m} t| jd}| j| j|d}d}||}| || | |j	| | 
|j|u  d S )Nr   Subscriptionr   r   Zsubscription_name)gcloud.pubsub.subscriptionr   r   r   r   r   subscriptionassertIsInstancer   r   r   r   )r   r   r   r   ZSUBSCRIPTION_NAMEr   r   r   r	   test_subscription!  s    
zTestTopic.test_subscriptionc                 C   s  ddl m} d}d| j|f }d}d| j|f }||g}d}t| jd}t  }	|_||f|	_| j| j|d}
|
	 \}}| 
t|d	 |d }| || | 
|d j| | |j|
u  |d
 }| || | 
|d
 j| | |j|
u  | 
|| | 
|	j| jd d f d S )Nr   r~   subscription_1projects/%s/subscriptions/%ssubscription_2TOKENr   r         r   r   r   r   r+   r,   "_topic_list_subscriptions_responser   r   list_subscriptionsr   lenr   r   r   r   _topic_listedr   )r   r   
SUB_NAME_1
SUB_PATH_1
SUB_NAME_2
SUB_PATH_2	SUBS_LISTr   r   r1   r   subscriptionsnext_page_tokenr   r   r   r	   !test_list_subscriptions_no_paging,  s:    

z+TestTopic.test_list_subscriptions_no_pagingc                 C   s&  ddl m} d}d| j|f }d}d| j|f }||g}d}d}t| jd}	t  }
|	_|d f|
_| j| j|	d	}|j	||d
\}}| 
t|d |d }| || | 
|d j| | |j|u  |d }| || | 
|d j| | |j|u  | 
|d  | 
|
j| j||f d S )Nr   r~   r   r   r   
   r   r   r   )	page_size
page_tokenr   r   r   )r   r   r   r   r   r   r   Z	PAGE_SIZEr   r   r1   r   r   r   r   r   r   r	   #test_list_subscriptions_with_pagingN  s@    


z-TestTopic.test_list_subscriptions_with_pagingc                 C   sp   t | jd}t  }|_d|_| j| j|d}| \}}| t	|d | |d  | |j
| jd d f d S )Nr   )r   Nr   r   )r   r   r+   r,   r   r   r   r   r   r   r   r   )r   r   r1   r   r   r   r   r   r	   #test_list_subscriptions_missing_keyr  s    
z-TestTopic.test_list_subscriptions_missing_keyc              	   C   sP  ddl m}m}m}m}m} d}d}d}d}	d}
d}d}d}dd|||gd	|||	gd	||
|gd	||gd	||gd	gd
}t| jd}t  }|_	||_
| j| j|d}| }| |jd | |jd | t|j||g | t|j||	g | t|j|
|g | t|j|g | t|j|g | |j| j d S )Nr   PUBSUB_ADMIN_ROLEPUBSUB_EDITOR_ROLEPUBSUB_VIEWER_ROLEPUBSUB_PUBLISHER_ROLEPUBSUB_SUBSCRIBER_ROLEuser:phred@example.comgroup:cloud-logs@google.comdomain:google.com.serviceAccount:1234-abcdef@service.example.comrE      ZrolemembersetagversionZbindingsr   r   )gcloud.pubsub.iamr   r   r   r   r   r   r   _FauxIAMPolicyiam_policy_api_get_iam_policy_responser   r   get_iam_policyr   r   r   sortedownerseditorsviewers
publisherssubscribers_got_iam_policyr   )r   r   r   r   r   r   OWNER1OWNER2EDITOR1EDITOR2VIEWER1VIEWER2	PUBLISHER
SUBSCRIBERPOLICYr   r1   r   policyr   r   r	   "test_get_iam_policy_w_bound_client  s>    

z,TestTopic.test_get_iam_policy_w_bound_clientc                 C   s   ddi}t | jd}t | jd}t  }|_||_| j| j|d}|j|d}| |j	d | |j
d  | t|jg  | t|jg  | t|jg  | |j| j d S )Nr   ACABr   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r4   r5   r1   r   r   r   r   r	   &test_get_iam_policy_w_alternate_client  s    z0TestTopic.test_get_iam_policy_w_alternate_clientc              	   C   s  ddl m} ddl m}m}m}m}m} d}d}d}	d}
d}d}d}d}dd	|||gd
||	|
gd
|||gd
||gd
||gd
gd}| }d|d< d|d< t| j	d}t
  }|_||_| j| j|d}|dd	}|j| |j| |j|	 |j|
 |j| |j| |j| |j| ||}| |jd | |jd | t|j||g | t|j|	|
g | t|j||g | t|j|g | t|j|g | |j| j|f d S )Nr   Policyr   r   r   r   r   rE   r   r   r   ZABACABAFr      r   r   r   )r   r   r   r   r   r   r   copyr   r   r   r   _set_iam_policy_responser   r   r   addr   r   r   r   set_iam_policyr   r   r   r   _set_iam_policyr   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   RESPONSEr   r1   r   r   
new_policyr   r   r	   "test_set_iam_policy_w_bound_client  sl    

z,TestTopic.test_set_iam_policy_w_bound_clientc           	      C   s   ddl m} ddi}t| jd}t| jd}t  }|_||_| j| j|d}| }|j	||d}| 
|jd | 
|jd  | 
t|jg  | 
t|jg  | 
t|jg  | 
|j| ji f 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   r   r   )	r   r   r   r4   r5   r1   r   r   r   r   r   r	   &test_set_iam_policy_w_alternate_client  s    z0TestTopic.test_set_iam_policy_w_alternate_clientc           	      C   s   ddl m}m}m} |||g}t| jd}t  }|_|d d |_| j	| j
|d}||}| ||d d  | |j| j|f d S )Nr   
OWNER_ROLEEDITOR_ROLEVIEWER_ROLEr   r   )r   r   r   r   r   r   r   r   _test_iam_permissions_responser   r   check_iam_permissionsr   _tested_iam_permissionsr   )	r   r   r   r   ROLESr   r1   r   allowedr   r   r	   )test_check_iam_permissions_w_bound_client  s    

z3TestTopic.test_check_iam_permissions_w_bound_clientc           
      C   s   ddl m}m}m} |||g}t| jd}t| jd}t  }|_g |_| j	| j
|d}|j||d}	| t|	d | |j| j|f 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   r   r   r4   r5   r1   r   r   r   r   r	   -test_check_iam_permissions_w_alternate_client"  s    
z7TestTopic.test_check_iam_permissions_w_alternate_clientN)#__name__
__module____qualname__r   r   r   r
   r   r   r#   r)   r2   r6   r:   r<   rA   rB   rV   r_   r`   rd   rv   rx   rz   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r      s@   



	
"$,>r   c                   @   sh   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S )	TestBatchr   c                 C   s   ddl m} |S )Nr   )Batch)r   r   )r   r   r   r   r	   r
   5  s    zTestBatch._getTargetClassc                 O   s   |   |i |S r   r   )r   r   kwargsr   r   r	   r   9  s    zTestBatch._makeOnec                 C   sf   t  }t| jd}| ||}| |j|u  | |j|u  | t|j	d | t|j
d d S )Nr   r   )_Topicr   r   r   r   r   r   r   r   rl   message_idsr   r   r   rj   r   r   r	   test_ctor_defaults<  s    zTestBatch.test_ctor_defaultsc                 C   s,   t  }t }| ||}| t|g  d S r   )r   objectr   r   rk   r   r   r   r	   test___iter___emptyE  s    zTestBatch.test___iter___emptyc                 C   sB   t  }t }| ||}g d|jd d < | t|g d d S )N)ZONEZTWOZTHREE)r   r   r   r   r   rk   r   r   r   r	   test___iter___non_emptyK  s
    z!TestBatch.test___iter___non_emptyc                 C   sd   dd l }d}||d}|i d}t| jd}t }| j||d}|| | |j	|g d S )Nr   rC   rD   rF   r   r   
rJ   rK   rL   r   r   r   r   rN   r   rl   r   rJ   rQ   rR   rT   r   r   rj   r   r   r	   test_publish_bytes_wo_attrsR  s    
z%TestBatch.test_publish_bytes_wo_attrsc                 C   sl   dd l }d}||d}|ddid}t| jd}tdd	}| j||d
}|| | |j	|g d S )Nr   rC   rD   r[   	TIMESTAMPrF   r   Tr   r   r   r   r   r   r	   "test_publish_bytes_w_add_timestamp^  s    

z,TestBatch.test_publish_bytes_w_add_timestampc                 C   s   dd l }d}d}||}||}d}d}|di d}|ddd	d
d}	tdd}
t  }|
_||g|_t }| j||
d}|	| |j	|dd	d
 |
  | t|||g | t|jg  | |j|j||	gf d S Nr   rf   rg   rE   rh   rD   rF   ra   rb   rc   r   r   r   rJ   rK   rL   r   r+   r,   rM   r   r   rN   commitr   rk   rl   rO   r   rm   r   r   r	   test_commit_w_bound_clientj  s4    




z$TestBatch.test_commit_w_bound_clientc                 C   s   dd l }d}d}||}||}d}d}|di d}|ddd	d
d}	tdd}
tdd}t  }|_||g|_t }| j||
d}|	| |j	|dd	d
 |j
|d | t|||g | t|jg  | |j|j||	gf d S r   r   ry   r   r   r	   test_commit_w_alternate_client  s6    





z(TestBatch.test_commit_w_alternate_clientc                 C   s  dd l }d}d}||}||}d}d}|di d}|ddd	d
d}	tdd}
t  }|
_||g|_t }| j||
d}|*}|	| |j	|dd	d
 W d    n1 s0    Y  | 
||u  | t|||g | t|jg  | |j|j||	gf d S r   )rJ   rK   rL   r   r+   r,   rM   r   r   rN   r   r   rk   rl   rO   r   )r   rJ   rn   ro   rp   rq   rr   rs   rt   ru   r   r1   r   rj   otherr   r   r	   test_context_mgr_success  s6    




.z"TestBatch.test_context_mgr_successc                 C   s  dd l }d}d}||}||}|di d}|ddddd}td	d
}t  }	|_t }
| j|
|d}zH|0}|| |j|ddd t	 W d    n1 s0    Y  W n t	y   Y n0 | 
||u  | t|g  | t|j||g | t|	d| |  d S )Nr   rf   rg   rD   rF   ra   rb   rc   r   r   r   rO   )rJ   rK   rL   r   r+   r,   r   r   rN   r{   r   r   rk   rl   r|   )r   rJ   rn   ro   rp   rq   rt   ru   r   r1   r   rj   r   r   r   r	   test_context_mgr_failure  s4    



(z"TestBatch.test_context_mgr_failureN)r   r   r   r   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r   2  s   	r   c                   @   s:   e Zd ZdZdd Zdd Zdd Zdd	 ZdddZd
S )r+   r   c                 C   s   || _ | jS r   )r/   r-   r   
topic_pathr   r   r	   topic_create  s    z_FauxPublisherAPI.topic_createc                 C   s:   ddl m} || _z| jW S  ty4   ||Y n0 d S )Nr   )NotFound)Zgcloud.exceptionsr   r9   r;   AttributeError)r   r   r   r   r   r	   	topic_get  s    z_FauxPublisherAPI.topic_getc                 C   s   || _ | jS r   )r@   r>   r   r   r   r	   topic_delete  s    z_FauxPublisherAPI.topic_deletec                 C   s   ||f| _ |  jd7  _| jS )Nr   )rO   rw   rM   )r   r   rl   r   r   r	   topic_publish  s    
z_FauxPublisherAPI.topic_publishNc                 C   s   |||f| _ | jS r   )r   r   )r   r   r   r   r   r   r	   topic_list_subscriptions  s    z*_FauxPublisherAPI.topic_list_subscriptions)NN)	r   r   r   rw   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S )r   c                 C   s   || _ | jS r   )r   r   )r   target_pathr   r   r	   r     s    z_FauxIAMPolicy.get_iam_policyc                 C   s   ||f| _ | jS r   )r   r   )r   r  r   r   r   r	   r     s    
z_FauxIAMPolicy.set_iam_policyc                 C   s   ||f| _ | jS r   )r   r   )r   r  Zpermissionsr   r   r	   test_iam_permissions  s    
z#_FauxIAMPolicy.test_iam_permissionsN)r   r   r   r   r   r  r   r   r   r	   r     s   r   c                   @   s   e Zd Zd	ddZdd ZdS )
r   NAMEr   Fc                 C   s&   d||f | _ d| j f | _|| _d S )Nr   z/%s)r   pathr   )r   r   r   r   r   r   r	   __init__	  s    z_Topic.__init__c                 C   s   | j rd|d< d S )Nr   r[   r   )r   attrsr   r   r	   _timestamp_message  s    z_Topic._timestamp_messageN)r  r   F)r   r   r   r  r  r   r   r   r	   r     s     
r   c                   @   s   e Zd ZdZdd ZdS )r   Nc                 C   s
   || _ d S r   r   )r   r   r   r   r	   r    s    z_Client.__init__)r   r   r   
connectionr  r   r   r   r	   r     s   r   c                   @   s   e Zd ZdS )r{   N)r   r   r   r   r   r   r	   r{     s   r{   )Z	unittest2ZTestCaser   r   r   r+   r   r   r   	Exceptionr{   r   r   r   r	   <module>   s       $ )