
    Vho                        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j4                        Z G d d      Z G d dej4                        Z G d dej<                        Z ej@                  eejB                          G d dej4                        Z"y)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                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)
RealmTestsc                    t        j                  d      }d|j                         z   }t        |d|j	                         z         }t        |d|j	                         z         }d|j	                         z   dz   }t        t
        d|j	                         z         }t        t
        d|j	                         z         }| j                   ||            }	| j                  ||	j                         | j                   ||            j                  |       t        ||d       | j                   |d	|j                         z               }	| j                  d	|j                         z   |	j                         | j                   |d	|j                         z               }
| j                  |	|
       t        ||d
       | j                   |d|j                         z               j                  |       y )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              O/home/dcms/DCMS/lib/python3.12/site-packages/twisted/words/test/test_service.py_entityCreationTestzRealmTests._entityCreationTest   s   **;7

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

(<$=>Q% 	tU#STZZ\!9:;@@K    c                 $    | j                  d      S )NUserr3   r*   s    r2   testUserCreationzRealmTests.testUserCreation4   s    ''//r4   c                 $    | j                  d      S )NGroupr7   r8   s    r2   testGroupCreationzRealmTests.testGroupCreation7   s    ''00r4   c                    t        j                  d      }| j                  |j                  d            }| j                  |j	                  d            }| j                  ||       | j                  |j                  d            }| j                  ||       | j                  |j                  d            j                  t        j                         y )Nr   testuser
nosuchuser)r   r   r#   
createUsergetUserr)   
lookupUserr&   r'   r   
NoSuchUser)r*   r,   user	retrievedlookedUps        r2   testUserRetrievalzRealmTests.testUserRetrieval:   s    **;7 ##E$4$4Z$@A ((z)BC	T9- ''(8(8(DEY1 
		e..|<	=	B	B6CTCT	Ur4   c                    t        j                  d      }t        j                  d      }| j                  |j	                  |            }| j                  ||       | j                  |j                  d            }| j                  ||       | j                  |j                  d            }| j                  ||       y )Nr   r>   )r   r   r6   r#   addUserr)   rA   rB   )r*   r,   r0   rD   rE   rF   s         r2   testUserAdditionzRealmTests.testUserAdditionK   s    **;7 LL$##EMM!$45Q% ((z)BC	T9- ''(8(8(DEY1r4   c                 L   t        j                  d      }| j                  |j                  d            }| j                  |j	                  d            }| j                  ||       | j                  |j	                  d            j                  t        j                         y )Nr   	testgroupnosuchgroup)
r   r   r#   createGroupgetGroupr)   r&   r'   r   NoSuchGroup)r*   r,   grouprE   s       r2   testGroupRetrievalzRealmTests.testGroupRetrieval[   s~    **;7$$U%6%6{%CD(()DE	UI.			enn];	<	A	A&BTBT	Ur4   c                     t        j                  d      }t        j                  d      }| j                  |j	                  |             | j                  |j                  d            }| j                  ||       y )Nr   rL   	testGroup)r   r   r;   r#   addGrouprO   r)   )r*   r,   r0   rQ   s       r2   testGroupAdditionzRealmTests.testGroupAdditionf   s`    **;7MM+&U^^A./$$U^^K%@AQ&r4   c                     t        j                  d      }| j                  |j                  d             | j                  |j	                  d             y)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   sF     **;7U--f56U..v67r4   c                 p   t        j                  d      }| j                  |j                  d             | j                  |j                  d             | j                  |j	                               }|D cg c]  }|j
                   }}|j                          | j                  |ddg       y c c}w )Nr   grouponegrouptwo)r   r   r#   rN   
itergroupsr%   sortr$   )r*   r,   groupsgns        r2   testEnumerationzRealmTests.testEnumerationy   s    **;7U..z:;U..z:;%%e&6&6&89#$QVV$$	Z45 %s   9B3N)__name__
__module____qualname__r3   r9   r<   rG   rJ   rR   rV   rX   ra    r4   r2   r   r      s2    L>01W"2 	W'	8
6r4   r   c                   @    e Zd Z ej                  ddd      fdZd Zy)TestCaseUserAggTCP	127.0.0.1i1  c                 &   || _         t        j                         | _        |j	                  |      | _        | j
                  | j                  _        | j
                  | j                   _        | j
                  j                  | j                         y N)rD   r    StringTransportWithDisconnection	transportbuildProtocolprotocolmindmakeConnection)r*   rD   r,   factoryr   s        r2   __init__zTestCaseUserAgg.__init__   sb     	&GGI--g6"&--		$$T^^4r4   c                 :    | j                   j                  |       y rk   )ro   dataReceived)r*   stuffs     r2   writezTestCaseUserAgg.write   s    ""5)r4   N)rb   rc   rd   r   IPv4Addressrs   rw   re   r4   r2   rg   rg      s"     $##E;>5*r4   rg   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y)IRCProtocolTests)useruser	otherusersomeguy	firstuserusernameuseroneusertwo	userthreeuserfours   userfivesomeuserc                 6   t        j                  d      | _        t        j                         | _        t        j                  | j                  | j
                  g      | _        t        j                  | j                  | j                        | _	        g }| j                  D ]l  }t        |t              r|j                  d      }|j                  | j                  j                  |             | j
                  j!                  ||dz          n t#        |      S )Nr   utf-8	_password)r   r   r,   r   'InMemoryUsernamePasswordDatabaseDontUsecheckerr   Portal
IRCFactoryrr   STATIC_USERS
isinstancebytesdecodeappendr@   rI   r
   )r*   cnicks      r2   setUpzIRCProtocolTests.setUp   s    //<
GGImmDJJ?))$**dkkB%% 	;D$&{{7+HHTZZ**401LL  tk'9:		;
 Ar4   c                    | j                  |      }t        j                  t        j                  t        j                  t        j
                  g}|D ]  \  }}}||v s|j                  |        | j                  |d|       y)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   sv     >>$'OOS%5%5sW%- 	)!FGT("(	) 	%;H<#HIr4   Nc                 f    ||dz   }|j                  d| d       |j                  d| d       y )Nr   zPASS z
zNICK z extrainfo
)rw   )r*   rD   r   passwords       r2   _loginzIRCProtocolTests._login   s<    k)H

U8*D)*

U4&/0r4   c                     | j                  | j                  j                  |            }t        || j                  | j                        }| j                  ||       |S rk   )r#   r,   rB   rg   rr   r   )r*   r%   rD   aggs       r2   _loggedInUserzIRCProtocolTests._loggedInUser   sJ    ##DJJ$9$9$$?@dDJJ=C
r4   c                 *   |j                   j                         }|j                  d      }|j                         }|j                   j	                          g }t        t        j                  |      D ]  }|	|d   |k(  s|j                  |         |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      )	rm   valuer   
splitlinesclearmapr   parsemsgr   )r*   rD   messageTyper   resultmessages         r2   r   zIRCProtocolTests._response   s    
 >>'')??7+&&(3<<2 	'G"gajK&?g&	' r4   c                 H    | j                  d      }| j                  |       y )Nr~   )r   r   )r*   rD   s     r2   testPASSLoginzIRCProtocolTests.testPASSLogin   s     !!+.T"r4   c                 >   | j                  | j                  j                  d            }t        || j                  | j                        }|j                  d       | j                  |d      }| j                  t        |      d       | j                  |d   d   t        j                         | j                  |d   d   d       | j                  |d   d   ddg       |j                  j                          |j                  d       | j                  |       y	)
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   rg   rr   rw   r   r$   lenr   NICKSERVrm   r   r   r*   r~   rD   r   s       r2   test_nickServLoginz#IRCProtocolTests.test_nickServLogin   s     (()>)>{)KL	y$**dllC

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

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

:$(r4   c                    | j                  | j                  j                  d            }| j                  | j                  j                  d            }d|j                  d<   t        || j                  | j                        }| j                  |d       |j                  j                          |j                  d       | j                  |      }| j                  t        |      d       | j                  |d   d   d       | j                  |d   d	   d
       | j                  |d   d   dg       | j                  |d	   d	   d       | j                  |d   d	   d       | j                  |d   d	   d       | j                  |d   d	   d       | j                  d      }|j                  j                          |j                  j                          |j                  d       | j                  |      }| j                  |      }| j                  t        |      d	       | j                  |d   d   d       | j                  |d   d	   d
       | j                  |d   d   dg       | j                  |d	   d   d       | j                  |d	   d	   d       | j                  |d	   d   g dg dg       y )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   metarg   rr   r   rm   r   rw   r   r$   r   r   assertIn)r*   r~   r   rD   r   otherevents          r2   testJoinzIRCProtocolTests.testJoin  sv   (()>)>{)KL	**4::+A+A-+PQ$7! y$**dllCD+&

*+>>$'X* 	!Q)HI!Q0!Q.)9: 	!Q/!Q/ 	!Q/!Q/ "";/+, >>%(t$UQ'q!&EFq!f-q!~&67!Q5!Q/QKNII	
r4   c                     | j                  | j                  j                  d            }| j                  | j                  j                  d             t	        || j                  | j
                        }| j                  |d       |j                  j                          |j                  d       | j                  |      }|D cg c]  }|d   	 }}| j                  d|       | j                  d|       yc c}w )zo
        When a user joins a group without a topic, no topic information is
        sent to that user.
        r~   r   r   r   r   r   N)r#   r,   rB   rN   rg   rr   r   rm   r   rw   r   assertNotIn)r*   r~   rD   r   rresponseCodess         r2   test_joinTopiclessz#IRCProtocolTests.test_joinTopiclessB  s    
 (()>)>{)KL	TZZ33MBC y$**dllCD+&

*+>>$''/0!100.. 1s   C;c                    | j                  d      }| j                  | j                  j                  d             |j	                  d       |j
                  j                          | j                  d      }|j	                  d       |j
                  j                          |j
                  j                          |j	                  d       | j                  |      }| j                  |      }| j                  t        |      d       | j                  |d   d   d       | j                  |d   d   d	       | j                  |d   d
   ddg       | j                  ||       |j	                  d       |j
                  j                          |j
                  j                          |j	                  d       | j                  |      }| j                  |      }| j                  t        |      d       | j                  |d   d   d       | j                  |d   d   d	       | j                  |d   d
   ddg       | j                  ||       |j	                  d       |j
                  j                          |j
                  j                          |j	                  d       | j                  |      }| j                  |      }| j                  t        |      d       | j                  |d   d   d       | j                  |d   d   d	       | j                  |d   d
   ddg       | j                  ||       y )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   rw   rm   r   r   r$   r   r*   rD   r   r   r   s        r2   	testLeavezIRCProtocolTests.testLeaveV  s   !!*-TZZ33MBC

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

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

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

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

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

AB>>$'u%X*!Q)FG!Q0!Q.:P)QR5)r4   c                    | j                  d      }t        j                  d      }d|j                  d<   d|j                  d<   d|j                  d<   | j	                  | j
                  j                  |             |j                  j                          |j                  d	       | j                  |      }| j                  |d
   d   d       | j                  |d
   d   d       | j                  |d
   d   g d       | j                  |d   d   d       | j                  |d   d   g d       |j                  j                          |j                  d       | j                  |      }| j                  |d   d   d       | j                  |d   d   g d       | j                  |d   d   d       | j                  |d   d   g d       y )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   rm   r   rw   r   r$   )r*   rD   rQ   r   s       r2   testGetTopiczIRCProtocolTests.testGetTopic  s   !!*-m,5

7%2

>"#+

< TZZ0078

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

+,>>$'!Q/QKNQ	
 	!Q/QKNS	
r4   c                 l   | j                  d      }| j                  | j                  j                  d            }|j	                  d       | j                  d      }|j	                  d       |j
                  j                          |j
                  j                          |j	                  d       | j                  |      }| j                  |      }| j                  ||       | j                  |d   d   d       | j                  |d   d   d	       | j                  |d   d
   ddg       |j
                  j                          d|j                  d<   |j	                  d       | j                  |      }| j                  |d   d   d       | j                  |d   d
   g d       | j                  |d   d   d       | j                  |d   d
   g d       |j
                  j                          |j	                  d       | j                  |      }| j                  |d   d   d       y )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   rw   rm   r   r   r$   r   )r*   rD   r   r   r   r   s         r2   testSetTopiczIRCProtocolTests.testSetTopic  s   !!*-**4::+A+A-+PQ

*+"";/+,DE>>%(t$5)!Q)HI!Q1!Q.:R)ST).&,->>%(!Q/QKNS	
 	!Q/QKNO	
 	*+>>%(!Q/r4   c                    | j                  d      }| j                  | j                  j                  d             |j	                  d       | j                  d      }|j	                  d       |j
                  j                          |j
                  j                          |j	                  d       | j                  |      }| j                  |      }| j                  |       | j                  t        |      d       | j                  |d   d   d       | j                  |d   d   d	d
       | j                  |d   d   ddg       y )Nr{   r   r   r|   z%PRIVMSG #somechannel :Hello, world.
r   r   r   r   r   r   zHello, world.)r   r#   r,   rN   rw   rm   r   r   r   r$   r   r   s        r2   testGroupMessagez!IRCProtocolTests.testGroupMessage  s   !!*-TZZ33MBC

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

<=>>$'u%"UQ'q!&CDq!i4q!~&GHr4   c                    | j                  d      }| j                  d      }|j                  j                          |j                  j                          |j                  d       | j	                  |      }| j	                  |      }| j                  |       | j                  t        |      d       | j                  |d   d   d       | j                  |d   d   d       | j                  |d   d   dd	g       |j                  d
       | j	                  |      }| j                  t        |      d       | j                  |d   d   d       | j                  |d   d   d       | j                  |d   d   g d       y )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   rm   r   rw   r   r   r$   r   r   s        r2   testPrivateMessagez#IRCProtocolTests.testPrivateMessage  sW   !!*-"";/

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

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

'(>>$'X*!Q/r4   c                 h   | j                  d      }|j                  j                          |j                  d       | j	                  |      }| j                  t        |      d       | j                  |d   d   d       | j                  |d   d   d       | j                  |d   d   ddg       y )	Nr{   zMODE useruser
r   r   r   221r   +r   r   s      r2   testGetUserModez IRCProtocolTests.testGetUserMode*  s    !!*-

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

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

*+

*+>>$'X*!Q/r4   c                 z   | j                  d      }| j                  | j                  j                  d             |j	                  d       |j
                  j                          |j	                  d       | j                  |      }| j                  t        |      d       | j                  |d   d   d       y )Nr{   	groupnameJOIN #groupname
zMODE #groupname +abcd
r   r   r  r   r   s      r2   testSetGroupModez!IRCProtocolTests.testSetGroupModeN  s    !!*-TZZ33K@A

()

./>>$'X*!Q/r4   c           	         t        j                  d      }| j                  | j                  j	                  |             g }dD ]8  }| j                  |      }|j                  |       |d   j                  d       : |D ]  }|j                  j                           |d   j                  d       | j                  |d         }| j                  | j                  |d                | j                  | j                  |d                g d}|d d D ]  \  }}	}
| j                  |d	       | j                  |	d
       |
\  }}}}}}}}| j                  |d       | j                  |d       | j                  ||v        | j                  |d	       | j                  |d	       |j                  |       | j                  |d       | j                  |d|z           | j                  |       |d   \  }}	}
| j                  |d	       | j                  |	d       |
\  }}}| j                  |d       | j                  |d       | j                  |d       y )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   rw   rm   r   r   r   r$   
assertTruer   )r*   rQ   usersr   urD   r   	wantusersr   coderv   myname	theirname	theirhosttheirserver	theirnickr-   extrachannels                      r2   testWhozIRCProtocolTests.testWho\  sM   k*TZZ00785 	3D""4(ALLO"IOO12	3  	#DNN  "	# 	a+,NN58$a12a127	#$Sb6 	6FD%V[1T5) 	VY/UL1OOI23Y4[+6Y'T3'UD9$45+	6, 	#ee-u%!&+,/ 34r4   c                    | j                  d      }|j                  j                          | j                  | j                  j                  d            }d |_        d|j                  d<   |j                  d       | j                  |      }| j                  t        |      d       |\  }}| j                  |d   d	       | j                  |d
   d       | j                  |d   d   d       | j                  |d   d
   d       | j                  |d   d   d       | j                  |d   d   d       | j                  |d   d	       | j                  |d
   d       | j                  |d   d   d       | j                  |d   d
   d       |j                  j                          |j                  d       | j                  |      }| j                  t        |      d       |\  }}| j                  |d
   d       | j                  |d   d
   d       | j                  |d   d   d       | j                  |d   d   d       | j                  |d
   d       y )Nr   	somegroupc                      t        d      S )N   )r   re   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   rm   r   r#   r,   rN   sizer   rw   r   r$   r   )r*   rD   r  r   respendfg1s          r2   testListzIRCProtocolTests.testList  s+   !!*-(()?)?)LM	,	"9	w 	

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

:NN4 Q#SQ'QK0QD)Q$;<Q'r4   c                 L   | j                  d      }t        j                  d      }d |_        d|_        t        j
                         dz
  |_        | j                  | j                  j                  |             |j                  j                          |j                  d       | j                  |      }| j                  t        |      d       |\  }}}}}| j                  |d   d	       | j                  |d
   d       | j                  |d   d   d       | j                  |d   d
   d       | j                  |d   d   d       | j                  |d   d   d	       | j                  |d   d   d       | j                  |d   d   d       | j                  |d   d	       | j                  |d
   d       | j                  |d   d   d       | j                  |d   d
   d       | j                  |d   d   d	       | j                  |d   d   d       | j                  |d   d	       | j                  |d
   d       | j                  |d   d   d       | j                  |d   d
   d       | j                  |d   d   d       | j                  |d   d   d       | j                  |d   d   d       | j                  |d   d	       | j                  |d
   d       | j                  |d   d   d       | j                  |d   d
   d       | j                  |d   d   d       | j                  |d   d	       | j                  |d
   d       | j                  |d   d   d       | j                  |d   d
   d       | j                  |d   d   d       y )Nr}   otherguyc                  h    t        t        j                  d      t        j                  d      g      S )NgroupAgroupB)iterr   r;   re   r4   r2   r   z,IRCProtocolTests.testWhois.<locals>.<lambda>  s%    d]]8$gmmH&=>'
 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   r\   signOntimelastMessager#   r,   rI   rm   r   rw   r   r$   r   )	r*   rD   r)  r   wuserwserveridlechannelsr%  s	            r2   	testWhoiszIRCProtocolTests.testWhois  su   !!),<<
+
 #yy{R/TZZ//9:

'(NN4 Q#./+whq;/q5)q!i0q!j1q!j1q!k2q!c*q!j1[1U+A	2A
3A4A	2a+.a%(aY/aZ0aT*aT*a%@A!k2!e,!Q3!Q4!Q):;Q-Q'QI.QJ/Q$89r4   rk   )rb   rc   rd   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?  re   r4   r2   rz   rz      s    LJ1##(S)5
n/(9*v(
T,0\I2
<0
<00015f)(V5:r4   rz   c                   *    e Zd Zd Zd Zd Zd Zd Zy)TestMindc                 <    g | _         g | _        g | _        g | _        y rk   )joinspartsmessagesr   )r*   akws      r2   rs   zTestMind.__init__  s    

	r4   c                 >    | j                   j                  ||f       y rk   )rC  r   )r*   rD   rQ   s      r2   remote_userJoinedzTestMind.remote_userJoined  s    

4-(r4   c                 @    | j                   j                  |||f       y rk   )rD  r   )r*   rD   rQ   reasons       r2   remote_userLeftzTestMind.remote_userLeft  s    

4/0r4   c                 @    | j                   j                  |||f       y rk   )rE  r   )r*   sender	recipientr   s       r2   remote_receivezTestMind.remote_receive  s    fi9:r4   c                 >    | j                   j                  ||f       y rk   )r   r   )r*   rQ   r   s      r2   remote_groupMetaUpdatezTestMind.remote_groupMetaUpdate  s    		%'r4   N)rb   rc   rd   rs   rI  rL  rP  rR  re   r4   r2   rA  rA    s    )1;(r4   rA  c                   H    e Zd Zd Zd Zd Zd Zej                  d        Z	y)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*                  | j                        | _        y )Nr   Tr   ri   )r   r   r,   r   r   r   r   r   r   PBServerFactoryserverFactory_protocolFactoryro   unsafeTracebacksPBClientFactoryclientFactoryr   	listenTCP
serverPort
connectTCPgetHostport
clientConnr8   s    r2   r   zPBProtocolTests.setUp
  s    //<
GGImmDJJ?//<&*&;&;#.2+//1.2+!++At/A/AB!,,002779K9K
r4   c                 N    t        j                  d      | _        | j                  S )Nr   )r   Broker_serverProtocol)r*   r   rG  s      r2   rX  z PBProtocolTests._protocolFactory  s    !yy|###r4   c                     t               | j                  j                  fd       t        t	        | j
                  j                        t	        | j                  j                        g      S )Nc                  &     j                  d       S rk   )callback)d3s   r2   r   z*PBProtocolTests.tearDown.<locals>.<lambda>  s    D8I r4   )	r	   rd  notifyOnDisconnectr
   r   r]  stopListeningra  
disconnect)r*   rh  s    @r2   tearDownzPBProtocolTests.tearDown  sX    Z//0IJdoo;;<doo889
 	
r4   c                     |}t        |t              r|j                  d      }t        j                  ||       j
                  j                  ||        j                  j                  |      }|j                   fd       |S )Nasciic                 <    j                   j                        S rk   )r[  login)igncredsrp   r*   s    r2   r   z1PBProtocolTests._loggedInAvatar.<locals>.<lambda>.  s    $"4"4":":5$"G r4   )
r   strencoder   UsernamePasswordr   rI   r,   r@   addCallback)r*   r%   r   rp   	nameBytesdrr  s   `  `  @r2   _loggedInAvatarzPBProtocolTests._loggedInAvatar'  sl    	dC G,I,,YAY1JJ!!$'	GHr4   c              #   j  K   t               }| j                  dd|      }t               }| j                  dd|      }t               }| j                  dd|      }| j                  j                  d       | j                  j                  d       |j	                  d      }|j	                  d      }|j	                  d       |j	                  d       |j	                  d       |j                  d	d
i       |j                          |j                          y w)Nones   p1twos   p2s   threes   p3foobars   barfoos   texts   hello, monkeys)rA  ry  r,   rN   joinsendleave)	r*   mindoner{  mindtwor|  	mindThreethreerZ   r[   s	            r2   
testGroupszPBProtocolTests.testGroups1  s    *((w??*((w??J	**8UIFFjj$$X..jj$$Y//(++),,hhx  hhy!!jj""mmW&7899nnnns   D1D3N)
rb   rc   rd   r   rX  rl  ry  r   inlineCallbacksr  re   r4   r2   rT  rT  	  s0    
$	
  r4   rT  )#__doc__r9  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   rg   rz   PBMindrA  setUnjellyableForClassPBMindReferencerT  re   r4   r2   <module>r     s     6 6 4 4 Q Q  & " ) 'o6"" o6d* *&V	:x(( V	:r(w~~ ((   (G$;$; <@h'' @r4   