+
    üÐj�  ã                   ób  € R t ^ RIHt ^ RIHtHtHt ^ RIt^ RI	H
t
 ^ RIHt ^ RIHtHt ^ RIHt ^RIHt ^R	IHt ^R
IHt ^RIHtHt ^RIHt ^RIHt ^RIHt  ! R R]P@                  PB                  PD                  4      t# ! R R]P@                  PB                  PD                  4      t$R# )z0
Tests for L{twisted.application.twist._twist}.
)Ústdout)ÚAnyÚDictÚListN)ÚIReactorCore)ÚMemoryReactor)ÚLogLevelÚjsonFileLogObserver)ÚSignalCapturingMemoryReactor)Ú
ExitStatus©ÚRunner)Ú	DummyExit)ÚIServiceÚMultiService)Ú_twist)ÚTwistOptions)ÚTwistc                   óØ   a € ] tR t^t o RtV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR	 ltV 3R
 lR lt	V 3R lR lt
V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltRtV tR# )Ú
TwistTestsz
Tests for L{Twist}.
c                ó   <€ V ^8„  d   QhRR/# ©é   ÚreturnN© )ÚformatÚ__classdict__s   "€ÚK/usr/lib/python3/dist-packages/twisted/application/twist/test/test_twist.pyÚ__annotate__ÚTwistTests.__annotate__   s   ø€ ÷ #ñ #�tñ #ó    c                ó&   € V P                  4        R # ©N)ÚpatchInstallReactor©Úselfs   &r   ÚsetUpÚTwistTests.setUp   s   € Ø× Ñ Ö"r    c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r   !   s   ø€ ÷ .ñ .˜4ñ .r    c                óf   € \        4       V n        V P                  \        RV P                  4       R# )zH
Patch L{_twist.exit} so we can capture usage and prevent actual exits.
ÚexitN)r   r*   Úpatchr   r$   s   &r   Ú	patchExitÚTwistTests.patchExit!   s!   € ô “KˆŒ	Ø�
‰
”6˜6 4§9¡9Ö-r    c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r   (   s   ø€ ÷ Cñ C Tñ Cr    c                óV   a € / S n         R V 3R llpS P                  \        RV4       R# )zW
Patch C{_options.installReactor} so we can capture usage and prevent
actual installs.
c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r   Ú_Únamer   )r   Ústrr   )r   s   "r   r   Ú4TwistTests.patchInstallReactor.<locals>.__annotate__/   s!   € ÷ 	ñ 	œlð 	´#ð 	¼,ñ 	r    c                 ó:   <€ \        4       pVSP                  V&   V# r"   )r   ÚinstalledReactors)r1   r2   Úreactorr%   s   && €r   ÚinstallReactorÚ6TwistTests.patchInstallReactor.<locals>.installReactor/   s   ø€ Ü#“oˆGØ+2ˆD×"Ñ" 4Ñ(ØˆNr    r8   N)r6   r+   r   )r%   r8   s   f r   r#   ÚTwistTests.patchInstallReactor(   s*   ø€ ð
 ;=ˆÔ÷	ð 	ð
 	�
‰
”<Ð!1°>ÖBr    c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r   6   s   ø€ ÷ 
?ñ 
? 4ñ 
?r    c                óV   a € . S n         R V 3R llpS P                  \        RV4       R# )zW
Patch L{MultiService.startService} so we can capture usage and prevent
actual starts.
c                ó(   € V ^8„  d   QhR\         RR/# )r   Úservicer   N)r   )r   s   "r   r   Ú2TwistTests.patchStartService.<locals>.__annotate__=   s   € ÷ 	/ñ 	/¤(ð 	/¨tñ 	/r    c                 ó>   <€ SP                   P                  V 4       R # r"   )ÚserviceStartsÚappend)r>   r%   s   &€r   ÚstartServiceÚ2TwistTests.patchStartService.<locals>.startService=   s   ø€ Ø×Ñ×%Ñ% gÖ.r    rC   N)rA   r+   r   )r%   rC   s   f r   ÚpatchStartServiceÚTwistTests.patchStartService6   s)   ø€ ð
 .0ˆÔ÷	/ð 	/ð 	�
‰
”< °Ö>r    c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r   B   s   ø€ ÷ 5ñ 5¨Dñ 5r    c                ób   € \         P                  ! RR.4      pV P                  V\        4       R# )z9
L{Twist.options} given valid arguments returns options.
ÚtwistÚwebN)r   ÚoptionsÚassertIsInstancer   )r%   rK   s   & r   Útest_optionsValidArgumentsÚ%TwistTests.test_optionsValidArgumentsB   s'   € ô —-’- ¨%Ð 0Ó1ˆà×Ñ˜g¤|Ö4r    c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r   J   s   ø€ ÷ 
ñ 
¨dñ 
r    c                óî  € V P                  4        \        P                  ! RR.4       V P                  V P                  P
                  \        P                  4       V P                  V P                  P                  4       V P                  V P                  P                  P                  R4      4       V P                  V P                  P                  P                  R\        4        24      4       R# )zh
L{Twist.options} given invalid arguments exits with
L{ExitStatus.EX_USAGE} and an error/usage message.
rI   z--bogus-bagelszError: z

N)r,   r   rK   ÚassertIdenticalr*   Ústatusr   ÚEX_USAGEÚassertIsNotNoneÚmessageÚ
assertTrueÚ
startswithÚendswithr   r$   s   &r   Útest_optionsInvalidArgumentsÚ'TwistTests.test_optionsInvalidArgumentsJ   s¯   € ð
 	�‰Ôä�Š�wÐ 0Ð1Ô2à×Ñ˜TŸY™Y×-Ñ-¬z×/BÑ/BÔCØ×Ñ˜TŸY™Y×.Ñ.Ô/Ø�‰Ø�I‰I×Ñ×(Ñ(¨Ó3ô	
ð 	�‰Ø�I‰I×Ñ×&Ñ&Ø”|“~Ð&Ð'óö	
r    c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r   ^   s   ø€ ÷ 6ñ 6˜dñ 6r    c                óä   € \         P                  ! RR.4      p\         P                  ! VP                  R,          VP                  4      pV P                  \        P                  ! V4      4       R# )z*
L{Twist.service} returns an L{IService}.
rI   rJ   N)r   rK   r>   ÚpluginsÚ
subOptionsrV   r   Ú
providedBy)r%   rK   r>   s   &  r   Útest_serviceÚTwistTests.test_service^   sM   € ô —-’- ¨%Ð 0Ó1ˆÜ—-’- §¡°Õ 6¸×8JÑ8JÓKˆØ�‰œ×+Ò+¨GÓ4Ö5r    c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r   f   s   ø€ ÷ 
ñ 
 4ñ 
r    c                óÈ  € \         P                  ! RR.4      pVR,          pVP                  pVf   Q h\         P                  ! VP                  V,          VP
                  R7      pV P                  4        \         P                  ! W$4       V P                  V P                  V.4       V P                  VP                  R,          R,          VP                  R/ 3.4       R# )	zs
L{Twist.startService} starts the service and registers a trigger to
stop the service when the reactor shuts down.
rI   rJ   r7   N)ÚpluginrK   ÚbeforeÚshutdownr   )r   rK   Ú
subCommandr>   r]   r^   rE   rC   ÚassertEqualrA   ÚtriggersÚstopService)r%   rK   r7   rg   r>   s   &    r   Útest_startServiceÚTwistTests.test_startServicef   sÂ   € ô
 —-’- ¨%Ð 0Ó1ˆà˜)Õ$ˆØ×'Ñ'ˆ
ØÒ%Ð%Ð%Ü—-’-Ø—?‘? :Õ.Ø×&Ñ&ô
ˆð
 	×ÑÔ ä×Ò˜7Ô,à×Ñ˜×+Ñ+¨g¨YÔ7Ø×ÑØ×Ñ˜XÕ& zÕ2°g×6IÑ6IÈ2ÈrÐ5RÐ4Sö	
r    c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r   ~   s   ø€ ÷ 
ñ 
˜$ñ 
r    c           
     óž  a€ . oV P                  \        RV3R l4       V P                  \        RR 4       \        P                  ! . RO4      p\        P                  ! V4       V P                  \        S4      ^4       V P                  S^ ,          \        V P                  R,          \        P                  \        \        R7      4       R# )	zQ
L{Twist.run} runs the runner with arguments corresponding to the given
options.
Ú__init__c                 ó&   <€ SP                  V4      # r"   )rB   )r%   ÚargsÚargsSeens   &,€r   Ú<lambda>Ú%TwistTests.test_run.<locals>.<lambda>…   s   ø€ ¸H¿O¹OÈDÔ<Qr    Úrunc                 ó   € R # r"   r   r$   s   &r   rs   rt   †   s   € ©tr    Údefault©r7   ÚdefaultLogLevelÚlogFileÚfileLogObserverFactoryN©rI   z--reactor=defaultz--log-format=jsonrJ   )r+   r   r   rK   ru   rh   ÚlenÚdictr6   r   Úinfor   r	   )r%   ÚtwistOptionsrr   s   & @r   Útest_runÚTwistTests.test_run~   s—   ø€ ð
 ˆà�
‰
”6˜:Ô'QÔRØ�
‰
”6˜5Ñ"3Ô4ä—}’}ÚFó
ˆô 	�	Š	�,Ôà×Ñœ˜X›¨Ô*Ø×ÑØ�Q�KÜØ×.Ñ.¨yÕ9Ü (§¡ÜÜ':ô	ö	
r    c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r   ˜   s   ø€ ÷ !-ñ !-˜4ñ !-r    c           
     ó  a€ V P                  4        . o ! V3R lR4      pV P                  \        RV4       \        P                  ! . RO4       V P                  \        V P                  4      ^4       V P                  \        S4      ^4       V P                  S^ ,          P                  \        V P                  R,          \        P                  \        \        R7      4       V P                  S^ ,          P                  ^4       R# )za
L{Twist.main} runs the runner with arguments corresponding to the given
command line arguments.
c                   óL   <a € ] tR t^¡t o V 3R lV3R lltV 3R lR ltRtV tR# )Ú$TwistTests.test_main.<locals>.Runnerc                ó$   <€ V ^8„  d   QhRS[ RR/# )r   Úkwargsr   N)r   )r   r   s   "€r   r   Ú1TwistTests.test_main.<locals>.Runner.__annotate__¢   s   ø€ ÷ %ñ %©ð %°ñ %r    c                óD   <€ Wn         ^ V n        SP                  V 4       R# )é    N)rq   ÚrunsrB   )r%   rˆ   Úrunnerss   &,€r   ro   Ú-TwistTests.test_main.<locals>.Runner.__init__¢   s   ø€ Ø"”	Ø�”	Ø—‘˜tÖ$r    c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r‰   §   s   ø€ ÷ ñ ˜Tñ r    c                ó8   € V ;P                   ^,          un         R# )é   N)rŒ   r$   s   &r   ru   Ú(TwistTests.test_main.<locals>.Runner.run§   s   € Ø—	’	˜Q•—	r    )rq   rŒ   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ro   ru   Ú__static_attributes__Ú__classdictcell__)r   r�   s   @€r   r   r†   ¡   s   ù‡ € ÷%ó %÷
ö r    r   rw   rx   Nr|   )rE   r+   r   r   Úmainrh   r}   rA   rq   r~   r6   r   r   r   r	   rŒ   )r%   r   r�   s   & @r   Ú	test_mainÚTwistTests.test_main˜   sÄ   ø€ ð
 	×ÑÔ àˆ÷	ô 	ð 	�
‰
”6˜8 VÔ,ä�
Š
ÒMÔNà×Ñœ˜T×/Ñ/Ó0°!Ô4Ø×Ñœ˜W› qÔ)Ø×ÑØ�A�J�O‰OÜØ×.Ñ.¨yÕ9Ü (§¡ÜÜ':ô	ô	
ð 	×Ñ˜ �Ÿ™¨!Ö,r    )r*   r6   rA   N)r“   r”   r•   r–   Ú__doc__r&   r,   r#   rE   rM   rY   r`   rk   r�   rš   r—   r˜   ©r   s   @r   r   r      sp   ø‡ € ñ÷#ð #÷.ð .÷Cð C÷
?ð 
?÷5ð 5÷
ð 
÷(6ð 6÷
ð 
÷0
ð 
÷4!-ö !-r    r   c                   ól   a € ] tR t^¼t o RtV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR	 ltR
t	V t
R# )ÚTwistExitTestszf
Tests to verify that the Twist script takes the expected actions related
to signals and the reactor.
c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   ÚTwistExitTests.__annotate__Â   s   ø€ ÷ 9ñ 9�tñ 9r    c                ó�   a € R S n         R V 3R llpS P                  \        RV4       R R lpS P                  \        RV4       R# )Fc                ó(   € V ^8„  d   QhR\         RR/# )r   Úsigr   N)Úint)r   s   "r   r   Ú*TwistExitTests.setUp.<locals>.__annotate__Å   s   € ÷ 	-ñ 	-¤Cð 	-¨Dñ 	-r    c                ó   <€ RSn         R# )zw
Fake to capture whether L{twisted.application._exitWithSignal
was called.

@param sig: Signal value
@type sig: C{int}
TN©ÚexitWithSignalCalled)r¤   r%   s   &€r   ÚfakeExitWithSignalÚ0TwistExitTests.setUp.<locals>.fakeExitWithSignalÅ   s   ø€ ð )-ˆDÖ%r    Ú_exitWithSignalc                ó(   € V ^8„  d   QhR\         RR/# )r   r1   r   Nr   )r   s   "r   r   r¦   Ñ   s   € ÷ 	ñ 	œFð 	 tñ 	r    c                ó   € R# )zy
Prevent Runner from adding new log observers or other
tests outside this module will fail.

@param _: Unused self param
Nr   )r1   s   &r   ÚstartLoggingÚ*TwistExitTests.setUp.<locals>.startLoggingÑ   s   ‚ r    r¯   N)r©   r+   r   r   )r%   rª   r¯   s   f  r   r&   ÚTwistExitTests.setUpÂ   s@   ø€ Ø$)ˆÔ!÷	-ð 	-ð 	�
‰
”6Ð,Ð.@ÔAõ	ð 	�
‰
”6˜>¨<Ö8r    c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r¡   Û   s   ø€ ÷ 4ñ 4°tñ 4r    c                ó¸   € \        4       pRVn        \        4       pWR&   \        VR&   \        P
                  ! V4       V P                  V P                  4       R# )zO
_exitWithSignal is not called if the reactor's _exitSignal attribute
is zero.
Nr7   r{   )r
   Ú_exitSignalr   r	   r   ru   ÚassertFalser©   ©r%   r7   rK   s   &  r   Ú%test_twistReactorDoesntExitWithSignalÚ4TwistExitTests.test_twistReactorDoesntExitWithSignalÛ   sN   € ô
 /Ó0ˆØ"ˆÔÜ“.ˆØ$�	ÑÜ,?ˆÐ(Ñ)ä�	Š	�'ÔØ×Ñ˜×2Ñ2Ö3r    c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r¡   é   s   ø€ ÷ 
4ñ 
4°dñ 
4r    c                óª   € \        4       p\        4       pWR&   \        VR&   \        P                  ! V4       V P                  V P                  4       R# )z‡
_exitWithSignal is not called if the runner's reactor does not
implement L{twisted.internet.interfaces._ISupportsExitSignalCapturing}
r7   r{   N)r   r   r	   r   ru   rµ   r©   r¶   s   &  r   Ú$test_twistReactorHasNoExitSignalAttrÚ3TwistExitTests.test_twistReactorHasNoExitSignalAttré   sE   € ô
  “/ˆÜ“.ˆØ$�	ÑÜ,?ˆÐ(Ñ)Ü�	Š	�'ÔØ×Ñ˜×2Ñ2Ö3r    c                ó   <€ V ^8„  d   QhRR/# r   r   )r   r   s   "€r   r   r¡   õ   s   ø€ ÷ 3ñ 3°$ñ 3r    c                ó¸   € \        4       p^Vn        \        4       pWR&   \        VR&   \        P
                  ! V4       V P                  V P                  4       R# )zJ
_exitWithSignal is called if the runner's reactor exits due
to a signal.
r7   r{   N)r
   r´   r   r	   r   ru   rV   r©   r¶   s   &  r   Ú test_twistReactorExitsWithSignalÚ/TwistExitTests.test_twistReactorExitsWithSignalõ   sL   € ô
 /Ó0ˆØˆÔÜ“.ˆØ$�	ÑÜ,?ˆÐ(Ñ)Ü�	Š	�'ÔØ�‰˜×1Ñ1Ö2r    r¨   N)r“   r”   r•   r–   rœ   r&   r·   r»   r¿   r—   r˜   r�   s   @r   rŸ   rŸ   ¼   s2   ø‡ € ñ÷
9ð 9÷24ð 4÷
4ð 
4÷3ö 3r    rŸ   )%rœ   Úsysr   Útypingr   r   r   Útwisted.trial.unittestÚtwistedÚtwisted.internet.interfacesr   Útwisted.internet.testingr   Útwisted.loggerr   r	   Útwisted.test.test_twistdr
   Úrunner._exitr   Úrunner._runnerr   Úrunner.test.test_runnerr   r>   r   r   rI   r   Ú_optionsr   r   ÚtrialÚunittestÚTestCaser   rŸ   r   r    r   Ú<module>rÐ      sv   ðñõ ß "Ñ "ã Ý 4Ý 2ß 8Ý AÝ &Ý $Ý 0ß -Ý Ý #Ý ô`-�—‘×'Ñ'×0Ñ0ô `-ôFD3�W—]‘]×+Ñ+×4Ñ4ö D3r    