a
    !f                     @   s   d dl Z G dd de jZG dd de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Zdeef 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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.dRS )STestSubscriptionPROJECT
topic_nameprojects/%s/topics/%sZsub_nameprojects/%s/subscriptions/%s*   zhttps://api.example.com/pushc                 C   s   ddl m} |S )Nr   )Subscription)gcloud.pubsub.subscriptionr   )selfr    r   `/var/www/html/python-backend/venv/lib/python3.9/site-packages/gcloud/pubsub/test_subscription.py_getTargetClass   s    z TestSubscription._getTargetClassc                 O   s   |   |i |S Nr   r
   argskwr   r   r   _makeOne   s    zTestSubscription._makeOnec                 C   sh   t | jd}t| j|d}| | j|}| |j| j | |j	|u  | |j
d  | |jd  d S Nprojectclient)_Clientr   _Topic
TOPIC_NAMEr   SUB_NAMEassertEqualname
assertTruetopicack_deadlinepush_endpointr
   r   r    subscriptionr   r   r   test_ctor_defaults"   s    z#TestSubscription.test_ctor_defaultsc                 C   st   t | jd}t| j|d}| | j|| j| j}| |j	| j | 
|j|u  | |j| j | |j| j d S r   )r   r   r   r   r   r   DEADLINEENDPOINTr   r   r   r    r!   r"   r#   r   r   r   test_ctor_explicit+   s    
z#TestSubscription.test_ctor_explicitc                 C   s@   t | jd}| j| j|d}| |j| j | |jd u  d S r   )r   r   r   r   r   r   r   r    )r
   r   r$   r   r   r   test_ctor_w_client_wo_topic5   s    z,TestSubscription.test_ctor_w_client_wo_topicc                 C   sf   t | jd}t | jd}t| j|d}| t" | j| j||d W d    n1 sX0    Y  d S r   )r   r   r   r   assertRaises	TypeErrorr   r   )r
   client1client2r    r   r   r   !test_ctor_w_both_topic_and_client;   s
    z2TestSubscription.test_ctor_w_both_topic_and_clientc                 C   s:   |  t | | j W d    n1 s,0    Y  d S r   )r*   r+   r   r   )r
   r   r   r   $test_ctor_w_neither_topic_nor_clientB   s    z5TestSubscription.test_ctor_w_neither_topic_nor_clientc                 C   s   ddl m} | j| j| jd| jid}|  }t| jd}|	||}| 
|j| j |j}| || | 
|j| j | 
|j| j | 
|j| j | 
|j| j d S )Nr   TopicpushEndpointr    r   ackDeadlineSeconds
pushConfigr   )gcloud.pubsub.topicr1   
TOPIC_PATHSUB_PATHr&   r'   r   r   r   from_api_reprr   r   r   r    assertIsInstancer   r   r!   r"   )r
   r1   resourceklassr   r$   r    r   r   r   test_from_api_repr_no_topicsF   s     z-TestSubscription.test_from_api_repr_no_topicsc                 C   s   |   }|j| j| jd| jid}|   }t| jd}|||}| |j	| j
 | |jd u  | |j| j | |j| j d S )Nr2   r3   r   )r   Z_DELETED_TOPIC_PATHr8   r&   r'   r   r   r9   r   r   r   r   r    r!   r"   )r
   r<   r;   r   r$   r   r   r   "test_from_api_repr_w_deleted_topicW   s    z3TestSubscription.test_from_api_repr_w_deleted_topicc                 C   s   ddl m} | j| j| jd| jid}i }|  }t| jd}|j	|||d}| 
|j| j |j}| || | ||| j u  | 
|j| j | 
|j| j | 
|j| j | 
|j| j d S )Nr   r0   r2   r3   r   topics)r6   r1   r7   r8   r&   r'   r   r   r   r9   r   r   r   r    r:   r   r   r   r!   r"   )r
   r1   r;   r@   r<   r   r$   r    r   r   r   *test_from_api_repr_w_topics_no_topic_matche   s$    z;TestSubscription.test_from_api_repr_w_topics_no_topic_matchc                 C   s   | j | j| jd| jid}t| jd}t| j|d}| j |i}|  }|j	|||d}| 
|j| j | |j|u  | 
|j| j | 
|j| j d S )Nr2   r3   r   r   r?   )r7   r8   r&   r'   r   r   r   r   r   r9   r   r   r   r   r    r!   r"   )r
   r;   r   r    r@   r<   r$   r   r   r   )test_from_api_repr_w_topics_w_topic_matchx   s    
z:TestSubscription.test_from_api_repr_w_topics_w_topic_matchc                 C   sd   d}d|| j f }d|f }d}t|d}t||d}| | j |}| |j| | |j| d S )Nr   r   z/%sr   r   r   )r   r   r   r   r   	full_namepath)r
   r   ZSUB_FULLr8   r   CLIENTr    r$   r   r   r   test_full_name_and_path   s    

z(TestSubscription.test_full_name_and_pathc                 C   s   ddl m} t| jd}t| j|d}| | j|}| }| 	t
|| | 	|j|u  | |jd | |jd | 	|jd u  d S )Nr   AutoAckr   r   F   r	   rH   r   r   r   r   r   r   auto_ackr   
isinstance_subscriptionr   _return_immediately_max_messages_client)r
   rH   r   r    r$   rK   r   r   r   test_autoack_defaults   s    z&TestSubscription.test_autoack_defaultsc                 C   s   ddl m} t| jd}t| jd}t| j|d}| | j|}|dd|}| 	t
|| | 	|j|u  | |jd | |jd | 	|j|u  d S )Nr   rG   r   r   T
   rJ   )r
   rH   r,   r-   r    r$   rK   r   r   r   test_autoack_explicit   s    z&TestSubscription.test_autoack_explicitc                 C   sn   | j | jd}t| jd}t  }|_||_t| j|d}| 	| j
|}|  | |j| j| j d d f d S )N)r    r   r   r   )r7   r8   r   r   _FauxSubscribererAPIsubscriber_api_subscription_create_responser   r   r   r   creater   _subscription_createdr
   RESPONSEr   apir    r$   r   r   r   /test_create_pull_wo_ack_deadline_w_bound_client   s    z@TestSubscription.test_create_pull_wo_ack_deadline_w_bound_clientc                 C   s   | j | j| jd| jid}t| jd}t| jd}t  }|_||_t	| j
|d}| | j|| j| j}|j|d | |j| j| j | j| jf d S )Nr2   r3   r   r   )r7   r8   r&   r'   r   r   rT   rU   rV   r   r   r   r   rW   r   rX   r
   rZ   r,   r-   r[   r    r$   r   r   r   2test_create_push_w_ack_deadline_w_alternate_client   s$    
zCTestSubscription.test_create_push_w_ack_deadline_w_alternate_clientc                 C   sV   t | jd}t  }|_t| j|d}| | j|}| |	  | 
|j| j d S r   )r   r   rT   rU   r   r   r   r   ZassertFalseexistsr   _subscription_gotr8   r
   r   r[   r    r$   r   r   r   test_exists_miss_w_bound_client   s    z0TestSubscription.test_exists_miss_w_bound_clientc                 C   sz   | j | jd}t| jd}t| jd}t  }|_||_t| j|d}| 	| j
|}| |j|d | |j| j  d S N)r   r    r   r   )r8   r7   r   r   rT   rU   _subscription_get_responser   r   r   r   r   r_   r   r`   r]   r   r   r   "test_exists_hit_w_alternate_client   s    z3TestSubscription.test_exists_hit_w_alternate_clientc                 C   s   | j | j| jd| jid}t| jd}t  }|_||_t	| j
|d}| | j|}|  | |j| j | |j| j | |j| j  d S )Nr2   )r   r    r4   r5   r   r   )r8   r7   r&   r'   r   r   rT   rU   rd   r   r   r   r   reloadr   r!   r"   r`   rY   r   r   r   test_reload_w_bound_client   s    z+TestSubscription.test_reload_w_bound_clientc                 C   s   | j | jd}t| jd}t| jd}t  }|_||_t| j|d}| 	| j
|| j| j}|j|d | |jd  | |jd  | |j| j  d S rc   )r8   r7   r   r   rT   rU   rd   r   r   r   r   r&   r'   rf   r   r!   r"   r`   r]   r   r   r   test_reload_w_alternate_client   s    
z/TestSubscription.test_reload_w_alternate_clientc                 C   sZ   i }t | jd}t  }|_||_t| j|d}| | j|}|	  | 
|j| j d S r   )r   r   rT   rU   _subscription_delete_responser   r   r   r   deleter   _subscription_deletedr8   rY   r   r   r   test_delete_w_bound_client  s    z+TestSubscription.test_delete_w_bound_clientc                 C   sr   i }t | jd}t | jd}t  }|_||_t| j|d}| | j|| j	| j
}|j|d | |j| j d S r   )r   r   rT   rU   ri   r   r   r   r   r&   r'   rj   r   rk   r8   r]   r   r   r   test_delete_w_alternate_client  s    
z/TestSubscription.test_delete_w_alternate_clientc                 C   sr   t | jd}t  }|_i |_t| j|d}| | j|}|j	| j
d | |j| j
 | |j| j| j
f d S )Nr   r   r"   )r   r   rT   rU   )_subscription_modify_push_config_responser   r   r   r   modify_push_configurationr'   r   r"   "_subscription_modified_push_configr8   ra   r   r   r   1test_modify_push_config_w_endpoint_w_bound_client'  s    
zBTestSubscription.test_modify_push_config_w_endpoint_w_bound_clientc                 C   s   t | jd}t | jd}t  }|_i |_t| j|d}| j| j|| j	d}|j
d |d | |jd  | |j| jd f d S )Nr   r   rn   )r"   r   )r   r   rT   rU   ro   r   r   r   r   r'   rp   r   r"   rq   r8   )r
   r,   r-   r[   r    r$   r   r   r   6test_modify_push_config_wo_endpoint_w_alternate_client4  s    
zGTestSubscription.test_modify_push_config_wo_endpoint_w_alternate_clientc                 C   s   dd l }ddlm} d}d}d}||}||d}||d}t| jd}	t  }
|	_|g|
_t	| j
|	d	}| | j|}| }| t|d
 |d \}}| || | || | |j| | |j| | |ji  | |
j| jdd
f d S )Nr   MessageDEADBEEFBEADCAFE   This is the message text)	messageIddataZackIdmessager   r   rI   Fbase64Zgcloud.pubsub.messageru   	b64encoder   r   rT   rU   _subscription_pull_responser   r   r   r   pullr   lenr:   rz   Z
message_id
attributes_subscription_pulledr8   )r
   r~   ru   ACK_IDMSG_IDPAYLOADB64MESSAGEREC_MESSAGEr   r[   r    r$   pulledack_idr|   r   r   r   ;test_pull_wo_return_immediately_max_messages_w_bound_clientD  s0    



zLTestSubscription.test_pull_wo_return_immediately_max_messages_w_bound_clientc                 C   s  dd l }ddlm} d}d}d}||}||ddid}||d	}t| jd
}	t| jd
}
t  }|
_|g|_t	| j
|	d}| | j|}|jdd|
d}| t|d |d \}}| || | || | |j| | |j| | |jddi | |j| jddf d S )Nr   rt   rv   rw   rx   ab)ry   rz   r   r{   r   r   T   return_immediatelymax_messagesr   rI   r}   )r
   r~   ru   r   r   r   r   r   r   r,   r-   r[   r    r$   r   r   r|   r   r   r   :test_pull_w_return_immediately_w_max_messages_w_alt_client_  s6    


zKTestSubscription.test_pull_w_return_immediately_w_max_messages_w_alt_clientc                 C   sp   t | jd}t  }|_i |_t| j|d}| | j|}|j	dd}| 
t|d | 
|j| jddf d S )Nr   r   F)r   r   rI   )r   r   rT   rU   r   r   r   r   r   r   r   r   r   r8   )r
   r   r[   r    r$   r   r   r   r   test_pull_wo_receivedMessages|  s    
z.TestSubscription.test_pull_wo_receivedMessagesc                 C   sl   d}d}t | jd}t  }|_i |_t| j|d}| | j|}|	||g | 
|j| j||gf d S Nrv   rw   r   r   r   r   rT   rU   !_subscription_acknowlege_responser   r   r   r   acknowledger   _subscription_ackedr8   r
   ACK_ID1ACK_ID2r   r[   r    r$   r   r   r   test_acknowledge_w_bound_client  s    z0TestSubscription.test_acknowledge_w_bound_clientc                 C   s|   d}d}t | jd}t | jd}t  }|_i |_t| j|d}| | j|}|j	||g|d | 
|j| j||gf d S r   r   r
   r   r   r,   r-   r[   r    r$   r   r   r   #test_acknowledge_w_alternate_client  s    z4TestSubscription.test_acknowledge_w_alternate_clientc                 C   st   d}d}t | jd}t  }|_i |_t| j|d}| | j|}|	||g| j
 | |j| j||g| j
f d S r   r   r   rT   rU   *_subscription_modify_ack_deadline_responser   r   r   r   Zmodify_ack_deadliner&   r   #_subscription_modified_ack_deadliner8   r   r   r   r   'test_modify_ack_deadline_w_bound_client  s    z8TestSubscription.test_modify_ack_deadline_w_bound_clientc                 C   s   d}d}t | jd}t | jd}t  }|_i |_t| j|d}| | j|}|j	||g| j
|d | |j| j||g| j
f d S r   r   r   r   r   r   +test_modify_ack_deadline_w_alternate_client  s    z<TestSubscription.test_modify_ack_deadline_w_alternate_clientc              	   C   s\  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  }|_	||_
t| j|d}| | j|}| }| |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.comrv      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   r   r   get_iam_policyr   r   r   sortedownerseditorsviewers
publisherssubscribers_got_iam_policyr8   )r
   r   r   r   r   r   OWNER1OWNER2EDITOR1EDITOR2VIEWER1VIEWER2	PUBLISHER
SUBSCRIBERPOLICYr   r[   r    r$   policyr   r   r   "test_get_iam_policy_w_bound_client  s@    

z3TestSubscription.test_get_iam_policy_w_bound_clientc                 C   s   ddi}t | jd}t | jd}t  }|_||_t| j|d}| | j|}|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   r8   )r
   r   r,   r-   r[   r    r$   r   r   r   r   &test_get_iam_policy_w_alternate_client  s    z7TestSubscription.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
  }|_||_t| j|d}| | j|}|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   rv   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   r   r   addr   r   r   r   set_iam_policyr   r   r   r   _set_iam_policyr8   )r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rZ   r   r[   r    r$   r   
new_policyr   r   r   "test_set_iam_policy_w_bound_client  sZ    



z3TestSubscription.test_set_iam_policy_w_bound_clientc           
      C   s   ddl m} ddi}t| jd}t| jd}t  }|_||_t| j|d}| 	| j
|}| }|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   r8   )
r
   r   rZ   r,   r-   r[   r    r$   r   r   r   r   r   &test_set_iam_policy_w_alternate_client>  s     z7TestSubscription.test_set_iam_policy_w_alternate_clientc           
      C   s   ddl m}m}m} |||g}t| jd}t  }|_|d d |_t	| j
|d}| | j|}||}	| |	|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   r   r   check_iam_permissionsr   _tested_iam_permissionsr8   )
r
   r   r   r   ROLESr   r[   r    r$   allowedr   r   r   )test_check_iam_permissions_w_bound_clientR  s    

z:TestSubscription.test_check_iam_permissions_w_bound_clientc                 C   s   ddl m}m}m} |||g}t| jd}t| jd}t  }|_g |_t	| j
|d}| | j|}	|	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   r8   )r
   r   r   r   r   r,   r-   r[   r    r$   r   r   r   r   -test_check_iam_permissions_w_alternate_clienta  s    
z>TestSubscription.test_check_iam_permissions_w_alternate_clientN)/__name__
__module____qualname__r   r   r7   r   r8   r&   r'   r   r   r%   r(   r)   r.   r/   r=   r>   rA   rB   rF   rQ   rS   r\   r^   rb   re   rg   rh   rl   rm   rr   rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      sX   	

,9r   c                   @   sF   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd Zdd Z	dS )rT   Nc                 C   s   ||||f| _ | jS r   )rX   rV   )r
   subscription_pathZ
topic_pathr!   r"   r   r   r   subscription_createt  s    z(_FauxSubscribererAPI.subscription_createc                 C   s:   ddl m} || _z| jW S  ty4   ||Y n0 d S )Nr   )NotFound)Zgcloud.exceptionsr   r`   rd   AttributeError)r
   r   r   r   r   r   subscription_getz  s    z%_FauxSubscribererAPI.subscription_getc                 C   s   || _ | jS r   )rk   ri   )r
   r   r   r   r   subscription_delete  s    z(_FauxSubscribererAPI.subscription_deletec                 C   s   ||f| _ | jS r   )rq   ro   )r
   r   r"   r   r   r   subscription_modify_push_config  s    z4_FauxSubscribererAPI.subscription_modify_push_configc                 C   s   |||f| _ | jS r   )r   r   )r
   r   r   r   r   r   r   subscription_pull  s    z&_FauxSubscribererAPI.subscription_pullc                 C   s   ||f| _ | jS r   )r   r   )r
   r   ack_idsr   r   r   subscription_acknowledge  s    
z-_FauxSubscribererAPI.subscription_acknowledgec                 C   s   |||f| _ | jS r   )r   r   )r
   r   r   r!   r   r   r    subscription_modify_ack_deadline  s    z5_FauxSubscribererAPI.subscription_modify_ack_deadline)NN)
r   r   r   r   r   r   r   r   r   r   r   r   r   r   rT   r  s    
rT   c                   @   sD   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S )TestAutoAckc                 C   s   ddl m} |S )Nr   rG   )r	   rH   )r
   rH   r   r   r   r     s    zTestAutoAck._getTargetClassc                 O   s   |   |i |S r   r   r   r   r   r   r     s    zTestAutoAck._makeOnec                 C   sB   t d}| |}| |jd | |jd | |jd u  d S Nr   FrI   )_FauxSubscriptionr   r   rN   rO   r   rP   )r
   r$   rK   r   r   r   r%     s
    
zTestAutoAck.test_ctor_defaultsc                 C   s`   t  }td}| j|dd|d}| |j|u  | |jd | |jd | |j|u  d S Nr   TrR   r   )	objectr   r   r   rM   r   rN   rO   rP   )r
   rE   r$   rK   r   r   r   r(     s    zTestAutoAck.test_ctor_explicitc                 C   st   t d}| |}|}W d    n1 s,0    Y  | ||u  | |jd | |jd | |jd u  d S r   )r   r   r   r   rN   rO   rP   )r
   r$   rK   returnedr   r   r   test___enter___w_defaults  s    
z%TestAutoAck.test___enter___w_defaultsc                 C   s   t  }td}| j|dd|d}|}W d    n1 s:0    Y  | ||u  | |jd | |jd | |j|u  d S r   )r   r   r   r   r   rN   rO   rP   )r
   rE   r$   rK   r   r   r   r   test___enter___w_explicit  s    z%TestAutoAck.test___enter___w_explicitc                 C   s   t  }dt  }}dt  }}dtd }}||f||f||fg}t|}	| j|	|d}
|
2 t|
 D ]\}}|jrj|
|= qjW d    n1 s0    Y  | t|	j	||g | 
|	j|u  d S )Nr   r   ACK_ID3Tr   )r   _FallibleMessager   r   listitemsfailr   r   _acknowledgedr   _ack_client)r
   rE   r   ZMESSAGE1r   ZMESSAGE2r   ZMESSAGE3ZITEMSr$   rK   r   r|   r   r   r   test___exit___  s$    &zTestAutoAck.test___exit___N)
r   r   r   r   r   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 ZdS )r   c                 C   s8   || _ || _|j| _d|j|f | _d|j|f | _d S )Nr   z/projects/%s/topics/%s)r   rP   r   rC   rD   )r
   r   r   r   r   r   __init__  s
    z_Topic.__init__N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 )r   Nc                 C   s
   || _ d S r   r   )r
   r   r   r   r   r    s    z_Client.__init__Fc                 C   s   ddl m} ||| |dS )Nr   r0   )r   timestamp_messages)r6   r1   )r
   r   r  r1   r   r   r   r      s    z_Client.topic)F)r   r   r   
connectionr  r    r   r   r   r   r     s   r   c                   @   s   e Zd ZdddZdS )r   Fc                 C   s
   || _ d S r   )r   )r
   r   r   r   r   r    s    z_FallibleMessage.__init__N)Fr  r   r   r   r   r     s   r   c                   @   s(   e Zd Zdd Zd
ddZddd	ZdS )r   c                 C   s   || _ t|| _t | _d S r   )_itemsdict_mappingsetr  )r
   r   r   r   r   r    s    
z_FauxSubscription.__init__FrI   Nc                 C   s   || _ || _|| _| jS r   )rN   rO   rP   r
  )r
   r   r   r   r   r   r   r     s    z_FauxSubscription.pullc                 C   s4   || _ |D ]$}| j| }|jr"J | j| q
d S r   )r  r  r   r  r   )r
   r   r   r   r|   r   r   r   r      s
    

z_FauxSubscription.acknowledge)FrI   N)N)r   r   r   r  r   r   r   r   r   r   r     s   
r   )Z	unittest2ZTestCaser   r   rT   r   r   r   r   r   r   r   r   r   r   <module>   s       d+K
