a ‚oeRã@sÜdZddlZddlZddlZddlmZddlmZddlmZddlZddlm Z ddl Z ddl m Z dd „Z d d „Zejd d „ƒZdd„ZGdd„dejƒZGdd„deƒZedkrØe e  ejdd…eg¡¡dS)z*Tests for certbot._internal.error_handler.éN)ÚCallable)ÚDict)ÚUnion)Úmock)ÚoscCsdd„|DƒS)z,Get the handlers for an iterable of signums.cSsi|]}|t |¡“qS©)ÚsignalÚ getsignal©Ú.0ÚsrrúKC:\Program Files\Certbot\pkgs\certbot\_internal\tests\error_handler_test.pyÚ ózget_signals..r)Úsignumsrrr Ú get_signalssrcCs"| ¡D]\}}t ||¡qdS)zDSet the signal (keys) with the handler (values) from the input dict.N)Úitemsr)Zsig_handler_dictr Úhrrr Ú set_signalssrc#s4g‰t|ƒ}t‡fdd„|DƒƒˆVt|ƒdS)z Context manager to catch signalscsi|]}|‡fdd„“qS)cs ˆ |¡S©N)Úappend)r Ú_©Úsignalsrr Ú rz,signal_receiver...rr rrr r rz#signal_receiver..N)rr)rZ prev_handlersrrr Úsignal_receivers rcCst t ¡|¡dS)zSend the given signalN)rÚkillÚgetpid)Úsignumrrr Ú send_signal%src@sHeZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dS)ÚErrorHandlerTestz7Tests for certbot._internal.error_handler.ErrorHandler.cCsTddlm}t ¡|_dh|_ddi|_|j|jg|j¢Ri|j¤Ž|_|j |_ dS)Nr©Ú error_handleré*ZfooZbar) Úcertbot._internalr"rÚ MagicMockÚ init_funcÚ init_argsÚ init_kwargsZ ErrorHandlerÚhandlerZ_SIGNALSr©Úselfr"rrr ÚsetUp-s    ÿþzErrorHandlerTest.setUpcCsld}z.|j�t‚Wdƒn1s&0YWntyHd}Yn0|sRJ‚|jj|ji|j¤ŽdS)NFT)r)Ú ValueErrorr&Úassert_called_once_withr'r()r+Zexception_raisedrrr Útest_context_manager:s&   ÿz%ErrorHandlerTest.test_context_managerc Csâ|js|jdd�t|jƒ}t|jƒ�P}|j�*d}t|jdƒ|d9}Wdƒn1s^0YWdƒn1s|0Yd|ks’J‚|jdg|ks¦J‚|jj|ji|j ¤Ž|jD]}||t   |¡ksÂJ‚qÂdS)Nú%Signals cannot be handled on Windows.©Úreasonr#ré ) rÚskipTestrrr)rr&r.r'r(rr )r+Z init_signalsÚsignals_receivedZ should_be_42rrrr Ú test_context_manager_with_signalFs   D  ÿ z1ErrorHandlerTest.test_context_manager_with_signalcCs~tjtgd�}|j |¡z.|j�t‚Wdƒn1s<0YWntyZYn0|jj|ji|j¤Ž| ¡dS)N©Z side_effect) rr%r-r)Úregisterr&r.r'r()r+Úbad_funcrrr Útest_bad_recoveryZs &  ÿz"ErrorHandlerTest.test_bad_recoveryc sÐ|js|jdd�|jd‰|jd}tj‡fdd„d�}|j |¡t|jƒ�>}|j�t|ƒWdƒn1sv0YWdƒn1s”0Y|ˆg|ks®J‚|jj |j i|j ¤Ž|  ¡dS)Nr0r1réÿÿÿÿcstˆƒSr)rr©Zsig1rr rkrz@ErrorHandlerTest.test_bad_recovery_with_signal..r7) rr4rr%r)r8rrr&r.r'r()r+Zsig2r9r5rr<r Útest_bad_recovery_with_signalfs     D ÿz.ErrorHandlerTest.test_bad_recovery_with_signalcCs\z4|j�t d¡Wdƒn1s(0YWntyFYn0|jjdusXJ‚dS)NrF)r)ÚsysÚexitÚ SystemExitr&Zcalled)r+rrr Útest_sysexit_ignoredus , z%ErrorHandlerTest.test_sysexit_ignoredcCsPt ¡}|j |¡|j�Wdƒn1s00Y|j ¡| ¡dSr)rr%r)r8r&Zassert_not_called©r+Úfuncrrr Útest_regular_exit}s   z"ErrorHandlerTest.test_regular_exitN) Ú__name__Ú __module__Ú __qualname__Ú__doc__r,r/r6r:r=rArDrrrr r *s   r cs(eZdZdZ‡fdd„Zdd„Z‡ZS)ÚExitHandlerTestz6Tests for certbot._internal.error_handler.ExitHandler.cs:ddlm}tƒ ¡|j|jg|j¢Ri|j¤Ž|_dS)Nrr!) r$r"Úsuperr,Z ExitHandlerr&r'r(r)r*©Ú __class__rr r,‰s   ÿþzExitHandlerTest.setUpcCs\t ¡}|j |¡|j�Wdƒn1s00Y|jj|ji|j¤Ž| ¡dSr)rr%r)r8r&r.r'r(rBrrr rD�s  ÿz!ExitHandlerTest.test_regular_exit)rErFrGrHr,rDÚ __classcell__rrrKr rI†s rIÚ__main__é)rHÚ contextlibrr>ÚtypingrrrZunittestrZpytestZcertbot.compatrrrÚcontextmanagerrrZTestCaser rIrEr?ÚmainÚargvÚ__file__rrrr Ús&      \