+
    üÐj£@  ã                   óè  € R t ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIH	t	H
t
HtHt ^ RIHt ^ RIHt  ^ RIHt RtR
tRtRtR],          tRtR],          t ! R R]P4                  4      t ! R R4      t ! R R]]P4                  4      t ! R R]]P4                  4      t ! R R]]P4                  4      t ! R R]P4                  4      t  ! R R]P4                  4      t!R	#   ] d    R	tRt L´i ; i) z4
Tests for L{twisted.words.protocols.jabber.client}
)Úsha1)ÚskipIf)Údefer)Úunittest)ÚclientÚerrorÚjidÚ	xmlstream)ÚSASLInitiatingInitializer)Úutility)ÚsslNz//iq[@type="get"]/query[@xmlns="jabber:iq:auth"]z//iq[@type="set"]/query[@xmlns="jabber:iq:auth"]z urn:ietf:params:xml:ns:xmpp-bindz"/iq[@type="set"]/bind[@xmlns="%s"]z#urn:ietf:params:xml:ns:xmpp-sessionz%/iq[@type="set"]/session[@xmlns="%s"]c                   ó2   a € ] tR t^"t o R tR tR tRtV tR# )ÚCheckVersionInitializerTestsc                ó’   € \         P                  ! 4       p\         P                  ! V4      p\        P                  ! V4      V n        R # ©N)r	   ÚAuthenticatorÚ	XmlStreamr   ÚCheckVersionInitializerÚinit)ÚselfÚaÚxss   &  ÚF/usr/lib/python3/dist-packages/twisted/words/test/test_jabberclient.pyÚsetUpÚ"CheckVersionInitializerTests.setUp#   s2   € Ü×#Ò#Ó%ˆÜ× Ò  Ó#ˆÜ×2Ò2°2Ó6ˆŽ	ó    c                óp   € RV P                   P                  n        V P                   P                  4        R# )z#
Test supported version number 1.0
N)é   é    )r   r	   ÚversionÚ
initialize©r   s   &r   ÚtestSupportedÚ*CheckVersionInitializerTests.testSupported(   s&   € ð '-ˆ�	‰	×ÑÔ#Ø�	‰	×ÑÖr   c                óÜ   € RV P                   P                  n        V P                  \        P
                  V P                   P                  4      pV P                  RVP                  4       R# )z;
Test unsupported version number 0.0, and check exception.
zunsupported-versionN)r   r   )	r   r	   r   ÚassertRaisesr   ÚStreamErrorr    ÚassertEqualÚ	condition)r   Úexcs   & r   ÚtestNotSupportedÚ-CheckVersionInitializerTests.testNotSupported/   sM   € ð '-ˆ�	‰	×ÑÔ#Ø×Ñ¤× 1Ñ 1°4·9±9×3GÑ3GÓHˆØ×ÑÐ.°·±Ö>r   ©r   N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r"   r*   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r   r   r   "   s   ø‡ € ò7ò
÷?ð ?r   r   c                   ó0   a € ] tR t^8t o RtR tR tRtV tR# )ÚInitiatingInitializerHarnessaÈ  
Testing harness for interacting with XML stream initializers.

This sets up an L{utility.XmlPipe} to create a communication channel between
the initializer and the stubbed receiving entity. It features a sink and
source side that both act similarly to a real L{xmlstream.XmlStream}. The
sink is augmented with an authenticator to which initializers can be added.

The harness also provides some utility methods to work with event observers
and deferreds.
c                óê   € . V n         \        P                  ! 4       V n        V P                  P                  V n        \
        P                  ! R 4      V n        V P                  V P
                  n        R# )zexample.orgN)Úoutputr   ÚXmlPipeÚpipeÚsinkr	   ÚConnectAuthenticatorÚauthenticatorr!   s   &r   r   Ú"InitiatingInitializerHarness.setUpE   sK   € ØˆŒÜ—O’OÓ%ˆŒ	ØŸ™Ÿ™ˆŒÜ&×;Ò;¸MÓJˆÔØ'+×'9Ñ'9ˆ�‰Ö$r   c                ó°   € \         P                  ! 4       pVP                  V4       V P                  P                  P                  WP                  4       V# )a±  
Observe an output event, returning a deferred.

The returned deferred will be fired when the given event has been
observed on the source end of the L{XmlPipe} tied to the protocol
under test. The handler is added as the first callback.

@param event: The event to be observed. See
    L{utility.EventDispatcher.addOnetimeObserver}.
@param handler: The handler to be called with the observed event object.
@rtype: L{defer.Deferred}.
)r   ÚDeferredÚaddCallbackr:   ÚsourceÚaddOnetimeObserverÚcallback)r   ÚeventÚhandlerÚds   &&& r   ÚwaitForÚ$InitiatingInitializerHarness.waitForL   s=   € ô �NŠNÓˆØ	�‰�gÔØ�	‰	×Ñ×+Ñ+¨E·:±:Ô>Øˆr   )r=   r8   r:   r	   N)	r-   r.   r/   r0   Ú__doc__r   rH   r1   r2   r3   s   @r   r6   r6   8   s   ø‡ € ñ
ò:÷ð r   r6   c                   óN   a a€ ] tR t^_t oRtV 3R ltR tR tR tR t	Rt
VtV ;t# )ÚIQAuthInitializerTestsz(
Tests for L{client.IQAuthInitializer}.
c                óÚ   <€ \         SV `  4        \        P                  ! V P                  4      V n        \        P                  ! R 4      V P                  n        RV P                  n	        R# )úuser@example.com/resourceÚsecretN)
Úsuperr   r   ÚIQAuthInitializerr	   r   r   ÚJIDr=   Úpassword©r   Ú	__class__s   &€r   r   ÚIQAuthInitializerTests.setUpd   sH   ø€ Ü‰‰ŒÜ×,Ò,¨T¯^©^Ó<ˆŒ	Ü!$§¢Ð)DÓ!Eˆ×ÑÔØ&.ˆ×ÑÖ#r   c                ó®   a a€ VV 3R lpV 3R loS P                  \        V4      pS P                  P                  4       p\        P
                  ! W#.4      # )zÀ
Test plain-text authentication.

Act as a server supporting plain-text authentication and expect the
C{password} field to be filled with the password. Then act as if
authentication succeeds.
c                óp  <€ \         P                  ! V R4      pVP                  R4       VP                  P                  R4       VP                  P                  R4       VP                  P                  R4       SP	                  \
        S4      pSP                  P                  P                  V4       V# ©z”
Called when the initializer sent a query for authentication methods.

The response informs the client that plain-text authentication
is supported.
ÚresultÚusernamerS   Úresource©zjabber:iq:authÚquery©	r	   Ú
toResponseÚ
addElementr^   rH   ÚIQ_AUTH_SETr:   rB   Úsend©ÚiqÚresponserG   Ú	onAuthSetr   s   &  €€r   Ú	onAuthGetÚ7IQAuthInitializerTests.testPlainText.<locals>.onAuthGets   ó�   ø€ ô !×+Ò+¨B°Ó9ˆHØ×ÑÐ ;Ô<Ø�N‰N×%Ñ% jÔ1Ø�N‰N×%Ñ% jÔ1Ø�N‰N×%Ñ% jÔ1ð —‘œ[¨)Ó4ˆAð �I‰I×Ñ×!Ñ! (Ô+àˆHr   c                óš  <€ SP                  R\        V P                  P                  4      4       SP                  R\        V P                  P                  4      4       SP                  R\        V P                  P
                  4      4       \        P                  ! V R4      pSP                  P                  P                  V4       R# )ú—
Called when the initializer sent the authentication request.

The server checks the credentials and responds with an empty result
signalling success.
ÚuserrO   r\   rZ   N)r'   Ústrr^   r[   rS   r\   r	   r`   r:   rB   rc   ©re   rf   r   s   & €r   rg   Ú7IQAuthInitializerTests.testPlainText.<locals>.onAuthSetŠ   sŽ   ø€ ð ×Ñ˜V¤S¨¯©×):Ñ):Ó%;Ô<Ø×Ñ˜X¤s¨2¯8©8×+<Ñ+<Ó'=Ô>Ø×Ñ˜Z¬¨R¯X©X×->Ñ->Ó)?Ô@ô !×+Ò+¨B°Ó9ˆHØ�I‰I×Ñ×!Ñ! (Ö+r   )rH   ÚIQ_AUTH_GETr   r    r   ÚgatherResults©r   rh   Úd1Úd2rg   s   f   @r   ÚtestPlainTextÚ$IQAuthInitializerTests.testPlainTextj   sF   ù€ ö	õ.	,ð  �\‰\œ+ yÓ1ˆð �Y‰Y×!Ñ!Ó#ˆÜ×"Ò" B 8Ó,Ð,r   c                óÐ   a a€ VV 3R lpV 3R loRS P                   n        S P                  \        V4      pS P                  P                  4       p\        P                  ! W#.4      # )zò
Test digest authentication.

Act as a server supporting digest authentication and expect the
C{digest} field to be filled with a sha1 digest of the concatenated
stream session identifier and password. Then act as if authentication
succeeds.
c                óp  <€ \         P                  ! V R4      pVP                  R4       VP                  P                  R4       VP                  P                  R4       VP                  P                  R4       SP	                  \
        S4      pSP                  P                  P                  V4       V# )z�
Called when the initializer sent a query for authentication methods.

The response informs the client that digest authentication is
supported.
rZ   r[   Údigestr\   r]   r_   rd   s   &  €€r   rh   Ú4IQAuthInitializerTests.testDigest.<locals>.onAuthGetª   s�   ø€ ô !×+Ò+¨B°Ó9ˆHØ×ÑÐ ;Ô<Ø�N‰N×%Ñ% jÔ1Ø�N‰N×%Ñ% hÔ/Ø�N‰N×%Ñ% jÔ1ð —‘œ[¨)Ó4ˆAð �I‰I×Ñ×!Ñ! (Ô+àˆHr   c                óÈ  <€ SP                  R\        V P                  P                  4      4       SP                  \	        R4      P                  4       \        V P                  P                  4      4       SP                  R\        V P                  P                  4      4       \        P                  ! V R4      pSP                  P                  P                  V4       R# )rl   rm   s   12345secretr\   rZ   N)r'   rn   r^   r[   r   Ú	hexdigestrz   r\   r	   r`   r:   rB   rc   ro   s   & €r   rg   Ú4IQAuthInitializerTests.testDigest.<locals>.onAuthSetÁ   sš   ø€ ð ×Ñ˜V¤S¨¯©×):Ñ):Ó%;Ô<Ø×ÑœT .Ó1×;Ñ;Ó=¼sÀ2Ç8Á8Ç?Á?Ó?SÔTØ×Ñ˜Z¬¨R¯X©X×->Ñ->Ó)?Ô@ô !×+Ò+¨B°Ó9ˆHØ�I‰I×Ñ×!Ñ! (Ö+r   Ú12345)r	   ÚsidrH   rq   r   r    r   rr   rs   s   f   @r   Ú
testDigestÚ!IQAuthInitializerTests.testDigest    sT   ù€ ö	õ.	,ð  %ˆ�‰Ôð �\‰\œ+ yÓ1ˆð �Y‰Y×!Ñ!Ó#ˆä×"Ò" B 8Ó,Ð,r   c                óÞ   a € V 3R lpS P                  \        V4      pS P                  P                  4       pS P	                  V\
        P                  4       \        P                  ! W#.4      # )zD
Test initializer failure of request for fields for authentication.
c                óœ   <€ \         P                  ! R4      P                  V 4      pSP                  P                  P                  V4       R# )zŽ
Called when the initializer sent a query for authentication methods.

The server responds that the client is not authorized to authenticate.
únot-authorizedN©r   ÚStanzaErrorr`   r:   rB   rc   ro   s   & €r   rh   Ú?IQAuthInitializerTests.testFailRequestFields.<locals>.onAuthGetà   s9   ø€ ô ×(Ò(Ð)9Ó:×EÑEÀbÓIˆHØ�I‰I×Ñ×!Ñ! (Ö+r   ©	rH   rq   r   r    ÚassertFailurer   r‡   r   rr   )r   rh   rt   ru   s   f   r   ÚtestFailRequestFieldsÚ,IQAuthInitializerTests.testFailRequestFieldsÛ   sY   ø€ õ
	,ð �\‰\œ+ yÓ1ˆð �Y‰Y×!Ñ!Ó#ˆð 	×Ñ˜2œu×0Ñ0Ô1ä×"Ò" B 8Ó,Ð,r   c                óî   a a€ VV 3R lpV 3R loS P                  \        V4      pS P                  P                  4       pS P	                  V\
        P                  4       \        P                  ! W#.4      # )z+
Test initializer failure to authenticate.
c                óp  <€ \         P                  ! V R4      pVP                  R4       VP                  P                  R4       VP                  P                  R4       VP                  P                  R4       SP	                  \
        S4      pSP                  P                  P                  V4       V# rY   r_   rd   s   &  €€r   rh   Ú6IQAuthInitializerTests.testFailAuth.<locals>.onAuthGetù   rj   r   c                óœ   <€ \         P                  ! R4      P                  V 4      pSP                  P                  P                  V4       R# )z’
Called when the initializer sent the authentication request.

The server checks the credentials and responds with a not-authorized
stanza error.
r…   Nr†   ro   s   & €r   rg   Ú6IQAuthInitializerTests.testFailAuth.<locals>.onAuthSet  s9   ø€ ô ×(Ò(Ð)9Ó:×EÑEÀbÓIˆHØ�I‰I×Ñ×!Ñ! (Ö+r   r‰   rs   s   f   @r   ÚtestFailAuthÚ#IQAuthInitializerTests.testFailAuthô   s^   ù€ ö
	õ.	,ð �\‰\œ+ yÓ1ˆð �Y‰Y×!Ñ!Ó#ˆð 	×Ñ˜2œu×0Ñ0Ô1ä×"Ò" B 8Ó,Ð,r   r,   )r-   r.   r/   r0   rJ   r   rv   r�   r‹   r’   r1   r2   Ú__classcell__©rU   r4   s   @@r   rL   rL   _   s*   ù‡ € ñõ/ò4-òl9-òv-÷2/-ò /-r   rL   c                   óB   a a€ ] tR tRt oRtV 3R ltR tR tRtVt	V ;t
# )ÚBindInitializerTestsi&  z&
Tests for L{client.BindInitializer}.
c                ó¸   <€ \         SV `  4        \        P                  ! V P                  4      V n        \        P                  ! R 4      V P                  n        R# )rN   N)	rP   r   r   ÚBindInitializerr	   r   r   rR   r=   rT   s   &€r   r   ÚBindInitializerTests.setUp+  s:   ø€ Ü‰‰ŒÜ×*Ò*¨4¯>©>Ó:ˆŒ	Ü!$§¢Ð)DÓ!Eˆ×ÑÖr   c                óÌ   a € V 3R lpV 3R lpS P                  \        V4      pS P                  P                  4       pVP	                  V4       \
        P                  ! W4.4      # )z;
Set up a stream, and act as if resource binding succeeds.
c                 óè   <€ \         P                  ! V R 4      pVP                  \        R34       VP                  P                  RRR7       SP
                  P                  P                  V4       R# )rZ   Úbindr   úuser@example.com/other resource)ÚcontentN)r	   r`   ra   ÚNS_BINDr�   r:   rB   rc   ro   s   & €r   ÚonBindÚ.BindInitializerTests.testBasic.<locals>.onBind5  sX   ø€ Ü ×+Ò+¨B°Ó9ˆHØ×Ñ¤¨&Ð 1Ô2Ø�M‰M×$Ñ$ UÐ4UÐ$ÔVØ�I‰I×Ñ×!Ñ! (Ö+r   c                 ó|   <€ SP                  \        P                  ! R 4      SP                  P                  4       R# )rž   N)r'   r   rR   r=   )rZ   r   s   &€r   ÚcbÚ*BindInitializerTests.testBasic.<locals>.cb;  s,   ø€ Ø×ÑÜ—’Ð9Ó:¸D×<NÑ<N×<RÑ<Rör   )rH   ÚIQ_BIND_SETr   ÚstartrA   r   rr   )r   r¡   r¤   rt   ru   s   f    r   Ú	testBasicÚBindInitializerTests.testBasic0  sN   ø€ õ
	,õ	ð
 �\‰\œ+ vÓ.ˆØ�Y‰Y�_‰_ÓˆØ
�‰�rÔÜ×"Ò" B 8Ó,Ð,r   c                óÞ   a € V 3R lpS P                  \        V4      pS P                  P                  4       pS P	                  V\
        P                  4       \        P                  ! W#.4      # )z8
Set up a stream, and act as if resource binding fails.
c                 óœ   <€ \         P                  ! R 4      P                  V 4      pSP                  P                  P                  V4       R# )ÚconflictNr†   ro   s   & €r   r¡   Ú0BindInitializerTests.testFailure.<locals>.onBindJ  s6   ø€ Ü×(Ò(¨Ó4×?Ñ?ÀÓCˆHØ�I‰I×Ñ×!Ñ! (Ö+r   )	rH   r¦   r   r§   rŠ   r   r‡   r   rr   )r   r¡   rt   ru   s   f   r   ÚtestFailureÚ BindInitializerTests.testFailureE  sS   ø€ õ
	,ð �\‰\œ+ vÓ.ˆØ�Y‰Y�_‰_ÓˆØ×Ñ˜2œu×0Ñ0Ô1Ü×"Ò" B 8Ó,Ð,r   r,   )r-   r.   r/   r0   rJ   r   r¨   r®   r1   r2   r”   r•   s   @@r   r—   r—   &  s   ù‡ € ñõFò
-÷*-ò -r   r—   c                   óB   a a€ ] tR tRt oRtV 3R ltR tR tRtVt	V ;t
# )ÚSessionInitializerTestsiT  z)
Tests for L{client.SessionInitializer}.
c                ón   <€ \         SV `  4        \        P                  ! V P                  4      V n        R # r   )rP   r   r   ÚSessionInitializerr	   r   rT   s   &€r   r   ÚSessionInitializerTests.setUpY  s"   ø€ Ü‰‰ŒÜ×-Ò-¨d¯n©nÓ=ˆŽ	r   c                óž   a € V 3R lpS P                  \        V4      pS P                  P                  4       p\        P
                  ! W#.4      # )z@
Set up a stream, and act as if session establishment succeeds.
c                 ó€   <€ \         P                  ! V R 4      pSP                  P                  P	                  V4       R# )rZ   N)r	   r`   r:   rB   rc   ro   s   & €r   Ú	onSessionÚ6SessionInitializerTests.testSuccess.<locals>.onSessionb  s-   ø€ Ü ×+Ò+¨B°Ó9ˆHØ�I‰I×Ñ×!Ñ! (Ö+r   )rH   ÚIQ_SESSION_SETr   r§   r   rr   ©r   r·   rt   ru   s   f   r   ÚtestSuccessÚ#SessionInitializerTests.testSuccess]  s=   ø€ õ
	,ð �\‰\œ.¨)Ó4ˆØ�Y‰Y�_‰_ÓˆÜ×"Ò" B 8Ó,Ð,r   c                óÞ   a € V 3R lpS P                  \        V4      pS P                  P                  4       pS P	                  V\
        P                  4       \        P                  ! W#.4      # )z=
Set up a stream, and act as if session establishment fails.
c                 óœ   <€ \         P                  ! R 4      P                  V 4      pSP                  P                  P                  V4       R# )Ú	forbiddenNr†   ro   s   & €r   r·   Ú6SessionInitializerTests.testFailure.<locals>.onSessiono  s6   ø€ Ü×(Ò(¨Ó5×@Ñ@ÀÓDˆHØ�I‰I×Ñ×!Ñ! (Ö+r   )	rH   r¹   r   r§   rŠ   r   r‡   r   rr   rº   s   f   r   r®   Ú#SessionInitializerTests.testFailurej  sS   ø€ õ
	,ð �\‰\œ.¨)Ó4ˆØ�Y‰Y�_‰_ÓˆØ×Ñ˜2œu×0Ñ0Ô1Ü×"Ò" B 8Ó,Ð,r   r,   )r-   r.   r/   r0   rJ   r   r»   r®   r1   r2   r”   r•   s   @@r   r±   r±   T  s   ù‡ € ñõ>ò-÷-ò -r   r±   c                   ó*   a € ] tR tRt o RtR tRtV tR# )ÚBasicAuthenticatorTestsiy  z:
Test for both BasicAuthenticator and basicClientFactory.
c                óf  € \         P                  ! R4      V n        \        P                  ! V P                  R4      P                  R4      pV P                  RVP                  P                  4       V P                  V P                  VP                  P                   4       V P                  RVP                  P                  4       VP                  w  r#V P                  V\        P                  4       V P                  V\        P                  4       V P                  VP                   4       R# )aÅ  
Authenticator and stream are properly constructed by the factory.

The L{xmlstream.XmlStream} protocol created by the factory has the new
L{client.BasicAuthenticator} instance in its C{authenticator}
attribute.  It is set up with C{jid} and C{password} as passed to the
factory, C{otherHost} taken from the client JID. The stream futher has
two initializers, for TLS and authentication, of which the first has
its C{required} attribute set to C{True}.
rN   rO   Núexample.com)r   rR   Ú
client_jidr   ÚbasicClientFactoryÚbuildProtocolr'   r=   Ú	otherHostrS   ÚinitializersÚassertIsInstancer	   ÚTLSInitiatingInitializerrQ   ÚassertFalseÚrequired)r   r   ÚtlsÚauths   &   r   Ú
test_basicÚ"BasicAuthenticatorTests.test_basic~  sÞ   € ô Ÿ'š'Ð"=Ó>ˆŒô
 ×&Ò& t§¡¸ÓA×OÑOÐPTÓUˆð 	×Ñ˜¨×(8Ñ(8×(BÑ(BÔCØ×Ñ˜Ÿ™¨"×*:Ñ*:×*>Ñ*>Ô?Ø×Ñ˜ 2×#3Ñ#3×#<Ñ#<Ô=ð —O‘O‰	ˆà×Ñ˜c¤9×#EÑ#EÔFØ×Ñ˜d¤F×$<Ñ$<Ô=à×Ñ˜Ÿ™Ö&r   ©rÆ   N)r-   r.   r/   r0   rJ   rÑ   r1   r2   r3   s   @r   rÃ   rÃ   y  s   ø‡ € ñ÷'ð 'r   rÃ   c                   óB   a € ] tR tRt o RtR t]! ]!  R 4       tRt	V t
R# )ÚXMPPAuthenticatorTestsiž  z8
Test for both XMPPAuthenticator and XMPPClientFactory.
c                óx  € \         P                  ! R4      V n        \        P                  ! V P                  R4      P                  R4      pV P                  RVP                  P                  4       V P                  V P                  VP                  P                   4       V P                  RVP                  P                  4       VP                  w  r#rEpV P                  V\        P                  4       V P                  V\        4       V P                  V\        P                  4       V P                  V\        P                   4       V P#                  VP$                  4       V P#                  VP$                  4       V P#                  VP$                  4       V P'                  VP$                  4       R# )zÒ
Test basic operations.

Setup an XMPPClientFactory, which sets up an XMPPAuthenticator, and let
it produce a protocol instance. Then inspect the instance variables of
the authenticator and XML stream objects.
rN   rO   NrÅ   )r   rR   rÆ   r   ÚXMPPClientFactoryrÈ   r'   r=   rÉ   rS   rÊ   rË   r	   rÌ   r
   r™   r³   Ú
assertTruerÎ   rÍ   )r   r   r   rÏ   Úsaslr�   Úsessions   &      r   rÑ   Ú!XMPPAuthenticatorTests.test_basic£  s;  € ô Ÿ'š'Ð"=Ó>ˆŒô
 ×%Ò% d§o¡o°xÓ@×NÑNÈtÓTˆð 	×Ñ˜¨×(8Ñ(8×(BÑ(BÔCØ×Ñ˜Ÿ™¨"×*:Ñ*:×*>Ñ*>Ô?Ø×Ñ˜ 2×#3Ñ#3×#<Ñ#<Ô=ð -/¯O©OÑ)ˆ�d 'à×Ñ˜c¤9×#EÑ#EÔFØ×Ñ˜dÔ$=Ô>Ø×Ñ˜d¤F×$:Ñ$:Ô;Ø×Ñ˜g¤v×'@Ñ'@ÔAà�‰˜Ÿ™Ô%Ø�‰˜Ÿ™Ô&Ø�‰˜Ÿ™Ô&Ø×Ñ˜×)Ñ)Ö*r   c                ó¸  a
€ . o
RV
3R llp\         P                  ! R4      V n        \        P                  ! 4       p\
        P                  ! V P                  RVR7      pV P                  \        P                  RV4       VP                  R4      pVP                  w  rVrxp	V P                  V\        P                  4       V P                  VS
^ ,          4       R# )z7
A TLS configuration is passed to the TLS initializer.
Nc                 ó*   <€ SP                  V4       R # r   )Úappend)r   r   rÎ   ÚconfigurationForTLSÚconfigss   &&&&€r   r   Ú:XMPPAuthenticatorTests.test_tlsConfiguration.<locals>.initË  s   ø€ Ø�N‰NÐ.Ö/r   rN   rO   )rß   Ú__init__)TN)r   rR   rÆ   r   ÚCertificateOptionsr   r×   Úpatchr	   rÌ   rÈ   rÊ   rË   ÚassertIs)r   r   rß   Úfactoryr   r   rÏ   rÙ   r�   rÚ   rà   s   &         @r   Útest_tlsConfigurationÚ,XMPPAuthenticatorTests.test_tlsConfigurationÄ  s²   ø€ ð
 ˆ÷	0ô Ÿ'š'Ð"=Ó>ˆŒô
 "×4Ò4Ó6ÐÜ×*Ò*Ø�O‰O˜XÐ;Nô
ˆð 	�
‰
”9×5Ñ5°zÀ4ÔHØ×"Ñ" 4Ó(ˆð -/¯O©OÑ)ˆ�d 'à×Ñ˜c¤9×#EÑ#EÔFØ�‰Ð)¨7°1­:Ö6r   rÓ   N)r-   r.   r/   r0   rJ   rÑ   r   ÚskipWhenNoSSLrç   r1   r2   r3   s   @r   rÕ   rÕ   ž  s)   ø‡ € ñò+ñB ˆ]Ññ7ó ö7r   rÕ   )FÚ )TzSSL not available)"rJ   Úhashlibr   r   r   Útwisted.internetr   Útwisted.trialÚtwisted.words.protocols.jabberr   r   r   r	   Ú#twisted.words.protocols.jabber.saslr
   Útwisted.words.xishr   r   ré   ÚImportErrorrq   rb   r    r¦   Ú
NS_SESSIONr¹   ÚTestCaser   r6   rL   r—   r±   rÃ   rÕ   © r   r   Ú<module>rõ      sÿ   ðñõ
 Ý å "Ý "ß HÓ HÝ IÝ &ð Ý$ð
  €Mà?€Ø?€Ø
,€Ø2°WÕ<€Ø2€
Ø8¸:ÕE€ô? 8×#4Ñ#4ô ?÷,$ñ $ôND-Ð9¸8×;LÑ;Lô D-ôN+-Ð7¸×9JÑ9Jô +-ô\"-Ð:¸H×<MÑ<Mô "-ôJ"'˜h×/Ñ/ô "'ôJ@7˜X×.Ñ.ö @7øðU ô 0Ø
€CØ/‚Mð0ús   ´C# Ã#C1Ã0C1