U
    ÓZjó~  ã                   @   s  d Z ddlZddlZddlZddlZddlZddl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   ú\/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-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ÚplatformÚ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_servicer5   Ú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 )Nr6   r8   r7   )r   r   r5   r:   r;   r   ©r   rA   r   r   r   Útest_ite   s
    zRegisterTest.test_itr8   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©Údetailr6   r7   é   )ÚacmerG   r   Únoninteractive_moder<   Ú	with_coder   r   r5   r:   r;   r,   r9   r   ÚassertEqualÚ
call_countr@   r?   )r   Ú_repÚmock_get_emailrG   ÚmsgÚmx_errrA   rB   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   rF   TrH   rI   rJ   r6   r7   )rM   rG   r   rN   r<   rO   r   r   r5   r:   r;   r,   r9   r=   r   r   )r   rR   rG   rT   rU   rA   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 )Nr7   r6   r8   TF)r   r   r5   r:   r;   r   r'   r&   Údry_runr   ÚinfoÚassert_called_once_withÚANYr@   r?   )r   Úmock_loggerrB   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 emailr6   r7   r8   Tr   N)r   r   r5   r:   r;   r   r[   r   r>   r?   r9   Ú	call_argsÚcontact)r   rR   rS   rA   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 )Nr6   ©r;   r7   ú8certbot.client.messages.ExternalAccountBinding.from_dataztest-kidz+J2OAqW4MHXsrHVa_PVg0Y-L_R4SYw0_aL1le6mfblbE)r   r   r-   r1   ÚclientÚ	directoryÚ__getitem__r5   r:   r;   r   Úeab_kidÚeab_hmac_keyr   r@   r?   ©r   rA   Ú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 )Nr6   r7   re   )r   r   r5   r:   r;   r   ri   rj   r   r>   r?   rk   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 )Nr6   rd   r7   re   )r   r   r-   r0   rf   ÚnetÚkeyZ
public_keyr3   r:   r;   r   ri   rj   r=   r   r<   r   rD   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   rF   ZTestZ	malformedÚtitle)rK   Útyprr   r6   rd   r7   )rM   rG   r<   r   r   r-   r1   rf   rg   rh   r5   r:   r;   r,   r9   r=   r   r>   r?   )r   rG   rT   rU   rA   rB   r   r   r   Útest_unsupported_errorÍ   s    ÿ$z#RegisterTest.test_unsupported_error)r   r   r   r   r$   r   Ústaticmethodr0   r1   r3   r5   rC   rE   r   r   rV   rW   rY   r`   rc   rm   rn   rq   rt   Ú__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   )ÚClientr6   )r   Zaccount_ÚauthÚ	installer)r#   rw   r$   r   Zno_verify_sslÚallow_subset_of_namesr   r,   ÚKEYr   r
   rx   r   Úacme_clientrM   r.   rf   )r   rx   rM   r)   r   r   r$   ß   s      þzClientTestCommon.setUp)r   r   r   r   r$   rv   r   r   r)   r   rw   Ü   s   rw   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   r{   r[   Ú
eg_domainsr   r,   Úsentinelr‚   Úeg_orderr   r)   r   r   r$   ò   s    
þzClientTest.setUpc                 C   s    | j jd d }|  |j¡ d S )Nr   )r}   ra   r@   Z
verify_ssl)r   ro   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 rX   )r   r,   rf   Úauth_handlerÚhandle_authorizationsr.   Údeactivate_valid_authorizationsr…   rM   Úfinalize_orderÚ	new_orderÚupdater   r   r   r   Ú_mock_obtain_certificate   s    z#ClientTest._mock_obtain_certificaterL   c                 C   sN   |dkr"| j jj | j| jj¡ n|  | j jjj|¡ | j	j
 | jtj¡ d S ©NrL   )rf   r‡   rˆ   r]   r…   r   r{   rP   rQ   rM   rŠ   r   r^   )r   Ú
auth_countr   r   r   Ú_check_obtain_certificate  s    
þ ÿz$ClientTest._check_obtain_certificatezcertbot.client.crypto_utilrZ   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©ÚformÚfileÚdataF)Úorderr)r�   r   ÚCSRÚCSR_SANrf   r‡   Ú_set_mock_from_fullchainÚcert_and_chain_from_fullchainrM   r‹   r•   rˆ   rP   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„   rp   Ú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�   rL   )r   r—   r   r„   Zcsr_filer˜   Úkey_filer¡   r.   r¢   r™   rš   Ú_authzr_from_domainsr   r{   r£   rP   rQ   )r   Zmock_removerŸ   r¤   rp   Ú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‘   TrL   )r   r—   r˜   Úmake_csrr.   r   r„   Úkey_pemÚmake_keyÚKeyr™   rš   rf   r   r[   r£   r]   r%   rƒ   Zmust_stapler¢   Úassert_not_calledr¡   rP   rQ   )r   Úmock_acme_cryptoÚmock_cryptor¤   rp   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   rF   r‘   r’   r¬   Tr   r€   rL   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.)'rM   rG   r   r—   r˜   r­   r.   r   r„   r®   r¯   r°   r™   rš   r�   rf   r   r[   r©   ZSTATUS_VALIDÚbodyÚstatusr‡   r‰   r…   r�   rˆ   Ú	test_utilÚpatch_get_utilityÚobtain_certificaterƒ   rP   r›   rœ   r�   rQ   r‹   rž   r�   )r   r²   r³   Úmock_logrG   r¤   rp   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 rX   )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)Ú
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 rX   )r�   r©   rƒ   r…   r�   rf   r‡   rˆ   r.   r·   r¸   r¹   rP   r   r„   r›   rœ   r�   )r   rp   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_certrL   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.   rf   r   r[   r@   Zobtain_and_enroll_certificater>   Zcall_args_listrP   )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   rL   ÚcertsÚchainsz	chain.pemzfullchain.pemZcertonlyz--cert-pathz--chain-pathz--fullchain-pathÚrb)ÚtempfileÚmkdtempr   Úchmodr·   Úload_vectorr   ÚpathÚjoinZverbÚargsrf   Zsave_certificaterP   ÚdirnameÚopenÚreadÚshutilÚ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_pathÚ	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.barrp   r›   rœ   Ú	fullchain)rØ   rÙ   rÃ   rÚ   Zkey_pathr¦   )r=   r   r<   rf   Údeploy_certificater   r,   rz   Údeploy_certr]   r   rÐ   ÚabspathrP   ÚsaverQ   Úrestart©r   rz   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Ý   rp   r›   rœ   rÞ   )r   r,   rf   rz   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,   rf   rz   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Ý   rp   r›   rœ   rÞ   rL   r¦   )r   r,   r   rç   rã   r;   rf   rz   r=   rß   rP   Úadd_messagerQ   Úrollback_checkpointsr]   ©r   Zmock_get_utilityrz   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Ý   rp   r›   rœ   rÞ   rL   )r   r,   r   rç   rã   r;   ÚReverterErrorrì   rf   rz   r=   rß   rP   rë   rQ   r]   rí   r   r   r   Ú(test_deploy_certificate_restart_failure2'  s    

    ÿ
z3ClientTest.test_deploy_certificate_restart_failure2)rL   )NrL   )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ð   rv   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 rX   )r=   r   r<   rf   Ú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 )NTrZ   rL   )r   r,   rf   rz   Úsupported_enhancementsr.   r   ró   rò   r   rö   rÃ   rP   rž   rQ   Úenhancer±   Úask)r   Zmock_enhancementsr_   r   r   r   Útest_unsupportedE  s    z"EnhanceConfigTest.test_unsupportedrZ   c                 C   s:   d| j _|  ¡  |  |jj¡ |  |jjd d d¡ d S )NTr   rL   úStrict-Transport-Security)r   rò   Ú_test_with_already_existingr@   rž   r?   rP   ra   ©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   rL   ró   )r   ró   rý   r@   rž   r?   rP   ra   rþ   r   r   r   Útest_already_exists_redirectZ  s    ÿz.EnhanceConfigTest.test_already_exists_redirectc                 C   s"   d| j _|  ¡  |  |jj¡ d S r4   )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?   ra   )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_supportedrf   rz   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  rf   rz   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  rf   rz   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  rf   rz   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 rX   )r   r,   rf   rz   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 rX   )r   r,   rf   rz   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 rX   )	r   r,   rf   rz   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 rX   )r   r,   r   rç   rã   r;   rï   rì   rf   rz   r  rä   r   r   r   Útest_restart_failure2›  s
    

z'EnhanceConfigTest.test_restart_failure2c                 C   s   d | j _d|_|  ¡  d S r2   )r   ró   r.   r  )r   r  r   r   r   Útest_ask¢  s    zEnhanceConfigTest.test_askc                 C   s   |   ¡  |  | jjjj¡ d S rX   )r  r@   rf   rz   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 )NTrL   )r   ró   r·   r¸   r=   r   rç   r  rP   rë   rQ   )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	  rL   )rf   rz   r   r,   rø   r.   rö   rÃ   rP   râ   rQ   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,   rf   rz   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ý   rv   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 rX   )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  rP   rì   rQ   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Ï   r|   r˜   ZConfigTestCaser   r"   rw   r~   rñ   ZTestCaser  r   Úmainr   r   r   r   Ú<module>   s4   

  '  H 
