o
    þâfÛ‹  ã                   @   s(  d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ G dd„ de jƒZ	G d	d
„ d
e jƒZ
G dd„ de jƒZG dd„ de jƒZG dd„ de jƒZG dd„ de jƒZG dd„ de jƒZG dd„ de jƒZG dd„ de jƒZG dd„ de jƒZG dd„ dƒZG dd„ deƒZG dd „ d ƒZdS )!é    N)ÚDummySupervisor)ÚDummyRequest)ÚDummySupervisorRPCNamespace©Ú	xmlrpclib)Úhttplibc                   @   ó   e Zd Zdd„ Zdd„ ZdS )ÚGetFaultDescriptionTestsc                 C   s*   ddl m} | |jj¡}|  |d¡ d S )Nr   ©ÚxmlrpcÚSHUTDOWN_STATE)Ú
supervisorr   ÚgetFaultDescriptionÚFaultsr   ÚassertEqual©Úselfr   Údesc© r   úO/var/www/html/venv/lib/python3.10/site-packages/supervisor/tests/test_xmlrpc.pyÚ(test_returns_description_for_known_fault   s   zAGetFaultDescriptionTests.test_returns_description_for_known_faultc                 C   s&   ddl m} | d¡}|  |d¡ d S )Nr   r
   i?B ÚUNKNOWN)r   r   r   r   r   r   r   r   Ú&test_returns_unknown_for_unknown_fault   s   
z?GetFaultDescriptionTests.test_returns_unknown_for_unknown_faultN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r	   
   s    r	   c                   @   s6   e Zd Zdd„ Zddd„Zdd„ Zdd	„ Zd
d„ ZdS )ÚRPCErrorTestsc                 C   ó   ddl m} |S )Nr   ©ÚRPCError)Úsupervisor.xmlrpcr   )r   r   r   r   r   Ú_getTargetClass   ó   zRPCErrorTests._getTargetClassNc                 C   ó   |   ¡ ||ƒS ©N©r!   )r   ÚcodeÚextrar   r   r   Ú_makeOne   ó   zRPCErrorTests._makeOnec                 C   s,   ddl m} |  |jj¡}|  |jd¡ d S )Nr   r
   ÚFAILED©r   r   r(   r   r*   r   Útext©r   r   Úer   r   r   Ú#test_sets_text_with_fault_name_only   s   z1RPCErrorTests.test_sets_text_with_fault_name_onlyc                 C   s.   ddl m} |  |jjd¡}|  |jd¡ d S )Nr   r
   ÚoopszFAILED: oopsr+   r-   r   r   r   Ú(test_sets_text_with_fault_name_and_extra"   s   z6RPCErrorTests.test_sets_text_with_fault_name_and_extrac                 C   s8   ddl m} |  |jjd¡}|  t|ƒd|jj ¡ d S )Nr   r
   z/nonexistentz%code=%r, text='NO_FILE: /nonexistent')r   r   r(   r   ÚNO_FILEr   Ústrr-   r   r   r   Ú test___str___shows_code_and_text'   s
   

ÿz.RPCErrorTests.test___str___shows_code_and_textr$   )r   r   r   r!   r(   r/   r1   r4   r   r   r   r   r      s    
r   c                   @   ó   e Zd Zdd„ ZdS )ÚXMLRPCMarshallingTestsc                 C   sX   ddl m} | d¡}|  |tjddd¡ t dd¡}| |¡}|  |t |¡¡ d S )Nr   r
   é   )r7   T)ÚmethodresponseÚfoo)r   r   Úxmlrpc_marshalr   r   ÚdumpsÚFault)r   r   ÚdataÚfaultr   r   r   Útest_xmlrpc_marshal/   s   

z*XMLRPCMarshallingTests.test_xmlrpc_marshalN)r   r   r   r?   r   r   r   r   r6   .   ó    r6   c                   @   s|   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚXMLRPCHandlerTestsc                 C   r   )Nr   )Úsupervisor_xmlrpc_handler)r    rB   )r   rB   r   r   r   r!   8   r"   z"XMLRPCHandlerTests._getTargetClassc                 C   r#   r$   r%   )r   ÚsupervisordÚsubinterfacesr   r   r   r(   <   r)   zXMLRPCHandlerTests._makeOnec                 C   sL   t ƒ }dtƒ fg}|  ||¡}|  |j|¡ ddlm} |  |jj|¡ d S )Nr   r   )ÚRootRPCInterface)	r   r   r(   r   rC   r    rE   ÚrpcinterfaceÚ	__class__)r   r   rD   ÚhandlerrE   r   r   r   Ú	test_ctor?   s   zXMLRPCHandlerTests.test_ctorc                 C   s\   G dd„ dƒ}t ƒ }dtƒ fg}|  ||¡}|  | |dƒ¡d¡ |  | |dƒ¡d¡ d S )Nc                   @   r5   )z4XMLRPCHandlerTests.test_match.<locals>.DummyRequest2c                 S   s
   || _ d S r$   )Úuri)r   rJ   r   r   r   Ú__init__I   ó   
z=XMLRPCHandlerTests.test_match.<locals>.DummyRequest2.__init__N)r   r   r   rK   r   r   r   r   ÚDummyRequest2H   r@   rM   r   z/RPC2Tz/nopeF)r   r   r(   r   Úmatch)r   rM   r   rD   rH   r   r   r   Ú
test_matchG   s   zXMLRPCHandlerTests.test_matchc                 C   s°   t ƒ }dtƒ fg}|  ||¡}t dd¡}tdd d d ƒ}| ||¡ |jjj	}|  
t|ƒd¡ |  
|d d¡ |  
|d d	¡ |  
t|jƒd
¡ |jd }|  tjtj|¡ d S )Nr   )ÚaÚbzsupervisor.noSuchMethodú
/what/everé   éþÿÿÿz0XML-RPC method called: supervisor.noSuchMethod()éÿÿÿÿzKXML-RPC method supervisor.noSuchMethod() returned fault: [1] UNKNOWN_METHODr7   r   )r   r   r(   r   r;   r   Úcontinue_requestÚoptionsÚloggerr=   r   ÚlenÚ	producersÚassertRaisesr<   Úloads)r   r   rD   rH   r=   ÚrequestÚlogdataÚxml_responser   r   r   Ú"test_continue_request_nosuchmethodQ   s"   

ÿ
ÿ
z5XMLRPCHandlerTests.test_continue_request_nosuchmethodc           
      C   sþ   t ƒ }dtƒ fg}|  ||¡}t dd¡}tdd d d ƒ}| ||¡ |jjj	}|  
t|ƒd¡ |  
|d d¡ |  
|d d	¡ |  
t|jƒd
¡ |jd }t |¡}ddlm}	 |  
|d d |	¡ |  
|jd¡ |  
|jd d¡ |  
|jd t|ƒ¡ d S )Nr   r   zsupervisor.getAPIVersionrR   rS   rT   ú1XML-RPC method called: supervisor.getAPIVersion()rU   ú?XML-RPC method supervisor.getAPIVersion() returned successfullyr7   r   ©ÚAPI_VERSIONTúContent-Typeútext/xmlúContent-Length)r   r   r(   r   r;   r   rV   rW   rX   r=   r   rY   rZ   r\   Úsupervisor.rpcinterfacerd   Ú_doneÚheaders©
r   r   rD   rH   r=   r]   r^   r_   Úresponserd   r   r   r   Ú#test_continue_request_methodsuccessc   s,   

ÿ
ÿ

z6XMLRPCHandlerTests.test_continue_request_methodsuccessc           
      C   sö   t ƒ }dtƒ fg}|  ||¡}d}tdd d d ƒ}| ||¡ |jjj}|  t	|ƒd¡ |  |d d¡ |  |d d¡ |  t	|j
ƒd	¡ |j
d
 }t |¡}d
dlm}	 |  |d
 d
 |	¡ |  |jd¡ |  |jd d¡ |  |jd t	|ƒ¡ d S )Nr   zp<?xml version="1.0" encoding="UTF-8"?><methodCall><methodName>supervisor.getAPIVersion</methodName></methodCall>rR   rS   rT   ra   rU   rb   r7   r   rc   Tre   rf   rg   )r   r   r(   r   rV   rW   rX   r=   r   rY   rZ   r   r\   rh   rd   ri   rj   rk   r   r   r   Ú*test_continue_request_no_params_in_requesty   s,   

ÿ
ÿ

z=XMLRPCHandlerTests.test_continue_request_no_params_in_requestc                 C   ó¦   t ƒ }dtƒ fg}|  ||¡}d}tdd d d ƒ}| ||¡ |jjj}|  t	|ƒd¡ |  
|d  d¡¡ |  
t|ƒ|d v ¡ |  
|d  d¡¡ |  |jd¡ d S )	Nr   zX<?xml version="1.0" encoding="UTF-8"?><methodCall><methodName></methodName></methodCall>rR   r7   r   úXML-RPC request datazis invalid: no method nameé  ©r   r   r(   r   rV   rW   rX   r=   r   rY   Ú
assertTrueÚ
startswithÚreprÚendswithÚ_error©r   r   rD   rH   r=   r]   r^   r   r   r   Ú1test_continue_request_400_if_method_name_is_empty’   s   
zDXMLRPCHandlerTests.test_continue_request_400_if_method_name_is_emptyc                 C   ro   )	Nr   z#this is not an xml-rpc request bodyrR   r7   r   rp   úis invalid: unmarshallablerq   rr   rx   r   r   r   Ú1test_continue_request_400_if_loads_raises_not_xml¡   ó   
zDXMLRPCHandlerTests.test_continue_request_400_if_loads_raises_not_xmlc                 C   ro   )	Nr   z&<methodName></methodName><junk></junk>rR   r7   r   rp   rz   rq   rr   rx   r   r   r   Ú3test_continue_request_400_if_loads_raises_weird_xml¯   r|   zFXMLRPCHandlerTests.test_continue_request_400_if_loads_raises_weird_xmlc                 C   sÌ   t ƒ }dtƒ fg}|  ||¡}t dd¡}tdd d d ƒ}| ||¡ |jjj	}|  
t|ƒd¡ |  
|d d¡ |  d|d	 v ¡ |  t|ƒ|d	 v ¡ |  d
|d	 v ¡ |  d|d	 v ¡ |  
|jd¡ d S )Nr   r   zsupervisor.raiseErrorrR   rS   r   z.XML-RPC method called: supervisor.raiseError()úunexpected exceptionr7   Ú	TracebackzValueError: erroréô  ©r   r   r(   r   r;   r   rV   rW   rX   r=   r   rY   rs   ru   rw   rx   r   r   r   Ú<test_continue_request_500_if_rpcinterface_method_call_raises½   s    

ÿzOXMLRPCHandlerTests.test_continue_request_500_if_rpcinterface_method_call_raisesc                 C   sÜ   t ƒ }dtƒ fg}|  ||¡}t dd¡}tdd d d ƒ}| ||¡ |jjj	}|  
t|ƒd¡ |  
|d d¡ |  
|d d	¡ |  d
|d v ¡ |  t|ƒ|d v ¡ |  d|d v ¡ |  d|d v ¡ |  
|jd¡ d S )Nr   r   z"supervisor.getXmlRpcUnmarshallablerR   é   r   z;XML-RPC method called: supervisor.getXmlRpcUnmarshallable()r7   zIXML-RPC method supervisor.getXmlRpcUnmarshallable() returned successfullyr~   rS   r   zTypeError: cannot marshalr€   r   rx   r   r   r   Ú0test_continue_request_500_if_xmlrpc_dumps_raisesÎ   s&   

ÿ
ÿzCXMLRPCHandlerTests.test_continue_request_500_if_xmlrpc_dumps_raisesc                 C   sº   G dd„ dt ƒ}tƒ }dtƒ fd|ƒ fg}|  ||¡}t dd¡}tdd d d ƒ}| ||¡ |jj	j
}|  t|ƒd¡ |  |d	 d
¡ |  |d d¡ |  t|jƒd¡ |  |jd¡ d S )Nc                   @   r5   )zUXMLRPCHandlerTests.test_continue_request_value_is_function.<locals>.DummyRPCNamespacec                 S   s   dd„ }d|_ |S )Nc                 S   ó   dS ©Nr7   r   ©r   r   r   r   Úinnerå   ó   zhXMLRPCHandlerTests.test_continue_request_value_is_function.<locals>.DummyRPCNamespace.foo.<locals>.innergš™™™™™©?)Údelay©r   rˆ   r   r   r   r9   ä   s   zYXMLRPCHandlerTests.test_continue_request_value_is_function.<locals>.DummyRPCNamespace.fooN©r   r   r   r9   r   r   r   r   ÚDummyRPCNamespaceã   r@   r   r   Úns1r   úns1.foorR   rS   rT   z XML-RPC method called: ns1.foo()rU   z.XML-RPC method ns1.foo() returned successfullyr   F)Úobjectr   r   r(   r   r;   r   rV   rW   rX   r=   r   rY   rZ   ri   )r   r   r   rD   rH   r=   r]   r^   r   r   r   Ú'test_continue_request_value_is_functionâ   s&   ÿ

ÿ
ÿz:XMLRPCHandlerTests.test_continue_request_value_is_functionc           	      C   s.  d}t ƒ }dtƒ fg}|  ||¡}| |¡}|\}}dd l}|  |d¡ |  |d d¡ |  |d d¡ |  |d d	¡ |  |d
 d¡ |  |d d	¡ |  |d d¡ |  |d d¡ |  |d | dddddd¡¡ |  |d d¡ |  |d dddœ¡ |  |d g d¢¡ |  |d ddi gi¡ d S )NaŽ  <?xml version="1.0"?>
        <methodCall>
        <methodName>examples.getStateName</methodName>
        <params>
        <param>
        <value><i4>41</i4></value>
        </param>
        <param>
        <value><string>foo</string></value>
        </param>
        <param>
        <value><string></string></value>
        </param>
        <param>
        <!-- xml-rpc spec allows strings without <string> tag -->
        <value>bar</value>
        </param>
        <param>
        <value></value>
        </param>
        <param>
        <value><boolean>1</boolean></value>
        </param>
        <param>
        <value><double>-12.214</double></value>
        </param>
        <param>
        <value>
        <dateTime.iso8601>19980717T14:08:55</dateTime.iso8601>
        </value>
        </param>
        <param>
        <value><base64>eW91IGNhbid0IHJlYWQgdGhpcyE=</base64></value>
        </param>
        <param>
        <struct>
        <member><name>j</name><value><i4>5</i4></value></member>
        <member><name>k</name><value>abc</value></member>
        </struct>
        </param>
        <param>
        <array>
          <data>
            <value><i4>12</i4></value>
            <value><string>abc</string></value>
            <value>def</value>
            <value><i4>34</i4></value>
          </data>
        </array>
        </param>
        <param>
        <struct>
          <member>
            <name>k</name>
            <value><array><data>
              <value><i4>1</i4></value>
              <struct></struct>
            </data></array></value>
          </member>
        </struct>
        </param>
        </params>
        </methodCall>
        r   r   zexamples.getStateNameé)   r7   r9   rS   Ú rƒ   Úbaré   é   Té   g!°rh‘m(Àé   iÎ  é   é   é   é7   zyou can't read this!é	   Úabc)ÚjÚké
   )é   rž   Údefé"   é   r    )r   r   r(   r\   Údatetimer   )	r   Úsr   rD   rH   ÚresultÚparamsÚmethodr¦   r   r   r   Útest_iterparse_loads_methodcallù   s(   @
 z2XMLRPCHandlerTests.test_iterparse_loads_methodcallN)r   r   r   r!   r(   rI   rO   r`   rm   rn   ry   r{   r}   r‚   r„   r‘   r«   r   r   r   r   rA   7   s    
rA   c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚTraverseTestsc                 C   óP   ddl m} G dd„ dƒ}G dd„ dƒ}|ƒ }|ƒ |_|  |j|j|dg ¡ d S )Nr   r
   c                   @   ó   e Zd ZdS )zFTraverseTests.test_security_disallows_underscore_methods.<locals>.RootN©r   r   r   r   r   r   r   ÚRootQ  ó    r°   c                   @   r5   )zCTraverseTests.test_security_disallows_underscore_methods.<locals>.Ac                 S   r…   ©NTr   r‡   r   r   r   Ú_dangerT  r‰   zKTraverseTests.test_security_disallows_underscore_methods.<locals>.A._dangerN)r   r   r   r³   r   r   r   r   ÚAS  r@   r´   z	a._danger©r   r   rP   r[   r   Útraverse©r   r   r°   r´   Úrootr   r   r   Ú*test_security_disallows_underscore_methodsO  s   ÿz8TraverseTests.test_security_disallows_underscore_methodsc                 C   óh   ddl m} G dd„ dƒ}G dd„ dƒ}G dd„ dƒ}|ƒ }|ƒ |_|ƒ |j_|  |j|j|d	g ¡ d S )
Nr   r
   c                   @   r®   )zDTraverseTests.test_security_disallows_object_traversal.<locals>.RootNr¯   r   r   r   r   r°   ]  r±   r°   c                   @   r®   )zATraverseTests.test_security_disallows_object_traversal.<locals>.ANr¯   r   r   r   r   r´   _  r±   r´   c                   @   r5   )zATraverseTests.test_security_disallows_object_traversal.<locals>.Bc                 S   r…   r²   r   r‡   r   r   r   Údangerb  r‰   zHTraverseTests.test_security_disallows_object_traversal.<locals>.B.dangerN)r   r   r   r»   r   r   r   r   ÚBa  r@   r¼   z
a.b.danger©r   r   rP   rQ   r[   r   r¶   ©r   r   r°   r´   r¼   r¸   r   r   r   Ú(test_security_disallows_object_traversal[  s   
ÿz6TraverseTests.test_security_disallows_object_traversalc                 C   s:   ddl m} G dd„ dƒ}|ƒ }|  |j|j|dd ¡ d S )Nr   r
   c                   @   r®   )z9TraverseTests.test_namespace_name_not_found.<locals>.RootNr¯   r   r   r   r   r°   l  r±   r°   znotfound.hello)r   r   r[   r   r¶   )r   r   r°   r¸   r   r   r   Útest_namespace_name_not_foundj  s   ÿz+TraverseTests.test_namespace_name_not_foundc                 C   r­   )Nr   r
   c                   @   r®   )z6TraverseTests.test_method_name_not_found.<locals>.RootNr¯   r   r   r   r   r°   t  r±   r°   c                   @   r®   )z3TraverseTests.test_method_name_not_found.<locals>.ANr¯   r   r   r   r   r´   v  r±   r´   z
a.notfoundrµ   r·   r   r   r   Útest_method_name_not_foundr  s   ÿz(TraverseTests.test_method_name_not_foundc                 C   rº   )
Nr   r
   c                   @   r®   )zGTraverseTests.test_method_name_exists_but_is_not_a_method.<locals>.RootNr¯   r   r   r   r   r°     r±   r°   c                   @   r®   )zDTraverseTests.test_method_name_exists_but_is_not_a_method.<locals>.ANr¯   r   r   r   r   r´     r±   r´   c                   @   r®   )zDTraverseTests.test_method_name_exists_but_is_not_a_method.<locals>.BNr¯   r   r   r   r   r¼   ƒ  r±   r¼   za.br½   r¾   r   r   r   Ú+test_method_name_exists_but_is_not_a_method}  s   
ÿz9TraverseTests.test_method_name_exists_but_is_not_a_methodc                 C   sT   ddl m} G dd„ dƒ}G dd„ dƒ}|ƒ }|ƒ |_|  |j|j|ddd	g¡ d S )
Nr   r
   c                   @   r®   )z+TraverseTests.test_bad_params.<locals>.RootNr¯   r   r   r   r   r°     r±   r°   c                   @   r5   )z(TraverseTests.test_bad_params.<locals>.Ac                 S   ó   d| S ©NzHello %sr   ©r   Únamer   r   r   Úhello  ó   z.TraverseTests.test_bad_params.<locals>.A.helloN©r   r   r   rÇ   r   r   r   r   r´     r@   r´   úa.helloÚtherer'   rµ   r·   r   r   r   Útest_bad_params‹  s   
ÿzTraverseTests.test_bad_paramsc                 C   sV   ddl m} G dd„ dƒ}G dd„ dƒ}|ƒ }|ƒ |_| |ddg¡}|  |d	¡ d S )
Nr   r
   c                   @   r®   )z(TraverseTests.test_success.<locals>.RootNr¯   r   r   r   r   r°   ™  r±   r°   c                   @   r5   )z%TraverseTests.test_success.<locals>.Ac                 S   rÃ   rÄ   r   rÅ   r   r   r   rÇ   œ  rÈ   z+TraverseTests.test_success.<locals>.A.helloNrÉ   r   r   r   r   r´   ›  r@   r´   rÊ   rË   zHello there)r   r   rP   r¶   r   )r   r   r°   r´   r¸   r¨   r   r   r   Útest_success—  s   zTraverseTests.test_successN)
r   r   r   r¹   r¿   rÀ   rÁ   rÂ   rÌ   rÍ   r   r   r   r   r¬   N  s    r¬   c                   @   s\   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )ÚSupervisorTransportTestsc                 C   r   )Nr   )ÚSupervisorTransport)r    rÏ   )r   rÏ   r   r   r   r!   ¤  r"   z(SupervisorTransportTests._getTargetClassc                 O   s   |   ¡ |i |¤ŽS r$   r%   ©r   ÚargÚkwr   r   r   r(   ¨  ó   z!SupervisorTransportTests._makeOnec                 C   sT   ddl m} |  ddd¡}| ¡ }|  t||jƒ¡ |  |jd¡ |  |j	d¡ d S )Nr   r
   ÚuserÚpasszunix:///foo/barÚ	localhostz/foo/bar)
r   r   r(   Ú_get_connectionrs   Ú
isinstanceÚUnixStreamHTTPConnectionr   ÚhostÚ
socketfile)r   r   Ú	transportÚconnr   r   r   Útest_ctor_unix«  s   z'SupervisorTransportTests.test_ctor_unixc                 C   s   |   t| jddd¡ d S )NrÔ   rÕ   zunknown:///foo/bar)r[   Ú
ValueErrorr(   r‡   r   r   r   Útest_ctor_unknown³  s   
ÿz*SupervisorTransportTests.test_ctor_unknownc                 C   óH   |   ddd¡}| ¡ }|  t|tjƒ¡ |  |jd¡ |  |jd¡ d S )NrÔ   rÕ   zhttp://127.0.0.1:9001/ú	127.0.0.1i)#  ©	r(   r×   rs   rØ   r   ÚHTTPConnectionr   rÚ   Úport©r   rÜ   rÝ   r   r   r   Útest__get_connection_http_9001¸  ó
   z7SupervisorTransportTests.test__get_connection_http_9001c                 C   rá   )NrÔ   rÕ   úhttp://127.0.0.1/râ   éP   rã   ræ   r   r   r   Útest__get_connection_http_80¿  rè   z5SupervisorTransportTests.test__get_connection_http_80c                    s`   |   ddd¡}tddƒ‰ ‡ fdd„}||_|  tj|jdd	d¡ |  |jd ¡ |  ˆ j	d
¡ d S )NrÔ   rÕ   ré   rq   r“   c                      ó   ˆ S r$   r   r   ©Ú
dummy_connr   r   ÚgetconnÉ  r‰   zGSupervisorTransportTests.test_request_non_200_response.<locals>.getconnrÖ   ú/T)
r(   ÚDummyConnectionr×   r[   r   ÚProtocolErrorr]   r   Ú
connectionÚclosed©r   rÜ   rï   r   rí   r   Útest_request_non_200_responseÆ  s   

ÿz6SupervisorTransportTests.test_request_non_200_responsec                    sî   |   ddd¡}tddƒ‰ ‡ fdd„}||_|  tj|jdd	d¡ |  |jd ¡ |  ˆ j	d
¡ |  ˆ j
d d¡ |  ˆ j
d d	¡ |  ˆ j
d d¡ |  ˆ j
d d d¡ |  ˆ j
d d d¡ |  ˆ j
d d d¡ |  ˆ j
d d d¡ d S )NrÔ   rÕ   ré   rq   r“   c                      rì   r$   r   r   rí   r   r   rï   Ô  r‰   zCSupervisorTransportTests.test_request_400_response.<locals>.getconnrÖ   rð   Tr   ÚPOSTr7   rS   ó    rƒ   rg   Ú0re   rf   ÚAuthorizationúBasic dXNlcjpwYXNzÚAccept)r(   rñ   r×   r[   r   rò   r]   r   ró   rô   Úrequestargsrõ   r   rí   r   Útest_request_400_responseÑ  s$   

ÿÿz2SupervisorTransportTests.test_request_400_responsec                    sö   |   ddd¡}d}td|ƒ‰ ‡ fdd„}||_| dd	d
¡}|  |jˆ ¡ |  ˆ jd¡ |  ˆ jd d¡ |  ˆ jd d	¡ |  ˆ jd d¡ |  ˆ jd d d¡ |  ˆ jd d d¡ |  ˆ jd d d¡ |  ˆ jd d d¡ |  |d¡ d S )NrÔ   rÕ   ré   zÁ<?xml version="1.0"?>
        <methodResponse>
        <params>
        <param>
        <value><string>South Dakota</string></value>
        </param>
        </params>
        </methodResponse>éÈ   c                      rì   r$   r   r   rí   r   r   rï   ï  r‰   zCSupervisorTransportTests.test_request_200_response.<locals>.getconnrÖ   rð   r“   Fr   r÷   r7   rS   rø   rƒ   rg   rù   re   rf   rú   rû   rü   )zSouth Dakota)r(   rñ   r×   r]   r   ró   rô   rý   )r   rÜ   rl   rï   r¨   r   rí   r   Útest_request_200_responseä  s$   
ÿz2SupervisorTransportTests.test_request_200_responsec                    sP   |   ddd¡}tddƒ‰ ‡ fdd„}||_| dd	d
¡ | ¡  |  ˆ j¡ d S )NrÔ   rÕ   ré   rÿ   zH<?xml version="1.0"?>
        <methodResponse><params/></methodResponse>c                      rì   r$   r   r   rí   r   r   rï     r‰   z4SupervisorTransportTests.test_close.<locals>.getconnrÖ   rð   r“   )r(   rñ   r×   r]   Úclosers   rô   rõ   r   rí   r   Ú
test_closeÿ  s   
z#SupervisorTransportTests.test_closeN)r   r   r   r!   r(   rÞ   rà   rç   rë   rö   rþ   r   r  r   r   r   r   rÎ   £  s    rÎ   c                   @   sv   e Zd Zdd„ Zddd„Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestDeferredXMLRPCResponsec                 C   r   )Nr   )ÚDeferredXMLRPCResponse)r    r  )r   r  r   r   r   r!     r"   z*TestDeferredXMLRPCResponse._getTargetClassNc                 C   s:   |d u rt d d d d d ƒ}|d u rtƒ }d|_|  ¡ ||ƒS r†   )r   ÚDummyrŠ   r!   )r   r]   Úcallbackr   r   r   r(     s   z#TestDeferredXMLRPCResponse._makeOnec                 C   sV   t ƒ }d|_| jd|d}|  |j|¡ |  |jd¡ |  |jd¡ |  |jd¡ d S )Nr7   r]   )r]   r  g      ð?F)r  rŠ   r(   r   r  r]   Úfinished©r   r  Úinstr   r   r   rI     s   z$TestDeferredXMLRPCResponse.test_ctorc                 C   s&   |   ¡ }d|_| ¡ }|  |d¡ d S )NTr“   )r(   r  Úmorer   ©r   r	  r¨   r   r   r   Útest_more_finished   s   z-TestDeferredXMLRPCResponse.test_more_finishedc                    s>   ddl m‰  ‡ fdd„}d|_| j|d}|  | ¡ ˆ ¡ d S )Nr   ©ÚNOT_DONE_YETc                      rì   r$   r   r   r  r   r   r  (  r‰   zTTestDeferredXMLRPCResponse.test_more_callback_returns_not_done_yet.<locals>.callbackr7   ©r  )Úsupervisor.httpr  rŠ   r(   r   r
  r  r   r  r   Ú'test_more_callback_returns_not_done_yet&  s
   zBTestDeferredXMLRPCResponse.test_more_callback_returns_not_done_yetc                    sz   ddl m‰m‰  ‡ ‡fdd„}d|_| j|d}|  | ¡ d ¡ |  t|jj	ƒd¡ |  
d|jj	d v ¡ |  
|j¡ d S )Nr   ©r   r   c                      s
   ˆˆ j ƒ‚r$   )ÚUNKNOWN_METHODr   ©r   r   r   r   r  0  rL   zOTestDeferredXMLRPCResponse.test_more_callback_raises_RPCError.<locals>.callbackr7   r  r  )r    r   r   rŠ   r(   r   r
  rY   r]   rZ   rs   r  r  r   r  r   Ú"test_more_callback_raises_RPCError.  s   z=TestDeferredXMLRPCResponse.test_more_callback_raises_RPCErrorc                 C   sd   dd„ }d|_ | j|d}|  | ¡ d ¡ |  t|jjƒd¡ |  d|jjd v ¡ |  |j¡ d S )Nc                   S   r…   )Nrž   r   r   r   r   r   r  :  r‰   zMTestDeferredXMLRPCResponse.test_more_callback_returns_value.<locals>.callbackr7   r  rž   r   )	rŠ   r(   r   r
  rY   r]   rZ   rs   r  r  r   r   r   Ú test_more_callback_returns_value9  s   z;TestDeferredXMLRPCResponse.test_more_callback_returns_valuec                 C   sŽ   dd„ }d|_ | j|d}|  | ¡ d ¡ |  |jjd¡ |  |j¡ |jjj	j
j}|  t|ƒd¡ |d \}}|  |d¡ |  d|v ¡ d S )	Nc                   S   s   t dƒ‚©Nr9   )rß   r   r   r   r   r  D  rÈ   z[TestDeferredXMLRPCResponse.test_more_callback_raises_unexpected_exception.<locals>.callbackr7   r  r€   r   zXML-RPC response callback errorr   )rŠ   r(   r   r
  r]   rw   rs   r  ÚchannelÚserverrX   ÚloggedrY   )r   r  r	  r  ÚsrcÚmsgr   r   r   Ú.test_more_callback_raises_unexpected_exceptionC  s   zITestDeferredXMLRPCResponse.test_more_callback_raises_unexpected_exceptionc                 C   sT   |   ¡ }d|j_|jj d¡ | d¡ |  t|jjƒd¡ |  |jj	d d¡ d S )Nú1.0zConnection: keep-aliverž   r7   Ú
Connectionz
Keep-Alive)
r(   r]   ÚversionÚheaderÚappendÚgetresponser   rY   rZ   rj   ©r   r	  r   r   r   Ú'test_getresponse_http_10_with_keepaliveQ  s   
zBTestDeferredXMLRPCResponse.test_getresponse_http_10_with_keepalivec                 C   sF   |   ¡ }d|j_| d¡ |  t|jjƒd¡ |  |jjd d¡ d S )Nr  rž   r7   r  r  ©r(   r]   r   r#  r   rY   rZ   rj   r$  r   r   r   Ú%test_getresponse_http_10_no_keepaliveY  ó
   
z@TestDeferredXMLRPCResponse.test_getresponse_http_10_no_keepalivec                 C   sD   |   ¡ }d|j_| d¡ |  t|jjƒd¡ |  d|jjv¡ d S )Nú1.1rž   r7   r  )	r(   r]   r   r#  r   rY   rZ   rs   rj   r$  r   r   r   Ú&test_getresponse_http_11_without_close`  s
   
zATestDeferredXMLRPCResponse.test_getresponse_http_11_without_closec                 C   sT   |   ¡ }|jj d¡ d|j_| d¡ |  t|jjƒd¡ |  |jj	d d¡ d S )NzConnection: closer)  rž   r7   r  r  )
r(   r]   r!  r"  r   r#  r   rY   rZ   rj   r$  r   r   r   Ú#test_getresponse_http_11_with_closeg  s   
z>TestDeferredXMLRPCResponse.test_getresponse_http_11_with_closec                 C   sF   |   ¡ }d |j_| d¡ |  t|jjƒd¡ |  |jjd d¡ d S )Nrž   r7   r  r  r&  r$  r   r   r   Útest_getresponse_http_unknowno  r(  z8TestDeferredXMLRPCResponse.test_getresponse_http_unknown)NN)r   r   r   r!   r(   rI   r  r  r  r  r  r%  r'  r*  r+  r,  r   r   r   r   r  
  s    
	
r  c                   @   s–   e Zd Zd%dd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$S )&ÚTestSystemNamespaceRPCInterfacer   c                 C   ó   ddl m} ||ƒS )Nr   )ÚSystemNamespaceRPCInterface)r    r/  )r   Ú
namespacesr/  r   r   r   r(   w  ó   z(TestSystemNamespaceRPCInterface._makeOnec                 C   s$   |   ¡ }| ¡ }|  |g d¢¡ d S )N)úsystem.listMethodsúsystem.methodHelpúsystem.methodSignatureúsystem.multicall)r(   ÚlistMethodsr   r  r   r   r   Útest_listMethods_gardenpath{  s   þz;TestSystemNamespaceRPCInterface.test_listMethods_gardenpathc                 C   sB   G dd„ dt ƒ}|ƒ }|  d|fg¡}| ¡ }|  |g d¢¡ d S )Nc                   @   r   )z_TestSystemNamespaceRPCInterface.test_listMethods_omits_underscore_attrs.<locals>.DummyNamespacec                 S   ó   d S r$   r   r‡   r   r   r   r9   ‰  ó    zcTestSystemNamespaceRPCInterface.test_listMethods_omits_underscore_attrs.<locals>.DummyNamespace.fooc                 S   r8  r$   r   r‡   r   r   r   Ú_barŠ  r9  zdTestSystemNamespaceRPCInterface.test_listMethods_omits_underscore_attrs.<locals>.DummyNamespace._barN)r   r   r   r9   r:  r   r   r   r   ÚDummyNamespaceˆ  s    r;  rŽ   )r   r2  r3  r4  r5  )r   r(   r6  r   )r   r;  rŽ   r	  r¨   r   r   r   Ú'test_listMethods_omits_underscore_attrs‡  s   þzGTestSystemNamespaceRPCInterface.test_listMethods_omits_underscore_attrsc                 C   s$   |   ¡ }| d¡}|  d|v ¡ d S )Nr2  Úarray)r(   Ú
methodHelprs   r  r   r   r   Útest_methodHelp_known_method˜  s   
z<TestSystemNamespaceRPCInterface.test_methodHelp_known_methodc                 C   ó(   ddl m} |  ¡ }|  ||jd¡ d S ©Nr   r   zwont.be.found)r    r   r(   r[   r>  ©r   r   r	  r   r   r   Útest_methodHelp_unknown_method  ó   z>TestSystemNamespaceRPCInterface.test_methodHelp_unknown_methodc                 C   s&   |   ¡ }| d¡}|  |ddg¡ d S )Nr4  r=  Ústring)r(   ÚmethodSignaturer   r  r   r   r   Ú!test_methodSignature_known_method¢  s   
zATestSystemNamespaceRPCInterface.test_methodSignature_known_methodc                 C   r@  rA  )r    r   r(   r[   rF  rB  r   r   r   Ú#test_methodSignature_unknown_method§  rD  zCTestSystemNamespaceRPCInterface.test_methodSignature_unknown_methodc                 C   sF   ddl m} G dd„ dtƒ}|ƒ }|  d|fg¡}|  ||jd¡ d S )Nr   r   c                   @   r5   )zYTestSystemNamespaceRPCInterface.test_methodSignature_with_bad_sig.<locals>.DummyNamespacec                 S   r…   )z @param string name The thingNr   r‡   r   r   r   r9   ¯  r9  z]TestSystemNamespaceRPCInterface.test_methodSignature_with_bad_sig.<locals>.DummyNamespace.fooNrŒ   r   r   r   r   r;  ®  r@   r;  rŽ   r   )r    r   r   r(   r[   rF  )r   r   r;  rŽ   r	  r   r   r   Ú!test_methodSignature_with_bad_sig¬  s
   zATestSystemNamespaceRPCInterface.test_methodSignature_with_bad_sigc                 C   óB   ddl m} |  ¡ }ddig}| |¡}|  ||jddœg¡ d S )Nr   ©r   Ú
methodNamer5  z:INCORRECT_PARAMETERS: Recursive system.multicall forbidden©Ú	faultCodeÚfaultString©r    r   r(   Ú	multicallr   ÚINCORRECT_PARAMETERS©r   r   r	  ÚcallsÚresultsr   r   r   Ú#test_multicall_faults_for_recursionµ  ó   

ÿþzCTestSystemNamespaceRPCInterface.test_multicall_faults_for_recursionc                 C   s>   ddl m} |  ¡ }i g}| |¡}|  ||jddœg¡ d S )Nr   rK  z#INCORRECT_PARAMETERS: No methodNamerM  rP  rS  r   r   r   Ú,test_multicall_faults_for_missing_methodNameÁ  s   
ÿþzLTestSystemNamespaceRPCInterface.test_multicall_faults_for_missing_methodNamec                 C   rJ  )Nr   rK  rL  zbad.stopProcessr  rM  )r    r   r(   rQ  r   r  rS  r   r   r   Ú2test_multicall_faults_for_methodName_bad_namespaceÌ  rW  zRTestSystemNamespaceRPCInterface.test_multicall_faults_for_methodName_bad_namespacec                 C   s`   ddl m} G dd„ dtƒ}|ƒ }|  d|fg¡}ddig}| |¡}|  ||jdd	œg¡ d S )
Nr   rK  c                   @   r®   )zoTestSystemNamespaceRPCInterface.test_multicall_faults_for_methodName_good_ns_bad_method.<locals>.DummyNamespaceNr¯   r   r   r   r   r;  Ù  r±   r;  rŽ   rL  zns1.badr  rM  )r    r   r   r(   rQ  r   r  )r   r   r;  rŽ   r	  rT  rU  r   r   r   Ú7test_multicall_faults_for_methodName_good_ns_bad_method×  s   

ÿþzWTestSystemNamespaceRPCInterface.test_multicall_faults_for_methodName_good_ns_bad_methodc                 C   s&   |   ¡ }g }| |¡}|  |g ¡ d S r$   )r(   rQ  r   )r   r	  rT  rU  r   r   r   Ú4test_multicall_returns_empty_results_for_empty_callså  s   
zTTestSystemNamespaceRPCInterface.test_multicall_returns_empty_results_for_empty_callsc                 C   sf   G dd„ dt ƒ}|ƒ }|  d|fg¡}ddgdœddgdœddgdœg}| |¡}|  |g d	¢¡ d S )
Nc                   @   r5   )znTestSystemNamespaceRPCInterface.test_multicall_performs_noncallback_functions_serially.<locals>.DummyNamespacec                 S   s   |S )z  @param string name Process namer   rÅ   r   r   r   Úsayí  s   zrTestSystemNamespaceRPCInterface.test_multicall_performs_noncallback_functions_serially.<locals>.DummyNamespace.sayN)r   r   r   r\  r   r   r   r   r;  ì  r@   r;  rŽ   zns1.sayÚAlvin©rL  r©   ÚSimonÚTheodore)r]  r_  r`  )r   r(   rQ  r   )r   r;  rŽ   r	  rT  rU  r   r   r   Ú6test_multicall_performs_noncallback_functions_seriallyë  s   


ý
zVTestSystemNamespaceRPCInterface.test_multicall_performs_noncallback_functions_seriallyc                    s   dd l ‰ddlm‰m‰  G ‡ ‡‡fdd„dtƒ}|ƒ }|  d|fg¡}ddiddig}| |¡}ˆ jd	d
œ}ˆ jdt	 d
œ}|  
|||g¡ d S )Nr   r  c                       ó&   e Zd Z‡ ‡fdd„Z‡fdd„ZdS )zeTestSystemNamespaceRPCInterface.test_multicall_catches_noncallback_exceptions.<locals>.DummyNamespacec                    ó   ˆˆ j dƒ‚r  ©ÚBAD_NAMEr‡   r  r   r   Úbad_nameþ  ó   znTestSystemNamespaceRPCInterface.test_multicall_catches_noncallback_exceptions.<locals>.DummyNamespace.bad_namec                    ó
   t ˆ jƒ‚r$   ©ÚOSErrorÚENOENTr‡   ©Úerrnor   r   Úos_error   rL   znTestSystemNamespaceRPCInterface.test_multicall_catches_noncallback_exceptions.<locals>.DummyNamespace.os_errorN©r   r   r   rf  rn  r   ©r   r   rm  r   r   r;  ý  s    r;  rŽ   rL  úns1.bad_nameúns1.os_errorúBAD_NAME: foorM  úFAILED: %s:2)rm  r    r   r   r   r(   rQ  re  r*   rj  r   )r   r;  rŽ   r	  rT  rU  rf  rn  r   rp  r   Ú-test_multicall_catches_noncallback_exceptionsú  s   
ÿÿzMTestSystemNamespaceRPCInterface.test_multicall_catches_noncallback_exceptionsc           
         s¶   dd l ‰ddlm‰m‰  ddlm} G ‡ ‡‡fdd„dtƒ}|ƒ }|  d|fg¡}ddidd	ig}| |¡}|}||u rC|ƒ }||u s<ˆ j	d
dœ}ˆ j
dt dœ}	|  |||	g¡ d S )Nr   r  r  c                       rb  )zbTestSystemNamespaceRPCInterface.test_multicall_catches_callback_exceptions.<locals>.DummyNamespacec                    s   ‡ ‡fdd„}|S )Nc                      rc  r  rd  r   r  r   r   rˆ     rg  zzTestSystemNamespaceRPCInterface.test_multicall_catches_callback_exceptions.<locals>.DummyNamespace.bad_name.<locals>.innerr   r‹   r  r   r   rf    s   zkTestSystemNamespaceRPCInterface.test_multicall_catches_callback_exceptions.<locals>.DummyNamespace.bad_namec                    s   ‡ fdd„}|S )Nc                      rh  r$   ri  r   rl  r   r   rˆ     rL   zzTestSystemNamespaceRPCInterface.test_multicall_catches_callback_exceptions.<locals>.DummyNamespace.os_error.<locals>.innerr   r‹   rl  r   r   rn    s   zkTestSystemNamespaceRPCInterface.test_multicall_catches_callback_exceptions.<locals>.DummyNamespace.os_errorNro  r   rp  r   r   r;    s    r;  rŽ   rL  rq  rr  rs  rM  rt  )rm  r    r   r   r  r  r   r(   rQ  re  r*   rj  r   )
r   r  r;  rŽ   r	  rT  r  rU  rf  rn  r   rp  r   Ú*test_multicall_catches_callback_exceptions  s&   	
ÿÿÿzJTestSystemNamespaceRPCInterface.test_multicall_catches_callback_exceptionsc                    sŠ   ddl m‰  G ‡ fdd„dtƒ}|ƒ }|  d|fg¡}dddid	œd
ddid	œg}| |¡}ˆ }|ˆ u r;|ƒ }|ˆ u s4|  |ddg¡ d S )Nr   r  c                       s,   e Zd Z‡ fdd„Z‡ fdd„Zdd„ ZdS )zkTestSystemNamespaceRPCInterface.test_multicall_performs_callback_functions_serially.<locals>.DummyNamespacec                    s   ˆ ˆ ˆ dg| _ dg| _d S )Nústop resultústart result)Ústop_resultsÚstart_resultsr‡   r  r   r   rK   +  s   ÿztTestSystemNamespaceRPCInterface.test_multicall_performs_callback_functions_serially.<locals>.DummyNamespace.__init__c                    s   ‡‡ fdd„}|S )Nc                     s   ˆj  d¡} | ˆ urdˆ_| S )Nr   T)ry  ÚpopÚstopped)r¨   )r  r   r   r   rˆ   0  s   z†TestSystemNamespaceRPCInterface.test_multicall_performs_callback_functions_serially.<locals>.DummyNamespace.stopProcess.<locals>.innerr   ©r   rÆ   rˆ   r  r‡   r   ÚstopProcess/  s   zwTestSystemNamespaceRPCInterface.test_multicall_performs_callback_functions_serially.<locals>.DummyNamespace.stopProcessc                    s   ‡ fdd„}|S )Nc                      s   ˆ j stdƒ‚ˆ j d¡S )NzThis should not raiser   )r|  Ú	Exceptionrz  r{  r   r‡   r   r   rˆ   7  s   z‡TestSystemNamespaceRPCInterface.test_multicall_performs_callback_functions_serially.<locals>.DummyNamespace.startProcess.<locals>.innerr   r}  r   r‡   r   ÚstartProcess6  s   zxTestSystemNamespaceRPCInterface.test_multicall_performs_callback_functions_serially.<locals>.DummyNamespace.startProcessN)r   r   r   rK   r~  r€  r   r  r   r   r;  *  s    r;  rŽ   zns1.stopProcessrÆ   r9   r^  zns1.startProcessrw  rx  )r  r  r   r(   rQ  r   )r   r;  rŽ   r	  rT  r  rU  r   r  r   Ú3test_multicall_performs_callback_functions_serially(  s"   ÿÿþ
ÿzSTestSystemNamespaceRPCInterface.test_multicall_performs_callback_functions_seriallyN)r   )r   r   r   r(   r7  r<  r?  rC  rG  rH  rI  rV  rX  rY  rZ  r[  ra  ru  rv  r  r   r   r   r   r-  v  s$    
	r-  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTest_gettagsc                 C   r.  )Nr   )Úgettags)r    rƒ  )r   Úcommentrƒ  r   r   r   Ú_callFUTI  r1  zTest_gettags._callFUTc                 C   ó"   d}|   |¡}|  |ddg¡ d S )Nz@foo©r   NNNr“   )r   r9   r“   r“   r“   ©r…  r   ©r   Úlinesr¨   r   r   r   Útest_one_atpartM  ó   
þzTest_gettags.test_one_atpartc                 C   r†  )Nz
@foo arrayr‡  )r   r9   r=  r“   r“   rˆ  r‰  r   r   r   Útest_two_atpartsU  rŒ  zTest_gettags.test_two_atpartsc                 C   r†  )Nz@foo array namer‡  )r   r9   r=  rÆ   r“   rˆ  r‰  r   r   r   Útest_three_atparts]  rŒ  zTest_gettags.test_three_atpartsc                 C   r†  )Nz@foo array name textr‡  )r   r9   r=  rÆ   r,   rˆ  r‰  r   r   r   Útest_four_atpartse  rŒ  zTest_gettags.test_four_atpartsN)r   r   r   r…  r‹  r  rŽ  r  r   r   r   r   r‚  H  s    r‚  c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTest_capped_intc                 C   r.  )Nr   )Ú
capped_int)r    r‘  )r   Úvaluer‘  r   r   r   r…  n  r1  zTest_capped_int._callFUTc                 C   s   |   |  d¡d¡ d S )NÚ42é*   )r   r…  r‡   r   r   r   Útest_converts_value_to_integerr  s   z.Test_capped_int.test_converts_value_to_integerc                 C   s*   ddl m} |  |  |jd ¡|j¡ d S ©Nr   r   r7   )Úsupervisor.compatr   r   r…  ÚMININT©r   r   r   r   r   Útest_caps_value_below_minintu  ó   z,Test_capped_int.test_caps_value_below_minintc                 C   s*   ddl m} |  |  |jd ¡|j¡ d S r–  )r—  r   r   r…  ÚMAXINTr™  r   r   r   Útest_caps_value_above_maxinty  r›  z,Test_capped_int.test_caps_value_above_maxintN)r   r   r   r…  r•  rš  r  r   r   r   r   r  m  s
    r  c                   @   s   e Zd Zd	dd„Zdd„ ZdS )
ÚDummyResponserÿ   r“   Úreasonc                 C   s   || _ || _|| _d S r$   )ÚstatusÚbodyrŸ  ©r   r   r¡  rŸ  r   r   r   rK     s   
zDummyResponse.__init__c                 C   ó   | j S r$   )r¡  r‡   r   r   r   Úread„  ó   zDummyResponse.readN©rÿ   r“   rŸ  )r   r   r   rK   r¤  r   r   r   r   rž  ~  s    
rž  c                   @   r®   )r  Nr¯   r   r   r   r   r  ‡  r±   r  c                   @   s2   e Zd ZdZddd„Zdd„ Zd	d
„ Zdd„ ZdS )rñ   Frÿ   r“   rŸ  c                 C   s   t |||ƒ| _d S r$   )rž  rl   r¢  r   r   r   rK   Œ  rÓ   zDummyConnection.__init__c                 C   r£  r$   )rl   r‡   r   r   r   r#    r¥  zDummyConnection.getresponsec                 O   s   || _ || _d S r$   )rý   Ú	requestkwrÐ   r   r   r   r]   ’  s   
zDummyConnection.requestc                 C   s
   d| _ d S r²   )rô   r‡   r   r   r   r  –  rL   zDummyConnection.closeNr¦  )r   r   r   rô   rK   r#  r]   r  r   r   r   r   rñ   Š  s    
rñ   )ÚunittestÚsupervisor.tests.baser   r   r   r—  r   r   ÚTestCaser	   r   r6   rA   r¬   rÎ   r  r-  r‚  r  rž  r   r  rñ   r   r   r   r   Ú<module>   s,    	  Ugl S%	