U
    ÓZjK ã                   @   s–  d Z ddlm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ZddlZddlZddlmZ ddlm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 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#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) e *d¡Z+e *d¡Z,e *d¡Z-e *d¡Z.ej/ 0e 1d¡¡Z2e *d¡Z3e *d¡Z4G dd„ de
j5ƒZ6G dd„ dej7ƒZ8G d d!„ d!e
j5ƒZ9G d"d#„ d#e
j5ƒZ:G d$d%„ d%ej;ƒZ<G d&d'„ d'ej7ƒZ=G d(d)„ d)ej7ƒZ>G d*d+„ d+ej7ƒZ?G d,d-„ d-e
j5ƒZ@G d.d/„ d/ej7ƒZAG d0d1„ d1ej7ƒZBG d2d3„ d3ej7ƒZCeDd4k�r’e
  ¡  dS )5zTests for certbot.main.é    )Úprint_functionN)Úreload_module)ÚList)Úaccount)Úcli)Úconfiguration)Ú	constants)Úcrypto_util©Úerrors)Ú
interfaces)Úmain)Úupdater)Úutil)Úos)Ú
filesystem)Údisco)Úenhancements)Úmanual)Únullúcert_512.pemzcsr_512.derzrsa256_key.pemzrsa512_key.pemzrsa2048_key.pemzcert_2048.pemc                   @   s   e Zd ZdZdd„ ZdS )ÚTestHandleIdenticalCertsz4Test for certbot.main._handle_identical_cert_requestc                 C   s4   t  ¡ }d|j_t t  ¡ |¡}|  |d|f¡ d S )NFÚ	reinstall)ÚmockÚMockZensure_deployedÚreturn_valuer   Z_handle_identical_cert_requestÚassertEqual)ÚselfÚmock_lineageÚret© r    úZ/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/certbot/tests/main_test.pyÚ*test_handle_identical_cert_request_pending4   s    zCTestHandleIdenticalCerts.test_handle_identical_cert_request_pendingN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r"   r    r    r    r!   r   2   s   r   c                       sZ   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	e
 d¡dd„ ƒZ‡  ZS )ÚRunTestzTests for certbot.main.run.c              	      sÆ   t t| ƒ ¡  d| _t d¡t d¡t d¡t d¡t d¡t d¡t d¡g| _| jd	  ¡ | _| jd
  ¡ | _	| jd  ¡ | _
| jd  ¡ | _| jd  ¡ | _| jd  ¡ | _| jd  ¡ | _d S )Nzexample.orgúcertbot.main._get_and_save_certz-certbot.main.display_ops.success_installationz(certbot.main.display_ops.success_renewalúcertbot.main._init_le_clientú-certbot.main._suggest_donation_if_appropriateúcertbot.main._report_new_certúcertbot.main._find_certr   é   é   é   é   é   é   )Úsuperr'   ÚsetUpÚdomainr   ÚpatchÚpatchesÚstartÚ	mock_authÚmock_success_installationÚmock_success_renewalÚ	mock_initZmock_suggest_donationÚmock_report_certÚmock_find_cert©r   ©Ú	__class__r    r!   r4   ?   s"    ù	zRunTest.setUpc                 C   s   | j D ]}| ¡  qd S ©N)r7   Ústop©r   r6   r    r    r!   ÚtearDownS   s    
zRunTest.tearDownc                 C   sF   d  | j¡ ¡ }tj ¡ }t t 	||¡¡}ddl
m} |||ƒ d S )Nz-a webroot -i null -d {0}r   )Úrun)Úformatr5   Úsplitr   ÚPluginsRegistryÚfind_allr   ÚNamespaceConfigr   Úprepare_and_parse_argsÚcertbot.mainrF   )r   ÚargsÚpluginsÚconfigrF   r    r    r!   Ú_callW   s    

ÿzRunTest._callc                 C   s0   t  ¡ | j_d| j_|  ¡  | j | jg¡ d S )N)TN©	r   r   r9   r   r>   rQ   r:   Úassert_called_once_withr5   r?   r    r    r!   Útest_newcert_success`   s    zRunTest.test_newcert_successc                 C   s8   t  ¡ | j_dt  ¡ f| j_|  ¡  | j | jg¡ d S ©NFrR   r?   r    r    r!   Útest_reinstall_successf   s    zRunTest.test_reinstall_successc                 C   s8   t  ¡ | j_dt  ¡ f| j_|  ¡  | j | jg¡ d S )NT)	r   r   r9   r   r>   rQ   r;   rS   r5   r?   r    r    r!   Útest_renewal_successl   s    zRunTest.test_renewal_successú1certbot.main.plug_sel.choose_configurator_pluginsc                 C   s@   t  | jd¡d f|_tj ¡ }d| j_|  t	j
tj| j|¡ d S )Nr   T)r   Ú	InstallerrP   r   r   rI   rJ   Ú	auto_hstsÚassertRaisesr   ÚNotSupportedErrorr   rF   )r   Úmock_chooserO   r    r    r!   Ú"test_run_enhancement_not_supportedr   s    
 þz*RunTest.test_run_enhancement_not_supported)r#   r$   r%   r&   r4   rE   rQ   rT   rV   rW   r   r6   r^   Ú__classcell__r    r    r@   r!   r'   <   s   	r'   c                   @   s¸   e Zd ZdZdd„ Zdd„ Zdd„ Ze d¡e d	¡e d
¡dd„ ƒƒƒZ	ddd„Z
e d¡e d¡e d¡e d
¡dd„ ƒƒƒƒZe d¡e d¡e d¡e d
¡dd„ ƒƒƒƒZdS )ÚCertonlyTestz Tests for certbot.main.certonly.c                 C   s   t  ¡ | _| j ¡ | _d S rB   )Ú	test_utilÚpatch_get_utilityÚget_utility_patchr8   Úmock_get_utilityr?   r    r    r!   r4      s    
zCertonlyTest.setUpc                 C   s   | j  ¡  d S rB   ©rc   rC   r?   r    r    r!   rE   ƒ   s    zCertonlyTest.tearDownc              
   C   sZ   t j ¡ }t t ||¡¡}t d¡�(}t d¡� t	 
||¡ W 5 Q R X W 5 Q R X |ƒ S )Nr)   r*   )r   rI   rJ   r   rK   r   rL   r   r6   r   Úcertonly)r   rN   rO   rP   r<   r    r    r!   rQ   †   s    

ÿ zCertonlyTest._callr,   r(   r+   c                 C   s4   |   ¡ j}| j|_t ¡ |_d|_|  d ¡ ¡ d S )N)FNz!certonly --webroot -d example.com)	rd   ÚnotificationÚ_assert_no_pauseÚside_effectr   r   r   rQ   rH   )r   Zunused_reportr9   r>   Zmock_notificationr    r    r!   Útest_no_reinstall_text_pause‘   s
    

z)CertonlyTest.test_no_reinstall_text_pauseTc                 C   s   |   |¡ d S rB   )ÚassertFalse)r   ÚmessageÚpauser    r    r!   rh   œ   s    zCertonlyTest._assert_no_pauseú)certbot.cert_manager.lineage_for_certnameú)certbot.cert_manager.domains_for_certnamezcertbot.renewal.renew_certc                 C   sØ   ddg}||_ ||j_ |  d ¡ ¡ |  |jdk¡ |  |jdk¡ |  |jdk¡ |  |jdk¡ |  d ¡ ¡ |  |jdk¡ |  |jdk¡ |  |jdk¡ |  |jdk¡ d|  ¡ j_ |  t	j
| jd ¡ ¡ d S )Núexample.comztest.orgzEcertonly --webroot -d example.com -d test.org --cert-name example.comr-   úEcertonly --webroot -d example.com -d test.com --cert-name example.comr.   F)r   ÚnamesrQ   rH   Ú
assertTrueÚ
call_countrd   Úyesnor[   r   ÚConfigurationError)r   r=   Úmock_renew_certÚmock_domainsr   Údomainsr    r    r!   Ú*test_find_lineage_for_domains_and_certnameŸ   s"    ÿz7CertonlyTest.test_find_lineage_for_domains_and_certnameú certbot.display.ops.choose_namesc                 C   s`   d |_ |  d ¡ ¡ |  |jdk¡ |  |jdk¡ dg|_ d |_ |  d ¡ ¡ |  |j¡ d S )Nrq   r-   Zsomenamez*certonly --webroot --cert-name example.com)r   rQ   rH   rs   rt   Úcalled)r   r=   r   Úmock_choose_namesZmock_domains_for_certnamer    r    r!   Ú*test_find_lineage_for_domains_new_certname¼   s    z7CertonlyTest.test_find_lineage_for_domains_new_certnameN)T)r#   r$   r%   r&   r4   rE   rQ   r   r6   rj   rh   rz   r~   r    r    r    r!   r`   |   s&   
r`   c                   @   sF   e Zd ZdZe d¡dd„ ƒZe d¡dd„ ƒZe d¡dd	„ ƒZd
S )ÚFindDomainsOrCertnameTestz1Tests for certbot.main._find_domains_or_certname.r{   c                 C   s,   t jd d d�}d|_|  t |d ¡d¡ d S )N©ry   ÚcertnameÚ
domainname)r‚   N©r   r   r   r   r   Ú_find_domains_or_certname©r   r}   Úmock_configr    r    r!   Útest_display_opsÓ   s
    ÿz*FindDomainsOrCertnameTest.test_display_opsc                 C   s,   t jd d d�}g |_|  tjtj|d ¡ d S )Nr€   )r   r   r   r[   r   ÚErrorr   r„   r…   r    r    r!   Útest_no_resultsÛ   s    z)FindDomainsOrCertnameTest.test_no_resultsro   c                 C   s8   t jd dd�}ddg|_|  t |d ¡ddgdf¡ d S )Nzone.comr€   ztwo.comrƒ   )r   rx   r†   r    r    r!   Útest_grab_domainsâ   s
    

ÿz+FindDomainsOrCertnameTest.test_grab_domainsN)	r#   r$   r%   r&   r   r6   r‡   r‰   rŠ   r    r    r    r!   r   Ð   s   

r   c                       s¬   e Zd ZdZ‡ fdd„Z‡ fdd„Zddd„Ze d	¡e d
¡dd„ ƒƒZ	e d	¡e d¡dd„ ƒƒZ
e d	¡dd„ ƒZdd„ Ze d	¡e d¡e ¡ dd„ ƒƒƒZ‡  ZS )Ú
RevokeTestzTests for certbot.main.revoke.c                    s"  t t| ƒ ¡  t t| j¡ tj 	tj 
| jd¡¡| _t| jdƒ�}| j| ¡ f| _W 5 Q R X t d¡t d¡t d¡t d¡g| _| jd  ¡ | _| jd  ¡  | jd	  ¡ | _| jd
  ¡ | _ddlm} t ¡ | _|jdtjddddddtjd�d�| _|| jt| jƒ| _ | j d f| j_!d S )Nr   Úrz'acme.client.BackwardsCompatibleClientV2zcertbot.client.Clientúcertbot.main._determine_accountz+certbot.main.display_ops.success_revocationr   r-   r.   r/   )ÚAccountztest.certbot.orgiß  é   r0   é   é
   )Útzinfo)Zcreation_hostZcreation_dt)"r3   r‹   r4   ÚshutilÚcopyÚ	CERT_PATHÚtempdirr   ÚpathÚabspathÚjoinÚtmp_cert_pathÚopenÚreadÚtmp_certr   r6   r7   r8   Úmock_acme_clientÚmock_determine_accountÚmock_success_revokeZcertbot.accountrŽ   Ú	MagicMockÚregrZMetaÚdatetimeÚpytzÚUTCÚmetaÚJWKÚaccr   )r   ÚfrŽ   r@   r    r!   r4   î   s@    ÿü
      ÿþzRevokeTest.setUpc                    s&   t t| ƒ ¡  | jD ]}| ¡  qd S rB   )r3   r‹   rE   r7   rC   rD   r@   r    r!   rE     s    
zRevokeTest.tearDownNc                 C   sN   |sd}|  | j¡ ¡ }tj ¡ }t t 	||¡¡}ddl
m} |||ƒ d S )Nzrevoke --cert-path={0} r   )Úrevoke)rG   rš   rH   r   rI   rJ   r   rK   r   rL   rM   rª   )r   rN   rO   rP   rª   r    r    r!   rQ     s    

ÿzRevokeTest._callú#certbot.main._delete_if_appropriateúcertbot.main.client.acme_clientc                 C   sž   d|_ | ¡ j}g }tj ¡ D ]l\}}d | j|¡ ¡ }|  	|¡ | 
t tj|¡¡ d | j| ¡ ¡ ¡ }|  	|¡ | 
t tj|¡¡ q|  ||j¡ d S )NFz#revoke --cert-path={0} --reason {1})r   ÚBackwardsCompatibleClientV2rª   r   ZREVOCATION_REASONSÚitemsrG   rš   rH   rQ   Úappendr   ÚcallÚANYÚupperr   Úcall_args_list)r   rž   Úmock_delete_if_appropriateÚmock_revokeÚexpectedÚreasonÚcoderN   r    r    r!   Útest_revoke_with_reason  s    

ÿ
z"RevokeTest.test_revoke_with_reasonz'certbot.storage.cert_path_for_cert_namec                 C   s2   d  ¡ }| j|_d|_|  |¡ | j | j¡ d S )Nzrevoke --cert-name=example.comF)rH   r�   r   rQ   r    rS   rš   )r   Zmock_cert_path_for_cert_namer´   rN   r    r    r!   Útest_revoke_by_certname/  s
    
z"RevokeTest.test_revoke_by_certnamec                 C   s    |   ¡  d|_| j | j¡ d S rU   )rQ   r   r    rS   rš   )r   r´   r    r    r!   Útest_revocation_success9  s    z"RevokeTest.test_revocation_successc                 C   s6   ddl m} | ¡ | j_|  |j| j¡ | j ¡  d S )Nr   r
   )	Úacmer   ZClientErrorrž   ri   r[   rQ   r    Úassert_not_called)r   Zacme_errorsr    r    r!   Útest_revocation_error?  s    z RevokeTest.test_revocation_errorúcertbot.cert_manager.deletec                 C   s(   d|ƒ j _d|_|  ¡  |  |j¡ d S rU   )ru   r   rQ   rk   r|   )r   rd   Úmock_deleter´   r    r    r!   Útest_revocation_with_promptE  s    
z&RevokeTest.test_revocation_with_prompt)N)r#   r$   r%   r&   r4   rE   rQ   r   r6   r¹   rº   r»   r¾   ra   rb   rÁ   r_   r    r    r@   r!   r‹   ë   s"   

r‹   c                   @   sH  e Zd ZdZdd„ Zdd„ Ze ¡ dd„ ƒZe ¡ dd	„ ƒZ	e
 d
¡e
 d¡e
 d¡e
 d¡e
 d¡e ¡ dd„ ƒƒƒƒƒƒZe
 d
¡e
 d¡e
 d¡e
 d¡e
 d¡e ¡ dd„ ƒƒƒƒƒƒZe
 d
¡e
 d¡e
 d¡e
 d¡e
 d¡e ¡ dd„ ƒƒƒƒƒƒZe
 d
¡e
 d¡e
 d¡e
 d¡e
 d¡e ¡ dd„ ƒƒƒƒƒƒZdS )ÚDeleteIfAppropriateTestz.Tests for certbot.main._delete_if_appropriate c                 C   s   ddl m} ||ƒ d S )Nr   )Ú_delete_if_appropriate)rM   rÃ   )r   r†   rÃ   r    r    r!   rQ   R  s    zDeleteIfAppropriateTest._callc              	   C   s>   t  d¡�}|  | j¡ W 5 Q R X | ¡  |  |ƒ jj¡ d S )Nr¿   )r   r6   rQ   rP   r½   rs   Úadd_messager|   )r   rd   rÀ   r    r    r!   Ú_test_delete_opt_out_commonV  s    z3DeleteIfAppropriateTest._test_delete_opt_out_commonc                 C   s   d| j _|  |¡ d S rU   )rP   Údelete_after_revokerÅ   ©r   rd   r    r    r!   Útest_delete_flag_opt_out\  s    z0DeleteIfAppropriateTest.test_delete_flag_opt_outc                 C   s   |ƒ }d|j _|  |¡ d S rU   )ru   r   rÅ   )r   rd   Ú	util_mockr    r    r!   Útest_delete_prompt_opt_outa  s    z2DeleteIfAppropriateTest.test_delete_prompt_opt_outz)certbot.storage.renewal_file_for_certnamer¿   z-certbot.cert_manager.match_and_check_overlapsz!certbot.storage.full_archive_pathz)certbot.cert_manager.cert_path_to_lineagec                 C   s8   | j }d|_d|_d|_t ¡ |_|  |¡ | ¡  d S )Nú/some/reasonable/pathÚ rp   )	rP   Ú	cert_pathr�   r   r   ZOverlappingMatchFoundri   rQ   r½   )r   rd   Úmock_cert_path_to_lineageÚmock_archiveÚmock_match_and_check_overlapsrÀ   Úmock_renewal_file_for_certnamerP   r    r    r!   Útest_overlapping_archive_dirsh  s    

z5DeleteIfAppropriateTest.test_overlapping_archive_dirsc                 C   s:   | j }d|_d|_d|_d|_|  |¡ |  |jd¡ d S )NrË   rÌ   rp   Fr-   )rP   rÍ   r�   r   rQ   r   rt   )r   rd   rÎ   rÀ   rÏ   Zmock_overlapping_archive_dirsrÑ   rP   r    r    r!   Útest_cert_path_only|  s    

z+DeleteIfAppropriateTest.test_cert_path_onlyc                 C   sH   | j }d|j_d|_d|_d|_d|_d|_|  |¡ |  |jd¡ d S ©NTrË   rÌ   rp   r-   )	rP   Ú	namespaceZnoninteractive_moderÍ   r�   r   rQ   r   rt   ©r   rd   rÀ   rÎ   Zmock_full_archive_dirrÐ   rÑ   rP   r    r    r!   Útest_noninteractive_deletion�  s    

z4DeleteIfAppropriateTest.test_noninteractive_deletionc                 C   sX   | j }d|j_d|_d|_d|_d|_d|_|  |¡ |  |jd¡ |  	|ƒ j
j¡ d S rÔ   )rP   rÕ   rÆ   rÍ   r�   r   rQ   r   rt   rk   ru   r|   rÖ   r    r    r!   Útest_opt_in_deletion¤  s    

z,DeleteIfAppropriateTest.test_opt_in_deletionN)r#   r$   r%   r&   rQ   rÅ   ra   rb   rÈ   rÊ   r   r6   rÒ   rÓ   r×   rØ   r    r    r    r!   rÂ   O  sF   

rÂ   c                       sd   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Ze 	d
¡dd„ ƒZ
e 	d¡dd„ ƒZdd„ Z‡  ZS )ÚDetermineAccountTestz*Tests for certbot.main._determine_account.c                    sb   t t| ƒ ¡  d | j_d | j_d| j_tjdd�tjdd�g| _	t 
¡ | _t ¡ | _d| jj_d S )NFÚx)ÚidÚyÚhi)r3   rÙ   r4   rP   r   ÚemailZregister_unsafely_without_emailr   r¡   ÚaccsZAccountMemoryStorageÚaccount_storageÚmock_clientÚ	directoryZ	new_authzr?   r@   r    r!   r4   ½  s    

zDetermineAccountTest.setUpc              
   C   s@   ddl m} t d¡� }| j|_|| jƒW  5 Q R £ S Q R X d S )Nr   )Ú_determine_accountz'certbot.main.account.AccountFileStorage)rM   rã   r   r6   rà   r   rP   )r   rã   Zmock_storager    r    r!   rQ   È  s    zDetermineAccountTest._callc                 C   sn   | j  | jd | j¡ | jd j| j_|  | jd d f|  ¡ ¡ |  | jd j| jj¡ |  	| jj
d k¡ d S )Nr-   )rà   Úsaverß   rá   rÛ   rP   r   r   rQ   rs   rÞ   r?   r    r    r!   Útest_args_account_setÏ  s
    z*DetermineAccountTest.test_args_account_setc                 C   s^   | j  | jd | j¡ |  | jd d f|  ¡ ¡ |  | jd j| jj¡ |  	| jj
d k¡ d S )Nr   )rà   rä   rß   rá   r   rQ   rÛ   rP   r   rs   rÞ   r?   r    r    r!   Útest_single_accountÖ  s    z(DetermineAccountTest.test_single_accountz)certbot.client.display_ops.choose_accountc                 C   s�   | j D ]}| j || j¡ q| j d |_|  | j d d f|  ¡ ¡ |  t|jd d ƒt| j ƒ¡ |  | j d j	| j
j¡ |  | j
jd k¡ d S )Nr-   r   )rß   rà   rä   rá   r   r   rQ   ÚsetÚ	call_argsrÛ   rP   r   rs   rÞ   )r   Zmock_choose_accountsr¨   r    r    r!   Útest_multiple_accountsÜ  s    
 ÿz+DetermineAccountTest.test_multiple_accountsz$certbot.client.display_ops.get_emailc              	   C   s”   d|_ t d¡�:}| jd tjjf|j_ |  | jd tjjf|  ¡ ¡ W 5 Q R X |jj	| j
| jtjd� |  | jd j| j
j¡ |  d| j
j¡ d S )Nzfoo@bar.bazúcertbot.main.clientr   )Ztos_cb)r   r   r6   rß   Úsentinelr¼   Úregisterr   rQ   rS   rP   rà   r±   rÛ   r   rÞ   )r   Zmock_get_emailÚclientr    r    r!   Útest_no_accounts_no_emailç  s     ÿ(  ÿz.DetermineAccountTest.test_no_accounts_no_emailc              	   C   sh   d| j _t d¡�$}| jd tjjf|j_|  	¡  W 5 Q R X |  
| jd j| j j¡ |  
d| j j¡ d S )Nzother emailrê   r-   )rP   rÞ   r   r6   rß   rë   r¼   rì   r   rQ   r   rÛ   r   )r   rí   r    r    r!   Útest_no_accounts_emailõ  s    z+DetermineAccountTest.test_no_accounts_email)r#   r$   r%   r&   r4   rQ   rå   ræ   r   r6   ré   rî   rï   r_   r    r    r@   r!   rÙ   º  s   


rÙ   c                       sD  e Zd ZdZ‡ fdd„Z‡ fdd„ZdÄdd	„ZdÅd
d„Zdd„ Zdd„ Z	dd„ Z
e d¡dd„ ƒZe d¡e d¡e d¡e d¡e d¡e d¡dd„ ƒƒƒƒƒƒZe d¡e d¡dd„ ƒƒZe d ¡e d¡e d¡d!d"„ ƒƒƒZe d¡e d ¡e d¡e d¡d#d$„ ƒƒƒƒZe d¡e d¡d%d&„ ƒƒZe d¡e d¡e d'¡e d ¡d(d)„ ƒƒƒƒZe d¡e d¡e d*¡d+d,„ ƒƒƒZe d¡d-d.„ ƒZd/d0„ Ze d1¡d2d3„ ƒZe d4¡d5d6„ ƒZe d7¡d8d9„ ƒZe d:¡d;d<„ ƒZe d¡d=d>„ ƒZe d?¡e d@¡dAdB„ ƒƒZe d?¡e d@¡dCdD„ ƒƒZe d?¡e d@¡dEdF„ ƒƒZe d?¡e d@¡dGdH„ ƒƒZdIdJ„ Z dKdL„ Z!dMdN„ Z"dOdP„ Z#dQdR„ Z$dSdT„ Z%dUdV„ Z&dÆdWdX„Z'e( )¡ dYdZ„ ƒZ*e d[¡e( )¡ d\d]„ ƒƒZ+d^d_„ Z,ddd`dde-j- .¡ dfdadb„Z/e d[¡dcdd„ ƒZ0e de¡e d[¡dfdg„ ƒƒZ1dhdi„ Z2djdk„ Z3dldm„ Z4e dn¡dodp„ ƒZ5e dq¡drds„ ƒZ6e dq¡dtdu„ ƒZ7e dv¡dwdx„ ƒZ8e d¡dydz„ ƒZ9d{d|„ Z:d}d~„ Z;dd€„ Z<d�d‚„ Z=dƒd„„ Z>d…d†„ Z?dÇd‡dˆ„Z@d‰dŠ„ ZAd‹dŒ„ ZBd�dŽ„ ZCd�d�„ ZDd‘d’„ ZEe d“¡d”d•„ ƒZFd–d—„ ZGd˜d™„ ZHdšd›„ ZIdœd�„ ZJdždŸ„ ZKd d¡„ ZLe( )¡ e d¢¡e d£¡d¤d¥„ ƒƒƒZMdÈd¦d§„ZNd¨d©„ ZOdªd«„ ZPe d¬¡e d­¡d®d¯„ ƒƒZQd°d±„ ZRe d¬¡e d¡d²d³„ ƒƒZSe d¡d´dµ„ ƒZTd¶d·„ ZUd¸d¹„ ZVdºd»„ ZWe d¼¡e( )¡ d½d¾„ ƒƒZXe d¼¡e( )¡ d¿dÀ„ ƒƒZYe d“¡e dÁ¡dÂdÃ„ ƒƒZZ‡  Z[S )ÉÚMainTestzTests for different commands.c                    sP   t t| ƒ ¡  t | jj¡ d| jjd| jjd| jjdg| _	t
 d¡ ¡ | _d S )Nz--config-dirz
--work-dirz
--logs-dirz--textz
time.sleep)r3   rð   r4   r   ÚmkdirrP   Úlogs_dirÚ
config_dirÚwork_dirÚstandard_argsr   r6   r8   Ú
mock_sleepr?   r@   r    r!   r4     s       þzMainTest.setUpc                    s   t tƒ tt| ƒ ¡  d S rB   )r   r   r3   rð   rE   r?   r@   r    r!   rE     s    zMainTest.tearDownNFc           	         s¾   |r~t jj‰ ‡ fdd„}t d¡�T}||_t d¡�8}|  ||¡\}}}||||fW  5 Q R £ W  5 Q R £ S Q R X W 5 Q R X n<t d¡�,}|  ||¡\}}}||||fW  5 Q R £ S Q R X dS )zaRun the cli with output streams, actual client and optionally
        os.path.isfile() mocked outc                    s*   |   d¡s|   d¡s|   d¡r"dS ˆ | ƒS )zMock os.path.isfile()ÚcertÚchainÚprivkeyT)Úendswith)ÚfnrN   Úkwargs©Z	orig_openr    r!   Úmock_isfile  s    
ÿþz#MainTest._call.<locals>.mock_isfilezcertbot.compat.os.path.isfilerê   N)r   r—   Úisfiler   r6   ri   Ú_call_no_clientmock)	r   rN   ÚstdoutÚ
mockisfilerþ   Zmock_ifrí   r   Ústderrr    rý   r!   rQ     s    6zMainTest._callc                 C   s|   | j | }|r|nt ¡ }tjd|d��D t d¡�.}t d¡� t |dd… ¡}W 5 Q R X W 5 Q R X W 5 Q R X |||fS )z-Run the client with output streams mocked outúcertbot.main.sys.stdout©Únewúcertbot.main.sys.stderrzcertbot.util.atexitN)rõ   ÚsixÚStringIOr   r6   r   )r   rN   r  Z
toy_stdoutr  r   r    r    r!   r   *  s    
0zMainTest._call_no_clientmockc              	   C   s2   t  d¡�}|  g ¡ |  d|j¡ W 5 Q R X d S )Nzcertbot.main.runr-   )r   r6   rQ   r   rt   )r   Úmock_runr    r    r!   Útest_no_flags5  s    
zMainTest.test_no_flagsc                 C   sœ   t  ¡ }t  ¡ }tjd|d��t tjd|d��Z z*zt dg¡ W n tk
rV   Y nX W 5 | ¡ pj| ¡ }|  d|kd |¡¡ X W 5 Q R X W 5 Q R X d S )Nr  r  r  ÚcertbotzOutput is {0}z	--version)	r  r	  r   r6   Úgetvaluers   rG   r   Ú
SystemExit)r   Ztoy_outZtoy_errÚoutputr    r    r!   Ú test_version_string_program_name:  s    
z)MainTest.test_version_string_program_namec              
   C   s„   d}z2t  d¡� t | j|dd…  ¡ W 5 Q R X W n: tjk
rp } z|}|  |t|ƒk¡ W 5 d}~X Y nX |  |dk	¡ dS )zQEnsure that a particular error raises a missing cli flag error containing messageNr  )r   r6   r   rõ   r   ZMissingCommandlineFlagrs   Ústr)r   rN   rl   ÚexcZexc_r    r    r!   Ú_cli_missing_flagG  s    &$zMainTest._cli_missing_flagz certbot.log.post_arg_parse_setupc                 C   s4   ddg}|   |d¡ | dddg¡ |   |d¡ d S )Nz-nrf   zspecify a pluginú--standaloneú-dzeg.iszregister before running)r  Úextend©r   Ú_rN   r    r    r!   Útest_noninteractiveR  s    zMainTest.test_noninteractiver+   z&certbot.main.client.acme_client.Clientr�   z8certbot.main.client.Client.obtain_and_enroll_certificater(   c              	   C   sì   dddddddg| j  }t ¡ d f|_t ¡ |_t d¡�b}|  |¡ t ¡ }	|jd	 d
 }
|  	|	|
k¡ dd l
}| 
¡ }d| ¡ kr˜|  	t ¡ |
k¡ W 5 Q R X t d¡�6}d}
|d|
g7 }|  |¡ |jtjtjd|
d� W 5 Q R X d S )Nr  rf   z-mznone@none.comr  rp   z--agree-tosz-certbot.main.client.acme_client.ClientNetworkr-   Ú
user_agentr   ÚlinuxZbandersnatchz--user-agentT)r   Z
verify_sslr  )rõ   r   r¡   r   r6   r   r   Zget_os_info_uarè   rs   ÚplatformÚlowerrS   r±   )r   ZgscZ_obtZdetZ_clientr  Ú__rN   Zacme_netZos_verZuar  Úplatr    r    r!   Útest_user_agentY  s2    	  ÿÿ


ÿzMainTest.test_user_agentú+certbot.main.plug_sel.record_chosen_pluginsú$certbot.main.plug_sel.pick_installerc              
   C   s2   | j ddddddddd	g	d
d� |  |jd¡ d S )NÚinstallz	--domainsúfoo.barú--cert-pathr÷   ú
--key-pathrù   ú--chain-pathrø   T©r  r-   )rQ   r   rt   )r   Zmock_pick_installerÚ_recr    r    r!   Útest_installer_selectionx  s       ÿÿz!MainTest.test_installer_selectionzcertbot.main._install_certc              	   C   s¨   t jt d¡t d¡t d¡t d¡d�}t  d¡�j}||_| jdddgd	d
� |jd d }|  |j	t d¡¡ |  |j
t d¡¡ |  |jt d¡¡ W 5 Q R X d S )Nr÷   rø   rù   ©rÍ   Ú
chain_pathÚfullchain_pathÚkey_pathrn   r#  ú--cert-nameÚwhateverTr(  r   )r   r¡   ra   Ú	temp_joinr6   r   rQ   rè   r   rÍ   r-  r.  )r   Ú_instr)  Úmock_installr   Úmock_getlinÚcall_configr    r    r!   Útest_installer_certname  s    ýz MainTest.test_installer_certnamec              	   C   s6  t jt d¡t d¡t d¡t d¡d�}t  d¡�ø}||_| jdddd	t d
¡gdd� |jd d }|  |j	t d¡¡ |  |j
t d¡¡ |  |jt d¡¡ |  |jt d
¡¡ | ¡  | jddddt d¡gdd� |jd d }|  |j	t d¡¡ |  |j
t d¡¡ |  |jt d¡¡ W 5 Q R X d S )Nr÷   rø   rù   r+  rn   r#  r/  r0  r&  Zoverriding_privkeyTr(  r   r%  Zoverriding_cert)r   r¡   ra   r1  r6   r   rQ   rè   r   rÍ   r-  r,  r.  Úreset)r   r2  r)  r3  r  r   r4  r5  r    r    r!   Útest_installer_param_override�  s:    ý
 ÿÿ
 ÿÿz&MainTest.test_installer_param_overridec              	   C   s    |   tj| jdddddg¡ d S )Nr#  r/  Znotfoundr&  Úinvalid©r[   r   rv   rQ   )r   r2  r)  r    r    r!   Útest_installer_param_error¬  s     ÿþz#MainTest.test_installer_param_errorú"certbot.cert_manager.get_certnamesc              	   C   sr   t jt d¡t d¡t d¡t d¡d�}t  d¡�}||_| jdgdd� W 5 Q R X |  |j¡ |  |j¡ d S )	Nr÷   rø   rù   r+  rn   r#  Tr(  )	r   r¡   ra   r1  r6   r   rQ   rs   r|   )r   Ú	mock_instZmock_getcertr2  r)  r   r4  r    r    r!   Útest_installer_select_cert´  s    ýz#MainTest.test_installer_select_certzcertbot.util.exe_existsc                 C   s$  d|_ tj ¡ }dddg}dddt d¡d	t d¡d
ddddg}d|krv|  |¡\}}}}|  d|k¡ |  d|k¡ |  dgd¡ t	 
d¡�Z}t	 
d¡�D}t	 ¡ |_ |  ddddg¡ |jd \}	}
}|  t|
tjƒ¡ W 5 Q R X W 5 Q R X t	 
d¡�"}|  ddg¡ |  d|j¡ W 5 Q R X d S )NTz--apachez--authenticatorÚ
standaloner#  z--nginxr%  Zblahr&  z--nginx-server-rootz/nonexistent/thingr  rp   ú--debugÚnginxzThe nginx plugin is not workingÚMisconfigurationErrorr  z(With the standalone plugin, you probablyr)   r(   rf   z--manualr$  r   úcertbot.main.certonlyÚauthr-   )r   r   rI   rJ   ra   r1  rQ   rs   r  r   r6   r¡   rè   Ú
isinstancer   ZAuthenticatorr   rt   )r   Zmock_exe_existsr  r  Zreal_pluginsrN   r   r<   Zmock_gscZunused_configrD  Zunused_installerÚmock_certonlyr    r    r!   Útest_configurator_selectionÃ  s6    


     ý
&z$MainTest.test_configurator_selectionc                 C   sX   |   dg¡\}}}}|  d|jj¡ |   dddg¡\}}}}|j tjdtjtj¡ d S )NÚrollbackr-   z--checkpointsZ123é{   )rQ   r   rH  rt   rS   r   r±   ©r   r  rí   r    r    r!   Útest_rollbackë  s       ÿzMainTest.test_rollbackc                 C   s(   |   dg¡\}}}}|  d|jj¡ d S )NÚconfig_changesr-   )rQ   r   Zview_config_changesrt   rJ  r    r    r!   Útest_config_changesô  s    zMainTest.test_config_changeszcertbot.main.logger.warningc                 C   s6   |   dg¡ |  |j¡ |jd d }|  d|¡ d S )NrL  r   z-config_changes subcommand has been deprecated)rQ   rs   r|   rè   ZassertIn)r   Zmock_warningÚmsgr    r    r!   Útest_config_changes_deprecationø  s    z(MainTest.test_config_changes_deprecationz)certbot.cert_manager.update_live_symlinksc                 C   s   |   dg¡ |  d|j¡ d S )NZupdate_symlinksr-   ©r   r   rt   ©r   Zmock_cert_managerr    r    r!   Útest_update_symlinksÿ  s    zMainTest.test_update_symlinksz!certbot.cert_manager.certificatesc                 C   s   |   dg¡ |  d|j¡ d S )NZcertificatesr-   rP  rQ  r    r    r!   Útest_certificates  s    zMainTest.test_certificatesr¿   c                 C   s   |   dg¡ |  d|j¡ d S )NÚdeleter-   rP  rQ  r    r    r!   Útest_delete	  s    zMainTest.test_deletec                    sN   ddddg‰ t j‡ fdd„tj tˆ ƒ¡D ƒŽ D ]}|  dgt|ƒ ¡ q0d S )Nú--initú	--preparez--authenticatorsz--installersc                 3   s   | ]}t  ˆ |¡V  qd S rB   )Ú	itertoolsÚcombinations)Ú.0rŒ   ©Úflagsr    r!   Ú	<genexpr>  s   ÿz(MainTest.test_plugins.<locals>.<genexpr>rO   )rX  rø   r  ÚmovesÚrangeÚlenrQ   Úlistr  r    r[  r!   Útest_plugins  s    
ÿÿzMainTest.test_pluginszcertbot.main.plugins_discoz<certbot.main.cli.HelpfulArgumentParser.determine_help_topicsc              	   C   s†   g }|j  ¡ }t ¡ }tj|d�� |  dg|¡\}}}}W 5 Q R X |j ¡  | ¡ j	 |¡ | ¡  	¡ }|  
| ¡  ¡ t|ƒ¡ d S )N©r  rO   )rI   rJ   r  r	  ra   Úpatch_get_utility_with_stdoutrQ   ÚvisiblerS   Úifacesr   r  Ústripr  )r   Ú_detÚ
mock_discorf  rO   r  r  Úfilteredr    r    r!   Útest_plugins_no_args  s    
 
zMainTest.test_plugins_no_argsc           
   
   C   sª   g }|j  ¡ }dd„ }t ¡ }t d¡�:}tj|d��" ||_|  	dg|¡\}}}}W 5 Q R X W 5 Q R X |j
 ¡  | 
¡ j |¡ | 
¡  ¡ }	|  | ¡  ¡ t|	ƒ¡ d S )Nc                 S   s   | ||  }}}t  ¡ ‚dS )zRaises error.Error.N)r   rˆ   )râ   ÚmodeÚstrictr  r    r    r!   Úthrow_error+  s    z?MainTest.test_plugins_no_args_unprivileged.<locals>.throw_errorzcertbot.util.set_up_core_dirrc  rO   )rI   rJ   r  r	  r   r6   ra   rd  ri   rQ   re  rS   rf  r   r  rg  r  )
r   rh  ri  rf  rO   rn  r  Zmock_set_up_core_dirr  rj  r    r    r!   Ú!test_plugins_no_args_unprivileged%  s    
*
z*MainTest.test_plugins_no_args_unprivilegedc           	   	   C   s¬   g }|j  ¡ }t ¡ }tj|d�� |  ddg|¡\}}}}W 5 Q R X |j ¡  | ¡ j	 |¡ | ¡  	¡ }|  
|jjd¡ |j |¡ | ¡ }|  
| ¡  ¡ t|ƒ¡ d S )Nrc  rO   rV  r-   )rI   rJ   r  r	  ra   rd  rQ   re  rS   rf  r   Úinitrt   Úverifyr  rg  r  )	r   rh  ri  rf  rO   r  r  rj  Úverifiedr    r    r!   Útest_plugins_init;  s    
"
zMainTest.test_plugins_initc           
   	   C   sÊ   g }|j  ¡ }t ¡ }tj|d��  |  dddg|¡\}}}}W 5 Q R X |j ¡  | ¡ j	 |¡ | ¡  	¡ }|  
|jjd¡ |j |¡ | ¡ }|j ¡  |j ¡  | ¡ }	|  
| ¡  ¡ t|	ƒ¡ d S )Nrc  rO   rV  rW  r-   )rI   rJ   r  r	  ra   rd  rQ   re  rS   rf  r   rp  rt   rq  ÚprepareÚ	availabler  rg  r  )
r   rh  ri  rf  rO   r  r  rj  rr  ru  r    r    r!   Útest_plugins_prepareM  s    
$


zMainTest.test_plugins_preparec                 C   s¬   d}d}d}d}t  d¡�"}|  dd|ddd	dd
dg	¡ W 5 Q R X |jd \}}|  |jtj |¡¡ |  |j	tj |¡¡ |  |j
tj |¡¡ |  |jtj |¡¡ d S )Nr÷   Úkeyrø   Ú	fullchainrC  rf   r%  r&  r'  z--fullchain-pathr   )r   r6   rQ   rè   r   rÍ   r   r—   r˜   r.  r,  r-  )r   r÷   rw  rø   rx  rF  rP   Úunused_pluginsr    r    r!   Útest_certonly_abspathb  s       þzMainTest.test_certonly_abspathc              
   C   s\   z |   dddg¡ dstdƒ‚W n6 tjk
rV } z|  dt|ƒk¡ W 5 d }~X Y nX d S )Nú-aZbad_authrf   Fz!Exception should have been raisedz-The requested bad_auth plugin does not appear)rQ   ÚAssertionErrorr   ÚPluginSelectionErrorrs   r  ©r   Úer    r    r!   Útest_certonly_bad_argss  s
    zMainTest.test_certonly_bad_argsc                 C   sF   |   tj| jddg¡ |   tj| jddg¡ |   tj| jddg¡ d S )Nr  Z@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaþ  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.z204.11.231.35r:  r?   r    r    r!   Útest_check_config_sanity_domainz  s    þþþz(MainTest.test_check_config_sanity_domainc                 C   s    |   tj| jd t¡ ¡ ¡ d S )Nz*certonly --csr {0} --allow-subset-of-names©r[   r   rˆ   rQ   rG   ÚCSRrH   r?   r    r    r!   Útest_csr_with_besteffortˆ  s
     þz!MainTest.test_csr_with_besteffortc              
   C   s^   z|   dtg¡ W n: tjk
rL } zdt|ƒks6t‚W Y ¢d S d }~X Y nX dsZtdƒ‚d S )Nz--csrzPlease try the certonlyFz2Expected supplying --csr to fail with default verb)rQ   rƒ  r   rˆ   Úreprr|  r~  r    r    r!   Útest_run_with_csr�  s    zMainTest.test_run_with_csrc              	   C   s&   |   tj| jd t d¡¡ ¡ ¡ d S )Nzcertonly --csr {0}zcsr-nonames_512.pem)r[   r   rˆ   rQ   rG   ra   Úvector_pathrH   r?   r    r    r!   Útest_csr_with_no_domains–  s     ÿþz!MainTest.test_csr_with_no_domainsc                 C   s    |   tj| jd t¡ ¡ ¡ d S )Nz!certonly -d example.org --csr {0}r‚  r?   r    r    r!   Ú"test_csr_with_inconsistent_domainsœ  s
     þz+MainTest.test_csr_with_inconsistent_domainsc              
   C   s^   t  d¡�J}d|_t  d¡�.}||_|d kr0g }|d ¡ 7 }|  |¡ W 5 Q R X W 5 Q R X d S )Nú3certbot.main._find_lineage_for_domains_and_certname)ZnewcertNr)   z!-d foo.bar -a standalone certonly)r   r6   r   rH   rQ   )r   rá   rN   Úmock_renewalr<   r    r    r!   Ú_certonly_new_request_common¡  s    z%MainTest._certonly_new_request_commonc                 C   s`   t  ¡ }d |j_|  |dg¡ |  |jjd¡ |  d|ƒ jj	d d k¡ |  |ƒ jjd¡ d S ©Nú	--dry-runr-   údry runr   )
r   r¡   Úobtain_and_enroll_certificater   rŒ  r   rt   rs   rÄ   rè   )r   rd   rá   r    r    r!   Ú)test_certonly_dry_run_new_request_success«  s     ÿÿz2MainTest.test_certonly_dry_run_new_request_successzcertbot.crypto_util.notAfterc           	      C   sÞ   t j t j | jjd¡¡}t j t j | jjd¡¡}d}||ƒ j_tj	||||d�}t 	¡ }||j
_|  |¡ |  |j
jd¡ |ƒ jjd d d }|  ||k¡ |  ||k¡ |  ||k¡ |  d|ƒ jjd d k¡ d S )Nzlive/foo.barzlive/baz.quxz
1970-01-01)r÷   rx  r-  r.  r-   r   Údonate)r   r—   Únormpathr™   rP   ró   Údater   r   r¡   r�  rŒ  r   rt   rÄ   r³   rs   rè   )	r   rd   Zmock_notAfterrÍ   r.  r”  r   rá   Úcert_msgr    r    r!   Ú!test_certonly_new_request_success·  s,    
 ÿ
 ÿÿz*MainTest.test_certonly_new_request_successc                 C   s&   t  ¡ }d|j_|  tj| j|¡ d S rU   )r   r¡   r�  r   r[   r   rˆ   rŒ  )r   rá   r    r    r!   Ú!test_certonly_new_request_failureÍ  s     ÿz*MainTest.test_certonly_new_request_failureTc
                    s†  t  d¡}
tj tj | jjd¡¡}tj	|
||
|d�}||j
_d|j_dg|j_t 	¡ }tj	dd�}t 	¡ }t ¡ ‰ |d|d	f|j_‡ fd
d„}�z¬�zŽt d¡��"}|d f|_t d¡�� }||_t  ¡ �æ}|sÜ||ƒ j_t d¡�Â}t 	¡ }d|j_||jj_t d¡�’}||j_|�s*dddddg}|�r8||7 }z>|  |ˆ ¡\}‰ }}|�rftd|ƒ t|ƒ‚|�rttdƒ‚W n"   |�s”tdt  !¡  ƒ‚Y nX W 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X |�r|	�r |j "dgtj tj | jjd¡¡¡ n|j "dgd ¡ n|  #|jj$d¡ W n   |  %¡  ‚ Y nX W 5 |�rzttj | jjd¡ƒ�}|  || ¡ k¡ W 5 Q R X X ||ˆ fS )Nr   zlive/foo.bar/fullchain.pem)r÷   rx  rÍ   r-  Fz	isnot.orgZpem_key)Úpemrø   Zcsrc                    s   ˆ   | ¡ dS )zWrite message to stdout.N)Úwrite)rl   rN   rü   rc  r    r!   Ú	write_msgç  s    z0MainTest._test_renewal_common.<locals>.write_msgúletsencrypt.logz+certbot.cert_manager.find_duplicative_certsr)   zcertbot.main.renewal.OpenSSLz	Fake fakez certbot.main.renewal.crypto_utilr  r{  r?  rf   ZReturnedzrenewal should have erroredzUnexpected renewal error:
zlive/sample-renewal/privkey.pemr   )&ra   r‡  r   r—   r“  r™   rP   ró   r   r¡   Zshould_autorenewr   Zhas_pending_deploymentrr   r  r	  Úobtain_certificater›   rò   rs   rœ   r6   rb   rg   ri   Z
get_issuerZcryptoZload_certificateZnotAfterrQ   Úprintr|  Ú	tracebackÚ
format_excrS   r   rt   Ú	_dump_log)r   Údue_for_renewalÚ
extra_argsÚlog_outrN   Úshould_renewÚerror_expectedÚ
quiet_modeÚexpiry_dateÚ	reuse_keyrÍ   r,  r   Z
mock_certrZmock_keyrá   rš  ÚlfZmock_fdcr<   rd   Zmock_sslZmock_latestZmock_crypto_utilr   r  r    rc  r!   Ú_test_renewal_commonÓ  sˆ    
ÿ ÿ
 ÿ




ÿÿ<
 ÿÿzMainTest._test_renewal_commonc                 C   sv   |   dg ¡\}}}|  |jjd¡ |j | ¡ ¡ |ƒ jjd d d }|  	d|k¡ |  	d|ƒ jj
d d k¡ d S )NTr-   r   úfullchain.pemr’  )rª  r   Zsave_successorrt   Zupdate_all_links_torS   Zlatest_common_versionrÄ   r³   rs   rè   )r   r  ZlineageÚget_utilityr•  r    r    r!   Útest_certonly_renewal  s    ÿzMainTest.test_certonly_renewalz;certbot.log.logging.handlers.RotatingFileHandler.doRolloverc                 C   sŒ   | j dddgdd�\}}}|  |ƒ jjd¡ |  d|ƒ jjd d k¡ | j dd	d
dgdd� |  |ƒ jjd¡ | j dd
ddgddd� d S )NFrŽ  z--keepzsimulating renewal)r£  r-   r�  r   z--renew-by-defaultú-tvvr@  zAuto-renewal forcedznot yet due)r£  r¤  )rª  r   rÄ   rt   rs   rè   )r   r  r  r¬  r    r    r!   Útest_certonly_renewal_triggers(  s    ÿÿ ÿz'MainTest.test_certonly_renewal_triggersc              	   C   sJ   t dƒ tj | jjd¡}tj |¡rFt|ƒ�}t | ¡ ƒ W 5 Q R X d S )NzLogs:r›  )	r�  r   r—   r™   rP   rò   Úexistsr›   rœ   )r   Úlog_pathr©  r    r    r!   r   8  s
    
zMainTest._dump_logc                 C   s0   t  | jjd¡ dddg}| jdg |dd� d S )Núsample-renewal.confÚrenewrŽ  r®  T©rN   r¤  ©ra   Úmake_lineagerP   ró   rª  ©r   rN   r    r    r!   Útest_renew_verb?  s    
zMainTest.test_renew_verbc                 C   s2   t  | jjd¡ dddg}| jdg |ddd� d S )Nr²  r³  rŽ  ú--reuse-keyT©rN   r¤  r¨  rµ  r·  r    r    r!   Útest_reuse_keyD  s    
zMainTest.test_reuse_keyz,certbot.storage.RenewableCert.save_successorc                 C   s0   t  | jjd¡ ddg}| jdg |ddd� d S )Nr²  r³  r¹  Trº  rµ  )r   Zunused_save_successorrN   r    r    r!   Útest_reuse_key_no_dry_runI  s    z"MainTest.test_reuse_key_no_dry_runz	sys.stdinc                 C   sv   d|j _t | jjd¡ dddg}| jdg |dd� |  | jj	d¡ | jj
d	 d	 }|  d|  kojd
kn  ¡ d S )NFr²  r³  rŽ  r®  Tr´  r-   r   ià  )Úisattyr   ra   r¶  rP   ró   rª  r   rö   rt   rè   rs   )r   ÚstdinrN   Zsleep_call_argr    r    r!   Ú!test_noninteractive_renewal_delayO  s    
z*MainTest.test_noninteractive_renewal_delayc                 C   sH   d|j _t | jjd¡ dddg}| jdg |dd� |  | jj	d¡ d S )NTr²  r³  rŽ  r®  r´  r   )
r½  r   ra   r¶  rP   ró   rª  r   rö   rt   )r   r¾  rN   r    r    r!   Ú!test_interactive_no_renewal_delay[  s
    
z*MainTest.test_interactive_no_renewal_delayzcertbot.renewal.should_renewc                 C   sp   d|_ t | jjd¡ tj ¡ tjdd� }| jdd ddg|d�\}}}|  	d| 
¡ k¡ |  	d| 
¡ k¡ d S )	NFr²  éZ   )Údaysr³  )r¢  r¤  rN   r§  zNo renewals were attempted.z0The following certs are not due for renewal yet:)r   ra   r¶  rP   ró   r£   ÚnowÚ	timedeltarª  rs   r  )r   r¤  Zexpiryr  r  r    r    r!   Útest_renew_skips_recent_certsc  s    
 ÿz&MainTest.test_renew_skips_recent_certsc                 C   s‚   t  | jjd¡ ddg}| jdg |dd�\}}}| ¡ }|  d|k¡ dddg}| jdg |ddd�\}}}| ¡ }|  d|¡ d S )	Nr²  r³  rŽ  Tr´  z-q)rN   r¤  r¦  rÌ   )ra   r¶  rP   ró   rª  r  rs   r   )r   r  rN   r  Úoutr    r    r!   Útest_quiet_renewm  s    

 ÿzMainTest.test_quiet_renewc                 C   s2   t  | jjd¡ dddg}| jdg |ddd� d S )Nr²  r³  rŽ  ú--post-hook=no-such-commandTF©rN   r¤  r¥  rµ  r·  r    r    r!   Útest_renew_hook_validation{  s
    
ÿz#MainTest.test_renew_hook_validationc              	   C   sJ   t  | jjd¡ ddddg}t d¡� | jdg |ddd	� W 5 Q R X d S )
Nr²  r³  rŽ  rÈ  z--disable-hook-validationzcertbot.hooks.post_hookTFrÉ  )ra   r¶  rP   ró   r   r6   rª  r·  r    r    r!   Útest_renew_no_hook_validation�  s    ÿÿz&MainTest.test_renew_no_hook_validationc              	   C   sj   t j | jjd¡}t j |¡s(t |¡ tt j |d¡dƒ� W 5 Q R X dddg}| j	dg |ddd	� d S )
NÚrenewalz
empty.confÚwr³  rŽ  r®  FTrÉ  )
r   r—   r™   rP   ró   r°  r   Úmakedirsr›   rª  )r   ÚrdrN   r    r    r!   Útest_renew_verb_empty_config‰  s    


z%MainTest.test_renew_verb_empty_configc                 C   s.   t  | jjd¡ | jdg dddddgd� d S )Nr²  Tr³  rŽ  r/  úsample-renewal)r¤  rN   rµ  r?   r    r    r!   Útest_renew_with_certname’  s    

ÿz!MainTest.test_renew_with_certnamec                 C   s    | j dg dddddgdd� d S )NTFr³  rŽ  r/  rÑ  )r¤  rN   r¥  )rª  r?   r    r    r!   Útest_renew_with_bad_certname—  s    

þz%MainTest.test_renew_with_bad_certnamec              	   C   sJ   t j | jjd¡}t |¡ tt j |d¡dƒ�}| d¡ W 5 Q R X d S )NrÌ  z	test.confrÍ  zMy contents don't matter)	r   r—   r™   rP   ró   r   rÎ  r›   r™  )r   Zrenewer_configs_dirr©   r    r    r!   Ú_make_dummy_renewal_configœ  s    
z#MainTest._make_dummy_renewal_configc              
   K   s¶   |   ¡  t d¡�š}t ¡ }d|_|d k	r4d|i|_|d k	rD||j_||_t d¡�(}| ddg¡ | j	d
dd	i|—Ž W 5 Q R X |d k	r¨|rœ|  
|j¡ n|  |j¡ W 5 Q R X d S )Núcertbot.storage.RenewableCertzsomepath/fullchain.pemÚrenewalparamsúcertbot.main.renew_certrN   r³  Tr¤  F)TN)rÔ  r   r6   r¡   rx  r   rr   r   Ú
setdefaultrª  rs   r|   rk   )r   rÖ  rr   Úassert_oc_calledrü   Úmock_rcr   rw   r    r    r!   Ú_test_renew_common¢  s     
zMainTest._test_renew_commonc                 C   s   | j ddd� d S )NFT©rÙ  r¥  ©rÛ  r?   r    r    r!   Útest_renew_no_renewalparams·  s    z$MainTest.test_renew_no_renewalparamsc                 C   s   | j i ddd� d S )NFT)rÖ  rÙ  r¥  rÝ  r?   r    r    r!   Útest_renew_no_authenticatorº  s    ÿz$MainTest.test_renew_no_authenticatorc                 C   s   dddœ}| j |ddd� d S )NÚwebrootz	over 9000)ÚauthenticatorZrsa_key_sizeTF)rÖ  r¥  rÙ  rÝ  ©r   rÖ  r    r    r!   Útest_renew_with_bad_int¾  s    ÿÿz MainTest.test_renew_with_bad_intc                 C   s   dddœ}| j |dd� d S )Nrà  ÚNone)rá  Zhttp01_portT©rÖ  rÙ  rÝ  râ  r    r    r!   Útest_renew_with_nonetype_http01Ä  s    ÿÿz(MainTest.test_renew_with_nonetype_http01c                 C   s$   ddi}dg}| j |d|dd� d S )Nrá  rà  u   uniÃ§odÃ©.comTF)rÖ  r¥  rr   rÙ  rÝ  )r   rÖ  rr   r    r    r!   Útest_renew_with_bad_domainÊ  s     ÿz#MainTest.test_renew_with_bad_domainz5certbot.plugins.selection.choose_configurator_pluginsc                 C   s2   t  ¡ t  ¡ f|_ddi}| j|dd ¡ d� d S )Nrá  rà  Tzrenew --configurator apache©rÖ  rÙ  rN   )r   r¡   r   rÛ  rH   )r   Zmock_selrÖ  r    r    r!   Útest_renew_with_configuratorÐ  s     þz%MainTest.test_renew_with_configuratorc                 C   s   ddddœ}| j |dd� d S )Nrà  rä  Z42)rá  Zwebroot_pathZwebroot_imaginary_flagTrå  rÝ  râ  r    r    r!   Ú$test_renew_plugin_config_restorationØ  s    þÿz-MainTest.test_renew_plugin_config_restorationc              
   C   s0   ddi}| j |dddt dt ¡ i¡gd� d S )Nrá  rà  Tr³  z--webroot-maprp   rè  )rÛ  ÚjsonÚdumpsÚtempfileÚ
gettempdirrâ  r    r    r!   Útest_renew_with_webroot_mapß  s     þz$MainTest.test_renew_with_webroot_mapc              	   C   s.   t  d¡�}t|_| jddd� W 5 Q R X d S )Nz"certbot.main.renewal._reconstituteFTrÜ  )r   r6   Ú	Exceptionri   rÛ  )r   Zmock_reconstituter    r    r!   Útest_renew_reconstitute_errorå  s    z&MainTest.test_renew_reconstitute_errorc              
   C   sv   |   ¡  t d¡�Z}t ¡ }d|_||_dddii|_t d¡�"}t|_| j	dd ddgd	d
� W 5 Q R X W 5 Q R X d S )NrÕ  zsomewhere/fullchain.pemrÖ  rá  rà  r×  Tr³  F)r¥  rN   r¤  )
rÔ  r   r6   r¡   rx  r   r   rð  ri   rª  )r   rÚ  r   rw   r    r    r!   Útest_renew_obtain_cert_errorë  s     ÿ
 ÿz%MainTest.test_renew_obtain_cert_errorc                 C   s:   | j dd d ¡ ddd� | j dd d t¡ ¡ ddd� d S )NTzrenew -d example.comFrÉ  zrenew --csr {0})rª  rH   rG   rƒ  r?   r    r    r!   Útest_renew_with_bad_cli_argsø  s     ÿ ÿz%MainTest.test_renew_with_bad_cli_argsc              	   C   s<   | j dd dddd tj¡gd�\}}}|  d| ¡ k¡ d S )NFr³  z--post-hookzE{0} -c "from __future__ import print_function; print('hello world');")r¡  r¢  r¤  rN   zNo hooks were run.)rª  rG   ÚsysÚ
executablers   r  )r   r  r  r    r    r!   Útest_no_renewal_with_hooksþ  s      ÿÿþz#MainTest.test_no_renewal_with_hooksrŠ  r)   c                 C   sb   dt  ¡ f|_t  ¡  |_}|  dddddg¡ |  |jj¡ |  |jj¡ |  |ƒ j	j
d¡ d S )Nr   r  r$  r{  r?  rf   r   )r   r¡   r   rQ   rk   rœ  r|   r�  r   rÄ   rt   )r   r<   r‹  rd   rá   r    r    r!   Útest_certonly_reinstall  s    z MainTest.test_certonly_reinstallc                 C   s  d}d}t  ¡ }||f|j_tj tj | jj	d¡¡}tj tj | jj	d¡¡}|d |f|j
_t  d¡�z}||_t ¡ �`}tj tj | jj	d¡¡}	d t||	|¡ ¡ }
|r´|
|7 }
t  d¡� |  |
¡ W 5 Q R X W 5 Q R X W 5 Q R X d	|
k�r|  |j
j¡ n|j
 ||||	|¡ |S )
NÚcertrrø   zlive/example.com/cert_512.pemzlive/example.com/fullchain.pemr)   zlive/example.com/chain.pemzV-a standalone certonly --csr {0} --cert-path {1} --chain-path {2} --fullchain-path {3}zcertbot.main.crypto_utilrŽ  )r   r¡   Zobtain_certificate_from_csrr   r   r—   r“  r™   rP   ró   Zsave_certificater6   ra   rb   rG   rƒ  rH   rQ   rk   r|   rS   )r   r¢  rø  rø   rá   rÍ   Ú	full_pathr<   rd   r,  rN   r    r    r!   Ú_test_certonly_csr_common  sP    þþ
þ   þ(
    ÿz"MainTest._test_certonly_csr_commonc                 C   sZ   |   ¡ }|ƒ jjd d d }|  d|k¡ |  d|k¡ |  d|ƒ jjd d k¡ d S )Nr   r«  zYour key file has been saved atr’  )rú  rÄ   r³   rs   rk   rè   )r   rd   r•  r    r    r!   Útest_certonly_csr4  s    ÿzMainTest.test_certonly_csrc                 C   s>   |   dg¡}|  |ƒ jjd¡ |  d|ƒ jjd d k¡ d S r�  )rú  r   rÄ   rt   rs   rè   rÇ   r    r    r!   Útest_certonly_csr_dry_run<  s
    ÿz"MainTest.test_certonly_csr_dry_runr«   r¬   c              	   C   s    d|_ d}|  dtdtd|dg¡ ttdƒ�$}|j tjt	j
 | ¡ ¡|¡ W 5 Q R X ttdƒ�6}t | ¡ ¡d }| ¡ j}| t	 |¡tj¡ W 5 Q R X d S )	NFr$  r%  r&  ú--serverrª   Úrbr   )r   r   ÚSS_CERT_PATHÚRSA2048_KEY_PATHr›   r­   rS   r   r±   Újoser§   Úloadrœ   r	   Úpyopenssl_load_certificaterª   ÚComparableX509)r   rž   r´   Úserverr©   r÷   rµ   r    r    r!   Útest_revoke_with_keyB  s(      ÿ  ÿ
þzMainTest.test_revoke_with_keyc                 C   s(   d}|   tj| jdtdtd|dg¡ d S )Nr$  r%  r&  rý  rª   )r[   r   rˆ   r   ÚCERTÚKEY)r   r  r    r    r!   Útest_revoke_with_key_mismatchT  s      ÿÿz&MainTest.test_revoke_with_key_mismatchc              	   C   st   d|_ t ¡ d f|_ |  dtdg¡\}}}}ttƒ�6}t | ¡ ¡d }| 	¡ j
}| t |¡tj¡ W 5 Q R X d S )NFr%  rª   r   )r   r   r¡   rQ   r  r›   r	   r  rœ   Zacme_from_config_keyrª   rS   r  r  r±   )r   rŸ   r´   r  rí   r©   r÷   rµ   r    r    r!   Útest_revoke_without_keyZ  s    

þz MainTest.test_revoke_without_keyc              
   C   s–   t  d¡�‚}t  ¡ }d|_|df|j_|  dddg¡ t  d¡�B}t  ¡ }||j_dg|j_|  dddg¡}|  	d	|d
 k¡ W 5 Q R X W 5 Q R X d S )Nrê   Zimaginary_accountZworkedrì   ú--emailúuser@example.orgúcertbot.main.accountú
an accountzThere is an existing accountr   )
r   r6   r¡   rÛ   rì   r   r   ÚAccountFileStoragerJ   rs   )r   r  Úmocked_clientr¨   Úmocked_accountÚmocked_storagerÚ   r    r    r!   Útest_registerh  s    
zMainTest.test_registerc              	   C   sT   t  d¡�@}t  ¡ }||j_g |j_|  dddg¡}|  d|d k¡ W 5 Q R X d S )Nr  Úupdate_accountr  r  ú"Could not find an existing accountr   ©r   r6   r¡   r  r   rJ   r   rs   ©r   r  r  rÚ   r    r    r!   Ú(test_update_account_no_existing_accountsy  s    ÿÿz1MainTest.test_update_account_no_existing_accountsc              	   C   sV   t  d¡�B}t  ¡ }||j_g |j_|  ddddg¡}|  d|d k¡ W 5 Q R X d S )Nr  rì   ú--update-registrationr  r  r  r   r  r  r    r    r!   Ú8test_update_registration_no_existing_accounts_deprecated†  s    ÿÿzAMainTest.test_update_registration_no_existing_accounts_deprecatedc              	   C   sT   t  d¡�@}t  ¡ }||j_dg|j_|  d ¡ ¡}|  d|d k¡ W 5 Q R X d S )Nr  r  z@register --update-registration --register-unsafely-without-emailz!--register-unsafely-without-emailr   )	r   r6   r¡   r  r   rJ   r   rH   rs   r  r    r    r!   Ú,test_update_registration_unsafely_deprecated“  s    
ÿz5MainTest.test_update_registration_unsafely_deprecatedz"certbot.main.display_ops.get_emailc                 C   s  d}||_ t d¡�ä}t d¡�Î}t d¡�¸}t d¡�¢}t ¡ }||j_ dg|j_ t ¡ df|_ t ¡ }	|	|j_ |  dg¡}
|  |
d	 d k¡ |  |	j	j
j¡ |  |jj¡ |  ||ƒ jjd	 d	 k¡ |  |j¡ W 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X d S )
Núuser@example.comúcertbot.eff.handle_subscriptionr�   r  rê   r  Úfoor  r   )r   r   r6   r¡   r  rJ   ÚClientr   rs   r¼   Úupdate_registrationr|   Ú	save_regrrÄ   rè   )r   Úmock_utilityÚ
mock_emailrÞ   Úmock_handleÚ
mocked_detr  r  r  Ú	cb_clientrÚ   r    r    r!   Útest_update_account_with_emailŸ  s0    
ÿÿÿz'MainTest.test_update_account_with_emailc                 C   s"  d}||_ t d¡��}t d¡�ì}t d¡�Ö}t d¡�À}t ¡ }||j_ dg|j_ t ¡ }	|	j}
|	df|_ t ¡ }||j_ |  dd	g¡}|  	|d
 d k¡ |j
jjd
 d
 }|  ||
 ¡ ¡ |  	|jj¡ |  	||ƒ jjd
 d
 k¡ |  	|j¡ W 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X d S )Nr  r  r�   r  rê   r  r  rì   r  r   )r   r   r6   r¡   r  rJ   r¢   r  r   rs   r¼   r   rè   r   Úupdater!  r|   rÄ   )r   r"  r#  rÞ   r$  r%  r  r  r  Zmock_accZ	mock_regrr&  rÚ   Zreg_argr    r    r!   Ú.test_update_registration_with_email_deprecated¿  s2    

ÿÿz7MainTest.test_update_registration_with_email_deprecatedzcertbot.updater._run_updatersc                 C   sF   t j|_|  t jtjd d d ¡ d| j_t 	| jd d ¡ |  
|j¡ d S rU   )r   r}  ri   r[   r   Z
renew_certrP   Údry_runr   Zrun_generic_updatersrk   r|   )r   r
  r]   r    r    r!   Útest_plugin_selection_errorá  s      ÿz$MainTest.test_plugin_selection_error)NF)N)N)NNN)N)\r#   r$   r%   r&   r4   rE   rQ   r   r  r  r  r   r6   r  r   r*  r6  r8  r;  r>  rG  rK  rM  rO  rR  rS  rU  rb  rk  ro  rs  rv  rz  r€  r�  r„  r†  rˆ  r‰  rŒ  ra   rb   r‘  r–  r—  r£   rÃ  rª  r­  r¯  r   r¸  r»  r¼  r¿  rÀ  rÅ  rÇ  rÊ  rË  rÐ  rÒ  rÓ  rÔ  rÛ  rÞ  rß  rã  ræ  rç  ré  rê  rï  rñ  rò  ró  rö  r÷  rú  rû  rü  r  r	  r
  r  r  r  r  r'  r)  r+  r_   r    r    r@   r!   rð   þ  s8  



%





	


   ý
K
	



	
	  ÿ

	
"
 rð   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚUnregisterTestc                 C   sD   t  d¡t  d¡t  d¡t ¡ dœ| _tdd„ | j ¡ D ƒƒ| _d S )Nr�   r  rê   )rã   r   rí   r¬  c                 s   s   | ]\}}||  ¡ fV  qd S rB   )r8   )rZ  ÚkÚvr    r    r!   r]  ö  s     z'UnregisterTest.setUp.<locals>.<genexpr>)r   r6   ra   rb   ÚpatchersÚdictr®   Úmocksr?   r    r    r!   r4   ð  s    üzUnregisterTest.setUpc                 C   s   | j  ¡ D ]}| ¡  q
d S rB   )r/  ÚvaluesrC   rD   r    r    r!   rE   ø  s    zUnregisterTest.tearDownc                 C   sR   t  ¡ | jd j_| jd ƒ }d|j_t  ¡ }t  ¡ }t ||¡}|  |d¡ d S )Nr   r¬  FzDeactivation aborted.)	r   r   r1  r  r   ru   r   Ú
unregisterr   )r   rÉ   rP   ry  Úresr    r    r!   Útest_abort_unregisterü  s    z$UnregisterTest.test_abort_unregisterc                 C   s®   t  ¡ }dg|j_|| jd j_t  ¡ df| jd _t  ¡ }|| jd j_t  ¡ }t  ¡ }t ||¡}|  	|d k¡ |  	|j
jj¡ d}|  	|| jd ƒ jjd d k¡ d S )	Nr  r   r  rã   rí   zAccount deactivated.r¬  r   )r   r¡   rJ   r   r1  r  r  r   r3  rs   r¼   Údeactivate_registrationr|   rÄ   rè   ©r   r  r&  rP   ry  r4  Úmr    r    r!   Útest_unregister  s    
zUnregisterTest.test_unregisterc                 C   st   t  ¡ }g |j_|| jd j_t  ¡ }|| jd j_t  ¡ }t  ¡ }t ||¡}d}|  	||¡ |  
|jjj¡ d S )Nr   rí   z.Could not find existing account to deactivate.)r   r¡   rJ   r   r1  r  r  r   r3  r   rk   r¼   r6  r|   r7  r    r    r!   Útest_unregister_no_account  s    z)UnregisterTest.test_unregister_no_accountN)r#   r$   r%   r4   rE   r5  r9  r:  r    r    r    r!   r,  ï  s
   r,  c                   @   s"   e Zd ZdZe d¡dd„ ƒZdS )ÚMakeOrVerifyNeededDirsz2Tests for certbot.main.make_or_verify_needed_dirs.zcertbot.main.utilc                 C   sp   t  | j¡ | jj| jjfD ]}|j |tj| jj	¡ q| jj
| jj| jjf}|D ]}|jj|| jj	d� qRd S )N)rm  )r   Zmake_or_verify_needed_dirsrP   ró   rô   Zset_up_core_dirZassert_any_callr   ZCONFIG_DIRS_MODEZstrict_permissionsZrenewal_pre_hooks_dirZrenewal_deploy_hooks_dirZrenewal_post_hooks_dirZmake_or_verify_dir)r   Z	mock_utilZcore_dirZ	hook_dirsZhook_dirr    r    r!   Útest_it0  s      þþ ÿzMakeOrVerifyNeededDirs.test_itN)r#   r$   r%   r&   r   r6   r<  r    r    r    r!   r;  -  s   r;  c                       sž  e Zd ZdZ‡ fdd„Zdd„ Zdd„ Ze d¡e d	¡e d
¡e d¡dd„ ƒƒƒƒZ	e d¡e d	¡e d
¡e d¡dd„ ƒƒƒƒZ
e d	¡e d
¡e d¡dd„ ƒƒƒZe d	¡e d
¡e d¡dd„ ƒƒƒZe d
¡e d¡dd„ ƒƒZdd„ Ze d¡e d
¡e d¡dd„ ƒƒƒZe d	¡e d
¡e d¡e d¡e ¡ dd„ ƒƒƒƒƒZe d	¡e d
¡e d¡e d¡e ¡ dd„ ƒƒƒƒƒZd d!„ Z‡  ZS )"ÚEnhanceTestzTests for certbot.main.enhance.c                    s8   t t| ƒ ¡  t ¡ | _| j ¡ | _tj	t
jd�| _d S ©N)Úspec)r3   r=  r4   ra   rb   rc   r8   rd   r   r¡   r   ÚAutoHSTSEnhancementÚmockinstallerr?   r@   r    r!   r4   E  s    
zEnhanceTest.setUpc                 C   s   | j  ¡  d S rB   re   r?   r    r    r!   rE   K  s    zEnhanceTest.tearDownc                 C   s¶   t j ¡ }t t ||¡¡}t d¡�†}dg|_	t d¡�h}dg|_	t d¡�J}t 
¡ }||_||_	t ||¡ |W  5 Q R £ W  5 Q R £ W  5 Q R £ S Q R X W 5 Q R X W 5 Q R X d S )Nr<  rp   ro   r)   )r   rI   rJ   r   rK   r   rL   r   r6   r   r¡   rP   r   Úenhance)r   rN   rO   rP   Z
mock_certsZmock_domr<   rá   r    r    r!   rQ   N  s    

ÿzEnhanceTest._callr!  rn   z&certbot.main.display_ops.choose_valuesz&certbot.main._find_domains_or_certnamec              	   C   sh   t jdd�|_dg|_d|_t  d¡�8}|  ddg¡ |  |j¡ |  d|jd	 d
 k¡ W 5 Q R X d S )Nú/tmp/nonexistent©r,  rp   ©NNr"  rB  ú
--redirectr   r   r/   )r   r¡   r   r6   rQ   rs   r|   rè   )r   Ú	mock_findr]   r   r)  Ú	mock_pickr    r    r!   Útest_selection_question^  s    z#EnhanceTest.test_selection_questionc              
   C   s�   t jdd�|_dg|_d|_t  d¡�` t  d¡�J}|  ddd	d
g¡}|  |j¡ |  d|jd d k¡ |  |jj¡ W 5 Q R X W 5 Q R X d S )NrC  rD  rp   rE  r"  z$certbot.main.plug_sel.logger.warningrB  r{  rà  rF  z
make senser   )	r   r¡   r   r6   rQ   rs   r|   rè   Úenhance_config)r   rG  r]   r   r)  Zmock_lográ   r    r    r!   Útest_selection_auth_warningl  s    z'EnhanceTest.test_selection_auth_warningc              	      s®   t jdd�|_dg|_t  d¡�„ |  dddg¡‰ dd	g}d
g}|  ˆ jj¡ |  t‡ fdd„|D ƒƒ¡ |  	t
‡ fdd„|D ƒƒ¡ |  dˆ jjd d k¡ W 5 Q R X d S )NrC  rD  rp   r"  rB  rF  ú--hstsÚredirectZhstsZuirc                    s   g | ]}t ˆ j|ƒ‘qS r    ©ÚgetattrrP   ©rZ  r  ©rá   r    r!   Ú
<listcomp>‡  s     z8EnhanceTest.test_enhance_config_call.<locals>.<listcomp>c                    s   g | ]}t ˆ j|ƒ‘qS r    rN  rP  rQ  r    r!   rR  ‰  s     r   )r   r¡   r   r6   rQ   rs   rJ  r|   Úallrk   Úanyrè   )r   r)  r]   r   Zreq_enhZnot_req_enhr    rQ  r!   Útest_enhance_config_call{  s     ÿÿÿz$EnhanceTest.test_enhance_config_callc              	   C   s\   t jdd�|_dg|_t  d¡�2 |  ddddg¡}|  |jj¡ |  |j¡ W 5 Q R X d S )	NrC  rD  rp   r"  rB  rF  rL  z--non-interactive)	r   r¡   r   r6   rQ   rs   rJ  r|   rk   )r   r)  r]   r   rá   r    r    r!   Útest_enhance_noninteractive�  s    ÿ ÿz'EnhanceTest.test_enhance_noninteractivec              	   C   s8   g |_ t d¡� |  tj| jdddg¡ W 5 Q R X d S )Nr"  rB  rF  rL  )r   r   r6   r[   r   rˆ   rQ   )r   r)  r]   r    r    r!   Útest_user_abort_domainsš  s    þz#EnhanceTest.test_user_abort_domainsc                 C   s   |   tj| jdddg¡ d S )NrB  r{  r   )r[   r   rB  rQ   r?   r    r    r!   Útest_no_enhancements_defined£  s     ÿz(EnhanceTest.test_no_enhancements_definedrX   c                 C   s8   dg|_ d|_ t ¡ |_|  ddg¡}|  |jj¡ d S )Nrp   rE  rB  rL  )r   r   r}  ri   rQ   rk   rJ  r|   )r   r)  r]   rH  rá   r    r    r!   r+  §  s
    
z'EnhanceTest.test_plugin_selection_errorr"  c                 C   s`   | j |_ddg|_tjdd�|_|  ddg¡ |  | j jj¡ |  | j jj	d d ddg¡ d S )	Nrp   úanother.tldrC  rD  rB  ú--auto-hstsr   r-   )
rA  r   r   r¡   rQ   rs   Zenable_autohstsr|   r   rè   ©r   r  r)  r=  r]   r   r    r    r!   Útest_enhancement_enable±  s    
ÿz#EnhanceTest.test_enhancement_enablec                 C   sB   t  | jd¡|_ddg|_tjdd�|_|  tj| j	ddg¡ d S )Nr   rp   rY  rC  rD  rB  rZ  )
r   rY   rP   r   r   r¡   r[   r   r\   rQ   r[  r    r    r!   Ú%test_enhancement_enable_not_supported¿  s    
 þz1EnhanceTest.test_enhancement_enable_not_supportedc                 C   s   |   tj| jdddg¡ d S )NrB  rZ  rL  )r[   r   rˆ   rQ   r?   r    r    r!   Ú test_enhancement_enable_conflictÌ  s
     þz,EnhanceTest.test_enhancement_enable_conflict)r#   r$   r%   r&   r4   rE   rQ   r   r6   rI  rK  rU  rV  rW  rX  r+  ra   rb   r\  r]  r^  r_   r    r    r@   r!   r=  B  sV   

	r=  c                       sX   e Zd ZdZ‡ fdd„Ze d¡e d¡dd„ ƒƒZe d¡e d¡dd	„ ƒƒZ‡  Z	S )
ÚInstallTestzTests for certbot.main.install.c                    s"   t t| ƒ ¡  tjtjd�| _d S r>  )r3   r_  r4   r   r¡   r   r@  rA  r?   r@   r    r!   r4   Õ  s    zInstallTest.setUpr!  r"  c                 C   sD   t  | jd¡|_tj ¡ }d| j_d| j_|  	t
jtj| j|¡ d S )Nr   TZnonexistent)r   rY   rP   r   r   rI   rJ   rZ   r�   r[   r   r\   r   r#  ©r   r=  r)  rO   r    r    r!   Ú&test_install_enhancement_not_supportedÙ  s    
 þz2InstallTest.test_install_enhancement_not_supportedc                 C   sL   | j |_tj ¡ }d| j_d | j_d| j_d| j_	|  
tjtj| j|¡ d S )NTrC  )rA  r   r   rI   rJ   rP   rZ   r�   r.  rÍ   r[   r   rv   r   r#  r`  r    r    r!   Ú$test_install_enhancement_no_certnameä  s    
 þz0InstallTest.test_install_enhancement_no_certname)
r#   r$   r%   r&   r4   r   r6   ra  rb  r_   r    r    r@   r!   r_  Ò  s   	r_  Ú__main__)Er&   Ú
__future__r   r£   rX  rë  r“   rô  rí  rž  ZunittestZjosepyr  r   r¤   r  Z	six.movesr   Zacme.magic_typingr   Zcertbot.tests.utilZtestsr   ra   r  r   r   r   r   r	   r   r   r   r   Zcertbot.compatr   r   Zcertbot.pluginsr   r   r   r   r‡  r•   r  rƒ  r  ZJWKRSAr  Zload_vectorr§   r   rÿ  ZTestCaser   ZConfigTestCaser'   r`   r   ZTempDirTestCaser‹   rÂ   rÙ   rð   r,  r;  r=  r_  r#   r    r    r    r!   Ú<module>   sz   






@TdkD       x>  
