ó
    ×›‘hhw  ã                   óÌ  • S r SSKrSSKJrJr  SSKJr  SSKJrJ	r	  SSK
Jr  SSKJrJr  SSKJrJrJrJr  SS	KJr  SS
KJrJr  SSKJr  SSKJr  SSKJrJrJrJ r J!r!  SSK"J#r#  SSK$J%r%J&r&J'r'J(r(J)r)J*r*   \" S5        Sr+ " S S\RZ                  5      r. " S S\/5      r0 " S S\15      r2 " S S\%5      r3 " S S\%5      r4 " S S\%5      r5 " S S \35      r6 " S! S"\!Rn                  5      r8 " S# S$\!RL                  5      r9 " S% S&\!RL                  5      r: " S' S(\RZ                  5      r; " S) S*\;5      r< " S+ S,\RZ                  5      r= " S- S.5      r> " S/ S0\>\RZ                  5      r? " S1 S2\>\RZ                  5      r@ " S3 S4\;5      rA " S5 S6\;5      rB " S7 S8\RZ                  5      rC " S9 S:\RZ                  5      rD " S; S<\RZ                  5      rEg! \, a    Sr+ GNbf = f)=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                   ó*   • \ rS rSrSrS rS rS rSrg)ÚAsyncXMLRPCTestsé.   z-
Tests for L{XMLRPC}'s support of Deferreds.
c                 ó,  ^• [        S/5      U l        SU R                  l        [        [        S[
        R                  " S5      4-  5      U R                  l        [        R                  " 5       =mU l
         " U4S jS[        5      nU" 5       U l        g )NÚ ÚPOSTÚasync© c                   ó"   >• \ rS rSrU 4S jrSrg)Ú-AsyncXMLRPCTests.setUp.<locals>.AsyncResourceé<   c                 ó   >• T$ ©Nr'   )ÚselfÚresults    €Ú`C:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/web/test/test_xmlrpc.pyÚxmlrpc_asyncÚ:AsyncXMLRPCTests.setUp.<locals>.AsyncResource.xmlrpc_async=   s   ø€ Ø�ó    r'   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r0   Ú__static_attributes__©r.   s   €r/   ÚAsyncResourcer)   <   s   ø† ÷ð r2   r9   )r   ÚrequestÚmethodr   r   r   ÚdumpsÚcontentr   ÚDeferredr.   r   Úresource)r-   r9   r.   s     @r/   ÚsetUpÚAsyncXMLRPCTests.setUp3   sp   ø€ Ü# R DÓ)ˆŒØ$ˆ�‰ÔÜ'Ü˜w¬	¯ª¸Ó(;Ð<Ñ<ó 
ˆ�‰Ôô  %Ÿ~š~Ó/Ð/ˆ�”÷	œFô 	ñ &›ˆ�r2   c                 ó²  • U R                   R                  U R                  5        U R                  U R                  R                  / 5        U R
                  R                  S5        [        R                  " SR                  U R                  R                  5      5      nU R                  US5        U R                  U R                  R                  S5        g)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.   r2   )r8   Né   N)r?   Úrenderr:   ÚassertEqualÚwrittenr.   Úcallbackr   ÚloadsÚjoinÚfinished)r-   Úresps     r/   Útest_deferredResponseÚ&AsyncXMLRPCTests.test_deferredResponseB   s’   € ð
 	�‰×Ñ˜TŸ\™\Ô*Ø×Ñ˜Ÿ™×-Ñ-¨rÔ2à�‰×Ñ˜XÔ&ä�Š˜sŸx™x¨¯©×(<Ñ(<Ó=Ó>ˆØ×Ñ˜Ð2Ô3Ø×Ñ˜Ÿ™×.Ñ.°Õ2r2   c                 óŒ  • U R                   R                  U R                  5        U R                  R                  [        R
                  " [        S5      5      5        U R                  R                  S5        U R                  U R                  R                  / 5        U R                  U R                  R                  S5        g)zØ
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?   rD   r:   ÚprocessingFailedr   ÚFailurer   r.   rG   rE   rF   rJ   ©r-   s    r/   Ú test_interruptedDeferredResponseÚ1AsyncXMLRPCTests.test_interruptedDeferredResponseP   s€   € ð 	�‰×Ñ˜TŸ\™\Ô*Ø�‰×%Ñ%¤g§o¢o´nÀ[Ó6QÓ&RÔSØ�‰×Ñ˜XÔ&Ø×Ñ˜Ÿ™×-Ñ-¨rÔ2Ø×Ñ˜Ÿ™×.Ñ.°Õ2r2   )r:   r?   r.   N)	r3   r4   r5   r6   Ú__doc__r@   rL   rS   r7   r'   r2   r/   r!   r!   .   s   † ñò(ò3õ3r2   r!   c                   ó   • \ rS rSrSrg)ÚTestRuntimeErroré^   r'   N©r3   r4   r5   r6   r7   r'   r2   r/   rW   rW   ^   ó   † Úr2   rW   c                   ó   • \ rS rSrSrg)ÚTestValueErroréb   r'   NrY   r'   r2   r/   r\   r\   b   rZ   r2   r\   c                   ó´   • \ rS rSrSrSrSrS rS r/ SQ/ SQ/\l	        S	 r
/ S
Q/\
l	        S rS rS rS rS rS rS rS rS\l        \S 5       rS rSrg)ÚTestéf   éš  é   é*   c                 ó   • U$ r,   r'   )r-   Úargs     r/   Úxmlrpc_echoÚTest.xmlrpc_echon   s   € Øˆ
r2   c                 ó
   • X-   $ )z 
This function add two numbers.
r'   )r-   ÚaÚbs      r/   Ú
xmlrpc_addÚTest.xmlrpc_addr   s   € ð ‰uˆr2   ©Úintrn   rn   ©Údoublerp   rp   c                 ó   • X/$ )z3
This function puts the two arguments in an array.
r'   )r-   ÚstringÚnums      r/   Úxmlrpc_pairÚTest.xmlrpc_pair~   s   € ð ˆ}Ðr2   ©Úarrayrr   rn   c                 ó.   • [         R                  " U5      $ )úHelp for defer.)r   Úsucceed©r-   Úxs     r/   Úxmlrpc_deferÚTest.xmlrpc_defer‡   s   € ä�}Š}˜QÓÐr2   c                 ó>   • [         R                  " [        5       5      $ r,   )r   Úfailr\   rR   s    r/   Úxmlrpc_deferFailÚTest.xmlrpc_deferFail‹   s   € Ü�zŠzœ.Ó*Ó+Ð+r2   c                 ó   • [         er,   )rW   rR   s    r/   Úxmlrpc_failÚTest.xmlrpc_fail�   s   € ÜÐr2   c                 ó0   • [         R                  " SS5      $ )Né   Úhello©r   ÚFaultrR   s    r/   Úxmlrpc_faultÚTest.xmlrpc_fault’   s   € Ü�|Š|˜B Ó(Ð(r2   c                 óX   • [         R                  " [        R                  " SS5      5      $ )Né   Úhi)r   r€   r   rŠ   rR   s    r/   Úxmlrpc_deferFaultÚTest.xmlrpc_deferFault•   s   € Ü�zŠzœ&Ÿ,š, r¨4Ó0Ó1Ð1r2   c                 óB   • SnX!:w  a  [         R                  " SS5      $ U$ )z(
Used to test that we can pass Unicode.
õ   â˜ƒé   zPayload not unicode snowmanr‰   )r-   ÚpayloadÚsnowmans      r/   Úxmlrpc_snowmanÚTest.xmlrpc_snowman˜   s&   € ð ˆØÓÜ—<’< Ð$AÓBÐBØˆr2   c                 ó   • SSS/ /SS.$ )Nrj   Úcr‡   Úfoo©ri   ÚDr'   rR   s    r/   Úxmlrpc_complexÚTest.xmlrpc_complex¡   s   € Ø˜3  BÐ'¨eÑ4Ð4r2   c                 ó
   • X   $ r,   r'   )r-   ÚmapÚkeys      r/   Úxmlrpc_dictÚTest.xmlrpc_dict¤   s	   € Ø‰xˆr2   úHelp for dict.c                 ó&   • UR                   S-   U-   $ )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.
Ú )r;   )r-   r:   Úothers      r/   Úxmlrpc_withRequestÚTest.xmlrpc_withRequest©   s$   € ð �N‰Nð ñð ñ	ð	
r2   c                 óÐ   •  [         R                  " X5      $ ! [        R                   a9    UR	                  S5      (       a!  [        R
                  " U R                  S5      ee f = f)NÚSESSIONzSession non-existent/expired.)r   ÚlookupProcedurer   ÚNoSuchFunctionÚ
startswithrŠ   ÚSESSION_EXPIRED)r-   ÚprocedurePaths     r/   r­   ÚTest.lookupProcedure¹   s`   € ð	Ü×)Ò)¨$Ó>Ð>øÜ×$Ñ$ó 	Ø×'Ñ'¨	×2Ñ2Ü—l’lØ×(Ñ(Ð*Ióð ð ð	ús
   ‚ ˜AA%r'   N)r3   r4   r5   r6   ÚFAILUREÚ	NOT_FOUNDr°   rf   rk   Ú	signaturert   r}   r�   r„   r‹   r�   r—   rž   r£   Úhelpr   r©   r­   r7   r'   r2   r/   r_   r_   f   sŠ   † ð €GØ€IØ€Oòòò 	Ú&ð€JÔòò 8Ð8€KÔò ò,òò)ò2òò5òð (€KÔàñ
ó ð
õ	r2   r_   c                   ó$   • \ rS rSrSrS rS rSrg)ÚTestLookupProcedureéÅ   zq
This is a resource which customizes procedure lookup to be used by the tests
of support for this customization.
c                 ó   • U$ r,   r'   r{   s     r/   ÚechoÚTestLookupProcedure.echoË   s   € Øˆr2   c                 óp   • US:X  a  U R                   $ [        R                  " U R                  SU S35      e)z[
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­   Ú#TestLookupProcedure.lookupProcedureÎ   s;   € ð
 ˜FÓ"Ø—9‘9ÐÜ×#Ò#Ø�N‰N˜j¨¨°zÐBó
ð 	
r2   r'   N)r3   r4   r5   r6   rU   r»   r­   r7   r'   r2   r/   r¸   r¸   Å   s   † ñò
õ	
r2   r¸   c                   ó   • \ rS rSrSrS rSrg)ÚTestListProcedureséÚ   zv
This is a resource which customizes procedure enumeration to be used by the
tests of support for this customization.
c                 ó   • S/$ )zG
Return a list of a single method this resource will claim to support.
r›   r'   rR   s    r/   ÚlistProceduresÚ!TestListProcedures.listProceduresà   s   € ð ˆwˆr2   r'   N)r3   r4   r5   r6   rU   rÄ   r7   r'   r2   r/   rÁ   rÁ   Ú   s   † ñõ
r2   rÁ   c                   ó*   • \ rS rSrSrS rS rS rSrg)ÚTestAuthHeaderéç   zI
This is used to get the header info so that we can test
authentication.
c                 ó<   • [         R                  U 5        S U l        g r,   )r_   Ú__init__r:   rR   s    r/   rÊ   ÚTestAuthHeader.__init__í   s   € Ü�‰�dÔØˆ�r2   c                 ó8   • Xl         [        R                  X5      $ r,   )r:   r_   rD   )r-   r:   s     r/   rD   ÚTestAuthHeader.renderñ   s   € ØŒÜ�{‰{˜4Ó)Ð)r2   c                 ój   • U R                   R                  5       U R                   R                  5       4$ r,   )r:   ÚgetUserÚgetPasswordrR   s    r/   Úxmlrpc_authinfoÚTestAuthHeader.xmlrpc_authinfoõ   s'   € Ø�|‰|×#Ñ#Ó% t§|¡|×'?Ñ'?Ó'AÐAÐAr2   )r:   N)	r3   r4   r5   r6   rU   rÊ   rD   rÑ   r7   r'   r2   r/   rÇ   rÇ   ç   s   † ñò
ò*õBr2   rÇ   c                   ó*   • \ rS rSrSrS rS rS rSrg)ÚTestQueryProtocoléù   zS
QueryProtocol for tests that saves headers received and sent,
inside the factory.
c                 óx   • U R                   U R                  l         [        R                  R	                  U 5        g r,   )Ú	transportÚfactoryr   ÚQueryProtocolÚconnectionMaderR   s    r/   rÚ   Ú TestQueryProtocol.connectionMadeÿ   s&   € Ø!%§¡ˆ�‰ÔÜ×Ñ×+Ñ+¨DÕ1r2   c                 óP   • X R                   R                  UR                  5       '   g r,   )rØ   ÚheadersÚlower©r-   r¢   Úvals      r/   ÚhandleHeaderÚTestQueryProtocol.handleHeader  s   € Ø,/�‰×Ñ˜SŸY™Y›[Ò)r2   c                 ó�   • X R                   R                  UR                  5       '   [        R                  R                  XU5        g)z1
Keep sent headers so we can inspect them later.
N)rØ   Úsent_headersrÞ   r   rÙ   Ú
sendHeaderrß   s      r/   rå   ÚTestQueryProtocol.sendHeader  s2   € ð 25�‰×!Ñ! #§)¡)£+Ñ.Ü×Ñ×'Ñ'¨°3Õ7r2   r'   N)	r3   r4   r5   r6   rU   rÚ   rá   rå   r7   r'   r2   r/   rÔ   rÔ   ù   s   † ñò
2ò0õ8r2   rÔ   c                   ó"   • \ rS rSrSr\rS rSrg)ÚTestQueryFactoryi  z=
QueryFactory using L{TestQueryProtocol} for saving headers.
c                 óh   • 0 U l         0 U l        [        R                  R                  " U /UQ70 UD6  g r,   )rÝ   rä   r   r   rÊ   )r-   ÚargsÚkwargss      r/   rÊ   ÚTestQueryFactory.__init__  s/   € ØˆŒØˆÔÜ×Ñ×$Ò$ TÐ;¨DÒ;°FÓ;r2   )rÝ   rä   N)	r3   r4   r5   r6   rU   rÔ   ÚprotocolrÊ   r7   r'   r2   r/   rè   rè     s   † ñð !€Hõ<r2   rè   c                   ó   • \ rS rSrSrS rSrg)ÚTestQueryFactoryCanceli  zo
QueryFactory that saves a reference to the
L{twisted.internet.interfaces.IConnector} to test connection lost.
c                 ó   • Xl         g r,   ©Ú	connector)r-   rò   s     r/   ÚstartedConnectingÚ(TestQueryFactoryCancel.startedConnecting!  s   € Ø"�r2   rñ   N)r3   r4   r5   r6   rU   ró   r7   r'   r2   r/   rï   rï     s   † ñõ
#r2   rï   c                   óŠ   • \ rS rSrS rS rS rSS jrS rS r	S	 r
S
 rS rS rS rS rS rS r\" \S5      S 5       rSrg)ÚXMLRPCTestsi%  c                 óÒ   • [         R                  " S[        R                  " [	        5       5      SS9U l        U R
                  R                  5       R                  U l        / U l        g ©Nr   ú	127.0.0.1©Ú	interface)	r   Ú	listenTCPr   ÚSiter_   ÚpÚgetHostÚportÚ	factoriesrR   s    r/   r@   ÚXMLRPCTests.setUp&  sB   € Ü×"Ò" 1¤f§k¢k´$³&Ó&9À[ÑQˆŒØ—F‘F—N‘NÓ$×)Ñ)ˆŒ	Øˆ�r2   c                 óD   • / U l         U R                  R                  5       $ r,   )r  rþ   ÚstopListeningrR   s    r/   ÚtearDownÚXMLRPCTests.tearDown+  s   € ØˆŒØ�v‰v×#Ñ#Ó%Ð%r2   c                 óR   • [        U0 UD6nU R                  R                  U5        U$ )z_
Specific queryFactory for proxy that uses our custom
L{TestQueryFactory}, and save factories.
)rè   r  Úappend)r-   rê   rë   rØ   s       r/   ÚqueryFactoryÚXMLRPCTests.queryFactory/  s*   € ô
 # DÐ3¨FÑ3ˆØ�‰×Ñ˜gÔ&Øˆr2   Nc                 ó–   • [         R                  " [        SU R                  -  5      5      nUc  U R                  Ul        U$ Xl        U$ )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/   ÚproxyÚXMLRPCTests.proxy8  sF   € ô �LŠLœÐ'=ÀÇ	Á	Ñ'IÓJÓKˆØ‰?Ø!×.Ñ.ˆAŒNð ˆð %ŒNØˆr2   c                 ó   • SSSSS0S4S4SSSS/4SS	S
SSS/ /SS.4/n/ nU HT  u  p4nU R                  5       R                  " U/UQ76 nUR                  U R                  U5        UR	                  U5        MV     [
        R                  " USS9$ )N)Úadd)é   é   é   )r   )ri   ri   Údictri   rC   Úpair)ri   rC   )r–   r“   r“   Úcomplexr'   rj   rš   r‡   r›   rœ   T©ÚfireOnOneErrback©r  Ú
callRemoteÚaddCallbackrE   r  r   ÚDeferredList)r-   ÚinputOutputÚdlÚmethrê   ÚoutpÚds          r/   Útest_resultsÚXMLRPCTests.test_resultsE  s¯   € àØ"Ø�s˜A�h �_ aÐ(Ø�X  Q˜xÐ(Ø-Ø˜ 3¨¨R°Ð"4¸5ÑAÐBð
ˆð ˆÛ +ÑˆD˜Ø—
‘
“×'Ò'¨Ð4¨tÒ4ˆAØ�M‰M˜$×*Ñ*¨DÔ1Ø�I‰I�aŽLñ !,ô ×!Ò! "°tÑ<Ð<r2   c                 ó¤   ^ • T R                  5       R                  SS5      nU 4S jnU 4S jnUR                  U5        UR                  U5        U$ )zk
Verify that headers sent from the client side and the ones we
get back from the server side are correct.

r–   r“   c                 ó¶   >• TR                  TR                  S   R                  S   S5        TR                  TR                  S   R                  S   S5        g )Nr   ó   content-typeó   text/xml; charset=utf-8ó   content-lengths   129)rE   r  rÝ   )Úingr-   s    €r/   Úcheck_server_headersÚ6XMLRPCTests.test_headers.<locals>.check_server_headers^  sR   ø€ Ø×ÑØ—‘˜qÑ!×)Ñ)¨/Ñ:Ð<Vôð ×Ñ˜TŸ^™^¨AÑ.×6Ñ6Ð7HÑIÈ6ÕRr2   c                 ó  >• TR                  TR                  S   R                  S   S5        TR                  TR                  S   R                  S   S5        TR                  TR                  S   R                  S   S5        g )Nr   s
   user-agents   Twisted/XMLRPClibr)  r*  r+  s   155)rE   r  rä   )Úignr-   s    €r/   Úcheck_client_headersÚ6XMLRPCTests.test_headers.<locals>.check_client_headersd  s}   ø€ Ø×ÑØ—‘˜qÑ!×.Ñ.¨}Ñ=Ð?Sôð ×ÑØ—‘˜qÑ!×.Ñ.¨Ñ?Ø*ôð ×Ñ˜TŸ^™^¨AÑ.×;Ñ;Ð<MÑNÐPVÕWr2   ©r  r  r  )r-   r$  r-  r1  s   `   r/   Útest_headersÚXMLRPCTests.test_headersV  sJ   ø€ ð �J‰J‹L×#Ñ# I¨xÓ8ˆõ	Sõ	Xð 	
�‰Ð*Ô+Ø	�‰Ð*Ô+Øˆr2   c                 óþ  ^ ^^• [        5       m[        T[        [        R                  S9/5      m[
        R                  " T5        T R                  U4S j5        / nS Hm  u  p#T R                  5       R                  U5      nT R                  U[        R                  5      nUR                  U4U 4S jj5        UR                  U5        Mo     [        R                   " USS9nUU 4S jnUR                  U5        U$ )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                  ó0   >• [         R                  " T 5      $ r,   ©r   ÚremoveObserver©Úfiltereds   €r/   Ú<lambda>Ú)XMLRPCTests.test_errors.<locals>.<lambda>~  ó   ø€ Ô 2× AÒ AÀ(Ô Kr2   ))ra   r€   )ra   Ú	deferFail)r‡   Úfault)rb   ÚnoSuchMethod)rŽ   Ú
deferFault)rc   ÚSESSION_TESTc                 ó<   >• TR                  U R                  U5      $ r,   )rE   Ú	faultCode)ÚexcÚcoder-   s     €r/   r>  r?  Š  s   ø€ °×1AÑ1AÀ#Ç-Á-ÐQUÔ1Vr2   Tr  c                 óÌ  >• TR                    H"  nTR                  UR                  S   S5        M$     TR                  S[	        T5      5        TS   S   R
                  nTS   S   R
                  n[        U[        5      (       a  TR                  U[        5        O,TR                  U[        5        TR                  U[        5        TR                  [        [        5        g )Nr)  r*  r  r   Úlog_failurerC   )r  rE   rÝ   ÚassertEqualsÚlenÚvalueÚ
isinstancer\   ÚassertIsInstancerW   ÚflushLoggedErrors)r0  rØ   Úf1Úf2ÚlogObserverr-   s       €€r/   ÚcbÚ#XMLRPCTests.test_errors.<locals>.cbŽ  s½   ø€ ØŸ>œ>�Ø× Ñ Ø—O‘O OÑ4Ð6Pöñ *ð ×Ñ˜a¤ [Ó!1Ô2Ø˜Q‘ Ñ.×4Ñ4ˆBØ˜Q‘ Ñ.×4Ñ4ˆBä˜"œn×-Ñ-Ø×%Ñ% bÔ*:Õ;à×%Ñ% bÔ*:Ô;Ø×%Ñ% b¬.Ô9à×"Ñ"Ô#3´^ÕDr2   )r	   r   r   r   Úcriticalr   ÚaddObserverÚ
addCleanupr  r  ÚassertFailurer   rŠ   r  r  r   r  )r-   r!  rI  Ú
methodNamer$  rU  r=  rT  s   `     @@r/   Útest_errorsÚXMLRPCTests.test_errorsr  sÑ   ú€ ô +Ó,ˆÜ'ØÔ1Ä(×BSÑBSÑTÐUó
ˆô 	×&Ò& xÔ0Ø�‰ÔKÔLØˆó!
ÑˆDð —
‘
“×'Ñ'¨
Ó3ˆAØ×"Ñ" 1¤f§l¡lÓ3ˆAØ�M‰M¨4ÖVÔWØ�I‰I�aŽLñ!
ô ×Ò˜r°DÑ9ˆö	Eð" 	
�‰�bÔØˆr2   c                 óx  ^• U4S jmU R                  T5      R                  SSS5      nU R                  TR                  R                  R
                  S5        UR                  5         U R                  TR                  R                  R
                  S5        U R                  U[        R                  5      nU$ )zj
A deferred from the Proxy can be cancelled, disconnecting
the L{twisted.internet.interfaces.IConnector}.
c                  ó<   >• [        U 0 UD6Tl        TR                  $ r,   )rï   Úf)rê   ÚkwrØ   s     €r/   rØ   Ú(XMLRPCTests.test_cancel.<locals>.factory¨  s   ø€ Ü.°Ð;¸Ñ;ˆGŒIØ—9‘9Ðr2   r  r  r  Údisconnected)r  r  ÚassertNotEqualr`  rò   ÚstateÚcancelrE   rZ  r   ÚCancelledError)r-   r$  rØ   s     @r/   Útest_cancelÚXMLRPCTests.test_cancel¢  s�   ø€ õ	ð �J‰J�wÓ×*Ñ*¨5°!°QÓ7ˆØ×Ñ˜GŸI™I×/Ñ/×5Ñ5°~ÔFØ	�‰Œ
Ø×Ñ˜Ÿ™×,Ñ,×2Ñ2°NÔCØ×Ñ˜q¤%×"6Ñ"6Ó7ˆØˆr2   c                 ó¼   ^ • [         R                  " [        5      nUR                  S[	        ST R
                  4-  5      5      nU 4S jnUR                  U5        U$ )z>
A classic GET on the xml server should return a NOT_ALLOWED.
s   GETr  c                 óZ   >• TR                  U R                  [        R                  5        g r,   )rE   rI  r   ÚNOT_ALLOWED)Úresponser-   s    €r/   ÚcheckResponseÚ0XMLRPCTests.test_errorGet.<locals>.checkResponseº  s   ø€ Ø×Ñ˜XŸ]™]¬D×,<Ñ,<Õ=r2   )r   ÚAgentr   r:   r   r   r  )r-   Úagentr$  rn  s   `   r/   Útest_errorGetÚXMLRPCTests.test_errorGet³  sL   ø€ ô —’œWÓ%ˆØ�M‰M˜&¤-Ð0FÈ$Ï)É)ÈÑ0UÓ"VÓWˆõ	>ð 	
�‰�mÔ$Øˆr2   c           	      ó2  ^ • [         R                  " [        5      nUR                  [	        ST R
                  4-  5      S[         R                  " [        S5      5      S9nUR                  [         R                  5        U 4S jnUR                  U5        U$ )z<
Test that an invalid XML input returns an L{xmlrpc.Fault}.
r  s   POSTs   foo)Úurir;   ÚbodyProducerc                 ód   >• TR                  [        R                  [        R                  U 5        g r,   )ÚassertRaisesr   rŠ   r   rH   )r.   r-   s    €r/   rU  Ú,XMLRPCTests.test_errorXMLContent.<locals>.cbÌ  s   ø€ Ø×ÑœfŸl™l¬I¯O©O¸VÕDr2   )
r   rp  r   r:   r   r   ÚFileBodyProducerr   r  ÚreadBody)r-   rq  r$  rU  s   `   r/   Útest_errorXMLContentÚ XMLRPCTests.test_errorXMLContentÀ  sz   ø€ ô —’œWÓ%ˆØ�M‰MÜÐ4¸¿	¹	°|ÑCÓDØÜ×0Ò0´¸³ÓAð ð 
ˆð
 	
�‰”f—o‘oÔ&õ	Eð 	
�‰�bÔØˆr2   c                 ó¨   • [         R                  " 5       nU R                  5       R                  SU5      nUR	                  U R
                  U5        U$ )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  rE   )r-   Úwhenr$  s      r/   Útest_datetimeRoundtripÚ"XMLRPCTests.test_datetimeRoundtripÒ  sC   € ô ×!Ò!Ó#ˆØ�J‰J‹L×#Ñ# F¨DÓ1ˆØ	�‰�d×&Ñ&¨Ô-Øˆr2   c                 óŠ  ^ ^^• [        5       m[        T[        [        R                  S9/5      m[
        R                  " T5        T R                  U4S j5        T R                  5       R                  SS5      nS nT R                  [        SU5        T R                  U[        5      nUU 4S jnUR                  U5        U$ )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.
r7  c                  ó0   >• [         R                  " T 5      $ r,   r:  r<  s   €r/   r>  Ú6XMLRPCTests.test_doubleEncodingError.<locals>.<lambda>é  r@  r2   r»   r$   c                  ó   • [        S5      e)NzCannot encode anything at all!)ÚRuntimeError)rê   rë   s     r/   Ú	fakeDumpsÚ7XMLRPCTests.test_doubleEncodingError.<locals>.fakeDumpsí  s   € ÜÐ?Ó@Ð@r2   r<   c                 óä   >• TR                  S[        T5      5        TR                  TS   S   R                  [        5        TR                  [        TR                  [        5      5      S5        g )NrC   r   rK  )rL  rM  rP  rN  r‡  rE   rQ  )ÚignoredrT  r-   s    €€r/   ÚcbFailedÚ6XMLRPCTests.test_doubleEncodingError.<locals>.cbFailed÷  sW   ø€ à×Ñ˜a¤ [Ó!1Ô2Ø×!Ñ! +¨a¡.°Ñ"?×"EÑ"EÄ|ÔTØ×ÑœS ×!7Ñ!7¼Ó!EÓFÈÕJr2   )r	   r   r   r   rW  r   rX  rY  r  r  Úpatchr   rZ  Ú	Exceptionr  )r-   r$  rˆ  rŒ  r=  rT  s   `   @@r/   Útest_doubleEncodingErrorÚ$XMLRPCTests.test_doubleEncodingErrorÝ  s¥   ú€ ô +Ó,ˆÜ'ØÔ1Ä(×BSÑBSÑTÐUó
ˆô 	×&Ò& xÔ0Ø�‰ÔKÔLØ�J‰J‹L×#Ñ# F¨BÓ/ˆò	Að 	�
‰
”9˜g yÔ1ð
 ×Ñ˜q¤)Ó,ˆö	Kð 	
�‰�hÔØˆr2   c                 ór   ^ • T R                  5       R                  SS5      nU 4S jnUR                  U5      $ )zF
The connection to the web server is closed when the request is done.
r»   r$   c                 ó¶   >• TR                   u  nTR                  UR                  R                  5        TR	                  UR                  R
                  5        g r,   )r  ÚassertFalser×   Ú	connectedÚ
assertTruerc  )r‹  rØ   r-   s     €r/   ÚresponseDoneÚBXMLRPCTests.test_closeConnectionAfterRequest.<locals>.responseDone  s@   ø€ ØŸ™‰IˆWØ×Ñ˜W×.Ñ.×8Ñ8Ô9Ø�O‰O˜G×-Ñ-×:Ñ:Õ;r2   r3  )r-   r$  r—  s   `  r/   Ú test_closeConnectionAfterRequestÚ,XMLRPCTests.test_closeConnectionAfterRequest   s3   ø€ ð �J‰J‹L×#Ñ# F¨BÓ/ˆõ	<ð
 �}‰}˜\Ó*Ð*r2   c                 óª   • [        5       n[        R                  " SSUS9nUR                  S5        U R	                  UR
                  S   S   S5        g)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  rE   Ú
tcpClients©r-   r   r  s      r/   Útest_tcpTimeoutÚXMLRPCTests.test_tcpTimeout  sP   € ô  “/ˆÜ—’Ø"°3Àñ
ˆð 	×Ñ˜Ô&Ø×Ñ˜×+Ñ+¨AÑ.¨qÑ1°3Õ7r2   zOpenSSL not presentc                 óª   • [        5       n[        R                  " SSUS9nUR                  S5        U R	                  UR
                  S   S   S5        g)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  rE   Ú
sslClientsr   s      r/   Útest_sslTimeoutÚXMLRPCTests.test_sslTimeout  sP   € ô  “/ˆÜ—’Ø#°CÀñ
ˆð 	×Ñ˜Ô&Ø×Ñ˜×+Ñ+¨AÑ.¨qÑ1°3Õ7r2   ©r  rþ   r   r,   )r3   r4   r5   r6   r@   r  r	  r  r%  r4  r\  rh  rr  r|  r�  r�  r™  r¡  r   ÚsslSkipr¦  r7   r'   r2   r/   rö   rö   %  sf   † òò
&òôò=ò"ò8.ò`ò"òò$	ò!òF+ò8ñ ˆGÐ*Ó+ñ8ó ,ó8r2   rö   c                   ó"   • \ rS rSrSrSS jrSrg)ÚXMLRPCProxyWithoutSlashTestsi)  z+
Test with proxy that doesn't add a slash.
Nc                 ó–   • [         R                  " [        SU R                  -  5      5      nUc  U R                  Ul        U$ Xl        U$ )Núhttp://127.0.0.1:%dr  r  s      r/   r  Ú"XMLRPCProxyWithoutSlashTests.proxy.  sD   € Ü�LŠLœÐ'<¸t¿y¹yÑ'HÓIÓJˆØ‰?Ø!×.Ñ.ˆAŒNð ˆð %ŒNØˆr2   r'   r,   )r3   r4   r5   r6   rU   r  r7   r'   r2   r/   r«  r«  )  s   † ñ÷r2   r«  c                   ó0   • \ rS rSrSrS rS rS rS rSr	g)	Ú XMLRPCPublicLookupProcedureTestsi7  zf
Tests for L{XMLRPC}'s support of subclasses which override
C{lookupProcedure} and C{listProcedures}.
c                 ó`  • [         R                  " S[        R                  " U5      SS9U l        U R                  U R                  R                  5        U R                  R                  5       R                  U l        [        R                  " [        SU R                  -  5      5      U l        g )Nr   rù   rú   r­  )r   rü   r   rý   rþ   rY  r  rÿ   r   r   r  r   r  )r-   r?   s     r/   ÚcreateServerÚ-XMLRPCPublicLookupProcedureTests.createServer=  sn   € Ü×"Ò" 1¤f§k¢k°(Ó&;À{ÑSˆŒØ�‰˜Ÿ™×,Ñ,Ô-Ø—F‘F—N‘NÓ$×)Ñ)ˆŒ	Ü—\’\¤-Ð0EÈÏ	É	Ñ0QÓ"RÓSˆ�
r2   c                 ó¬   • U R                  [        5       5        SnU R                  R                  SU5      nUR	                  U R
                  U5        U$ )zŠ
A subclass of L{XMLRPC} can override C{lookupProcedure} to find
procedures that are not defined using a C{xmlrpc_}-prefixed method name.
rˆ   r»   )r²  r¸   r  r  r  rE   )r-   Úwhatr$  s      r/   Útest_lookupProcedureÚ5XMLRPCPublicLookupProcedureTests.test_lookupProcedureC  sJ   € ð
 	×ÑÔ-Ó/Ô0ØˆØ�J‰J×!Ñ! &¨$Ó/ˆØ	�‰�d×&Ñ&¨Ô-Øˆr2   c                 ó°   • U R                  [        5       5        U R                  R                  SS5      nU R	                  U[
        R                  5      nU$ )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.
Úxxxxrˆ   )r²  r¸   r  r  rZ  r   rŠ   ©r-   r$  s     r/   r\  Ú,XMLRPCPublicLookupProcedureTests.test_errorsN  sG   € ð 	×ÑÔ-Ó/Ô0Ø�J‰J×!Ñ! &¨'Ó2ˆØ×Ñ˜q¤&§,¡,Ó/ˆØˆr2   c                 ó¸   ^ • [        5       n[        U5        T R                  U5        T R                  R	                  S5      nU 4S jnUR                  U5        U$ )zŒ
A subclass of L{XMLRPC} can override C{listProcedures} to define
Overriding listProcedures should prevent introspection from being
broken.
úsystem.listMethodsc                 ó*   >• TR                  SU 5        g )Nr›   )ÚassertIn)Ú
proceduresr-   s    €r/   ÚlistedÚAXMLRPCPublicLookupProcedureTests.test_listMethods.<locals>.listedd  s   ø€ ð �M‰M˜% Õ,r2   )rÁ   r   r²  r  r  r  )r-   r?   r$  rÁ  s   `   r/   Útest_listMethodsÚ1XMLRPCPublicLookupProcedureTests.test_listMethodsY  sP   ø€ ô &Ó'ˆÜ˜Ô"Ø×Ñ˜(Ô#Ø�J‰J×!Ñ!Ð"6Ó7ˆõ	-ð 	
�‰�fÔØˆr2   ©rþ   r   r  N)
r3   r4   r5   r6   rU   r²  r¶  r\  rÃ  r7   r'   r2   r/   r°  r°  7  s   † ñò
Tò	ò	õr2   r°  c                   ó*   • \ rS rSrSrS rS rS rSrg)ÚSerializationConfigMixinin  aK  
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           
      ó’  • U R                   S0n[        R                  " S[        R                  " [        S0 UD65      SS9U l        U R                  U R                  R                  5        U R                  R                  5       R                  U l
        [        R                  " [        SU R                  4-  5      40 UD6U l        g)z?
Create a new XML-RPC server with C{allowNone} set to C{True}.
Tr   rù   rú   r  Nr'   )ÚflagNamer   rü   r   rý   r_   rþ   rY  r  rÿ   r   r   r  r   r  )r-   rë   s     r/   r@   ÚSerializationConfigMixin.setUp~  s–   € ð —-‘- Ð&ˆÜ×"Ò"ØŒv�{Š{œ4™> &™>Ó*°kñ
ˆŒð 	�‰˜Ÿ™×,Ñ,Ô-Ø—F‘F—N‘NÓ$×)Ñ)ˆŒ	Ü—\’\ÜÐ0°D·I±I°<Ñ?Ó@ñ
ØDJñ
ˆ�
r2   c                 óž   • U R                   R                  SU R                  5      nUR                  U R                  U R                  5        U$ )zI
C{self.value} can be round-tripped over an XMLRPC method call/response.
r   ©r  r  rN  r  rE   rº  s     r/   Útest_roundtripValueÚ,SerializationConfigMixin.test_roundtripValueŒ  s;   € ð �J‰J×!Ñ! '¨4¯:©:Ó6ˆØ	�‰�d×&Ñ&¨¯
©
Ô3Øˆr2   c                 ó¦   • U R                   R                  SSU R                  05      nUR                  U R                  SU R                  05        U$ )zb
A C{dict} which contains C{self.value} can be round-tripped over an
XMLRPC method call/response.
r   ri   rÌ  rº  s     r/   Útest_roundtripNestedValueÚ2SerializationConfigMixin.test_roundtripNestedValue”  sE   € ð
 �J‰J×!Ñ! '¨C°·±Ð+<Ó=ˆØ	�‰�d×&Ñ&¨¨d¯j©jÐ(9Ô:Øˆr2   rÅ  N)	r3   r4   r5   r6   rU   r@   rÍ  rÐ  r7   r'   r2   r/   rÇ  rÇ  n  s   † ñò
òõr2   rÇ  c                   ó    • \ rS rSrSrSrSrSrg)ÚXMLRPCAllowNoneTestsiž  z>
Tests for passing L{None} when the C{allowNone} flag is set.
Ú	allowNoneNr'   )r3   r4   r5   r6   rU   rÉ  rN  r7   r'   r2   r/   rÓ  rÓ  ž  s   † ñð €HØƒEr2   rÓ  c                   óJ   • \ rS rSrSrSr\R                  " SSSSSS	5      rS
rg)ÚXMLRPCUseDateTimeTestsi§  zX
Tests for passing a C{datetime.datetime} instance when the C{useDateTime}
flag is set.
ÚuseDateTimeiÐ  r‡   é   r  é-   é;   r'   N)	r3   r4   r5   r6   rU   rÉ  ÚdatetimerN  r7   r'   r2   r/   rÖ  rÖ  §  s(   † ñð
 €HØ×Ò˜d B¨¨A¨r°2Ó6ƒEr2   rÖ  c                   ó>   • \ rS rSrSrSrSrS rS rS r	S r
S	 rS
rg)ÚXMLRPCAuthenticatedTestsi±  zQ
Test with authenticated proxy. We run this with the same input/output as
above.
s   usernames   asecretc                 óÒ   • [         R                  " S[        R                  " [	        5       5      SS9U l        U R
                  R                  5       R                  U l        / U l        g rø   )	r   rü   r   rý   rÇ   rþ   rÿ   r   r  rR   s    r/   r@   ÚXMLRPCAuthenticatedTests.setUpº  sH   € Ü×"Ò"ØŒv�{Š{œ>Ó+Ó,¸ñ
ˆŒð —F‘F—N‘NÓ$×)Ñ)ˆŒ	Øˆ�r2   c                 ó:  • S[        U R                  5      [        U R                  5      U R                  4-  n[        R
                  " [        U5      5      nUR                  S5      nUR                  U R                  U R                  U R                  /5        U$ )Nzhttp://%s:%s@127.0.0.1:%d/Úauthinfo)
r   ÚuserÚpasswordr   r   r  r   r  r  rE   )r-   Úurlrþ   r$  s       r/   Útest_authInfoInURLÚ+XMLRPCAuthenticatedTests.test_authInfoInURLÁ  sy   € Ø*Ü˜Ÿ™Ó#Ü˜Ÿ™Ó'Ø�I‰Ið.
ñ 
ˆô
 �LŠLœ sÓ+Ó,ˆØ�L‰L˜Ó$ˆØ	�‰�d×&Ñ&¨¯©°D·M±MÐ(BÔCØˆr2   c                 ó  • [         R                  " [        SU R                  4-  5      U R                  U R
                  5      nUR                  S5      nUR                  U R                  U R                  U R
                  /5        U$ )Nr  rá  ©	r   r  r   r   râ  rã  r  r  rE   ©r-   rþ   r$  s      r/   Útest_explicitAuthInfoÚ.XMLRPCAuthenticatedTests.test_explicitAuthInfoÌ  sh   € Ü�LŠLÜÐ0°D·I±I°<Ñ?Ó@Ø�I‰IØ�M‰Mó
ˆð
 �L‰L˜Ó$ˆØ	�‰�d×&Ñ&¨¯©°D·M±MÐ(BÔCØˆr2   c                 ó  • U R                   S-  n[        R                  " [        SU R                  4-  5      U R
                  U5      nUR                  S5      nUR                  U R                  U R
                  U/5        U$ )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  rE   )r-   ÚlongPasswordrþ   r$  s       r/   Útest_longPasswordÚ*XMLRPCAuthenticatedTests.test_longPasswordÖ  sp   € ð —}‘} rÑ)ˆÜ�LŠLÜÐ0°D·I±I°<Ñ?Ó@Ø�I‰IØó
ˆð
 �L‰L˜Ó$ˆØ	�‰�d×&Ñ&¨¯©°LÐ(AÔBØˆr2   c                 ó  • [         R                  " [        SU R                  4-  5      U R                  U R
                  5      nUR                  S5      nUR                  U R                  U R                  U R
                  /5        U$ )Nzhttp://wrong:info@127.0.0.1:%d/rá  rè  ré  s      r/   Útest_explicitAuthInfoOverrideÚ6XMLRPCAuthenticatedTests.test_explicitAuthInfoOverrideæ  sh   € Ü�LŠLÜÐ;¸t¿y¹y¸lÑJÓKØ�I‰IØ�M‰Mó
ˆð
 �L‰L˜Ó$ˆØ	�‰�d×&Ñ&¨¯©°D·M±MÐ(BÔCØˆr2   r¨  N)r3   r4   r5   r6   rU   râ  rã  r@   rå  rê  rï  rò  r7   r'   r2   r/   rÝ  rÝ  ±  s,   † ñð
 €DØ€Hòò	òòõ r2   rÝ  c                   ó,   • \ rS rSrS rS rS rS rSrg)ÚXMLRPCIntrospectionTestsiñ  c                 óì   • [        5       n[        U5        [        R                  " S[        R
                  " U5      SS9U l        U R                  R                  5       R                  U l        / U l	        g rø   )
r_   r   r   rü   r   rý   rþ   rÿ   r   r  )r-   r   s     r/   r@   ÚXMLRPCIntrospectionTests.setUpò  sO   € Ü“ˆÜ˜Ô Ü×"Ò" 1¤f§k¢k°&Ó&9À[ÑQˆŒØ—F‘F—N‘NÓ$×)Ñ)ˆŒ	Øˆ�r2   c                 ót   ^ • U 4S jnT R                  5       R                  S5      nUR                  U5        U$ )Nc                 óN   >• U R                  5         TR                  U / SQ5        g )N)r  r  r   rA  rD  r  r»   r€   rB  r  r–   r½  úsystem.methodHelpúsystem.methodSignaturer   )ÚsortrE   )Úmethsr-   s    €r/   Ú	cbMethodsÚ<XMLRPCIntrospectionTests.test_listMethods.<locals>.cbMethodsú  s"   ø€ Ø�J‰JŒLØ×ÑØòõr2   r½  r3  )r-   rþ  r$  s   `  r/   rÃ  Ú)XMLRPCIntrospectionTests.test_listMethodsù  s2   ø€ õ	ð. �J‰J‹L×#Ñ#Ð$8Ó9ˆØ	�‰�iÔ Øˆr2   c                 óè   • / SQn/ nU HR  u  p4U R                  5       R                  SU5      nUR                  U R                  U5        UR	                  U5        MT     [
        R                  " USS9$ )N))r   ry   )r€   r$   )r  r¥   rú  Tr  r  ©r-   ÚinputOutputsr!  r"  Úexpectedr$  s         r/   Útest_methodHelpÚ(XMLRPCIntrospectionTests.test_methodHelp  si   € ò
ˆð ˆÛ*‰NˆDØ—
‘
“×'Ñ'Ð(;¸TÓBˆAØ�M‰M˜$×*Ñ*¨HÔ5Ø�I‰I�aŽLñ +ô ×!Ò! "°tÑ<Ð<r2   c                 ó  • SS/ SQ/ SQ/4S/ SQ/4/n/ nU HR  u  p4U R                  5       R                  SU5      nUR                  U R                  U5        UR	                  U5        MT     [
        R                  " USS	9$ )
N)r   r$   r  rm   ro   r  rv   rû  Tr  r  r  s         r/   Útest_methodSignatureÚ-XMLRPCIntrospectionTests.test_methodSignature#  s‡   € àØÒ*Ò,JÐKÐLØÒ0Ð1Ð2ð
ˆð ˆÛ*‰NˆDØ—
‘
“×'Ñ'Ð(@À$ÓGˆAØ�M‰M˜$×*Ñ*¨HÔ5Ø�I‰I�aŽLñ +ô ×!Ò! "°tÑ<Ð<r2   r¨  N)	r3   r4   r5   r6   r@   rÃ  r  r  r7   r'   r2   r/   rõ  rõ  ñ  s   † òòò8=õ=r2   rõ  c                   ó*   • \ rS rSrSrS rS rS rSrg)ÚXMLRPCClientErrorHandlingTestsi2  z+
Test error handling on the xmlrpc client.
c                 óÐ   • [         R                  " SS5      U l        SU R                  l        [        R
                  " S[        R                  " U R                  5      SS9U l        g )Ns*   This text is not a valid XML-RPC response.s
   text/plainTr   rù   rú   )	r   ÚDatar?   ÚisLeafr   rü   r   rý   r   rR   s    r/   r@   Ú$XMLRPCClientErrorHandlingTests.setUp7  sK   € ÜŸšØ9¸=ó
ˆŒð  $ˆ�‰Ôä×%Ò%ØŒv�{Š{˜4Ÿ=™=Ó)°[ñ
ˆ�	r2   c                 ó6   • U R                   R                  5       $ r,   )r   r  rR   s    r/   r  Ú'XMLRPCClientErrorHandlingTests.tearDownA  s   € Ø�y‰y×&Ñ&Ó(Ð(r2   c                 óÖ   • [         R                  " [        SU R                  R	                  5       R                  4-  5      5      nU R                  UR                  S5      [        5      $ )zR
Test that calling the xmlrpc client on a static http server raises
an exception.
r  rž  )r   r  r   r   rÿ   rZ  r  Ú
ValueError)r-   r  s     r/   Útest_erroneousResponseÚ5XMLRPCClientErrorHandlingTests.test_erroneousResponseD  sV   € ô
 —’ÜÐ0°D·I±I×4EÑ4EÓ4G×4LÑ4LÐ3NÑNÓOó
ˆð ×!Ñ! %×"2Ñ"2°<Ó"@Ä*ÓMÐMr2   )r   r?   N)	r3   r4   r5   r6   rU   r@   r  r  r7   r'   r2   r/   r  r  2  s   † ñò
ò)õNr2   r  c                   ó6   • \ rS rSrSrS rS rS rS rS r	Sr
g	)
ÚQueryFactoryParseResponseTestsiO  z6
Test the behaviour of L{QueryFactory.parseResponse}.
c           
      ó¶   • [        S S SS S SSS9U l        [        R                  " S5      U l        SU l        [        R                  " [        5       5      U l	        g )Nr%   Fr'   )ÚpathÚhostr;   râ  rã  rÔ  rê   )r$   zinvalid xml)
r   r	  r   r<   ÚgoodContentsÚbadContentsr   rQ   r   ÚreasonrR   s    r/   r@   Ú$QueryFactoryParseResponseTests.setUpT  sV   € ô )ØØØØØØØñ
ˆÔô &ŸOšO¨EÓ2ˆÔà(ˆÔô —o’o¤nÓ&6Ó7ˆ�r2   c                 óÜ   • U R                   R                  nUR                  U R                   R                  U R                  5        U R                   R                  U R                  5        U$ )zi
We can safely call L{QueryFactory.clientConnectionLost} as a callback
of L{QueryFactory.parseResponse}.
)r	  Údeferredr  ÚclientConnectionLostr  ÚparseResponser  rº  s     r/   Ú test_parseResponseCallbackSafetyÚ?QueryFactoryParseResponseTests.test_parseResponseCallbackSafetyh  sT   € ð
 ×Ñ×&Ñ&ˆð 	
�‰�d×'Ñ'×<Ñ<¸d¿k¹kÔJØ×Ñ×'Ñ'¨×(9Ñ(9Ô:Øˆr2   c                 óÜ   • U R                   R                  nUR                  U R                   R                  U R                  5        U R                   R                  U R                  5        U$ )zi
We can safely call L{QueryFactory.clientConnectionLost} as an errback
of L{QueryFactory.parseResponse}.
)r	  r   Ú
addErrbackr!  r  r"  r  rº  s     r/   Útest_parseResponseErrbackSafetyÚ>QueryFactoryParseResponseTests.test_parseResponseErrbackSafetyu  sT   € ð
 ×Ñ×&Ñ&ˆð 	
�‰�T×&Ñ&×;Ñ;¸T¿[¹[ÔIØ×Ñ×'Ñ'¨×(8Ñ(8Ô9Øˆr2   c                 óÊ   • U R                   R                  nUR                  U R                   R                  U R                  5        U R                   R                  SS5        U$ )ze
We can safely call L{QueryFactory.clientConnectionLost} as an errback
of L{QueryFactory.badStatus}.
ÚstatusÚmessage)r	  r   r&  r!  r  Ú	badStatusrº  s     r/   Útest_badStatusErrbackSafetyÚ:QueryFactoryParseResponseTests.test_badStatusErrbackSafety‚  sP   € ð
 ×Ñ×&Ñ&ˆð 	
�‰�T×&Ñ&×;Ñ;¸T¿[¹[ÔIØ×Ñ×#Ñ# H¨iÔ8Øˆr2   c                 ó”   • SnU R                   R                  nU R                   R                  U5        U R                  U[        5      $ )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"  rZ  Ú
IndexError)r-   r=   r$  s      r/   Útest_parseResponseWithoutDataÚ<QueryFactoryParseResponseTests.test_parseResponseWithoutData�  sC   € ðˆð ×Ñ×&Ñ&ˆØ×Ñ×'Ñ'¨Ô0Ø×!Ñ! !¤ZÓ0Ð0r2   )r  r  r	  r  N)r3   r4   r5   r6   rU   r@   r#  r'  r-  r1  r7   r'   r2   r/   r  r  O  s    † ñò8ò(òòõ1r2   r  c                   ó    • \ rS rSrS rS rSrg)ÚXMLRPCWithRequestTestsi¡  c                 ó"   • [        5       U l        g r,   )r_   r?   rR   s    r/   r@   ÚXMLRPCWithRequestTests.setUp¢  s   € Ü›ˆ�r2   c                 óö   ^ • [        S5      nSUl        [        [        R                  " SS5      5      Ul        U 4S jnUR                  5       R                  X!5      nT R                  R                  U5        U$ )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                 óp   >• [         R                  " UR                  S   5      nTR                  US5        g )Nr   ))zPOST fooN)r   rH   rF   rE   )Únr:   Údatar-   s      €r/   ÚvalidÚ6XMLRPCWithRequestTests.test_withRequest.<locals>.valid¯  s+   ø€ Ü—?’? 7§?¡?°1Ñ#5Ó6ˆDØ×Ñ˜TÐ#8Õ9r2   )
r   r;   r   r   r<   r=   ÚnotifyFinishr  r?   Úrender_POST)r-   r:   r;  r$  s   `   r/   Útest_withRequestÚ'XMLRPCWithRequestTests.test_withRequest¥  sd   ø€ ô ˜wÓ'ˆØˆŒÜ"¤9§?¢?°8¸]Ó#KÓLˆŒõ	:ð × Ñ Ó"×.Ñ.¨uÓ>ˆØ�‰×!Ñ! 'Ô*Øˆr2   )r?   N)r3   r4   r5   r6   r@   r?  r7   r'   r2   r/   r4  r4  ¡  s   † òõr2   r4  )FrU   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   r©  ÚImportErrorÚTestCaser!   r‡  rW   r  r\   r_   r¸   rÁ   rÇ   rÙ   rÔ   rè   rï   rö   r«  r°  rÇ  rÓ  rÖ  rÝ  rõ  r  r  r4  r'   r2   r/   Ú<module>rO     sÉ  ðñ
ó
 ß  Ý ç +Ý 1ß H÷ó õ #ß =Ý .Ý "ß <Õ <Ý 2÷÷ ðÙÐ&Ô'ð €Gô-3�x×(Ñ(ô -3ô`	�|ô 	ô	�Zô 	ô\ˆ6ô \ô~
˜&ô 
ô*
˜ô 
ôB�Tô Bô$8˜×,Ñ,ô 8ô*
<�v×*Ñ*ô 
<ô#˜V×0Ñ0ô #ôA8�(×#Ñ#ô A8ôH ;ô ô4 x×'8Ñ'8ô 4÷n-ñ -ô`Ð3°X×5FÑ5Fô ô7Ð5°x×7HÑ7Hô 7ô=˜{ô =ô@>=˜{ô >=ôBN X×%6Ñ%6ô Nô:O1 X×%6Ñ%6ô O1ôd˜X×.Ñ.õ øðs ó ØƒGðús   Á6G ÇG#Ç"G#