U
    ÝÁ]¥p  ã                   @   sv  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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 G d
d„ dejƒZG dd„ deƒ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G dd„ deƒZG dd„ deƒZG dd„ dejƒZG dd„ dejƒZ G dd„ dejƒZ!G d d!„ d!ej"ƒZ#e$d"krre %¡  dS )#úTests for certbot.cert_manager.é    N)Úconfiguration)Úerrors)Úos)Ú
filesystem)Úutil)ÚALL_FOUR)Ústorage_testc                       s(   e Zd ZdZ‡ fdd„Zdd„ Z‡  ZS )ÚBaseCertManagerTestz2Base class for setting up Cert Manager tests.
    c              	      sŠ   t tˆ ƒ ¡  dˆ j_t ˆ jj¡ d tj	 
ˆ jjd¡dœˆ _t‡ fdd„ˆ jD ƒƒˆ _ttj	 
ˆ jjd¡dƒ}| d¡ W 5 Q R X d S )	NFZspecialarchive)úexample.orgú	other.comc                 3   s$   | ]}|ˆ   |ˆ j| ¡fV  qd S ©N)Ú_set_up_configÚdomains)Ú.0Údomain©Úself© úA/usr/lib/python3/dist-packages/certbot/tests/cert_manager_test.pyÚ	<genexpr>#   s   ÿz,BaseCertManagerTest.setUp.<locals>.<genexpr>zIGNORE.THISÚwzThis file should be ignored!)Úsuperr
   ÚsetUpÚconfigÚquietr   ÚmakedirsÚrenewal_configs_dirr   ÚpathÚjoinÚ
config_dirr   ÚdictÚconfig_filesÚopenÚwrite)r   Zjunk©Ú	__class__r   r   r      s    þÿ
zBaseCertManagerTest.setUpc                 C   sž   t  tj | jj|¡¡ t ¡ }|d k	r<t  |¡ ||d< nt  tj | jj	|¡¡ t
D ] }tj | jj||d ¡||< qXtj | jj|d ¡|_| ¡  |S )NZarchive_dirz.pemz.conf)r   r   r   r   r   r   Zlive_dirÚ	configobjZ	ConfigObjÚdefault_archive_dirr   r   Úfilenamer$   )r   r   Úcustom_archiveÚconfig_fileÚkindr   r   r   r   ,   s    

ÿ
ÿz"BaseCertManagerTest._set_up_config)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Ú__classcell__r   r   r%   r   r
      s   r
   c                   @   s   e Zd ZdZdd„ ZdS )ÚUpdateLiveSymlinksTestz8Tests for certbot.cert_manager.update_live_symlinks
    c           	   
      s<  ddl m} i }| jD ]˜}| j| }|dk	r2|‰ ntj | jj|¡‰ t‡ fdd„t	D ƒƒ||< t	D ]J}| j
| | }|| | }t|dƒ ¡  t tj | jj|d ¡|¡ qbq| | j¡ t ¡ }zf| jD ]Z}t	D ]P}t tj | j
| | ¡¡ |  t t | j
| | ¡¡t || | ¡¡ qÔqÌW 5 t |¡ X dS )zTest update_live_symlinksr   ©Úcert_managerNc                 3   s$   | ]}|t j ˆ |d  ¡fV  qdS )ú1.pemN)r   r   r   )r   r,   ©Zarchive_dir_pathr   r   r   Q   s   ÿÿzCUpdateLiveSymlinksTest.test_update_live_symlinks.<locals>.<genexpr>Úar5   )Úcertbotr4   r   r   r   r   r   r(   r!   r   r"   r#   ÚcloseÚsymlinkr    Zupdate_live_symlinksÚgetcwdÚchdirÚdirnameÚassertEqualr   ÚrealpathÚreadlink)	r   r4   Zarchive_pathsr   r*   r,   Z	live_pathZarchive_pathZprev_dirr   r6   r   Útest_update_live_symlinksE   s4    

ÿ"
þz0UpdateLiveSymlinksTest.test_update_live_symlinksN)r-   r.   r/   r0   rA   r   r   r   r   r2   B   s   r2   c                   @   s„   e Zd ZdZdd„ Ze ¡ e d¡e d¡dd„ ƒƒƒZ	e ¡ e d¡e d¡dd	„ ƒƒƒZ
e ¡ e d¡e d¡d
d„ ƒƒƒZdS )Ú
DeleteTestz*Tests for certbot.cert_manager.delete
    c                 C   s   ddl m} | | j¡ d S ©Nr   r3   )r8   r4   Údeleter   )r   r4   r   r   r   Ú_calln   s    zDeleteTest._callú)certbot.cert_manager.lineage_for_certnamezcertbot.storage.delete_filesc                 C   s*   | j |_d| j_|  ¡  | | jd¡ dS ©úTest deleter   N)Útest_rcÚreturn_valuer   ÚcertnamerE   Úassert_called_once_with)r   Úmock_delete_filesÚmock_lineage_for_certnameÚunused_get_utilityr   r   r   Útest_delete_from_configr   s    z"DeleteTest.test_delete_from_configc                 C   s4   | j |_tjdgf|ƒ j_|  ¡  | | jd¡ dS rG   )rI   rJ   Údisplay_utilÚOKÚ	checklistrE   rL   r   ©r   rM   rN   Z	mock_utilr   r   r   Útest_delete_interactive_single}   s    z)DeleteTest.test_delete_interactive_singlec                 C   sR   | j |_tjddgf|ƒ j_|  ¡  | | jd¡ | | jd¡ |  |j	d¡ dS )rH   r   z	other.orgé   N)
rI   rJ   rQ   rR   rS   rE   Zassert_any_callr   r>   Z
call_countrT   r   r   r   Ú test_delete_interactive_multipleˆ   s    z+DeleteTest.test_delete_interactive_multipleN)r-   r.   r/   r0   rE   Ú	test_utilÚpatch_get_utilityÚmockÚpatchrP   rU   rW   r   r   r   r   rB   j   s   rB   c                   @   s°   e Zd ZdZdd„ Ze d¡e ¡ dd„ ƒƒZ	e d¡e ¡ dd„ ƒƒZ
e d	¡e d¡e ¡ e d
¡e d¡dd„ ƒƒƒƒƒZe d¡e ¡ dd„ ƒƒZe d¡dd„ ƒZdS )ÚCertificatesTestz0Tests for certbot.cert_manager.certificates
    c                 O   s   ddl m} |||ŽS )Nr   )Úcertificates)Úcertbot.cert_managerr]   )r   ÚargsÚkwargsr]   r   r   r   Ú_certificates™   s    zCertificatesTest._certificateszcertbot.cert_manager.loggerc                 C   s*   |   | j¡ |  |jj¡ |  |j¡ d S r   )ra   r   Ú
assertTrueÚwarningÚcalled©r   Úmock_utilityÚmock_loggerr   r   r   Útest_certificates_parse_fail   s    z-CertificatesTest.test_certificates_parse_failc                 C   s4   d| j _|  | j ¡ |  |jj¡ |  |jj¡ d S )NT)r   r   ra   ÚassertFalseZnotificationrd   rb   rc   re   r   r   r   Útest_certificates_quiet¤   s    z(CertificatesTest.test_certificates_quietz)certbot.crypto_util.verify_renewable_certúcertbot.storage.RenewableCertz+certbot.cert_manager._report_human_readablec                 C   sN   d |_ d|_ |  | j¡ |  |jj¡ |  |j¡ |  |j¡ |  |j¡ d S )NÚ )rJ   ra   r   ri   rc   rd   rb   )r   Zmock_reportÚmock_renewable_certrf   rg   Zmock_verifierr   r   r   Útest_certificates_parse_success¬   s    z0CertificatesTest.test_certificates_parse_successc              	   C   s|   t  ¡ }t tjtj |d¡tj |d¡tj |d¡dd¡}t	 
|j¡ |  |¡ |  |jj¡ |  |j¡ t |¡ d S )Nr   ZworkZlogsF)r    Zwork_dirZlogs_dirr   )ÚtempfileZmkdtempr   ZNamespaceConfigrZ   Ú	MagicMockr   r   r   r   r   r   ra   ri   rc   rd   rb   ÚshutilZrmtree)r   rf   rg   Zempty_tempdirZempty_configr   r   r   Útest_certificates_no_files»   s    ü
z+CertificatesTest.test_certificates_no_filesz8certbot.cert_manager.ocsp.RevocationChecker.ocsp_revokedc                    sn  d |_ ddlm‰  dd l}dd l}|j |j ¡ ¡}tj	dd}||_
ddg|j_ d|_|g‰tj	d d d‰‡ ‡‡fdd	„}|ƒ }|  d
|k¡ | j
|jdd7  _
|ƒ }|  d|kp¾d|k¡ |  d|koÔd|k¡ | j
|jdd7  _
|ƒ }|  d|k¡ |  d|k¡ |  d|ko$d|k¡ | j
|jdd7  _
|ƒ }|  d|k¡ |  d|kofd|k¡ d|_d|_ |ƒ }|  d|k¡ tj	dd}||_
ddg|j_ d|_ˆ |¡ |ƒ }|  tt d|¡ƒd¡ dgˆ_|ƒ }|  tt d|¡ƒd¡ dgˆ_|ƒ }|  tt d|¡ƒd¡ dˆ_|ƒ }|  tt d|¡ƒd¡ dˆ_|ƒ }|  tt d|¡ƒd¡ d S )Nr   r3   Znameone©ÚlineagenameZnametwoF)rK   rt   c                      s   ˆ   ˆˆ¡S r   )Z_report_human_readabler   ©r4   Zmock_configZparsed_certsr   r   Ú<lambda>Þ   ó    z=CertificatesTest.test_report_human_readable.<locals>.<lambda>zINVALID: EXPIREDrV   )Zhoursz	1 hour(s)z	2 hour(s)ZVALIDZINVALIDé   )Zdaysz1 dayZunderz3 daysTzINVALID: TEST_CERT, REVOKEDZindescribablezthrice.namedzINVALID:Zhorror)rJ   r8   r4   ÚdatetimeÚpytzZUTCZfromutcZutcnowrZ   rp   Ztarget_expiryÚnamesZis_test_certrb   Z	timedeltari   Úappendr>   ÚlenÚreÚfindallr   rK   )r   Zmock_revokedry   rz   ZexpiryÚcertZ
get_reportÚoutr   ru   r   Útest_report_human_readableÌ   sd    
z+CertificatesTest.test_report_human_readableN)r-   r.   r/   r0   ra   rZ   r[   rX   rY   rh   rj   rn   rr   r‚   r   r   r   r   r\   –   s&   
r\   c                   @   s6   e Zd ZdZe d¡e d¡e d¡dd„ ƒƒƒZdS )ÚSearchLineagesTestz0Tests for certbot.cert_manager._search_lineages.úcertbot.util.make_or_verify_dirú"certbot.storage.renewal_conf_filesrk   c                 C   sH   dg|_ tj|_ddlm} |  | | jdd„ d¡d¡ |  	|j
¡ d S )NZbadfiler   r3   c                 S   s   | S r   r   ©Úxr   r   r   rv     rw   z<SearchLineagesTest.test_cert_storage_error.<locals>.<lambda>Zcheck)rJ   r   ÚCertStorageErrorÚside_effectr8   r4   r>   Z_search_lineagesr   rb   rd   )r   rm   Úmock_renewal_conf_filesÚmock_make_or_verify_dirr4   r   r   r   Útest_cert_storage_error  s
    z*SearchLineagesTest.test_cert_storage_errorN)r-   r.   r/   r0   rZ   r[   rŒ   r   r   r   r   rƒ     s
   rƒ   c                   @   sn   e Zd ZdZe d¡e d¡e d¡dd„ ƒƒƒZe d¡e d¡dd„ ƒƒZe d¡e d¡d	d
„ ƒƒZdS )ÚLineageForCertnameTestz3Tests for certbot.cert_manager.lineage_for_certnamer„   ú)certbot.storage.renewal_file_for_certnamerk   c                 C   sJ   d|_ tjdd}||_ ddlm} |  | | jd¡|¡ |  |j	¡ d S )Núsomefile.confúexample.comrs   r   r3   )
rJ   rZ   ÚMockr8   r4   r>   Úlineage_for_certnamer   rb   rd   )r   rm   Úmock_renewal_conf_filer‹   Ú
mock_matchr4   r   r   r   Útest_found_match$  s    z'LineageForCertnameTest.test_found_matchc                 C   s8   d|_ ddlm} |  | | jd¡d ¡ |  |j¡ d S )Nzother.com.confr   r3   r   )rJ   r8   r4   r>   r’   r   rb   rd   ©r   r“   r‹   r4   r   r   r   Útest_no_match0  s    z$LineageForCertnameTest.test_no_matchc                 C   s<   t  ¡ |_ddlm} |  | | jd¡d ¡ |  |j	¡ d S )Nr   r3   r   )
r   rˆ   r‰   r8   r4   r>   r’   r   rb   rd   r–   r   r   r   Útest_no_renewal_file8  s    
z+LineageForCertnameTest.test_no_renewal_fileN)	r-   r.   r/   r0   rZ   r[   r•   r—   r˜   r   r   r   r   r   !  s   	r   c                   @   sR   e Zd ZdZe d¡e d¡e d¡dd„ ƒƒƒZe d¡e d¡dd„ ƒƒZd	S )
ÚDomainsForCertnameTestz3Tests for certbot.cert_manager.domains_for_certnamer„   rŽ   rk   c                 C   sZ   d|_ tjdd}ddg}||j_ ||_ ddlm} |  | | jd¡|¡ |  	|j
¡ d S )Nr   r   rs   r   r   r3   )rJ   rZ   r‘   r{   r8   r4   r>   Údomains_for_certnamer   rb   rd   )r   rm   r“   r‹   r”   r   r4   r   r   r   r•   D  s    ÿz'DomainsForCertnameTest.test_found_matchc                 C   s8   d|_ ddlm} |  | | jd¡d ¡ |  |j¡ d S )Nr   r   r3   r   )rJ   r8   r4   r>   rš   r   rb   rd   r–   r   r   r   r—   S  s    z$DomainsForCertnameTest.test_no_matchN)r-   r.   r/   r0   rZ   r[   r•   r—   r   r   r   r   r™   A  s   r™   c                       sº   e Zd ZdZ‡ fdd„Zdd„ Ze d¡e 	¡ dd„ ƒƒZ
e 	¡ d	d
„ ƒZe 	¡ e d¡dd„ ƒƒZe 	¡ e d¡dd„ ƒƒZe 	¡ e d¡dd„ ƒƒZe 	¡ e d¡dd„ ƒƒZ‡  ZS )ÚRenameLineageTestz-Tests for certbot.cert_manager.rename_lineagec                    s"   t t| ƒ ¡  d| j_d| j_d S )Nr   Zafter)r   r›   r   r   rK   Únew_certnamer   r%   r   r   r   _  s    zRenameLineageTest.setUpc                 O   s   ddl m} |j||ŽS rC   )r8   r4   Zrename_lineage)r   r_   r`   r4   r   r   r   rE   d  s    zRenameLineageTest._callr…   c                 C   s€   d | j _d| j _g |_|  tj| j| j ¡ dg|_|ƒ }tj	df|j
_|  tj| j| j ¡ tjdf|j
_|  tj| j| j ¡ d S )NÚtwozone.confr   éÿÿÿÿ)r   rK   rœ   rJ   ÚassertRaisesr   ÚErrorrE   rQ   ÚCANCELÚmenurR   )r   Úmock_get_utilityrŠ   Ú	util_mockr   r   r   Útest_no_certnameh  s    z"RenameLineageTest.test_no_certnamec                 C   s^   d| j _d | j _|ƒ }tjdf|j_|  tj	| j
| j ¡ tjd f|j_|  tj	| j
| j ¡ d S )NÚoneÚname)r   rK   rœ   rQ   r¡   ÚinputrJ   rŸ   r   r    rE   rR   )r   r£   r¤   r   r   r   Útest_no_new_certnamez  s    z&RenameLineageTest.test_no_new_certnamerF   c                 C   s.   d| j _d| j _d |_|  tj| j| j ¡ d S )Nr¦   r   )r   rK   rœ   rJ   rŸ   r   ÚConfigurationErrorrE   )r   rN   rO   r   r   r   Útest_no_existing_certname†  s     ÿz+RenameLineageTest.test_no_existing_certnamez-certbot.storage.RenewableCert._check_symlinksc                 C   sT   d|_ |  | j¡ ddlm} | | j| jj¡}|  |d k	¡ |  |j	| jj¡ d S ©NTr   r3   )
rJ   rE   r   r8   r4   r’   rœ   rb   r>   rt   )r   Ú
mock_checkrO   r4   Úupdated_lineager   r   r   Útest_rename_cert  s    z"RenameLineageTest.test_rename_certc                 C   sp   d|_ d | j_|ƒ }tjdf|j_ |  | j¡ ddlm} | 	| j| jj
¡}|  |d k	¡ |  |j| jj
¡ d S r¬   )rJ   r   rK   rQ   rR   r¢   rE   r8   r4   r’   rœ   rb   r>   rt   )r   r­   r£   r¤   r4   r®   r   r   r   Ú%test_rename_cert_interactive_certname™  s    z7RenameLineageTest.test_rename_cert_interactive_certnamec                 C   sL   d|_ d| j_|  tj| j| j¡ d tj	j
¡| j_|  tj| j| j¡ d S )NTr   z	one{0}two)rJ   r   rœ   rŸ   r   rª   rE   Úformatr   r   Úsep)r   r­   rO   r   r   r   Ú!test_rename_cert_bad_new_certname¦  s
    z3RenameLineageTest.test_rename_cert_bad_new_certname)r-   r.   r/   r0   r   rE   rZ   r[   rX   rY   r¥   r©   r«   r¯   r°   r³   r1   r   r   r%   r   r›   \  s(   
r›   c                       s2   e Zd ZdZ‡ fdd„Ze d¡dd„ ƒZ‡  ZS )ÚDuplicativeCertsTestz!Test to avoid duplicate lineages.c                    s$   t t| ƒ ¡  | j ¡  |  ¡  d S r   )r   r´   r   r+   r$   Ú_write_out_ex_kindsr   r%   r   r   r   ¶  s    
zDuplicativeCertsTest.setUpr„   c              	   C   sè   ddl m} t d¡}t| jjdƒ}| |¡ W 5 Q R X || jddgƒ}|  	|d¡ || jdd	gƒ}|  
|d jj d
¡¡ |  	|d d ¡ || jdd	dgƒ}|  	|d d ¡ |  
|d jj d
¡¡ || jddgƒ}|  	|d¡ d S )Nr   )Úfind_duplicative_certszcert-san_512.pemÚwbzwow.netz
hooray.org)NNr   zwww.example.comzexample.org.confrx   zsomething.new)r^   r¶   rX   Zload_vectorr#   rI   r€   r$   r   r>   rb   Z
configfiler)   Úendswith)r   Zunused_makedirr¶   Z	test_certÚfÚresultr   r   r   Útest_find_duplicative_names»  s4    
 ÿ ÿ ÿ ÿz0DuplicativeCertsTest.test_find_duplicative_names)	r-   r.   r/   r0   r   rZ   r[   r»   r1   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dd	„ Zd
d„ Ze	 
d¡dd„ ƒZe	 
d¡dd„ ƒZe	 
d¡dd„ ƒZe	 
d¡dd„ ƒZ‡  ZS )ÚCertPathToLineageTestz3Tests for certbot.cert_manager.cert_path_to_lineagec                    sJ   t t| ƒ ¡  | j ¡  |  ¡  tj | j	j
ddd¡| _| jdf| j	_d S ©NÚliver   úfullchain.pemrl   )r   r¼   r   r+   r$   rµ   r   r   r   r   r    Ú	fullchainÚ	cert_pathr   r%   r   r   r   Ü  s    
ÿzCertPathToLineageTest.setUpc                 C   s   ddl m} ||ƒS )Nr   )Úcert_path_to_lineage)r^   rÂ   )r   Ú
cli_configrÂ   r   r   r   rE   ä  s    zCertPathToLineageTest._callc                 C   s   ddl m} |||ƒS )Nr   ©Ú_archive_files)r^   rÅ   )r   rÃ   ZfiletyperÅ   r   r   r   rÅ   è  s    z$CertPathToLineageTest._archive_filesc                 C   s   |   d|  | j¡¡ d S )Nr   )r>   rE   r   r   r   r   r   Útest_basic_matchì  s    z&CertPathToLineageTest.test_basic_matchc                 C   s4   | j }tj | j jddd¡|_|  tj| j	|¡ d S )Nr¾   Z
SailorMoonr¿   )
r   r   r   r   r    rÁ   rŸ   r   r    rE   )r   Zbad_test_configr   r   r   Útest_no_match_existsï  s     ÿz*CertPathToLineageTest.test_no_match_existsz(certbot.cert_manager._acceptable_matchesc                 C   s.   dd„ g|_ | j| j_|  d|  | j¡¡ d S )Nc                 S   s   | j S r   )Úfullchain_pathr†   r   r   r   rv   ÷  rw   z>CertPathToLineageTest.test_options_fullchain.<locals>.<lambda>r   )rJ   rÀ   r   rÈ   r>   rE   ©r   Úmock_acceptable_matchesr   r   r   Útest_options_fullchainõ  s    
z,CertPathToLineageTest.test_options_fullchainc                 C   sF   dd„ g|_ tj | jjddd¡}|df| j_|  d|  | j¡¡ d S )Nc                 S   s   | j S r   )rÁ   r†   r   r   r   rv   ý  rw   z>CertPathToLineageTest.test_options_cert_path.<locals>.<lambda>r¾   r   zcert.pemrl   )	rJ   r   r   r   r   r    rÁ   r>   rE   )r   rÊ   Ztest_cert_pathr   r   r   Útest_options_cert_pathû  s    ÿz,CertPathToLineageTest.test_options_cert_pathc                    sF   t j ˆ jjddd¡dfˆ j_‡ fdd„g|_ˆ  dˆ  ˆ j¡¡ d S )NÚarchiver   z
cert11.pemrl   c                    s   ˆ   | d¡S )Nr€   rÄ   r†   r   r   r   rv     rw   zACertPathToLineageTest.test_options_archive_cert.<locals>.<lambda>©	r   r   r   r   r    rÁ   rJ   r>   rE   rÉ   r   r   r   Útest_options_archive_cert  s    ÿÿz/CertPathToLineageTest.test_options_archive_certc                    sF   t j ˆ jjddd¡dfˆ j_‡ fdd„g|_ˆ  dˆ  ˆ j¡¡ d S )NrÍ   r   zfullchain11.pemrl   c                    s   ˆ   | d¡S )NrÀ   rÄ   r†   r   r   r   rv     s    zFCertPathToLineageTest.test_options_archive_fullchain.<locals>.<lambda>rÎ   rÉ   r   r   r   Útest_options_archive_fullchain  s     ÿÿz4CertPathToLineageTest.test_options_archive_fullchain)r-   r.   r/   r0   r   rE   rÅ   rÆ   rÇ   rZ   r[   rË   rÌ   rÏ   rÐ   r1   r   r   r%   r   r¼   Ù  s   


r¼   c                       sT   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Ze d¡d	d
„ ƒZ	e d¡dd„ ƒZ
‡  ZS )ÚMatchAndCheckOverlapszUTests for certbot.cert_manager.match_and_check_overlaps w/o overlapping archive dirs.c                    sJ   t t| ƒ ¡  | j ¡  |  ¡  tj | j	j
ddd¡| _| jdf| j	_d S r½   )r   rÑ   r   r+   r$   rµ   r   r   r   r   r    rÀ   rÁ   r   r%   r   r   r     s    
ÿzMatchAndCheckOverlaps.setUpc                 C   s   ddl m} |||||ƒS )Nr   )Úmatch_and_check_overlaps)r^   rÒ   )r   rÃ   Zacceptable_matchesZ
match_funcZrv_funcrÒ   r   r   r   rE     s    zMatchAndCheckOverlaps._callc              
      s:   ddl m} ˆ  dgˆ  ˆ j|ƒ ‡ fdd„dd„ ¡¡ d S )Nr   )Ú_acceptable_matchesr   c                    s   ˆ j jd S )Nr   )r   rÁ   r†   r   r   r   rv   &  rw   z8MatchAndCheckOverlaps.test_basic_match.<locals>.<lambda>c                 S   s   | j S r   rs   r†   r   r   r   rv   &  rw   )r^   rÓ   r>   rE   r   )r   rÓ   r   r   r   rÆ   #  s
    
 ÿz&MatchAndCheckOverlaps.test_basic_matchz%certbot.cert_manager._search_lineagesc                 C   s$   g |_ |  tj| j| jd d d ¡ d S r   )rJ   rŸ   r   r    rE   r   ©r   Zmock_search_lineagesr   r   r   Útest_no_matches(  s    z%MatchAndCheckOverlaps.test_no_matchesc                 C   s(   ddg|_ |  tj| j| jd d d ¡ d S )NZspiderZdance)rJ   rŸ   r   ZOverlappingMatchFoundrE   r   rÔ   r   r   r   Útest_too_many_matches-  s    
z+MatchAndCheckOverlaps.test_too_many_matches)r-   r.   r/   r0   r   rE   rÆ   rZ   r[   rÕ   rÖ   r1   r   r   r%   r   rÑ     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¡e d¡d
d„ ƒƒZ	e d¡e d¡dd„ ƒƒZ
e d¡e d¡dd„ ƒƒZe d¡e d¡dd„ ƒƒZe d¡e d¡dd„ ƒƒZdS )ÚGetCertnameTestr   c                 C   s,   t  ¡ | _| j ¡ | _t ¡ | _d | j_d S r   )	rX   rY   Úget_utility_patchÚstartr£   rZ   rp   r   rK   r   r   r   r   r   6  s    

zGetCertnameTest.setUpc                 C   s   | j  ¡  d S r   )rØ   Ústopr   r   r   r   ÚtearDown<  s    zGetCertnameTest.tearDownr…   z(certbot.storage.lineagename_for_filenamec                 C   sn   dg|_ d|_ ddlm} d}tjdf|  ¡ j_ |  |j| j	ddddg¡ |  
||  ¡ jjd d k¡ d S )	Núexample.com.confr   r   r3   zWhich certificate would youÚverbF©Úallow_multiple)rJ   r8   r4   rQ   rR   r£   r¢   r>   Úget_certnamesr   rb   Ú	call_args©r   Ú	mock_nameÚ
mock_filesr4   Úpromptr   r   r   Útest_get_certnames?  s       ÿþÿz"GetCertnameTest.test_get_certnamesc                 C   sn   dg|_ d|_ ddlm} d}tjdf|  ¡ j_ |  |j| j	dd|ddg¡ |  |  ¡ jj
d d |¡ d S )	NrÜ   r   r   r3   úcustom promptrÝ   F©rß   Zcustom_prompt)rJ   r8   r4   rQ   rR   r£   r¢   r>   rà   r   rá   râ   r   r   r   Ú test_get_certnames_custom_promptM  s"       ÿýÿz0GetCertnameTest.test_get_certnames_custom_promptc                 C   sJ   dg|_ d|_ ddlm} tjdf|  ¡ j_ | jtj	|j
| jddd d S )NrÜ   r   r   r3   Úerroring_anywayFrÞ   )rJ   r8   r4   rQ   r¡   r£   r¢   rŸ   r   r    rà   r   ©r   rã   rä   r4   r   r   r   Útest_get_certnames_user_abort\  s      ýz-GetCertnameTest.test_get_certnames_user_abortc                 C   sp   dg|_ d|_ ddlm} d}tjdgf|  ¡ j_ |  |j| j	ddddg¡ |  
||  ¡ jjd d k¡ d S )	NrÜ   r   r   r3   zWhich certificate(s) would yourÝ   TrÞ   )rJ   r8   r4   rQ   rR   r£   rS   r>   rà   r   rb   rá   râ   r   r   r   Ú!test_get_certnames_allow_multipleh  s$    ÿ  ÿþÿz1GetCertnameTest.test_get_certnames_allow_multiplec                 C   sp   dg|_ d|_ ddlm} d}tjdgf|  ¡ j_ |  |j| j	dd|ddg¡ |  |  ¡ jj
d d |¡ d S )	NrÜ   r   r   r3   rç   rÝ   Trè   )rJ   r8   r4   rQ   rR   r£   rS   r>   rà   r   rá   râ   r   r   r   Ú/test_get_certnames_allow_multiple_custom_promptw  s(    ÿ   ÿýþz?GetCertnameTest.test_get_certnames_allow_multiple_custom_promptc                 C   sJ   dg|_ d|_ ddlm} tjg f|  ¡ j_ | jtj	|j
| jddd d S )NrÜ   r   r   r3   rê   TrÞ   )rJ   r8   r4   rQ   r¡   r£   rS   rŸ   r   r    rà   r   rë   r   r   r   Ú,test_get_certnames_allow_multiple_user_abortˆ  s      ýz<GetCertnameTest.test_get_certnames_allow_multiple_user_abortN)r-   r.   r/   r0   r   rÛ   rZ   r[   ræ   ré   rì   rí   rî   rï   r   r   r   r   r×   3  s*   
r×   Ú__main__)&r0   r~   rq   ro   Zunittestr'   rZ   r8   r   r   Zcertbot.compatr   r   Zcertbot.displayr   rQ   Zcertbot.storager   Zcertbot.testsr	   rX   ZConfigTestCaser
   r2   ZBaseRenewableCertTestrB   r\   rƒ   r   r™   r›   r´   r¼   rÑ   ZTestCaser×   r-   Úmainr   r   r   r   Ú<module>   s8   ,(,{ W&;b
