o
    Óó·i¹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ÚpZnewp© r(   úeC:\Users\psant\Downloads\PAF backend\school\venv\Lib\site-packages\twisted/words/test/test_service.pyÚ_entityCreationTest   s"   
 zRealmTests._entityCreationTestc                 C   ó
   |   d¡S )NÚUser©r*   ©r#   r(   r(   r)   ÚtestUserCreation4   ó   
zRealmTests.testUserCreationc                 C   r+   )NÚGroupr-   r.   r(   r(   r)   ÚtestGroupCreation7   r0   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   r3   )r   r   r,   r   ÚaddUserr"   r5   r6   )r#   r%   r'   r7   r8   r9   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%   Úgroupr8   r(   r(   r)   ÚtestGroupRetrieval[   s
   
zRealmTests.testGroupRetrievalc                 C   sD   t  d¡}t  d¡}|  | |¡¡ |  | d¡¡}|  ||¡ d S )Nr   r=   Z	testGroup)r   r   r1   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   r4   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/   r2   r:   r<   rA   rC   rD   rN   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)r7   r   Z StringTransportWithDisconnectionÚ	transportZbuildProtocolÚprotocolÚmindZmakeConnection)r#   r7   r%   Úfactoryr   r(   r(   r)   Ú__init__‡   s   


zTestCaseUserAgg.__init__c                 C   s   | j  |¡ d S rT   )rV   ZdataReceived)r#   Ústuffr(   r(   r)   Úwrite•   s   zTestCaseUserAgg.writeN)rO   rP   rQ   r   ÚIPv4AddressrY   r[   r(   r(   r(   r)   rR   †   s    
ûrR   c                   @   sØ   e Zd Zg d¢Zdd„ Zdd„ Zd3dd„Zd	d
„ Zd3d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/d0„ Zd1d2„ ZdS )4Ú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 ¡ q#t|ƒS )Nr   úutf-8Ú	_password)r   r   r%   r   Ú'InMemoryUsernamePasswordDatabaseDontUseÚcheckerr   ÚPortalZ
IRCFactoryrX   ÚSTATIC_USERSÚ
isinstanceÚbytesÚdecodeÚappendr4   r;   r	   )r#   ÚcÚnickr(   r(   r)   ÚsetUp¨   s   



zIRCProtocolTests.setUpc                 C   sV   |   |¡}tjtjtjtjg}|D ]\}}}||v 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#   r7   ÚresponseÚexpectedÚprefixÚcommandÚargsr(   r(   r)   Ú_assertGreeting¶   s   

€z IRCProtocolTests._assertGreetingNc                 C   s8   |d u r|d }|  d|› d�¡ |  d|› d�¡ d S )Nrh   zPASS z
zNICK z extrainfo
)r[   )r#   r7   rr   Úpasswordr(   r(   r)   Ú_loginÅ   s   zIRCProtocolTests._loginc                 C   s2   |   | j |¡¡}t|| j| jƒ}|  ||¡ |S rT   )r   r%   r6   rR   rX   r~   )r#   r   r7   Zaggr(   r(   r)   Ú_loggedInUserË   s   zIRCProtocolTests._loggedInUserc                 C   s^   |j  ¡ }| d¡}| ¡ }|j  ¡  g }ttj|ƒD ]}|du s'|d |kr,| |¡ q|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.
        rg   Né   )	rU   Úvaluero   Ú
splitlinesÚclearÚmapr   Zparsemsgrp   )r#   r7   ZmessageTyperw   ÚresultÚmessager(   r(   r)   rt   Ñ   s   



€zIRCProtocolTests._responsec                 C   s   |   d¡}|  |¡ d S )Nra   )r   r|   )r#   r7   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.
        ra   zNICK firstuser extrainfo
ÚPRIVMSGr€   r   é   z	Password?z%PRIVMSG nickserv firstuser_password
N)r   r%   r6   rR   rX   r[   rt   r   Úlenr   ZNICKSERVrU   rƒ   r|   ©r#   ra   r7   rw   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 )Nra   Z	wrongpassrˆ   r€   r   r‰   zLogin failed.  Goodbye.)	r   r%   r6   rR   rX   r~   rt   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 )Nra   c                      s
   ˆ   d¡S )NT)rp   r(   ©Úlogoutr(   r)   Ú<lambda>  ó   
 z-IRCProtocolTests.testLogout.<locals>.<lambda>zQUIT
T)
r   r%   r6   rR   rX   r~   rV   r�   r[   r   )r#   ra   r7   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 g d¢g d¢g¡ d S )Nra   Úsomechannelzsome random topicÚtopicúJOIN #somechannel
é   r   zfirstuser!firstuser@realmnamer€   ZJOINr‰   ú#somechannelZ353Z366é   Ú332é   Ú333r_   úotheruser!otheruser@realmnamer   )r_   ú=r—   zfirstuser otheruser)r_   r�   r—   zotheruser firstuser)r   r%   r6   r>   ÚmetarR   rX   r~   rU   rƒ   r[   rt   r   rŠ   r   ZassertIn)r#   ra   r“   r7   rw   Ú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.
        ra   r“   r•   c                 S   s   g | ]}|d  ‘qS )r€   r(   )rG   Úrr(   r(   r)   rI   R  s    z7IRCProtocolTests.test_joinTopicless.<locals>.<listcomp>r™   r›   N)r   r%   r6   r>   rR   rX   r~   rU   rƒ   r[   rt   ZassertNotIn)r#   ra   r7   rw   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>   r[   rU   rƒ   rt   r   rŠ   ©r#   r7   rŸ   rw   r    r(   r(   r)   Ú	testLeaveV  sL   





















zIRCProtocolTests.testLeavec                 C   sH  |   d¡}t d¡}d|jd< d|jd< d|jd< |  | j |¡¡ |j ¡  | 	d	¡ |  
|¡}|  |d
 d d¡ |  |d
 d d¡ |  |d
 d g d¢¡ |  |d d d¡ |  |d d g d¢¡ |j ¡  | 	d¡ |  
|¡}|  |d d d¡ |  |d d g d¢¡ |  |d d d¡ |  |d d g d¢¡ d S )Nr^   r“   úThis is a test topic.r”   Úsome_fellowZtopic_authoriqË¢Ú
topic_dater•   r˜   r   r   r€   r™   r‰   )r^   r—   r¨   rš   r›   )r^   r—   r©   Z77777777úTOPIC #somechannel
)r   r   r1   rž   r   r%   rB   rU   rƒ   r[   rt   r   )r#   r7   r@   rw   r(   r(   r)   ÚtestGetTopic‘  s:   







ÿÿ


ÿÿzIRCProtocolTests.testGetTopicc                 C   sn  |   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
 g d¢¡ |  |d d d¡ |  |d d
 g d¢¡ |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—   úThis is the new topic.i90  rª   r«   r™   )r_   r—   r­   r›   )r_   r—   r_   Z12345zTOPIC #asdlkjasd
Z403)
r   r   r%   r>   r[   rU   rƒ   rt   r   rž   )r#   r7   r“   rŸ   rw   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>   r[   rU   rƒ   rt   rv   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 g d¢¡ d S )Nr^   r_   z#PRIVMSG otheruser :Hello, monkey.
r€   r   r¤   rˆ   r‰   zHello, monkey.z)PRIVMSG nousernamedthis :Hello, monkey.
r   Z401)r^   ZnousernamedthiszNo such nick/channel.)r   rU   rƒ   r[   rt   rv   r   rŠ   r¦   r(   r(   r)   ÚtestPrivateMessage  s(   









ÿz#IRCProtocolTests.testPrivateMessagec                 C   óP   |   d¡}|j ¡  | d¡ |  |¡}|  t|ƒd¡ |  |d d d¡ d S )Nr^   zOPER user pass
r€   r   Z491©r   rU   rƒ   r[   rt   r   rŠ   ©r#   r7   rw   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   r²   )Nr^   zMODE useruser +abcd
r€   r   Ú472r³   r´   r(   r(   r)   ÚtestSetUserMode6  s   



z IRCProtocolTests.testSetUserModec                 C   ól   |   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@  ó   




z!IRCProtocolTests.testGetGroupModec                 C   rº   )Nr^   Ú	groupnameúJOIN #groupname
zMODE #groupname +abcd
r€   r   r¸   r¥   r´   r(   r(   r)   ÚtestSetGroupModeN  r¼   z!IRCProtocolTests.testSetGroupModec              	   C   s¶  t  d¡}|  | j |¡¡ g }dD ]}|  |¡}| |¡ |d  d¡ q|D ]}|j 	¡  q(|d  d¡ |  
|d ¡}|  |  
|d ¡¡ |  |  
|d ¡¡ g d¢}|d d… D ]M\}}	}
|  |d	¡ |  |	d
¡ |
\}}}}}}}}|  |d¡ |  |d¡ |  ||v ¡ |  |d	¡ |  |d	¡ | |¡ |  |d¡ |  |d| ¡ q\|  |¡ |d \}}	}
|  |d	¡ |  |	d¡ |
\}}}|  |d¡ |  |d¡ |  |d¡ d S )Nr½   )rc   rd   re   r¯   r¾   r   zWHO #groupname
r€   r‰   r   Z352rc   z
#groupnameÚHz0 Z315zEnd of /WHO list.)r   r1   r   r%   rB   r   rp   r[   rU   rƒ   rt   rv   r   Ú
assertTrueru   )r#   r@   Zusersrr   Úur7   r¢   Z	wantusersry   ÚcoderZ   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 )Nrf   Ú	somegroupc                   S   s   t dƒS )Né   )r   r(   r(   r(   r)   r�   ”  s    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   rU   rƒ   r   r%   r>   Úsizerž   r[   rt   r   rŠ   )r#   r7   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   r1   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,   rJ   ZsignOnÚtimeZlastMessager   r%   r;   rU   rƒ   r[   rt   r   rŠ   )	r#   r7   rÌ   r¢   ZwuserZwserverÚidleZchannelsrÊ   r(   r(   r)   Ú	testWhoisº  sT   





zIRCProtocolTests.testWhoisrT   )rO   rP   rQ   rl   rs   r|   r~   r   rt   r‡   rŒ   r�   r’   r¡   r£   r§   r¬   r®   r°   r±   rµ   r·   r¹   r»   r¿   rÅ   rË   rÔ   r(   r(   r(   r)   r]   ™   s4    

	
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 rT   )ÚjoinsÚpartsÚmessagesrž   )r#   ÚaÚkwr(   r(   r)   rY   ó  s   
zTestMind.__init__c                 C   ó   | j  ||f¡ d S rT   )rÖ   rp   )r#   r7   r@   r(   r(   r)   Úremote_userJoinedù  ó   zTestMind.remote_userJoinedc                 C   ó   | j  |||f¡ d S rT   )r×   rp   )r#   r7   r@   Úreasonr(   r(   r)   Úremote_userLeftü  ó   zTestMind.remote_userLeftc                 C   rÞ   rT   )rØ   rp   )r#   ZsenderZ	recipientr†   r(   r(   r)   Úremote_receiveÿ  rá   zTestMind.remote_receivec                 C   rÛ   rT   )rž   rp   )r#   r@   rž   r(   r(   r)   Úremote_groupMetaUpdate  rÝ   zTestMind.remote_groupMetaUpdateN)rO   rP   rQ   rY   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   rS   )r   r   r%   r   ri   rj   r   rk   r   ZPBServerFactoryZserverFactoryÚ_protocolFactoryrV   ZunsafeTracebacksZPBClientFactoryÚclientFactoryr   Z	listenTCPÚ
serverPortZ
connectTCPZgetHostÚportÚ
clientConnr.   r(   r(   r)   rs   
  s   



ÿzPBProtocolTests.setUpc                 O   s   t  d¡| _| jS )Nr   )r   ZBrokerÚ_serverProtocol)r#   r{   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 rT   )Ú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 rT   )ræ   Úlogin)Zign©ÚcredsrW   r#   r(   r)   r�   .  s    z1PBProtocolTests._loggedInAvatar.<locals>.<lambda>)
rm   ÚstrÚencoder   ZUsernamePasswordrj   r;   r%   r4   ZaddCallback)r#   r   r}   rW   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threerE   rF   r(   r(   r)   Ú
testGroups1  s"   €
zPBProtocolTests.testGroupsN)
rO   rP   rQ   rs   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   rR   r]   ZPBMindrÕ   ZsetUnjellyableForClassZPBMindReferencerä   r(   r(   r(   r)   Ú<module>   s(   r    ]