U
    ÓZjU  ã                   @   s2  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  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j ¡ 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!dd„ Z"e#dk�r.e $¡  dS )zTests for certbot.cli.é    N)Úreload_module)Ú
challenges)Úcli)Ú	constants)Úerrors)Úos)Ú
filesystem)Údisco)ÚTempDirTestCasec                   @   s   e Zd ZdZdd„ ZdS )ÚTestReadFilezTest cli.read_filec              	   C   s¦   t  ¡ }zŒt  | j¡ t j t j | jd¡¡}|  tj	t
j|¡ d}t|dƒ�}| |¡ W 5 Q R X t
 |¡\}}|  |t j |¡¡ |  ||¡ W 5 t  |¡ X d S )NÚfoos   bar
Úwb)r   ÚgetcwdÚchdirÚtempdirÚpathÚrelpathÚjoinÚassertRaisesÚargparseÚArgumentTypeErrorr   Ú	read_fileÚopenÚwriteÚassertEqualÚabspath)ÚselfZcurr_dirZrel_test_pathZtest_contentsÚfr   Úcontents© r   úY/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/certbot/tests/cli_test.pyÚtest_read_file   s       ÿzTestReadFile.test_read_fileN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r!   r   r   r   r    r      s   r   c                   @   s   e Zd ZdZdd„ ZdS )ÚFlagDefaultTestzTests cli.flag_defaultc                 C   s|   t jdkrB|  t d¡d¡ |  t d¡d¡ |  t d¡d¡ n6|  t d¡d¡ |  t d¡d	¡ |  t d¡d
¡ d S )NÚntÚ
config_dirz/etc/letsencryptÚwork_dirz/var/lib/letsencryptÚlogs_dirz/var/log/letsencryptz
C:\CertbotzC:\Certbot\libzC:\Certbot\log)r   Únamer   r   Úflag_default©r   r   r   r    Útest_default_directories4   s    
z(FlagDefaultTest.test_default_directoriesN)r"   r#   r$   r%   r.   r   r   r   r    r&   1   s   r&   c                   @   sJ  e Zd ZdZdd„ Zedd„ ƒZedd„ ƒZdd	„ Ze	 
d
¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Z d7d8„ Z!d9d:„ Z"d;d<„ Z#d=d>„ Z$d?d@„ Z%dAdB„ Z&dCdD„ Z'dEdF„ Z(dGdH„ Z)dIdJ„ Z*dKdL„ Z+dMS )NÚ	ParseTestzTest the cli args entrypointc                 C   s   t tƒ d S ©N©r   r   r-   r   r   r    ÚsetUpC   s    zParseTest.setUpc                  O   s   t jtf| ž|ŽS )z)Get result of cli.prepare_and_parse_args.)r   Zprepare_and_parse_argsÚPLUGINS©ÚargsÚkwargsr   r   r    Ú_unmocked_parseF   s    zParseTest._unmocked_parsec               
   O   s,   t  ¡ � tj| |ŽW  5 Q R £ S Q R X dS )z:Mocks zope.component.getUtility and calls _unmocked_parse.N)Ú	test_utilÚpatch_get_utilityr/   r7   r4   r   r   r    ÚparseK   s    
zParseTest.parsec                    s|   t  ¡ ‰ ‡ fdd„}tjdˆ d��L t ¡ �8}||ƒ j_t d¡� |  t	| j
|ˆ ¡ W 5 Q R X W 5 Q R X W 5 Q R X ˆ  ¡ S )z8Run a command, and return the output string for scrutinyc                    s   ˆ   | ¡ d S r0   )r   )Úmessager5   r6   ©Úoutputr   r    Ú	write_msgV   s    z)ParseTest._help_output.<locals>.write_msgzcertbot.main.sys.stdout)Únewzcertbot.main.sys.stderr)ÚsixÚStringIOÚmockÚpatchr8   r9   ZnotificationÚside_effectr   Ú
SystemExitr7   Úgetvalue)r   r5   r>   Zmock_get_utilityr   r<   r    Ú_help_outputQ   s    

0zParseTest._help_outputzcertbot.cli.flag_defaultc              
      s¤   t  ¡ �’‰ ˆ  ¡  ‡ fdd„}||_|  dg¡}|  |jg ¡ tˆ jdƒ�}| 	d¡ W 5 Q R X |  dg¡}|  |jdg¡ |  dg¡}|  |jg ¡ W 5 Q R X d S )Nc                    s    | dkrt  tj|  ¡S ˆ jgS )NÚconfig_files)ÚcopyÚdeepcopyr   ZCLI_DEFAULTSr+   )Úv©Z
tmp_configr   r    Ú<lambda>g   s    ÿz0ParseTest.test_cli_ini_domains.<locals>.<lambda>ÚcertonlyÚwzdomains = example.comúexample.comÚrenew)
ÚtempfileÚNamedTemporaryFileÚcloserD   r:   r   Údomainsr   r+   r   )r   Zmock_flag_defaultZshimÚ	namespaceZfile_hr   rL   r    Útest_cli_ini_domainsa   s    

ÿzParseTest.test_cli_ini_domainsc                 C   s0   |   g ¡}dD ]}|  t||ƒt |¡¡ qd S )N)r(   r*   r)   )r:   r   Úgetattrr   r,   )r   rV   Údr   r   r    Útest_no_argsv   s    
zParseTest.test_no_argsc                 C   sž   d}d}d}d}t  d¡�" |  dd|ddd	dd
dg	¡}W 5 Q R X |  |jtj |¡¡ |  |jtj |¡¡ |  |j	tj |¡¡ |  |j
tj |¡¡ d S )NÚcertÚkeyÚchainÚ	fullchainzcertbot.main.installÚinstallú--cert-pathú
--key-pathz--chain-pathz--fullchain-path)rB   rC   r:   r   Z	cert_pathr   r   r   Zkey_pathZ
chain_pathZfullchain_path)r   r[   r\   r]   r^   rV   r   r   r    Útest_install_abspath{   s"    
    þzParseTest.test_install_abspathc                 C   s’  |   dg¡ |   ddg¡}|  d|k¡ |  d|k¡ |  d|k¡ |  d|k¡ |  d|k¡ |  d|k¡ |  d	|k¡ |  d
|k¡ |   ddg¡}dtkr®|  d|k¡ |  d|k¡ |  d|k¡ |   dg¡}|  d|k¡ dtkrü|  d|k¡ n|  d|k¡ |   ddg¡}|  d|k¡ |  d|k¡ |  d|k¡ |   ddg¡}|  d|k¡ |   ddg¡}|  d|k¡ |   ddg¡}|  d|k¡ |   ddg¡}|  d|k¡ |  d|k¡ |   ddg¡}|  d|k¡ |  d|k¡ |  d|k¡ |  d|k¡ |  d|k¡ |   ddg¡}|  d|k¡ |  d|k¡ |   dg¡}|  tj|k¡ |  tjd d … |k¡ |  d|k¡ |  d	|k¡ d S )!Nú--helpÚallú--configuratorúhow a certificate is deployedú--webroot-pathú--textú--dialogú%sú{0}ú--renew-hookú-hÚnginxz--nginx-ctlz--checkpointszletsencrypt-autozUse the Nginx pluginz (the certbot nginx plugin is notÚpluginsz	--preparez"plugins" subcommandrQ   z--keepZ
automationÚrevoker_   r`   ra   ú--reasonú--delete-after-revokeú--no-delete-after-revokeZconfig_changeséd   )rG   Ú
assertTruer3   r   ZSHORT_USAGEZCOMMAND_OVERVIEW©r   Úoutr   r   r    Ú	test_help‹   s^    zParseTest.test_helpc                 C   sÔ   |   dg¡ |   ddg¡}|  d|k¡ |  d|k¡ |  d|k¡ |  d|k¡ |  d|k¡ |  d|k¡ |  d	|k¡ |   dd
g¡}|  d|k¡ |  d|k¡ |   ddg¡}|  d|k¡ |  d|k¡ d S )NÚhelprd   re   rf   rg   rh   ri   rj   rk   r_   r`   ra   rp   )rG   ru   rv   r   r   r    Útest_help_no_dashesÇ   s    zParseTest.test_help_no_dashesc                 C   sÖ   ddg}|   |¡}|  |jdg¡ ddg}|   |¡}|  |jdg¡ ddg}|   |¡}|  |jdddg¡ ddg}|   |¡}|  |jdg¡ ddg}|   |¡}|  |jdg¡ dd	g}|   |¡}|  |jddg¡ d S )
Nz-drP   ztrailing.period.com.ztrailing.period.comz-example.com,another.net,third.org,example.comzanother.netz	third.orgz	--domainsz#example.com,another.net,example.com)r:   r   rU   )r   Ú
short_argsrV   Z	long_argsr   r   r    Útest_parse_domainsÛ   s(    


ÿ


zParseTest.test_parse_domainsc              	   C   sb   ddg}|   |¡}tjjtjjg}|  |j|¡ ddg}t d¡� |  	t
| j |¡ W 5 Q R X d S )Nz--preferred-challengesz	http, dnszjumping-over-the-moonz
sys.stderr)r:   r   ÚHTTP01ÚtypZDNS01r   Úpref_challsrB   rC   r   rE   )r   r{   rV   Úexpectedr   r   r    Útest_preferred_challengesõ   s    
z#ParseTest.test_preferred_challengesc                 C   s    |   d ¡ ¡}|  |jd¡ d S )Nú--server example.comrP   )r:   Úsplitr   Úserver©r   rV   r   r   r    Útest_server_flag  s    zParseTest.test_server_flagc                 C   s,   dg}|   |¡}|  |j¡ |  |j¡ d S )Nz--must-staple)r:   ru   Zmust_stapleZstaple©r   r{   rV   r   r   r    Útest_must_staple_flag  s    
zParseTest.test_must_staple_flagc              
   C   s|   z$|   |¡ |  d d |¡¡¡ W nR tjk
rv } z2|  dt|ƒk¡ |D ]}|  |t|ƒk¡ qNW 5 d }~X Y nX d S )Nz6The following flags didn't conflict with --server: {0}z, ú--server)r:   ZfailÚformatr   r   ÚErrorru   Ústr)r   Zparser_argsZconflicting_argsÚerrorÚargr   r   r    Ú_check_server_conflict_message  s    
ÿÿz(ParseTest._check_server_conflict_messagec                 C   sH   dg}|   |¡}|  |j¡ |  |jtj¡ |d ¡ 7 }|  |d¡ d S )Nú	--stagingr‚   )	r:   ru   Ústagingr   r„   r   ÚSTAGING_URIrƒ   r�   r‡   r   r   r    Útest_staging_flag  s    
zParseTest.test_staging_flagc                 C   sn   |   |j¡ |   |j¡ |   |j¡ |  |jtj¡ |rR|   |j¡ |   |j	¡ n|  
|j¡ |  
|j	¡ d S r0   )ru   Údry_runZbreak_my_certsr‘   r   r„   r   r’   ZtosZregister_unsafely_without_emailÚassertFalse)r   rV   Zexisting_accountr   r   r    Ú_assert_dry_run_flag_worked   s    z%ParseTest._assert_dry_run_flag_workedc              	   C   sp  t  ¡ }d |¡ ¡ }|  tj| j|¡ |  |  |dg ¡d¡ |  |  |dg ¡d¡ |  |  |dg ¡d¡ t	j
 |tj¡}t |¡ t t	j
 |d¡¡ |  |  |dg ¡d¡ |  |  |dg ¡d¡ |  |  |dg ¡d¡ |dg7 }|  |  |dd	g ¡jd	¡ |  |  |dtjg ¡jtj¡ |  |  |dt d
¡g ¡jtj¡ dg}|  |dd	dg |¡ d S )Nz--dry-run --config-dir {0}ÚauthFrN   rQ   Zfake_account_dirTr‰   rP   r„   r�   )rR   ÚmkdtemprŠ   rƒ   r   r   r‹   r:   r–   r   r   r   r   ZACCOUNTS_DIRr   Úmkdirr   r„   r’   r   r,   r�   )r   r(   r{   Zaccount_dirÚ	conflictsr   r   r    Útest_dry_run_flag-  sF     ÿ ÿ ÿ

ÿÿÿÿzParseTest.test_dry_run_flagc                 C   s~   d}t  |¡}|  d |¡ ¡ ¡ |  t  ||¡¡ |  t  dd¡¡ d}|  t  |t  |¡¡¡ |  t  dt  d¡¡¡ d S )NZrsa_key_sizez--rsa-key-size {0}Zno_verify_sslTr(   Zauthenticator)r   r,   r:   rŠ   rƒ   ru   Zoption_was_setr•   )r   Zkey_size_optionZkey_size_valueZconfig_dir_optionr   r   r    Útest_option_was_setT  s    
 ÿ ÿzParseTest.test_option_was_setc                 C   sh   t j ¡ D ]$\}}|  d|g¡}|  |j|¡ q
t j ¡ D ](\}}|  d| ¡ g¡}|  |j|¡ q:d S )Nrq   )r   ZREVOCATION_REASONSÚitemsr:   r   ÚreasonÚupper)r   rž   ÚcoderV   r   r   r    Útest_encode_revocation_reasonb  s    z'ParseTest.test_encode_revocation_reasonc                 C   s0   |   tj| jd ¡ ¡ |   tj| jd ¡ ¡ d S )Nzrenew --force-interactivez-n --force-interactive©r   r   r‹   r:   rƒ   r-   r   r   r    Útest_force_interactivej  s      ÿ  ÿz ParseTest.test_force_interactivec              	   C   s.   t  d¡� |  t| jd ¡ ¡ W 5 Q R X d S )Núcertbot.cli.sys.stderrz"--renew-hook foo --deploy-hook bar©rB   rC   r   rE   r:   rƒ   r-   r   r   r    Útest_deploy_hook_conflictp  s    
ÿz#ParseTest.test_deploy_hook_conflictc                 C   s8   d}|   d|d|dg¡}|  |j|¡ |  |j|¡ d S )Nr   rl   ú--deploy-hookú--disable-hook-validation©r:   r   Zdeploy_hookÚ
renew_hook©r   ÚvaluerV   r   r   r    Ú#test_deploy_hook_matches_renew_hooku  s     þz-ParseTest.test_deploy_hook_matches_renew_hookc                 C   s4   d}|   d|dg¡}|  |j|¡ |  |j|¡ d S )Nr   r§   r¨   r©   r«   r   r   r    Ú test_deploy_hook_sets_renew_hook}  s    ÿz*ParseTest.test_deploy_hook_sets_renew_hookc              	   C   s.   t  d¡� |  t| jd ¡ ¡ W 5 Q R X d S )Nr¤   z"--deploy-hook foo --renew-hook barr¥   r-   r   r   r    Útest_renew_hook_conflict„  s    
ÿz"ParseTest.test_renew_hook_conflictc                 C   s8   d}|   d|d|dg¡}|  |j|¡ |  |j|¡ d S )Nr   r§   rl   r¨   r©   r«   r   r   r    Ú#test_renew_hook_matches_deploy_hook‰  s     þz-ParseTest.test_renew_hook_matches_deploy_hookc                 C   s4   d}|   d|dg¡}|  |jd ¡ |  |j|¡ d S )Nr   rl   r¨   r©   r«   r   r   r    Ú'test_renew_hook_does_not_set_renew_hook‘  s    ÿz1ParseTest.test_renew_hook_does_not_set_renew_hookc              	   C   sB   t  d¡�. |  t| jd ¡ ¡ |  t| jd ¡ ¡ W 5 Q R X d S )Nr¤   z--max-log-backups fooz--max-log-backups -42r¥   r-   r   r   r    Útest_max_log_backups_error˜  s      ÿ  ÿz$ParseTest.test_max_log_backups_errorc                 C   s(   d}|   d|g¡}|  |jt|ƒ¡ d S )NZ42z--max-log-backups)r:   r   Zmax_log_backupsÚintr«   r   r   r    Útest_max_log_backups_successŸ  s    z&ParseTest.test_max_log_backups_successc                 C   sd   |   g ¡}|  |jg ¡ |  |jg ¡ tjjg|_dg|_|   g ¡}|  |jg ¡ |  |jg ¡ d S )NrP   )r:   r   rU   r   r   r}   r~   r…   r   r   r    Útest_unchanging_defaults¤  s    

z"ParseTest.test_unchanging_defaultsc                 C   s   |   |  dg¡j¡ d S )Nz--no-directory-hooks)r•   r:   Údirectory_hooksr-   r   r   r    Útest_no_directory_hooks_set°  s    z%ParseTest.test_no_directory_hooks_setc                 C   s   |   |  g ¡j¡ d S r0   )ru   r:   r¶   r-   r   r   r    Útest_no_directory_hooks_unset³  s    z'ParseTest.test_no_directory_hooks_unsetc                 C   s   |   dg¡}|  |j¡ d S )Nrr   )r:   ru   Údelete_after_revoker…   r   r   r    Útest_delete_after_revoke¶  s    z"ParseTest.test_delete_after_revokec                 C   s   |   g ¡}|  |jd ¡ d S r0   )r:   r   r¹   r…   r   r   r    Ú test_delete_after_revoke_defaultº  s    
z*ParseTest.test_delete_after_revoke_defaultc                 C   s   |   dg¡}|  |j¡ d S )Nrs   )r:   r•   r¹   r…   r   r   r    Útest_no_delete_after_revoke¾  s    z%ParseTest.test_no_delete_after_revokec                 C   s   |   tj| jd ¡ ¡ d S )Nz(--allow-subset-of-names -d *.example.orgr¢   r-   r   r   r    Útest_allow_subset_with_wildcardÂ  s    ÿz)ParseTest.test_allow_subset_with_wildcardc              	   C   s0   dD ]&}dD ]}|   d|  ||g¡k¡ qqd S )N)rm   rc   )rd   ro   zdns-route53zcertbot-route53:auth)r•   rG   )r   Z	help_flagZtopicr   r   r    Útest_route53_no_revertÆ  s    z ParseTest.test_route53_no_revertc                 C   s   |   dg¡}|  |j¡ d S )Nz--no-permissions-check)r:   ru   Zno_permissions_checkr…   r   r   r    Ú"test_no_permissions_check_acceptedË  s    z,ParseTest.test_no_permissions_check_acceptedN),r"   r#   r$   r%   r2   Ústaticmethodr7   r:   rG   rB   rC   rW   rZ   rb   rx   rz   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/   ?   sR   


<	'r/   c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚDefaultTestzTests for certbot.cli._Default.c                 C   s   t  ¡ | _t  ¡ | _d S r0   )r   Ú_DefaultÚdefault1Údefault2r-   r   r   r    r2   Ô  s    
zDefaultTest.setUpc                 C   s   |   | j¡ |   | j¡ d S r0   )r•   rÃ   rÄ   r-   r   r   r    Útest_booleanÙ  s    zDefaultTest.test_booleanc                 C   s   |   | j| j¡ d S r0   )r   rÃ   rÄ   r-   r   r   r    Útest_equalityÝ  s    zDefaultTest.test_equalityc                 C   s   |   t| jƒt| jƒ¡ d S r0   )r   ÚhashrÃ   rÄ   r-   r   r   r    Ú	test_hashà  s    zDefaultTest.test_hashN)r"   r#   r$   r%   r2   rÅ   rÆ   rÈ   r   r   r   r    rÁ   Ð  s
   rÁ   c                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚSetByCliTestz3Tests for certbot.set_by_cli and related functions.c                 C   s   t tƒ d S r0   r1   r-   r   r   r    r2   è  s    zSetByCliTest.setUpc                 C   s   |   tdd ¡ dƒ¡ d S )Nrª   z--deploy-hook foorQ   )ru   Ú_call_set_by_clirƒ   r-   r   r   r    Útest_deploy_hookë  s
      ÿzSetByCliTest.test_deploy_hookc                 C   s"   d  ¡ }d}|  td||ƒ¡ d S )Nz-w /var/www/html -d example.comrQ   Zwebroot_map)rƒ   ru   rÊ   )r   r5   Úverbr   r   r    Útest_webroot_mapï  s    zSetByCliTest.test_webroot_mapc                 C   s$   t  dd¡ t  dd¡ |  ¡  d S )NÚmanual_public_ip_logging_okÚmanual_auth_hookÚmanual©r   Zreport_config_interactionÚ&_test_report_config_interaction_commonr-   r   r   r    Ú"test_report_config_interaction_strô  s
    ÿz/SetByCliTest.test_report_config_interaction_strc                 C   s$   t  dd¡ t  dd¡ |  ¡  d S )N)rÎ   )rÏ   )rÐ   rÑ   r-   r   r   r    Ú'test_report_config_interaction_iterableû  s
    ÿz4SetByCliTest.test_report_config_interaction_iterablec                 C   sh   dg}d}dD ]}|   t|||ƒ¡ qdtj_ddg}dD ]}|   t|||ƒ¡ q:|  td||ƒ¡ dS )	a  Tests implied interaction between manual flags.

        --manual implies --manual-auth-hook which implies
        --manual-public-ip-logging-ok. These interactions don't actually
        exist in the client, but are used here for testing purposes.

        z--manualrQ   )rÐ   rÏ   rÎ   Nz--manual-auth-hookÚcommand)rÏ   rÎ   rÐ   )ru   rÊ   r   Ú
set_by_cliZdetectorr•   )r   r5   rÌ   rK   r   r   r    rÒ     s    	z3SetByCliTest._test_report_config_interaction_commonN)
r"   r#   r$   r%   r2   rË   rÍ   rÓ   rÔ   rÒ   r   r   r   r    rÉ   ä  s   rÉ   c                 C   sX   t  d¡�D}t ¡ �0 ||_||_t | ¡W  5 Q R £ W  5 Q R £ S Q R X W 5 Q R X d S )Nzcertbot.cli.helpful_parser)rB   rC   r8   r9   r5   rÌ   r   rÖ   )Úvarr5   rÌ   Zmock_parserr   r   r    rÊ     s
    
rÊ   Ú__main__)%r%   r   rI   rR   ZunittestrB   r@   Z	six.movesr   Zacmer   Zcertbot.tests.utilZtestsÚutilr8   Zcertbotr   r   r   Zcertbot.compatr   r   Zcertbot.pluginsr	   r
   ZPluginsRegistryZfind_allr3   r   ZTestCaser&   r/   rÁ   rÉ   rÊ   r"   Úmainr   r   r   r    Ú<module>   s8   
   6
