
    Yfo                     p   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ej                  Z G d d          Z G d dej                  Z G d dej                  Z ej         eej!                    G 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                   D    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )
RealmTestsc                    t          j        d          }d|                                z   }t          |d|                                z             }t          |d|                                z             }d|                                z   dz   }t          t
          d|                                z             }t          t
          d|                                z             }|                      ||                    }	|                     ||	j                   | 	                     ||                    
                    |           t          ||d           |                      |d	|                                z                       }	|                     d	|                                z   |	j                   |                      |d	|                                z                       }
|                     |	|
           t          ||d
           | 	                     |d|                                z                       
                    |           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newps              Q/var/www/html/env/lib/python3.11/site-packages/twisted/words/test/test_service.py_entityCreationTestzRealmTests._entityCreationTest   s   *;77

$4::<< 788eUTZZ\\122$**,,&4tzz||!;<<FHtzz||$;<<	   ..qv&&& 	VVD\\**//777 	tT"""  UTZZ\\%9!:!:;;-qv666 ##CC

(<$=$=>>Q%%% 	tU###SSTZZ\\!9::;;@@KKKKK    c                 ,    |                      d          S )NUserr3   r*   s    r2   testUserCreationzRealmTests.testUserCreation4   s    ''///r4   c                 ,    |                      d          S )NGroupr7   r8   s    r2   testGroupCreationzRealmTests.testGroupCreation7   s    ''000r4   c                     t          j        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lookedUps        r2   testUserRetrievalzRealmTests.testUserRetrieval:   s    *;77 ##E$4$4Z$@$@AA ((z)B)BCC	T9--- ''(8(8(D(DEEY111 
		e..|<<	=	=	B	B6CT	U	U	U	U	Ur4   c                    t          j        d          }t          j        d          }|                     |                    |                    }|                     ||           |                     |                    d                    }|                     ||           |                     |                    d                    }|                     ||           d S )Nr   r>   )r   r   r6   r#   addUserr)   rA   rB   )r*   r,   r0   rD   rE   rF   s         r2   testUserAdditionzRealmTests.testUserAdditionK   s    *;77 L$$##EMM!$4$455Q%%% ((z)B)BCC	T9--- ''(8(8(D(DEEY11111r4   c                    t          j        d          }|                     |                    d                    }|                     |                    d                    }|                     ||           |                     |                    d                                        t          j	                   d S )Nr   	testgroupnosuchgroup)
r   r   r#   createGroupgetGroupr)   r&   r'   r   NoSuchGroup)r*   r,   grouprE   s       r2   testGroupRetrievalzRealmTests.testGroupRetrieval[   s    *;77$$U%6%6{%C%CDD(()D)DEE	UI...			enn];;	<	<	A	A&BT	U	U	U	U	Ur4   c                 "   t          j        d          }t          j        d          }|                     |                    |                     |                     |                    d                    }|                     ||           d S )Nr   rL   	testGroup)r   r   r;   r#   addGrouprO   r)   )r*   r,   r0   rQ   s       r2   testGroupAdditionzRealmTests.testGroupAdditionf   s|    *;77M+&&U^^A..///$$U^^K%@%@AAQ&&&&&r4   c                     t          j        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@   rN   )r*   r,   s     r2   testGroupUsernameCollisionz%RealmTests.testGroupUsernameCollisionn   s^     *;77U--f55666U..v6677777r4   c                    t          j        d          }|                     |                    d                     |                     |                    d                     |                     |                                          }d |D             }|                                 |                     |ddg           d S )Nr   grouponegrouptwoc                     g | ]	}|j         
S  )r%   ).0gs     r2   
<listcomp>z.RealmTests.testEnumeration.<locals>.<listcomp>   s    $$$QV$$$r4   )r   r   r#   rN   
itergroupssortr$   )r*   r,   groupsns       r2   testEnumerationzRealmTests.testEnumerationy   s    *;77U..z::;;;U..z::;;;%%e&6&6&8&899$$V$$$	Z455555r4   N)__name__
__module____qualname__r3   r9   r<   rG   rJ   rR   rV   rX   re   r]   r4   r2   r   r      s        L L L>0 0 01 1 1W W W"2 2 2 	W 	W 	W' ' '	8 	8 	8
6 
6 
6 
6 
6r4   r   c                   >    e Zd Z ej        ddd          fdZd ZdS )TestCaseUserAggTCP	127.0.0.1i1  c                     || _         t          j                    | _        |                    |          | _        | j        | j        _        | j        | j         _        | j                            | j                   d S N)rD   r    StringTransportWithDisconnection	transportbuildProtocolprotocolmindmakeConnection)r*   rD   r,   factoryr   s        r2   __init__zTestCaseUserAgg.__init__   se     	&GII--g66"&-	$$T^44444r4   c                 :    | j                             |           d S rn   )rr   dataReceived)r*   stuffs     r2   writezTestCaseUserAgg.write   s    ""5)))))r4   N)rf   rg   rh   r   IPv4Addressrv   rz   r]   r4   r2   rj   rj      sM         $#E;>>5 5 5 5* * * * *r4   rj   c                       e Zd Zg dZd Zd ZddZd ZddZd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )IRCProtocolTests)useruser	otherusersomeguy	firstuserusernameuseroneusertwo	userthreeuserfours   userfivesomeuserc                    t          j        d          | _        t          j                    | _        t          j        | j        | j        g          | _        t          j        | j        | j                  | _	        g }| j
        D ]w}t          |t                    r|                    d          }|                    | j                            |                     | j                            ||dz              xt#          |          S )Nr   utf-8	_password)r   r   r,   r   'InMemoryUsernamePasswordDatabaseDontUsecheckerr   Portal
IRCFactoryru   STATIC_USERS
isinstancebytesdecodeappendr@   rI   r
   )r*   cnicks      r2   setUpzIRCProtocolTests.setUp   s    /<<
GIImDJ??)$*dkBB% 	; 	;D$&& ,{{7++HHTZ**400111L  tk'9::::Ar4   c                    |                      |          }t          j        t          j        t          j        t          j        g}|D ]\  }}}||v r|                    |            |                     |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*   rD   responseexpectedprefixcommandargss          r2   _assertGreetingz IRCProtocolTests._assertGreeting   s     >>$''OS%5sW%- 	) 	)!FGT(""(((#HH#H#HIIIIIr4   Nc                 x    ||dz   }|                     d| d           |                     d| d           d S )Nr   zPASS z
zNICK z extrainfo
)rz   )r*   rD   r   passwords       r2   _loginzIRCProtocolTests._login   sT    k)H

)8)))***

/4///00000r4   c                     |                      | j                            |                    }t          || j        | j                  }|                     ||           |S rn   )r#   r,   rB   rj   ru   r   )r*   r%   rD   aggs       r2   _loggedInUserzIRCProtocolTests._loggedInUser   sS    ##DJ$9$9$$?$?@@dDJ==C
r4   c                 @   |j                                         }|                    d          }|                                }|j                                          g }t          t          j        |          D ]%}||d         |k    r|                    |           &|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.
        r   N   )	rp   valuer   
splitlinesclearmapr   parsemsgr   )r*   rD   messageTyper   resultmessages         r2   r   zIRCProtocolTests._response   s    
 >''))??7++&&((3<22 	' 	'G"gajK&?&?g&&&r4   c                 Z    |                      d          }|                     |           d S )Nr   )r   r   )r*   rD   s     r2   testPASSLoginzIRCProtocolTests.testPASSLogin   s/    !!+..T"""""r4   c                    |                      | 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,   rB   rj   ru   rz   r   r$   lenr   NICKSERVrp   r   r   r*   r   rD   r   s       r2   test_nickServLoginz#IRCProtocolTests.test_nickServLogin   s!    (()>)>{)K)KLL	y$*dlCC

1222>>$	22X***!Q)9:::!Q333!Q+{)CDDD

<===T"""""r4   c                 ~   |                      | j                            d                    }t          || j        | j                  }|                     |dd           |                     |d          }|                     t          |          d           |                     |d         d         ddg           d S )Nr   	wrongpassr   r   r   r   zLogin failed.  Goodbye.)	r#   r,   rB   rj   ru   r   r   r$   r   r   s       r2   testFailedLoginz IRCProtocolTests.testFailedLogin   s    (()>)>{)K)KLL	y$*dlCCD+{333>>$	22X***!Q+7P)QRRRRRr4   c                 >   g |                      | j                            d                    }t          || j        | j                  }|                     |d           fd|j        _        |                    d           | 	                    dg           d S )Nr   c                  .                          d          S )NT)r   )logouts   r2   <lambda>z-IRCProtocolTests.testLogout.<locals>.<lambda>  s    v}}T':': r4   zQUIT
T)
r#   r,   rB   rj   ru   r   rr   r   rz   r$   )r*   r   rD   r   s      @r2   
testLogoutzIRCProtocolTests.testLogout  s    (()>)>{)K)KLL	y$*dlCCD+&&&::::

:$(((((r4   c                    |                      | 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 )Nr   somechannelzsome random topictopicJOIN #somechannel
   r   zfirstuser!firstuser@realmnamer   JOINr   #somechannel353366   332   333r   otheruser!otheruser@realmnamer   )r   =r   zfirstuser otheruser)r   r   r   zotheruser firstuser)r#   r,   rB   rN   metarj   ru   r   rp   r   rz   r   r$   r   r   assertIn)r*   r   r   rD   r   otherevents          r2   testJoinzIRCProtocolTests.testJoin  s   (()>)>{)K)KLL	**4:+A+A-+P+PQQ$7! y$*dlCCD+&&&

*+++>>$''X*** 	!Q)HIII!Q000!Q.)9::: 	!Q///!Q/// 	!Q///!Q/// "";//+,,, >>%((t$$UQ'''q!&EFFFq!f---q!~&6777!Q555!Q///QKNIIIIII	
 	
 	
 	
 	
r4   c                    |                      | j                            d                    }|                      | j                            d                     t	          || j        | j                  }|                     |d           |j                                         |	                    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                     g | ]
}|d          S )r   r]   )r^   rs     r2   r`   z7IRCProtocolTests.test_joinTopicless.<locals>.<listcomp>R  s    000!1000r4   r   r   N)r#   r,   rB   rN   rj   ru   r   rp   r   rz   r   assertNotIn)r*   r   rD   r   responseCodess        r2   test_joinTopiclessz#IRCProtocolTests.test_joinTopiclessB  s    
 (()>)>{)K)KLL	TZ33MBBCCC y$*dlCCD+&&&

*+++>>$''00x000........r4   c                    |                      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@realmnamePARTr   r   leavingz(PART #somechannel :goodbye stupidheads
zgoodbye stupidheadss   JOIN #somechannel
s)   PART #somechannel :goodbye stupidheads1
zgoodbye stupidheads1
r   r#   r,   rN   rz   rp   r   r   r$   r   r*   rD   r   r   r   s        r2   	testLeavezIRCProtocolTests.testLeaveV  s   !!*--TZ33MBBCCC

*+++"";//+,,,

*+++>>$''u%%X***!Q)FGGG!Q000!Q.))DEEE5))) 	

*+++

?@@@>>$''u%%X***!Q)FGGG!Q000!Q.:O)PQQQ5)))

+,,,

ABBB>>$''u%%X***!Q)FGGG!Q000!Q.:P)QRRR5)))))r4   c                 n   |                      d          }t          j        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_fellowtopic_authoriqˢ
topic_dater   r   r   r   r   r   r   )r~   r   r   r   r   )r~   r   r   77777777TOPIC #somechannel
)r   r   r;   r   r#   r,   rU   rp   r   rz   r   r$   )r*   rD   rQ   r   s       r2   testGetTopiczIRCProtocolTests.testGetTopic  s4   !!*--m,,5
7%2
>"#+
< TZ0077888

*+++>>$''!Q555!Q/// 	QKNQQQ	
 	
 	
 	!Q///QKNSSS	
 	
 	
 	

+,,,>>$''!Q///QKNQQQ	
 	
 	
 	!Q///QKNSSS	
 	
 	
 	
 	
r4   c                 b   |                      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   TOPICr   r   This is the new topic.i90  r   r   r   )r   r   r   r   )r   r   r   12345zTOPIC #asdlkjasd
403)
r   r#   r,   rN   rz   rp   r   r   r$   r   )r*   rD   r   r   r   r   s         r2   testSetTopiczIRCProtocolTests.testSetTopic  s~   !!*--**4:+A+A-+P+PQQ

*+++"";//+,,,DEEE>>%((t$$5)))!Q)HIII!Q111!Q.:R)STTT).&,--->>%((!Q///QKNSSS	
 	
 	
 	!Q///QKNOOO	
 	
 	
 	*+++>>%((!Q/////r4   c                 ,   |                      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,   rN   rz   rp   r   r   r   r$   r   r   s        r2   testGroupMessagez!IRCProtocolTests.testGroupMessage  sg   !!*--TZ33MBBCCC

*+++"";//+,,,

<===>>$''u%%"""UQ'''q!&CDDDq!i444q!~&GHHHHHr4   c                    |                      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   401)r~   nousernamedthiszNo such nick/channel.)r   rp   r   rz   r   r   r$   r   r   s        r2   testPrivateMessagez#IRCProtocolTests.testPrivateMessage  s   !!*--"";//

:;;;>>$''u%%"""UQ'''q!&CDDDq!i000q!{4D&EFFF

@AAA>>$''X***!Q555!Q///QKNTTT	
 	
 	
 	
 	
r4   c                 @   |                      d          }|j                                         |                    d           |                     |          }|                     t          |          d           |                     |d         d         d           d S )Nr~   zOPER user pass
r   r   491r   rp   r   rz   r   r$   r   r*   rD   r   s      r2   testOperzIRCProtocolTests.testOper   s    !!*--

'(((>>$''X***!Q/////r4   c                    |                      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   221r   +r   r   s      r2   testGetUserModez IRCProtocolTests.testGetUserMode*  s    !!*--

&'''>>$''X***!Q555!Q///!Q*c):;;;;;r4   c                 @   |                      d          }|j                                         |                    d           |                     |          }|                     t          |          d           |                     |d         d         d           d S )Nr~   zMODE useruser +abcd
r   r   472r   r   s      r2   testSetUserModez IRCProtocolTests.testSetUserMode6  s    !!*--

,--->>$''X***!Q/////r4   c                    |                      d          }|                     | j                            d                     |                    d           |j                                         |                    d           |                     |          }|                     t          |          d           |                     |d         d         d           d S )Nr~   r   r   zMODE #somechannel
r   r   324r   r   s      r2   testGetGroupModez!IRCProtocolTests.testGetGroupMode@  s    !!*--TZ33MBBCCC

*+++

*+++>>$''X***!Q/////r4   c                    |                      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   s      r2   testSetGroupModez!IRCProtocolTests.testSetGroupModeN  s    !!*--TZ33K@@AAA

()))

.///>>$''X***!Q/////r4   c           	         t          j        d          }|                     | j                            |                     g }dD ]G}|                     |          }|                    |           |d                             d           H|D ]}|j        	                                 |d                             d           | 
                    |d                   }|                     | 
                    |d                              |                     | 
                    |d                              g d}|d d         D ]\  }}	}
|                     |d	           |                     |	d
           |
\  }}}}}}}}|                     |d           |                     |d           |                     ||v            |                     |d	           |                     |d	           |                    |           |                     |d           |                     |d|z              |                     |           |d         \  }}	}
|                     |d	           |                     |	d           |
\  }}}|                     |d           |                     |d           |                     |d           d S )Nr  )r   r   r   r   r  r   zWHO #groupname
r   r   r   352r   z
#groupnameHz0 315zEnd of /WHO list.)r   r;   r#   r,   rU   r   r   rz   rp   r   r   r   r$   
assertTruer   )r*   rQ   usersr   urD   r   	wantusersr   codery   myname	theirname	theirhosttheirserver	theirnickr-   extrachannels                      r2   testWhozIRCProtocolTests.testWho\  s   k**TZ00778885 	3 	3D""4((ALLOOO"IOO12222 	# 	#DN  """"a+,,,NN58$$a11222a11222777	#$SbS6 	6 	6FD%V[111T5))) 	VY///UL111OOI2333Y444[+666Y'''T3'''UD9$45555###ee---u%%%!&+++,/// 344444r4   c                    |                      d          }|j                                         |                     | j                            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 )Nr   	somegroupc                       t          d          S )N   )r   r]   r4   r2   r   z+IRCProtocolTests.testList.<locals>.<lambda>  s     r4   zthis is the topic woor   zLIST #somegroup
r   r   r   r   32217r   323zEnd of /LISTzLIST
)r   rp   r   r#   r,   rN   sizer   rz   r   r$   r   )r*   rD   r!  r   respendfg1s          r2   testListzIRCProtocolTests.testList  s   !!*--(()?)?)L)LMM	,,	"9	w 	

()))NN4  Q###	ca+...a%(((aZ000a[111aT***a%<===Q---Q'''QJ///QN333 	

:NN4  Q###SQ'''QK000QD)))Q$;<<<Q'''''r4   c                 	   |                      d          }t          j        d          }d |_        d|_        t          j                    dz
  |_        |                     | 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                  l    t          t          j        d          t          j        d          g          S )NgroupAgroupB)iterr   r;   r]   r4   r2   r   z,IRCProtocolTests.testWhois.<locals>.<lambda>  s,    d]8$$gmH&=&=>'
 '
 r4   
      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   r6   ra   signOntimelastMessager#   r,   rI   rp   r   rz   r   r$   r   )	r*   rD   r-  r   wuserwserveridlechannelsr)  s	            r2   	testWhoiszIRCProtocolTests.testWhois  sZ   !!),,<
++
 
 #y{{R/TZ//99:::

'(((NN4  Q###./+whq;///q5)))q!i000q!j111q!j111q!k222q!c***q!j111[111U+++A	222A
333A444A	222a+...a%(((aY///aZ000aT***aT***a%@AAA!k222!e,,,!Q333!Q444!Q):;;;Q---Q'''QI...QJ///Q$899999r4   rn   )rf   rg   rh   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r
  r  r  r+  rC  r]   r4   r2   r}   r}      s         L  J J J1 1 1 1     # # ## # #(S S S) ) )5
 5
 5
n/ / /(9* 9* 9*v(
 (
 (
T,0 ,0 ,0\I I I2
 
 
<0 0 0
< 
< 
<0 0 00 0 00 0 015 15 15f)( )( )(V5: 5: 5: 5: 5:r4   r}   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )TestMindc                 >    g | _         g | _        g | _        g | _        d S rn   )joinspartsmessagesr   )r*   akws      r2   rv   zTestMind.__init__  s"    

			r4   c                 >    | j                             ||f           d S rn   )rG  r   )r*   rD   rQ   s      r2   remote_userJoinedzTestMind.remote_userJoined  s"    
4-(((((r4   c                 @    | j                             |||f           d S rn   )rH  r   )r*   rD   rQ   reasons       r2   remote_userLeftzTestMind.remote_userLeft  s%    
4/00000r4   c                 @    | j                             |||f           d S rn   )rI  r   )r*   sender	recipientr   s       r2   remote_receivezTestMind.remote_receive  s%    fi9:::::r4   c                 >    | j                             ||f           d S rn   )r   r   )r*   rQ   r   s      r2   remote_groupMetaUpdatezTestMind.remote_groupMetaUpdate  s"    	%'''''r4   N)rf   rg   rh   rv   rM  rP  rT  rV  r]   r4   r2   rE  rE    s_          ) ) )1 1 1; ; ;( ( ( ( (r4   rE  c                   F    e Zd Zd Zd Zd Zd Zej        d             Z	dS )PBProtocolTestsc                 &   t          j        d          | _        t          j                    | _        t          j        | j        | j        g          | _        t          j	        | j                  | _
        | j        | j
        _        d| j
        _        t          j                    | _        d| j        _        t!          j        d| j
                  | _        t!          j        d| j                                        j        | j                  | _        d S )Nr   Tr   rl   )r   r   r,   r   r   r   r   r   r   PBServerFactoryserverFactory_protocolFactoryrr   unsafeTracebacksPBClientFactoryclientFactoryr   	listenTCP
serverPort
connectTCPgetHostport
clientConnr8   s    r2   r   zPBProtocolTests.setUp
  s    /<<
GIImDJ??/<<&*&;#.2+/11.2+!+At/ABB!,002279K
 
r4   c                 B    t          j        d          | _        | j        S )Nr   )r   Broker_serverProtocol)r*   r   rK  s      r2   r\  z PBProtocolTests._protocolFactory  s    !y||##r4   c                     t                      | j                            fd           t          t	          | j        j                  t	          | j        j                  g          S )Nc                  .                          d           S rn   )callback)d3s   r2   r   z*PBProtocolTests.tearDown.<locals>.<lambda>  s    D8I8I r4   )	r	   rh  notifyOnDisconnectr
   r   ra  stopListeningre  
disconnect)r*   rl  s    @r2   tearDownzPBProtocolTests.tearDown  sg    ZZ//0I0I0I0IJJJdo;<<do899
 
 	
r4   c                 ,    |}t          |t                    r|                    d          }t          j        ||           j                            ||            j                            |          }|	                     fd           |S )Nasciic                 :    j                                       S rn   )r_  login)igncredsrs   r*   s    r2   r   z1PBProtocolTests._loggedInAvatar.<locals>.<lambda>.  s    $"4":":5$"G"G r4   )
r   strencoder   UsernamePasswordr   rI   r,   r@   addCallback)r*   r%   r   rs   	nameBytesdrv  s   `  `  @r2   _loggedInAvatarzPBProtocolTests._loggedInAvatar'  s    	dC   	-G,,I,YAAY111J!!$''	GGGGGGHHHr4   c              #     K   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)rE  r}  r,   rN   joinsendleave)	r*   mindoner  mindtwor  	mindThreethreerZ   r[   s	            r2   
testGroupszPBProtocolTests.testGroups1  sv     **((w????**((w????JJ	**8UIFFFFj$$X.....j$$Y/////(++++),,,,hhx     hhy!!!!!jj"""""mmW&7899999nnnnr4   N)
rf   rg   rh   r   r\  rp  r}  r   inlineCallbacksr  r]   r4   r2   rX  rX  	  so        
 
 
$ $ $	
 	
 	
       r4   rX  )#__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   rj   r}   PBMindrE  setUnjellyableForClassPBMindReferencerX  r]   r4   r2   <module>r     s     6 6 6 6 6 6 6 6 6 6 4 4 4 4 4 4 4 4 4 4 Q Q Q Q Q Q Q Q Q Q Q Q       & & & & & & " " " " " " ) ) ) ) ) ) ) ) ' ' ' ' ' 'o6 o6 o6 o6 o6" o6 o6 o6d* * * * * * * *&V	: V	: V	: V	: V	:x( V	: V	: V	:r( ( ( ( (w~ ( ( ((  (G$; < < <@ @ @ @ @h' @ @ @ @ @r4   