
    M/edf                     *   d Z ddlZddlZddlmZ ddlZddlZddlZddl	m
Z
mZ ddlZddlmZ ddlZddlmZ ddlmZ ddlmZ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!c m"Z# ddl m$Z$ ejJ                  jM                         Z' G d de$      Z( G d dejR                        Z*de+de
fdZ,de+de
defdZ- G d dejR                        Z.e/dk(  r4 ej`                   ejb                  ejd                  dd e3gz                yy)z Tests for certbot._internal.cli.    N)reload)AnyList)mock)
challenges)errors)ArgumentSourceNamespaceConfig)cli)	constants)flag_default)disco)
filesystem)os)TempDirTestCasec                       e Zd ZdZd Zy)TestReadFilezTest cli.read_filec                    t        j                         }	 t        j                  | j                         t	        j
                  t         j                  j                  | j                  d            }t         j                  j                  |      }t        j                  t        j                        5  t        j                  |       d d d        d}t        |d      5 }|j!                  |       d d d        t        j                  |      \  }}|t         j                  j#                  |      k(  sJ ||k(  sJ 	 t        j                  |       y # 1 sw Y   xY w# 1 sw Y   oxY w# t        j                  |       w xY w)Nfoos   bar
wb)r   getcwdchdirtempdirr   realpathpathjoinrelpathpytestraisesargparseArgumentTypeErrorr   	read_fileopenwriteabspath)selfcurr_dir	real_pathrelative_pathtest_contentsfr   contentss           B/usr/lib/python3/dist-packages/certbot/_internal/tests/cli_test.pytest_read_filezTestReadFile.test_read_file   s   99;	 HHT\\" #++BGGLLu,MNIGGOOI6Mx99: -m,- %MmT* 'a&' !]]=9ND(277??40000},,,HHX- -' ' HHXs=   BE, 4E
E,  E 2AE, EE,  E)%E, ,FN)__name__
__module____qualname____doc__r.        r-   r   r      s
    r4   r   c                       e Zd ZdZd Zy)FlagDefaultTestzTests cli.flag_defaultc                 d   t         j                  dk7  rOt        j                  d      dk(  sJ t        j                  d      dk(  sJ t        j                  d      dk(  sJ y t        j                  d      dk(  sJ t        j                  d      d	k(  sJ t        j                  d      d
k(  sJ y )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   r&   s    r-   test_default_directoriesz(FlagDefaultTest.test_default_directories@   s    77d?##L15GGGG##J/3IIII##J/3IIII##L1]BBB##J/3EEEE##J/3EEEEr4   N)r/   r0   r1   r2   r>   r3   r4   r-   r6   r6   =   s     Fr4   r6   attrvaluec                 L    t        | |      |k(  sJ | j                  |      sJ y N)getattrset_by_user)	namespacer?   r@   s      r-   assert_set_by_user_with_valuerF   K   s+    9d#u,,,  &&&r4   sourcec                 N    t        | |      |k(  sJ | j                  |   |k(  sJ y rB   )rC   argument_sources)rE   r?   r@   rG   s       r-   assert_value_and_sourcerJ   P   s0    9d#u,,,%%d+v555r4   c                      e Zd ZdZedee   defd       Zedee   defd       Z	dee   fdZ
 ej                  d      d        Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z ej                  d      d        Z ej                  d      d        Z d Z!d Z"d  Z#d! Z$d" Z%d# Z&d$ Z'd% Z(d& Z)d' Z*d( Z+d) Z,d* Z-d+ Z.d, Z/d- Z0d. Z1d/ Z2d0 Z3d1 Z4d2 Z5 ej                  d      d3        Z6d4 Z7d5 Z8y6)7	ParseTestzTest the cli args entrypointargsreturnc                 6    t        j                  t        |       S )z)Get result of cli.prepare_and_parse_args.)r   prepare_and_parse_argsPLUGINSrM   s    r-   _unmocked_parsezParseTest._unmocked_parseX   s     ))'488r4   c                     t        j                         5  t        j                  |       cddd       S # 1 sw Y   yxY w)zJMocks certbot._internal.display.obj.get_display and calls _unmocked_parse.N)	test_utilpatch_display_utilrL   rS   rR   s    r-   parsezParseTest.parse]   s3     ))+ 	3,,T2	3 	3 	3s   4=c           	         t        j                         fd}t        j                  d      5  t	        j
                         5 }| |       j                  _        t        j                  d      5  t        j                  t              5  | j                  |       ddd       ddd       ddd       ddd       j                         S # 1 sw Y   1xY w# 1 sw Y   5xY w# 1 sw Y   9xY w# 1 sw Y   j                         S xY w)z8Run a command, and return the output string for scrutinyc                 (    j                  |        y rB   )r$   )messagerM   kwargsoutputs      r-   	write_msgz)ParseTest._help_output.<locals>.write_msgh   s    LL!r4   z!certbot._internal.main.sys.stdout)newz!certbot._internal.main.sys.stderrN)ioStringIOr   patchrU   rV   notificationside_effectr   r   
SystemExitrS   getvalue)r&   rM   r]   mock_get_utilityr\   s       @r-   _help_outputzParseTest._help_outputc   s     	" ZZ;H 	3--/ 33C>G "//;ZZ CD 3z2 3,,T2333	3   3 33 33 3	3   sS   C3,C'3CC	C'C'/C3CCC$ C''C0	,C33Dz*certbot._internal.cli.helpful.flag_defaultc                    t        j                         5 j                          fd}||_        | j	                  dg      }t        |dg t        j                         t        j                  d      5 }|j                  d       d d d        | j	                  dg      }t        |ddgt        j                         | j	                  dg      }t        |dg t        j                         d d d        y # 1 sw Y   oxY w# 1 sw Y   y xY w)Nc                 t    | dk7  r&t        j                  t        j                  |          S j                  gS )Nconfig_files)copydeepcopyr   CLI_DEFAULTSr<   )v
tmp_configs    r-   <lambda>z0ParseTest.test_cli_ini_domains.<locals>.<lambda>z   s5    N* #mmI,B,B1,EF $//* r4   certonlydomainswzdomains = example.comexample.comrenew)tempfileNamedTemporaryFilecloserc   rW   rJ   r	   DEFAULTr#   r<   r$   CONFIG_FILERUNTIME)r&   mock_flag_defaultshimrE   file_hro   s        @r-   test_cli_ini_domainszParseTest.test_cli_ini_domainst   s    ((* 	Vj+ 
 -1)

J<0I#Iy"n>T>TUjoos+ 6v456

J<0I#Iy=/>KeKef

G9-I#Iy"n>T>TU#	V 	V6 6	V 	Vs%   A!D7C7	A%D7D 	<DDc                     | j                  g       }dD ]9  }t        ||      t        j                  |      k(  sJ |j	                  |      s9J  y )N)r9   r;   r:   )rW   rC   r   r   rD   )r&   rE   ds      r-   test_no_argszParseTest.test_no_args   sR    JJrN	7 	0A9a(C,<,<Q,???? ,,Q///	0r4   c                    d}d}d}d}t        j                  d      5  | j                  dd|ddd	dd
dg	      }d d d        j                  t        j
                  j                  |      k(  sJ |j                  t        j
                  j                  |      k(  sJ |j                  t        j
                  j                  |      k(  sJ |j                  t        j
                  j                  |      k(  sJ y # 1 sw Y   xY w)Ncertkeychain	fullchainzcertbot._internal.main.installinstall--cert-path
--key-pathz--chain-pathz--fullchain-path)
r   ra   rW   	cert_pathr   r   r%   key_path
chain_pathfullchain_path)r&   r   r   r   r   rE   s         r-   test_install_abspathzParseTest.test_install_abspath   s    	ZZ89 	O

I}d$0%$+-?$N OI	O
 ""bggood&;;;;!!RWW__S%9999##rwwu'====''277??9+EEEE	O 	Os   C::Dc                    | j                  dg       | j                  ddg      }d|v sJ d|v sJ d|v sJ d|vsJ d|vsJ d|vsJ d	|vsJ | j                  d
dg      }dt        v rd|v sJ d|vsJ d|vsJ | j                  d
g      }dt        v rd|v sJ d|v sJ | j                  ddg      }d|vsJ d|v sJ d|v sJ | j                  d
dg      }d|v sJ | j                  d
dg      }d|v sJ | j                  d
dg      }d|vsJ | j                  ddg      }d|v sJ d|v sJ | j                  ddg      }d|v sJ d|v sJ d|v sJ d|v sJ d|v sJ | j                  d
dg      }d|vsJ d|vsJ | j                  d
g      }t        j                  |v sJ t        j                  d d |v sJ d|vsJ d|vsJ y )N--helpall--configuratorhow a certificate is deployed--webroot-path--text%s{0}--renew-hook-hnginxz--nginx-ctlz--checkpointszUse the Nginx pluginz (the certbot nginx plugin is notpluginsz	--preparez"plugins" subcommandru   z--keep
automationrevoker   r   r   --reason--delete-after-revoke--no-delete-after-revokeregisterd   )rg   rQ   r   SHORT_USAGECOMMAND_OVERVIEWr&   outs     r-   	test_helpzParseTest.test_help   s   8*%5 123&&&.#5553&&&s"""3CS(((w0g C'''s***c)))'g)S0005<<<9 56s***c!!!%,,, w03| 453x 01s"""9 56###s"""8 45###s"""S   &#---)S000z 23C'''3&&&'#%%%##DS)S0003Cr4   c                    | j                  dg       | j                  ddg      }d|v sJ d|v sJ d|v sJ d|vsJ d|vsJ d|vsJ | j                  dd	g      }d
|v sJ d|v sJ | j                  ddg      }d
|v sJ d|v sJ y )Nhelpr   r   r   r   r   r   r   r   r   r   r   rg   r   s     r-   test_help_no_dasheszParseTest.test_help_no_dashes   s    6(#03&&&.#5553&&&s"""3C 34###s""" 23###s"""r4   c                    ddg}| j                  |      }t        |ddg       ddg}| j                  |      }t        |ddg       ddg}| j                  |      }t        |dg d       ddg}| j                  |      }t        |ddg       ddg}| j                  |      }t        |ddg       dd	g}| j                  |      }t        |ddd
g       y )Nz-drt   rr   ztrailing.period.com.ztrailing.period.comz-example.com,another.net,third.org,example.com)rt   another.netz	third.orgz	--domainsz#example.com,another.net,example.comr   rW   rF   )r&   
short_argsrE   	long_argss       r-   test_parse_domainszParseTest.test_parse_domains   s    M*
JJz*	%i]OL23
JJz*	%i=R<STKL
JJz*	%i7	9 !-0	JJy)	%i]OL "89	JJy)	%i=R<ST "GH	JJy)	%i]M<Z[r4   c                    ddg}| j                  |      }t        j                  j                  t        j                  j                  g}t        |d|       ddg}t        j                  d      5  t        j                  t              5  | j                  |       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nz--preferred-challengesz	http, dnspref_challszjumping-over-the-moonz
sys.stderr)rW   r   HTTP01typDNS01rF   r   ra   r   r   rd   )r&   r   rE   expecteds       r-   test_preferred_challengesz#ParseTest.test_preferred_challenges  s    .<
JJz*	%%)):+;+;+?+?@%iI.0GH
 ZZ% 	'z* '

:&'	' 	'' '	' 	's$   0B9
B-B9-B6	2B99Cc                 \    | j                  dj                               }t        |dd       y )N--server example.comserverrt   )rW   splitrF   r&   rE   s     r-   test_server_flagzParseTest.test_server_flag  s&    JJ5;;=>	%i=Ir4   c                 z    | j                  dg      }t        |dd       t        |ddt        j                         y )N--must-staplemust_stapleTstaple)rW   rF   rJ   r	   r{   r   s     r-   test_must_staple_flagzParseTest.test_must_staple_flag  s3    JJ01	%iE	8T>;Q;QRr4   c                 ^    | j                  ddg      }t        |dd       t        |dd       y )Nr   z--staple-ocspr   Tr   r   r   s     r-   &test_must_staple_and_staple_ocsp_flagsz0ParseTest.test_must_staple_and_staple_ocsp_flags  s-    JJAB	%iE%i4@r4   c                    	 | j                  |       | j                  dj                  dj                  |                   y # t        j
                  $ r/}dt        |      v sJ |D ]  }|t        |      v rJ  Y d }~y d }~ww xY w)Nz6The following flags didn't conflict with --server: {0}z, --server)rW   failformatr   r   Errorstr)r&   parser_argsconflicting_argserrorargs        r-   _check_server_conflict_messagez(ParseTest._check_server_conflict_message"  s    	)JJ{#II  &tyy1A'B CE || 	)U+++' )c%j((()	)s   A A B!B 8B  Bc                     dg}| j                  |      }t        |dd       t        |dt        j                         |dj	                         z  }| j                  |d       y )N	--stagingstagingTr   r   )rW   rF   r   STAGING_URIr   r   )r&   r   rE   s      r-   test_staging_flagzParseTest.test_staging_flag-  sY    !]
JJz*	%iDA%i9;P;PQ,2244
++JDr4   c                    t        |dd       t        |ddt        j                         t        |ddt        j                         t        |dt        j
                  t        j                         |r9t        |ddt        j                         t        |ddt        j                         y t        |ddt        j                         t        |ddt        j                         y )	Ndry_runTbreak_my_certsr   r   tosregister_unsafely_without_emailF)rF   rJ   r	   r{   r   r   ry   )r&   rE   existing_accounts      r-   _assert_dry_run_flag_workedz%ParseTest._assert_dry_run_flag_worked6  s    %iDA	+;T>CYCYZ	9dN<R<RS	8Y5J5JNLbLbc#IudN<R<RS#I/PRVXfXnXno#Iue^=S=ST#I/PRWYgYoYopr4   c                 P   t        j                         }dj                  |      j                         }t	        j
                  t        j                        5  | j                  |       d d d        | j                  | j                  |dgz         d       | j                  | j                  |dgz         d       | j                  | j                  |dgz         d       t        j                  j                  |t        j                        }t        j                   |       t        j                   t        j                  j                  |d             | j                  | j                  |dgz         d       | j                  | j                  |dgz         d       | j                  | j                  |dgz         d       |dgz  }| j                  |dd	gz         }t#        |d
d	       | j                  |dt        j$                  gz         }t#        |d
t        j$                         | j                  |dt'        j(                  d
      gz         }t+        |d
t        j$                  t,        j.                         dg}| j1                  |g dz   |       y # 1 sw Y   4xY w)Nz--dry-run --config-dir {0}authFrq   ru   fake_account_dirTr   rt   r   r   )r   rt   r   )rv   mkdtempr   r   r   r   r   r   rW   r   r   r   r   r   ACCOUNTS_DIRr   mkdirrF   r   r   r   rJ   r	   r{   r   )r&   r9   r   account_dirconfig	conflictss         r-   test_dry_run_flagzParseTest.test_dry_run_flagC  s4   %%'
188DJJL
]]6<<( 	#JJz"	# 	((JJzVH,-u	6((JJzZL015	:((JJzWI-.	7 ggll:y/E/EF%k3EFG((J&4I)JDQ((J'4J)KTR((J*4M)NPTUzl"
 J*m)DDE%fhF J*i6K6K)LLM%fh	8M8MN J*c6F6Fx6P)QQR)2G2GI_I_` !M	++J9a,a,5	7E	# 	#s   JJ%c                    d}t        j                  |      }| j                  dj                  |      j	                               }|j                  |      sJ d}|j                  |      rJ |j                  d      rJ y )Nrsa_key_sizez--rsa-key-size {0}r9   authenticatorr   r   rW   r   r   rD   )r&   key_size_optionkey_size_valuer   config_dir_options        r-   test_user_set_rsa_key_sizez$ParseTest.test_user_set_rsa_key_sizek  s    ())/:077GMMOP!!/222(%% 	 %%o6666r4   c                     | j                  d      }|j                  d      sJ |j                  d      sJ | j                  d      }|j                  d      sJ |j                  d      rJ y )Nz--apache	installerr   z--installer webroot)rW   rD   )r&   r   s     r-   )test_user_set_installer_and_authenticatorz3ParseTest.test_user_set_installer_and_authenticatorw  sr    J'!!+...!!/22212!!+...%%o6666r4   c                     d}t        j                  |      }| j                  dj                  |      j	                               }|j                  |      sJ y )Nelliptic_curvez--elliptic-curve {0}r   )r&   elliptic_curve_optionelliptic_curve_option_valuer   s       r-   test_user_set_ecdsa_key_optionz(ParseTest.test_user_set_ecdsa_key_option  sS     0&)&6&67L&M#299:UV\\^_!!"7888r4   c                 2   d}t        j                  |      }| j                  dj                  |      j	                               }|j                  |      sJ t        j                  t              5  | j                  d       d d d        y # 1 sw Y   y xY w)Nkey_typez--key-type {0}z--key-type foo)	r   r   rW   r   r   rD   r   r   rd   )r&   key_type_optionkey_type_valuer   s       r-   test_user_set_invalid_key_typez(ParseTest.test_user_set_invalid_key_type  s|    $))/:,33NCIIKL!!/222]]:& 	)JJ'(	) 	) 	)s   2BBz&certbot._internal.hooks.validate_hooksc                     dj                         }t        j                  j                         }t	        j
                  ||      }|j                  d      sJ y )Nzrenew --deploy-hook foo
renew_hook)r   r   PluginsRegistryfind_allr   rP   rD   )r&   unused_mock_validate_hooksrM   r   r   s        r-   test_user_set_deploy_hookz#ParseTest.test_user_set_deploy_hook  sJ    (..0''002++GT:!!,///r4   z3certbot._internal.plugins.webroot._validate_webrootc                     dj                         }d|_        t        j                  j	                         }t        j                  ||      }|j                  d      sJ y )Nz%renew -w /var/www/html -d example.comz/var/www/htmlwebroot_map)r   return_valuer   r   r   r   rP   rD   )r&   mock_validate_webrootrM   r   r   s        r-   test_user_set_webroot_mapz#ParseTest.test_user_set_webroot_map  sS    6<<>-<*''002++GT:!!-000r4   c                 H   t         j                  j                         D ])  \  }}| j                  d|g      }|j                  |k(  r)J  t         j                  j                         D ]7  \  }}| j                  d|j                         g      }|j                  |k(  r7J  y )Nr   )r   REVOCATION_REASONSitemsrW   reasonupper)r&   r  coderE   s       r-   test_encode_revocation_reasonz'ParseTest.test_encode_revocation_reason  s    %88>>@ 	,LFD

J#78I##t+++	, &88>>@ 	,LFD

J#?@I##t+++	,r4   c                 `   t        j                  t        j                        5  | j	                  dj                                d d d        t        j                  t        j                        5  | j	                  dj                                d d d        y # 1 sw Y   UxY w# 1 sw Y   y xY w)Nzrenew --force-interactivez-n --force-interactiver   r   r   r   rW   r   r=   s    r-   test_force_interactivez ParseTest.test_force_interactive  s}    ]]6<<( 	<JJ288:;	<]]6<<( 	9JJ/5578	9 	9	< 	<	9 	9s    B/ B$B!$B-c                     t        j                  d      5  t        j                  t              5  | j                  dj                                d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)N certbot._internal.cli.sys.stderrz"--renew-hook foo --deploy-hook barr   ra   r   r   rd   rW   r   r=   s    r-   test_deploy_hook_conflictz#ParseTest.test_deploy_hook_conflict  i    ZZ:; 	Iz* I

?EEGHI	I 	II I	I 	I"   A- A!A-!A*	&A--A6c                 h    d}| j                  d|d|dg      }t        |d|       t        |d|       y )Nr   r   --deploy-hook--disable-hook-validationdeploy_hookr   r   r&   r@   rE   s      r-   #test_deploy_hook_matches_renew_hookz-ParseTest.test_deploy_hook_matches_renew_hook  s@    JJ / ; = >	 	&iF%iuEr4   c                 d    d}| j                  d|dg      }t        |d|       t        |d|       y )Nr   r  r  r  r   r   r  s      r-    test_deploy_hook_sets_renew_hookz*ParseTest.test_deploy_hook_sets_renew_hook  s9    JJe%@AC	%iF%iuEr4   c                     t        j                  d      5  t        j                  t              5  | j                  dj                                d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr  z"--deploy-hook foo --renew-hook barr  r=   s    r-   test_renew_hook_conflictz"ParseTest.test_renew_hook_conflict  r  r  c                 h    d}| j                  d|d|dg      }t        |d|       t        |d|       y )Nr   r  r   r  r  r   r   r  s      r-   #test_renew_hook_matches_deploy_hookz-ParseTest.test_renew_hook_matches_deploy_hook  s@    JJ . ; = >	 	&iF%iuEr4   c                 f    d}| j                  d|dg      }|j                  J t        |d|       y )Nr   r   r  r   )rW   r  rF   r  s      r-   'test_renew_hook_does_not_set_renew_hookz1ParseTest.test_renew_hook_does_not_set_renew_hook  s?    JJU$?@B	$$,,,%iuEr4   c                    t        j                  d      5  t        j                  t              5  | j                  dj                                d d d        t        j                  t              5  | j                  dj                                d d d        d d d        y # 1 sw Y   SxY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr  z--max-log-backups fooz--max-log-backups -42r  r=   s    r-   test_max_log_backups_errorz$ParseTest.test_max_log_backups_error  s    ZZ:; 	<z* <

288:;<z* <

288:;<	< 	<< << <	< 	<s:   B: B"!B:1 B.B:"B+	'B:.B7	3B::Cc                 Z    d}| j                  d|g      }t        |dt        |             y )N42z--max-log-backupsmax_log_backups)rW   rF   intr  s      r-   test_max_log_backups_successz&ParseTest.test_max_log_backups_success  s,    JJ 3U;<	%i1BCJOr4   c                 x   | j                  g       }t        |dg t        j                         t        |dg t        j                         t        j
                  j                  g|_        dg|_        | j                  g       }t        |dg t        j                         t        |dg t        j                         y )Nrr   r   rt   )	rW   rJ   r	   ry   r   r   r   r   rr   r   s     r-   test_unchanging_defaultsz"ParseTest.test_unchanging_defaults  s    JJrN		9b.:P:PQ	="n>T>TU!+!2!2!6!6 7	*O	JJrN		9b.:P:PQ	="n>T>TUr4   c                 B    | j                  dg      }t        |dd       y )Nz--no-directory-hooksdirectory_hooksFr   r   s     r-   test_no_directory_hooks_setz%ParseTest.test_no_directory_hooks_set  s!    JJ 678	%i1BEJr4   c                 ^    | j                  g       }t        |ddt        j                         y )Nr0  T)rW   rJ   r	   ry   r   s     r-   test_no_directory_hooks_unsetz'ParseTest.test_no_directory_hooks_unset  s$    JJrN		+<dNDZDZ[r4   c                 B    | j                  dg      }t        |dd       y )Nr   delete_after_revokeTr   r   s     r-   test_delete_after_revokez"ParseTest.test_delete_after_revoke  s!    JJ 789	%i1FMr4   c                 h    | j                  g       }|j                  J |j                  d      rJ y )Nr5  )rW   r5  rD   r   s     r-    test_delete_after_revoke_defaultz*ParseTest.test_delete_after_revoke_default  s9    JJrN	,,444(()>????r4   c                 B    | j                  dg      }t        |dd       y )Nr   r5  Fr   r   s     r-   test_no_delete_after_revokez%ParseTest.test_no_delete_after_revoke  s!    JJ :;<	%i1FNr4   c                     t        j                  t        j                        5  | j	                  dj                                d d d        y # 1 sw Y   y xY w)Nz(--allow-subset-of-names -d *.example.orgr  r=   s    r-   test_allow_subset_with_wildcardz)ParseTest.test_allow_subset_with_wildcard  sA    ]]6<<( 	KJJAGGIJ	K 	K 	Ks    AAc                 N    dD ]   }dD ]  }d| j                  ||g      vrJ  " y )N)r   r   )r   r   zdns-route53zcertbot-route53:authr   )r&   	help_flagtopics      r-   test_route53_no_revertz ParseTest.test_route53_no_revert  sC    ) 	[I: [-T5F5F	SXGY5ZZZZ[	[r4   c                     t        j                  t        j                        5  | j	                  ddg       d d d        y # 1 sw Y   y xY w)Nz--hstsz--auto-hsts)r   r   r   r   rW   r=   s    r-   $test_parse_args_hosts_and_auto_hostsz.ParseTest.test_parse_args_hosts_and_auto_hosts
  s8    ]]6<<( 	2JJ-01	2 	2 	2s   AA
c                 Z   t        d      }d}d}| j                  dg      }t        |d|t        j                         t        j                         5 }|j                          t        |j                  d      5 }|j                  d|        d d d        | j                  dd|j                  g      }t        |d|t        j                         | j                  dd|j                  d|g      }t        |d|t        j                         d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)	Nr   zconfigfile.bizzcommandline.edurq   rs   z	server = z-cr   )r   rW   rJ   r	   ry   rv   rw   rx   r#   r<   r$   rz   COMMAND_LINE)r&   DEFAULT_VALUECONFIG_FILE_VALUECOMMAND_LINE_VALUErE   ro   r~   s          r-   )test_parse_with_multiple_argument_sourcesz3ParseTest.test_parse_with_multiple_argument_sources  s'   $X.,. JJ
|,		8]NDZDZ[((* 	jjjoos+ >vy):(;<=> 

joo$ I $Ix9JNLfLfg 

joo.$ I
 $Ix9K^MhMhi%	j 	j> >	j 	js%   'D!9DA>D!D	D!!D*c                    | j                  d      }t        |ddg       t        |dd       t        j                         5 }|j	                          t        |j                  d      5 }|j                  d       d d d        | j                  dd	|j                  g      }t        |ddg       d d d        y # 1 sw Y   >xY w# 1 sw Y   y xY w)
Nz--preferred-chal dns --no-dirr   zdns-01r0  Frs   zpreferred-chal = dnsrq   z--config)rW   rF   rv   rw   rx   r#   r<   r$   )r&   rE   ro   r~   s       r-   test_abbreviated_argumentsz$ParseTest.test_abbreviated_arguments+  s     JJ>?	%i
K%i1BEJ((* 		Pjjoos+ 5v345 

JOO$ I *)]XJO		P 		P5 5		P 		Ps$   'C(B7:4C7C 	<CCc                     | j                  d      }t        |ddg       t        j                  j	                         }t        j                  |ddg      }t        |dd       y )Nz-d=example.comrr   rt   runz--pre-hook="foo=bar"pre_hookz	"foo=bar")rW   rF   r   r   r   r   rP   )r&   unsused_mock_validate_hooksrE   r   s       r-   test_argument_with_equalsz#ParseTest.test_argument_with_equals>  sY    JJ/0	%i]OL ''002..w@V8WX	%i[Ir4   c                     | j                  d      }t        |dd       t        |dd       | j                  d      }t        |dd       t        |dd       | j                  d      }t        |dd       t        |dd       t        |d	d
       y )Nz-tv	text_modeTverbose_count   z-tvvv   z-tvm foo@example.comemailzfoo@example.comr   r   s     r-   test_adjacent_short_argsz"ParseTest.test_adjacent_short_argsH  s    JJu%	%idC%i!DJJw'	%idC%i!DJJ56	%idC%i!D%i:KLr4   c                 F    | j                  ddg      }t        |ddg       y )Nrq   z
-d foo.comrr   zfoo.comr   r   s     r-   test_arg_with_contained_spacesz(ParseTest.test_arg_with_contained_spacesV  s%     JJ
L9:	%iYKHr4   N)9r/   r0   r1   r2   staticmethodr   r   r
   rS   rW   rg   r   ra   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.  r1  r3  r6  r8  r:  r<  r@  rB  rH  rJ  rO  rV  rX  r3   r4   r-   rL   rL   U   s   &9d3i 9O 9 9 3DI 3/ 3 3
!c !" TZZ<=V >V(0F 8 t#&\4'JS
A
	)Eq&7P
779) TZZ890 :0 TZZEF1 G1,9I
FFI
FF<P

VK\N@
OK[
2j:P& TZZ89J :JMIr4   rL   __main__rS  )4r2   r    rk   	importlibr   reload_moduler_   sysrv   typingr   r   unittestr   r   acmer   certbotr   certbot.configurationr	   r
   certbot._internalr   r   certbot._internal.cli.cli_utilsr   certbot._internal.pluginsr   certbot.compatr   r   certbot.tests.utiltestsutilrU   r   r   r   rQ   r   TestCaser6   r   rF   rJ   rL   r/   exitmainargv__file__r3   r4   r-   <module>ro     s    &   - 	 
        A ! ' 8 + %  & & .



(
(
*? @Fh'' F'3 's '
6S 6 6n 6
FI!! FIP zCHH[V[[!"
234 r4   