o
    Ͱiڋ                     @   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   P/home/ubuntu/.local/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!rhm(   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   zTestSystemNamespaceRPCInterface.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   zTestSystemNamespaceRPCInterface.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%	