U
    ÝÁ]ó~  ã                   @   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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
 e d	¡Ze d
¡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ƒZG dd„ deƒZG dd„ dejƒZedkre ¡  dS )zTests for certbot.client.é    N)Ú
interfaces)Úaccount)Úerrors)Úos)Ú
filesystem)Úutilzrsa512_key.pemzcsr-san_512.pemc                   @   sT   e Zd ZdZdd„ Zej ej	ddi¡dd„ ƒZ
ej ej	i ¡dd	„ ƒZd
d„ ZdS )ÚDetermineUserAgentTestz.Tests for certbot.client.determine_user_agent.c                 C   s   ddl m} || jƒS )Nr   )Údetermine_user_agent)Úcertbot.clientr	   Úconfig)Úselfr	   © r   ú;/usr/lib/python3/dist-packages/certbot/tests/client_test.pyÚ_call   s    zDetermineUserAgentTest._callZCERTBOT_DOCSÚ1c                 C   s   | j dd d S )NT©Úexpect_doc_values©Ú_test©r   r   r   r   Útest_docs_value   s    z&DetermineUserAgentTest.test_docs_valuec                 C   s   | j dd d S )NFr   r   r   r   r   r   Útest_real_values!   s    z'DetermineUserAgentTest.test_real_valuesc                 C   sd   |   ¡ }|r| j}| j}n| j}| j}|d|ƒ |d|ƒ |d|ƒ |t ¡ |ƒ |t ¡ |ƒ d S )Nzcertbot(-auto)zOS_NAME OS_VERSIONzmajor.minor.patchlevel)r   ZassertInZassertNotInr   Zget_os_info_uaÚplatformZpython_version)r   r   ZuaZdoc_value_checkZreal_value_checkr   r   r   r   %   s    


zDetermineUserAgentTest._testN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚmockÚpatchÚdictr   Úenvironr   r   r   r   r   r   r   r      s   

r   c                       sì   e Zd ZdZ‡ fdd„Zdd„ Zedd„ ƒZedd	„ ƒZed
d„ ƒZ	edd„ ƒZ
dd„ Zdd„ Ze d¡e d¡dd„ ƒƒZe d¡dd„ ƒZdd„ Ze d¡dd„ ƒZe d¡e d¡dd„ ƒƒZdd „ Zd!d"„ Zd#d$„ Zd%d&„ Z‡  ZS )'ÚRegisterTestz"Tests for certbot.client.register.c                    s4   t t| ƒ ¡  d| j_d| j_d| j_t ¡ | _	d S )Ni   Fzalias@example.com)
Úsuperr!   ÚsetUpr   Úrsa_key_sizeÚregister_unsafely_without_emailÚemailr   ZAccountMemoryStorageÚaccount_storager   ©Ú	__class__r   r   r#   9   s
    zRegisterTest.setUpc                 C   s$   ddl m} t ¡ }|| j| j|ƒS )Nr   )Úregister)r
   r*   r   Ú	MagicMockr   r'   )r   r*   Ztos_cbr   r   r   r   @   s    zRegisterTest._callc                  C   s   t jtjd} d| j_| S )Nr(   z{"a": 1})r   ÚMockr   ZJSONDeSerializableZto_partial_jsonÚreturn_value)Úmr   r   r   Ú_public_key_mockE   s    zRegisterTest._public_key_mockc                   C   s   dS )Nz/acme/new-accountr   r   r   r   r   Ú_new_acct_dir_mockK   s    zRegisterTest._new_acct_dir_mockc                   C   s   dS ©NTr   r   r   r   r   Ú
_true_mockO   s    zRegisterTest._true_mockc                   C   s   dS ©NFr   r   r   r   r   Ú_false_mockS   s    zRegisterTest._false_mockc                 C   s¢   t  d¡Ž}d| ¡ _| j|ƒ j_t  d¡b}t  d¡L tj|ƒ j_|  	tj| j
¡ |  |j¡ d |ƒ j_|  
¡  |  |j¡ W 5 Q R X W 5 Q R X W 5 Q R X d S )Nú6certbot.client.acme_client.BackwardsCompatibleClientV2z
http://tosúcertbot.eff.handle_subscriptionú"certbot.account.report_new_account)r   r   Únew_account_and_tosZterms_of_servicer4   Úexternal_account_requiredÚside_effectr   ÚErrorÚassertRaisesr   ÚassertFalseÚcalledÚ
assertTrue)r   Úmock_clientÚmock_handler   r   r   Útest_no_tosW   s    

zRegisterTest.test_no_tosc                 C   sZ   t  d¡F}| j|ƒ j_t  d¡$ t  d¡ |  ¡  W 5 Q R X W 5 Q R X W 5 Q R X d S )Nr5   r7   r6   )r   r   r4   r9   r:   r   ©r   r@   r   r   r   Útest_ite   s
    zRegisterTest.test_itr7   z$certbot.client.display_ops.get_emailc              
   C   s˜   ddl m} d| j_d}|jjd|d}t d¡\}| j|ƒ j	_
t d¡:}|t ¡ g|ƒ j_
|  ¡  |  |jd	¡ |  |j¡ W 5 Q R X W 5 Q R X d S )
Nr   ©ÚmessagesFú3DNS problem: NXDOMAIN looking up MX for example.comÚinvalidContact©Údetailr5   r6   é   )ÚacmerF   r   Únoninteractive_moder;   Ú	with_coder   r   r4   r9   r:   r+   r8   r   ÚassertEqualÚ
call_countr?   r>   )r   Ú_repÚmock_get_emailrF   ÚmsgÚmx_errr@   rA   r   r   r   Útest_email_retryl   s    zRegisterTest.test_email_retryc              
   C   s†   ddl m} d| j_d}|jjd|d}t d¡J}| j|ƒ j	_
t d¡( |t ¡ g|ƒ j_
|  tj| j¡ W 5 Q R X W 5 Q R X d S )	Nr   rE   TrG   rH   rI   r5   r6   )rL   rF   r   rM   r;   rN   r   r   r4   r9   r:   r+   r8   r<   r   r   )r   rQ   rF   rS   rT   r@   r   r   r   Ú!test_email_invalid_noninteractive{   s    z.RegisterTest.test_email_invalid_noninteractivec                 C   s   d | j _|  tj| j¡ d S ©N)r   r&   r<   r   r;   r   r   r   r   r   Útest_needs_email‡   s    zRegisterTest.test_needs_emailúcertbot.client.loggerc                 C   sŒ   t  d¡x}t  d¡b}| j|ƒ j_t  d¡@ d | j_d| j_d| j_|  	¡  |j
 t j¡ |  |j¡ W 5 Q R X W 5 Q R X W 5 Q R X d S )Nr6   r5   r7   TF)r   r   r4   r9   r:   r   r&   r%   Údry_runr   ÚinfoÚassert_called_once_withÚANYr?   r>   )r   Úmock_loggerrA   Z	mock_clntr   r   r   Útest_without_email‹   s    zRegisterTest.test_without_emailc                 C   sˆ   t  d¡t}| j|ƒ j_t  d¡R t  d¡< d| j_|  ¡  |  |j	¡ |  |ƒ j
jd d j¡ W 5 Q R X W 5 Q R X W 5 Q R X dS )zJTests dry-run for no staging account, expect account created with no emailr5   r6   r7   Tr   N)r   r   r4   r9   r:   r   rZ   r   r=   r>   r8   Ú	call_argsZcontact)r   rQ   rR   r@   r   r   r   Útest_dry_run_no_staging_account˜   s    z,RegisterTest.test_dry_run_no_staging_accountc                 C   s   t  d¡|}t j| jd|ƒ jj_| j|ƒ j_	t  d¡D d}t  |¡*}d| j
_d| j
_|  ¡  |  |j¡ W 5 Q R X W 5 Q R X W 5 Q R X d S )Nr5   ©r:   r6   ú8certbot.client.messages.ExternalAccountBinding.from_dataztest-kidz+J2OAqW4MHXsrHVa_PVg0Y-L_R4SYw0_aL1le6mfblbE)r   r   r,   r0   ÚclientÚ	directoryÚ__getitem__r4   r9   r:   r   Úeab_kidÚeab_hmac_keyr   r?   r>   ©r   r@   ÚtargetZmock_eab_from_datar   r   r   Útest_with_eab_arguments§   s    ÿz$RegisterTest.test_with_eab_argumentsc                 C   sz   t  d¡f}| j|ƒ j_t  d¡D d}t  |¡*}d | j_d | j_|  ¡  |  	|j
¡ W 5 Q R X W 5 Q R X W 5 Q R X d S )Nr5   r6   rc   )r   r   r4   r9   r:   r   rg   rh   r   r=   r>   ri   r   r   r   Útest_without_eab_arguments¶   s    z'RegisterTest.test_without_eab_argumentsc                 C   sŠ   t  d¡v}t j| jd|ƒ jjj_| j|ƒ j	_
t  d¡< t  d¡& d | j_d | j_|  tj| j¡ W 5 Q R X W 5 Q R X W 5 Q R X d S )Nr5   rb   r6   rc   )r   r   r,   r/   rd   ÚnetÚkeyZ
public_keyr2   r9   r:   r   rg   rh   r<   r   r;   r   rC   r   r   r   Ú4test_external_account_required_without_eab_argumentsÂ   s    zARegisterTest.test_external_account_required_without_eab_argumentsc              
   C   s    ddl m} d}|j|ddd}t d¡`}tj| jd|ƒ jj_	| j
|ƒ j_t d	¡(}|t ¡ g|ƒ j_|  |j| j¡ W 5 Q R X W 5 Q R X |  |j¡ d S )
Nr   rE   ZTestZ	malformedÚtitle)rJ   Útyprp   r5   rb   r6   )rL   rF   r;   r   r   r,   r0   rd   re   rf   r4   r9   r:   r+   r8   r<   r   r=   r>   )r   rF   rS   rT   r@   rA   r   r   r   Útest_unsupported_errorÍ   s    ÿ$z#RegisterTest.test_unsupported_error)r   r   r   r   r#   r   Ústaticmethodr/   r0   r2   r4   rB   rD   r   r   rU   rV   rX   r_   ra   rk   rl   ro   rr   Ú__classcell__r   r   r(   r   r!   6   s8   





r!   c                       s    e Zd ZdZ‡ fdd„Z‡  ZS )ÚClientTestCommonz2Common base class for certbot.client.Client tests.c              	      s‚   t t| ƒ ¡  d| j_d| j_tjf dtiŽ| _	ddl
m} t d¡2}|| _t ¡  | _|_|| j| j	d d d| _W 5 Q R X d S )NFzkey.pemr   )ÚClientr5   )r   Zaccount_ZauthÚ	installer)r"   ru   r#   r   Zno_verify_sslÚallow_subset_of_namesr   r+   ÚKEYr   r
   rv   r   Úacme_clientrL   r-   rd   )r   rv   rL   r(   r   r   r#   ß   s      þzClientTestCommon.setUp)r   r   r   r   r#   rt   r   r   r(   r   ru   Ü   s   ru   c                       sN  e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zd1d	d
„Ze 	d¡e 	d¡e
 ¡ dd„ ƒƒƒZe 	d¡dd„ ƒZe 	d¡e 	d¡dd„ ƒƒZe 	d¡e 	d¡dd„ ƒƒZe 	d¡e 	d¡e 	d¡dd„ ƒƒƒZdd„ Zdd„ Zd2dd„Ze 	d ¡e 	d!¡d"d#„ ƒƒZe 	d$¡d%d&„ ƒZd'd(„ Zd)d*„ Zd+d,„ Ze
 ¡ d-d.„ ƒZe
 ¡ d/d0„ ƒZ‡  ZS )3Ú
ClientTestz Tests for certbot.client.Client.c                    sB   t t| ƒ ¡  d| j_d| j_ddg| _tjd gtj	j
d| _d S )NFúexample.comúwww.example.com)ÚauthorizationsÚcsr_pem)r"   r{   r#   r   rx   rZ   Ú
eg_domainsr   r+   Úsentinelr   Úeg_orderr   r(   r   r   r#   ò   s    
þzClientTest.setUpc                 C   s    | j jd d }|  |j¡ d S )Nr   )rz   r`   r?   Z
verify_ssl)r   rm   r   r   r   Útest_init_acme_verify_sslü   s    z$ClientTest.test_init_acme_verify_sslc                 C   sR   t  ¡ | j_d g| jjj_g g f| jjj_| j| jj	_| j| jj
_| j| jj_d S rW   )r   r+   rd   Úauth_handlerÚhandle_authorizationsr-   Údeactivate_valid_authorizationsr‚   rL   Úfinalize_orderÚ	new_orderÚupdater   r   r   r   Ú_mock_obtain_certificate   s    z#ClientTest._mock_obtain_certificaterK   c                 C   sN   |dkr"| j jj | j| jj¡ n|  | j jjj|¡ | j	j
 | jtj¡ d S ©NrK   )rd   r„   r…   r\   r‚   r   rx   rO   rP   rL   r‡   r   r]   )r   Ú
auth_countr   r   r   Ú_check_obtain_certificate  s    
þ ÿz$ClientTest._check_obtain_certificatezcertbot.client.crypto_utilrY   c                 C   sÔ   |   ¡  tjdd td}| jj}|  |j¡ | j 	|j
¡}| |d¡ |  tjjtjjf| jj||d¡ |  ¡  |  tjjtjjf| jj|d d¡ |j | jd¡ d | j_|  tj| jj|¡ |j tj¡ d S )NÚpem©ZformÚfileÚdataF)Úorderr)rŠ   r   ÚCSRÚCSR_SANrd   r„   Ú_set_mock_from_fullchainÚcert_and_chain_from_fullchainrL   rˆ   r‘   r…   rO   r   r   ÚcertÚchainZobtain_certificate_from_csrr   Úassert_called_withr‚   r<   r   r;   Úwarningr\   r]   )r   Zunused_mock_get_utilityr^   Úmock_crypto_utilZtest_csrr„   r’   r   r   r   Ú test_obtain_certificate_from_csr  s:    þþþþýz+ClientTest.test_obtain_certificate_from_csrc                 C   s„   t jdd td}||j_tjj|j_|  	|j
¡ |  tjj|¡ |j | jj| jj¡ |j tjj| j| jj¡ |j
 | jj¡ d S )NrŽ   r   )r   r“   r”   Úinit_save_csrr-   r   r   rn   Úinit_save_keyr•   r–   Ú_test_obtain_certificate_commonr\   r   r$   Zkey_dirr€   Zcsr_dirr‚   Zfullchain_pem)r   r›   Úcsrr   r   r   Útest_obtain_certificate7  s"     ÿ  ÿÿz"ClientTest.test_obtain_certificatezcertbot.compat.os.removec                 C   s¬   t jdtjjtd}t jdtjjtd}||j_||j	_|  
|j¡ |  dg¡}d| j_| j|||dd |  |j	jd¡ |  |jjd¡ |  |jd¡ |  |jjd¡ d S )NrŽ   r   r|   Té   )Ú
authzr_retrŒ   rK   )r   r“   r   r   Zcsr_filer”   Zkey_filer   r-   rž   r•   r–   Ú_authzr_from_domainsr   rx   rŸ   rO   rP   )r   Zmock_remover›   r    rn   Úauthzrr   r   r   Ú'test_obtain_certificate_partial_successG  s    z2ClientTest.test_obtain_certificate_partial_successzcertbot.client.acme_crypto_utilc                 C   sª   t jdd td}t|j_tjj|j_t j	d tjjd}|  
|j¡ d| jj_|  ||¡ |j | jj¡ |j tjj| j| jj¡ |j ¡  |j ¡  |  |jjd¡ d S )NrŽ   r   ©r   rŽ   TrK   )r   r“   r”   Úmake_csrr-   r   r   Úkey_pemÚmake_keyÚKeyr•   r–   rd   r   rZ   rŸ   r\   r$   r€   Zmust_staplerž   Úassert_not_calledr   rO   rP   )r   Úmock_acme_cryptoÚmock_cryptor    rn   r   r   r   Útest_obtain_certificate_dry_runY  s     
  ÿ

z*ClientTest.test_obtain_certificate_dry_runc              	   C   s4  ddl m} tjdd td}t|j_tjj	|j
_tjd tjj	d}|  |j¡ |  ¡  d| jj_|  ddg¡}|D ]}|j|j_qr| jj}	|d g|d	 gf|	j_|| j_|| jjj_t ¡  | j | j¡}
W 5 Q R X |  |
tjj tjj!||f¡ |  "d	¡ |  |	jj#d	d
¡ |  | j j$j#dd¡ |j% &d¡ d S )Nr   rE   rŽ   r   r§   Tr|   r}   rK   z*Deactivate authorizations should be calledr¢   zHOrder should be recreated due to successfully deactivated authorizationszCertbot was unable to obtain fresh authorizations for every domain. The dry run will continue, but results may not be accurate.)'rL   rF   r   r“   r”   r¨   r-   r   r   r©   rª   r«   r•   r–   rŠ   rd   r   rZ   r¤   ZSTATUS_VALIDÚbodyZstatusr„   r†   r‚   r~   r…   Ú	test_utilÚpatch_get_utilityÚobtain_certificater€   rO   r—   r˜   r   rP   rˆ   rš   r™   )r   r­   r®   Úmock_logrF   r    rn   Zauthzrsr¥   r„   Úresultr   r   r   Ú:test_obtain_certificate_dry_run_authz_deactivations_failedl  s4    


ÿÿzEClientTest.test_obtain_certificate_dry_run_authz_deactivations_failedc                 C   s6   t  ¡ }t jj|j_t  ¡ }t jj|j_||f|_d S rW   )r   r,   r   r—   Úencoder-   r˜   )r   Zmock_from_fullchainZ	mock_certZ
mock_chainr   r   r   r•   •  s
    z#ClientTest._set_mock_from_fullchainc                 C   s8   g }t |ƒD ]&}| tjtjtj|ddd¡ q|S )N)Úvalue)Z
identifier)r°   )ÚreversedÚappendr   r+   )r   Údomainsr¥   Údomainr   r   r   r¤   œ  s    ÿÿÿÿzClientTest._authzr_from_domainsNc              	   C   sx   |   ¡  |p|  | j¡}|| j_|| jjj_t	 
¡  | j | j¡}W 5 Q R X |  |tjjtjj||f¡ |  |¡ d S rW   )rŠ   r¤   r€   r‚   r~   rd   r„   r…   r-   r±   r²   r³   rO   r   r   r—   r˜   r   )r   rn   r    r£   rŒ   r¥   rµ   r   r   r   rŸ   ¨  s    
þz*ClientTest._test_obtain_certificate_commonz(certbot.client.Client.obtain_certificatez)certbot.storage.RenewableCert.new_lineagec                 C   s´   ddg}t  ¡ t  ¡ t  ¡ d f|_d| jj_|  | j |d¡¡ |  | j |d ¡¡ |  | j |dd … d ¡¡ d| jj_|  | j |d ¡¡ dd„ |j	D ƒ}|  
|dddg¡ d S )	Nz*.example.comr|   FZexample_certrK   Tc                 S   s   g | ]}|d  d  ‘qS )r   r   )Ú.0Úcallr   r   r   Ú
<listcomp>Í  s     zAClientTest.test_obtain_and_enroll_certificate.<locals>.<listcomp>)r   r+   r-   rd   r   rZ   r?   Zobtain_and_enroll_certificater=   Zcall_args_listrO   )r   Zmock_storageZmock_obtain_certificater»   Únamesr   r   r   Ú"test_obtain_and_enroll_certificate»  s      ÿ

z-ClientTest.test_obtain_and_enroll_certificatezcertbot.cli.helpful_parserc              	   C   s€  ddg}t  ¡ }t |d¡ t |d ¡}t |d ¡t |d ¡ }tj |dd¡}tj |dd¡}tj |dd	¡}d
|_	d|d|d|g|_
| j |||||¡\}	}
}|  tj |	¡tj |¡¡ |  tj |
¡tj |¡¡ |  tj |¡tj |¡¡ t|	dƒ}| ¡ }W 5 Q R X |  |t |d ¡¡ t|
dƒ}| ¡ }W 5 Q R X |  |t |d ¡t |d ¡ ¡ t |¡ d S )Nzcert_512.pemzcert-san_512.pemií  r   rK   ÚcertsZchainsz	chain.pemzfullchain.pemZcertonlyz--cert-pathz--chain-pathz--fullchain-pathÚrb)ÚtempfileZmkdtempr   Úchmodr±   Úload_vectorr   ÚpathÚjoinZverbÚargsrd   Zsave_certificaterO   ÚdirnameÚopenÚreadÚshutilZrmtree)r   Zmock_parserrÂ   Ztmp_pathZcert_pemZ	chain_pemZcandidate_cert_pathZcandidate_chain_pathZcandidate_fullchain_pathÚ	cert_pathÚ
chain_pathÚfullchain_pathZ	cert_fileZcert_contentsZ
chain_fileZchain_contentsr   r   r   Útest_save_certificateÐ  sP      þ   þ

ÿ
ÿ
ÿÿz ClientTest.test_save_certificatec              	   C   s   |   tj| jjdgdddd¡ t ¡ }|| j_| j dgdddd¡ |jj	t
j d¡t
j d¡ddt
j d¡d |  |jjd¡ |j 	¡  d S )Núfoo.barrn   r—   r˜   Ú	fullchain)rÎ   rÏ   r¼   rÐ   Zkey_pathr¢   )r<   r   r;   rd   Údeploy_certificater   r+   rw   Údeploy_certr\   r   rÇ   ÚabspathrO   ÚsaverP   Úrestart©r   rw   r   r   r   Útest_deploy_certificate_success÷  s2        ÿ    ÿ


ûz*ClientTest.test_deploy_certificate_successc              	   C   sF   t  ¡ }|| j_tj|j_|  tj| jj	dgdddd¡ |j
 ¡  d S ©NrÒ   rn   r—   r˜   rÓ   )r   r+   rd   rw   r   ÚPluginErrorrÕ   r:   r<   rÔ   Úrecovery_routiner\   rÙ   r   r   r   Útest_deploy_certificate_failure	  s    
    ÿz*ClientTest.test_deploy_certificate_failurec              	   C   sF   t  ¡ }|| j_tj|j_|  tj| jj	dgdddd¡ |j
 ¡  d S rÛ   )r   r+   rd   rw   r   rÜ   r×   r:   r<   rÔ   rÝ   r\   rÙ   r   r   r   Ú$test_deploy_certificate_save_failure  s    
    ÿz/ClientTest.test_deploy_certificate_save_failurec              	   C   sl   t  ¡ }tjd g|j_|| j_|  tj| jj	dgdddd¡ |  
|ƒ jjd¡ |j ¡  |  
|jjd¡ d S )NrÒ   rn   r—   r˜   rÓ   rK   r¢   )r   r+   r   rÜ   rØ   r:   rd   rw   r<   rÔ   rO   Úadd_messagerP   Úrollback_checkpointsr\   ©r   Zmock_get_utilityrw   r   r   r   Ú'test_deploy_certificate_restart_failure  s        ÿ
z2ClientTest.test_deploy_certificate_restart_failurec              	   C   sr   t  ¡ }tj|j_tj|j_|| j_	|  
tj| jjdgdddd¡ |  |ƒ jjd¡ |j ¡  |  |jjd¡ d S )NrÒ   rn   r—   r˜   rÓ   rK   )r   r+   r   rÜ   rØ   r:   ÚReverterErrorrá   rd   rw   r<   rÔ   rO   rà   rP   r\   râ   r   r   r   Ú(test_deploy_certificate_restart_failure2'  s    

    ÿ
z3ClientTest.test_deploy_certificate_restart_failure2)rK   )NrK   )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å   rt   r   r   r(   r   r{   ï   sH   

!
&

&		
r{   c                       sþ   e Zd ZdZ‡ f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e d¡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d!d"„ Ze d¡d#d$„ ƒZd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Z‡  ZS )-ÚEnhanceConfigTestz/Tests for certbot.client.Client.enhance_config.c                    s8   t t| ƒ ¡  d| j_d| j_d| j_d| j_d| _d S )NFzexample.org)	r"   ræ   r#   r   ÚhstsÚredirectÚstapleÚuirr¼   r   r(   r   r   r#   8  s    zEnhanceConfigTest.setUpc                 C   s   |   tj| jj| jgd ¡ d S rW   )r<   r   r;   rd   Úenhance_configr¼   r   r   r   r   Útest_no_installerA  s       ÿz#EnhanceConfigTest.test_no_installerzcertbot.client.enhancementsc              	   C   s|   t  ¡ | j_g | jjj_d | j_d| j_t  	d¡}| j 
| jgd ¡ W 5 Q R X |  |jjd¡ | jjj ¡  |j ¡  d S )NTrY   rK   )r   r+   rd   rw   Úsupported_enhancementsr-   r   rè   rç   r   rë   r¼   rO   rš   rP   Úenhancer¬   Zask)r   Zmock_enhancementsr^   r   r   r   Útest_unsupportedE  s    z"EnhanceConfigTest.test_unsupportedrY   c                 C   s:   d| j _|  ¡  |  |jj¡ |  |jjd d d¡ d S )NTr   rK   úStrict-Transport-Security)r   rç   Ú_test_with_already_existingr?   rš   r>   rO   r`   ©r   r´   r   r   r   Útest_already_exists_headerR  s    ÿz,EnhanceConfigTest.test_already_exists_headerc                 C   s:   d| j _|  ¡  |  |jj¡ |  |jjd d d¡ d S )NTr   rK   rè   )r   rè   rñ   r?   rš   r>   rO   r`   rò   r   r   r   Útest_already_exists_redirectZ  s    ÿz.EnhanceConfigTest.test_already_exists_redirectc                 C   s"   d| j _|  ¡  |  |jj¡ d S r3   )r   rè   rñ   r=   rš   r>   rò   r   r   r   Ú#test_config_set_no_warning_redirectb  s    z5EnhanceConfigTest.test_config_set_no_warning_redirectzcertbot.client.enhancements.askc                 C   sB   d | j _d|_|  ¡  |  |jj¡ |  d|jjd d k¡ d S )NFÚdisabler   )r   rè   r-   rñ   r?   rš   r>   r`   )r   r´   Úmock_askr   r   r   Útest_warn_redirecth  s
    z$EnhanceConfigTest.test_warn_redirectc                 C   s*   d| j _|  ¡  | jjj | jdd¡ d S )NTúensure-http-headerrð   )r   rç   Ú_test_with_all_supportedrd   rw   rî   r™   r¼   r   r   r   r   Útest_no_ask_hstsq  s    
  ÿz"EnhanceConfigTest.test_no_ask_hstsc                 C   s*   d| j _|  ¡  | jjj | jdd ¡ d S )NTrè   )r   rè   rú   rd   rw   rî   r™   r¼   r   r   r   r   Útest_no_ask_redirectw  s    
  ÿz&EnhanceConfigTest.test_no_ask_redirectc                 C   s*   d| j _|  ¡  | jjj | jdd ¡ d S )NTústaple-ocsp)r   ré   rú   rd   rw   rî   r™   r¼   r   r   r   r   Útest_no_ask_staple}  s    
  ÿz$EnhanceConfigTest.test_no_ask_staplec                 C   s*   d| j _|  ¡  | jjj | jdd¡ d S )NTrù   zUpgrade-Insecure-Requests)r   rê   rú   rd   rw   rî   r™   r¼   r   r   r   r   Útest_no_ask_uirƒ  s    
  ÿz!EnhanceConfigTest.test_no_ask_uirc                 C   s4   t  ¡ | j_tj| jjj_|  ¡  | jjj	 
¡  d S rW   )r   r+   rd   rw   r   rÜ   rî   r:   Ú_test_errorrÝ   r\   r   r   r   r   Útest_enhance_failure‰  s    z&EnhanceConfigTest.test_enhance_failurec                 C   sF   t  ¡ | j_tj| jjj_|  ¡  | jjj	 
¡  | jjj 
t j¡ d S rW   )r   r+   rd   rw   r   rÜ   r×   r:   r   rÝ   r\   r]   r   r   r   r   Útest_save_failure  s
    z#EnhanceConfigTest.test_save_failurec                 C   s*   t  ¡ | j_tjd g| jjj_|  ¡  d S rW   )	r   r+   rd   rw   r   rÜ   rØ   r:   Ú_test_error_with_rollbackr   r   r   r   Útest_restart_failure–  s    z&EnhanceConfigTest.test_restart_failurec                 C   s0   t  ¡ }tj|j_tj|j_|| j_	|  
¡  d S rW   )r   r+   r   rÜ   rØ   r:   rä   rá   rd   rw   r  rÙ   r   r   r   Útest_restart_failure2›  s
    

z'EnhanceConfigTest.test_restart_failure2c                 C   s   d | j _d|_|  ¡  d S r1   )r   rè   r-   rú   )r   r÷   r   r   r   Útest_ask¢  s    zEnhanceConfigTest.test_askc                 C   s   |   ¡  |  | jjjj¡ d S rW   )r   r?   rd   rw   rØ   r>   r   r   r   r   r  ¨  s    z+EnhanceConfigTest._test_error_with_rollbackc              	   C   sB   d| j _t ¡ }|  tj| j¡ W 5 Q R X |  |ƒ j	j
d¡ d S )NTrK   )r   rè   r±   r²   r<   r   rÜ   rú   rO   rà   rP   )r   Zmock_gur   r   r   r   ¬  s    
 ÿzEnhanceConfigTest._test_errorc                 C   sh   | j jd krt ¡ | j _dddg| j jj_| j  | jgd ¡ |  | j jj	j
d¡ |  | j jjj
d¡ d S )Nrù   rè   rý   rK   )rd   rw   r   r+   rí   r-   rë   r¼   rO   r×   rP   rØ   r   r   r   r   rú   ³  s      ÿz*EnhanceConfigTest._test_with_all_supportedc                 C   sD   t  ¡ | j_dddg| jjj_t ¡ | jjj_	| j 
| jgd ¡ d S )Nrù   rè   rý   )r   r+   rd   rw   rí   r-   r   ZPluginEnhancementAlreadyPresentrî   r:   rë   r¼   r   r   r   r   rñ   ¼  s      ÿz-EnhanceConfigTest._test_with_already_existing)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ñ   rt   r   r   r(   r   ræ   5  s8   	




	ræ   c                   @   s4   e Zd ZdZdd„ Zedd„ ƒZdd„ Zdd	„ Zd
S )ÚRollbackTestz"Tests for certbot.client.rollback.c                 C   s   t  ¡ | _d S rW   )r   r+   Ú	m_installr   r   r   r   r#   Ç  s    zRollbackTest.setUpc              	   C   s>   ddl m} t d¡}||_|d |i t ¡ ƒ W 5 Q R X d S )Nr   )Úrollbackz.certbot.client.plugin_selection.pick_installer)r
   r	  r   r   r:   r+   )ÚclsZcheckpointsr:   r	  Zmpir   r   r   r   Ê  s    zRollbackTest._callc                 C   s:   |   d| j¡ |  |  ¡ jjd¡ |  |  ¡ jjd¡ d S r‹   )r   r  rO   rá   rP   rØ   r   r   r   r   Útest_no_problemsÑ  s    zRollbackTest.test_no_problemsc                 C   s   |   dd ¡ d S r‹   )r   r   r   r   r   rì   Ö  s    zRollbackTest.test_no_installerN)	r   r   r   r   r#   Úclassmethodr   r  rì   r   r   r   r   r  Ä  s   
r  Ú__main__)r   r   rÍ   rÄ   Zunittestr   Zjosepyr   Zcertbot.tests.utilZtestsr   r±   Zcertbotr   r   Zcertbot.compatr   r   rÆ   ry   r”   ZConfigTestCaser   r!   ru   r{   ræ   ZTestCaser  r   Úmainr   r   r   r   Ú<module>   s4   

  '  H 
