
    M/eR                     T   d Z ddlZddlZddlZddlmZ ddlmZ ddlmZ ddlZddlm	Z	 ddl
Z
ddlmZ d Zd	 Zej                  d
        Zd Z G d dej$                        Z G d de      Zedk(  r4 ej,                   e
j.                  ej0                  dd egz                yy)z*Tests for certbot._internal.error_handler.    N)Callable)Dict)Union)mock)osc                 T    | D ci c]  }|t        j                  |       c}S c c}w )z,Get the handlers for an iterable of signums.)signal	getsignal)signumsss     L/usr/lib/python3/dist-packages/certbot/_internal/tests/error_handler_test.pyget_signalsr      s&    ,34qAv""444s   %c                 `    | j                         D ]  \  }}t        j                  ||        y)zDSet the signal (keys) with the handler (values) from the input dict.N)itemsr	   )sig_handler_dictr   hs      r   set_signalsr      s,     &&( 1a    c              #      K   g t        |       }t        | D ci c]  }|fd
 c}        t        |       yc c}w w)z Context manager to catch signalsc                 &    j                  |       S N)append)r   _signalss     r   <lambda>z!signal_receiver.<locals>.<lambda>    s    !2 r   N)r   r   )r   prev_handlersr   r   s      @r   signal_receiverr      sD      G;Fw;OMGDq22DE
M Es   A>Ac                 T    t        j                  t        j                         |        y)zSend the given signalN)r   killgetpid)signums    r   send_signalr"   %   s    GGBIIK r   c                   :    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
y	)
ErrorHandlerTestz7Tests for certbot._internal.error_handler.ErrorHandler.c                     ddl m} t        j                         | _        dh| _        ddi| _         |j                  | j                  g| j
                  i | j                  | _        |j                  | _
        y )Nr   error_handler*   foobar)certbot._internalr'   r   	MagicMock	init_func	init_argsinit_kwargsErrorHandlerhandler_SIGNALSr   )selfr'   s     r   setUpzErrorHandlerTest.setUp-   sn    3)!5>1}11$.. F37>>F484D4DF
 %--r   c                     d}	 | j                   5  t        # 1 sw Y   nxY wn# t        $ r d}Y nw xY w|sJ  | j                  j                  | j                  i | j
                   y )NFT)r1   
ValueErrorr-   assert_called_once_withr.   r/   )r3   exception_raiseds     r   test_context_managerz%ErrorHandlerTest.test_context_manager:   sy     	$ !  ! ! ! 	$#	$  ... 	C151A1A	Cs   $  $ 22c                 2   | j                   s| j                  d       t        | j                         }t        | j                         5 }| j                  5  d}t        | j                   d          |dz  }d d d        d d d        dk(  sJ | j                   d   gk(  sJ  | j                  j                  | j                  i | j                   | j                   D ]  }||   t        j                  |      k(  rJ  y # 1 sw Y   xY w# 1 sw Y   xY w)N%Signals cannot be handled on Windows.reasonr(   r   
   )r   skipTestr   r   r1   r"   r-   r7   r.   r/   r	   r
   )r3   init_signalssignals_receivedshould_be_42r!   s        r    test_context_manager_with_signalz1ErrorHandlerTest.test_context_manager_with_signalF   s   ||MM!HMI"4<<0T\\* 	#.> #!DLLO,"#	# \!!!Q $4444... 	C151A1A	Cll 	DF'6+;+;F+CCCC	D# #	# 	#s$   	D D6DD
	DDc                 P   t        j                  t        g      }| j                  j	                  |       	 | j                  5  t        # 1 sw Y   nxY wn# t        $ r Y nw xY w | j
                  j                  | j                  i | j                   |j                          y )Nside_effect)	r   r,   r6   r1   registerr-   r7   r.   r/   )r3   bad_funcs     r   test_bad_recoveryz"ErrorHandlerTest.test_bad_recoveryZ   s    >>zl;h'	 !  ! ! ! 		... 	C151A1A	C((*s#   A AAA 	A$#A$c                 $   | j                   s| j                  d       | j                   d   | j                   d   }t        j                  fd      }| j                  j                  |       t        | j                         5 }| j                  5  t        |       d d d        d d d        |gk(  sJ  | j                  j                  | j                  i | j                   |j                          y # 1 sw Y   [xY w# 1 sw Y   _xY w)Nr;   r<   r   c                      t               S r   )r"   )sig1s   r   r   z@ErrorHandlerTest.test_bad_recovery_with_signal.<locals>.<lambda>k   s    k$6G r   rE   )r   r?   r   r,   r1   rG   r   r"   r-   r7   r.   r/   )r3   sig2rH   rA   rM   s       @r   test_bad_recovery_with_signalz.ErrorHandlerTest.test_bad_recovery_with_signalf   s    ||MM!HMI||A||B>>.GHh'T\\* 	".> "D!"	" d|////... 	C151A1A	C((*" "	" 	"s$   DC: D:D	?DDc                     	 | j                   5  t        j                  d       d d d        | j                  j
                  du sJ y # 1 sw Y   $xY w# t        $ r Y 2w xY w)Nr   F)r1   sysexit
SystemExitr-   called)r3   s    r   test_sysexit_ignoredz%ErrorHandlerTest.test_sysexit_ignoredu   sY    	  ~~$$---	  		s'   A AA AA 	AAc                     t        j                         }| j                  j                  |       | j                  5  	 d d d        | j                  j                          |j                          y # 1 sw Y   4xY wr   )r   r,   r1   rG   r-   assert_not_calledr3   funcs     r   test_regular_exitz"ErrorHandlerTest.test_regular_exit}   s[    ~~d#\\ 		((* 	 	s   A11A:N)__name__
__module____qualname____doc__r4   r9   rC   rI   rO   rU   rZ    r   r   r$   r$   *   s*    A.
CD(
++.!r   r$   c                   (     e Zd ZdZ fdZd Z xZS )ExitHandlerTestz6Tests for certbot._internal.error_handler.ExitHandler.c                     ddl m} t        |            |j                  | j
                  g| j                  i | j                  | _        y )Nr   r&   )	r+   r'   superr4   ExitHandlerr-   r.   r/   r1   )r3   r'   	__class__s     r   r4   zExitHandlerTest.setUp   sF    30}00 E26..E373C3CEr   c                 &   t        j                         }| j                  j                  |       | j                  5  	 d d d         | j                  j
                  | j                  i | j                   |j                          y # 1 sw Y   JxY wr   )r   r,   r1   rG   r-   r7   r.   r/   rX   s     r   rZ   z!ExitHandlerTest.test_regular_exit   su    ~~d#\\ 		... 	C151A1A	C$$&		 	s   BB)r[   r\   r]   r^   r4   rZ   __classcell__)re   s   @r   ra   ra      s    @E'r   ra   __main__   )r^   
contextlibr	   rQ   typingr   r   r   unittestr   pytestcertbot.compatr   r   r   contextmanagerr   r"   TestCaser$   ra   r[   rR   mainargv__file__r_   r   r   <module>rt      s    0   
       5
  !
Y!x(( Y!x'& '( zCHH[V[[!"
234 r   