JFIF$        dd7 

Viewing File: /usr/lib/python3.9/site-packages/certbot/_internal/tests/__pycache__/util_test.cpython-39.opt-1.pyc

a

}|�g�`�@s�dZddlZddlZddlmZddlZddlZddlZddlm	Z	ddl
Z
ddlmZddl
mZddl
mZddlmmZGdd	�d	ej�ZGd
d�dej�ZGdd
�d
ej�ZGdd�dej�ZGdd�dej�ZGdd�dej�ZGdd�dej�ZGdd�dej�ZGdd�dej�ZGdd�dej�ZGdd�dej�Z Gdd�dej�Z!Gd d!�d!ej�Z"Gd"d#�d#ej�Z#Gd$d%�d%ej�Z$Gd&d'�d'ej�Z%Gd(d)�d)ej�Z&Gd*d+�d+ej�Z'e(d,k�r�e�)e
�*ej+d-d�e,g��dS).zTests for certbot.util.�N)�reload)�mock)�errors)�
filesystem)�osc@s,eZdZdZedd��Zdd�Zdd�ZdS)	�EnvNoSnapForExternalCallsTestz6Tests for certbot.util.env_no_snap_for_external_calls.cCsddlm}|�S)Nr)�env_no_snap_for_external_calls)�certbot.utilr)�clsr�r�E/usr/lib/python3.9/site-packages/certbot/_internal/tests/util_test.py�_callsz#EnvNoSnapForExternalCallsTest._callcCsbtjd}tj��}d||d<d|d<d|d<tjd|d��Wd�n1sT0YdS)	N�PATH�"RANDOM_NONSENSE_GARBAGE/blah/blah:�RANDOM_NONSENSE_GARBAGE�SNAP�True�CERTBOT_SNAPPED�certbot.compat.os.environ.copy��return_value)r�environ�copyr�patch)�selfZ
original_path�
env_copy_dictrrr�test_removeds

z*EnvNoSnapForExternalCallsTest.test_removedcCs�tj��}d|d|d<|��}tjd|d��>|�dd�|�dd�d|d<|d=d|d<Wd�n1st0YdS)	Nrrrrrrrr)rrrrr�pop)rZenv_copy_dict_unmodifiedrrrr�	test_noop"s
�z'EnvNoSnapForExternalCallsTest.test_noopN)�__name__�
__module__�__qualname__�__doc__�classmethodr
rrrrrrrs

	rc@sReZdZdZedd��Ze�d�dd��Ze�d�dd��Z	e�d�d	d
��Z
dS)�
RunScriptTestz"Tests for certbot.util.run_script.cCsddlm}||�S)Nr)�
run_script)r	r%)r
�paramsr%rrrr
6szRunScriptTest._callzcertbot.util.subprocess.runcCs,d|�_d|�_d|�_|�dg�\}}dS)z.These will be changed soon enough with reload.r�stdout�stderr�testN)�
returncoder'r(r
)r�mock_run�out�errrrr�test_default;s
zRunScriptTest.test_defaultcCsBt|_t�tj��|�dg�Wd�n1s40YdS)Nr))�OSError�side_effect�pytest�raisesr�SubprocessErrorr
�rr+rrr�test_bad_processFszRunScriptTest.test_bad_processcCsDd|�_t�tj��|�dg�Wd�n1s60YdS)N�r))r*r1r2rr3r
r4rrr�test_failureMszRunScriptTest.test_failureN)rr r!r"r#r
rrr.r5r7rrrrr$4s



r$c@s,eZdZdZedd��Zdd�Zdd�ZdS)	�
ExeExistsTestz"Tests for certbot.util.exe_exists.cCsddlm}||�S)Nr)�
exe_exists)r	r9)r
Zexer9rrrr
XszExeExistsTest._callcCs2tjddd��Wd�n1s$0YdS)N�%certbot.util.filesystem.is_executableTr�rr�rrrr�test_exe_exists]szExeExistsTest.test_exe_existscCs2tjddd��Wd�n1s$0YdS)Nr:Frr;r<rrr�test_exe_not_existsasz!ExeExistsTest.test_exe_not_existsN)rr r!r"r#r
r=r>rrrrr8Us

r8csHeZdZdZedd��Z�fdd�Ze�d�e�d�dd	���Z	�Z
S)
�LockDirUntilExitz+Tests for certbot.util.lock_dir_until_exit.cOsddlm}||i|��S)Nr)�lock_dir_until_exit)r	r@)r
�args�kwargsr@rrrr
hszLockDirUntilExit._callcs t���ddl}t|j�dS)Nr)�super�setUpr	�
reload_module�util)r�certbot��	__class__rrrDms
zLockDirUntilExit.setUpzcertbot.util.loggerzcertbot.util.atexit_registercCs^tj�|jd�}t�|�|�|j�|�|�|�|�|jdd}ddlm	}|�dS)N�subdirr)rF)
r�path�join�tempdirr�mkdirr
�	call_argsrGrF)rZ
mock_registerZmock_loggerrJZregistered_funcrFrrr�test_itss


zLockDirUntilExit.test_it)rr r!r"r#r
rDrrrP�
__classcell__rrrHrr?fs
r?c@s<eZdZdZdd�Ze�d�dd��Ze�d�dd	��Zd
S)�SetUpCoreDirTestz/Tests for certbot.util.make_or_verify_core_dir.cOsddlm}||i|��S)Nr)�set_up_core_dir)r	rS)rrArBrSrrrr
�szSetUpCoreDirTest._callz certbot.util.lock_dir_until_exitcCs"tj�|jd�}|�|dd�dS)N�new�F�rrKrLrMr
)rZ	mock_lockZnew_dirrrr�test_success�szSetUpCoreDirTest.test_successzcertbot.util.make_or_verify_dircCsFt|_t�tj�� |�|jdd�Wd�n1s80YdS)NrUF)r/r0r1r2r�Errorr
rM)rZmock_make_or_verifyrrrr7�szSetUpCoreDirTest.test_failureN)	rr r!r"r
rrrWr7rrrrrR�s
rRcsHeZdZdZ�fdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	�Z
S)�MakeOrVerifyDirTestz�Tests for certbot.util.make_or_verify_dir.

    Note that it is not possible to test for a wrong directory owner,
    as this testing script would have to be run as root.

    cs.t���tj�|jd�|_t�|jd�dS)N�foo�)rCrDrrKrLrMrrNr<rHrrrD�s
zMakeOrVerifyDirTest.setUpcCsddlm}|||dd�S)Nr)�make_or_verify_dirT)�strict)r	r\)rZ	directory�moder\rrrr
�szMakeOrVerifyDirTest._callcCs tj�|jd�}|�|d�dS)N�bari�rV)rrKrrr�test_creates_dir_when_missing�sz1MakeOrVerifyDirTest.test_creates_dir_when_missingcCs|�|jd�dS)Nr[)r
rKr<rrr�(test_existing_correct_mode_does_not_fail�sz<MakeOrVerifyDirTest.test_existing_correct_mode_does_not_failcCs>t�tj��|�|jd�Wd�n1s00YdS)N�)r1r2rrXr
rKr<rrr�test_existing_wrong_mode_fails�sz2MakeOrVerifyDirTest.test_existing_wrong_mode_failsc	Csptj�td��N}t�|_t�t��|�dd�Wd�n1sD0YWd�n1sb0YdS)N�makedirsr_i�޻)	rr�objectrr/r0r1r2r
)rrdrrr�test_reraises_os_error�sz*MakeOrVerifyDirTest.test_reraises_os_error)rr r!r"rDr
r`rarcrfrQrrrHrrY�srYcsBeZdZdZ�fdd�Zd
dd�Zdd�Zd	d
�Zdd�Z�Z	S)�UniqueFileTestz#Tests for certbot.util.unique_file.cs t���tj�|jd�|_dS)Nzfoo.txt)rCrDrrKrLrM�default_namer<rHrrrD�s
zUniqueFileTest.setUpr[cCsddlm}||j|�S)Nr)�unique_file)r	rirh)rr^rirrrr
�szUniqueFileTest._callcCsJ|��\}}|�d�|��t|��}Wd�n1s<0YdS)Nr_)r
�write�close�open)r�fd�name�frrr�test_returns_fd_for_writing�s


z*UniqueFileTest.test_returns_fd_for_writingcCs0|�d�\}}|�d�\}}|��|��dS)NrUr[�r
rk)r�fd1�name1�fd2�name2rrr�test_right_mode�szUniqueFileTest.test_right_modec
Csd|��\}}|��\}}|��\}}tj�|�}tj�|�}tj�|�}	|��|��|��dS�N)r
rrK�basenamerk)
rrrrsrtruZfd3Zname3Z	basename1Z	basename2Z	basename3rrr�test_default_exists�s
z"UniqueFileTest.test_default_exists)r[)
rr r!r"rDr
rprvryrQrrrHrrg�s
rgc@s2eZdZdZddd�Zdd�Zdd�Zd	d
�ZdS)
�UniqueLineageNameTestz+Tests for certbot.util.unique_lineage_name.�cCsddlm}||j||�S)Nr)�unique_lineage_name)r	r|rM)r�filenamer^r|rrrr
�szUniqueLineageNameTest._callcCs|�d�\}}|��dS)N�wowrq)rrorKrrr�
test_basicsz UniqueLineageNameTest.test_basiccCsHg}td�D]}|�|�d��q|d\}}|D]\}}|��q2dS)N�
r~���)�range�appendr
rk)r�items�_rornrrr�
test_multiplesz#UniqueLineageNameTest.test_multiplec	Csltjdttj�d��Dt�t��|�d�Wd�n1s@0YWd�n1s^0YdS)Nzcertbot.compat.filesystem.open)r0r~)rrr/�errnoZEIOr1r2r
r<rrrr7sz"UniqueLineageNameTest.test_failureN)r{)rr r!r"r
rr�r7rrrrrz�s

rzcs@eZdZdZ�fdd�Zdd�Zdd�Zdd	�Zd
d�Z�Z	S)�SafelyRemoveTestz%Tests for certbot.util.safely_remove.cs t���tj�|jd�|_dS)NrZ)rCrDrrKrLrMr<rHrrrDs
zSafelyRemoveTest.setUpcCsddlm}||j�S)Nr)�
safely_remove)r	r�rK)rr�rrrr
 szSafelyRemoveTest._callcCs8t|jd��Wd�n1s"0Y|��dS)N�w)rlrKr
r<rrr�test_exists$szSafelyRemoveTest.test_existscCs|��dSrw�r
r<rrr�test_missing*szSafelyRemoveTest.test_missingc	Csft�d��H}t|_t�t��|��Wd�n1s:0YWd�n1sX0YdS)Nzcertbot.util.os.remove)rrr/r0r1r2r
)rZmock_removerrr�test_other_error_passthrough/sz-SafelyRemoveTest.test_other_error_passthrough)
rr r!r"rDr
r�r�r�rQrrrHrr�sr�c@s,eZdZdZedd��Zdd�Zdd�ZdS)	�
SafeEmailTestzTest safe_email.cCsddlm}||�S)Nr)�
safe_email)r	r�)r
�addrr�rrrr
8szSafeEmailTest._callcCsgd�}|D]}qdS)N)zcertbot@certbot.orgztbd.ade@gmail.comzabc_def.jdk@hotmail.museumr�r�addrsr�rrr�test_valid_emails=szSafeEmailTest.test_valid_emailscCsgd�}|D]}qdS)N)zcertbot@certbot..orgz.tbd.ade@gmail.comz~/abc_def.jdk@hotmail.museumrr�rrr�test_invalid_emailsFsz!SafeEmailTest.test_invalid_emailsN)rr r!r"r#r
r�r�rrrrr�6s

	r�c@sPeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�ZdS)�AddDeprecatedArgumentTestzTest add_deprecated_argument.cCst��|_dSrw)�argparse�ArgumentParser�parserr<rrrrDRszAddDeprecatedArgumentTest.setUpcCs ddlm}||jj||�dS)Nr)�add_deprecated_argument)r	r�r��add_argument)r�
argument_name�nargsr�rrrr
UszAddDeprecatedArgumentTest._callcCsH|�dd�t�d��}|j�dg�Wd�n1s:0YdS)N�--old-optionr�certbot.util.logger.warning�r
rrr��
parse_args�rZ	mock_warnrrr�test_warning_no_argYs,z-AddDeprecatedArgumentTest.test_warning_no_argcCsJ|�dd�t�d�� }|j�ddg�Wd�n1s<0YdS)Nr�r6r��42r�r�rrr�test_warning_with_argas.z/AddDeprecatedArgumentTest.test_warning_with_argc	Csl|�dd�t��}tjd|d��6z|j�dg�WntyHYn0Wd�n1s^0YdS)Nr��z
sys.stdout)rTz-h)r
�io�StringIOrrr�r��
SystemExit)rr'rrr�	test_helpis$z#AddDeprecatedArgumentTest.test_helpcCs|�t�dS)z�Test when ACTION_TYPES_THAT_DONT_NEED_A_VALUE is a set.

        This variable is a set in configargparse versions < 0.12.0.

        N)�_test_constant_common�setr<rrr�test_set_constantssz+AddDeprecatedArgumentTest.test_set_constantcCs|�t�dS)z�Test when ACTION_TYPES_THAT_DONT_NEED_A_VALUE is a tuple.

        This variable is a tuple in configargparse versions >= 0.12.0.

        N)r��tupler<rrr�test_tuple_constant{sz-AddDeprecatedArgumentTest.test_tuple_constantcCsNt�d��0}|�|_|�dd�|�dd�Wd�n1s@0YdS)Nzcertbot.util.configargparser�r6z
--old-option2r�)rrZ#ACTION_TYPES_THAT_DONT_NEED_A_VALUEr
)r�typZmock_configargparserrrr��s
*z/AddDeprecatedArgumentTest._test_constant_commonN)rr r!r"rDr
r�r�r�r�r�r�rrrrr�Ps
r�c@sXeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�ZdS)�EnforceLeValidityzTest enforce_le_validity.cCsddlm}||�S)Nr)�enforce_le_validity)r	r�)r�domainr�rrrr
�szEnforceLeValidity._callcCs:t�tj��|�d�Wd�n1s,0YdS)Nz..�r1r2r�ConfigurationErrorr
r<rrr�test_sanity�szEnforceLeValidity.test_sanitycCs:t�tj��|�d�Wd�n1s,0YdS)Nzhello_world.example.comr�r<rrr�test_invalid_chars�sz$EnforceLeValidity.test_invalid_charscCs:t�tj��|�d�Wd�n1s,0YdS)Nz-a.example.comr�r<rrr�test_leading_hyphen�sz%EnforceLeValidity.test_leading_hyphencCs:t�tj��|�d�Wd�n1s,0YdS)Nza-.example.comr�r<rrr�test_trailing_hyphen�sz&EnforceLeValidity.test_trailing_hyphencCs:t�tj��|�d�Wd�n1s,0YdS)NZcomr�r<rrr�test_one_label�sz EnforceLeValidity.test_one_labelcCsdSrwrr<rrr�test_valid_domain�sz#EnforceLeValidity.test_valid_domaincCspt�tj��|�d�Wd�n1s,0Yt�tj��|�d�Wd�n1sb0YdS)Nzhttp://example.comzhttps://example.comr�r<rrr�test_input_with_scheme�s(z(EnforceLeValidity.test_input_with_schemecCsdSrwrr<rrr�!test_valid_input_with_scheme_name�sz3EnforceLeValidity.test_valid_input_with_scheme_nameN)
rr r!r"r
r�r�r�r�r�r�r�r�rrrrr��sr�c@speZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�ZdS)�EnforceDomainSanityTestzTest enforce_domain_sanity.cCsddlm}||�S)Nr)�enforce_domain_sanity)r	r�)rr�r�rrrr
�szEnforceDomainSanityTest._callcCs@t�tj�� |�d�d��Wd�n1s20YdS)N�eichhörnchen.example.comzutf-8)r1r2rr�r
�encoder<rrr�test_nonascii_str�sz)EnforceDomainSanityTest.test_nonascii_strcCs:t�tj��|�d�Wd�n1s,0YdS)Nr�r�r<rrr�test_nonascii_unicode�sz-EnforceDomainSanityTest.test_nonascii_unicodecCs>d}t�tj��|�|�Wd�n1s00YdS)NAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar�)rZlong_domainrrr�
test_too_long�sz%EnforceDomainSanityTest.test_too_longcCsd�dddd�}|�|�dS)Nz{0}.{1}.{2}.{3}�?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa�?bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbZ?cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccZ?ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd��formatr
)rZnot_too_long_domainrrr�test_not_too_long�sz)EnforceDomainSanityTest.test_not_too_longcCs>d}t�tj��|�|�Wd�n1s00YdS)Nzfizz..example.comr�)rZempty_label_domainrrr�test_empty_label�sz(EnforceDomainSanityTest.test_empty_labelcCs>d}t�tj��|�|�Wd�n1s00YdS)Nz
example.com..r�)rZempty_trailing_label_domainrrr�test_empty_trailing_label�sz1EnforceDomainSanityTest.test_empty_trailing_labelcCs>d}t�tj��|�|�Wd�n1s00YdS)N�@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar��rZlong_label_domainrrr�test_long_label_1�sz)EnforceDomainSanityTest.test_long_label_1cCsFd�dd�}t�tj��|�|�Wd�n1s80YdS)N�{0}.{1}.comr�r�)r�r1r2rr�r
r�rrr�test_long_label_2�sz)EnforceDomainSanityTest.test_long_label_2cCsd�dd�}|�|�dS)Nr�r�r�r�)rZnot_too_long_label_domainrrr�test_not_long_label�sz+EnforceDomainSanityTest.test_not_long_labelcCs>d}t�tj��|�|�Wd�n1s00YdS)N�r�)rZempty_domainrrr�test_empty_domain�sz)EnforceDomainSanityTest.test_empty_domaincCs|�d�dS)Nzthis.is.xn--ls8h.tldr�r<rrr�test_punycode_ok�sz(EnforceDomainSanityTest.test_punycode_okN)rr r!r"r
r�r�r�r�r�r�r�r�r�r�r�rrrrr��sr�c@s0eZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�IsWildcardDomainTestzTests for is_wildcard_domain.cCsd|_d|_dS)Nz
*.example.orgzexample.org)ZwildcardZno_wildcardr<rrrrD�szIsWildcardDomainTest.setUpcCsddlm}||�S)Nr)�is_wildcard_domain)r	r�)rr�r�rrrr
�szIsWildcardDomainTest._callcCsdSrwrr<rrr�test_no_wildcard�sz%IsWildcardDomainTest.test_no_wildcardcCsdSrwrr<rrr�
test_wildcard�sz"IsWildcardDomainTest.test_wildcardN)rr r!r"rDr
r�r�rrrrr��s
r�c@s�eZdZdZe�d�e�ej	�
d�d�dd���Ze�d�e�ej	�
d�d�dd���Ze�d�e�ej	�
d�d�d	d
���Z
dd�Ze�d�e�ej	�
d�d�d
d���Ze�d�e�ej	�
d�d�dd���ZdS)�
OsInfoTestz Test OS / distribution detectionzcertbot.util.distro�linuxzrequires LinuxcCs ddlm}d|j_|��}dS)Nrzfirst debian third)r	rFZlikerZget_systemd_os_like)r�m_distro�cbutilZid_likesrrr�test_systemd_os_release_likesz'OsInfoTest.test_systemd_os_release_likecCs\ddlm}tjddd��$d|j_gd�|j_Wd�n1sD0Ydg|j_dS)Nr�platform.system_alias)r�r�r�r�1.0)r��	somethingr�Zwhatever)r	rFrr�versionrrnr0�rr�r�rrr�test_get_os_info_ua
s�
zOsInfoTest.test_get_os_info_uacCs`ddlm}t�d��6}d|j_d|j_d|_d|j_d|j_Wd�n1sR0YdS)Nrzplatform.systemrnr�r�r��else)r	rFrr�idrr�)rr�r�Z
mock_platformrrr�test_get_os_infoszOsInfoTest.test_get_os_infoc
Cs\ddlm}t�dd���,tjddd��Wd�n1s@0Ytjddd��Bt�d��}d	|�_Wd�n1s�0YWd�n1s�0Ytjdd
d��Wd�n1s�0Ytjddd��@tjdd
d��Wd�n1�s0YWd�n1�s.0YWd�n1�sN0YdS)Nrzcertbot.util._USE_DISTROFr�)Z
NonSystemDr�r�r)�darwinr�r�zsubprocess.runz42.42.42)Zfreebsdz
9.3-RC3-p1r�)Zwindowsr�r�zplatform.win32_ver)Z4242Z95�2r�)r	rFrrr')rr�Zrun_mockrrr�test_non_systemd_os_info*s.��<���z#OsInfoTest.test_non_systemd_os_infocCs ddlm}d|j_d|j_dS)Nrr��r	rFr�rr�r�rrr�test_python_os_info_notfoundCsz'OsInfoTest.test_python_os_info_notfoundcCs ddlm}d|j_d|j_dS)NrZtestdistr�r�r�rrr�test_python_os_info_customKsz%OsInfoTest.test_python_os_info_customN)rr r!r"rr�unittestZ
skipUnless�sys�platform�
startswithr�r�r�r�r�r�rrrrr�s"
r�c@s<eZdZdZdd�Zedd��Zdd�Zdd	�Zd
d�Z	dS)
�AtexitRegisterTestz'Tests for certbot.util.atexit_register.cCst��|_d|_ddi|_dS)N)�hiZanswer�*)rZ	MagicMock�funcrArBr<rrrrDVs
zAtexitRegisterTest.setUpcOsddlm}||i|��S)Nr)�atexit_register)r	r�)r
rArBr�rrrr
[szAtexitRegisterTest._callcCs(|�t���|jj|ji|j��dSrw)�_test_commonr�getpidr�Zassert_called_withrArBr<rrr�test_called`szAtexitRegisterTest.test_calledcCs|jdd�dS)Nr�)�initial_pid)r�r<rrr�test_not_calleddsz"AtexitRegisterTest.test_not_calledc	Cs�t�d|���t�d��.}|j|jg|j�Ri|j��Wd�n1sL0Y|jj\}}|d}||dd�i|��Wd�n1s�0YdS)Nzcertbot.util._INITIAL_PIDzcertbot.util.atexitrr6)rrr
r�rArB�registerrO)rr�Zmock_atexitrArBZatexit_funcrrrr�hs<zAtexitRegisterTest._test_commonN)
rr r!r"rDr#r
r�r�r�rrrrr�Ts
r�c@s<eZdZdZedd��Zdd�Zdd�Zdd	�Zd
d�Z	dS)
�LooseVersionTestz�Test for certbot.util.LooseVersion.

    These tests are based on the original tests for
    distutils.version.LooseVersion at
    https://github.com/python/cpython/blob/v3.10.0/Lib/distutils/tests/test_version.py#L58-L81.

    cOsddlm}||i|��S)Nr)�LooseVersion)r	r�)r
rArBr�rrrr
}szLooseVersionTest._callcCsd}|D]\}}qdS)N)�z1.5.1z1.5.2b2�z3.4jz
1996.07.12�Z2g6Z11g�z0.960923z	2.2beta29�z1.13++z5.5.kw)�2.0z2.0.1)�a�br�rZcomparisonsZv1Zv2rrr�test_less_than�szLooseVersionTest.test_less_thancCsd}|D]\}}qdS)N))�8.02r)�1ar	)r��2.0.0)rr
rrrrr�
test_equal�szLooseVersionTest.test_equalcCsd}|D]\}}qdS�N))Z161z3.10a)z3.2.pl0z3.1.1.6rrrrr�test_greater_than�sz"LooseVersionTest.test_greater_thanc	Cs@d}|D]2\}}t�t��Wd�q1s00YqdS)N))zbookworm/sid�9)r	r�)r1r2�
ValueErrorrrrr�test_incomparible�sz"LooseVersionTest.test_incomparibleN)
rr r!r"r#r
rrr
rrrrrr�ts
r�c@s4eZdZdZedd��Zdd�Zdd�Zdd	�Zd
S)�ParseLooseVersionTestz�Test for certbot.util.parse_loose_version.

    These tests are based on the original tests for
    distutils.version.LooseVersion at
    https://github.com/python/cpython/blob/v3.10.0/Lib/distutils/tests/test_version.py#L58-L81.

    cOsddlm}||i|��S)Nr)�parse_loose_version)r	r)r
rArBrrrrr
�szParseLooseVersionTest._callcCsd}|D]\}}qdS)N)r�r�rrrrrrrrr�sz$ParseLooseVersionTest.test_less_thancCsdSrwrr<rrrr�sz ParseLooseVersionTest.test_equalcCsd}|D]\}}qdSrrrrrrr
�sz'ParseLooseVersionTest.test_greater_thanN)	rr r!r"r#r
rrr
rrrrr�s
	r�__main__r6)-r"r�r��	importlibrrEr�r�r�rr1rGrZcertbot.compatrrZcertbot.tests.utilZtestsrFZ	test_utilZTestCaserr$r8ZTempDirTestCaser?rRrYrgrzr�r�r�r�r�r�r�r�r�rr�exit�main�argv�__file__rrrr�<module>s@"!$'4;';S /!

Back to Directory  nL+D550H?Mx ,D"v]qv;6*Zqn)ZP0!1 A "#a$2Qr D8 a Ri[f\mIykIw0cuFcRı?lO7к_f˓[C$殷WF<_W ԣsKcëIzyQy/_LKℂ;C",pFA:/]=H  ~,ls/9ć:[=/#f;)x{ٛEQ )~ =𘙲r*2~ a _V=' kumFD}KYYC)({ *g&f`툪ry`=^cJ.I](*`wq1dđ#̩͑0;H]u搂@:~וKL Nsh}OIR*8:2 !lDJVo(3=M(zȰ+i*NAr6KnSl)!JJӁ* %݉?|D}d5:eP0R;{$X'xF@.ÊB {,WJuQɲRI;9QE琯62fT.DUJ;*cP A\ILNj!J۱+O\͔]ޒS߼Jȧc%ANolՎprULZԛerE2=XDXgVQeӓk yP7U*omQIs,K`)6\G3t?pgjrmۛجwluGtfh9uyP0D;Uڽ"OXlif$)&|ML0Zrm1[HXPlPR0'G=i2N+0e2]]9VTPO׮7h(F*癈'=QVZDF,d߬~TX G[`le69CR(!S2!P <0x<!1AQ "Raq02Br#SCTb ?Ζ"]mH5WR7k.ۛ!}Q~+yԏz|@T20S~Kek *zFf^2X*(@8r?CIuI|֓>^ExLgNUY+{.RѪ τV׸YTD I62'8Y27'\TP.6d&˦@Vqi|8-OΕ]ʔ U=TL8=;6c| !qfF3aů&~$l}'NWUs$Uk^SV:U# 6w++s&r+nڐ{@29 gL u"TÙM=6(^"7r}=6YݾlCuhquympǦ GjhsǜNlɻ}o7#S6aw4!OSrD57%|?x>L |/nD6?/8w#[)L7+6〼T ATg!%5MmZ/c-{1_Je"|^$'O&ޱմTrb$w)R$& N1EtdU3Uȉ1pM"N*(DNyd96.(jQ)X 5cQɎMyW?Q*!R>6=7)Xj5`J]e8%t!+'!1Q5 !1 AQaqё#2"0BRb?Gt^## .llQT $v,,m㵜5ubV =sY+@d{N! dnO<.-B;_wJt6;QJd.Qc%p{ 1,sNDdFHI0ГoXшe黅XۢF:)[FGXƹ/w_cMeD,ʡcc.WDtA$j@:) -# u c1<@ۗ9F)KJ-hpP]_x[qBlbpʖw q"LFGdƶ*s+ډ_Zc"?%t[IP 6J]#=ɺVvvCGsGh1 >)6|ey?Lӣm,4GWUi`]uJVoVDG< SB6ϏQ@ TiUlyOU0kfV~~}SZ@*WUUi##; s/[=!7}"WN]'(L! ~y5g9T̅JkbM' +s:S +B)v@Mj e Cf jE 0Y\QnzG1д~Wo{T9?`Rmyhsy3!HAD]mc1~2LSu7xT;j$`}4->L#vzŏILS ֭T{rjGKC;bpU=-`BsK.SFw4Mq]ZdHS0)tLg