o
    ZhG"                     @   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di t }tjj|sJ 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docr   r   Y/var/www/html/lang_env/lib/python3.10/site-packages/setuptools/tests/test_packageindex.py
test_regex   s   zTestPackageIndex.test_regexc                 C   sd   t j }d}tjtt|d ||}t	|t
jjs J W d    d S 1 s+w   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   sh   t jjdd}d}tjtt|d ||}t	|t
jjs"J W d    d S 1 s-w   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    d S 1 s(w   Y  d S )Nr!   r"   c                  W   s   t jd)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   sv   t jjdd}d}z
|| W td tjjy: } zt|}d|v s/d|v s/d|v s/J W Y d}~dS d}~ww )	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sJ |d}d}||ks(J |d}d}||ks4J 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 sw   Y  dtjt| d }tj|}d|	 v s8J 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s<J |d j|ksEJ q%d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 | ]# 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>   s    zATestPackageIndex.test_egg_fragment.<locals>.<listcomp>.<listcomp>)sum)rM   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s7J 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   sV   d}t j }d}tjtjj|d ||| W d    d S 1 s$w   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sJ | 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   .   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   r   )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>   s    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s%J 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   Zdistutils.errorsr-   r   rw   r   marktimeoutr   r   r   r   r   <module>   s     @%
