a
    6RhG"                     @   s   d dl Zd dl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G dd dZG dd dZG dd dZejd	d
d ZdS )    N)cleandocc                   @   st   e Z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S )TestPackageIndexc                 C   s8   d}|d7 }d  jf i t }tjj|s4J d S )Nz&http://other_url?:action=show_md5&amp;z'digest=0123456789abcdef0123456789abcdefz
            <a href="http://some_url">Name</a>
            (<a title="MD5 hash"
            href="{hash_url}">md5</a>)
        )lstripformatlocals
setuptoolspackage_indexZPYPI_MD5match)selfZhash_urldoc r   X/opt/python-3.9.24/usr/lib/python3.9/site-packages/setuptools/tests/test_packageindex.py
test_regex   s    zTestPackageIndex.test_regexc                 C   sb   t j }d}tjtt|d, ||}t	|t
jjs@J W d    n1 sT0    Y  d S )Nz.http://127.0.0.1:0/nonesuch/test_package_indexr	   r   r   PackageIndexpytestraises	Exceptionreescapeopen_url
isinstanceurlliberror	HTTPErrorr
   indexurlvr   r   r   test_bad_url_bad_port   s
    

z&TestPackageIndex.test_bad_url_bad_portc                 C   sf   t jjdd}d}tjtt|d, ||}t	|t
jjsDJ W d    n1 sX0    Y  d S )Nzwww.example.comhostszMurl:%20https://svn.plone.org/svn/collective/inquant.contentmirror.plone/trunkr   r   r   r   r   r   test_bad_url_typo    s
    
z"TestPackageIndex.test_bad_url_typoc                 C   s\   t jjdd}dd }||_d}tjtdd || W d    n1 sN0    Y  d S )Nr!   r"   c                  W   s   t jdd S )Nline)httpclientBadStatusLine)argsr   r   r   _urlopen/   s    z?TestPackageIndex.test_bad_url_bad_status_line.<locals>._urlopenzhttp://example.comr%   r   )r   r   r   openerr   r   r   r   )r
   r   r*   r   r   r   r   test_bad_url_bad_status_line,   s    z-TestPackageIndex.test_bad_url_bad_status_linec              
   C   s|   t jjdd}d}z|| W nN tjjyn } z2t|}d|v sXd|v sXd|v sXJ W Y d}~dS d}~0 0 tddS )	zO
        A bad URL with a double scheme should raise a DistutilsError.
        r!   r"   z2http://http://svn.pythonpaste.org/Paste/wphp/trunkznonnumeric portzgetaddrinfo failedzName or service not knownNzDid not raise)	r   r   r   r   	distutilserrorsDistutilsErrorstrRuntimeError)r
   r   r   r   msgr   r   r   test_bad_url_double_scheme7   s    z+TestPackageIndex.test_bad_url_double_schemec                 C   s&   t jjdd}d}||ds"J d S )Nr!   r"   zfile:///tmp/test_package_indexT)r   r   r   Zurl_ok)r
   r   r   r   r   r   test_url_okK   s    zTestPackageIndex.test_url_okc                 C   sl   t jj}|d}d}||ks J |d}d}||ks8J |d}d}||ksPJ |d}d}||kshJ d S )	Nzreportlab-2.5.win32-py2.4.exe)reportlab-2.5z2.4win32zreportlab-2.5.win32.exe)r5   Nr6   z!reportlab-2.5.win-amd64-py2.7.exe)r5   z2.7	win-amd64zreportlab-2.5.win-amd64.exe)r5   Nr7   )r   r   Zparse_bdist_wininst)r
   parseactualexpectedr   r   r   test_parse_bdist_wininstP   s    z)TestPackageIndex.test_parse_bdist_wininstc                 C   s2   t jjj}|d\}}|dks"J |dks.J dS )zA
        Test the basic usage of _vcs_split_rev_from_url
        zhttps://example.com/bar@2995zhttps://example.com/barZ2995N)r   r   r   Z_vcs_split_rev_from_url)r
   Zvsrfur   revr   r   r   test__vcs_split_rev_from_urlc   s    
z-TestPackageIndex.test__vcs_split_rev_from_urlc                 C   st   |d }| d}|d W d   n1 s20    Y  dtjt| d }tj|}d|	 v spJ dS )zR
        local_open should be able to read an index from the file system.
        z
index.htmlwz<div>content</div>Nzfile:/content)
openwriter   requestpathname2urlr0   r   r   Z
local_openread)r
   ZtmpdirZ
index_filefr   resr   r   r   test_local_indexl   s    (z!TestPackageIndex.test_local_indexc                    s   ddg}g dg ddgdg g d fdd	|D }|D ]@\}}t tjd
| }|d jdksxJ |d j|ksJJ qJdS )z6
        EGG fragments must comply to PEP 440
         z1!)0z0.0z0.0.0)Za0Zb0Zrc0z.post0z.dev0))rI   rI   )	+ubuntu.0rK   )z	+ubuntu-0rK   )z	+ubuntu_0rK   c                    sN   g | ]F D ]<t gd gD ]$D ]} fdd|D q*q"qqS )rI   c                    s   g | ]}d   |gqS )rI   )join).0loceprr   r   
<listcomp>       zATestPackageIndex.test_egg_fragment.<locals>.<listcomp>.<listcomp>)sum)rM   ZlocsdevlocalpostpreZreleasesrO   r   rS      s
   z6TestPackageIndex.test_egg_fragment.<locals>.<listcomp>z3http://example.com/example-foo.zip#egg=example-foo-r      N)listr   r   Zdistros_for_urlversion)r
   epochversionsr   vcdistsr   rV   r   test_egg_fragmentw   s(    z"TestPackageIndex.test_egg_fragmentc                 C   sr   d}t j }|d }|dddd|g |dd|ddd	g |||}|t|ks\J t|jd
ksnJ d S )Nz7git+https://github.example/group/project@master#egg=foozproject@mastergitclone--quiet$https://github.example/group/projectz-CcheckoutZmaster   )r   r   r   registerdownloadr0   lenZcalls)r
   tmp_pathfpr   r   expected_dirresultr   r   r   test_download_git_with_rev   s    
z+TestPackageIndex.test_download_git_with_revc                 C   s:   d}t j }|d }|dddd|g ||| d S )Nz0git+https://github.example/group/project#egg=fooprojectrc   rd   re   rf   )r   r   r   ri   rj   )r
   rl   rm   r   r   rn   r   r   r   test_download_git_no_rev   s    
z)TestPackageIndex.test_download_git_no_revc                 C   sT   d}t j }d}tjtjj|d ||| W d    n1 sF0    Y  d S )Nz'svn+https://svn.example/project#egg=fooz!.*SVN download is not supported.*r   )	r   r   r   r   r   r-   r.   r/   rj   )r
   rl   r   r   r2   r   r   r   test_download_svn   s
    
z"TestPackageIndex.test_download_svnN)__name__
__module____qualname__r   r    r$   r,   r3   r4   r;   r=   rH   rb   rp   rr   rs   r   r   r   r   r      s   
	,r   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestContentCheckersc                 C   s@   t jjd}|dd |j dks0J | s<J d S )N3http://foo/bar#md5=f12895fdffbd45007040d2e44df98478z$You should probably not be using MD5asciiZ f12895fdffbd45007040d2e44df98478)	r   r   HashCheckerfrom_urlfeedencodehash	hexdigestis_validr
   checkerr   r   r   test_md5   s    zTestContentCheckers.test_md5c                 C   s.   t jjd}|dd | s*J dS )z<Content checks should succeed silently if no hash is presentz1http://foo/bar#something%20completely%20differentanythingry   Nr   r   rz   r{   r|   r}   r   r   r   r   r   test_other_fragment   s
    z'TestContentCheckers.test_other_fragmentc                 C   s.   t jjd}|dd | s*J dS )z0Content checks should succeed if a hash is emptyzhttp://foo/bar#md5=r   ry   Nr   r   r   r   r   test_blank_md5   s    z"TestContentCheckers.test_blank_md5c                 C   s    t jjd}|jdksJ d S )Nrx   md5)r   r   rz   r{   	hash_namer   r   r   r   test_get_hash_name_md5   s    z*TestContentCheckers.test_get_hash_name_md5c                 C   s.   t jjd}|dd d}|dks*J d S )Nrx   c                 S   s   | S )Nr   )xr   r   r   <lambda>   rT   z1TestContentCheckers.test_report.<locals>.<lambda>zMy message about %szMy message about md5)r   r   rz   r{   report)r
   r   repr   r   r   test_report   s
    zTestContentCheckers.test_reportN)rt   ru   rv   r   r   r   r   r   r   r   r   r   rw      s
   rw   c                   @   s   e Zd Zdd ZdS )TestPyPIConfigc                 C   sN   |d }|j tddd tj }|jd }|jdks<J |jdksJJ d S )Nz.pypircz
                [pypi]
                repository=https://pypi.org
                username=jaraco
                password=pity%
                zutf-8)encodingzhttps://pypi.orgZjaracozpity%)
write_textr   r   r   Z
PyPIConfigZcreds_by_repositoryusernamepassword)r
   Ztmp_home_dirZpypirccfgcredr   r   r   test_percent_in_password   s    

z'TestPyPIConfig.test_percent_in_passwordN)rt   ru   rv   r   r   r   r   r   r      s   r   r[   c                   C   s   t jjd dS )z;
    REL should not hang on a contrived attack string.
    a  < rel=                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                N)r   r   ZRELsearchr   r   r   r   test_REL_DoS  s    r   )http.clientr&   r   urllib.errorr   urllib.requestinspectr   r   Zsetuptools.package_indexr   distutils.errorsr-   r   rw   r   marktimeoutr   r   r   r   r   <module>   s    @%
