U
    ÓZj„¦  ã                   @   s  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Zddl	Z	ddl
m  mZ ddl	mZ ddlmZ ddlmZ ddlmZ e d¡Zdd	„ Zd
d„ ZG dd„ dejƒZG dd„ dejƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZedk�re  ¡  dS )úTests for certbot.storage.é    N)Úerrors)Úos)Ú
filesystem)ÚALL_FOURúcert_512.pemc                 C   s   t D ]}t t| |ƒ¡ qdS )z9Unlink all four items associated with this RenewableCert.N)r   r   ÚunlinkÚgetattr)Ú	rc_objectÚkind© r   ú]/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/certbot/tests/storage_test.pyÚ
unlink_all   s    r   c              
   C   s4   t D ]*}tt| |ƒdƒ�}| |¡ W 5 Q R X qdS )z9Put dummy data into all four files of this RenewableCert.ÚwN)r   Úopenr	   Úwrite)r
   r   Úfr   r   r   Úfill_with_sample_data   s    r   c                   @   s`   e Zd ZdZdd„ Zdd„ Ze d¡e d¡dd	„ ƒƒZe d¡d
d„ ƒZ	e d¡dd„ ƒZ
dS )ÚRelevantValuesTestz*Tests for certbot.storage.relevant_values.c                 C   s   ddi| _ d S )NÚserverúexample.org)Úvalues©Úselfr   r   r   ÚsetUp'   s    zRelevantValuesTest.setUpc                 O   s   ddl m} |||ŽS )Nr   )Úrelevant_values)Úcertbot.storager   )r   ÚargsÚkwargsr   r   r   r   Ú_call*   s    zRelevantValuesTest._callzcertbot.cli.option_was_setz.certbot.plugins.disco.PluginsRegistry.find_allc                 C   s6   dg|_ d|_ d| jd< |  |  | j ¡ ¡| j¡ d S )Nzcertbot-foo:barTé*   zcertbot_foo:bar_baz)Úreturn_valuer   ÚassertEqualr   Úcopy)r   Zmock_find_allÚmock_option_was_setr   r   r   Útest_namespace.   s    
 ÿz!RelevantValuesTest.test_namespacec                 C   sP   d|_ d| jd< d| jd< d| jd< | j ¡ }d| jd< |  |  | j¡|¡ d S )	NTZallow_subset_of_namesÚapacheZauthenticatori9  Úrsa_key_sizeZthereZhello©r!   r   r#   r"   r   ©r   r$   Zexpected_relevant_valuesr   r   r   Útest_option_set8   s    




z"RelevantValuesTest.test_option_setc                 C   s2   d|_ | j ¡ }d| jd< |  |  | j¡|¡ d S )NFi   r'   r(   r)   r   r   r   Útest_option_unsetD   s    

z$RelevantValuesTest.test_option_unsetN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   ÚmockÚpatchr%   r*   r+   r   r   r   r   r   $   s   
r   c                       s2   e Zd ZdZ‡ fdd„Zd	dd„Zdd„ Z‡  ZS )
ÚBaseRenewableCertTestz¿Base class for setting up Renewable Cert tests.

    .. note:: It may be required to write out self.config for
    your test.  Check :class:`.cli_test.DuplicateCertTest` for an example.

    c              	      s^  ddl m} tt| ƒ ¡  t tj 	| j
jdd¡¡ tj 	| j
jdd¡}t |¡ t tj 	| j
jd¡¡ t ¡ }tD ]&}tj 	| j
jdd|d ¡}|||< qvttj 	| j
jddd¡d	ƒ� W 5 Q R X ||d< tj 	| j
jdd
¡|_| ¡  || _ttj 	| j
jdd¡dƒ�}| d¡ W 5 Q R X t ¡ | _t d¡�}d|_| |j| j
¡| _W 5 Q R X d S )Nr   ©ÚstorageÚliver   ÚarchiveZrenewalú.pemÚREADMEÚaúexample.org.confzIGNORE.THISr   zThis file should be ignored!z-certbot.storage.RenewableCert._check_symlinksT)Úcertbotr4   Úsuperr2   r   r   Úmakedirsr   ÚpathÚjoinÚconfigÚ
config_dirÚ	configobjÚ	ConfigObjr   r   Úfilenamer   Úconfig_fileÚdefaultsr0   r1   r!   ÚRenewableCertÚtest_rc)r   r4   Úarchive_pathrE   r   Ú	kind_pathZjunkÚcheck©Ú	__class__r   r   r   V   s<    
ÿ
ÿÿ
ÿ
zBaseRenewableCertTest.setUpNc                 C   s˜   t | j|ƒ}tj |¡r"t |¡ t tj tjjtjjddd 	||¡¡|¡ t
|dƒ�"}| |d krp| d¡n|¡ W 5 Q R X |dkr”t |d¡ d S )Nr6   r   z
{0}{1}.pemÚwbÚasciiÚprivkeyé€  )r	   rH   r   r>   Úlexistsr   Úsymlinkr?   ÚpardirÚformatr   r   Úencoder   Úchmod)r   r   ÚverÚvalueÚlinkr   r   r   r   Ú_write_out_kind|   s    
 
ÿþ&z%BaseRenewableCertTest._write_out_kindc                 C   s&   t D ]}|  |d¡ |  |d¡ qd S )Né   é   )r   r[   ©r   r   r   r   r   Ú_write_out_ex_kindsˆ   s    z)BaseRenewableCertTest._write_out_ex_kinds)N)r,   r-   r.   r/   r   r[   r_   Ú__classcell__r   r   rL   r   r2   N   s   &
r2   c                   @   s¢  e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Ze d¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Ze d'¡e d(¡d)d*„ ƒƒZd+d,„ Ze d'¡e d-¡d.d/„ ƒƒZe d0¡d1d2„ ƒZe d3¡e d0¡d4d5„ ƒƒZe d0¡e d6¡d7d8„ ƒƒZe d0¡d9d:„ ƒZ e d0¡d;d<„ ƒZ!e d=¡d>d?„ ƒZ"d@dA„ Z#dBdC„ Z$dDdE„ Z%dFdG„ Z&dHdI„ Z'dJdK„ Z(dLdM„ Z)dNS )OÚRenewableCertTestsr   c                 C   sH   |   | jjd¡ tD ].}|   t| j|ƒtj | jj	dd|d ¡¡ qd S )Nr   r5   r7   )
r"   rH   Úlineagenamer   r	   r   r>   r?   r@   rA   r^   r   r   r   Útest_initialization’   s    
    ÿÿz&RenewableCertTests.test_initializationc              	   C   sx   ddl m} tj | jjd¡}t|dƒ�}| d¡ W 5 Q R X |  	t
j|j|| j¡ t |¡ |  	t
j|jd| j¡ dS )z€Test that the RenewableCert constructor will complain if
        the renewal configuration file doesn't end in ".conf"

        r   r3   zbroken.confr   z[No closing bracket for you!ZfunN)r;   r4   r   r>   r?   r@   rA   r   r   ÚassertRaisesr   ÚCertStorageErrorrG   r   )r   r4   Úbrokenr   r   r   r   Útest_renewal_bad_config™   s     ÿ
 ÿz*RenewableCertTests.test_renewal_bad_configc                 C   sd   ddl m} t ¡ }d|d< d|d< d|d< tj | jjd	¡|_	| 
¡  |  tj|j|j	| j¡ d
S )zƒTest that the RenewableCert constructor will complain if
        the renewal configuration file is missing a required file element.r   r3   zimaginary_cert.pemÚcertzimaginary_chain.pemÚchainzimaginary_fullchain.pemÚ	fullchainzimaginary_config.confN)r;   r4   rB   rC   r   r>   r?   r@   rA   rD   r   rd   r   re   rG   )r   r4   r@   r   r   r   Útest_renewal_incomplete_config¨   s     ÿz1RenewableCertTests.test_renewal_incomplete_configc              	   C   s^   ddl m} |  ¡  |  d| jk¡ t d¡�}| | jj| j	¡ W 5 Q R X |  
|jj¡ d S )Nr   r3   Úversionúcertbot.storage.logger)r;   r4   r_   Ú
assertTruerE   r0   r1   rG   rD   r@   ÚassertFalseÚwarningÚcalled©r   r4   Úmock_loggerr   r   r   Útest_no_renewal_version¶   s    z*RenewableCertTests.test_no_renewal_versionc              	   C   s|   ddl m} |  ¡  d| jd< | j ¡  t d¡�}| | jj| j	¡ W 5 Q R X |  
|jj¡ |  
d|jjd d k¡ d S )Nr   r3   z99.99.99rl   rm   )r;   r4   r_   rE   r   r0   r1   rG   rD   r@   rn   Úinforq   Z	call_argsrr   r   r   r   Útest_renewal_newer_versionÀ   s    

z-RenewableCertTests.test_renewal_newer_versionc                 C   s®  | j j}d| j _|  | j  ¡ ¡ || j _|  | j  ¡ ¡ t| j ƒ |  | j  ¡ ¡ t| j ƒ tD ]&}t tj	 
d|d ¡t| j |ƒ¡ q`|  | j  ¡ ¡ t| j ƒ tD ]*}t tj	 
| jj|d ¡t| j |ƒ¡ q¦|  | j  ¡ ¡ t| j ƒ tD ],}t tj	 
dddd|d ¡t| j |ƒ¡ qð|  | j  ¡ ¡ t| j ƒ |  | j  ¡ ¡ t | j j¡ t tj	 
ddddd¡| j j¡ t| j jdƒ�}| d¡ W 5 Q R X |  | j  ¡ ¡ d S )	Nzrelative/pathú..z17.pemr6   r   zfullchain_17.pemr   zwrongly-named fullchain)rH   rh   ro   Ú_consistentr   r   r   r   rS   r>   r?   r	   r@   rA   rn   r   rj   r   r   )r   Zoldcertr   r   r   r   r   Útest_consistentÌ   sL    


ÿ

ÿ
ÿ
þ
ÿÿz"RenewableCertTests.test_consistentc                 C   sÀ   |   dd¡ |  tj | j d¡tj | jj	ddd¡¡¡ t 
| jj¡ t tj | jj	ddd¡| jj¡ t| jjdƒ�}| d¡ W 5 Q R X |  tj | j d¡tj | jj	ddd¡¡¡ d S )Nrh   é   r6   r   z
cert17.pemr   )r[   rn   r   r>   ÚsamefilerH   Úcurrent_targetr?   r@   rA   r   rh   rS   r   r   )r   r   r   r   r   Útest_current_targetö   s*    þÿÿÿþÿz&RenewableCertTests.test_current_targetc              	   C   s\   dD ]}|   d|¡ qt | jj¡ t tj ddddd¡| jj¡ |  | j 	d¡d¡ d S )N)é   é   é
   é   rh   rw   r6   r   z
cert10.pemr€   )
r[   r   r   rH   rh   rS   r>   r?   r"   Úcurrent_version)r   rX   r   r   r   Útest_current_version  s    ÿÿz'RenewableCertTests.test_current_versionc                 C   s   |   | j d¡d ¡ d S )Nrh   )r"   rH   r‚   r   r   r   r   Útest_no_current_version  s    z*RenewableCertTests.test_no_current_versionc                 C   sæ   t j dd¡D ]}tD ]}|  ||¡ qq|  | j ¡ d¡ |  | j ¡ d¡ |  dd¡ |  | j ¡ d¡ |  | j ¡ d¡ |  dd¡ |  dd¡ |  | j ¡ d¡ tD ]}|  |d	¡ q¬|  | j ¡ d	¡ |  | j ¡ d
¡ d S )Nr~   é   r   rP   é   é   rh   rj   rz   é   )	ÚsixÚmovesÚranger   r[   r"   rH   Úlatest_common_versionZnext_free_version©r   rX   r   r   r   r   Útest_latest_and_next_versions  s    z0RenewableCertTests.test_latest_and_next_versionsrm   c                 C   sœ   t  ¡  }| j_t  ¡  }| j_t  ¡ | j_d|_|  | j ¡ d¡ |  |j	d¡ |  |j
j	d¡ d|_|  | j ¡ d¡ |  |j	d¡ |  |j
j	d¡ d S )NFTr   r~   )r0   ZMockrH   Úupdate_all_links_toÚhas_pending_deploymentrŒ   r!   r"   Zensure_deployedZ
call_countrp   )r   rs   Zmock_updateZmock_has_pendingr   r   r   Útest_ensure_deployed*  s    z'RenewableCertTests.test_ensure_deployedc                 C   sÚ   t j dd¡D ].}tD ]$}|  ||¡ |  || j |¡¡ qq| j dd¡ | j dd¡ |  d| j d¡¡ |  d| j d¡¡ |  d| j d¡¡ |  d| j d	¡¡ | j dd
¡ |  t	j
 t	 | jj¡¡d¡ d S )Nr~   r…   rh   é   rP   é   r   ri   rj   i¸  zchain3000.pem)r‰   rŠ   r‹   r   r[   r"   rH   r‚   Ú_update_link_tor   r>   ÚbasenameÚreadlinkri   r�   r   r   r   Útest_update_link_to;  s    ÿz&RenewableCertTests.test_update_link_toc              	   C   s.   |   dd¡ |  dtj | j dd¡¡¡ d S )Nrh   r\   z	cert8.pemr‡   )r[   r"   r   r>   r•   rH   rl   r   r   r   r   Útest_versionN  s    ÿzRenewableCertTests.test_versionc                 C   s¤   t j dd¡D ].}tD ]$}|  ||¡ |  || j |¡¡ qq|  | j ¡ d¡ t j dd¡D ]@}| j 	|¡ tD ]}|  || j |¡¡ qr|  | j ¡ d¡ q^d S ©Nr~   r…   r   )
r‰   rŠ   r‹   r   r[   r"   rH   r‚   rŒ   r�   r�   r   r   r   Ú test_update_all_links_to_successV  s    z3RenewableCertTests.test_update_all_links_to_successc              	   C   sf   t jfdd„}|  ¡  t d¡�}||_|  t| jj	d¡ W 5 Q R X t
D ]}|  | j |¡d¡ qHd S )Nc                 S   s0   t j | ¡}d|kr$| d¡r$t‚n|| ƒ d S )Nrj   Úprev)r   r>   r•   Ú
startswithÚ
ValueError)r>   Úreal_unlinkr•   r   r   r   Úunlink_or_raisec  s    zTRenewableCertTests.test_update_all_links_to_partial_failure.<locals>.unlink_or_raiseúcertbot.storage.os.unlinkr\   ©r   r   r_   r0   r1   Úside_effectrd   r�   rH   r�   r   r"   r‚   ©r   rŸ   Zmock_unlinkr   r   r   r   Ú(test_update_all_links_to_partial_failureb  s    z;RenewableCertTests.test_update_all_links_to_partial_failurec              	   C   sf   t jfdd„}|  ¡  t d¡�}||_|  t| jj	d¡ W 5 Q R X t
D ]}|  | j |¡d¡ qHd S )Nc                 S   s"   dt j | ¡krt‚n|| ƒ d S )Nrj   )r   r>   r•   r�   )r>   rž   r   r   r   rŸ   t  s    zQRenewableCertTests.test_update_all_links_to_full_failure.<locals>.unlink_or_raiser    r\   r]   r¡   r£   r   r   r   Ú%test_update_all_links_to_full_failures  s    z8RenewableCertTests.test_update_all_links_to_full_failurec                 C   sª   t j dd¡D ].}tD ]$}|  ||¡ |  || j |¡¡ qqt j dd¡D ]X}| j |¡ tD ]}|  || j |¡¡ q`|dk r”|  	| j 
¡ ¡ qL|  | j 
¡ ¡ qLd S r™   )r‰   rŠ   r‹   r   r[   r"   rH   r‚   r�   rn   r�   ro   r�   r   r   r   Útest_has_pending_deploymentƒ  s    z.RenewableCertTests.test_has_pending_deploymentc                 C   s²   |   ddt d¡¡ |  | j ¡ ddg¡ |   ddt d¡¡ |  | j d¡ddg¡ |   ddt d¡¡ |  | j d¡dgd	d
„ dD ƒ ¡ t | jj¡ |  	t
j| jj¡ d S )Nrh   r\   zcert-san_512.pemúexample.comzwww.example.comé   r   zcert-5sans_512.pemc                 S   s   g | ]}d   |¡‘qS )z{0}.example.com)rU   )Ú.0Úcr   r   r   Ú
<listcomp>¤  s     z1RenewableCertTests.test_names.<locals>.<listcomp>Úabcd)r[   Ú	test_utilÚload_vectorr"   rH   Únamesr   r   rh   rd   r   re   r   r   r   r   Ú
test_names‘  s&    ÿÿ  ÿ
þzRenewableCertTests.test_nameszcertbot.storage.clizcertbot.storage.datetimec           	   	   C   sâ   t  d¡}|  ¡  | j d¡ t| jjdƒ�}| |¡ W 5 Q R X | j d¡ t| jjdƒ�}| |¡ W 5 Q R X tj	|_	d|j
_i | jjd< dD ]J\}}}tj |¡}||jj_|| jjd< || jjd	< |  | j ¡ |¡ q’d
S )z<Test should_autorenew() on the basis of expiry time windows.r   r\   rN   r]   FÚrenewalparams))é@*ŒTz2 monthsT)r²   z1 weekT)r²   z4 daysF)r²   ú2 daysF)é@äúIz7 yearsT)r´   z11 years 2 monthsT)r´   z8 hoursF)r´   r³   F)r´   z40 daysF)r´   z9 monthsF)é Ž¤Tz	0 secondsT)rµ   z
10 secondsT)rµ   z
10 minutesT)rµ   z10 weeksT)rµ   z	10 monthsT)rµ   z10 yearsT)rµ   z	99 monthsTZdeploy_before_expiryZrenew_before_expiryN)r­   r®   r_   rH   r�   r   rh   r   ÚdatetimeÚ	timedeltaÚ
set_by_clir!   ÚconfigurationÚutcfromtimestampÚutcnowr"   Úshould_autorenew)	r   Zmock_datetimeÚmock_cliZ	test_certr   Úcurrent_timeÚintervalÚresultZsometimer   r   r   Útest_time_interval_judgmentsª  s"    

z/RenewableCertTests.test_time_interval_judgmentsc                 C   s`   i | j jd< |  | j  ¡ ¡ d| j jd d< |  | j  ¡ ¡ d| j jd d< |  | j  ¡ ¡ d S )Nr±   ÚTrueÚ	autorenewÚFalse)rH   r¹   rn   Zautorenewal_is_enabledro   r   r   r   r   Útest_autorenewal_is_enabledØ  s    z.RenewableCertTests.test_autorenewal_is_enabledz*certbot.storage.RenewableCert.ocsp_revokedc                 C   sn   d|j _ddi| jjd< |  | j ¡ ¡ d| jjd d< tD ]}|  |d¡ q<d|_|  | j ¡ ¡ d|_dS )	zTTest should_autorenew on the basis of reasons other than
        expiry time window.FrÃ   rÄ   r±   rÂ   r\   TN)	r¸   r!   rH   r¹   ro   r¼   r   r[   rn   )r   Z	mock_ocspr½   r   r   r   r   Útest_should_autorenewá  s    z(RenewableCertTests.test_should_autorenewzcertbot.storage.relevant_valuesc                 C   s*  dd„ |_ tj dd¡D ]}tD ]}|  ||¡ q q| j d¡ |  d| j 	ddd d| j
¡¡ t| j dd¡ƒ�}|  | ¡ d	¡ W 5 Q R X t| j d
d¡ƒ�}|  | ¡ d¡ W 5 Q R X t| j dd¡ƒ�}|  | ¡ d¡ W 5 Q R X |  tj | j dd¡¡¡ |  tj | j dd¡¡¡ |  d| j 	ddd d| j
¡¡ |  d| j 	ddd d| j
¡¡ dD ]F}|  tj | j d|¡¡¡ |  dtj t | j d|¡¡¡¡ �q`tD ]<}|  | j |¡ttj dd¡ƒ¡ |  | j |¡d¡ �q¬| j d¡ |  d| j 	ddd d| j
¡¡ tD ]<}|  | j |¡ttj dd¡ƒ¡ |  | j |¡d¡ �qt| j dd¡ƒ�}|  | ¡ d¡ W 5 Q R X tj | j
j| jj¡d }t|dƒ�}| d¡ W 5 Q R X |  d| j 	ddd d!| j
¡¡ |  tj | j dd¡¡¡ |  tj | j dd¡¡¡ |  tj |¡¡ d S )"Nc                 S   s   | S ©Nr   ©Úxr   r   r   Ú<lambda>÷  ó    z8RenewableCertTests.test_save_successor.<locals>.<lambda>r~   r…   r’   s   new certó	   new chainrh   znew certri   z	new chainrj   znew certnew chainrP   r†   s   agains   newer chainr‡   s   hellos   other chain)r…   r†   r‡   zprivkey3.pemé	   s   lasts   attemptr€   Zlastattemptz	.conf.newr   z)We previously crashed while writing me :(s   withó   as   key)r¢   r‰   rŠ   r‹   r   r[   rH   r�   r"   Úsave_successorr@   r   rl   Úreadro   r   r>   Úislinkrn   r•   r–   Úavailable_versionsÚlistr‚   r?   Úrenewal_configs_dirrb   r   Úexists)r   Úmock_rvrX   r   r   ÚiZtemp_config_filer   r   r   Útest_save_successoró  s”    
  ÿÿ  ÿÿ  ÿÿÿ"  ÿÿÿÿÿ  ÿÿz&RenewableCertTests.test_save_successorz:Group/everybody permissions are not maintained on Windows.c                 C   s  dd„ |_ tD ]}|  |d¡ q| j d¡ |  t | j dd¡d¡¡ t 	| j dd¡d¡ | j 
ddd d| j¡ |  t | j dd	¡d¡¡ | j 
d	dd
d| j¡ |  t | j dd¡d¡¡ t 	| j dd¡d¡ | j 
ddd
d| j¡ |  t | j dd¡d¡¡ d S )Nc                 S   s   | S rÇ   r   rÈ   r   r   r   rÊ   7  rË   zMRenewableCertTests.test_save_successor_maintains_group_mode.<locals>.<lambda>r~   rP   rQ   i$  ó   newcertrÌ   r“   ó   new_privkeyr’   i¤  é   é   )r¢   r   r[   rH   r�   rn   r   Ú
check_moderl   rW   rÏ   r@   )r   rÖ   r   r   r   r   Ú(test_save_successor_maintains_group_mode2  s    
z;RenewableCertTests.test_save_successor_maintains_group_modez8certbot.storage.filesystem.copy_ownership_and_apply_modec                 C   st   dd„ |_ tD ]}|  |d¡ q| j d¡ | j ddd d| j¡ |  |j¡ | j dddd| j¡ |  	|j¡ d S )Nc                 S   s   | S rÇ   r   rÈ   r   r   r   rÊ   M  rË   zFRenewableCertTests.test_save_successor_maintains_gid.<locals>.<lambda>r~   rÙ   rÌ   r“   rÚ   )
r¢   r   r[   rH   r�   rÏ   r@   ro   rq   rn   )r   Zmock_ownershiprÖ   r   r   r   r   Ú!test_save_successor_maintains_gidH  s    
z4RenewableCertTests.test_save_successor_maintains_gidc              	   C   s¶  dd„ |_ ddlm} |j dddd| j¡}|  | ¡ ¡ |  tj	 
tj	 | jjd	¡¡¡ |  tj	 
tj	 | jjd
¡¡¡ |  tj	 
tj	 | jjdd
¡¡¡ |  t |jd¡¡ t|jdƒ�}|  | ¡ d¡ W 5 Q R X |j dddd| j¡}|  tj	 
tj	 | jjd¡¡¡ |  tj	 
tj	 | jjdd
¡¡¡ t tj	 | jjd¡¡ |  tj|jjdddd| j¡ t tj	 | jjd¡¡ |  tj|jjdddd| j¡ |j dddd| j¡}dS )z$Test for new_lineage() class method.c                 S   s   | S rÇ   r   rÈ   r   r   r   rÊ   [  rË   z5RenewableCertTests.test_new_lineage.<locals>.<lambda>r   r3   úthe-lineage.coms   certs   privkeys   chainúthe-lineage.com.confr8   rQ   Úrbs	   certchainó   cert2ó   privkey2ó   chain2zthe-lineage.com-0001.confzthe-lineage.com-0001zthe-lineage.com-0002s   cert3s   privkey3s   chain3zother-example.coms   cert4s   privkey4s   chain4N)r¢   r;   r4   rG   Únew_lineager@   rn   rx   r   r>   rÕ   r?   rÔ   Úlive_dirr   rÝ   Zkey_pathr   rj   r"   rÐ   Úmkdirrd   r   re   Údefault_archive_dir)r   rÖ   r4   rÀ   r   r   r   r   Útest_new_lineageV  sŒ    
    ÿ ÿ ÿ  ÿ    ÿ ÿ  ÿ
 ÿ    þ   ý    ÿz#RenewableCertTests.test_new_lineagec              	   C   s¾   dd„ |_ ddlm} t | jj¡ t | jj¡ t | jj¡ |j	 
dddd| j¡ |  tj tj | jjd	¡¡¡ |  tj tj | jjdd
¡¡¡ |  tj tj | jjdd¡¡¡ dS )z9Test that directories can be created if they don't exist.c                 S   s   | S rÇ   r   rÈ   r   r   r   rÊ   Š  rË   zFRenewableCertTests.test_new_lineage_nonexistent_dirs.<locals>.<lambda>r   r3   rà   rã   rä   rå   rá   zprivkey.pemzprivkey1.pemN)r¢   r;   r4   ÚshutilÚrmtreer@   rÔ   ré   rç   rG   ræ   rn   r   r>   rÕ   r?   )r   rÖ   r4   r   r   r   Ú!test_new_lineage_nonexistent_dirs…  s8    
    ÿ
 ÿÿ  ÿ  ÿz4RenewableCertTests.test_new_lineage_nonexistent_dirsz(certbot.storage.util.unique_lineage_namec              	   C   s4   ddl m} d|_|  tj|jjdddd| j¡ d S )Nr   r3   )Zthis_does_not_end_with_dot_confZyikesr§   rh   rP   ri   )	r;   r4   r!   rd   r   re   rG   ræ   r@   )r   Zmock_ulnr4   r   r   r   Útest_invalid_config_filename›  s        þz/RenewableCertTests.test_invalid_config_filenamec                 C   s€   |   tj| jjd¡ |   tj| jjd¡ |   tj| jjdd¡ |   tj| jjd¡ |   tj| jjd¡ |   tj| jj	dd¡ d S )NÚelephantrz   )
rd   r   re   rH   r|   r‚   rl   rÒ   Znewest_available_versionr”   r   r   r   r   Útest_bad_kind£  s@      ÿ  ÿ   ÿ þ þ  þz RenewableCertTests.test_bad_kindc                 C   s   |   | j ¡ ¡ d S rÇ   )ro   rH   Zocsp_revokedr   r   r   r   Útest_ocsp_revokedµ  s    z$RenewableCertTests.test_ocsp_revokedc           
   )   C   sÔ  ddl m} tj t dddddd¡¡}tj t dd	d
ddd¡¡}t d¡ t dd	dddd¡¡}|df||df||df||df|t d¡ |df|t d¡ |df|t d¡ |df|t d¡ |df|t d¡ |df|t d¡ |df|t d¡ |df|t d¡ |df|t d¡ |df|t d¡ |df|t d¡ |df|t d¡ |d f|t d¡ |d f|t d!¡ |d"f|t d#¡ |d"f|t d#¡ i}| ¡ D ]&\}}|\}}	|  	| 
||	¡|¡ �q¨d S )$Nr   r3   iÓ  r]   r�   é;   é   iÜ  r€   rˆ   é   é   zAsia/Shanghaiiß  é   é   é   é)   Ú z17 daysrz   Z30é   z7 weeksé1   z1 monthz1 yearin  im  z1 year 1 dayio  z1 year-1 dayil  z4 yearsiµ  )r;   r4   ÚpytzÚUTCÚfromutcr¶   Útimezoner·   Úitemsr"   Zadd_time_interval)
r   r4   Ztime_1Ztime_2Ztime_3ZintendedÚ
parametersZexceptedZ	base_timer¿   r   r   r   Útest_add_time_intervalº  sd    
ÿ                   ëÿz)RenewableCertTests.test_add_time_intervalc                 C   sŒ   i | j jd< | j jd }|  | j jd¡ d|d< |  | j jd¡ d|d< |  | j jd¡ d|d< |  | j jd¡ d|d< |  | j jd¡ d S )	Nr±   Fz6https://acme-staging-v02.api.letsencrypt.org/directoryr   Tz)https://staging.someotherca.com/directoryz.https://acme-v01.api.letsencrypt.org/directoryz.https://acme-v02.api.letsencrypt.org/directory)rH   r¹   r"   Zis_test_cert)r   Úrpr   r   r   Útest_is_test_certä  s    z$RenewableCertTests.test_is_test_certc                 C   sZ   ddl m} |  tj|j| jj| j¡ t	 
d| jtd  ¡ |  tj|j| jj| j¡ d S )Nr   r3   Úmissing)r;   r4   rd   r   re   rG   rE   rD   r@   r   rS   r   ©r   r4   r   r   r   Útest_missing_certñ  s     þ þz$RenewableCertTests.test_missing_certc           
   	   C   s  t j | jjd¡}t j | jjd¡}t|dƒ�}| d¡ W 5 Q R X t |d¡ i }t	D ]}d||< qXd}dd	i}d
dl
m} | |||||¡ t|dƒ�}| ¡ }	W 5 Q R X |  d|	k¡ |  d|	k¡ |  d|	k¡ |  d t
j¡|	k¡ |  t t  |¡j¡t t  |¡j¡¡ d S )Nzsample-filezsample-file.newr   zM[renewalparams]
useful = value # A useful value
useless = value # Not needed
i   Z	somewhereZthe_archiveZusefulÚ	new_valuer   r3   Úrzuseful = new_valuezA useful valueZuselesszversion = {0})r   r>   r?   r@   rA   r   r   r   rW   r   r;   r4   Zwrite_renewal_configrÐ   rn   rU   Ú__version__r"   ÚstatÚS_IMODEÚlstatÚst_mode)
r   ÚtempZtemp2r   ÚtargetrÉ   Úarchive_dirZrelevant_datar4   Úcontentr   r   r   Útest_write_renewal_configû  s*    
ÿz,RenewableCertTests.test_write_renewal_configc                 C   s¦   ddl m} tj | jjdd¡}tD ]L}| j| }|d }tj ||¡}t	|dƒ 
¡  t tj | jj|¡|¡ q$|  tj|j| jj| j¡ |j| jj| jdd� d S )	Nr   r3   r6   r   z1.pemr9   T)Zupdate_symlinks)r;   r4   r   r>   r?   r@   rA   r   rE   r   ÚcloserS   rd   r   re   rG   rD   )r   r4   Zarchive_dir_pathr   Z	live_pathr•   rI   r   r   r   Útest_update_symlinks  s     
 þÿz'RenewableCertTests.test_update_symlinksN)*r,   r-   r.   r/   rc   rg   rk   rt   rv   ry   r}   rƒ   r„   rŽ   r0   r1   r‘   r—   r˜   rš   r¤   r¥   r¦   r°   rÁ   rÅ   rÆ   rØ   r­   Zskip_on_windowsrÞ   rß   rê   rí   rî   rð   rñ   r  r  r  r  r  r   r   r   r   ra   Ž   s`   
*
,	
>
.

*
!ra   c                       s`   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Z‡  ZS )ÚDeleteFilesTestz&Tests for certbot.storage.delete_filesc              
      s¸   t t| ƒ ¡  tD ]4}tj | jjdd|d ¡}t	|dƒ� W 5 Q R X q| j
 ¡  |  tj tj | jjd¡¡¡ |  tj tj | jjd¡¡¡ |  tj tj | jjdd¡¡¡ d S )Nr5   r   r7   r9   r:   r6   )r<   r  r   r   r   r>   r?   r@   rA   r   rE   r   rn   rÕ   rÔ   rç   )r   r   rJ   rL   r   r   r   -  s*    ÿ
 ÿ ÿ  ÿzDeleteFilesTest.setUpc              	   C   s4   ddl m} t d¡� | | jd¡ W 5 Q R X d S )Nr   r3   rm   r   )r;   r4   r0   r1   Zdelete_filesr@   r  r   r   r   r   =  s    zDeleteFilesTest._callc              	   C   sn   |   ¡  |  tj tj | jjd¡¡¡ |  tj tj | jjd¡¡¡ |  tj tj | jj	dd¡¡¡ d S )Nr:   r   r6   )
r   ro   r   r>   rÕ   r?   r@   rÔ   rç   rA   r   r   r   r   Útest_delete_all_filesB  s     ÿ ÿ  ÿz%DeleteFilesTest.test_delete_all_filesc              	   C   sx   t | jjdƒ�}| d¡ W 5 Q R X |  tj| j¡ |  t	j
 t	j
 | jjd¡¡¡ |  t	j
 t	j
 | jjd¡¡¡ d S )Nr9   Zasdfasfasdfasdfr   r:   )r   rE   rD   r   rd   r   re   r   rn   r   r>   rÕ   r?   r@   rç   ro   rÔ   )r   rE   r   r   r   Útest_bad_renewal_configL  s     ÿ ÿz'DeleteFilesTest.test_bad_renewal_configc                 C   sX   t  | jj¡ |  tj| j¡ |  t j	 
t j	 | jjd¡¡¡ |  t j	 
| jj¡¡ d S )Nr   )r   ÚremoverE   rD   rd   r   re   r   rn   r>   rÕ   r?   r@   rç   ro   r   r   r   r   Útest_no_renewal_configV  s     ÿz&DeleteFilesTest.test_no_renewal_configc              	   C   s~   t  t j | jjdd¡¡ |  ¡  |  t j | j	j
¡¡ |  t j t j | jjd¡¡¡ |  t j t j | jjdd¡¡¡ d S )Nr   zcert.pemr6   ©r   r  r>   r?   r@   rç   r   ro   rÕ   rE   rD   rA   r   r   r   r   Útest_no_cert_file]  s     
  ÿ ÿ  ÿz!DeleteFilesTest.test_no_cert_filec              	   C   s~   t  t j | jjdd¡¡ |  ¡  |  t j | j	j
¡¡ |  t j t j | jjd¡¡¡ |  t j t j | jjdd¡¡¡ d S )Nr   r8   r6   r  r   r   r   r   Útest_no_readme_fileg  s     
  ÿ ÿ  ÿz#DeleteFilesTest.test_no_readme_filec              	   C   sŠ   t tj | jjdd¡dƒ� W 5 Q R X |  ¡  |  tj | j	j
¡¡ |  tj tj | jjd¡¡¡ |  tj tj | jjdd¡¡¡ d S )Nr   Z
other_filer9   r6   )r   r   r>   r?   r@   rç   r   ro   rÕ   rE   rD   rn   rA   r   r   r   r   Útest_livedir_not_emptyq  s&      ÿÿ
 ÿ  ÿz&DeleteFilesTest.test_livedir_not_emptyc                 C   sr   t j | jjdd¡}t  |¡ |  ¡  |  t j | j	j
¡¡ |  t j t j | jjd¡¡¡ |  t j |¡¡ d S )Nr6   r   )r   r>   r?   r@   rA   Úrmdirr   ro   rÕ   rE   rD   rç   )r   r  r   r   r   Útest_no_archive|  s    
 ÿzDeleteFilesTest.test_no_archive)r,   r-   r.   r/   r   r   r  r  r  r  r  r  r!  r`   r   r   rL   r   r  +  s   



r  c                       s8   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Z‡  ZS )
ÚCertPathForCertNameTestz0Test for certbot.storage.cert_path_for_cert_namec                    sJ   t t| ƒ ¡  | j ¡  |  ¡  tj | j	j
ddd¡| _| jdf| j	_d S )Nr5   r   zfullchain.pemrú   )r<   r"  r   rE   r   r_   r   r>   r?   r@   rA   rj   Z	cert_pathr   rL   r   r   r   ‡  s    
ÿzCertPathForCertNameTest.setUpc                 C   s   ddl m} |||ƒS )Nr   )Úcert_path_for_cert_name)r   r#  )r   Z
cli_configZcertnamer#  r   r   r   r   �  s    zCertPathForCertNameTest._callc                 C   s    |   |  | jd¡| jdf¡ d S )Nr   rj   )r"   r   r@   rj   r   r   r   r   Útest_simple_cert_name“  s    z-CertPathForCertNameTest.test_simple_cert_namec                 C   s   |   tj| j| jd¡ d S )Nzfake-example.org)rd   r   re   r   r@   r   r   r   r   Útest_no_such_cert_name–  s    z.CertPathForCertNameTest.test_no_such_cert_name)	r,   r-   r.   r/   r   r   r$  r%  r`   r   r   rL   r   r"  …  s
   r"  Ú__main__)!r/   r¶   rë   r  ZunittestrB   r0   rý   r‰   r;   Zcertbot.tests.utilZtestsÚutilr­   r   Zcertbot.compatr   r   r   r   Z	load_certZCERTr   r   ZTestCaser   ZConfigTestCaser2   ra   r  r"  r,   Úmainr   r   r   r   Ú<module>   s:   
*@     "Z
