U
    /Wj¹o  ã                   @   sô   d Z ddlZddlmZmZmZ ddlmZmZm	Z	 ddl
mZmZmZmZ ddlmZ ddlmZ ddlmZ dd	lmZmZ dd
lmZ G dd„ dejƒZG dd„ dƒZG dd„ dejƒZG dd„ dejƒZe  eej!¡ G dd„ dejƒZ"dS )z%
Tests for L{twisted.words.service}.
é    N)ÚcheckersÚcredentialsÚportal)ÚaddressÚdeferÚreactor)ÚDeferredÚDeferredListÚmaybeDeferredÚsucceed)Úpb)Úproto_helpers)Úunittest)ÚewordsÚservice)Úircc                   @   sT   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S )Ú
RealmTestsc                 C   s$  t  d¡}d| ¡  }t|d| ¡  ƒ}t|d| ¡  ƒ}d| ¡  d }ttd| ¡  ƒ}ttd| ¡  ƒ}|  ||ƒ¡}	|  ||	j¡ |  	||ƒ¡ 
|¡ t||dƒ |  |d	| ¡  ƒ¡}	|  d	| ¡  |	j¡ |  |d	| ¡  ƒ¡}
|  |	|
¡ t||d
ƒ |  	|d| ¡  ƒ¡ 
|¡ d S )NÚ	realmnameÚtestÚcreateÚgetZ	OnRequestZ	DuplicateZNoSuchTÚnewFZanother)r   ÚInMemoryWordsRealmÚlowerÚgetattrÚtitler   ÚsuccessResultOfÚassertEqualÚnameÚfailureResultOfÚtrapÚsetattrÚassertIdentical)ÚselfÚkindÚrealmr   r   r   ÚflagZdupExcZ	noSuchExcÚpÚnewp© r)   újc:\users\psant\downloads\hotstarbackend\school\venv38\Lib\site-packages\twisted/words/test/test_service.pyÚ_entityCreationTest   s"    
zRealmTests._entityCreationTestc                 C   s
   |   d¡S )NÚUser©r+   ©r#   r)   r)   r*   ÚtestUserCreation4   s    zRealmTests.testUserCreationc                 C   s
   |   d¡S )NÚGroupr-   r.   r)   r)   r*   ÚtestGroupCreation7   s    zRealmTests.testGroupCreationc                 C   sn   t  d¡}|  | d¡¡}|  | d¡¡}|  ||¡ |  | d¡¡}|  ||¡ |  | d¡¡ t	j
¡ d S )Nr   ÚtestuserZ
nosuchuser)r   r   r   Ú
createUserÚgetUserr"   Ú
lookupUserr   r    r   Z
NoSuchUser)r#   r%   ÚuserÚ	retrievedÚlookedUpr)   r)   r*   ÚtestUserRetrieval:   s    
zRealmTests.testUserRetrievalc                 C   sl   t  d¡}t  d¡}|  | |¡¡}|  ||¡ |  | d¡¡}|  ||¡ |  | d¡¡}|  ||¡ d S )Nr   r2   )r   r   r,   r   ÚaddUserr"   r4   r5   )r#   r%   r'   r6   r7   r8   r)   r)   r*   ÚtestUserAdditionK   s    

zRealmTests.testUserAdditionc                 C   sR   t  d¡}|  | d¡¡}|  | d¡¡}|  ||¡ |  | d¡¡ tj	¡ d S )Nr   Ú	testgroupZnosuchgroup)
r   r   r   ÚcreateGroupÚgetGroupr"   r   r    r   ZNoSuchGroup)r#   r%   Úgroupr7   r)   r)   r*   ÚtestGroupRetrieval[   s
    
zRealmTests.testGroupRetrievalc                 C   sD   t  d¡}t  d¡}|  | |¡¡ |  | d¡¡}|  ||¡ d S )Nr   r<   Z	testGroup)r   r   r0   r   ÚaddGroupr>   r"   )r#   r%   r'   r?   r)   r)   r*   ÚtestGroupAdditionf   s
    

zRealmTests.testGroupAdditionc                 C   s.   t  d¡}|  | d¡¡ |  | d¡¡ dS )zÚ
        Try creating a group with the same name as an existing user and
        assert that it succeeds, since users and groups should not be in the
        same namespace and collisions should be impossible.
        r   r   N)r   r   r   r3   r=   )r#   r%   r)   r)   r*   ÚtestGroupUsernameCollisionn   s    
z%RealmTests.testGroupUsernameCollisionc                 C   sb   t  d¡}|  | d¡¡ |  | d¡¡ |  | ¡ ¡}dd„ |D ƒ}| ¡  |  |ddg¡ d S )Nr   ÚgrouponeÚgrouptwoc                 S   s   g | ]
}|j ‘qS r)   )r   )Ú.0Úgr)   r)   r*   Ú
<listcomp>�   s     z.RealmTests.testEnumeration.<locals>.<listcomp>)r   r   r   r=   Ú
itergroupsÚsortr   )r#   r%   ÚgroupsÚnr)   r)   r*   ÚtestEnumerationy   s    
zRealmTests.testEnumerationN)Ú__name__Ú
__module__Ú__qualname__r+   r/   r1   r9   r;   r@   rB   rC   rM   r)   r)   r)   r*   r      s   r   c                   @   s*   e Zd Ze ddd¡fdd„Zdd„ ZdS )	ÚTestCaseUserAggZTCPú	127.0.0.1i1Ô  c                 C   sB   || _ t ¡ | _| |¡| _| j| j_| j| j _| j | j¡ d S ©N)r6   r   Z StringTransportWithDisconnectionÚ	transportZbuildProtocolÚprotocolÚmindZmakeConnection)r#   r6   r%   Úfactoryr   r)   r)   r*   Ú__init__‡   s    


zTestCaseUserAgg.__init__c                 C   s   | j  |¡ d S rS   )rU   ZdataReceived)r#   Ústuffr)   r)   r*   Úwrite•   s    zTestCaseUserAgg.writeN)rN   rO   rP   r   ÚIPv4AddressrX   rZ   r)   r)   r)   r*   rQ   †   s   û
rQ   c                   @   sê   e Zd Zddddddddd	d
dgZdd„ Zdd„ Zd=dd„Zd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#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ ZdS )?ÚIRCProtocolTestsÚuseruserÚ	otheruserÚsomeguyÚ	firstuserÚusernameÚuseroneÚusertwoÚ	userthreeZuserfours   userfiveÚsomeuserc                 C   sŒ   t  d¡| _t ¡ | _t | j| jg¡| _t  | j| j¡| _	g }| j
D ]<}t|tƒr^| d¡}| | j |¡¡ | j ||d ¡ qFt|ƒS )Nr   úutf-8Ú	_password)r   r   r%   r   Ú'InMemoryUsernamePasswordDatabaseDontUseÚcheckerr   ÚPortalZ
IRCFactoryrW   ÚSTATIC_USERSÚ
isinstanceÚbytesÚdecodeÚappendr3   r:   r	   )r#   ÚcÚnickr)   r)   r*   ÚsetUp¨   s    



zIRCProtocolTests.setUpc                 C   sV   |   |¡}tjtjtjtjg}|D ]\}}}||kr"| |¡ q"|  |d|›�¡ dS )z½
        The user has been greeted with the four messages that are (usually)
        considered to start an IRC session.

        Asserts that the required responses were received.
        zMissing responses for N)Ú	_responser   ZRPL_WELCOMEZRPL_YOURHOSTZRPL_CREATEDZ
RPL_MYINFOÚremoveÚassertFalse)r#   r6   ÚresponseÚexpectedÚprefixÚcommandÚargsr)   r)   r*   Ú_assertGreeting¶   s    
z IRCProtocolTests._assertGreetingNc                 C   s8   |d kr|d }|  d|› d�¡ |  d|› d�¡ d S )Nrg   zPASS z
zNICK z extrainfo
)rZ   )r#   r6   rq   Úpasswordr)   r)   r*   Ú_loginÅ   s    zIRCProtocolTests._loginc                 C   s2   |   | j |¡¡}t|| j| jƒ}|  ||¡ |S rS   )r   r%   r5   rQ   rW   r}   )r#   r   r6   Zaggr)   r)   r*   Ú_loggedInUserË   s    zIRCProtocolTests._loggedInUserc                 C   s^   |j  ¡ }| d¡}| ¡ }|j  ¡  g }ttj|ƒD ]"}|dksN|d |kr6| |¡ q6|S )z£
        Extracts the user's response, and returns a list of parsed lines.
        If messageType is defined, only messages of that type will be returned.
        rf   Né   )	rT   Úvaluern   Ú
splitlinesÚclearÚmapr   Zparsemsgro   )r#   r6   ZmessageTyperv   ÚresultÚmessager)   r)   r*   rs   Ñ   s    


zIRCProtocolTests._responsec                 C   s   |   d¡}|  |¡ d S )Nr`   )r~   r{   )r#   r6   r)   r)   r*   ÚtestPASSLoginà   s    
zIRCProtocolTests.testPASSLoginc                 C   s¬   |   | j d¡¡}t|| j| jƒ}| d¡ |  |d¡}|  t|ƒd¡ |  |d d t	j
¡ |  |d d d¡ |  |d d ddg¡ |j ¡  | d¡ |  |¡ d	S )
zµ
        Sending NICK without PASS will prompt the user for their password.
        When the user sends their password to NickServ, it will respond with a
        Greeting.
        r`   zNICK firstuser extrainfo
ÚPRIVMSGr   r   é   z	Password?z%PRIVMSG nickserv firstuser_password
N)r   r%   r5   rQ   rW   rZ   rs   r   Úlenr   ZNICKSERVrT   r‚   r{   ©r#   r`   r6   rv   r)   r)   r*   Útest_nickServLoginä   s    


z#IRCProtocolTests.test_nickServLoginc                 C   sh   |   | j d¡¡}t|| j| jƒ}|  |dd¡ |  |d¡}|  t|ƒd¡ |  |d d ddg¡ d S )Nr`   Z	wrongpassr‡   r   r   rˆ   zLogin failed.  Goodbye.)	r   r%   r5   rQ   rW   r}   rs   r   r‰   rŠ   r)   r)   r*   ÚtestFailedLoginø   s    z IRCProtocolTests.testFailedLoginc                    s^   g ‰ |   | j d¡¡}t|| j| jƒ}|  |d¡ ‡ fdd„|j_| d¡ |  	ˆ dg¡ d S )Nr`   c                      s
   ˆ   d¡S )NT)ro   r)   ©Úlogoutr)   r*   Ú<lambda>  ó    z-IRCProtocolTests.testLogout.<locals>.<lambda>zQUIT
T)
r   r%   r5   rQ   rW   r}   rU   rŽ   rZ   r   )r#   r`   r6   r)   r�   r*   Ú
testLogout  s    
zIRCProtocolTests.testLogoutc                 C   sä  |   | j d¡¡}|   | j d¡¡}d|jd< t|| j| jƒ}|  |d¡ |j 	¡  | 
d¡ |  |¡}|  t|ƒd¡ |  |d d d¡ |  |d d	 d
¡ |  |d d dg¡ |  |d	 d	 d¡ |  |d d	 d¡ |  |d d	 d¡ |  |d d	 d¡ |  d¡}|j 	¡  |j 	¡  | 
d¡ |  |¡}|  |¡}|  t|ƒd	¡ |  |d d d¡ |  |d d	 d
¡ |  |d d dg¡ |  |d	 d d¡ |  |d	 d	 d¡ |  |d	 d ddddgddddgg¡ d S )Nr`   Úsomechannelzsome random topicÚtopicúJOIN #somechannel
é   r   zfirstuser!firstuser@realmnamer   ZJOINrˆ   ú#somechannelZ353Z366é   Ú332é   Ú333r^   úotheruser!otheruser@realmnamer   ú=zfirstuser otheruserzotheruser firstuser)r   r%   r5   r=   ÚmetarQ   rW   r}   rT   r‚   rZ   rs   r   r‰   r~   ZassertIn)r#   r`   r’   r6   rv   ÚotherÚeventr)   r)   r*   ÚtestJoin  sD    












þþzIRCProtocolTests.testJoinc                 C   sˆ   |   | j d¡¡}|   | j d¡¡ t|| j| jƒ}|  |d¡ |j ¡  | 	d¡ |  
|¡}dd„ |D ƒ}|  d|¡ |  d|¡ dS )	zo
        When a user joins a group without a topic, no topic information is
        sent to that user.
        r`   r’   r”   c                 S   s   g | ]}|d  ‘qS )r   r)   )rF   Úrr)   r)   r*   rH   R  s     z7IRCProtocolTests.test_joinTopicless.<locals>.<listcomp>r˜   rš   N)r   r%   r5   r=   rQ   rW   r}   rT   r‚   rZ   rs   ZassertNotIn)r#   r`   r6   rv   ZresponseCodesr)   r)   r*   Útest_joinTopiclessB  s    


z#IRCProtocolTests.test_joinTopiclessc                 C   s  |   d¡}|  | j d¡¡ | d¡ |j ¡  |   d¡}| d¡ |j ¡  |j ¡  | d¡ |  |¡}|  |¡}|  t	|ƒd¡ |  |d d d¡ |  |d d d	¡ |  |d d
 ddg¡ |  ||¡ | d¡ |j ¡  |j ¡  | d¡ |  |¡}|  |¡}|  t	|ƒd¡ |  |d d d¡ |  |d d d	¡ |  |d d
 ddg¡ |  ||¡ | d¡ |j ¡  |j ¡  | d¡ |  |¡}|  |¡}|  t	|ƒd¡ |  |d d d¡ |  |d d d	¡ |  |d d
 ddg¡ |  ||¡ d S )Nr]   r’   r”   r^   zPART #somechannel
r   r   úuseruser!useruser@realmnameZPARTrˆ   r–   Zleavingz(PART #somechannel :goodbye stupidheads
zgoodbye stupidheadss   JOIN #somechannel
s)   PART #somechannel :goodbye stupidheads1
zgoodbye stupidheads1©
r~   r   r%   r=   rZ   rT   r‚   rs   r   r‰   ©r#   r6   rž   rv   rŸ   r)   r)   r*   Ú	testLeaveV  sL    





















zIRCProtocolTests.testLeavec                 C   sT  |   d¡}t d¡}d|jd< d|jd< d|jd< |  | j |¡¡ |j ¡  | 	d	¡ |  
|¡}|  |d
 d d¡ |  |d
 d d¡ |  |d
 d dddg¡ |  |d d d¡ |  |d d ddddg¡ |j ¡  | 	d¡ |  
|¡}|  |d d d¡ |  |d d dddg¡ |  |d d d¡ |  |d d ddddg¡ d S )Nr]   r’   zThis is a test topic.r“   Zsome_fellowZtopic_authoriqË¢Ú
topic_dater”   r—   r   r   r   r˜   rˆ   r–   r™   rš   Z77777777úTOPIC #somechannel
)r~   r   r0   r�   r   r%   rA   rT   r‚   rZ   rs   r   )r#   r6   r?   rv   r)   r)   r*   ÚtestGetTopic‘  sB    








 ÿ
 
ÿ



 ÿ
 
ÿzIRCProtocolTests.testGetTopicc                 C   st  |   d¡}|  | j d¡¡}| d¡ |   d¡}| d¡ |j ¡  |j ¡  | d¡ |  |¡}|  |¡}|  ||¡ |  |d d d¡ |  |d d d	¡ |  |d d
 ddg¡ |j ¡  d|j	d< | d¡ |  |¡}|  |d d d¡ |  |d d
 dddg¡ |  |d d d¡ |  |d d
 ddddg¡ |j ¡  | d¡ |  |¡}|  |d d d¡ d S )Nr]   r’   r”   r^   z,TOPIC #somechannel :This is the new topic.
r   r›   r   ZTOPICrˆ   r–   zThis is the new topic.i90  r§   r¨   r˜   rš   Z12345zTOPIC #asdlkjasd
Z403)
r~   r   r%   r=   rZ   rT   r‚   rs   r   r�   )r#   r6   r’   rž   rv   rŸ   r)   r)   r*   ÚtestSetTopic»  s@    













 ÿ
 
ÿ


zIRCProtocolTests.testSetTopicc                 C   sÌ   |   d¡}|  | j d¡¡ | d¡ |   d¡}| d¡ |j ¡  |j ¡  | d¡ |  |¡}|  |¡}|  |¡ |  	t
|ƒd¡ |  	|d d d¡ |  	|d d d	d
¡ |  	|d d ddg¡ d S )Nr]   r’   r”   r^   z%PRIVMSG #somechannel :Hello, world.
r   r   r£   r‡   éÿÿÿÿrˆ   r–   zHello, world.)r~   r   r%   r=   rZ   rT   r‚   rs   ru   r   r‰   r¥   r)   r)   r*   ÚtestGroupMessageé  s    









z!IRCProtocolTests.testGroupMessagec                 C   s
  |   d¡}|   d¡}|j ¡  |j ¡  | d¡ |  |¡}|  |¡}|  |¡ |  t|ƒd¡ |  |d d d¡ |  |d d d¡ |  |d d dd	g¡ | d
¡ |  |¡}|  t|ƒd¡ |  |d d d¡ |  |d d d¡ |  |d d dddg¡ d S )Nr]   r^   z#PRIVMSG otheruser :Hello, monkey.
r   r   r£   r‡   rˆ   zHello, monkey.z)PRIVMSG nousernamedthis :Hello, monkey.
r   Z401ZnousernamedthiszNo such nick/channel.)r~   rT   r‚   rZ   rs   ru   r   r‰   r¥   r)   r)   r*   ÚtestPrivateMessage  s*    










 ÿz#IRCProtocolTests.testPrivateMessagec                 C   sP   |   d¡}|j ¡  | d¡ |  |¡}|  t|ƒd¡ |  |d d d¡ d S )Nr]   zOPER user pass
r   r   Z491©r~   rT   r‚   rZ   rs   r   r‰   ©r#   r6   rv   r)   r)   r*   ÚtestOper   s    



zIRCProtocolTests.testOperc                 C   s|   |   d¡}|j ¡  | d¡ |  |¡}|  t|ƒd¡ |  |d d d¡ |  |d d d¡ |  |d d ddg¡ d S )	Nr]   zMODE useruser
r   r   r   Z221rˆ   ú+r®   r¯   r)   r)   r*   ÚtestGetUserMode*  s    



z IRCProtocolTests.testGetUserModec                 C   sP   |   d¡}|j ¡  | d¡ |  |¡}|  t|ƒd¡ |  |d d d¡ d S )Nr]   zMODE useruser +abcd
r   r   Ú472r®   r¯   r)   r)   r*   ÚtestSetUserMode6  s    



z IRCProtocolTests.testSetUserModec                 C   sl   |   d¡}|  | j d¡¡ | d¡ |j ¡  | d¡ |  |¡}|  t	|ƒd¡ |  |d d d¡ d S )Nr]   r’   r”   zMODE #somechannel
r   r   Z324r¤   r¯   r)   r)   r*   ÚtestGetGroupMode@  s    




z!IRCProtocolTests.testGetGroupModec                 C   sl   |   d¡}|  | j d¡¡ | d¡ |j ¡  | d¡ |  |¡}|  t	|ƒd¡ |  |d d d¡ d S )Nr]   Ú	groupnameúJOIN #groupname
zMODE #groupname +abcd
r   r   r³   r¤   r¯   r)   r)   r*   ÚtestSetGroupModeN  s    




z!IRCProtocolTests.testSetGroupModec              	   C   s¸  t  d¡}|  | j |¡¡ g }dD ]&}|  |¡}| |¡ |d  d¡ q$|D ]}|j 	¡  qP|d  d¡ |  
|d ¡}|  |  
|d ¡¡ |  |  
|d ¡¡ d	d
dg}|d d… D ]š\}}	}
|  |d¡ |  |	d¡ |
\}}}}}}}}|  |d	¡ |  |d¡ |  ||k¡ |  |d¡ |  |d¡ | |¡ |  |d¡ |  |d| ¡ qº|  |¡ |d \}}	}
|  |d¡ |  |	d¡ |
\}}}|  |d	¡ |  |d¡ |  |d¡ d S )Nr¶   )rb   rc   rd   r«   r·   r   zWHO #groupname
r   rˆ   rb   rc   rd   r   Z352z
#groupnameÚHz0 Z315zEnd of /WHO list.)r   r0   r   r%   rA   r~   ro   rZ   rT   r‚   rs   ru   r   Ú
assertTruert   )r#   r?   Zusersrq   Úur6   r¡   Z	wantusersrx   ÚcoderY   ZmynameZ	theirnameZ	theirhostZtheirserverZ	theirnickr&   ÚextraZchannelr)   r)   r*   ÚtestWho\  sV    



÷


zIRCProtocolTests.testWhoc                 C   s´  |   d¡}|j ¡  |  | j d¡¡}dd„ |_d|jd< | d¡ |  	|¡}|  
t|ƒd¡ |\}}|  
|d	 d
¡ |  
|d d¡ |  
|d d	 d¡ |  
|d d d¡ |  
|d d d¡ |  
|d d d¡ |  
|d	 d
¡ |  
|d d¡ |  
|d d	 d¡ |  
|d d d¡ |j ¡  | d¡ |  	|¡}|  
t|ƒd¡ |\}}|  
|d d¡ |  
|d d d¡ |  
|d d d¡ |  
|d d d¡ |  
|d d¡ d S )Nre   Ú	somegroupc                   S   s   t dƒS )Né   )r   r)   r)   r)   r*   r�   ”  r�   z+IRCProtocolTests.testList.<locals>.<lambda>zthis is the topic woor“   zLIST #somegroup
rˆ   r   r   r   Z322Z17r—   Z323zEnd of /LISTzLIST
)r~   rT   r‚   r   r%   r=   Úsizer�   rZ   rs   r   r‰   )r#   r6   r¿   r¡   ÚrespÚendZfg1r)   r)   r*   ÚtestList�  s:    








zIRCProtocolTests.testListc           	      C   sÈ  |   d¡}t d¡}dd„ |_d|_t ¡ d |_|  | j 	|¡¡ |j
 ¡  | d¡ |  |¡}|  t|ƒd¡ |\}}}}}|  |d	 d
¡ |  |d d¡ |  |d d	 d¡ |  |d d d¡ |  |d d d¡ |  |d d d
¡ |  |d d d¡ |  |d d d¡ |  |d	 d
¡ |  |d d¡ |  |d d	 d¡ |  |d d d¡ |  |d d d
¡ |  |d d d¡ |  |d	 d
¡ |  |d d¡ |  |d d	 d¡ |  |d d d¡ |  |d d d¡ |  |d d d¡ |  |d d d¡ |  |d	 d
¡ |  |d d¡ |  |d d	 d¡ |  |d d d¡ |  |d d d¡ |  |d	 d
¡ |  |d d¡ |  |d d	 d¡ |  |d d d¡ |  |d d d¡ d S )Nr_   Úotherguyc                   S   s   t t d¡t d¡gƒS )NZgroupAZgroupB)Úiterr   r0   r)   r)   r)   r*   r�   ¾  s   ÿz,IRCProtocolTests.testWhois.<locals>.<lambda>é
   é   zWHOIS otherguy
r•   r   r   r   Z311rˆ   r—   r™   Ú*Z312zHi mom!Z317Z15Ú10zseconds idle, signon timeZ319z#groupA #groupBZ318zEnd of WHOIS list.)r~   r   r,   rI   ZsignOnÚtimeZlastMessager   r%   r:   rT   r‚   rZ   rs   r   r‰   )	r#   r6   rÅ   r¡   ZwuserZwserverÚidleZchannelsrÃ   r)   r)   r*   Ú	testWhoisº  sT    





zIRCProtocolTests.testWhois)N)N)rN   rO   rP   rk   rr   r{   r}   r~   rs   r†   r‹   rŒ   r‘   r    r¢   r¦   r©   rª   r¬   r­   r°   r²   r´   rµ   r¸   r¾   rÄ   rÍ   r)   r)   r)   r*   r\   ™   sH   õ

	
7;*.

3+r\   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestMindc                 O   s   g | _ g | _g | _g | _d S rS   )ÚjoinsÚpartsÚmessagesr�   )r#   ÚaÚkwr)   r)   r*   rX   ó  s    zTestMind.__init__c                 C   s   | j  ||f¡ d S rS   )rÏ   ro   )r#   r6   r?   r)   r)   r*   Úremote_userJoinedù  s    zTestMind.remote_userJoinedc                 C   s   | j  |||f¡ d S rS   )rÐ   ro   )r#   r6   r?   Úreasonr)   r)   r*   Úremote_userLeftü  s    zTestMind.remote_userLeftc                 C   s   | j  |||f¡ d S rS   )rÑ   ro   )r#   ZsenderZ	recipientr…   r)   r)   r*   Úremote_receiveÿ  s    zTestMind.remote_receivec                 C   s   | j  ||f¡ d S rS   )r�   ro   )r#   r?   r�   r)   r)   r*   Úremote_groupMetaUpdate  s    zTestMind.remote_groupMetaUpdateN)rN   rO   rP   rX   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ejd	d
„ ƒZ	dS )ÚPBProtocolTestsc                 C   sŠ   t  d¡| _t ¡ | _t | j| jg¡| _t 	| j¡| _
| j| j
_d| j
_t ¡ | _d| j_t d| j
¡| _t d| j ¡ j| j¡| _d S )Nr   Tr   rR   )r   r   r%   r   rh   ri   r   rj   r   ZPBServerFactoryZserverFactoryÚ_protocolFactoryrU   ZunsafeTracebacksZPBClientFactoryÚclientFactoryr   Z	listenTCPÚ
serverPortZ
connectTCPZgetHostÚportÚ
clientConnr.   r)   r)   r*   rr   
  s    


 
 ÿzPBProtocolTests.setUpc                 O   s   t  d¡| _| jS )Nr   )r   ZBrokerÚ_serverProtocol)r#   rz   rÓ   r)   r)   r*   rÚ     s    z PBProtocolTests._protocolFactoryc                    s8   t ƒ ‰ | j ‡ fdd„¡ tt| jjƒt| jjƒˆ gƒS )Nc                      s
   ˆ   d ¡S rS   )Úcallbackr)   ©Zd3r)   r*   r�     r�   z*PBProtocolTests.tearDown.<locals>.<lambda>)	r   rß   ZnotifyOnDisconnectr	   r
   rÜ   ÚstopListeningrÞ   Z
disconnectr.   r)   rá   r*   ÚtearDown  s    

ýÿzPBProtocolTests.tearDownc                    sX   |}t |tƒr| d¡}t ||¡‰ ˆj ||¡ ˆj |¡}| 	‡ ‡‡fdd„¡ |S )NÚasciic                    s   ˆj  ˆ ˆ¡S rS   )rÛ   Úlogin)Zign©ÚcredsrV   r#   r)   r*   r�   .  r�   z1PBProtocolTests._loggedInAvatar.<locals>.<lambda>)
rl   ÚstrÚencoder   ZUsernamePasswordri   r:   r%   r3   ZaddCallback)r#   r   r|   rV   Z	nameBytesÚdr)   ræ   r*   Ú_loggedInAvatar'  s    

zPBProtocolTests._loggedInAvatarc           	      c   sÂ   t ƒ }|  dd|¡V }t ƒ }|  dd|¡V }t ƒ }|  dd|¡V }| j d¡V  | j d¡V  | d¡V }| d¡V }| d¡V  | d¡V  | d¡V  | d	d
i¡V  | ¡ V  | ¡ V  d S )NÚones   p1Útwos   p2s   threes   p3Zfoobars   barfoos   texts   hello, monkeys)rÎ   rë   r%   r=   ÚjoinÚsendZleave)	r#   Zmindonerì   Zmindtworí   Z	mindThreeZthreerD   rE   r)   r)   r*   Ú
testGroups1  s     
zPBProtocolTests.testGroupsN)
rN   rO   rP   rr   rÚ   rã   rë   r   ZinlineCallbacksrð   r)   r)   r)   r*   rÙ   	  s   
rÙ   )#Ú__doc__rË   Ztwisted.credr   r   r   Ztwisted.internetr   r   r   Ztwisted.internet.deferr   r	   r
   r   Ztwisted.spreadr   Ztwisted.testr   Ztwisted.trialr   Ztwisted.wordsr   r   Ztwisted.words.protocolsr   ZTestCaser   rQ   r\   ZPBMindrÎ   ZsetUnjellyableForClassZPBMindReferencerÙ   r)   r)   r)   r*   Ú<module>   s&   r    ]