o
    ¼>h¹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ÚgetÚ	OnRequestÚ	DuplicateÚNoSuchTÚnewFÚanother)r   ÚInMemoryWordsRealmÚlowerÚgetattrÚtitler   ÚsuccessResultOfÚassertEqualÚnameÚfailureResultOfÚtrapÚsetattrÚassertIdentical)ÚselfÚkindÚrealmr"   r   r   ÚflagÚdupExcÚ	noSuchExcÚpÚnewp© r/   ú/var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/twisted/words/test/test_service.pyÚ_entityCreationTest   s"   
 zRealmTests._entityCreationTestc                 C   ó
   |   d¡S )NÚUser©r1   ©r'   r/   r/   r0   ÚtestUserCreation4   ó   
zRealmTests.testUserCreationc                 C   r2   )NÚGroupr4   r5   r/   r/   r0   ÚtestGroupCreation7   r7   zRealmTests.testGroupCreationc                 C   sn   t  d¡}|  | d¡¡}|  | d¡¡}|  ||¡ |  | d¡¡}|  ||¡ |  | d¡¡ t	j
¡ d S )Nr   ÚtestuserÚ
nosuchuser)r   r   r    Ú
createUserÚgetUserr&   Ú
lookupUserr#   r$   r   Ú
NoSuchUser)r'   r)   ÚuserÚ	retrievedÚlookedUpr/   r/   r0   ÚtestUserRetrieval:   s   
zRealmTests.testUserRetrievalc                 C   sl   t  d¡}t  d¡}|  | |¡¡}|  ||¡ |  | d¡¡}|  ||¡ |  | d¡¡}|  ||¡ d S )Nr   r:   )r   r   r3   r    ÚaddUserr&   r=   r>   )r'   r)   r-   r@   rA   rB   r/   r/   r0   ÚtestUserAdditionK   s   

zRealmTests.testUserAdditionc                 C   sR   t  d¡}|  | d¡¡}|  | d¡¡}|  ||¡ |  | d¡¡ tj	¡ d S )Nr   Ú	testgroupÚnosuchgroup)
r   r   r    ÚcreateGroupÚgetGroupr&   r#   r$   r   ÚNoSuchGroup)r'   r)   ÚgrouprA   r/   r/   r0   ÚtestGroupRetrieval[   s
   
zRealmTests.testGroupRetrievalc                 C   sD   t  d¡}t  d¡}|  | |¡¡ |  | d¡¡}|  ||¡ d S )Nr   rF   Ú	testGroup)r   r   r8   r    ÚaddGrouprI   r&   )r'   r)   r-   rK   r/   r/   r0   Ú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    r<   rH   )r'   r)   r/   r/   r0   Ú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/   r0   Ú
<listcomp>   s    z.RealmTests.testEnumeration.<locals>.<listcomp>)r   r   r    rH   Ú
itergroupsÚsortr!   )r'   r)   ÚgroupsÚnr/   r/   r0   ÚtestEnumerationy   s   
zRealmTests.testEnumerationN)Ú__name__Ú
__module__Ú__qualname__r1   r6   r9   rC   rE   rL   rO   rP   rZ   r/   r/   r/   r0   r      s    r   c                   @   s*   e Zd Ze ddd¡fdd„Zdd„ ZdS )	ÚTestCaseUserAggÚTCPú	127.0.0.1i1Ô  c                 C   sB   || _ t ¡ | _| |¡| _| j| j_| j| j _| j | j¡ d S ©N)r@   r   Ú StringTransportWithDisconnectionÚ	transportÚbuildProtocolÚprotocolÚmindÚmakeConnection)r'   r@   r)   Úfactoryr   r/   r/   r0   Ú__init__‡   s   


zTestCaseUserAgg.__init__c                 C   s   | j  |¡ d S ra   )re   ÚdataReceived)r'   Ústuffr/   r/   r0   Úwrite•   s   zTestCaseUserAgg.writeN)r[   r\   r]   r   ÚIPv4Addressri   rl   r/   r/   r/   r0   r^   †   s    
ûr^   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Ú	userthreeÚ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   ÚPortalÚ
IRCFactoryrh   ÚSTATIC_USERSÚ
isinstanceÚbytesÚdecodeÚappendr<   rD   r	   )r'   ÚcÚnickr/   r/   r0   Ú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   ÚRPL_WELCOMEÚRPL_YOURHOSTÚRPL_CREATEDÚ
RPL_MYINFOÚremoveÚassertFalse)r'   r@   ÚresponseÚexpectedÚprefixÚcommandÚargsr/   r/   r0   Ú_assertGreeting¶   s   

€z IRCProtocolTests._assertGreetingNc                 C   s8   |d u r|d }|  d|› d¡ |  d|› d¡ d S )Nrz   zPASS z
zNICK z extrainfo
)rl   )r'   r@   r…   Úpasswordr/   r/   r0   Ú_loginÅ   s   zIRCProtocolTests._loginc                 C   s2   |   | j |¡¡}t|| j| jƒ}|  ||¡ |S ra   )r    r)   r>   r^   rh   r•   )r'   r"   r@   Úaggr/   r/   r0   Ú_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.
        ry   Né   )	rc   Úvaluer‚   Ú
splitlinesÚclearÚmapr   Úparsemsgrƒ   )r'   r@   ÚmessageTyperŽ   ÚresultÚmessager/   r/   r0   r‡   Ñ   s   



€zIRCProtocolTests._responsec                 C   s   |   d¡}|  |¡ d S )Nrr   )r—   r“   )r'   r@   r/   r/   r0   Ú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.
        rr   zNICK firstuser extrainfo
ÚPRIVMSGr˜   r   é   z	Password?z%PRIVMSG nickserv firstuser_password
N)r    r)   r>   r^   rh   rl   r‡   r!   Úlenr   ÚNICKSERVrc   r›   r“   ©r'   rr   r@   rŽ   r/   r/   r0   Ú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 )Nrr   Ú	wrongpassr¢   r˜   r   r£   zLogin failed.  Goodbye.)	r    r)   r>   r^   rh   r•   r‡   r!   r¤   r¦   r/   r/   r0   ÚtestFailedLoginø   s   z IRCProtocolTests.testFailedLoginc                    s^   g ‰ |   | j d¡¡}t|| j| jƒ}|  |d¡ ‡ fdd„|j_| d¡ |  	ˆ dg¡ d S )Nrr   c                      s
   ˆ   d¡S )NT)rƒ   r/   ©Úlogoutr/   r0   Ú<lambda>  ó   
 z-IRCProtocolTests.testLogout.<locals>.<lambda>zQUIT
T)
r    r)   r>   r^   rh   r•   re   r«   rl   r!   )r'   rr   r@   r/   rª   r0   Ú
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 )Nrr   Úsomechannelzsome random topicÚtopicúJOIN #somechannel
é   r   zfirstuser!firstuser@realmnamer˜   ÚJOINr£   ú#somechannelÚ353Ú366é   Ú332é   Ú333rp   úotheruser!otheruser@realmnamer   )rp   ú=r´   zfirstuser otheruser)rp   r¼   r´   zotheruser firstuser)r    r)   r>   rH   Úmetar^   rh   r•   rc   r›   rl   r‡   r!   r¤   r—   ÚassertIn)r'   rr   r¯   r@   rŽ   ÚotherÚeventr/   r/   r0   Ú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.
        rr   r¯   r±   c                 S   s   g | ]}|d  ‘qS )r˜   r/   )rS   Úrr/   r/   r0   rU   R  s    z7IRCProtocolTests.test_joinTopicless.<locals>.<listcomp>r¸   rº   N)r    r)   r>   rH   r^   rh   r•   rc   r›   rl   r‡   ÚassertNotIn)r'   rr   r@   rŽ   ÚresponseCodesr/   r/   r0   Ú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 )Nro   r¯   r±   rp   zPART #somechannel
r˜   r   úuseruser!useruser@realmnameÚPARTr£   r´   Úleavingz(PART #somechannel :goodbye stupidheads
zgoodbye stupidheadss   JOIN #somechannel
s)   PART #somechannel :goodbye stupidheads1
zgoodbye stupidheads1©
r—   r    r)   rH   rl   rc   r›   r‡   r!   r¤   ©r'   r@   r¿   rŽ   rÀ   r/   r/   r0   Ú	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 )Nro   r¯   úThis is a test topic.r°   Úsome_fellowÚtopic_authoriqË¢Ú
topic_dater±   r·   r   r   r˜   r¸   r£   )ro   r´   rÌ   r¹   rº   )ro   r´   rÍ   Ú77777777úTOPIC #somechannel
)r—   r   r8   r½   r    r)   rN   rc   r›   rl   r‡   r!   )r'   r@   rK   rŽ   r/   r/   r0   Ú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 )Nro   r¯   r±   rp   z,TOPIC #somechannel :This is the new topic.
r   r»   r˜   ÚTOPICr£   r´   úThis is the new topic.i90  rÏ   rÑ   r¸   )rp   r´   rÔ   rº   )rp   r´   rp   Ú12345zTOPIC #asdlkjasd
Ú403)
r—   r    r)   rH   rl   rc   r›   r‡   r!   r½   )r'   r@   r¯   r¿   rŽ   rÀ   r/   r/   r0   Ú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 )Nro   r¯   r±   rp   z%PRIVMSG #somechannel :Hello, world.
r˜   r   rÆ   r¢   éÿÿÿÿr£   r´   zHello, world.)r—   r    r)   rH   rl   rc   r›   r‡   r   r!   r¤   rÊ   r/   r/   r0   Ú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 )Nro   rp   z#PRIVMSG otheruser :Hello, monkey.
r˜   r   rÆ   r¢   r£   zHello, monkey.z)PRIVMSG nousernamedthis :Hello, monkey.
r   Ú401)ro   ÚnousernamedthiszNo such nick/channel.)r—   rc   r›   rl   r‡   r   r!   r¤   rÊ   r/   r/   r0   ÚtestPrivateMessage  s(   









ÿz#IRCProtocolTests.testPrivateMessagec                 C   óP   |   d¡}|j ¡  | d¡ |  |¡}|  t|ƒd¡ |  |d d d¡ d S )Nro   zOPER user pass
r˜   r   Ú491©r—   rc   r›   rl   r‡   r!   r¤   ©r'   r@   rŽ   r/   r/   r0   Ú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 )	Nro   zMODE useruser
r˜   r   r   Ú221r£   ú+rß   rà   r/   r/   r0   ÚtestGetUserMode*  s   



z IRCProtocolTests.testGetUserModec                 C   rÝ   )Nro   zMODE useruser +abcd
r˜   r   Ú472rß   rà   r/   r/   r0   ÚtestSetUserMode6  s   



z IRCProtocolTests.testSetUserModec                 C   ól   |   d¡}|  | j d¡¡ | d¡ |j ¡  | d¡ |  |¡}|  t	|ƒd¡ |  |d d d¡ d S )Nro   r¯   r±   zMODE #somechannel
r˜   r   Ú324rÉ   rà   r/   r/   r0   ÚtestGetGroupMode@  ó   




z!IRCProtocolTests.testGetGroupModec                 C   rç   )Nro   Ú	groupnameúJOIN #groupname
zMODE #groupname +abcd
r˜   r   rå   rÉ   rà   r/   r/   r0   Ú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ë   )rt   ru   rv   rØ   rì   r   zWHO #groupname
r˜   r£   r   Ú352rt   z
#groupnameÚHz0 Ú315zEnd of /WHO list.)r   r8   r    r)   rN   r—   rƒ   rl   rc   r›   r‡   r   r!   Ú
assertTruerŒ   )r'   rK   Úusersr…   Úur@   rÂ   Ú	wantusersr   Úcoderk   ÚmynameÚ	theirnameÚ	theirhostÚtheirserverÚ	theirnickr*   ÚextraÚchannelr/   r/   r0   Ú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 )Nrx   Ú	somegroupc                   S   s   t dƒS )Né   )r   r/   r/   r/   r0   r¬   ”  s    z+IRCProtocolTests.testList.<locals>.<lambda>zthis is the topic woor°   zLIST #somegroup
r£   r   r   r˜   Ú322Ú17r·   Ú323zEnd of /LISTzLIST
)r—   rc   r›   r    r)   rH   Úsizer½   rl   r‡   r!   r¤   )r'   r@   rþ   rÂ   ÚrespÚendÚfg1r/   r/   r0   Ú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 )Nrq   Úotherguyc                   S   s   t t d¡t d¡gƒS )NÚgroupAÚgroupB)Úiterr   r8   r/   r/   r/   r0   r¬   ¾  s    ÿz,IRCProtocolTests.testWhois.<locals>.<lambda>é
   é   zWHOIS otherguy
r²   r   r   r˜   Ú311r£   r·   r¹   Ú*Ú312zHi mom!Ú317Ú15Ú10zseconds idle, signon timeÚ319z#groupA #groupBÚ318zEnd of WHOIS list.)r—   r   r3   rV   ÚsignOnÚtimeÚlastMessager    r)   rD   rc   r›   rl   r‡   r!   r¤   )	r'   r@   r  rÂ   ÚwuserÚwserverÚidleÚchannelsr  r/   r/   r0   Ú	testWhoisº  sT   





zIRCProtocolTests.testWhoisra   )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  r  r/   r/   r/   r0   rn   ™   s4    

	
7;*.

3+rn   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 ra   )ÚjoinsÚpartsÚmessagesr½   )r'   ÚaÚkwr/   r/   r0   ri   ó  s   
zTestMind.__init__c                 C   ó   | j  ||f¡ d S ra   )r  rƒ   )r'   r@   rK   r/   r/   r0   Úremote_userJoinedù  ó   zTestMind.remote_userJoinedc                 C   ó   | j  |||f¡ d S ra   )r   rƒ   )r'   r@   rK   Úreasonr/   r/   r0   Úremote_userLeftü  ó   zTestMind.remote_userLeftc                 C   r'  ra   )r!  rƒ   )r'   ÚsenderÚ	recipientr    r/   r/   r0   Úremote_receiveÿ  r*  zTestMind.remote_receivec                 C   r$  ra   )r½   rƒ   )r'   rK   r½   r/   r/   r0   Úremote_groupMetaUpdate  r&  zTestMind.remote_groupMetaUpdateN)r[   r\   r]   ri   r%  r)  r-  r.  r/   r/   r/   r0   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   r`   )r   r   r)   r   r{   r|   r   r}   r   ÚPBServerFactoryÚserverFactoryÚ_protocolFactoryre   ÚunsafeTracebacksÚPBClientFactoryÚclientFactoryr   Ú	listenTCPÚ
serverPortÚ
connectTCPÚgetHostÚportÚ
clientConnr5   r/   r/   r0   r†   
  s   



ÿzPBProtocolTests.setUpc                 O   s   t  d¡| _| jS )Nr   )r   ÚBrokerÚ_serverProtocol)r'   r’   r#  r/   r/   r0   r2    s   z PBProtocolTests._protocolFactoryc                    s8   t ƒ ‰ | j ‡ fdd„¡ tt| jjƒt| jjƒˆ gƒS )Nc                      s
   ˆ   d ¡S ra   )Úcallbackr/   ©Úd3r/   r0   r¬     r­   z*PBProtocolTests.tearDown.<locals>.<lambda>)	r   r=  ÚnotifyOnDisconnectr	   r
   r7  ÚstopListeningr;  Ú
disconnectr5   r/   r?  r0   ÚtearDown  s   

ýÿzPBProtocolTests.tearDownc                    sX   |}t |tƒr| d¡}t ||¡‰ ˆj ||¡ ˆj |¡}| 	‡ ‡‡fdd„¡ |S )NÚasciic                    s   ˆj  ˆ ˆ¡S ra   )r5  Úlogin)Úign©Úcredsrf   r'   r/   r0   r¬   .  s    z1PBProtocolTests._loggedInAvatar.<locals>.<lambda>)
r€   ÚstrÚencoder   ÚUsernamePasswordr|   rD   r)   r<   ÚaddCallback)r'   r"   r”   rf   Ú	nameBytesÚdr/   rH  r0   Ú_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   p3Úfoobars   barfoos   texts   hello, monkeys)r  rP  r)   rH   ÚjoinÚsendÚleave)	r'   ÚmindonerQ  ÚmindtworR  Ú	mindThreeÚthreerQ   rR   r/   r/   r0   Ú
testGroups1  s"   €
zPBProtocolTests.testGroupsN)
r[   r\   r]   r†   r2  rD  rP  r   ÚinlineCallbacksr[  r/   r/   r/   r0   r/  	  s    
r/  )#Ú__doc__r  Útwisted.credr   r   r   Útwisted.internetr   r   r   Útwisted.internet.deferr   r	   r
   r   Útwisted.spreadr   Útwisted.testr   Útwisted.trialr   Útwisted.wordsr   r   Útwisted.words.protocolsr   ÚTestCaser   r^   rn   ÚPBMindr  ÚsetUnjellyableForClassÚPBMindReferencer/  r/   r/   r/   r0   Ú<module>   s(   r    ]