
    M/eX:                     f   d Z ddlZddlZddl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c mZ  G d d	ej"                        Z G d
 dej"                        Z G d dej(                        Zedk(  r4 ej.                   ej0                  ej2                  dd egz                yy)z#Tests for certbot._internal.renewal    N)mock)
challenges)configuration)errors)storagec                      e Zd Zej                  j                  ej                  d      d        Zej                  j                  ej                  d      d        Z	 ej                  d      d        Z
 ej                  d      d        Zej                  j                  ej                  d      d        Z ej                  d      ej                  j                  ej                  d      d	               Z ej                         ej                  j                  ej                  d      d
               Zej                  j                  ej                  d      d        Zy)RenewalTestset_by_userc                    d|_         t        j                  | j                  j                  d      }d | j                  _        d | j                  _        d | j                  _        t        j                  | j                        }t        j                  ||      }|j                  d   }ddlm} |j                  ||       |j                  dgk(  sJ y )NFzsample-renewal-ancient.confrenewalparamsr   renewalz	/var/www/)return_value	test_utilmake_lineageconfig
config_diraccountemailwebroot_pathr   NamespaceConfigr   RenewableCertcertbot._internalr   _restore_webroot_config)selfmock_set_by_userrc_pathr   lineager   r   s          F/usr/lib/python3/dist-packages/certbot/_internal/tests/renewal_test.py!test_ancient_webroot_renewal_confz-RenewalTest.test_ancient_webroot_renewal_conf   s    (-%((KK""$AC" #' ..t{{;''8--o>-''>""{m333    c                    ddl m} d|_        ddiddgd}|j                  | j                  |       | j                  j
                  ddik(  sJ | j                  j                  ddgk(  sJ i dd}|j                  | j                  |       | j                  j
                  i k(  sJ | j                  j                  dgk(  sJ y )Nr   r   Fztest.example.comz/var/www/testz/var/www/other)webroot_mapr   )r   r   r   r   r   r#   r   )r   r   r   r   s       r    test_webroot_params_conservationz,RenewalTest.test_webroot_params_conservation!   s    
 	.(-% /@,.>?
 	'']C{{&&+=*OOOO{{''O=M+NNNN +
 	'']C{{&&",,,{{''O+<<<<r!   z4certbot._internal.renewal._avoid_reuse_key_conflictsc                 D   d| j                   _        d| j                   _        d| j                   _        t	        j
                  | j                         }t        j                  | j                   j                  d      }t        j                  ||      }t        j                         }d|j                  _        ddlm} t        j"                  d      5  |j%                  | j                   d ||       d d d        | j                   j                  dk(  sJ y # 1 sw Y   %xY w)	NINVALID_VALUETsample-renewal.confNNNNr   r   *certbot._internal.renewal.hooks.renew_hook	secp256r1)r   elliptic_curve	reuse_keydry_runr   r   r   r   r   r   r   r   	MagicMockobtain_certificater   r   r   patch
renew_certr   !unused_mock_avoid_reuse_conflictsr   r   r   	le_clientr   s          r   test_reuse_key_renewal_paramsz)RenewalTest.test_reuse_key_renewal_params9   s    %4" $"..t{{;((KK""$9;''8NN$	4L	$$1-ZZDE 	Ft{{D)WE	F {{))[888	F 	Fs   DDc                 j   d| j                   _        d| j                   _        d| j                   _        d| j                   _        t        j                  | j                         }t        j                  | j                   j                  dd      }t        j                  ||      }t        j                         }d|j                  _        ddlm} t        j$                  d	      5  |j'                  | j                   d ||       d d d        | j                   j                  d
k(  sJ y # 1 sw Y   %xY w)NINVALID_CURVETecdsazsample-renewal-ec.confecr(   r   r   r)   r*   )r   r+   r,   r-   key_typer   r   r   r   r   r   r   r   r.   r/   r   r   r   r0   r1   r2   s          r    test_reuse_ec_key_renewal_paramsz,RenewalTest.test_reuse_ec_key_renewal_paramsN   s    %4" $"&..t{{;((KK""$

 ''8NN$	4L	$$1-ZZDE 	Ft{{D)WE	F {{))[888	F 	Fs   &D))D2c                    d|_         d| j                  _        d| j                  _        d| j                  _        t        j                  | j                        }t        j                  | j                  j                  d      }t        j                  ||      }t        j                         }d|j                  _         ddlm} t        j"                  d      5  |j%                  | j                  d ||       d d d        | j                  j&                  dk(  sJ | j                  j(                  d	k(  sJ | j                  j                  sJ |j                  j+                  t        j,                  d        y # 1 sw Y   xY w)
NFTr'   r(   r   r   r)   r*   r8   )r   r   r,   new_keyr-   r   r   r   r   r   r   r   r   r.   r/   r   r   r0   r1   r+   r;   assert_called_withANY)r   r   r   r   r   r4   r   s          r   test_new_keyzRenewalTest.test_new_keyg   s1   (-% !%""..t{{;((KK""$9;''8NN$	4L	$$1-ZZDE 	Ft{{D)WE	F {{))[888{{##w...{{$$$$$$77$G	F 	Fs   E::Fr)   c                    d|_         d| j                  _        d| j                  _        d| j                  _        d| j                  _        t        j                  | j                        }t        j                  | j                  j                  d      }t        j                  ||      }d|j                  d   d<   t        j                         }d|j                  _         d	d
lm} t%        j&                  t(        j*                  d      5  |j-                  | j                  d ||       d d d        d |_        d| j                  _        |j-                  | j                  d ||       y # 1 sw Y   AxY w)NFTrsai   r'   r   r,   r(   r   r   zUnable to change the --key-type)matchc                     | dk(  S )Nr,    )vars    r   <lambda>z6RenewalTest.test_reuse_key_conflicts.<locals>.<lambda>   s    3+3E r!   )r   r   r,   r;   rsa_key_sizer-   r   r   r   r   r   r   r   r   r.   r/   r   r   pytestraisesr   Errorr1   side_effect)r   r   unused_mock_renew_hookr   r   r   r4   r   s           r   test_reuse_key_conflictsz$RenewalTest.test_reuse_key_conflicts   s+    ).% !%$#' "..t{{;((KK""$9;''8>Bo.{;NN$	4L	$$1-]]6<</PQ 	Ft{{D)WE	F (F$ %4;;iA	F 	Fs   E,,E5c                 l   d|_         t        j                  | j                        }d|_        t        j                  | j                  j                  d      }ddlm	} t        j                  | j                        }|j                  ||      }t        |j                  t        j                         sJ y )NFz sample-renewal-deprecated-optionz%sample-renewal-deprecated-option.confr   r   )r   r   r   r   certnamer   r   r   r   r   copydeepcopyreconstitute
isinstancemanual_public_ip_logging_okr   r.   )r   r   unused_mock_get_utilityr   r   r   lineage_configrenewal_candidates           r   &test_remove_deprecated_config_elementsz2RenewalTest.test_remove_deprecated_config_elements   s     ).%..t{{;<((KK""$KM 	.t{{3#00I .DDdnnUUUr!   c                     d|_         t        j                  | j                  j                  dd      }ddlm} t        j                  | j                        }|j                  ||       |j                  dk(  sJ y )NFr'   r9   r   r   rC   )r   r   r   r   r   r   r   rR   rS   rT   r;   )r   r   r   r   rX   s        r   test_absent_key_type_restoredz)RenewalTest.test_absent_key_type_restored   sd    (-%(()?)?AV[`a-t{{3^W5&&%///r!   N)__name__
__module____qualname__r   r0   objectr   r   r    r$   r5   r<   rA   rO   r   patch_display_utilrZ   r\   rF   r!   r   r	   r	      sw   	ZZ}44mD4 E4 
ZZ}44mD= E=. TZZFG9 H9( TZZFG9 H90 
ZZ}44mDH EH6 TZZ<=	ZZ}44mDB E >B< "Y!!#	ZZ}44mDV E $V 
ZZ}44mD0 E0r!   r	   c                      e Zd ZdZed        Zej                  j                  e	j                  d      d        Zej                  j                  e	j                  d      d        Zej                  j                  e	j                  d      d        Zej                  j                  e	j                  d      d        Zej                  j                  e	j                  d      d        Zej                  j                  e	j                  d      d	        Zej                  j                  e	j                  d      d
        Zej                  j                  e	j                  d      d        Zd Zy)!RestoreRequiredConfigElementsTestzETests for certbot._internal.renewal.restore_required_config_elements.c                     ddl m}  ||i |S )Nr   ) restore_required_config_elements)certbot._internal.renewalre   )clsargskwargsre   s       r   _callz'RestoreRequiredConfigElementsTest._call   s    N/@@@r!   r
   c                     d|_         | j                  | j                  ddi       | j                  j                  du sJ y )NFallow_subset_of_namesTrueT)r   rj   r   rl   r   r   s     r   "test_allow_subset_of_names_successzDRestoreRequiredConfigElementsTest.test_allow_subset_of_names_success   s;    (-%

4;;!8& AB{{00D888r!   c                     d|_         ddi}t        j                  t        j                        5  | j                  | j                  |       d d d        y # 1 sw Y   y xY w)NFrl   mayber   rJ   rK   r   rL   rj   r   r   r   r   s      r   "test_allow_subset_of_names_failurezDRestoreRequiredConfigElementsTest.test_allow_subset_of_names_failure   sL    (-%0':]]6<<( 	3JJt{{M2	3 	3 	3   AAc                    d|_         ddj                  d      i}| j                  | j                  |       t        j
                  j                  t        j                  j                  g}| j                  j                  |k(  sJ y )NFpref_challszhttp-01, dns,)	r   splitrj   r   r   HTTP01typDNS01rw   r   r   r   expecteds       r   test_pref_challs_listz7RestoreRequiredConfigElementsTest.test_pref_challs_list   sl    (-%&(<(<S(AB

4;;.%%)):+;+;+?+?@{{&&(222r!   c                     d|_         ddi}| j                  | j                  |       t        j                  j
                  g}| j                  j                  |k(  sJ y )NFrw   dns)r   rj   r   r   r|   r{   rw   r}   s       r   test_pref_challs_strz6RestoreRequiredConfigElementsTest.test_pref_challs_str   sS    (-%&.

4;;.$$((){{&&(222r!   c                     d|_         ddi}t        j                  t        j                        5  | j                  | j                  |       d d d        y # 1 sw Y   y xY w)NFrw   zfinding-a-shrubberyrr   rs   s      r   test_pref_challs_failurez:RestoreRequiredConfigElementsTest.test_pref_challs_failure   sM    (-%&(=>]]6<<( 	3JJt{{M2	3 	3 	3ru   c                     d|_         | j                  | j                  ddi       | j                  j                  du sJ y )NFmust_staplerm   T)r   rj   r   r   rn   s     r   test_must_staple_successz:RestoreRequiredConfigElementsTest.test_must_staple_success   s:    (-%

4;; 78{{&&$...r!   c                     d|_         ddi}t        j                  t        j                        5  | j                  | j                  |       d d d        y # 1 sw Y   y xY w)NFr   rq   rr   rs   s      r   test_must_staple_failurez:RestoreRequiredConfigElementsTest.test_must_staple_failure   sL    (-%&0]]6<<( 	3JJt{{M2	3 	3 	3ru   c                     ddl m} d | j                  _        d|_        | j                  | j                  d|j                  i       | j                  j                  |j                  d   k(  sJ y )Nr   )	constantsFserver)r   r   r   r   r   rj   V1_URICLI_DEFAULTS)r   r   r   s      r    test_ancient_server_renewal_confzBRestoreRequiredConfigElementsTest.test_ancient_server_renewal_conf   sZ    /!(-%

4;;9+;+; <={{!!Y%;%;H%EEEEr!   c                     ddd}| j                  | j                  |       | j                  | j                  j                  |d          y )Nzhttps://example.orgsomehash)r   r   r   )rj   r   assertEqualr   )r   r   s     r   test_related_valuesz5RestoreRequiredConfigElementsTest.test_related_values   sD     ,!
 	

4;;.,,mI.FGr!   N)r]   r^   r_   __doc__classmethodrj   r   r0   r`   r   r   ro   rt   r   r   r   r   r   r   r   rF   r!   r   rc   rc      s   OA A 
ZZ}44mD9 E9
 
ZZ}44mD3 E3 
ZZ}44mD3 E3 
ZZ}44mD3 E3 
ZZ}44mD3 E3 
ZZ}44mD/ E/
 
ZZ}44mD3 E3 
ZZ}44mDF EF
Hr!   rc   c                   J    e Zd ZdZd Zd Zed        Zd Zd Z	d Z
d Zd	 Zy
)DescribeResultsTestz<Tests for certbot._internal.renewal._renew_describe_results.c                     t        j                  d      t        j                  d      d| _        | j                  d   j                         | _        | j                  d   j                         | _        y )Nz&certbot._internal.renewal.logger.errorz-certbot._internal.renewal.display_util.notify)	log_errornotifyr   r   )r   r0   patchersstartmock_notify
mock_errorr   s    r   setUpzDescribeResultsTest.setUp  s[    $LMjj!PQS  ==288:--4::<r!   c                 b    | j                   j                         D ]  }|j                           y N)r   valuesstop)r   r0   s     r   tearDownzDescribeResultsTest.tearDown  s'    ]]))+ 	EJJL	r!   c                      ddl m}  ||i | y )Nr   )_renew_describe_results)rf   r   )rg   rh   ri   r   s       r   rj   zDescribeResultsTest._call  s    E00r!   c                     | j                   j                  |D cg c]  }t        j                  |       c}       y c c}w r   )r   assert_has_callsr   call)r   linesls      r   _assert_success_outputz*DescribeResultsTest._assert_success_output  s,    ))*GA499Q<*GH*Gs   >c                 z    | j                  t        j                  d      g g g g        | j                  dg       y )NTr-   z%No simulated renewals were attempted.rj   r   r.   r   r   s    r   test_no_renewal_attemptsz,DescribeResultsTest.test_no_renewal_attempts"  s1    

4>>$/RR@##%L$MNr!   c                 ~    | j                  t        j                  d      dgd d d        | j                  g d       y )NFr   good.pem)P
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -z)Congratulations, all renewals succeeded: z  good.pem (success)O- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -r   r   s    r   test_successful_renewalz+DescribeResultsTest.test_successful_renewal&  s4    

4>>%0:,dDQ## %
 	r!   c                    | j                  t        j                  d      g dgg g        | j                  ddg       | j                  j                  t        j                  dd      t        j                  d      g       y )	NFr   bad.pemr   r   z@All %ss failed. The following certificates could not be renewed:r   z  bad.pem (failure)rj   r   r.   r   r   r   r   r   s    r   test_failed_renewalz'DescribeResultsTest.test_failed_renewal/  sp    

4>>%0"yk2rJ##_]%
 	 	((IIXZcdII+,*
 	r!   c                    | j                  t        j                  d      ddgddgdgdg       | j                  g d	       | j                  j                  t        j                  d
d      t        j                  d      g       y )NTr   r   z	good2.pemr   zbad2.pemzfoo.pem expires on 123zerrored.conf)r   z7The following certificates are not due for renewal yet:z"  foo.pem expires on 123 (skipped)z+The following simulated renewals succeeded:z+  good.pem (success)
  good2.pem (success)
zB
Additionally, the following renewal configurations were invalid: z  errored.conf (parsefail)r   zThe following %ss failed:zsimulated renewalz(  bad.pem (failure)
  bad2.pem (failure)r   r   s    r   test_all_renewalz$DescribeResultsTest.test_all_renewal:  s    

4>>$/,y*.E,-/?	A 	## 	%
 		 	((II13FGIIAB*
 	r!   N)r]   r^   r_   r   r   r   r   rj   r   r   r   r   r   rF   r!   r   r   r     s>    F= 1 1IO	r!   r   __main__   )r   rR   sysunittestr   rJ   acmer   certbotr   r   r   r   certbot.tests.utiltestsutilr   ConfigTestCaser	   rc   TestCaser   r]   exitmainargv__file__rF   r!   r   <module>r      s    )  
     !  % & &m0)** m0`JH	(@(@ JHZ>(++ >B zCHH[V[[!"
234 r!   