o
    ¯b>  ã                   @   s¬   d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	m
Z
 zddlZddlmZ ddlmZ W n ey=   dZeZY nw G d	d
„ d
eƒZee dƒG dd„ deƒƒZdS )zTest SOAP support.é    )ÚskipIf)ÚdeferÚreactor)ÚTestCase)ÚerrorÚserverN)Úsoap)ÚSOAPPublisherc                   @   sd   e Zd Zdd„ Zddd„Zde_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 )ÚTestc                 C   ó   || S ©N© ©ÚselfÚaÚbr   r   ú</usr/lib/python3/dist-packages/twisted/web/test/test_soap.pyÚsoap_add   ó   zTest.soap_addé   é   c                 C   r   r   r   r   r   r   r   Úsoap_kwargs   r   zTest.soap_kwargsTc                 C   s
   ||d gS r   r   )r   ÚstringÚnumr   r   r   Úsoap_triple"   ó   
zTest.soap_triplec                 C   s   t  ddi¡S )Nr   Úc)ÚSOAPpyÚ
structType©r   r   r   r   Úsoap_struct%   s   zTest.soap_structc                 C   s
   t  |¡S r   )r   Úsucceed)r   Úxr   r   r   Ú
soap_defer(   r   zTest.soap_deferc                 C   ó   t  tƒ ¡S r   ©r   ÚfailÚ
ValueErrorr   r   r   r   Úsoap_deferFail+   ó   zTest.soap_deferFailc                 C   s   t ‚r   )ÚRuntimeErrorr   r   r   r   Ú	soap_fail.   s   zTest.soap_failc                 C   r$   r   r%   r   r   r   r   Úsoap_deferFault1   r)   zTest.soap_deferFaultc                 C   s   dddg gddœS )Nr   r   é   Úfoo©r   ÚDr   r   r   r   r   Úsoap_complex4   s   zTest.soap_complexc                 C   s   || S r   r   )r   ÚmapÚkeyr   r   r   Ú	soap_dict7   r   zTest.soap_dictN)r   r   )Ú__name__Ú
__module__Ú__qualname__r   r   ÚuseKeywordsr   r    r#   r(   r+   r,   r1   r4   r   r   r   r   r
      s    
r
   zSOAPpy not installedc                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )Ú	SOAPTestsc                 C   s4   t ƒ | _tjdt | j¡dd�| _| j ¡ j| _d S )Nr   z	127.0.0.1)Ú	interface)	r
   Ú	publisherr   Ú	listenTCPr   ÚSiteÚpÚgetHostÚportr   r   r   r   ÚsetUp=   s
   ÿzSOAPTests.setUpc                 C   s
   | j  ¡ S r   )r>   ÚstopListeningr   r   r   r   ÚtearDownD   r   zSOAPTests.tearDownc                 C   s   t  d| j ¡S )Nzhttp://127.0.0.1:%d/)r   ÚProxyr@   r   r   r   r   ÚproxyG   s   zSOAPTests.proxyc                 C   s¶   dddddidfdfddg d¢fg}g }|D ]\}}}|   ¡ j|g|¢R Ž }| | j|¡ | |¡ q|   ¡  d	¡}| d
d„ ¡ | | jdddg gddœ¡ | |¡ tj|dd�S )N)Úadd)r   é   é   )r   )r   r   Údictr   r   Útriple)r   r   )r   r   NÚcomplexc                 S   s   |   ¡ S r   )Ú_asdict)Úresultr   r   r   Ú<lambda>Z   s    z'SOAPTests.testResults.<locals>.<lambda>r   r   r-   r.   r/   T)ÚfireOnOneErrback)rE   Ú
callRemoteÚaddCallbackÚassertEqualÚappendr   ÚDeferredList)r   ÚinputOutputÚdlÚmethÚargsÚoutpÚdr   r   r   ÚtestResultsJ   s   ü
zSOAPTests.testResultsc                    s6   ˆ   ¡  d¡}ˆ  |tj¡ ‡ fdd„}| |¡ |S )zD
        Check that a non existing method return error 500.
        Údoesntexistc                    s   ˆ   t| jƒd¡ d S )Niô  )rR   ÚintÚstatus)Úerrr   r   r   Úcbi   s   z(SOAPTests.testMethodNotFound.<locals>.cb)rE   rP   ÚassertFailurer   ÚErrorrQ   )r   rZ   r`   r   r   r   ÚtestMethodNotFoundb   s
   
zSOAPTests.testMethodNotFoundc                 C   s:   |   | j d¡¡ |   | j d¡¡ |  | j d¡¡ dS )zc
        Test lookupFunction method on publisher, to see available remote
        methods.
        rF   r&   ÚfoobarN)Ú
assertTruer;   ÚlookupFunctionÚassertFalser   r   r   r   ÚtestLookupFunctiono   s   zSOAPTests.testLookupFunctionN)	r5   r6   r7   rA   rC   rE   r[   rc   rh   r   r   r   r   r9   ;   s    r9   )Ú__doc__Úunittestr   Útwisted.internetr   r   Útwisted.trial.unittestr   Útwisted.webr   r   r   r   Útwisted.web.soapr	   ÚImportErrorÚobjectr
   r9   r   r   r   r   Ú<module>   s    þ
"