Current File : //usr/lib/python3/dist-packages/twisted/words/test/__pycache__/test_service.cpython-312.pyc
�

Ϫ�f�o���dZddlZddlmZmZmZddlmZmZm	Z	ddl
mZmZm
Z
mZddlmZddlmZddlmZdd	lmZmZdd
lmZGd�dej4�ZGd
�d�ZGd�dej4�ZGd�dej<�Zej@eejB�Gd�dej4�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�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zy
)�
RealmTestsc���tjd�}d|j�z}t|d|j	�z�}t|d|j	�z�}d|j	�zdz}tt
d|j	�z�}tt
d|j	�z�}|j
||��}	|j||	j�|j||��j|�t||d�|j
|d	|j�z��}	|jd	|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%rr�flag�dupExc�	noSuchExc�p�newps           �A/usr/lib/python3/dist-packages/twisted/words/test/test_service.py�_entityCreationTestzRealmTests._entityCreationTests����*�*�;�7����
�
��$�����4�:�:�<� 7�8���e�U�T�Z�Z�\�1�2���$�*�*�,�&��4�����t�z�z�|�!;�<���F�H�t�z�z�|�$;�<�	�
� � ����.������q�v�v�&�	
���V�D�\�*�/�/��7�	��t�T�"�� � ��U�T�Z�Z�\�%9�!:�;����������-�q�v�v�6��#�#�C���
�
��(<�$=�>�����Q��%�	��t�U�#����S��T�Z�Z�\�!9�:�;�@�@��K�c�$�|jd�S)N�User�r3�r*s r2�testUserCreationzRealmTests.testUserCreation4s���'�'��/�/r4c�$�|jd�S)N�Groupr7r8s r2�testGroupCreationzRealmTests.testGroupCreation7s���'�'��0�0r4c��tjd�}|j|jd��}|j|j	d��}|j||�|j|j
d��}|j||�|j|j
d��jtj�y)Nr�testuser�
nosuchuser)rrr#�
createUser�getUserr)�
lookupUserr&r'r�
NoSuchUser)r*r,�user�	retrieved�lookedUps     r2�testUserRetrievalzRealmTests.testUserRetrieval:s����*�*�;�7���#�#�E�$4�$4�Z�$@�A���(�(����z�)B�C�	����T�9�-��'�'��(8�(8��(D�E�����Y��1�
�	�	�e�.�.�|�<�	=�	B�	B�6�CT�CT�	Ur4c��tjd�}tjd�}|j|j	|��}|j||�|j|j
d��}|j||�|j|jd��}|j||�y)Nrr>)rrr6r#�addUserr)rArB)r*r,r0rDrErFs      r2�testUserAdditionzRealmTests.testUserAdditionKs����*�*�;�7��
�L�L��$���#�#�E�M�M�!�$4�5�����Q��%��(�(����z�)B�C�	����T�9�-��'�'��(8�(8��(D�E�����Y��1r4c�L�tjd�}|j|jd��}|j|j	d��}|j||�|j
|j	d��jtj�y)Nr�	testgroup�nosuchgroup)
rrr#�createGroup�getGroupr)r&r'r�NoSuchGroup)r*r,�grouprEs    r2�testGroupRetrievalzRealmTests.testGroupRetrieval[s~���*�*�;�7���$�$�U�%6�%6�{�%C�D���(�(�����)D�E�	����U�I�.�	
�	�	�e�n�n�]�;�	<�	A�	A�&�BT�BT�	Ur4c��tjd�}tjd�}|j|j	|��|j|jd��}|j
||�y)NrrL�	testGroup)rrr;r#�addGrouprOr))r*r,r0rQs    r2�testGroupAdditionzRealmTests.testGroupAdditionfs`���*�*�;�7���M�M�+�&�����U�^�^�A�.�/��$�$�U�^�^�K�%@�A�����Q��&r4c��tjd�}|j|jd��|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.
        rrN)rrr#r@rN)r*r,s  r2�testGroupUsernameCollisionz%RealmTests.testGroupUsernameCollisionnsF���*�*�;�7�����U�-�-�f�5�6����U�.�.�v�6�7r4c�p�tjd�}|j|jd��|j|jd��|j|j	��}|D�cgc]}|j
��}}|j
�|j|ddg�ycc}w)Nr�groupone�grouptwo)rrr#rN�
itergroupsr%�sortr$)r*r,�groups�g�ns     r2�testEnumerationzRealmTests.testEnumerationys����*�*�;�7�����U�.�.�z�:�;����U�.�.�z�:�;��%�%�e�&6�&6�&8�9��#�$��Q�V�V�$��$�	��������Z��4�5��
%s�9B3N)�__name__�
__module__�__qualname__r3r9r<rGrJrRrVrXra�r4r2rrs2��L�>0�1�W�"2� 	W�'�	8�
6r4rc�@�eZdZejddd�fd�Zd�Zy)�TestCaseUserAgg�TCP�	127.0.0.1i1�c�&�||_tj�|_|j	|�|_|j
|j_|j
|j_|j
j|j�y�N)rDr� StringTransportWithDisconnection�	transport�
buildProtocol�protocol�mind�makeConnection)r*rDr,�factoryrs     r2�__init__zTestCaseUserAgg.__init__�sb����	�&�G�G�I����-�-�g�6��
�"&�-�-���������	�	���
�
�$�$�T�^�^�4r4c�:�|jj|�yrk)ro�dataReceived)r*�stuffs  r2�writezTestCaseUserAgg.write�s���
�
�"�"�5�)r4N)rbrcrdr�IPv4Addressrsrwrer4r2rgrg�s"��$��#�#�E�;��>�5�*r4rgc��eZdZgd�Zd�Zd�Zdd�Zd�Zdd�Zd�Z	d	�Z
d
�Zd�Zd�Z
d
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zy)�IRCProtocolTests)�useruser�	otheruser�someguy�	firstuser�username�userone�usertwo�	userthree�userfoursuserfive�someuserc�6�tjd�|_tj�|_t
j|j|j
g�|_tj|j|j�|_	g}|jD]l}t|t�r|jd�}|j|jj|��|j
j!||dz��nt#|�S)Nr�utf-8�	_password)rrr,r�'InMemoryUsernamePasswordDatabaseDontUse�checkerr�Portal�
IRCFactoryrr�STATIC_USERS�
isinstance�bytes�decode�appendr@rIr
)r*�c�nicks   r2�setUpzIRCProtocolTests.setUp�s����/�/��<��
��G�G�I����m�m�D�J�J�����?����)�)�$�*�*�d�k�k�B������%�%�	;�D��$��&��{�{�7�+��
�H�H�T�Z�Z�*�*�4�0�1��L�L� � ��t�k�'9�:�		;�
�A��r4c��|j|�}tjtjtjtj
g}|D]\}}}||vs�|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.
        zMissing 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���>�>�$�'���O�O�S�%5�%5�s������W��%-�	)�!�F�G�T��(�"�����(�	)�	
����%;�H�<�#H�Ir4Nc�f�|�|dz}|jd|�d��|jd|�d��y)Nr�zPASS z
zNICK z extrainfo
)rw)r*rDr��passwords    r2�_loginzIRCProtocolTests._login�s<�����k�)�H��
�
�U�8�*�D�)�*��
�
�U�4�&��/�0r4c��|j|jj|��}t||j|j�}|j||�|Srk)r#r,rBrgrrr�)r*r%rD�aggs    r2�
_loggedInUserzIRCProtocolTests._loggedInUser�sJ���#�#�D�J�J�$9�$9�$�$?�@���d�D�J�J����=�����C����
r4c�d�|jj�}ttk7r!t	|t�r|jd�}|j
�}|jj�g}ttj|�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��strr�r��
splitlines�clear�mapr�parsemsgr�)r*rD�messageTyper��result�messages      r2r�zIRCProtocolTests._response�s���
�>�>�'�'�)���C�<�J�x��7����w�/�H��&�&�(�����������3�<�<��2�	'�G��"�g�a�j�K�&?��
�
�g�&�	'��
r4c�H�|jd�}|j|�y)Nr~)r�r�)r*rDs  r2�
testPASSLoginzIRCProtocolTests.testPASSLogin�s ���!�!�+�.�����T�"r4c�>�|j|jjd��}t||j|j�}|jd�|j
|d�}|jt|�d�|j|ddtj�|j|ddd�|j|ddddg�|jj�|jd�|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~zNICK firstuser extrainfo
�PRIVMSGr�r�z	Password?z%PRIVMSG nickserv firstuser_password
N)r#r,rBrgrrrwr�r$�lenr�NICKSERVrmr�r��r*r~rDr�s    r2�test_nickServLoginz#IRCProtocolTests.test_nickServLogin�s����(�(����)>�)>�{�)K�L�	��y�$�*�*�d�l�l�C���
�
�1�2��>�>�$�	�2������X���*�����!��Q���)9�)9�:�����!��Q���3�����!��Q��+�{�)C�D��������
�
�<�=����T�"r4c�N�|j|jjd��}t||j|j�}|j|dd�|j
|d�}|jt|�d�|j|ddddg�y)Nr~�	wrongpassr�r�rr�zLogin failed.  Goodbye.)	r#r,rBrgrrr�r�r$r�r�s    r2�testFailedLoginz IRCProtocolTests.testFailedLogin�s����(�(����)>�)>�{�)K�L�	��y�$�*�*�d�l�l�C�����D�+�{�3��>�>�$�	�2������X���*�����!��Q��+�7P�)Q�Rr4c�4��g�|j|jjd��}t||j|j�}|j|d��fd�|j_|jd�|j�dg�y)Nr~c�&���jd�S)NT)r�)�logouts�r2�<lambda>z-IRCProtocolTests.testLogout.<locals>.<lambda>s���v�}�}�T�':�r4zQUIT
T)
r#r,rBrgrrr�ror�rwr$)r*r~rDr�s   @r2�
testLogoutzIRCProtocolTests.testLogoutsu������(�(����)>�)>�{�)K�L�	��y�$�*�*�d�l�l�C�����D�+�&�:��
�
���
�
�:������$��(r4c��|j|jjd��}|j|jjd��}d|jd<t||j|j�}|j|d�|jj�|jd�|j|�}|jt|�d�|j|ddd�|j|dd	d
�|j|dddg�|j|d	d	d
�|j|dd	d�|j|dd	d�|j|dd	d�|jd�}|jj�|jj�|jd�|j|�}|j|�}|jt|�d	�|j|ddd�|j|dd	d
�|j|dddg�|j|d	dd�|j|d	d	d
�|j|d	dgd�gd�g�y)Nr~�somechannelzsome random topic�topic�JOIN #somechannel
�rzfirstuser!firstuser@realmnamer��JOINr��#somechannel�353�366��332��333r|�otheruser!otheruser@realmnamer)r|�=r�zfirstuser otheruser)r|r�r�zotheruser firstuser)r#r,rBrN�metargrrr�rmr�rwr�r$r�r��assertIn)r*r~r�rDr��other�events       r2�testJoinzIRCProtocolTests.testJoinsv���(�(����)>�)>�{�)K�L�	��*�*�4�:�:�+A�+A�-�+P�Q��$7�����!��y�$�*�*�d�l�l�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���/��
�
��Q�K��N�I�I�
�	
r4c��|j|jjd��}|j|jjd��t	||j|j
�}|j
|d�|jj�|jd�|j|�}|D�cgc]}|d��	}}|jd|�|jd|�ycc}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,rBrNrgrrr�rmr�rwr��assertNotIn)r*r~rDr��r�
responseCodess      r2�test_joinTopiclessz#IRCProtocolTests.test_joinTopiclessCs���
�(�(����)>�)>�{�)K�L�	����T�Z�Z�3�3�M�B�C��y�$�*�*�d�l�l�C�����D�+�&��������
�
�*�+��>�>�$�'��'/�0�!��1��0�
�0�����
�.�����
�.��1s�C;c��|jd�}|j|jjd��|j	d�|j
j
�|jd�}|j	d�|j
j
�|j
j
�|j	d�|j|�}|j|�}|jt|�d�|j|ddd�|j|ddd	�|j|dd
ddg�|j||�|j	d�|j
j
�|j
j
�|j	d
�|j|�}|j|�}|jt|�d�|j|ddd�|j|ddd	�|j|dd
ddg�|j||�|j	d�|j
j
�|j
j
�|j	d�|j|�}|j|�}|jt|�d�|j|ddd�|j|ddd	�|j|dd
ddg�|j||�y)Nr{r�r�r|zPART #somechannel
r�r�useruser!useruser@realmname�PARTr�r��leavingz(PART #somechannel :goodbye stupidheads
zgoodbye stupidheadssJOIN #somechannel
s)PART #somechannel :goodbye stupidheads1
zgoodbye stupidheads1�
r�r#r,rNrwrmr�r�r$r��r*rDr�r�r�s     r2�	testLeavezIRCProtocolTests.testLeaveWs����!�!�*�-�����T�Z�Z�3�3�M�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�)r4c��|jd�}tjd�}d|jd<d|jd<d|jd<|j	|j
j
|��|jj�|jd	�|j|�}|j|d
dd�|j|d
d
d�|j|d
dgd��|j|dd
d�|j|ddgd��|jj�|jd�|j|�}|j|dd
d�|j|ddgd��|j|d
d
d�|j|d
dgd��y)Nr{r��This is a test topic.r��some_fellow�topic_authoriqˢ�
topic_dater�r�rrr�r�r�)r{r�r�r�r�)r{r�r��77777777�TOPIC #somechannel
)r�rr;r�r#r,rUrmr�rwr�r$)r*rDrQr�s    r2�testGetTopiczIRCProtocolTests.testGetTopic�s����!�!�*�-���
�
�m�,��5��
�
�7��%2��
�
�>�"�#+��
�
�<� ����T�Z�Z�0�0��7�8��������
�
�*�+��>�>�$�'������!��Q���5�����!��Q���/�	
����Q�K��N�Q�	
�	
����!��Q���/�����Q�K��N�S�	
�	
�������
�
�+�,��>�>�$�'������!��Q���/�����Q�K��N�Q�	
�	
����!��Q���/�����Q�K��N�S�	
r4c�l�|jd�}|j|jjd��}|j	d�|jd�}|j	d�|j
j
�|j
j
�|j	d�|j|�}|j|�}|j||�|j|ddd�|j|ddd	�|j|dd
ddg�|j
j
�d
|jd<|j	d�|j|�}|j|ddd�|j|dd
gd��|j|ddd�|j|dd
gd��|j
j
�|j	d�|j|�}|j|ddd�y)Nr{r�r�r|z,TOPIC #somechannel :This is the new topic.
rr�r��TOPICr�r��This is the new topic.i90r�r�r�)r|r�r�r�)r|r�r|�12345zTOPIC #asdlkjasd
�403)
r�r#r,rNrwrmr�r�r$r�)r*rDr�r�r�r�s      r2�testSetTopiczIRCProtocolTests.testSetTopic�s����!�!�*�-���*�*�4�:�:�+A�+A�-�+P�Q���
�
�*�+��"�"�;�/��
���+�,�������
������
���D�E��>�>�%�(�����t�$������5�)�����!��Q��)H�I�����!��Q���1�����!��Q��.�:R�)S�T�
������).�����&�
���,�-��>�>�%�(������!��Q���/�����Q�K��N�S�	
�	
����!��Q���/�����Q�K��N�O�	
�	������
���*�+��>�>�%�(������!��Q���/r4c��|jd�}|j|jjd��|j	d�|jd�}|j	d�|j
j
�|j
j
�|j	d�|j|�}|j|�}|j|�|jt|�d�|j|ddd�|j|ddd	d
�|j|dddd
g�y)Nr{r�r�r|z%PRIVMSG #somechannel :Hello, world.
r�rr�r����r�r�z
Hello, world.)r�r#r,rNrwrmr�r�r�r$r�r�s     r2�testGroupMessagez!IRCProtocolTests.testGroupMessage�s���!�!�*�-�����T�Z�Z�3�3�M�B�C��
�
�*�+��"�"�;�/��
���+�,�������
�������
�
�<�=��>�>�$�'�����u�%������"�����U��Q�'�����q��!��&C�D�����q��!��i��4�����q��!��~��&G�Hr4c��|jd�}|jd�}|jj�|jj�|jd�|j	|�}|j	|�}|j|�|j
t|�d�|j
|ddd�|j
|ddd�|j
|dddd	g�|jd
�|j	|�}|j
t|�d�|j
|ddd�|j
|ddd�|j
|ddgd
��y)Nr{r|z#PRIVMSG otheruser :Hello, monkey.
r�rr�r�r�zHello, monkey.z)PRIVMSG nousernamedthis :Hello, monkey.
r�401)r{�nousernamedthiszNo such nick/channel.)r�rmr�rwr�r�r$r�r�s     r2�testPrivateMessagez#IRCProtocolTests.testPrivateMessagesW���!�!�*�-���"�"�;�/��������
�������
�
�:�;��>�>�$�'�����u�%������"�����U��Q�'�����q��!��&C�D�����q��!��i�0�����q��!��{�4D�&E�F��
�
�@�A��>�>�$�'������X���*�����!��Q���5�����!��Q���/�����Q�K��N�T�	
r4c��|jd�}|jj�|jd�|j	|�}|jt
|�d�|j|ddd�y)Nr{zOPER user pass
r�r�491�r�rmr�rwr�r$r��r*rDr�s   r2�testOperzIRCProtocolTests.testOper!si���!�!�*�-���������
�
�'�(��>�>�$�'������X���*�����!��Q���/r4c�h�|jd�}|jj�|jd�|j	|�}|jt
|�d�|j|ddd�|j|ddd�|j|ddddg�y)	Nr{zMODE useruser
r�rr�221r��+r�r�s   r2�testGetUserModez IRCProtocolTests.testGetUserMode+s����!�!�*�-���������
�
�&�'��>�>�$�'������X���*�����!��Q���5�����!��Q���/�����!��Q��*�c�):�;r4c��|jd�}|jj�|jd�|j	|�}|jt
|�d�|j|ddd�y)Nr{zMODE useruser +abcd
r�r�472r�r�s   r2�testSetUserModez IRCProtocolTests.testSetUserMode7si���!�!�*�-���������
�
�,�-��>�>�$�'������X���*�����!��Q���/r4c�z�|jd�}|j|jjd��|j	d�|j
j
�|j	d�|j|�}|jt|�d�|j|ddd�y)Nr{r�r�zMODE #somechannel
r�r�324r�r�s   r2�testGetGroupModez!IRCProtocolTests.testGetGroupModeAs����!�!�*�-�����T�Z�Z�3�3�M�B�C��
�
�*�+��������
�
�*�+��>�>�$�'������X���*�����!��Q���/r4c�z�|jd�}|j|jjd��|j	d�|j
j
�|j	d�|j|�}|jt|�d�|j|ddd�y)Nr{�	groupname�JOIN #groupname
zMODE #groupname +abcd
r�rrr�r�s   r2�testSetGroupModez!IRCProtocolTests.testSetGroupModeOs����!�!�*�-�����T�Z�Z�3�3�K�@�A��
�
�(�)��������
�
�.�/��>�>�$�'������X���*�����!��Q���/r4c	��tjd�}|j|jj	|��g}dD]8}|j|�}|j
|�|djd��:|D]}|jj��|djd�|j|d�}|j|j|d��|j|j|d��gd�}|ddD]�\}}	}
|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
rzWHO #groupname
r�r�r�352r�z
#groupname�Hz0 �315zEnd of /WHO list.)rr;r#r,rUr�r�rwrmr�r�r�r$�
assertTruer�)r*rQ�usersr��urDr��	wantusersr��coderv�myname�	theirname�	theirhost�theirserver�	theirnickr-�extra�channels                   r2�testWhozIRCProtocolTests.testWho]sM���
�
�k�*�����T�Z�Z�0�0��7�8���5�	3�D��"�"�4�(�A��L�L��O��"�I�O�O�1�2�	3��	#�D��N�N� � �"�	#�	�a����+�,��N�N�5��8�$���������a��1�2��������a��1�2�7�	�#$�S�b�6�	6��F�D�%����V�[�1����T�5�)��	
������������V�Y�/����U�L�1��O�O�I��2�3����Y��4����[�+�6����Y�'����T�3�'����U�D�9�$4�5�+	6�,	
����#���e����e������-�����u�%�!&����������+�����,�/����� 3�4r4c���|jd�}|jj�|j|jjd��}d�|_d|jd<|jd�|j|�}|jt|�d�|\}}|j|dd	�|j|d
d�|j|ddd�|j|dd
d�|j|ddd�|j|dd
d�|j|dd	�|j|d
d�|j|ddd�|j|dd
d�|jj�|jd�|j|�}|jt|�d�|\}}|j|d
d�|j|dd
d�|j|ddd�|j|dd
d�|j|d
d�y)Nr��	somegroupc��td�S)N�)rrer4r2r�z+IRCProtocolTests.testList.<locals>.<lambda>�s
�����r4zthis is the topic woor�zLIST #somegroup
r�rrr��322�17r��323zEnd of /LISTzLIST
)r�rmr�r#r,rN�sizer�rwr�r$r�)r*rDrr��resp�end�fg1s       r2�testListzIRCProtocolTests.testList�s+���!�!�*�-���������(�(����)?�)?��)L�M�	�,�	��"9�	���w��	
�
�
�(�)��N�N�4� ������Q���#��	��c�����a��+�.�����a��%�(�����a����Z�0�����a����[�1�����a����T�*�����a����%<�=�����Q���-�����Q���'�����Q����J�/�����Q����N�3�������	
�
�
�:���N�N�4� ������Q���#����S�����Q���'�����Q����K�0�����Q����D�)�����Q����$;�<�����Q���'r4c�L�|jd�}tjd�}d�|_d|_tj
�dz
|_|j|jj|��|jj�|jd�|j|�}|jt|�d�|\}}}}}|j|dd	�|j|d
d�|j|ddd�|j|dd
d�|j|ddd�|j|dd
d	�|j|ddd�|j|ddd�|j|dd	�|j|d
d�|j|ddd�|j|dd
d�|j|ddd	�|j|dd
d�|j|dd	�|j|d
d�|j|ddd�|j|dd
d�|j|ddd�|j|dd
d�|j|ddd�|j|dd	�|j|d
d�|j|ddd�|j|dd
d�|j|ddd�|j|dd	�|j|d
d�|j|ddd�|j|dd
d�|j|ddd�y)Nr}�otherguyc�h�ttjd�tjd�g�S)N�groupA�groupB)�iterrr;rer4r2r�z,IRCProtocolTests.testWhois.<locals>.<lambda>�s%��d�
�]�]�8�
$�g�m�m�H�&=�>�'
�r4�
�zWHOIS otherguy
r�rrr��311r�r�r��*�312zHi mom!�317�15�10zseconds idle, signon time�319z#groupA #groupB�318zEnd of WHOIS list.)r�rr6r\�signOn�time�lastMessager#r,rIrmr�rwr�r$r�)	r*rDr*r��wuser�wserver�idle�channelsr&s	         r2�	testWhoiszIRCProtocolTests.testWhois�su���!�!�)�,���<�<�
�+��
������#�y�y�{�R�/������T�Z�Z�/�/��9�:��������
�
�'�(��N�N�4� ������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�9r4rk)rbrcrdr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrr(r@rer4r2rzrz�s����L��
J�1��� #�#�(S�)�5
�n/�(9*�v(
�T,0�\I�2
�<0�
<�0�0�0�15�f)(�V5:r4rzc�*�eZdZd�Zd�Zd�Zd�Zd�Zy)�TestMindc�<�g|_g|_g|_g|_yrk)�joins�parts�messagesr�)r*�a�kws   r2rszTestMind.__init__�s����
���
���
���	r4c�>�|jj||f�yrk)rDr�)r*rDrQs   r2�remote_userJoinedzTestMind.remote_userJoined�s���
�
���4��-�(r4c�@�|jj|||f�yrk)rEr�)r*rDrQ�reasons    r2�remote_userLeftzTestMind.remote_userLeft�s���
�
���4���/�0r4c�@�|jj|||f�yrk)rFr�)r*�sender�	recipientr�s    r2�remote_receivezTestMind.remote_receives���
�
���f�i��9�:r4c�>�|jj||f�yrk)r�r�)r*rQr�s   r2�remote_groupMetaUpdatezTestMind.remote_groupMetaUpdates���	�	���%���'r4N)rbrcrdrsrJrMrQrSrer4r2rBrB�s���)�1�;�(r4rBc�H�eZdZd�Zd�Zd�Zd�Zejd��Z	y)�PBProtocolTestsc��tjd�|_tj�|_t
j|j|j
g�|_tj|j�|_
|j|j_d|j_
tj�|_d|j_
t!j"d|j�|_t!j&d|j$j)�j*|j�|_y)NrTrri)rrr,rr�r�rr�r
�PBServerFactory�
serverFactory�_protocolFactoryro�unsafeTracebacks�PBClientFactory�
clientFactoryr�	listenTCP�
serverPort�
connectTCP�getHost�port�
clientConnr8s r2r�zPBProtocolTests.setUps����/�/��<��
��G�G�I����m�m�D�J�J�����?����/�/����<���&*�&;�&;����#�.2����+��/�/�1���.2����+�!�+�+�A�t�/A�/A�B���!�,�,�����0�0�2�7�7��9K�9K�
��r4c�N�tjd�|_|jS)Nr)r
�Broker�_serverProtocol)r*r�rHs   r2rYz PBProtocolTests._protocolFactorys��!�y�y��|����#�#�#r4c����t��|jj�fd��tt	|j
j�t	|jj��g�S)Nc�&���jd�Srk)�callback)�d3s�r2r�z*PBProtocolTests.tearDown.<locals>.<lambda>s������D�8I�r4)	r	re�notifyOnDisconnectr
rr^�
stopListeningrb�
disconnect)r*ris @r2�tearDownzPBProtocolTests.tearDownsX���
�Z�����/�/�0I�J���d�o�o�;�;�<��d�o�o�8�8�9��
�
�	
r4c�����|}t|t�r|jd�}tj||���j
j
||��jj|�}|j���fd��|S)N�asciic�<���jj���Srk)r\�login)�ign�credsrpr*s ���r2r�z1PBProtocolTests._loggedInAvatar.<locals>.<lambda>/s���$�"4�"4�":�":�5�$�"G�r4)
r�r��encoder�UsernamePasswordr�rIr,r@�addCallback)r*r%r�rp�	nameBytes�drss`  `  @r2�_loggedInAvatarzPBProtocolTests._loggedInAvatar(sl����	��d�C� ����G�,�I��,�,�Y��A�������Y��1��J�J�!�!�$�'��	�
�
�G�H��r4c#�jK�t�}|jdd|���}t�}|jdd|���}t�}|jdd|���}|jjd���|jjd���|j	d���}|j	d���}|j	d���|j	d���|j	d���|jd	d
i���|j
���|j
���y�w)N�onesp1�twosp2sthreesp3�foobarsbarfoostextshello, monkeys)rBryr,rN�join�send�leave)	r*�mindoner{�mindtwor|�	mindThree�threerZr[s	         r2�
testGroupszPBProtocolTests.testGroups2s�����*���(�(���w�?�?���*���(�(���w�?�?���J�	��*�*�8�U�I�F�F���j�j�$�$�X�.�.��j�j�$�$�Y�/�/����(�+�+�����)�,�,���h�h�x� � ��h�h�y�!�!��j�j��"�"��m�m�W�&7�8�9�9��n�n����n�n���s�D1D3N)
rbrcrdr�rYrmryr�inlineCallbacksr�rer4r2rUrU
s0��
�$�	
�������r4rU)#�__doc__r:�twisted.credrrr�twisted.internetrrr�twisted.internet.deferr	r
rr�twisted.spreadr
�twisted.testr�
twisted.trialr�
twisted.wordsrr�twisted.words.protocolsr�TestCaserrgrz�PBMindrB�setUnjellyableForClass�PBMindReferencerUrer4r2�<module>r�s�����6�6�4�4�Q�Q��&�"�)�'�o6��"�"�o6�d*�*�&W	:�x�(�(�W	:�t(�w�~�~�(�(����(�G�$;�$;�<�@�h�'�'�@r4