
    M/e@                     T   d Z ddlZddlZddlZddl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mZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmc mZ  ej8                  d      Z ej8                  d      Z G d dej>                        Z  G d dej>                        Z! G d dej>                        Z" G d de"      Z# G d de"      Z$ G d dejJ                        Z&e'dk(  r4 ejP                   ejR                  ejT                  dd e+gz                yy)z#Tests for certbot._internal.client.    N)mock)	MagicMock)
interfaces)errors)util)account)	constants)obj)oszrsa512_key.pemzcsr-san_512.pemc                       e Zd ZdZd Zej                  j                  ej                  ddi      d        Z
ej                  j                  ej                  i       d        Zd Zy)	DetermineUserAgentTestz8Tests for certbot._internal.client.determine_user_agent.c                 2    ddl m}  || j                        S )Nr   )determine_user_agent)certbot._internal.clientr   config)selfr   s     E/usr/lib/python3/dist-packages/certbot/_internal/tests/client_test.py_callzDetermineUserAgentTest._call    s    A#DKK00    CERTBOT_DOCS1c                 (    | j                  d       y )NTexpect_doc_values_testr   s    r   test_docs_valuez&DetermineUserAgentTest.test_docs_value$   s    

T
*r   c                 (    | j                  d       y )NFr   r   r   s    r   test_real_valuesz'DetermineUserAgentTest.test_real_values(   s    

U
+r   c                    | j                         }|r| j                  }| j                  }n| j                  }| j                  } |d|        |d|        |t        j                         |        |t        j                         |       y )NzOS_NAME OS_VERSIONzmajor.minor.patchlevel)r   assertInassertNotInr   get_os_info_uaplatformpython_version)r   r   uadoc_value_checkreal_value_checks        r   r   zDetermineUserAgentTest._test,   sv    ZZ\"mmO#//"..O#}},b10"5,,.3002B7r   N)__name__
__module____qualname____doc__r   r   patchdictr   environr   r    r    r   r   r   r      sb    B1 
ZZ__RZZ.#!67+ 8+ 
ZZ__RZZ$, %,8r   r   c                       e Zd ZdZ fdZd Zed        Zed        Zed        Z	ed        Z
eej                  d               Zd	 Z ej                   d
      d        Z ej&                         d        Z ej                   d      d        Zd Zd Z ej                   d      d        Z ej                   d      d        Z ej&                         d        Z ej&                         d        Zd Zd Z xZS )RegisterTestz,Tests for certbot._internal.client.register.c                 &   t         |           d| j                  _        d| j                  _        d| j                  _        t        j                         | _        t        j                         | _        t        j                  t                      y )Ni   Fzalias@example.com)supersetUpr   rsa_key_sizeregister_unsafely_without_emailemailr   AccountMemoryStorageaccount_storager   r   tos_cbdisplay_objset_displayr   	__class__s    r   r6   zRegisterTest.setUp?   s_    #' 6;3/&;;=nn&	,r   c                 ^    ddl m}  || j                  | j                  | j                        S )Nr   )register)r   rB   r   r;   r<   )r   rB   s     r   r   zRegisterTest._callH   s"    5T%9%94;;GGr   c                  p    t        j                  t        j                        } d| j                  _        | S )Nr@   z{"a": 1})r   Mockr   JSONDeSerializableto_partial_jsonreturn_value)ms    r   _public_key_mockzRegisterTest._public_key_mockL   s)    II
 = =>)3&r   c                       y)Nz/acme/new-accountr1   r1   r   r   _new_acct_dir_mockzRegisterTest._new_acct_dir_mockR   s    "r   c                       yNTr1   r1   r   r   
_true_mockzRegisterTest._true_mockV   s    r   c                       yNFr1   r1   r   r   _false_mockzRegisterTest._false_mockZ   s    r   c               #   |   K   t        j                  d      5 } | j                   d d d        y # 1 sw Y   y xY ww)N$certbot._internal.client.acme_client)r   r.   ClientV2)mock_acme_clients    r   _patched_acme_clientz!RegisterTest._patched_acme_client^   s8      ZZ>? 	,CS"+++	, 	, 	,s   <0	<9<c                 r   | j                         5 }d|j                         _        | j                   |       j                  _        t        j                  d      5 }t        j                   |       j                  _        t        j                  t        j                        5  | j                          d d d        |j                  du sJ d  |       j                  _        | j                          |j                  du sJ 	 d d d        d d d        y # 1 sw Y   axY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nz
http://tos*certbot._internal.eff.prepare_subscriptionFT)rW   new_accountterms_of_servicerR   external_account_requiredside_effectr   r.   r   Errorpytestraisesr   called)r   mock_clientmock_prepares      r   test_no_toszRegisterTest.test_no_tosd   s    &&( 	3K9EK##%6BFBRBRKM33?HI 3\8>))5]]6<<0 !JJL!#**e3338<))5

#**d2223	3 	3
! !3 3	3 	3s>   AD-AD!$D5AD!D-DD!!D*	&D--D6rY   c                 &   | j                         5 }ddlm} |j                  i        |       _        | j
                   |       j                  _        | j                          | j                  j                  du sJ 	 d d d        y # 1 sw Y   y xY w)Nr   )	DirectoryF)rW   acme.messagesrf   	from_json	directoryrR   r\   r]   r   r<   ra   )r   unused_mock_preparerb   rf   s       r   test_empty_metazRegisterTest.test_empty_metar   sv     &&( 	/K/&/&9&9"&=KM#BFBRBRKM33?JJL;;%%...	/ 	/ 	/s   A,BBc                 8   | j                         5 }| j                   |       j                  _        t	        j
                  d      5  | j                          d d d        | j                  j                  du sJ 	 d d d        y # 1 sw Y   -xY w# 1 sw Y   y xY w)N)certbot._internal.eff.handle_subscriptionT)	rW   rR   r\   r]   r   r.   r   r<   ra   )r   unused_mock_get_utilityrb   s      r   test_itzRegisterTest.test_it   s    &&( 	.KBFBRBRKM33?GH 

;;%%---		. 	. 	. 	.s#   6BB"BB		BBz.certbot._internal.client.display_ops.get_emailc                    ddl m} d| j                  _        d}|j                  j                  d|      }| j                         5 }| j                   |       j                  _	        t        j                  d      5 }|t        j                         g |       j                  _	        | j                          |j                  dk(  sJ |j                   d	u sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)
Nr   messagesF3DNS problem: NXDOMAIN looking up MX for example.cominvalidContactdetailrY      T)acmerr   r   noninteractive_moder^   	with_coderW   rR   r\   r]   r   r.   r   rZ   r   
call_countra   )r   mock_get_emailrr   msgmx_errrb   rc   s          r   test_email_retryzRegisterTest.test_email_retry   s    !*/'C))*:3)G&&( 	3KBFBRBRKM33?HI 3\9?AQ8R))5

%00A555#**d222	3	3 	33 3	3 	3s%   6C7=AC+C7+C4	0C77D c                 2   ddl m} d| j                  _        d}|j                  j                  d|      }| j                         5 }| j                   |       j                  _	        t        j                  d      5  |t        j                         g |       j                  _	        t        j                  t         j                        5  | j#                          d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   rq   Trs   rt   ru   rm   )rx   rr   r   ry   r^   rz   rW   rR   r\   r]   r   r.   r   rZ   r_   r`   r   r   )r   rr   r}   r~   rb   s        r   !test_email_invalid_noninteractivez.RegisterTest.test_email_invalid_noninteractive   s    !*.'C))*:3)G&&( 	!KBFBRBRKM33?GH !9?AQ8R))5]]6<<0 !JJL!!	! 	!! !! !	! 	!s=   6D=ADC5D$D5C>:DD
	DDc                     d | j                   _        t        j                  t        j
                        5  | j                          d d d        y # 1 sw Y   y xY wN)r   r9   r_   r`   r   r^   r   r   s    r   test_needs_emailzRegisterTest.test_needs_email   s<     ]]6<<( 	JJL	 	 	s   AAcertbot._internal.client.loggerc                    t        j                  d      5 }| j                         5 }| j                   |       j                  _        d | j                  _        d| j                  _        d| j                  _	        | j                          |j                  j                  t         j                         |j                  du sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NrY   TF)r   r.   rW   rR   r\   r]   r   r9   r8   dry_runr   debugassert_called_once_withANYra   )r   mock_loggerrc   rb   s       r   test_without_emailzRegisterTest.test_without_email   s    ZZDE 	3**, 3FJFVFV77C$(!>B;&+#

!!99$((C#**d2223	3 	33 3	3 	3s#   C"BCC"C	C""C+c                    | j                         5 }| j                   |       j                  _        t	        j
                  d      5  d| j                  _        | j                          |j                  du sJ  |       j                  j                  d   d   j                  rJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)zJTests dry-run for no staging account, expect account created with no emailrm   TFr   N)rW   rR   r\   r]   r   r.   r   r   r   ra   rZ   	call_argscontact)r   r|   rb   s      r   test_dry_run_no_staging_accountz,RegisterTest.test_dry_run_no_staging_account   s     &&( 	MKBFBRBRKM33?GH M&*#

%,,555&=44>>qA!DLLLLLM	M 	MM M	M 	Ms$   6CAB8'C8C	=CCc                 <   | j                         5 }t        j                  | j                         |       j                  j
                  _        | j                   |       j                  _	        t        j                  d      5  d}t        j                  |      5 }d| j                  _        d| j                  _        | j                          |j                  du sJ 	 d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr]   rm   Bcertbot._internal.client.messages.ExternalAccountBinding.from_dataztest-kidz+J2OAqW4MHXsrHVa_PVg0Y-L_R4SYw0_aL1le6mfblbET)rW   r   rE   rL   clientri   __getitem__rR   r\   r]   r.   r   eab_kideab_hmac_keyr   ra   r   rn   rb   targetmock_eab_from_datas        r   test_with_eab_argumentsz$RegisterTest.test_with_eab_arguments   s    &&( 	=K9= 33:KM  **6 CGBRBRKM33?GH =]ZZ' =+=*4DKK'/\DKK,JJL-44<<<==	= 	== == =	= 	=s=   A4DDAC:!D)D:D?DD	DDc                    | j                         5 }| j                   |       j                  _        t	        j
                  d      5  d}t	        j
                  |      5 }d | j                  _        d | j                  _        | j                          |j                  du sJ 	 d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nrm   r   F)rW   rR   r\   r]   r   r.   r   r   r   r   ra   r   s        r   test_without_eab_argumentsz'RegisterTest.test_without_eab_arguments   s    &&( 		>KBFBRBRKM33?GH >]ZZ' >+=*.DKK'/3DKK,JJL-44===>>		> 		>> >> >		> 		>s<   6CCAB<#C+C<CCC	CCc           	         | j                         5 }t        j                  | j                         |       j                  j
                  j                  _        | j                   |       j                  _
        t        j                  d      5  t        j                  d      5  d | j                  _        d | j                  _        t        j                   t"        j$                        5  | j'                          d d d        d d d        d d d        d d d        y # 1 sw Y   "xY w# 1 sw Y   &xY w# 1 sw Y   *xY w# 1 sw Y   y xY w)Nr   rm   r   )rW   r   rE   rJ   r   netkey
public_keyrO   r\   r]   r.   r   r   r   r_   r`   r   r^   r   )r   rb   s     r   4test_external_account_required_without_eab_argumentszARegisterTest.test_external_account_required_without_eab_arguments   s    &&( 		%K6:iiDLaLa6bKM  $$((3BF//KM33?GH %ZZ de %*.DKK'/3DKK,v||4 %

%	%%		% 		%% %	% %% %		% 		%sU   A>ED5%AD)+D	<D)D5ED&"D))D2.D55D>	:EE
c                    ddl m} d}|j                  j                  d|d      }| j	                         5 }t        j                  | j                         |       j                  j                  _
        | j                   |       j                  _        t        j                  d      5 }|t        j                         g |       j                   _        t#        j$                  |j                        5  | j'                          d d d        d d d        d d d        j(                  d	u sJ y # 1 sw Y   *xY w# 1 sw Y   .xY w# 1 sw Y   2xY w)
Nr   rq   Test	malformedtitlerv   r   r   rm   F)rx   rr   r^   rz   rW   r   rE   rL   r   ri   r   rR   r\   r]   r.   r   rZ   r_   r`   r   ra   )r   rr   r}   r~   rb   mock_handles         r   test_unsupported_errorz#RegisterTest.test_unsupported_error   s   !))+c)Q&&( 	!K9= 33:KM  **6 CGBRBRKM33?GH !K9?AQ8R))5]]8>>2 !JJL!!	! !!U***! !! !	! 	!s=   A4E+A
D;5D/D;E/D84D;;E	 EE)r*   r+   r,   r-   r6   r   staticmethodrJ   rL   rO   rR   
contextlibcontextmanagerrW   rd   r   r.   rk   	test_utilpatch_display_utilro   r   r   r   r   r   r   r   r   r   __classcell__rD   s   @r   r3   r3   <   s}   6-H  
 # #     ,  ,3 TZZ<=
/ >
/ "Y!!#. $. TZZ@A3 B3
!
 TZZ12	3 3	3 TZZ@A
M B
M "Y!!#= $= "Y!!#
> $
>
%+r   r3   c                   "     e Zd ZdZ fdZ xZS )ClientTestCommonz<Common base class for certbot._internal.client.Client tests.c                    t         |           d| j                  _        d| j                  _        t        j                  di dt        i| _        ddl	m
} t        j                  d      5 }|j                  | _        t        j                         x| _        | j                  _        |j                   | _         || j                  | j                  d d       | _        d d d        y # 1 sw Y   y xY w)NFzkey.pemr   )ClientrT   )r   account_auth	installerr1   )r5   r6   r   no_verify_sslallow_subset_of_namesr   r   KEYr   r   r   r.   rU   acme_clientrx   rH   ClientNetworkclient_networkr   )r   r   rx   r@   s      r   r6   zClientTestCommon.setUp   s    $)!,1)~~9C(893ZZ>? 	+4#}}D8<8HHDI((5"&"4"4D {{T\\T+DK		+ 	+ 	+s   -A2C((C1)r*   r+   r,   r-   r6   r   rD   s   @r   r   r      s    F+ +r   r   c                       e Zd ZdZ fdZd Zd Zd#dZ ej                  d       ej                  d      d               Z
 ej                  d      d	        Z ej                  d      d
        Z ej                  d      d        Z ej                  d      d        Z ej                  d      d        Z ej                  d      d        Z ej                  d      d        Z ej                  d      d        Z ej                  d       ej                  d      d               Z ej                  d       ej                  d       ej                  d      d                      Zd Zd Zd$dZ ej                  d       ej                  d      d               Z ej                  d      d        Z ej6                         d        Z ej                  d       ej6                         d               Z ej6                         d        Z ej                  d       ej6                         d                Z ej                  d       ej6                         d!               Z d" Z! xZ"S )%
ClientTestz*Tests for certbot._internal.client.Client.c                    t         |           d| j                  _        d| j                  _        d| j                  _        ddg| _        t        j                  d gt        j                  j                        | _        y )NFTexample.comwww.example.com)authorizationscsr_pem)r5   r6   r   r   r   strict_permissions
eg_domainsr   r   sentinelr   eg_orderr?   s    r   r6   zClientTest.setUp  s_    ,1)#)-&(*;< 6MM))+r   c                 D    | j                   j                  d   d   du sJ y )Nrw   
verify_sslT)r   r   r   s    r   test_init_acme_verify_sslz$ClientTest.test_init_acme_verify_ssl  s&    "",,Q/=EEEr   c                    t        j                         | j                  _        d g| j                  j                  j                  _        g g f| j                  j                  j                  _        | j                  | j                  j                  _        | j                  | j                  j                  _        | j                  | j                  j                  _        y r   )r   r   r   auth_handlerhandle_authorizationsrH   deactivate_valid_authorizationsr   rx   finalize_order	new_orderupdater   s    r   _mock_obtain_certificatez#ClientTest._mock_obtain_certificate  s    #'>>#3 GKf  66CQSUWPX  @@M04		  -+/==		(,0MM)r   c                    |dk(  rZ| j                   j                  j                  j                  | j                  | j
                  | j
                  j                         n/| j                   j                  j                  j                  |k(  sJ | j                  j                  j                  | j                  t        j                  | j
                  j                  d u       y )Nrw   )fetch_alternative_chains)r   r   r   r   r   r   r   r{   rx   r   r   r   preferred_chain)r   
auth_counts     r   _check_obtain_certificatez$ClientTest._check_obtain_certificate%  s    ?KK$$::RR113
 ;;++AALLPZZZZ		  88MM488%)[[%@%@%L 	9 	Nr   z$certbot._internal.client.crypto_utilr   c                    | j                          t        j                  dd t              }| j                  j
                  }| j                  |j                         | j                  j                  |j                        }|j                  || j                  d       t        j                  j                  t        j                  j                   f| j                  j#                  ||      k(  sJ |j$                  j'                          | j)                          d| j                  _        t        j                  j                  t        j                  j                   f| j                  j#                  ||      k(  sJ |j$                  j-                  |j.                  g|j0                  z   dd       d | j                  _        t2        j2                  j5                         t3        j6                  t8        j:                  d         z   }| j                  j#                  ||       | j                  j                  j<                  j>                  \  \  }}}tA        ||z
        t3        j6                  d	      k  sJ t2        j2                  j5                         t3        j6                  d
      z   }d
| j                  _!        | j                  j#                  ||       | j                  j                  j<                  j>                  \  \  }}}tA        ||z
        t3        j6                  d	      k  sJ t        j                  j                  t        j                  j                   f| j                  j#                  |d       k(  sJ |j                  jE                  | jF                  | j                  d       d | j                  _        tI        jJ                  tL        jN                        5  | j                  j#                  |       d d d        |jP                  j-                  t        jR                         y # 1 sw Y   3xY w)NpemformfiledataF)orderrzsome issuerTissuance_timeout)secondsrw   i,  )*r   r   CSRCSR_SANr   r   _set_mock_from_fullchaincert_and_chain_from_fullchainrx   r   r   r   r   r   r   certchainobtain_certificate_from_csrfind_chain_with_issuerassert_not_calledr   r   r   fullchain_pemalternative_fullchains_pemdatetimenow	timedeltar	   CLI_DEFAULTSr   r   absr   assert_called_withr   r_   r`   r   r^   errorr   )	r   r   mock_crypto_utiltest_csrr   r   expected_deadline_deadlines	            r    test_obtain_certificate_from_csrz+ClientTest.test_obtain_certificate_from_csr2  sm    	%%'88T@{{//%%&6&T&TU$$X]]3**64;;F""DMM$7$78KK33 4  	  	//AAC&&( '4#""DMM$7$78KK33 4  	  	//GG!!"V%F%FF4	! '+# !!#h&8&8!../AB'D D 	 	///H![[--<<FF!X$x/0H4F4Fq4QQQQ !!#h&8&8&EE 	'*$///H![[--<<FF!X$x/0H4F4Fq4QQQQ ""DMM$7$78KK33 4  	  	**==dmmT[[Z_` $( ]]6<<( 	>KK33H=	>11$((;	> 	>s   6QQc                    t        j                  dd t              }||j                  _        t
        j                  j                  |j                  _        | j                  |j                         | j                  t
        j                  j                  |       |j                  j                  | j                  j                  d | j                  j                  dd       |j                  j                  t
        j                  j                  | j                   d dd       |j                  j                  | j"                  j$                         y )Nr   r   	secp256r1T)key_sizekey_dirkey_typeelliptic_curver   F)r   r   r   generate_csrrH   r   r   r   generate_keyr   r   _test_obtain_certificate_commonr   r   r7   r   r   r   r   )r   r   csrs      r   test_obtain_certificatez"ClientTest.test_obtain_certificatel  s    hhE7;58%%259]]5F5F%%2%%&6&T&TU,,T]]->->D%%==[[--[[))&# 	> 	
 	%%==MMteT	C66NNMM''	)r   c                 `   t        j                  dt        j                  j                  t
              }t        j                  dt        j                  j                  t
              }||j                  _        ||j                  _        | j                  |j                         | j                  dg      }d| j                  _        | j                  |||d       |j                  j                   dk(  sJ |j                  j                   dk(  sJ |j                  j                   dk(  sJ y )Nr   r   r   T   )
authzr_retr   rw   )r   r   r   r   csr_filer   key_filer   rH   r   r   r   _authzr_from_domainsr   r   r  r{   )r   r   r  r   authzrs        r   'test_obtain_certificate_partial_successz2ClientTest.test_obtain_certificate_partial_success  s    hhE(>(>WMhhE(>(>WM58%%258%%2%%&6&T&TU**M?;,0),,S#&UV,W,,771<<<,,771<<<==HHAMMMr   c           
         ddl m} t        j                  dt        j
                  j                  t              }t        j                  dt        j
                  j                  t              }||j                  _
        ||j                  _
        | j                  |j                         | j                          | j                  | j                         }|| j"                  _        || j&                  j(                  j*                  _
        |j-                  |j.                  d      }|j0                  j3                  ddd	|
      }|j0                  j3                  ddd	|g      }|t        j4                  g| j&                  j                   j6                  _        d| j:                  _        t?        j@                         5  | j&                  jC                  | j                         }	d d d        	t        j
                  jD                  t        j
                  jF                  ||fk(  sJ | j&                  j(                  j*                  jH                  dk(  sJ | j                   j6                  jH                  dk(  sJ | j                   D 
cg c]
  }
|
dk7  s	|
 }}
|j                  jH                  dk(  sJ |j                  jK                  t	        jL                  || j                   d | j:                  jN                  | j:                  jP                        t	        jL                  ||d | j:                  jN                  | j:                  jP                        g       |j                  jH                  dk(  sJ y # 1 sw Y   xY wc c}
w )Nr   rq   r   r   r   typvaluecaabarr   rv   r   
identifierr   foorv   r   subproblemsTr  rw   ))rx   rr   r   r   r   r   r  r   r  r   rH   r   r   r   r   r	  r   r   r   r   r   r   
IdentifierIDENTIFIER_FQDNr^   rz   DEFAULTr   r]   r   r   r   r   obtain_certificater   r   r{   assert_has_callscallmust_stapler   r   r   rr   r  r   r
  r  
subproblemerror_with_subproblemsresultdsuccessful_domainss               r   6test_obtain_certificate_finalize_order_partial_successzAClientTest.test_obtain_certificate_finalize_order_partial_success  s   !hhE(>(>WMhhE(>(>WM58%%258%%2%%&6&T&TU%%'**4??;'-$FL  66C((X-E-E]([
^^--eE]g-h
!)!9!9+e[bq{p|!9!}7Mt||6\''3,0)))+ 	E[[33DOODF	E ]]!4!4c3?@ 	@ @{{''==HHAMMMyy''22a777)-OAA<NaOO,,771<<<%%66IIc4??D$++2I2I4;;KiKijIIc-tT[[5L5LdkkNlNlm8o 	p  ==HHAMMM	E 	E P   &M;
NN;Nc                    ddl m} t        j                  dt        j
                  j                  t              }t        j                  dt        j
                  j                  t              }||j                  _
        ||j                  _
        | j                  |j                         | j                          | j                  | j                         }|| j"                  _        || j&                  j(                  j*                  _
        |j-                  |j.                  d      }|j-                  |j.                  d      }|j0                  j3                  dd	d
|      }|j0                  j3                  dd	d
|      }	|j0                  j3                  ddd
||	g      }
|
| j&                  j                   j4                  _        d| j8                  _        t=        j>                  |j0                        5  | j&                  jA                  | j                          d d d        | j&                  j(                  j*                  jB                  dk(  sJ | j                   j4                  jB                  dk(  sJ |j                  jB                  dk(  sJ |j                  jB                  dk(  sJ y # 1 sw Y   xY wNr   rq   r   r   r   r  r   r  r  r   r  r   r  r  Trw   )"rx   rr   r   r   r   r   r  r   r  r   rH   r   r   r   r   r	  r   r   r   r   r   r   r  r  r^   rz   r   r]   r   r   r_   r`   r  r{   r   r   rr   r  r   r
  identifier1identifier2subproblem1subproblem2r   s              r   ;test_obtain_certificate_finalize_order_no_retryable_domainszFClientTest.test_obtain_certificate_finalize_order_no_retryable_domains  s-   !hhE(>(>WMhhE(>(>WM58%%258%%2%%&6&T&TU%%'**4??;'-$FL  66C))h.F.Fm)\))h.F.FN_)`nn..uU'^i.jnn..uU'^i.j!)!9!9+e[bq|  J  qK!9  "L6L''3,0)]]8>>* 	<KK**4??;	<{{''==HHAMMMyy''22a777,,771<<<==HHAMMM	< 	<   ;&J44J=c                    ddl m} t        j                  dt        j
                  j                  t              }t        j                  dt        j
                  j                  t              }||j                  _
        ||j                  _
        | j                  |j                         | j                          | j                  | j                         }|| j"                  _        || j&                  j(                  j*                  _
        |j,                  j/                  ddd      }|| j&                  j                   j0                  _        d	| j4                  _        t9        j:                  |j,                        5  | j&                  j=                  | j                          d d d        | j&                  j(                  j*                  j>                  d
k(  sJ | j                   j0                  j>                  d
k(  sJ |j                  j>                  d
k(  sJ |j                  j>                  dk(  sJ y # 1 sw Y   xY wNr   rq   r   r   r  r  r   r   Trw   ) rx   rr   r   r   r   r   r  r   r  r   rH   r   r   r   r   r	  r   r   r   r   r   r   r^   rz   r   r]   r   r   r_   r`   r  r{   r   r   rr   r  r   r
  r   s          r   Itest_obtain_certificate_finalize_order_rejected_identifier_no_subproblemszTClientTest.test_obtain_certificate_finalize_order_rejected_identifier_no_subproblems  s   !hhE(>(>WMhhE(>(>WM58%%258%%2%%&6&T&TU%%'**4??;'-$FL  66C((uG(L6;''3,0)]]8>>* 	<KK**4??;	<{{''==HHAMMMyy''22a777,,771<<<==HHAMMM	< 	<    &H99Ic           
         ddl m} t        j                  dt        j
                  j                  t              }t        j                  dt        j
                  j                  t              }||j                  _
        ||j                  _
        | j                  |j                         | j                          | j                  | j                         }|| j"                  _        || j&                  j(                  j*                  _
        |j-                  |j.                  d      }|j0                  j3                  ddd	|
      }|j0                  j3                  ddd	|g      }|t        j4                  g| j&                  j                   j6                  _        d| j:                  _        t?        j@                         5  | j&                  jC                  | j                         }	d d d        	t        j
                  jD                  t        j
                  jF                  ||fk(  sJ | j&                  j(                  j*                  jH                  dk(  sJ | j                   j6                  jH                  dk(  sJ | j                   D 
cg c]
  }
|
dk7  s	|
 }}
|j                  jH                  dk(  sJ |j                  jK                  t	        jL                  || j                   d | j:                  jN                  | j:                  jP                        t	        jL                  ||d | j:                  jN                  | j:                  jP                        g       |j                  jH                  dk(  sJ y # 1 sw Y   xY wc c}
w )Nr   rq   r   r   r   r  r  r  r   r  r   r  r  Trw   r  ))rx   rr   r   r   r   r   r  r   r  r   rH   r   r   r   r   r	  r   r   r   r   r   r   r  r  r^   rz   r  r   r]   r   r   r   r   r  r   r   r{   r  r  r  r   r  s               r   1test_obtain_certificate_get_order_partial_successz<ClientTest.test_obtain_certificate_get_order_partial_success  s   !hhE(>(>WMhhE(>(>WM58%%258%%2%%&6&T&TU%%'**4??;'-$FL  66C((X-E-E]([
^^--eE]g-h
!)!9!9+e[bq{p|!9!}2H$,,1W"".,0)))+ 	E[[33DOODF	E ]]!4!4c3?@ 	@ @{{''==HHAMMMyy""--222)-OAA<NaOO,,771<<<%%66IIc4??D$++2I2I4;;KiKijIIc-tT[[5L5LdkkNlNlm8o 	p  ==HHAMMM	E 	E Pr%  c                    ddl m} t        j                  dt        j
                  j                  t              }t        j                  dt        j
                  j                  t              }||j                  _
        ||j                  _
        | j                  |j                         | j                          | j                  | j                         }|| j"                  _        || j&                  j(                  j*                  _
        |j-                  |j.                  d      }|j-                  |j.                  d      }|j0                  j3                  dd	d
|      }|j0                  j3                  dd	d
|      }	|j0                  j3                  ddd
||	g      }
|
| j&                  j                   j4                  _        d| j8                  _        t=        j>                  |j0                        5  | j&                  jA                  | j                          d d d        | j&                  j(                  j*                  jB                  dk(  sJ | j                   j4                  jB                  dk(  sJ |j                  jB                  dk(  sJ |j                  jB                  dk(  sJ y # 1 sw Y   xY wr'  )"rx   rr   r   r   r   r   r  r   r  r   rH   r   r   r   r   r	  r   r   r   r   r   r   r  r  r^   rz   r   r]   r   r   r_   r`   r  r{   r(  s              r   6test_obtain_certificate_get_order_no_retryable_domainszAClientTest.test_obtain_certificate_get_order_no_retryable_domains  s-   !hhE(>(>WMhhE(>(>WM58%%258%%2%%&6&T&TU%%'**4??;'-$FL  66C))h.F.Fm)\))h.F.FN_)`nn..uU'^i.jnn..uU'^i.j!)!9!9+e[bq|  J  qK!9  "L1G"".,0)]]8>>* 	<KK**4??;	<{{''==HHAMMMyy""--222,,771<<<==HHAMMM	< 	<r.  c                    ddl m} t        j                  dt        j
                  j                  t              }t        j                  dt        j
                  j                  t              }||j                  _
        ||j                  _
        | j                  |j                         | j                          | j                  | j                         }|| j"                  _        || j&                  j(                  j*                  _
        |j,                  j/                  ddd      }|| j&                  j                   j0                  _        d	| j4                  _        t9        j:                  |j,                        5  | j&                  j=                  | j                          d d d        | j&                  j(                  j*                  j>                  dk(  sJ | j                   j0                  j>                  d
k(  sJ |j                  j>                  d
k(  sJ |j                  j>                  dk(  sJ y # 1 sw Y   xY wr0  ) rx   rr   r   r   r   r   r  r   r  r   rH   r   r   r   r   r	  r   r   r   r   r   r   r^   rz   r   r]   r   r   r_   r`   r  r{   r1  s          r   Dtest_obtain_certificate_get_order_rejected_identifier_no_subproblemszOClientTest.test_obtain_certificate_get_order_rejected_identifier_no_subproblems/  s   !hhE(>(>WMhhE(>(>WM58%%258%%2%%&6&T&TU%%'**4??;'-$FL  66C((uG(L16"".,0)]]8>>* 	<KK**4??;	<{{''==HHAMMMyy""--222,,771<<<==HHAMMM	< 	<r3  z)certbot._internal.client.acme_crypto_utilc                 v   t        j                  dd t              }t        |j                  _        t
        j                  j                  |j                  _        t        j                  d t
        j                  j                        }| j                  |j                         d| j                  j                  _        | j                  ||       |j                  j!                  | j                  j"                  d| j                  j$                         |j                  j!                  t
        j                  j                  | j&                  | j                  j(                         |j*                  j-                          |j.                  j-                          |j                  j0                  dk(  sJ y )Nr   r   r   r   Tr   )bitsr   r   rw   )r   r   r   make_csrrH   r   r   key_pemmake_keyKeyr   r   r   r   r   r  r   r7   r   r   r  r   r   r   r{   )r   mock_acme_cryptomock_cryptor  r   s        r   test_obtain_certificate_dry_runz*ClientTest.test_obtain_certificate_dry_runI  s7    hhE7;18!!.,0MM,A,A)hhDdmm&;&;<%%k&O&OP%)",,S#644))&[[)) 	5 	

 	!!99MM!!4??DKK4K4K	M  224  22488CCqHHHr   c                    ddl m} t        j                  dd t              }t        |j
                  _        t        j                  j                  |j                  _        t        j                  d t        j                  j                        }| j                  |j                         | j                          d| j                  j                   _        | j%                  ddg      }|D ]  }|j&                  |j(                  _         | j                  j,                  }	|d   g|d	   gf|	j.                  _        || j0                  _        || j                  j,                  j4                  _        t7        j8                         5  | j                  j;                  | j<                        }
d d d        
t        j                  j>                  t        j                  j@                  ||fk(  sJ | jC                  d	       |	j.                  jD                  d	k(  sJ d
       | j                   jF                  jD                  dk(  sJ d       |jH                  jK                  d       y # 1 sw Y   xY w)Nr   rq   r   r   r;  Tr   r   rw   z*Deactivate authorizations should be calledr  zHOrder should be recreated due to successfully deactivated authorizationszCertbot was unable to obtain fresh authorizations for every domain. The dry run will continue, but results may not be accurate.)&rx   rr   r   r   r   r=  rH   r   r   r>  r?  r@  r   r   r   r   r   r   r	  STATUS_VALIDbodystatusr   r   r   r   r   r   r   r  r   r   r   r   r{   r   warningr   )r   rA  rB  mock_logrr   r  r   authzrsr
  r   r!  s              r   :test_obtain_certificate_dry_run_authz_deactivations_failedzEClientTest.test_obtain_certificate_dry_run_authz_deactivations_failed`  s   
 	"hhE7;18!!.,0MM,A,A)hhDdmm&;&;<%%k&O&OP%%'%)" ++]<M,NO 	7F!)!6!6FKK	7 {{//FMaj\T[\]T^S_D`44A (/$FM  66C))+ 	E[[33DOODF	E$--,,dmm.A.A3LLLL&&q) ;;FF!K 	ED	EKyy""--2 	cb	c2++ -D 	E	E 	Es   &I&&I/c                 
   t        j                         }t         j                  j                  |j                  _        t        j                         }t         j                  j                  |j                  _        ||f|_        y r   )r   rE   r   r   encoderH   r   )r   mock_from_fullchain	mock_cert
mock_chains       r   r   z#ClientTest._set_mock_from_fullchain  sV    IIK	(,(:(:	%YY[
)-)<)<
&,5z+B(r   c           
          g }t        |      D ]O  }|j                  t        j                  t        j                  t        j                  |                         Q |S )N)r  )r  )rF  )reversedappendr   r   )r   domainsr
  domains       r   r	  zClientTest._authzr_from_domains  sW     w' 	-FMM#'>>"($*+,-	- r   c                    | j                          |xs | j                  | j                        }|| j                  _        || j
                  j                  j                  _        t        j                         5  | j
                  j                  | j                        }d d d        t        j                  j                  t        j                  j                  ||fk(  sJ | j!                  |       y # 1 sw Y   VxY wr   )r   r	  r   r   r   r   r   r   rH   r   r   r  r   r   r   r   r   )r   r   r  r  r   r
  r!  s          r   r  z*ClientTest._test_obtain_certificate_common  s    %%'
 It88I'-$FL  66C))+ 	E[[33DOODF	E ]]!4!4c3?@ 	@ @&&z2	E 	Es   :&C55C>z2certbot._internal.client.Client.obtain_certificatez3certbot._internal.storage.RenewableCert.new_lineagec                 J   ddg}t        j                         t        j                         t        j                         d f|_        d| j                  j                  _        | j                  j                  |d      sJ | j                  j                  |d       sJ | j                  j                  |dd  d       sJ d| j                  j                  _        | j                  j                  |d       rJ |j                  D cg c]
  }|d   d    }}|g dk(  sJ y c c}w )	Nz*.example.comr   Fexample_certrw   Tr   )rX  r   r   )r   r   rH   r   r   r   obtain_and_enroll_certificatecall_args_list)r   mock_storagemock_obtain_certificaterT  r  namess         r   "test_obtain_and_enroll_certificatez-ClientTest.test_obtain_and_enroll_certificate  s    #M2040@040@$..BRTX0Z, &+"{{88.QQQ{{88$GGG{{88dKKK%)";;<<WdKKK(4(C(CDaDDFFFF Es   D z$certbot._internal.cli.helpful_parserc                    ddg}t        j                         }t        j                  |d         }t        j                  |d         t        j                  |d         z   }t        j
                  j                  |dd      }t        j
                  j                  |dd      }t        j
                  j                  |dd      }d	|_        d
|d|d|g|_        | j                  j                  |||||      \  }	}
}t        j
                  j                  |	      t        j
                  j                  |      k(  sJ t        j
                  j                  |
      t        j
                  j                  |      k(  sJ t        j
                  j                  |      t        j
                  j                  |      k(  sJ t        |	d      5 }|j                         }d d d        t        j                  |d         k(  sJ t        |
d      5 }|j                         }d d d        t        j                  |d         t        j                  |d         z   k(  sJ t        j                  |       y # 1 sw Y   xY w# 1 sw Y   axY w)Nzcert_512.pemzcert-san_512.pemr   rw   certschainsz	chain.pemzfullchain.pemcertonlyz--cert-pathz--chain-pathz--fullchain-pathrb)tempfilemkdtempr   load_vectorr   pathjoinverbargsr   save_certificatedirnameopenreadshutilrmtree)r   mock_parserr`  tmp_pathcert_pem	chain_pemcandidate_cert_pathcandidate_chain_pathcandidate_fullchain_path	cert_path
chain_pathfullchain_path	cert_filecert_contents
chain_filechain_contentss                   r   test_save_certificatez ClientTest.test_save_certificate  sC   !34##%((q2**584y7L7LUSTX7VV	 ggll8WnM!ww||HhL#%77<<(O#T %)+>*,@.0HJ 150L0Li!46J$1&-	:~ wwy))<=> 	> >wwz*)=>? 	? ?ww~.)ABC 	C C )T" 	-i%NN,M	-	 5 5eAh ????*d# 	/z'__.N	/!6!6uQx!@"..uQx8"9 9 	9 9 	h	- 	-	/ 	/s   I2I>2I;>Jc           	         t        j                  t        j                        5  | j                  j                  dgdddd       d d d        t        j                         }|| j                  _        | j                  j                  dgdddd       |j                  j                  t        j                  j                  d      t        j                  j                  d      ddt        j                  j                  d             |j                  j                  dk(  sJ |j                   j                          y # 1 sw Y   xY w)Nfoo.barr   r   r   	fullchain)rx  ry  rU  rz  key_pathr  )r_   r`   r   r^   r   deploy_certificater   r   r   deploy_certr   r   rg  abspathsaver{   restartr   	mock_utilr   s      r   test_deploy_certificate_successz*ClientTest.test_deploy_certificate_success  s    ]]6<<( 	]KK**I;vwP[\	] NN$	 )&&	{E67KX55ggoof-www/&WW__U+ 	6 	- ~~((A---113	] 	]s   !D??Ez,certbot._internal.client.display_util.notifyc                    t        j                         }|| j                  _        d| j                  _        t
        j                  |j                  _        t        j                  t
        j                        5  | j                  j                  dgdddd       d d d        |j                  j                          |j                  d       y # 1 sw Y   5xY w)Nfoobarr  r   r   r   r  zDeploying certificate)r   r   r   r   r   r   PluginErrorr  r]   r_   r`   r  recovery_routiner   assert_any_call)r   r  mock_notifyr   s       r   test_deploy_certificate_failurez*ClientTest.test_deploy_certificate_failure  s     NN$	 ) (,2,>,>	)]]6--. 	]KK**I;vwP[\	]""::<##$;<		] 	]s   9!CCc                 p   t        j                         }|| j                  _        t        j
                  |j                  _        t        j                  t        j
                        5  | j                  j                  dgdddd       d d d        |j                  j                          y # 1 sw Y   $xY w)Nr  r   r   r   r  )r   r   r   r   r   r  r  r]   r_   r`   r  r  r   r  s      r   $test_deploy_certificate_save_failurez/ClientTest.test_deploy_certificate_save_failure	  s    NN$	 )%+%7%7	"]]6--. 	]KK**I;vwP[\	]""::<	] 	]s   (!B,,B5c                    t        j                         }t        j                  d g|j                  _        || j                  _        t        j                  t        j                        5  | j                  j                  dgdddd       d d d        |j                  d       |j                  j                          |j                  j                  dk(  sJ y # 1 sw Y   PxY w)Nr  r   r   r   r  zuWe were unable to install your certificate, however, we successfully restored your server to its prior configuration.r  )r   r   r   r  r  r]   r   r   r_   r`   r  r   rollback_checkpointsr   r{   )r   mock_get_utilityr  r   s       r   'test_deploy_certificate_restart_failurez2ClientTest.test_deploy_certificate_restart_failure  s     NN$	)/););T(B	% )]]6--. 	]KK**I;vwP[\	]&&6	7 	&&>>@  ++q000	] 	]s   *!CC#c                 Z   t        j                         }t        j                  |j                  _        t        j                  |j                  _        || j                  _	        t        j                  t        j                        5  | j                  j                  dgdddd       d d d        |j                  j                  dk(  sJ d|j                  j                  d   d   v sJ |j                  j!                          |j                  j                  dk(  sJ y # 1 sw Y   zxY w)	Nr  r   r   r   r  rw   z6An error occurred and we failed to restore your configr   )r   r   r   r  r  r]   ReverterErrorr  r   r   r_   r`   r  r   r{   r   r   )r   r  r   r   s       r   (test_deploy_certificate_restart_failure2z3ClientTest.test_deploy_certificate_restart_failure2"  s     NN$	(.(:(:	%5;5I5I	&&2 )]]6--. 	]KK**I;vwP[\	]  ++q000G''*1-. 	. .&&>>@  ++q000	] 	]s   !D!!D*c                 B   t         j                  j                  }d| dg}dg}d| d}d}d| dg}t        j                  t
        j                        5  | j                  j                  |d        d d d        t        j                  t
        j                        5  | j                  j                  ||       d d d        t        j                  t
        j                        5  | j                  j                  ||       d d d        t        j                  t
        j                        5  | j                  j                  |d        d d d        | j                  j                  ||       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   JxY w)Nexamzple.comr   r  z.barr  z*.exam)	r   rg  sepr_   r`   r   r^   r   _choose_lineagename)r   r  invalid_domainsvalid_domainsinvalid_certnamevalid_certnameinvalid_wildcard_domains          r   test_choose_lineage_namez#ClientTest.test_choose_lineage_name2  sY   ggkk!#g./& T?"%+C5#8"9]]6<<( 	CKK++OTB	C]]6<<( 	OKK++O=MN	O]]6<<( 	MKK++M;KL	M]]6<<( 	KKK++,CTJ	K 	''H	C 	C	O 	O	M 	M	K 	Ks0   E1E='F	/F1E:=F	FF)rw   Nrw   )#r*   r+   r,   r-   r6   r   r   r   r   r.   r   r  r  r$  r-  r2  r5  r7  r9  rC  rK  r   r	  r  r^  r  r   r   r  r  r  r  r  r  r   rD   s   @r   r   r     s*   4	+F:N TZZ67TZZ126< 3 86<p TZZ67) 8)( TZZ67N 8N TZZ67!N 8!NF TZZ67N 8N: TZZ67N 8N2 TZZ67!N 8!NF TZZ67N 8N: TZZ67N 8N2 TZZ67TZZ;<I = 8I* TZZ12TZZ67TZZ;<$E = 8 3$ELC
3$ TZZDETZZEFG G FG& TZZ67"  8" H "Y!!#4 $4" TZZ>?!Y!!#
= $ @
= "Y!!#= $= TZZ>?!Y!!#1 $ @1 TZZ12!Y!!#1 $ 31Ir   r   c                   8    e Zd ZdZ fdZd Zd Z ej                  d      d        Z	 ej                  d      d        Z
 ej                  d      d        Z ej                  d      d	        Zd
 Zd Zd Zd Zd Zd Zd Zd Zd ZddZd Zd Z xZS )EnhanceConfigTestz9Tests for certbot._internal.client.Client.enhance_config.c                     t         |           d| j                  _        d| j                  _        d| j                  _        d| j                  _        d| _        y )NFzexample.org)r5   r6   r   hstsredirectstapleuirrU  r?   s    r   r6   zEnhanceConfigTest.setUpI  sB     $"#r   c                     t        j                  t        j                        5  | j                  j                  | j                  gd        d d d        y # 1 sw Y   y xY wr   )r_   r`   r   r^   r   enhance_configrU  r   s    r   test_no_installerz#EnhanceConfigTest.test_no_installerR  sA    ]]6<<( 	<KK&&}d;	< 	< 	<s   (AAc                    t        j                         | j                  _        g | j                  j                  j                  _        d | j                  _        d| j                  _        t        j                  d      5 }| j                  j                  | j                  gd        d d d        j                  j                  dk(  sJ | j                  j                  j                  j                          y # 1 sw Y   SxY w)NTr   rw   )r   r   r   r   supported_enhancementsrH   r   r  r  r.   r  rU  r   r{   enhancer   )r   r   s     r   test_unsupportedz"EnhanceConfigTest.test_unsupportedV  s     $ 0DF44A#ZZ9: 	<kKK&&}d;	<  ++q000%%779	< 	<s    (C::Dr   c                     d| j                   _        | j                          |j                  j                  du sJ |j                  j
                  d   d   dk(  sJ y )NTr   rw   Strict-Transport-Security)r   r  _test_with_already_existinginfora   r   r   rI  s     r   test_already_exists_headerz,EnhanceConfigTest.test_already_exists_headera  s[    ((*}}##t+++}}&&q)!,56 	6 6r   c                     d| j                   _        | j                          |j                  j                  du sJ |j                  j
                  d   d   dk(  sJ y )NTr   rw   r  )r   r  r  r  ra   r   r  s     r   test_already_exists_redirectz.EnhanceConfigTest.test_already_exists_redirecti  s[    #((*}}##t+++}}&&q)!,$% 	% %r   c                 z    d| j                   _        | j                          |j                  j                  du sJ y rQ   )r   r  r  rH  ra   r  s     r   #test_config_set_no_warning_redirectz5EnhanceConfigTest.test_config_set_no_warning_redirectq  s4    $((*&&%///r   c                 z    d | j                   _        | j                          |j                  j                  du sJ y rQ   )r   r  _test_with_all_supportedrH  ra   r  s     r   test_no_warn_redirectz'EnhanceConfigTest.test_no_warn_redirectw  s4    #%%'&&%///r   c                     d| j                   _        | j                          | j                  j                  j
                  j                  | j                  dd       y )NTensure-http-headerr  )r   r  r  r   r   r  r   rU  r   s    r   test_no_ask_hstsz"EnhanceConfigTest.test_no_ask_hsts}  sF    %%'%%88KK-/J	Lr   c                     d| j                   _        | j                          | j                  j                  j
                  j                  | j                  dd        y )NTr  )r   r  r  r   r   r  r   rU  r   s    r   test_no_ask_redirectz&EnhanceConfigTest.test_no_ask_redirect  sC    #%%'%%88KKT	+r   c                     d| j                   _        | j                          | j                  j                  j
                  j                  | j                  dd        y )NTstaple-ocsp)r   r  r  r   r   r  r   rU  r   s    r   test_no_ask_staplez$EnhanceConfigTest.test_no_ask_staple  sC    !%%'%%88KK	.r   c                     d| j                   _        | j                          | j                  j                  j
                  j                  | j                  dd       y )NTr  zUpgrade-Insecure-Requests)r   r  r  r   r   r  r   rU  r   s    r   test_no_ask_uirz!EnhanceConfigTest.test_no_ask_uir  sE    %%'%%88KK-/J	Lr   c                 0   t        j                         | j                  _        t        j
                  | j                  j                  j                  _        | j                  d       | j                  j                  j                  j                          y )NT)enhance_error)r   r   r   r   r   r  r  r]   _test_errorr  r   r   s    r   test_enhance_failurez&EnhanceConfigTest.test_enhance_failure  s`     $ 04:4F4F%%1t,..FFHr   c                    t        j                         | j                  _        t        j
                  | j                  j                  j                  _        | j                          | j                  j                  j                  j                          | j                  j                  j                  j                  t         j                         y r   )r   r   r   r   r   r  r  r]   r  r  r   r   r   s    r   test_save_failurez#EnhanceConfigTest.test_save_failure  s}     $ 0171C1C""...FFH""::488Dr   c                     t        j                         | j                  _        t        j
                  d g| j                  j                  j                  _        | j                          y r   )	r   r   r   r   r   r  r  r]   _test_error_with_rollbackr   s    r   test_restart_failurez&EnhanceConfigTest.test_restart_failure  sD     $ 05;5G5G4N%%1&&(r   c                     t        j                         }t        j                  |j                  _        t        j                  |j                  _        || j                  _	        | j                          y r   )r   r   r   r  r  r]   r  r  r   r   r  )r   r   s     r   test_restart_failure2z'EnhanceConfigTest.test_restart_failure2  sN    NN$	(.(:(:	%5;5I5I	&&2 )&&(r   c                     | j                          | j                  j                  j                  j                  du sJ y rN   )r  r   r   r  ra   r   s    r   r  z+EnhanceConfigTest._test_error_with_rollback  s2    {{$$,,33t;;;r   c                    d| j                   _        t        j                  d      5 }t	        j
                         5 }t        j                  t        j                        5  | j                          d d d        d d d        d d d        |r?j                  j                  dk(  sJ d|j                  j                  d   d   d   k(  sJ |rj                  j                  d       y y # 1 sw Y   yxY w# 1 sw Y   }xY w# 1 sw Y   xY w)NTr   rw   z(Unable to set the %s enhancement for %s.r   z0Rolling back to previous server configuration...)r   r  r   r.   r   r   r_   r`   r   r  r  r   r{   rZ  criticalr   )r   r  restart_errorr   mock_gus        r   r  zEnhanceConfigTest._test_error  s    #ZZ9: 	0k))+	0/6v112 0--/0	0 	0
 $$//1444=ARARAaAabcAdefAghiAjjjj  33BD 0 0	0 	0 	0 	0s:   D$C5 C)1C59D)C2.C55C>	:DD
c                    | j                   j                  #t        j                         | j                   _        g d| j                   j                  j                  _        | j                   j                  | j                  gd        | j                   j                  j                  j                  dk(  sJ | j                   j                  j                  j                  dk(  sJ y )Nr  r  r  rw   )r   r   r   r   r  rH   r  rU  r  r{   r  r   s    r   r  z*EnhanceConfigTest._test_with_all_supported  s    ;;  ($(NN$4DKK!E=44A""DKK=$7{{$$))44999{{$$,,771<<<r   c                 T   t        j                         | j                  _        g d| j                  j                  j                  _        t        j                         | j                  j                  j                  _	        | j                  j                  | j                  gd        y )Nr  )r   r   r   r   r  rH   r   PluginEnhancementAlreadyPresentr  r]   r  rU  r   s    r   r  z-EnhanceConfigTest._test_with_already_existing  sk     $ 0E=44A4:4Z4Z4\%%1""DKK=$7r   )FF)r*   r+   r,   r-   r6   r  r  r   r.   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   rD   s   @r   r  r  F  s    C$<	: TZZ126 36 TZZ12% 3% TZZ120 30
 TZZ120 30
L+.LIE)
)<D=8r   r  c                   2    e Zd ZdZd Zed        Zd Zd Zy)RollbackTestz,Tests for certbot._internal.client.rollback.c                 6    t        j                         | _        y r   )r   r   	m_installr   s    r   r6   zRollbackTest.setUp  s    )r   c                     ddl m} t        j                  d      5 }||_         |d |i t        j
                                d d d        y # 1 sw Y   y xY w)Nr   )rollbackz8certbot._internal.client.plugin_selection.pick_installer)r   r  r   r.   r]   r   )clscheckpointsr]   r  mpis        r   r   zRollbackTest._call  sF    5ZZRS 	>WZ)COT;DNN,<=	> 	> 	>s   %A

Ac                     | j                  d| j                         | j                         j                  j                  dk(  sJ | j                         j                  j                  dk(  sJ y r  )r   r  r  r{   r  r   s    r   test_no_problemszRollbackTest.test_no_problems  sV    

1dnn%~~44??1DDD~~''22a777r   c                 (    | j                  dd        y r  )r   r   s    r   r  zRollbackTest.test_no_installer  s    

1dr   N)	r*   r+   r,   r-   r6   classmethodr   r  r  r1   r   r   r  r    s(    6* > >8
r   r  __main__rw   ),r-   r   r   r%   ro  sysrd  unittestr   unittest.mockr   josepyr   r_   certbotr   r   certbot._internalr   r	   certbot._internal.displayr
   r=   certbot.compatr   certbot.tests.utiltestsr   rf  r   r   ConfigTestCaser   r3   r   r   r  TestCaser  r*   exitmainargv__file__r1   r   r   <module>r     s   )     
    #     % ' 8  & &i,-
)

 1
2
8Y55 8>y+9++ y+x+y// +(wI! wItH8( H8V8$$ , zCHH[V[[!"
234 r   