HEX
Server: Apache
System: Linux scp1.abinfocom.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: confeduphaar (1010)
PHP: 8.1.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //usr/lib/python3/dist-packages/twisted/test/__pycache__/test_sip.cpython-38.pyc
U

��W[�b�@s�dZddlmZmZddlmZmZddlmZddl	m
Z
zddlmZWndZYnXddl
mZd	d
�dd�Zd
�dd�Zd�dd�Zd�dd�Zd�dd�Zd�dd�Zd�dd�Zd�dd�ZGdd�d�ZGdd�de
j�ZGdd�de�ZGdd�de
j�ZGdd�de
j�ZGdd�de
j�ZGd d!�d!e
j�Zeej �Gd"d#�d#��Z!eej �Gd$d%�d%��Z"Gd&d'�d'e
j�Z#Gd(d)�d)e
j�Z$Gd*d+�d+ej%�Z&Gd,d-�d-e
j�Z'dS).z(
Session Initialization Protocol tests.
�)�portal�checkers)�defer�reactor)�sip)�unittest)�AsyncioSelectorReactorN)�implementerz



z?INVITE sip:foo SIP/2.0
From: mo
To: joe
Content-Length: 4

abcd�
z
z-INVITE sip:foo SIP/2.0
From: mo
To: joe

1234zHINVITE sip:foo SIP/2.0
From: mo
To: joe
Content-Length: 4

1234

lalalalz�INVITE sip:foo SIP/2.0
From: mo
To: joe
Content-Length: 0

INVITE sip:loop SIP/2.0
From: foo
To: bar
Content-Length: 4

abcdINVITE sip:loop SIP/2.0
From: foo
To: bar
Content-Length: 4

1234z4SIP/2.0 200 OK
From:  foo
To:bar
Content-Length: 0

z.INVITE sip:foo SIP/2.0
f: mo
t: joe
l: 4

abcdz=INVITE sip:foo SIP/2.0
Via: SIP/2.0/UDP 10.0.0.1:5060;rport

a�SIP/2.0 200 OK
Via: SIP/2.0/UDP server10.biloxi.com
    ;branch=z9hG4bKnashds8;received=192.0.2.3
Via: SIP/2.0/UDP bigbox3.site3.atlanta.com
    ;branch=z9hG4bK77ef4c2312983.1;received=192.0.2.2
Via: SIP/2.0/UDP pc33.atlanta.com
    ;branch=z9hG4bK776asdhds ;received=192.0.2.1
To: Bob <sip:bob@biloxi.com>;tag=a6c85cf
From: Alice <sip:alice@atlanta.com>;tag=1928301774
Call-ID: a84b4c76e66710@pc33.atlanta.com
CSeq: 314159 INVITE
Contact: <sip:bob@192.0.2.4>
Content-Type: application/sdp
Content-Length: 0

c@seZdZdd�ZdS)�	TestRealmcGstjddd�fS)NcSsdS�N�r
r
r
�7/usr/lib/python3/dist-packages/twisted/test/test_sip.py�<lambda>m�z)TestRealm.requestAvatar.<locals>.<lambda>)rZIContact)�selfZavatarIdZmindZ
interfacesr
r
r�
requestAvatarlszTestRealm.requestAvatarN)�__name__�
__module__�__qualname__rr
r
r
rrksrc@s\eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�ZdS)�MessageParsingTestscCsg|_t�|jj�|_dSr)�lrZMessagesParser�append�parser�rr
r
r�setUprszMessageParsingTests.setUpcCs|j�|�|j��dSr�rZdataReceivedZdataDone)r�messager
r
r�feedMessagewszMessageParsingTests.feedMessagecCsN|�|j|�|�|j��|�|�|j|�|�|j|�|�|jd�dS)z$
        Validate Requests.
        �N)�assertEqual�method�uri�toString�headers�body�finished)r�mr!r"r$r%r
r
r�validateMessage|s
z#MessageParsingTests.validateMessagec	CsH|j}|�t�|�t|�d�|�|ddddgdgdgd�d	�dS�
Nrr�INVITE�sip:foo�mo�joe�4��from�tozcontent-length�abcd)rr�request1r �lenr(�rrr
r
r�
testSimple�s
�zMessageParsingTests.testSimplec	Csr|j}|�t�|�t�|�t|�d�|�|ddddgdgdgd�d	�|�|d
dddgdgd�d�dS)
N�rr*r+r,r-r.r/r2r)r0r1�1234)rrr3�request2r r4r(r5r
r
r�testTwoMessages�s

��z#MessageParsingTests.testTwoMessagesc	CsH|j}|�t�|�t|�d�|�|ddddgdgdgd�d	�dS)
Nrrr*r+r,r-r.r/r8)rr�request3r r4r(r5r
r
r�testGarbage�s
�zMessageParsingTests.testGarbagec	Cs�|j}|�t�|�t|�d�|�|ddddgdgdgd�d	�|�|d
dddgd
gdgd�d�|�|ddddgd
gdgd�d�dS)N�rr*r+r,r-�0r/�rzsip:loop�foo�barr.r2r7r8)rr�request4r r4r(r5r
r
r�testThreeInOne�s0
���z"MessageParsingTests.testThreeInOnec	CsH|j}|�t�|�t|�d�|�|ddddgdgdgd�d	�dSr))rr�
request_shortr r4r(r5r
r
r�	testShort�s
�zMessageParsingTests.testShortcCs�|j}|�t�|�t|�d�|d}|�|jd�|�|jd�|�|jdgdgdgd��|�|jd	�|�|j	d�dS)
Nrr���OKr@rAr>r/r?)
rr�	response1r r4�code�phraser$r%r&�rrr'r
r
r�testSimpleResponse�s
�z&MessageParsingTests.testSimpleResponsecCsn|j}|�t�|�t|�d�|d}|�|jddd�|�|jddd�|�|jddd�dS)	zv
        A header may be split across multiple lines.  Subsequent lines begin
        with C{" "} or C{"\t"}.
        rr�viazHSIP/2.0/UDP server10.biloxi.com;branch=z9hG4bKnashds8;received=192.0.2.3zVSIP/2.0/UDP bigbox3.site3.atlanta.com;branch=z9hG4bK77ef4c2312983.1;received=192.0.2.2r7zHSIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bK776asdhds ;received=192.0.2.1N)rr�response_multiliner r4r$rKr
r
r�test_multiLine�s 
���z"MessageParsingTests.test_multiLineN)
rrrrrr(r6r:r<rCrErLrOr
r
r
rrqs


rc@seZdZdZdd�ZdS)�%MessageParsingFeedDataCharByCharTestsz9
    Same as base class, but feed data char by char.
    cCs$|D]}|j�|�q|j��dSrr)rr�cr
r
rr�sz1MessageParsingFeedDataCharByCharTests.feedMessageN)rrr�__doc__rr
r
r
rrP�srPc@s$eZdZdd�Zdd�Zdd�ZdS)�MakeMessageTestscCs,t�dd�}|�dd�|�|��d�dS)Nr*r+r@rAz$INVITE sip:foo SIP/2.0
Foo: bar

)r�Request�	addHeaderr r#�r�rr
r
r�testRequest�s�zMakeMessageTests.testRequestcCsBt�dd�}|�dd�|�dd�|�d�|�|��d�dS)	NrFrGr@rAzContent-Lengthr.r8z3SIP/2.0 200 OK
Foo: bar
Content-Length: 4

1234)r�ResponserUZbodyDataReceivedr r#rVr
r
r�testResponses
�zMakeMessageTests.testResponsecCst�d�}|�|��d�dS)NrFzSIP/2.0 200 OK

)rrYr r#rVr
r
r�testStatusCodes
zMakeMessageTests.testStatusCodeN)rrrrXrZr[r
r
r
rrS�s
rSc@s\eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�ZdS)�ViaTestscCs"|��}|�|t�|����dSr)r#r r�parseViaHeader)r�v�sr
r
r�checkRoundtripszViaTests.checkRoundtripcCsHt�d�}t�d�}|�|j|j�|�|j|j�|�|j|j�dS)NzSIP/2.0/UDP 192.168.1.1:5060z SIP/2.0/UDP     192.168.1.1:5060)rr]r �	transport�host�port)rZv1Zv2r
r
r�testExtraWhitespaces


zViaTests.testExtraWhitespacecCs�d}t�|�}|�|jd�|�|jd�|�|jd�|�|j�|�|j�|�	|j
�|�|jd�|�|jd�|�|j
d�|�|jd�|�|��d	�|�|�d
S)zC
        Test parsing a Via header with one of everything.
        zVSIP/2.0/UDP first.example.com:4000;ttl=16;maddr=224.2.0.1 ;branch=a7c6a8dlze (Example)�UDPzfirst.example.comi��z	224.2.0.1Z
a7c6a8dlzerzKSIP/2.0/UDP first.example.com:4000;ttl=16;branch=a7c6a8dlze;maddr=224.2.0.1N)rr]r rarbrc�assertIsNone�rport�
rportValue�assertFalse�rportRequested�ttl�maddr�branch�hiddenr#r`�rr_r^r
r
r�test_complex s 

�zViaTests.test_complexcCs�d}t�|�}|�|jd�|�|jd�|�|jd�|�|j�|�|j�|�	|j
�|�|j�|�|j�|�|j
�|�|j�|�|��d�|�|�dS)z3
        Test parsing a simple Via header.
        zSIP/2.0/UDP example.com;hiddenre�example.com��z#SIP/2.0/UDP example.com:5060;hiddenN)rr]r rarbrcrgrhrirjrkrlrmrn�
assertTrueror#r`rpr
r
r�test_simple7s 

�zViaTests.test_simplecCst�d�}|�|�dS)Nrr)r�Viar`�rr^r
r
r�testSimplerLs
zViaTests.testSimplercCs�tjddd�}|j|jgd�}|�t|�d�|�|ddd�|�|dd	t�|�|��d
�|�|j	�|�|j
�|�|j�dS)z|
        Setting rport to True is deprecated, but still produces a Via header
        with the expected properties.
        �foo.barT�rh�ZoffendingFunctionsrrr�+rport=True is deprecated since Twisted 9.0.�category�SIP/2.0/UDP foo.bar:5060;rportN)
rrv�
flushWarnings�test_deprecatedRPortr r4�DeprecationWarningr#rtrhrkrgri)rr^�warningsr
r
rr�Qs"�
�
�zViaTests.test_deprecatedRPortcCs:tjddd�}|�|��d�|�|j�|�|j�dS)zU
        An rport setting of None should insert the parameter with no value.
        ryNrzr~)rrvr r#rtrkrgrirwr
r
r�
test_rporthszViaTests.test_rportcCsJtjddd�}|�|��d�|�|j�|�|jd�|�|jd�dS)zk
        An rport numeric setting should insert the parameter with the number
        value given.
        ryrrzz SIP/2.0/UDP foo.bar:5060;rport=1N)rrvr r#rjrkrirhrwr
r
r�test_rportValuers
zViaTests.test_rportValuecCsnd}t�|�}|�|jd�|�|jd�|�|jd�|�|jd�|�|jd�|�|�	��
d�d�dS)	Nz8SIP/2.0/UDP 10.0.0.1:5060;received=22.13.1.5;rport=12345re�10.0.0.1rsz	22.13.1.5i90zrport=12345���)rr]r rarbrc�receivedrhZassertNotEqualr#�findrpr
r
r�testNAT~s
zViaTests.testNATcCs"d}t�|�}|�|��|�dS)zZ
        Parsing and serializing Via headers with unknown parameters should work.
        z?SIP/2.0/UDP example.com:5060;branch=a12345b;bogus;pie=deliciousN)rr]r r#rpr
r
r�test_unknownParams�s
zViaTests.test_unknownParamsN)
rrrr`rdrqrurxr�r�r�r�r�r
r
r
rr\s
r\c@seZdZdd�Zdd�ZdS)�URLTestscCs$dD]}|�t�|���|�qdS)N)zsip:j.doe@big.comz&sip:j.doe:secret@big.com;transport=tcpz!sip:j.doe@big.com?subject=projectzsip:example.com)r r�parseURLr#)r�urlr
r
r�
testRoundtrip�szURLTests.testRoundtripcCsZd}t�|�}dddddddd	d
ddd
gfdddd�ffD]\}}|�t||�|�q:dS)Nzesip:user:pass@hosta:123;transport=udp;user=phone;method=foo;ttl=12;maddr=1.2.3.4;blah;goo=bar?a=b&c=d)�username�user)Zpassword�pass)rbZhosta)rc�{)raZudp)ZusertypeZphone)r!r@)rl�)rm�1.2.3.4�otherZblahzgoo=barr$�b�d)�arQ)rr�r �getattr)rr_r��kr^r
r
r�testComplex�s

�zURLTests.testComplexN)rrrr�r�r
r
r
rr��s
r�c@seZdZdd�ZdS)�
ParseTestsc
Cs�dddifdddifdddifdddifdd	dd
dd�ffD]D\}}}}t�|�\}}}|�||�|�|��|�|�||�q<dS)
Nz""A. G. Bell" <sip:foo@example.com>z
A. G. Bellzsip:foo@example.comzAnon <sip:foo@example.com>ZAnonr?z<sip:foo@example.com>z)foo <sip:foo@example.com>;tag=bar;foo=bazr@rAZbaz)�tagr@)rZparseAddressr r#)rZaddress�nameZurlsZparamsZgnameZgurlZgparamsr
r
r�testParseAddress�s"�


��	zParseTests.testParseAddressN)rrrr�r
r
r
rr��sr�c@seZdZdd�ZdS)�DummyLocatorcCst�tjddd��S)N�
server.comrs�rc)rZsucceedr�URL�rZ
logicalURLr
r
r�
getAddress�szDummyLocator.getAddressN�rrrr�r
r
r
rr��sr�c@seZdZdd�ZdS)�FailingLocatorcCst�t��Sr)rZfail�LookupErrorr�r
r
rr��szFailingLocator.getAddressNr�r
r
r
rr��sr�c@sTeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�ZdS)�
ProxyTestscs0t�d��_t��j_g�_�fdd��j_dS)N�	127.0.0.1cs�j�||f�Sr��sentr��dest�msgrr
rr�rz"ProxyTests.setUp.<locals>.<lambda>)rZProxy�proxyr��locatorr��sendMessagerr
rrr�s
zProxyTests.setUpcCs�t�dd�}|�dt�d����|�dt�d����|�dd�|�dd	�|�d
d�|j�|��d�|�t|j	�d
�|j	d\}}|�|j
d�|�|jd�|�|j��d�|�|j
d�|�|jddddg�dS)Nr*r+rMr�z1.2.3.5r@rAr1�<sip:joe@server.com>�contactz<sip:joe@1.2.3.5>�r�rsrrrsr��SIP/2.0/UDP 127.0.0.1:5060�SIP/2.0/UDP 1.2.3.4:5060zSIP/2.0/UDP 1.2.3.5:5060)rrTrUrvr#r��datagramReceivedr r4r�rcrbr"r!r$�rrWr�r'r
r
r�testRequestForward�s&��zProxyTests.testRequestForwardcCs�t�dd�}|�dt�d����|�dd�|�dd�|�d	d
�|j�|��d�|jd\}}|�|j	dd
dg�dS)Nr*r+rMr�r@rAr1r�r�z<sip:joe@1.2.3.4>�z1.1.1.1rsrr�z)SIP/2.0/UDP 1.2.3.4:5060;received=1.1.1.1)
rrTrUrvr#r�r�r�r r$r�r
r
r�testReceivedRequestForward�s��z%ProxyTests.testReceivedRequestForwardcCsHt�d�}|�dt�d����|j�|��d�|�t|j	�d�dS)NrFrM�foo.comr�r)
rrYrUrvr#r�r�r r4r�rVr
r
r�testResponseWrongVia�s
zProxyTests.testResponseWrongViacCs�t�d�}|�dt�d����|�dtjddd����|j�|��d�|�t|j	�d�|j	d	\}}|�|j
|jfd
�|�|jd�|�|j
ddg�dS)NrFrMr��
client.com��r�r�rr)r�r�zSIP/2.0/UDP client.com:1234)rrYrUrvr#r�r�r r4r�rbrcrIr$r�r
r
r�testResponseForwards
zProxyTests.testResponseForwardcCs�t�d�}|�dt�d����|�dtjddd����|j�|��d�|�t|j	�d�|j	d	\}}|�|j
|jfd
�dS)NrFrMr�r�r�)r�r�rr�r�rs)rrYrUrvr#r�r�r r4r�rbrcr�r
r
r�testReceivedResponseForward
s
�z&ProxyTests.testReceivedResponseForwardcs�t�d�}|�dt�d����g��fdd�|j_|j�|��d�|�t	��d��d\}}|�t	|j
�dg��d�|�|jd�dS)	NrFrMr�cs
��|�Sr)r)r��rr
rrrz-ProxyTests.testResponseToUs.<locals>.<lambda>r�rr)
rrYrUrvr#r�ZgotResponser�r r4r$�getrI)rrWr'�addrr
r�r�testResponseToUss
zProxyTests.testResponseToUscCs\t�dd�}|�dt�d����|�dt�d����|j�|��d�|�|jg�dS)Nr*r+rMr�r�r�)	rrTrUrvr#r�r�r r�rVr
r
r�testLoop%s
zProxyTests.testLoopcCs�t�dd�}|�dt�d����|�dd�t�|j_|j�|��d�|�	t
|j�d�|jd	\}}|�	|j|j
fd�|�	|jd
�|�	|jddg�dS)Nr*r+rMr�r1r�r�rri�r�)rrTrUrvr#r�r�r�r�r r4r�rbrcrIr$r�r
r
r�testCantForwardRequest-s
z!ProxyTests.testCantForwardRequestN)rrrrr�r�r�r�r�r�r�r�r
r
r
rr��s
r�c@sleZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�ZdS)�RegistrationTestscsFtjdd��_t�d��_�j�j_�j_g�_�fdd��j_dS)Nr��rb�bell.example.comcs�j�||f�Srr�r�rr
rrBrz)RegistrationTests.setUp.<locals>.<lambda>)r�
RegisterProxyr��InMemoryRegistry�registryr�r�r�rr
rrr=s
zRegistrationTests.setUpcCs&|jj��D]\}}|��q|`dSr)r��users�values�cancelr�)rr�r"r
r
r�tearDownEs
zRegistrationTests.tearDowncCsPt�dd�}|�dd�|�dd�|�dt�d����|j�|��d	�dS)
N�REGISTER�sip:bell.example.comr1�sip:joe@bell.example.comr��sip:joe@client.com:1234rMr�r��rrTrUrvr#r�r�rVr
r
r�registerKs
zRegistrationTests.registercCs\t�dd�}|�dd�|�dd�|�dt�d����|�d	d
�|j�|��d�dS)Nr�r�r1r�r��*rMr��expiresr>r�r�rVr
r
r�
unregisterSszRegistrationTests.unregistercCs|��|jd\}}|�|j|jfd�|�|jd�|�|jddg�|�|jddg�|�|jdd	g�tt�t	kr�|�
t|jd
d�dk�|�t|j
j�d�|j
jd
\}}|�|��d	�|jj�tjd
dd��}|�dd��|�|jd�|S)Nrr�rFrM�SIP/2.0/UDP client.com:5060r1r�r��sip:joe@client.com:5060r�)iiiirr-r��r�rbcSs|j|jfSr�rbrc)Zdesturlr
r
rrorz0RegistrationTests.testRegister.<locals>.<lambda>)r�r�r rbrcrIr$�typerrrt�intr4r�r�r#r�r�r�rr��addCallback)rr�r'Zdcr"r�r
r
r�testRegister\s(��zRegistrationTests.testRegistercCs�|��|��|jd\}}|�|j|jfd�|�|jd�|�|jddg�|�|jddg�|�|jdd	g�|�|jd
dg�|�|jj	i�dS)Nrr�rFrMr�r1r�r�r�r�r>)
r�r�r�r rbrcrIr$r�r��rr�r'r
r
r�testUnregistertsz RegistrationTests.testUnregistercCs:t�}t�|�}t��}|�dd�|�|�||j_dS)NzuserXname@127.0.0.1Z	passXword)rrZPortalrZ'InMemoryUsernamePasswordDatabaseDontUseZaddUserZregisterCheckerr�)rrW�prQr
r
r�	addPortal�s

zRegistrationTests.addPortalcCsV|��|��|�t|jj�d�|�t|j�d�|jd\}}|�|jd�dS)Nrri�)r�r�r r4r�r�r�rIr�r
r
r�testFailedAuthentication�sz*RegistrationTests.testFailedAuthenticationcCsbt�dd�}|�dd�|�dd�|�dt�d����|j�|��d	�|�t|j	�d
�dS)Nr�z
sip:wrong.comr1r�r�r�rMr�r�r�
rrTrUrvr#r�r�r r4r�rVr
r
r�testWrongDomainRegister�sz)RegistrationTests.testWrongDomainRegistercCsbt�dd�}|�dd�|�dd�|�dt�d����|j�|��d	�|�t|j	�d
�dS)Nr�r�r1zsip:joe@foo.comr�r�rMr�r�rr�rVr
r
r�testWrongToDomainRegister�sz+RegistrationTests.testWrongToDomainRegistercCs4|��tjddd�}|jj�|�}|�|t�|S)Nr-r�r��r�rr�r�r�r�Z
assertFailurer��rr�r�r
r
r�testWrongDomainLookup�s
z'RegistrationTests.testWrongDomainLookupcCs4|��tjddd�}|jj�|�}|�|t�|S)NZjaner�r�r�r�r
r
r�testNoContactLookup�s
z%RegistrationTests.testNoContactLookupN)rrrrr�r�r�r�r�r�r�r�r�r�r�r
r
r
rr�;s	
	
		r�c@seZdZdd�Zdd�ZdS)�ClientcCs tj�|�g|_t��|_dSr)r�Base�__init__r�rZDeferred�deferredrr
r
rr��szClient.__init__cCs|j�|�|j�|j�dSr)r�rr��callback)rZresponser�r
r
r�handle_response�szClient.handle_responseN)rrrr�r�r
r
r
rr��sr�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�	LiveTestscCsztjdd�|_t�d�|_|j|j_|j_tjd|jdd�|_t	�|_
tjd|j
dd�|_|j��j
|j��jf|_dS)Nr�r�r�r)Z	interface)rr�r�r�r�r�rZ	listenUDP�
serverPortr��client�
clientPort�getHostrbrc�
serverAddressrr
r
rr�s"��

�zLiveTests.setUpcCsH|jj��D]\}}|��qt�|jj�}t�|jj�}t�	||g�Sr)
r�r�r�r�rZ
maybeDeferredr�Z
stopListeningr�Z
gatherResults)rr�r"Zd1Zd2r
r
rr��s

zLiveTests.tearDowncs��j��j}t�dd�}|�dd�|�dd|�|�dtjd|d	�����j�	tj
d�jd
d�|��jj}�fdd
�}|�
|�|S)Nr�r�r1r�r��sip:joe@127.0.0.1:%drMr�r�rr�cs*��t|�d�|d}��|jd�dS�NrrrF�r r4rI�r�rWrr
r�check�sz%LiveTests.testRegister.<locals>.check)r�r�rcrrTrUrvr#r�r�r�r�r�r�)rr�rWr�rr
rrr��s�
zLiveTests.testRegistercs��j��j}t�dd�}|�dd�|�dd|�|�dtjd|d	d
�����j�j	gd�}��
t|�d���
|d
dd���
|d
dt��j
�tjd�jdd�|��j
j}�fdd�}|�|�|S)ap
        rport is allowed without a value, apparently because server
        implementors might be too stupid to check the received port
        against 5060 and see if they're equal, and because client
        implementors might be too stupid to bind to port 5060, or set a
        value on the rport parameter they send if they bind to another
        port.
        r�r�r1r�r�r�rMr�T)rcrhr{rrrr|r}r�cs*��t|�d�|d}��|jd�dSr�r�rrr
rrsz)LiveTests.test_amoralRPort.<locals>.check)r�r�rcrrTrUrvr#r�test_amoralRPortr r4r�r�r�r�r�r�r�)rr�rWr�r�rr
rrr�s4	�
�
���
zLiveTests.test_amoralRPortN)rrrrr�r�rr
r
r
rr��s
r�)(rRZtwisted.credrrZtwisted.internetrrZtwisted.protocolsrZ
twisted.trialrZtwisted.internet.asyncioreactorrZzope.interfacer	�replacer3r9r;rBrHrDZrequest_nattedrNrZTestCaserrPrSr\r�r�ZILocatorr�r�r�r�r�r�r�r
r
r
r�<module>sr
�	��
�����zl|