§
    Étºfhw  ã                   óâ  — d Z ddlZddlmZmZ ddlmZ ddlmZm	Z	 ddl
mZ ddl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mZ ddlmZ ddlmZ ddlmZmZmZm Z m!Z! ddl"m#Z# ddl$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* 	  ed¦  «         dZ+n# e,$ r dZ+Y nw xY w G d„ dej-        ¦  «        Z. G d„ de/¦  «        Z0 G d„ de1¦  «        Z2 G d„ de%¦  «        Z3 G d„ de%¦  «        Z4 G d„ de%¦  «        Z5 G d„ d e3¦  «        Z6 G d!„ d"e!j7        ¦  «        Z8 G d#„ d$e!j&        ¦  «        Z9 G d%„ d&e!j&        ¦  «        Z: G d'„ d(ej-        ¦  «        Z; G d)„ d*e;¦  «        Z< G d+„ d,ej-        ¦  «        Z= G d-„ d.¦  «        Z> G d/„ d0e>ej-        ¦  «        Z? G d1„ d2e>ej-        ¦  «        Z@ G d3„ d4e;¦  «        ZA G d5„ d6e;¦  «        ZB G d7„ d8ej-        ¦  «        ZC G d9„ d:ej-        ¦  «        ZD G d;„ d<ej-        ¦  «        ZEdS )=z6
Tests for  XML-RPC support in L{twisted.web.xmlrpc}.
é    N)ÚBytesIOÚStringIO)ÚskipIf)ÚdeferÚreactor)ÚConnectionDone)ÚEventLoggingObserverÚMemoryReactor)ÚFilteringLogObserverÚLogLevelÚLogLevelFilterPredicateÚglobalLogPublisher)Úfailure)ÚnativeStringÚnetworkString)ÚnamedModule)Úunittest)ÚclientÚhttpÚserverÚstaticÚxmlrpc)ÚDummyRequest)ÚXMLRPCÚQueryFactoryÚaddIntrospectionÚpayloadTemplateÚwithRequestÚ	xmlrpclibztwisted.internet.sslFTc                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚAsyncXMLRPCTestsz5
    Tests for L{XMLRPC}'s support of Deferreds.
    c                 ó0  ‡— t          dg¦  «        | _        d| j        _        t          t          dt          j        d¦  «        fz  ¦  «        | j        _        t          j	        ¦   «         xŠ| _
         G ˆfd„dt          ¦  «        } |¦   «         | _        d S )NÚ ÚPOSTÚasync© c                   ó   •— e Zd Zˆ fd„ZdS )ú-AsyncXMLRPCTests.setUp.<locals>.AsyncResourcec                 ó   •— ‰S ©Nr&   )ÚselfÚresults    €ú[/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/web/test/test_xmlrpc.pyÚxmlrpc_asyncz:AsyncXMLRPCTests.setUp.<locals>.AsyncResource.xmlrpc_async=   s   ø€ Ø�ó    N)Ú__name__Ú
__module__Ú__qualname__r.   ©r,   s   €r-   ÚAsyncResourcer(   <   s.   ø€ € € € € ðð ð ð ð ð ð r/   r4   )r   ÚrequestÚmethodr   r   r   ÚdumpsÚcontentr   ÚDeferredr,   r   Úresource)r+   r4   r,   s     @r-   ÚsetUpzAsyncXMLRPCTests.setUp3   s¦   ø€ Ý# R DÑ)Ô)ˆŒØ$ˆŒÔÝ'Ý˜w­	¬¸Ñ(;Ô(;Ð<Ñ<ñ 
ô  
ˆŒÔõ  %œ~Ñ/Ô/Ð/ˆ�”ð	ð 	ð 	ð 	ð 	ð 	ð 	�Fñ 	ô 	ð 	ð &˜™œˆŒˆˆr/   c                 ó†  — | j                              | j        ¦  «         |                      | j        j        g ¦  «         | j                             d¦  «         t          j        d 	                    | j        j        ¦  «        ¦  «        }|                      |d¦  «         |                      | j        j
        d¦  «         dS )zž
        If an L{XMLRPC} C{xmlrpc_*} method returns a L{defer.Deferred}, the
        response to the request is the result of that L{defer.Deferred}.
        r,   r/   )r3   Né   N)r:   Úrenderr5   ÚassertEqualÚwrittenr,   Úcallbackr   ÚloadsÚjoinÚfinished)r+   Úresps     r-   Útest_deferredResponsez&AsyncXMLRPCTests.test_deferredResponseB   s¥   € ð
 	Œ×Ò˜Tœ\Ñ*Ô*Ð*Ø×Ò˜œÔ-¨rÑ2Ô2Ð2àŒ×Ò˜XÑ&Ô&Ð&åŒ˜sŸxšx¨¬Ô(<Ñ=Ô=Ñ>Ô>ˆØ×Ò˜Ð2Ñ3Ô3Ð3Ø×Ò˜œÔ.°Ñ2Ô2Ð2Ð2Ð2r/   c                 ój  — | j                              | j        ¦  «         | j                             t	          j        t          d¦  «        ¦  «        ¦  «         | j                             d¦  «         |  	                    | j        j
        g ¦  «         |  	                    | j        j        d¦  «         dS )a   
        While waiting for the L{Deferred} returned by an L{XMLRPC} C{xmlrpc_*}
        method to fire, the connection the request was issued over may close.
        If this happens, neither C{write} nor C{finish} is called on the
        request.
        Ú	Simulatedr,   r   N)r:   r>   r5   ÚprocessingFailedr   ÚFailurer   r,   rA   r?   r@   rD   ©r+   s    r-   Ú test_interruptedDeferredResponsez1AsyncXMLRPCTests.test_interruptedDeferredResponseP   s–   € ð 	Œ×Ò˜Tœ\Ñ*Ô*Ð*ØŒ×%Ò%¥g¤oµnÀ[Ñ6QÔ6QÑ&RÔ&RÑSÔSÐSØŒ×Ò˜XÑ&Ô&Ð&Ø×Ò˜œÔ-¨rÑ2Ô2Ð2Ø×Ò˜œÔ.°Ñ2Ô2Ð2Ð2Ð2r/   N)r0   r1   r2   Ú__doc__r;   rF   rL   r&   r/   r-   r!   r!   .   sK   € € € € € ðð ð(ð (ð (ð3ð 3ð 3ð3ð 3ð 3ð 3ð 3r/   r!   c                   ó   — e Zd ZdS )ÚTestRuntimeErrorN©r0   r1   r2   r&   r/   r-   rO   rO   ^   ó   € € € € € Ø€Dr/   rO   c                   ó   — e Zd ZdS )ÚTestValueErrorNrP   r&   r/   r-   rS   rS   b   rQ   r/   rS   c                   ó´   — e Zd ZdZdZdZd„ Zd„ Zg d¢g d¢ge_        d„ Z	g d	¢ge	_        d
„ Z
d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zde_        ed„ ¦   «         Zd„ ZdS )ÚTestéš  é   é*   c                 ó   — |S r*   r&   )r+   Úargs     r-   Úxmlrpc_echozTest.xmlrpc_echon   s   € Øˆ
r/   c                 ó   — ||z   S )z0
        This function add two numbers.
        r&   )r+   ÚaÚbs      r-   Ú
xmlrpc_addzTest.xmlrpc_addr   s   € ð �1‰uˆr/   ©Úintra   ra   ©Údoublerc   rc   c                 ó
   — ||gS )zC
        This function puts the two arguments in an array.
        r&   )r+   ÚstringÚnums      r-   Úxmlrpc_pairzTest.xmlrpc_pair~   s   € ð ˜ˆ}Ðr/   ©Úarrayre   ra   c                 ó*   — t          j        |¦  «        S )úHelp for defer.)r   Úsucceed©r+   Úxs     r-   Úxmlrpc_deferzTest.xmlrpc_defer‡   s   € åŒ}˜QÑÔÐr/   c                 óB   — t          j        t          ¦   «         ¦  «        S r*   )r   ÚfailrS   rK   s    r-   Úxmlrpc_deferFailzTest.xmlrpc_deferFail‹   s   € ÝŒz�.Ñ*Ô*Ñ+Ô+Ð+r/   c                 ó   — t           ‚r*   )rO   rK   s    r-   Úxmlrpc_failzTest.xmlrpc_fail�   s   € ÝÐr/   c                 ó,   — t          j        dd¦  «        S )Né   Úhello©r   ÚFaultrK   s    r-   Úxmlrpc_faultzTest.xmlrpc_fault’   s   € ÝŒ|˜B Ñ(Ô(Ð(r/   c                 óP   — t          j        t          j        dd¦  «        ¦  «        S )Né   Úhi)r   rq   r   ry   rK   s    r-   Úxmlrpc_deferFaultzTest.xmlrpc_deferFault•   s   € ÝŒz�&œ, r¨4Ñ0Ô0Ñ1Ô1Ð1r/   c                 ó@   — d}||k    rt          j        dd¦  «        S |S )z8
        Used to test that we can pass Unicode.
        õ   â˜ƒé   zPayload not unicode snowmanrx   )r+   ÚpayloadÚsnowmans      r-   Úxmlrpc_snowmanzTest.xmlrpc_snowman˜   s,   € ð ˆØ�gÒÐÝ”< Ð$AÑBÔBÐBØˆr/   c                 ó   — dddg gddœS )Nr^   Úcrv   Úfoo©r]   ÚDr&   rK   s    r-   Úxmlrpc_complexzTest.xmlrpc_complex¡   s   € Ø˜3  BÐ'¨eÐ4Ð4Ð4r/   c                 ó   — ||         S r*   r&   )r+   ÚmapÚkeys      r-   Úxmlrpc_dictzTest.xmlrpc_dict¤   s   € Ø�3Œxˆr/   úHelp for dict.c                 ó   — |j         dz   |z   S )z©
        A method decorated with L{withRequest} which can be called by
        a test to verify that the request object really is passed as
        an argument.
        ú )r6   )r+   r5   Úothers      r-   Úxmlrpc_withRequestzTest.xmlrpc_withRequest©   s"   € ð ŒNð ñð ñ	ð	
r/   c                 ó´   — 	 t          j        | |¦  «        S # t          j        $ r1 |                     d¦  «        rt          j        | j        d¦  «        ‚‚ w xY w)NÚSESSIONzSession non-existent/expired.)r   ÚlookupProcedurer   ÚNoSuchFunctionÚ
startswithry   ÚSESSION_EXPIRED)r+   ÚprocedurePaths     r-   r–   zTest.lookupProcedure¹   sp   € ð	ÝÔ)¨$°Ñ>Ô>Ð>øÝÔ$ð 	ð 	ð 	Ø×'Ò'¨	Ñ2Ô2ð Ý”lØÔ(Ð*Iñô ð ð ð	øøøs
   ‚ —A AN)r0   r1   r2   ÚFAILUREÚ	NOT_FOUNDr™   r[   r_   Ú	signaturerg   ro   rr   rt   rz   r~   r„   rŠ   rŽ   Úhelpr   r“   r–   r&   r/   r-   rU   rU   f   s-  € € € € € ð €GØ€IØ€Oðð ð ðð ð ð 	ÐÐØ&Ð&Ð&ð€JÔðð ð ð 8Ð7Ð7Ð8€KÔð ð  ð  ð,ð ,ð ,ðð ð ð)ð )ð )ð2ð 2ð 2ðð ð ð5ð 5ð 5ðð ð ð (€KÔàð
ð 
ñ „[ð
ð	ð 	ð 	ð 	ð 	r/   rU   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚTestLookupProcedurez}
    This is a resource which customizes procedure lookup to be used by the tests
    of support for this customization.
    c                 ó   — |S r*   r&   rm   s     r-   ÚechozTestLookupProcedure.echoË   s   € Øˆr/   c                 óX   — |dk    r| j         S t          j        | j        d|› d�¦  «        ‚)zs
        Lookup a procedure from a fixed set of choices, either I{echo} or
        I{system.listeMethods}.
        r¢   z
procedure z
 not found)r¢   r   r—   rœ   )r+   ÚprocedureNames     r-   r–   z#TestLookupProcedure.lookupProcedureÎ   s?   € ð
 ˜FÒ"Ð"Ø”9ÐÝÔ#ØŒNÐB¨ÐBÐBÐBñ
ô 
ð 	
r/   N)r0   r1   r2   rM   r¢   r–   r&   r/   r-   r    r    Å   s<   € € € € € ðð ð
ð ð ð	
ð 	
ð 	
ð 	
ð 	
r/   r    c                   ó   — e Zd ZdZd„ ZdS )ÚTestListProceduresz‚
    This is a resource which customizes procedure enumeration to be used by the
    tests of support for this customization.
    c                 ó   — dgS )zW
        Return a list of a single method this resource will claim to support.
        r‡   r&   rK   s    r-   ÚlistProceduresz!TestListProcedures.listProceduresà   s   € ð ˆwˆr/   N)r0   r1   r2   rM   r¨   r&   r/   r-   r¦   r¦   Ú   s-   € € € € € ðð ð
ð ð ð ð r/   r¦   c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚTestAuthHeaderzU
    This is used to get the header info so that we can test
    authentication.
    c                 óH   — t                                | ¦  «         d | _        d S r*   )rU   Ú__init__r5   rK   s    r-   r¬   zTestAuthHeader.__init__í   s   € Ý�Š�dÑÔÐØˆŒˆˆr/   c                 óF   — || _         t                               | |¦  «        S r*   )r5   rU   r>   )r+   r5   s     r-   r>   zTestAuthHeader.renderñ   s   € ØˆŒÝ�{Š{˜4 Ñ)Ô)Ð)r/   c                 óf   — | j                              ¦   «         | j                              ¦   «         fS r*   )r5   ÚgetUserÚgetPasswordrK   s    r-   Úxmlrpc_authinfozTestAuthHeader.xmlrpc_authinfoõ   s)   € ØŒ|×#Ò#Ñ%Ô% t¤|×'?Ò'?Ñ'AÔ'AÐAÐAr/   N)r0   r1   r2   rM   r¬   r>   r±   r&   r/   r-   rª   rª   ç   sP   € € € € € ðð ð
ð ð ð*ð *ð *ðBð Bð Bð Bð Br/   rª   c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚTestQueryProtocolz_
    QueryProtocol for tests that saves headers received and sent,
    inside the factory.
    c                 óf   — | j         | j        _         t          j                             | ¦  «         d S r*   )Ú	transportÚfactoryr   ÚQueryProtocolÚconnectionMaderK   s    r-   r¸   z TestQueryProtocol.connectionMadeÿ   s+   € Ø!%¤ˆŒÔÝÔ×+Ò+¨DÑ1Ô1Ð1Ð1Ð1r/   c                 óH   — || j         j        |                     ¦   «         <   d S r*   )r¶   ÚheadersÚlower©r+   r�   Úvals      r-   ÚhandleHeaderzTestQueryProtocol.handleHeader  s   € Ø,/ˆŒÔ˜SŸYšY™[œ[Ñ)Ð)Ð)r/   c                 óŠ   — || j         j        |                     ¦   «         <   t          j                             | ||¦  «         dS )zA
        Keep sent headers so we can inspect them later.
        N)r¶   Úsent_headersr»   r   r·   Ú
sendHeaderr¼   s      r-   rÁ   zTestQueryProtocol.sendHeader  s<   € ð 25ˆŒÔ! #§)¢)¡+¤+Ñ.ÝÔ×'Ò'¨¨c°3Ñ7Ô7Ð7Ð7Ð7r/   N)r0   r1   r2   rM   r¸   r¾   rÁ   r&   r/   r-   r³   r³   ù   sK   € € € € € ðð ð
2ð 2ð 2ð0ð 0ð 0ð8ð 8ð 8ð 8ð 8r/   r³   c                   ó   — e Zd ZdZeZd„ ZdS )ÚTestQueryFactoryzE
    QueryFactory using L{TestQueryProtocol} for saving headers.
    c                 óV   — i | _         i | _        t          j        j        | g|¢R i |¤Ž d S r*   )rº   rÀ   r   r   r¬   )r+   ÚargsÚkwargss      r-   r¬   zTestQueryFactory.__init__  s;   € ØˆŒØˆÔÝÔÔ$ TÐ;¨DÐ;Ð;Ð;°FÐ;Ð;Ð;Ð;Ð;r/   N)r0   r1   r2   rM   r³   Úprotocolr¬   r&   r/   r-   rÃ   rÃ     s4   € € € € € ðð ð !€Hð<ð <ð <ð <ð <r/   rÃ   c                   ó   — e Zd ZdZd„ ZdS )ÚTestQueryFactoryCancelz{
    QueryFactory that saves a reference to the
    L{twisted.internet.interfaces.IConnector} to test connection lost.
    c                 ó   — || _         d S r*   )Ú	connector)r+   rË   s     r-   ÚstartedConnectingz(TestQueryFactoryCancel.startedConnecting!  s   € Ø"ˆŒˆˆr/   N)r0   r1   r2   rM   rÌ   r&   r/   r-   rÉ   rÉ     s-   € € € € € ðð ð
#ð #ð #ð #ð #r/   rÉ   c                   óŽ   — e Zd Zd„ Z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 eed¦  «        d„ ¦   «         ZdS )ÚXMLRPCTestsc                 óÎ   — t          j        dt          j        t	          ¦   «         ¦  «        d¬¦  «        | _        | j                             ¦   «         j        | _        g | _        d S ©Nr   ú	127.0.0.1©Ú	interface)	r   Ú	listenTCPr   ÚSiterU   ÚpÚgetHostÚportÚ	factoriesrK   s    r-   r;   zXMLRPCTests.setUp&  sJ   € ÝÔ" 1¥f¤kµ$±&´&Ñ&9Ô&9À[ÐQÑQÔQˆŒØ”F—N’NÑ$Ô$Ô)ˆŒ	ØˆŒˆˆr/   c                 óB   — g | _         | j                             ¦   «         S r*   )rÙ   rÖ   ÚstopListeningrK   s    r-   ÚtearDownzXMLRPCTests.tearDown+  s   € ØˆŒØŒv×#Ò#Ñ%Ô%Ð%r/   c                 óR   — t          |i |¤Ž}| j                             |¦  «         |S )zw
        Specific queryFactory for proxy that uses our custom
        L{TestQueryFactory}, and save factories.
        )rÃ   rÙ   Úappend)r+   rÅ   rÆ   r¶   s       r-   ÚqueryFactoryzXMLRPCTests.queryFactory/  s1   € õ
 # DÐ3¨FÐ3Ð3ˆØŒ×Ò˜gÑ&Ô&Ð&Øˆr/   Nc                 ó„   — t          j        t          d| j        z  ¦  «        ¦  «        }|€| j        |_        n||_        |S )z¾
        Return a new xmlrpc.Proxy for the test site created in
        setUp(), using the given factory as the queryFactory, or
        self.queryFactory if no factory is provided.
        úhttp://127.0.0.1:%d/©r   ÚProxyr   rØ   rß   ©r+   r¶   rÖ   s      r-   ÚproxyzXMLRPCTests.proxy8  s@   € õ ŒL�Ð'=ÀÄ	Ñ'IÑJÔJÑKÔKˆØˆ?Ø!Ô.ˆAŒNˆNà$ˆAŒNØˆr/   c                 ó   — dddddidfdfddddgfdd	d
dddg gddœfg}g }|D ]V\  }}} |                       ¦   «         j        |g|¢R Ž }|                     | j        |¦  «         |                     |¦  «         ŒWt          j        |d¬¦  «        S )N)Úadd)é   é   é   )r   )r]   r]   Údictr]   r=   Úpair)r]   r=   )rƒ   r€   r€   Úcomplexr&   r^   r†   rv   r‡   rˆ   T©ÚfireOnOneErrback©rå   Ú
callRemoteÚaddCallbackr?   rÞ   r   ÚDeferredList)r+   ÚinputOutputÚdlÚmethrÅ   ÚoutpÚds          r-   Útest_resultszXMLRPCTests.test_resultsE  sÊ   € àØ"Ø�s˜A�h �_ aÐ(Ø�X  Q˜xÐ(Ø-Ø˜ 3¨¨R°Ð"4¸5ÐAÐAÐBð
ˆð ˆØ +ð 	ð 	ÑˆD�$˜Ø'�—
’
‘”Ô'¨Ð4¨tÐ4Ð4Ð4ˆAØ�MŠM˜$Ô*¨DÑ1Ô1Ð1Ø�IŠI�a‰LŒLˆLˆLÝÔ! "°tÐ<Ñ<Ô<Ð<r/   c                 óÀ   ‡ — ‰                       ¦   «                              dd¦  «        }ˆ fd„}ˆ fd„}|                     |¦  «         |                     |¦  «         |S )zƒ
        Verify that headers sent from the client side and the ones we
        get back from the server side are correct.

        rƒ   r€   c                 ó¸   •— ‰                      ‰j        d         j        d         d¦  «         ‰                      ‰j        d         j        d         d¦  «         d S )Nr   ó   content-typeó   text/xml; charset=utf-8ó   content-lengths   129)r?   rÙ   rº   )Úingr+   s    €r-   Úcheck_server_headersz6XMLRPCTests.test_headers.<locals>.check_server_headers^  s^   ø€ Ø×ÒØ”˜qÔ!Ô)¨/Ô:Ð<Vñô ð ð ×Ò˜Tœ^¨AÔ.Ô6Ð7HÔIÈ6ÑRÔRÐRÐRÐRr/   c                 ó  •— ‰                      ‰j        d         j        d         d¦  «         ‰                      ‰j        d         j        d         d¦  «         ‰                      ‰j        d         j        d         d¦  «         d S )Nr   s
   user-agents   Twisted/XMLRPClibrü   rý   rþ   s   155)r?   rÙ   rÀ   )Úignr+   s    €r-   Úcheck_client_headersz6XMLRPCTests.test_headers.<locals>.check_client_headersd  sŽ   ø€ Ø×ÒØ”˜qÔ!Ô.¨}Ô=Ð?Sñô ð ð ×ÒØ”˜qÔ!Ô.¨Ô?Ø*ñô ð ð ×Ò˜Tœ^¨AÔ.Ô;Ð<MÔNÐPVÑWÔWÐWÐWÐWr/   ©rå   rñ   rò   )r+   rø   r   r  s   `   r-   Útest_headerszXMLRPCTests.test_headersV  s‹   ø€ ð �JŠJ‰LŒL×#Ò# I¨xÑ8Ô8ˆð	Sð 	Sð 	Sð 	Sð 	Sð	Xð 	Xð 	Xð 	Xð 	Xð 	
�ŠÐ*Ñ+Ô+Ð+Ø	�ŠÐ*Ñ+Ô+Ð+Øˆr/   c                 ó4  ‡ ‡‡— t          ¦   «         Št          ‰t          t          j        ¬¦  «        g¦  «        Št          j        ‰¦  «         ‰                      ˆfd„¦  «         g }dD ]{\  }}‰                      ¦   «          	                    |¦  «        }‰  
                    |t          j        ¦  «        }|                     |fˆ fd„	¦  «         |                     |¦  «         Œ|t          j        |d¬¦  «        }ˆˆ fd„}|                     |¦  «         |S )zø
        Verify that for each way a method exposed via XML-RPC can fail, the
        correct 'Content-type' header is set in the response and that the
        client-side Deferred is errbacked with an appropriate C{Fault}
        instance.
        ©ÚdefaultLogLevelc                  ó,   •— t          j        ‰ ¦  «        S r*   ©r   ÚremoveObserver©Úfiltereds   €r-   ú<lambda>z)XMLRPCTests.test_errors.<locals>.<lambda>~  ó   ø€ Õ 2Ô AÀ(Ñ KÔ K€ r/   ))rV   rq   )rV   Ú	deferFail)rv   Úfault)rW   ÚnoSuchMethod)r|   Ú
deferFault)rX   ÚSESSION_TESTc                 ó:   •— ‰                      | j        |¦  «        S r*   )r?   Ú	faultCode)ÚexcÚcoder+   s     €r-   r  z)XMLRPCTests.test_errors.<locals>.<lambda>Š  s   ø€ °×1AÒ1AÀ#Ä-ÐQUÑ1VÔ1V€ r/   Trî   c                 óþ  •— ‰j         D ]#}‰                     |j        d         d¦  «         Œ$‰                     dt	          ‰¦  «        ¦  «         ‰d         d         j        }‰d         d         j        }t          |t          ¦  «        r‰                     |t          ¦  «         n6‰                     |t          ¦  «         ‰                     |t          ¦  «         ‰ 
                    t          t          ¦  «         d S )Nrü   rý   rè   r   Úlog_failurer=   )rÙ   r?   rº   ÚassertEqualsÚlenÚvalueÚ
isinstancerS   ÚassertIsInstancerO   ÚflushLoggedErrors)r  r¶   Úf1Úf2ÚlogObserverr+   s       €€r-   Úcbz#XMLRPCTests.test_errors.<locals>.cbŽ  sö   ø€ Øœ>ð ð �Ø× Ò Ø”O OÔ4Ð6Pñô ð ð ð ×Ò˜a¥ [Ñ!1Ô!1Ñ2Ô2Ð2Ø˜Q” Ô.Ô4ˆBØ˜Q” Ô.Ô4ˆBå˜"�nÑ-Ô-ð :Ø×%Ò% bÕ*:Ñ;Ô;Ð;Ð;à×%Ò% bÕ*:Ñ;Ô;Ð;Ø×%Ò% b­.Ñ9Ô9Ð9à×"Ò"Õ#3µ^ÑDÔDÐDÐDÐDr/   )r	   r   r   r   Úcriticalr   ÚaddObserverÚ
addCleanuprå   rñ   ÚassertFailurer   ry   rò   rÞ   r   ró   )r+   rõ   r  Ú
methodNamerø   r$  r  r#  s   `     @@r-   Útest_errorszXMLRPCTests.test_errorsr  s:  øøø€ õ +Ñ,Ô,ˆÝ'ØÕ1Å(ÔBSÐTÑTÔTÐUñ
ô 
ˆõ 	Ô& xÑ0Ô0Ð0Ø�ŠÐKÐKÐKÐKÑLÔLÐLØˆð!
ð 	ð 	ÑˆD�*ð —
’
‘”×'Ò'¨
Ñ3Ô3ˆAØ×"Ò" 1¥f¤lÑ3Ô3ˆAØ�MŠM¨4ÐVÐVÐVÐVÐVÑWÔWÐWØ�IŠI�a‰LŒLˆLˆLÝÔ˜r°DÐ9Ñ9Ô9ˆð	Eð 	Eð 	Eð 	Eð 	Eð 	Eð" 	
�Š�bÑÔÐØˆr/   c                 ób  ‡— ˆfd„Š|                       ‰¦  «                             ddd¦  «        }|                      ‰j        j        j        d¦  «         |                     ¦   «          |                      ‰j        j        j        d¦  «         |                      |t          j
        ¦  «        }|S )z‚
        A deferred from the Proxy can be cancelled, disconnecting
        the L{twisted.internet.interfaces.IConnector}.
        c                  ó4   •— t          | i |¤Ž‰_        ‰j        S r*   )rÉ   Úf)rÅ   Úkwr¶   s     €r-   r¶   z(XMLRPCTests.test_cancel.<locals>.factory¨  s   ø€ Ý.°Ð;¸Ð;Ð;ˆGŒIØ”9Ðr/   rç   rè   ré   Údisconnected)rå   rñ   ÚassertNotEqualr-  rË   ÚstateÚcancelr?   r(  r   ÚCancelledError)r+   rø   r¶   s     @r-   Útest_cancelzXMLRPCTests.test_cancel¢  s§   ø€ ð	ð 	ð 	ð 	ð 	ð �JŠJ�wÑÔ×*Ò*¨5°!°QÑ7Ô7ˆØ×Ò˜GœIÔ/Ô5°~ÑFÔFÐFØ	�Š‰
Œ
ˆ
Ø×Ò˜œÔ,Ô2°NÑCÔCÐCØ×Ò˜q¥%Ô"6Ñ7Ô7ˆØˆr/   c                 óÆ   ‡ — t          j        t          ¦  «        }|                     dt	          d‰ j        fz  ¦  «        ¦  «        }ˆ fd„}|                     |¦  «         |S )zN
        A classic GET on the xml server should return a NOT_ALLOWED.
        s   GETrá   c                 óR   •— ‰                      | j        t          j        ¦  «         d S r*   )r?   r  r   ÚNOT_ALLOWED)Úresponser+   s    €r-   ÚcheckResponsez0XMLRPCTests.test_errorGet.<locals>.checkResponseº  s$   ø€ Ø×Ò˜Xœ]­DÔ,<Ñ=Ô=Ð=Ð=Ð=r/   )r   ÚAgentr   r5   r   rØ   rò   )r+   Úagentrø   r9  s   `   r-   Útest_errorGetzXMLRPCTests.test_errorGet³  sk   ø€ õ ”�WÑ%Ô%ˆØ�MŠM˜&¥-Ð0FÈ$Ì)ÈÑ0UÑ"VÔ"VÑWÔWˆð	>ð 	>ð 	>ð 	>ð 	>ð 	
�Š�mÑ$Ô$Ð$Øˆr/   c           	      óF  ‡ — t          j        t          ¦  «        }|                     t	          d‰ j        fz  ¦  «        dt          j        t          d¦  «        ¦  «        ¬¦  «        }|                     t           j	        ¦  «         ˆ fd„}|                     |¦  «         |S )zL
        Test that an invalid XML input returns an L{xmlrpc.Fault}.
        rá   s   POSTs   foo)Úurir6   ÚbodyProducerc                 ó^   •— ‰                      t          j        t          j        | ¦  «         d S r*   )ÚassertRaisesr   ry   r   rB   )r,   r+   s    €r-   r$  z,XMLRPCTests.test_errorXMLContent.<locals>.cbÌ  s%   ø€ Ø×Ò�fœl­I¬O¸VÑDÔDÐDÐDÐDr/   )
r   r:  r   r5   r   rØ   ÚFileBodyProducerr   rò   ÚreadBody)r+   r;  rø   r$  s   `   r-   Útest_errorXMLContentz XMLRPCTests.test_errorXMLContentÀ  s¥   ø€ õ ”�WÑ%Ô%ˆØ�MŠMÝÐ4¸¼	°|ÑCÑDÔDØÝÔ0µ¸±´ÑAÔAð ñ 
ô 
ˆð
 	
�Š•f”oÑ&Ô&Ð&ð	Eð 	Eð 	Eð 	Eð 	Eð 	
�Š�bÑÔÐØˆr/   c                 ó²   — t          j        ¦   «         }|                      ¦   «                              d|¦  «        }|                     | j        |¦  «         |S )zÈ
        If an L{xmlrpclib.DateTime} is passed as an argument to an XML-RPC
        call and then returned by the server unmodified, the result should
        be equal to the original object.
        r¢   )r   ÚDateTimerå   rñ   rò   r?   )r+   Úwhenrø   s      r-   Útest_datetimeRoundtripz"XMLRPCTests.test_datetimeRoundtripÒ  sK   € õ Ô!Ñ#Ô#ˆØ�JŠJ‰LŒL×#Ò# F¨DÑ1Ô1ˆØ	�Š�dÔ&¨Ñ-Ô-Ð-Øˆr/   c                 óÌ  ‡ ‡‡— t          ¦   «         Št          ‰t          t          j        ¬¦  «        g¦  «        Št          j        ‰¦  «         ‰                      ˆfd„¦  «         ‰                      ¦   «          	                    dd¦  «        }d„ }‰  
                    t          d|¦  «         ‰                      |t          ¦  «        }ˆˆ fd„}|                     |¦  «         |S )a.  
        If it is not possible to encode a response to the request (for example,
        because L{xmlrpclib.dumps} raises an exception when encoding a
        L{Fault}) the exception which prevents the response from being
        generated is logged and the request object is finished anyway.
        r  c                  ó,   •— t          j        ‰ ¦  «        S r*   r
  r  s   €r-   r  z6XMLRPCTests.test_doubleEncodingError.<locals>.<lambda>é  r  r/   r¢   r#   c                  ó    — t          d¦  «        ‚)NzCannot encode anything at all!)ÚRuntimeError)rÅ   rÆ   s     r-   Ú	fakeDumpsz7XMLRPCTests.test_doubleEncodingError.<locals>.fakeDumpsí  s   € ÝÐ?Ñ@Ô@Ð@r/   r7   c                 ó  •— ‰                      dt          ‰¦  «        ¦  «         ‰                     ‰d         d         j        t          ¦  «         ‰                     t          ‰                     t          ¦  «        ¦  «        d¦  «         d S )Nr=   r   r  )r  r  r  r  rL  r?   r   )Úignoredr#  r+   s    €€r-   ÚcbFailedz6XMLRPCTests.test_doubleEncodingError.<locals>.cbFailed÷  su   ø€ à×Ò˜a¥ [Ñ!1Ô!1Ñ2Ô2Ð2Ø×!Ò! +¨a¤.°Ô"?Ô"EÅ|ÑTÔTÐTØ×Ò�S ×!7Ò!7½Ñ!EÔ!EÑFÔFÈÑJÔJÐJÐJÐJr/   )r	   r   r   r   r%  r   r&  r'  rå   rñ   Úpatchr   r(  Ú	Exceptionrò   )r+   rø   rM  rP  r  r#  s   `   @@r-   Útest_doubleEncodingErrorz$XMLRPCTests.test_doubleEncodingErrorÝ  s  øøø€ õ +Ñ,Ô,ˆÝ'ØÕ1Å(ÔBSÐTÑTÔTÐUñ
ô 
ˆõ 	Ô& xÑ0Ô0Ð0Ø�ŠÐKÐKÐKÐKÑLÔLÐLØ�JŠJ‰LŒL×#Ò# F¨BÑ/Ô/ˆð	Að 	Að 	Að 	�
Š
•9˜g yÑ1Ô1Ð1ð
 ×Ò˜q¥)Ñ,Ô,ˆð	Kð 	Kð 	Kð 	Kð 	Kð 	Kð 	
�Š�hÑÔÐØˆr/   c                 óˆ   ‡ — ‰                       ¦   «                              dd¦  «        }ˆ fd„}|                     |¦  «        S )zV
        The connection to the web server is closed when the request is done.
        r¢   r#   c                 ó–   •— ‰j         \  }‰                     |j        j        ¦  «         ‰                     |j        j        ¦  «         d S r*   )rÙ   ÚassertFalserµ   Ú	connectedÚ
assertTruer/  )rO  r¶   r+   s     €r-   ÚresponseDonezBXMLRPCTests.test_closeConnectionAfterRequest.<locals>.responseDone  sD   ø€ Øœ‰IˆWØ×Ò˜WÔ.Ô8Ñ9Ô9Ð9Ø�OŠO˜GÔ-Ô:Ñ;Ô;Ð;Ð;Ð;r/   r  )r+   rø   rY  s   `  r-   Ú test_closeConnectionAfterRequestz,XMLRPCTests.test_closeConnectionAfterRequest   sO   ø€ ð �JŠJ‰LŒL×#Ò# F¨BÑ/Ô/ˆð	<ð 	<ð 	<ð 	<ð 	<ð
 �}Š}˜\Ñ*Ô*Ð*r/   c                 óÈ   — t          ¦   «         }t          j        dd|¬¦  «        }|                     d¦  «         |                      |j        d         d         d¦  «         dS )zÍ
        For I{HTTP} URIs, L{xmlrpc.Proxy.callRemote} passes the value it
        received for the C{connectTimeout} parameter as the C{timeout} argument
        to the underlying connectTCP call.
        s   http://127.0.0.1:69g       @©ÚconnectTimeoutr   Ú
someMethodr   ré   N)r
   r   rã   rñ   r?   Ú
tcpClients©r+   r   rå   s      r-   Útest_tcpTimeoutzXMLRPCTests.test_tcpTimeout  si   € õ  ‘/”/ˆÝ”Ø"°3Àð
ñ 
ô 
ˆð 	×Ò˜Ñ&Ô&Ð&Ø×Ò˜Ô+¨AÔ.¨qÔ1°3Ñ7Ô7Ð7Ð7Ð7r/   zOpenSSL not presentc                 óÈ   — t          ¦   «         }t          j        dd|¬¦  «        }|                     d¦  «         |                      |j        d         d         d¦  «         dS )zÎ
        For I{HTTPS} URIs, L{xmlrpc.Proxy.callRemote} passes the value it
        received for the C{connectTimeout} parameter as the C{timeout} argument
        to the underlying connectSSL call.
        s   https://127.0.0.1:69g      @r\  r^  r   é   N)r
   r   rã   rñ   r?   Ú
sslClientsr`  s      r-   Útest_sslTimeoutzXMLRPCTests.test_sslTimeout  si   € õ  ‘/”/ˆÝ”Ø#°CÀð
ñ 
ô 
ˆð 	×Ò˜Ñ&Ô&Ð&Ø×Ò˜Ô+¨AÔ.¨qÔ1°3Ñ7Ô7Ð7Ð7Ð7r/   r*   )r0   r1   r2   r;   rÜ   rß   rå   rù   r  r*  r4  r<  rD  rH  rS  rZ  ra  r   ÚsslSkipre  r&   r/   r-   rÎ   rÎ   %  s  € € € € € ðð ð ð
&ð &ð &ðð ð ðð ð ð ð=ð =ð =ð"ð ð ð8.ð .ð .ð`ð ð ð"ð ð ðð ð ð$	ð 	ð 	ð!ð !ð !ðF+ð +ð +ð8ð 8ð 8ð €VˆGÐ*Ñ+Ô+ð8ð 8ñ ,Ô+ð8ð 8ð 8r/   rÎ   c                   ó   — e Zd ZdZdd„ZdS )ÚXMLRPCProxyWithoutSlashTestsz3
    Test with proxy that doesn't add a slash.
    Nc                 ó„   — t          j        t          d| j        z  ¦  «        ¦  «        }|€| j        |_        n||_        |S )Núhttp://127.0.0.1:%drâ   rä   s      r-   rå   z"XMLRPCProxyWithoutSlashTests.proxy.  s>   € ÝŒL�Ð'<¸t¼yÑ'HÑIÔIÑJÔJˆØˆ?Ø!Ô.ˆAŒNˆNà$ˆAŒNØˆr/   r*   )r0   r1   r2   rM   rå   r&   r/   r-   rh  rh  )  s2   € € € € € ðð ðð ð ð ð ð r/   rh  c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )Ú XMLRPCPublicLookupProcedureTestszr
    Tests for L{XMLRPC}'s support of subclasses which override
    C{lookupProcedure} and C{listProcedures}.
    c                 óB  — t          j        dt          j        |¦  «        d¬¦  «        | _        |                      | j        j        ¦  «         | j                             ¦   «         j        | _        t          j
        t          d| j        z  ¦  «        ¦  «        | _        d S )Nr   rÑ   rÒ   rj  )r   rÔ   r   rÕ   rÖ   r'  rÛ   r×   rØ   r   rã   r   rå   )r+   r:   s     r-   ÚcreateServerz-XMLRPCPublicLookupProcedureTests.createServer=  sw   € ÝÔ" 1¥f¤k°(Ñ&;Ô&;À{ÐSÑSÔSˆŒØ�Š˜œÔ,Ñ-Ô-Ð-Ø”F—N’NÑ$Ô$Ô)ˆŒ	Ý”\¥-Ð0EÈÌ	Ñ0QÑ"RÔ"RÑSÔSˆŒ
ˆ
ˆ
r/   c                 ó¸   — |                       t          ¦   «         ¦  «         d}| j                             d|¦  «        }|                     | j        |¦  «         |S )z¢
        A subclass of L{XMLRPC} can override C{lookupProcedure} to find
        procedures that are not defined using a C{xmlrpc_}-prefixed method name.
        rw   r¢   )rn  r    rå   rñ   rò   r?   )r+   Úwhatrø   s      r-   Útest_lookupProcedurez5XMLRPCPublicLookupProcedureTests.test_lookupProcedureC  sW   € ð
 	×ÒÕ-Ñ/Ô/Ñ0Ô0Ð0ØˆØŒJ×!Ò! &¨$Ñ/Ô/ˆØ	�Š�dÔ&¨Ñ-Ô-Ð-Øˆr/   c                 ó¾   — |                       t          ¦   «         ¦  «         | j                             dd¦  «        }|                      |t
          j        ¦  «        }|S )zá
        A subclass of L{XMLRPC} can override C{lookupProcedure} to raise
        L{NoSuchFunction} to indicate that a requested method is not available
        to be called, signalling a fault to the XML-RPC client.
        Úxxxxrw   )rn  r    rå   rñ   r(  r   ry   ©r+   rø   s     r-   r*  z,XMLRPCPublicLookupProcedureTests.test_errorsN  sR   € ð 	×ÒÕ-Ñ/Ô/Ñ0Ô0Ð0ØŒJ×!Ò! &¨'Ñ2Ô2ˆØ×Ò˜q¥&¤,Ñ/Ô/ˆØˆr/   c                 óÔ   ‡ — t          ¦   «         }t          |¦  «         ‰                      |¦  «         ‰ j                             d¦  «        }ˆ fd„}|                     |¦  «         |S )z¬
        A subclass of L{XMLRPC} can override C{listProcedures} to define
        Overriding listProcedures should prevent introspection from being
        broken.
        úsystem.listMethodsc                 ó4   •— ‰                      d| ¦  «         d S )Nr‡   )ÚassertIn)Ú
proceduresr+   s    €r-   ÚlistedzAXMLRPCPublicLookupProcedureTests.test_listMethods.<locals>.listedd  s   ø€ ð �MŠM˜% Ñ,Ô,Ð,Ð,Ð,r/   )r¦   r   rn  rå   rñ   rò   )r+   r:   rø   rz  s   `   r-   Útest_listMethodsz1XMLRPCPublicLookupProcedureTests.test_listMethodsY  sz   ø€ õ &Ñ'Ô'ˆÝ˜Ñ"Ô"Ð"Ø×Ò˜(Ñ#Ô#Ð#ØŒJ×!Ò!Ð"6Ñ7Ô7ˆð	-ð 	-ð 	-ð 	-ð 	-ð 	
�Š�fÑÔÐØˆr/   N)r0   r1   r2   rM   rn  rq  r*  r{  r&   r/   r-   rl  rl  7  s]   € € € € € ðð ð
Tð Tð Tð	ð 	ð 	ð	ð 	ð 	ðð ð ð ð r/   rl  c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚSerializationConfigMixinas  
    Mixin which defines a couple tests which should pass when a particular flag
    is passed to L{XMLRPC}.

    These are not meant to be exhaustive serialization tests, since L{xmlrpclib}
    does all of the actual serialization work.  They are just meant to exercise
    a few codepaths to make sure we are calling into xmlrpclib correctly.

    @ivar flagName: A C{str} giving the name of the flag which must be passed to
        L{XMLRPC} to allow the tests to pass.  Subclasses should set this.

    @ivar value: A value which the specified flag will allow the serialization
        of.  Subclasses should set this.
    c           
      óf  — | j         di}t          j        dt          j        t          di |¤Ž¦  «        d¬¦  «        | _        |                      | j        j        ¦  «         | j         	                    ¦   «         j
        | _
        t          j        t          d| j
        fz  ¦  «        fi |¤Ž| _        dS )zO
        Create a new XML-RPC server with C{allowNone} set to C{True}.
        Tr   rÑ   rÒ   rá   Nr&   )ÚflagNamer   rÔ   r   rÕ   rU   rÖ   r'  rÛ   r×   rØ   r   rã   r   rå   )r+   rÆ   s     r-   r;   zSerializationConfigMixin.setUp~  s¬   € ð ”- Ð&ˆÝÔ"Ø�vŒ{�4˜>˜> &˜>˜>Ñ*Ô*°kð
ñ 
ô 
ˆŒð 	�Š˜œÔ,Ñ-Ô-Ð-Ø”F—N’NÑ$Ô$Ô)ˆŒ	Ý”\ÝÐ0°D´I°<Ñ?Ñ@Ô@ð
ð 
ØDJð
ð 
ˆŒ
ˆ
ˆ
r/   c                 ó†   — | j                              d| j        ¦  «        }|                     | j        | j        ¦  «         |S )zY
        C{self.value} can be round-tripped over an XMLRPC method call/response.
        r   ©rå   rñ   r  rò   r?   rt  s     r-   Útest_roundtripValuez,SerializationConfigMixin.test_roundtripValueŒ  s;   € ð ŒJ×!Ò! '¨4¬:Ñ6Ô6ˆØ	�Š�dÔ&¨¬
Ñ3Ô3Ð3Øˆr/   c                 óŽ   — | j                              dd| j        i¦  «        }|                     | j        d| j        i¦  «         |S )zz
        A C{dict} which contains C{self.value} can be round-tripped over an
        XMLRPC method call/response.
        r   r]   r�  rt  s     r-   Útest_roundtripNestedValuez2SerializationConfigMixin.test_roundtripNestedValue”  sE   € ð
 ŒJ×!Ò! '¨C°´Ð+<Ñ=Ô=ˆØ	�Š�dÔ&¨¨d¬jÐ(9Ñ:Ô:Ð:Øˆr/   N)r0   r1   r2   rM   r;   r‚  r„  r&   r/   r-   r}  r}  n  sK   € € € € € ðð ð
ð 
ð 
ðð ð ðð ð ð ð r/   r}  c                   ó   — e Zd ZdZdZdZdS )ÚXMLRPCAllowNoneTestszF
    Tests for passing L{None} when the C{allowNone} flag is set.
    Ú	allowNoneN)r0   r1   r2   rM   r  r  r&   r/   r-   r†  r†  ž  s$   € € € € € ðð ð €HØ€E€E€Er/   r†  c                   ó@   — e Zd ZdZdZ ej        dddddd¦  «        Zd	S )
ÚXMLRPCUseDateTimeTestszd
    Tests for passing a C{datetime.datetime} instance when the C{useDateTime}
    flag is set.
    ÚuseDateTimeiÐ  rv   é   ré   é-   é;   N)r0   r1   r2   rM   r  Údatetimer  r&   r/   r-   r‰  r‰  §  s;   € € € € € ðð ð
 €HØˆHÔ˜d B¨¨A¨r°2Ñ6Ô6€E€E€Er/   r‰  c                   ó8   — e Zd ZdZdZdZd„ Zd„ Zd„ Zd„ Z	d„ Z
d	S )
ÚXMLRPCAuthenticatedTestsz]
    Test with authenticated proxy. We run this with the same input/output as
    above.
    s   usernames   asecretc                 óÎ   — t          j        dt          j        t	          ¦   «         ¦  «        d¬¦  «        | _        | j                             ¦   «         j        | _        g | _        d S rÐ   )	r   rÔ   r   rÕ   rª   rÖ   r×   rØ   rÙ   rK   s    r-   r;   zXMLRPCAuthenticatedTests.setUpº  sU   € ÝÔ"Ø�vŒ{�>Ñ+Ô+Ñ,Ô,¸ð
ñ 
ô 
ˆŒð ”F—N’NÑ$Ô$Ô)ˆŒ	ØˆŒˆˆr/   c                 ó"  — dt          | j        ¦  «        t          | j        ¦  «        | j        fz  }t	          j        t          |¦  «        ¦  «        }|                     d¦  «        }|                     | j	        | j        | j        g¦  «         |S )Nzhttp://%s:%s@127.0.0.1:%d/Úauthinfo)
r   ÚuserÚpasswordrØ   r   rã   r   rñ   rò   r?   )r+   ÚurlrÖ   rø   s       r-   Útest_authInfoInURLz+XMLRPCAuthenticatedTests.test_authInfoInURLÁ  s   € Ø*Ý˜œÑ#Ô#Ý˜œÑ'Ô'ØŒIð.
ñ 
ˆõ
 ŒL� sÑ+Ô+Ñ,Ô,ˆØ�LŠL˜Ñ$Ô$ˆØ	�Š�dÔ&¨¬°D´MÐ(BÑCÔCÐCØˆr/   c                 óê   — t          j        t          d| j        fz  ¦  «        | j        | j        ¦  «        }|                     d¦  «        }|                     | j        | j        | j        g¦  «         |S )Nrá   r“  ©	r   rã   r   rØ   r”  r•  rñ   rò   r?   ©r+   rÖ   rø   s      r-   Útest_explicitAuthInfoz.XMLRPCAuthenticatedTests.test_explicitAuthInfoÌ  sj   € ÝŒLÝÐ0°D´I°<Ñ?Ñ@Ô@ØŒIØŒMñ
ô 
ˆð
 �LŠL˜Ñ$Ô$ˆØ	�Š�dÔ&¨¬°D´MÐ(BÑCÔCÐCØˆr/   c                 óê   — | j         dz  }t          j        t          d| j        fz  ¦  «        | j        |¦  «        }|                     d¦  «        }|                     | j        | j        |g¦  «         |S )zÔ
        C{QueryProtocol} uses the C{base64.b64encode} function to encode user
        name and password in the I{Authorization} header, so that it doesn't
        embed new lines when using long inputs.
        é(   rá   r“  )	r•  r   rã   r   rØ   r”  rñ   rò   r?   )r+   ÚlongPasswordrÖ   rø   s       r-   Útest_longPasswordz*XMLRPCAuthenticatedTests.test_longPasswordÖ  st   € ð ”} rÑ)ˆÝŒLÝÐ0°D´I°<Ñ?Ñ@Ô@ØŒIØñ
ô 
ˆð
 �LŠL˜Ñ$Ô$ˆØ	�Š�dÔ&¨¬°LÐ(AÑBÔBÐBØˆr/   c                 óê   — t          j        t          d| j        fz  ¦  «        | j        | j        ¦  «        }|                     d¦  «        }|                     | j        | j        | j        g¦  «         |S )Nzhttp://wrong:info@127.0.0.1:%d/r“  r™  rš  s      r-   Útest_explicitAuthInfoOverridez6XMLRPCAuthenticatedTests.test_explicitAuthInfoOverrideæ  sj   € ÝŒLÝÐ;¸t¼y¸lÑJÑKÔKØŒIØŒMñ
ô 
ˆð
 �LŠL˜Ñ$Ô$ˆØ	�Š�dÔ&¨¬°D´MÐ(BÑCÔCÐCØˆr/   N)r0   r1   r2   rM   r”  r•  r;   r—  r›  rŸ  r¡  r&   r/   r-   r�  r�  ±  su   € € € € € ðð ð
 €DØ€Hðð ð ð	ð 	ð 	ðð ð ðð ð ð ð ð ð ð r/   r�  c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚXMLRPCIntrospectionTestsc                 óð   — t          ¦   «         }t          |¦  «         t          j        dt	          j        |¦  «        d¬¦  «        | _        | j                             ¦   «         j        | _        g | _	        d S rÐ   )
rU   r   r   rÔ   r   rÕ   rÖ   r×   rØ   rÙ   )r+   r   s     r-   r;   zXMLRPCIntrospectionTests.setUpò  s]   € Ý‘”ˆÝ˜Ñ Ô Ð ÝÔ" 1¥f¤k°&Ñ&9Ô&9À[ÐQÑQÔQˆŒØ”F—N’NÑ$Ô$Ô)ˆŒ	ØˆŒˆˆr/   c                 óŠ   ‡ — ˆ fd„}‰                       ¦   «                              d¦  «        }|                     |¦  «         |S )Nc                 ó`   •— |                       ¦   «          ‰                     | g d¢¦  «         d S )N)rç   rí   r   r  r  rë   r¢   rq   r  rì   rƒ   rv  úsystem.methodHelpúsystem.methodSignaturer   )Úsortr?   )Úmethsr+   s    €r-   Ú	cbMethodsz<XMLRPCIntrospectionTests.test_listMethods.<locals>.cbMethodsú  sD   ø€ Ø�JŠJ‰LŒLˆLØ×ÒØðð ð ñô ð ð ð r/   rv  r  )r+   r«  rø   s   `  r-   r{  z)XMLRPCIntrospectionTests.test_listMethodsù  sQ   ø€ ð	ð 	ð 	ð 	ð 	ð. �JŠJ‰LŒL×#Ò#Ð$8Ñ9Ô9ˆØ	�Š�iÑ Ô Ð Øˆr/   c                 óú   — g d¢}g }|D ]]\  }}|                       ¦   «                              d|¦  «        }|                     | j        |¦  «         |                     |¦  «         Œ^t          j        |d¬¦  «        S )N))r   rk   )rq   r#   )rë   r�   r§  Trî   rð   ©r+   ÚinputOutputsrõ   rö   Úexpectedrø   s         r-   Útest_methodHelpz(XMLRPCIntrospectionTests.test_methodHelp  s‰   € ð
ð 
ð 
ˆð ˆØ*ð 	ð 	‰NˆD�(Ø—
’
‘”×'Ò'Ð(;¸TÑBÔBˆAØ�MŠM˜$Ô*¨HÑ5Ô5Ð5Ø�IŠI�a‰LŒLˆLˆLÝÔ! "°tÐ<Ñ<Ô<Ð<r/   c                 ó  — ddg d¢g d¢gfdg d¢gfg}g }|D ]]\  }}|                       ¦   «                              d|¦  «        }|                     | j        |¦  «         |                     |¦  «         Œ^t          j        |d¬	¦  «        S )
N)r   r#   rç   r`   rb   rì   rh   r¨  Trî   rð   r­  s         r-   Útest_methodSignaturez-XMLRPCIntrospectionTests.test_methodSignature#  s¯   € àØÐ*Ð*Ð*Ð,JÐ,JÐ,JÐKÐLØÐ0Ð0Ð0Ð1Ð2ð
ˆð ˆØ*ð 	ð 	‰NˆD�(Ø—
’
‘”×'Ò'Ð(@À$ÑGÔGˆAØ�MŠM˜$Ô*¨HÑ5Ô5Ð5Ø�IŠI�a‰LŒLˆLˆLÝÔ! "°tÐ<Ñ<Ô<Ð<r/   N)r0   r1   r2   r;   r{  r°  r²  r&   r/   r-   r£  r£  ñ  sP   € € € € € ðð ð ðð ð ð8=ð =ð =ð=ð =ð =ð =ð =r/   r£  c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚXMLRPCClientErrorHandlingTestsz3
    Test error handling on the xmlrpc client.
    c                 ó¸   — t          j        dd¦  «        | _        d| j        _        t	          j        dt          j        | j        ¦  «        d¬¦  «        | _        d S )Ns*   This text is not a valid XML-RPC response.s
   text/plainTr   rÑ   rÒ   )	r   ÚDatar:   ÚisLeafr   rÔ   r   rÕ   rØ   rK   s    r-   r;   z$XMLRPCClientErrorHandlingTests.setUp7  sV   € ÝœØ9¸=ñ
ô 
ˆŒð  $ˆŒÔåÔ%Ø�vŒ{˜4œ=Ñ)Ô)°[ð
ñ 
ô 
ˆŒ	ˆ	ˆ	r/   c                 ó4   — | j                              ¦   «         S r*   )rØ   rÛ   rK   s    r-   rÜ   z'XMLRPCClientErrorHandlingTests.tearDownA  s   € ØŒy×&Ò&Ñ(Ô(Ð(r/   c                 óà   — t          j        t          d| j                             ¦   «         j        fz  ¦  «        ¦  «        }|                      |                     d¦  «        t          ¦  «        S )zj
        Test that calling the xmlrpc client on a static http server raises
        an exception.
        rá   r^  )r   rã   r   rØ   r×   r(  rñ   Ú
ValueError)r+   rå   s     r-   Útest_erroneousResponsez5XMLRPCClientErrorHandlingTests.test_erroneousResponseD  s`   € õ
 ”ÝÐ0°D´I×4EÒ4EÑ4GÔ4GÔ4LÐ3NÑNÑOÔOñ
ô 
ˆð ×!Ò! %×"2Ò"2°<Ñ"@Ô"@Å*ÑMÔMÐMr/   N)r0   r1   r2   rM   r;   rÜ   r»  r&   r/   r-   r´  r´  2  sP   € € € € € ðð ð
ð 
ð 
ð)ð )ð )ðNð Nð Nð Nð Nr/   r´  c                   ó0   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚQueryFactoryParseResponseTestsz>
    Test the behaviour of L{QueryFactory.parseResponse}.
    c           	      óÆ   — t          d d dd d dd¬¦  «        | _        t          j        d¦  «        | _        d| _        t          j        t          ¦   «         ¦  «        | _	        d S )Nr$   Fr&   )ÚpathÚhostr6   r”  r•  r‡  rÅ   )r#   zinvalid xml)
r   rß   r   r7   ÚgoodContentsÚbadContentsr   rJ   r   ÚreasonrK   s    r-   r;   z$QueryFactoryParseResponseTests.setUpT  si   € õ )ØØØØØØØð
ñ 
ô 
ˆÔõ &œO¨EÑ2Ô2ˆÔà(ˆÔõ ”o¥nÑ&6Ô&6Ñ7Ô7ˆŒˆˆr/   c                 ó¦   — | j         j        }|                     | j         j        | j        ¦  «         | j                              | j        ¦  «         |S )z�
        We can safely call L{QueryFactory.clientConnectionLost} as a callback
        of L{QueryFactory.parseResponse}.
        )rß   Údeferredrò   ÚclientConnectionLostrÃ  ÚparseResponserÁ  rt  s     r-   Ú test_parseResponseCallbackSafetyz?QueryFactoryParseResponseTests.test_parseResponseCallbackSafetyh  sL   € ð
 ÔÔ&ˆð 	
�Š�dÔ'Ô<¸d¼kÑJÔJÐJØÔ×'Ò'¨Ô(9Ñ:Ô:Ð:Øˆr/   c                 ó¦   — | j         j        }|                     | j         j        | j        ¦  «         | j                              | j        ¦  «         |S )z�
        We can safely call L{QueryFactory.clientConnectionLost} as an errback
        of L{QueryFactory.parseResponse}.
        )rß   rÅ  Ú
addErrbackrÆ  rÃ  rÇ  rÂ  rt  s     r-   Útest_parseResponseErrbackSafetyz>QueryFactoryParseResponseTests.test_parseResponseErrbackSafetyu  sL   € ð
 ÔÔ&ˆð 	
�Š�TÔ&Ô;¸T¼[ÑIÔIÐIØÔ×'Ò'¨Ô(8Ñ9Ô9Ð9Øˆr/   c                 óž   — | j         j        }|                     | j         j        | j        ¦  «         | j                              dd¦  «         |S )z}
        We can safely call L{QueryFactory.clientConnectionLost} as an errback
        of L{QueryFactory.badStatus}.
        ÚstatusÚmessage)rß   rÅ  rÊ  rÆ  rÃ  Ú	badStatusrt  s     r-   Útest_badStatusErrbackSafetyz:QueryFactoryParseResponseTests.test_badStatusErrbackSafety‚  sK   € ð
 ÔÔ&ˆð 	
�Š�TÔ&Ô;¸T¼[ÑIÔIÐIØÔ×#Ò# H¨iÑ8Ô8Ð8Øˆr/   c                 óˆ   — d}| j         j        }| j                              |¦  «         |                      |t          ¦  «        S )z¥
        Some server can send a response without any data:
        L{QueryFactory.parseResponse} should catch the error and call the
        result errback.
        zM
<methodResponse>
 <params>
  <param>
  </param>
 </params>
</methodResponse>)rß   rÅ  rÇ  r(  Ú
IndexError)r+   r8   rø   s      r-   Útest_parseResponseWithoutDataz<QueryFactoryParseResponseTests.test_parseResponseWithoutData�  sC   € ðˆð ÔÔ&ˆØÔ×'Ò'¨Ñ0Ô0Ð0Ø×!Ò! !¥ZÑ0Ô0Ð0r/   N)	r0   r1   r2   rM   r;   rÈ  rË  rÐ  rÓ  r&   r/   r-   r½  r½  O  si   € € € € € ðð ð8ð 8ð 8ð(ð ð ðð ð ðð ð ð1ð 1ð 1ð 1ð 1r/   r½  c                   ó   — e Zd Zd„ Zd„ ZdS )ÚXMLRPCWithRequestTestsc                 ó,   — t          ¦   «         | _        d S r*   )rU   r:   rK   s    r-   r;   zXMLRPCWithRequestTests.setUp¢  s   € Ý™œˆŒˆˆr/   c                 ó  ‡ — t          d¦  «        }d|_        t          t          j        dd¦  «        ¦  «        |_        ˆ fd„}|                     ¦   «                              ||¦  «        }‰ j         	                    |¦  «         |S )z¯
        When an XML-RPC method is called and the implementation is
        decorated with L{withRequest}, the request object is passed as
        the first argument.
        z/RPC2r$   )r‡   r   c                 ór   •— t          j        |j        d         ¦  «        }‰                     |d¦  «         d S )Nr   ))zPOST fooN)r   rB   r@   r?   )Únr5   Údatar+   s      €r-   Úvalidz6XMLRPCWithRequestTests.test_withRequest.<locals>.valid¯  s6   ø€ Ý”? 7¤?°1Ô#5Ñ6Ô6ˆDØ×Ò˜TÐ#8Ñ9Ô9Ð9Ð9Ð9r/   )
r   r6   r   r   r7   r8   ÚnotifyFinishrò   r:   Úrender_POST)r+   r5   rÛ  rø   s   `   r-   Útest_withRequestz'XMLRPCWithRequestTests.test_withRequest¥  s‹   ø€ õ ˜wÑ'Ô'ˆØˆŒÝ"¥9¤?°8¸]Ñ#KÔ#KÑLÔLˆŒð	:ð 	:ð 	:ð 	:ð 	:ð × Ò Ñ"Ô"×.Ò.¨u°gÑ>Ô>ˆØŒ×!Ò! 'Ñ*Ô*Ð*Øˆr/   N)r0   r1   r2   r;   rÞ  r&   r/   r-   rÕ  rÕ  ¡  s2   € € € € € ðð ð ðð ð ð ð r/   rÕ  )FrM   rŽ  Úior   r   r   r   Útwisted.internetr   r   Útwisted.internet.errorr   Útwisted.internet.testingr	   r
   Útwisted.loggerr   r   r   r   Útwisted.pythonr   Útwisted.python.compatr   r   Útwisted.python.reflectr   Útwisted.trialÚtwisted.webr   r   r   r   r   Útwisted.web.test.test_webr   Útwisted.web.xmlrpcr   r   r   r   r   r   rf  ÚImportErrorÚTestCaser!   rL  rO   rº  rS   rU   r    r¦   rª   r·   r³   rÃ   rÉ   rÎ   rh  rl  r}  r†  r‰  r�  r£  r´  r½  rÕ  r&   r/   r-   ú<module>rí     s´  ðð
ð ð
 €€€Ø  Ð  Ð  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð à +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø HÐ HÐ HÐ HÐ HÐ HÐ HÐ Hðð ð ð ð ð ð ð ð ð ð ð ð #Ð "Ð "Ð "Ð "Ð "Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø .Ð .Ð .Ð .Ð .Ð .Ø "Ð "Ð "Ð "Ð "Ð "Ø <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðØ€KÐ&Ñ'Ô'Ð'ð €G€Gøð ð ð ð Ø€G€G€Gðøøøð-3ð -3ð -3ð -3ð -3�xÔ(ñ -3ô -3ð -3ð`	ð 	ð 	ð 	ð 	�|ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	�Zñ 	ô 	ð 	ð\ð \ð \ð \ð \ˆ6ñ \ô \ð \ð~
ð 
ð 
ð 
ð 
˜&ñ 
ô 
ð 
ð*
ð 
ð 
ð 
ð 
˜ñ 
ô 
ð 
ðBð Bð Bð Bð B�Tñ Bô Bð Bð$8ð 8ð 8ð 8ð 8˜Ô,ñ 8ô 8ð 8ð*
<ð 
<ð 
<ð 
<ð 
<�vÔ*ñ 
<ô 
<ð 
<ð#ð #ð #ð #ð #˜VÔ0ñ #ô #ð #ðA8ð A8ð A8ð A8ð A8�(Ô#ñ A8ô A8ð A8ðHð ð ð ð  ;ñ ô ð ð4ð 4ð 4ð 4ð 4 xÔ'8ñ 4ô 4ð 4ðn-ð -ð -ð -ð -ñ -ô -ð -ð`ð ð ð ð Ð3°XÔ5Fñ ô ð ð7ð 7ð 7ð 7ð 7Ð5°xÔ7Hñ 7ô 7ð 7ð=ð =ð =ð =ð =˜{ñ =ô =ð =ð@>=ð >=ð >=ð >=ð >=˜{ñ >=ô >=ð >=ðBNð Nð Nð Nð N XÔ%6ñ Nô Nð Nð:O1ð O1ð O1ð O1ð O1 XÔ%6ñ O1ô O1ð O1ðdð ð ð ð ˜XÔ.ñ ô ð ð ð s   Á6B ÂBÂB