U
    aÊ¹j#  ã                   @   s~   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   s4   d}|d7 }d  ¡ jf tƒ Ž}tjj |¡s0t‚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ÚAssertionError)ÚselfZhash_urlÚdoc© r   úa/var/www/html/bwave/python/venv/lib/python3.8/site-packages/setuptools/tests/test_packageindex.pyÚ
test_regex   s    
üzTestPackageIndex.test_regexc              
   C   sf   t j ¡ }d}z| |¡}W n2 tk
rN } z|t|ƒks>t‚W 5 d }~X Y nX t|tj	j
ƒsbt‚d S )Nz.http://127.0.0.1:0/nonesuch/test_package_index©r   r   ÚPackageIndexÚopen_urlÚ	ExceptionÚstrr
   Ú
isinstanceÚurllibÚerrorÚ	HTTPError©r   ÚindexÚurlÚvÚexcr   r   r   Útest_bad_url_bad_port   s    
"z&TestPackageIndex.test_bad_url_bad_portc              
   C   sj   t jjdd�}d}z| |¡}W n2 tk
rR } z|t|ƒksBt‚W 5 d }~X Y nX t|tj	j
ƒsft‚d S )N©zwww.example.com©ÚhostszMurl:%20https://svn.plone.org/svn/collective/inquant.contentmirror.plone/trunkr   r   r   r   r   Útest_bad_url_typo"   s    ÿ"z"TestPackageIndex.test_bad_url_typoc              
   C   sn   t jjdd�}dd„ }||_d}z| |¡ W n2 tk
r` } zdt|ƒksPt‚W 5 d }~X Y n
X tdƒ‚d S )Nr   r    c                  W   s   t j d¡‚d S )NÚline)ÚhttpÚclientÚBadStatusLine)Úargsr   r   r   Ú_urlopen6   s    z?TestPackageIndex.test_bad_url_bad_status_line.<locals>._urlopenzhttp://example.comr#   zShould have raise here!)r   r   r   Úopenerr   r   r   r
   )r   r   r(   r   r   r   r   r   Útest_bad_url_bad_status_line3   s    "z-TestPackageIndex.test_bad_url_bad_status_linec              
   C   s~   t jjdd�}d}z| |¡ W nP tjjk
rp } z.t|ƒ}d|ksZd|ksZd|ksZt‚W Y ¢dS d}~X Y nX 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ÚDistutilsErrorr   r
   ÚRuntimeError)r   r   r   r   Úmsgr   r   r   Útest_bad_url_double_schemeB   s    ÿþýz+TestPackageIndex.test_bad_url_double_schemec                 C   s&   t jjdd�}d}| |d¡s"t‚d S )Nr   r    zfile:///tmp/test_package_indexT)r   r   r   Zurl_okr
   )r   r   r   r   r   r   Útest_url_okV   s    zTestPackageIndex.test_url_okc                 C   sl   t jj}|dƒ}d}||ks t‚|dƒ}d}||ks8t‚|dƒ}d}||ksPt‚|dƒ}d}||ksht‚d S )	Nzreportlab-2.5.win32-py2.4.exe)úreportlab-2.5z2.4Úwin32zreportlab-2.5.win32.exe)r2   Nr3   z!reportlab-2.5.win-amd64-py2.7.exe)r2   z2.7ú	win-amd64zreportlab-2.5.win-amd64.exe)r2   Nr4   )r   r   Zparse_bdist_wininstr
   )r   ÚparseÚactualÚexpectedr   r   r   Útest_parse_bdist_wininst[   s    z)TestPackageIndex.test_parse_bdist_wininstc                 C   s2   t jjj}|dƒ\}}|dks"t‚|dks.t‚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_urlr
   )r   Zvsrfur   Úrevr   r   r   Útest__vcs_split_rev_from_urln   s    
z-TestPackageIndex.test__vcs_split_rev_from_urlc              	   C   s`   |d }|  d¡�}| d¡ W 5 Q R X dtj t|ƒ¡ d }tj |¡}d| 	¡ ks\t
‚dS )zR
        local_open should be able to read an index from the file system.
        z
index.htmlÚwz<div>content</div>zfile:ú/ÚcontentN)ÚopenÚwriter   ÚrequestÚpathname2urlr   r   r   Z
local_openÚreadr
   )r   ZtmpdirZ
index_fileÚfr   Úresr   r   r   Útest_local_indexw   s    z!TestPackageIndex.test_local_indexc                    s˜   ddg}dddg‰dddg‰d	g‰d
g‰ ddddg‰‡ ‡‡‡‡fdd„|D ƒ}|D ]@\}}t tj d| ¡ƒ}|d jdks€t‚|d j|ksRt‚qRdS )z6
        EGG fragments must comply to PEP 440
        Ú z1!Ú0z0.0z0.0.0Za0Zb0Zrc0z.post0z.dev0)rF   rF   )ú	+ubuntu.0rH   )z	+ubuntu-0rH   )z	+ubuntu_0rH   c                    sN   g | ]F‰ ˆD ]<‰t ˆˆˆgd gƒD ]$‰ˆD ]}‡ ‡‡fdd„|D ƒ‘q*q"qqS )rF   c                    s   g | ]}d   ˆ ˆˆ|g¡‘qS )rF   )Újoin)Ú.0Úloc©ÚeÚpÚrr   r   Ú
<listcomp>Ÿ   s     zATestPackageIndex.test_egg_fragment.<locals>.<listcomp>.<listcomp>)Úsum)rJ   Zlocs©ÚdevÚlocalÚpostÚpreZreleasesrL   r   rP   ž   s      üz6TestPackageIndex.test_egg_fragment.<locals>.<listcomp>z3http://example.com/example-foo.zip#egg=example-foo-r   é   N)Úlistr   r   Zdistros_for_urlÚversionr
   )r   ÚepochÚversionsr   ÚvcÚdistsr   rR   r   Útest_egg_fragment‚   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\t‚t|jƒd
ksnt‚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Údownloadr   r
   Ú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Úprojectr_   r`   ra   rb   )r   r   r   re   rf   )r   rh   ri   r   r   rj   r   r   r   Útest_download_git_no_revÁ   s    
ûz)TestPackageIndex.test_download_git_no_revc              	   C   s@   d}t j ¡ }d}tjtjj|d�� | ||¡ W 5 Q R X d S )Nz'svn+https://svn.example/project#egg=fooz!.*SVN download is not supported.*)r	   )	r   r   r   ÚpytestZraisesr+   r,   r-   rf   )r   rh   r   r   r/   r   r   r   Útest_download_svnÏ   s
    
z"TestPackageIndex.test_download_svnN)Ú__name__Ú
__module__Ú__qualname__r   r   r"   r*   r0   r1   r8   r:   rE   r^   rl   rn   rp   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s0t‚| 	¡ s<t‚d S )Nú3http://foo/bar#md5=f12895fdffbd45007040d2e44df98478z$You should probably not be using MD5ÚasciiZ f12895fdffbd45007040d2e44df98478)
r   r   ÚHashCheckerÚfrom_urlÚfeedÚencodeÚhashÚ	hexdigestr
   Úis_valid©r   Úcheckerr   r   r   Útest_md5Ù   s    ÿzTestContentCheckers.test_md5c                 C   s.   t jj d¡}| d d¡¡ | ¡ s*t‚dS )z<Content checks should succeed silently if no hash is presentz1http://foo/bar#something%20completely%20differentÚanythingrv   N©r   r   rw   rx   ry   rz   r}   r
   r~   r   r   r   Útest_other_fragmentá   s
    ÿz'TestContentCheckers.test_other_fragmentc                 C   s.   t jj d¡}| d d¡¡ | ¡ s*t‚dS )z0Content checks should succeed if a hash is emptyzhttp://foo/bar#md5=r�   rv   Nr‚   r~   r   r   r   Útest_blank_md5é   s    z"TestContentCheckers.test_blank_md5c                 C   s    t jj d¡}|jdkst‚d S )Nru   Úmd5)r   r   rw   rx   Ú	hash_namer
   r~   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*t‚d S )Nru   c                 S   s   | S )Nr   )Úxr   r   r   Ú<lambda>ù   ó    z1TestContentCheckers.test_report.<locals>.<lambda>zMy message about %szMy message about md5)r   r   rw   rx   Úreportr
   )r   r   Úrepr   r   r   Útest_reportõ   s
    ÿzTestContentCheckers.test_reportN)rq   rr   rs   r€   rƒ   r„   r‡   r�   r   r   r   r   rt   Ø   s
   rt   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<t‚|jdksJt‚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Úusernamer
   Úpassword)r   Ztmp_home_dirZpypircÚcfgÚcredr   r   r   Útest_percent_in_passwordþ   s    ÿ÷

z'TestPyPIConfig.test_percent_in_passwordN)rq   rr   rs   r•   r   r   r   r   rŽ   ý   s   rŽ   rW   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$   Úurllib.errorr   Úurllib.requestÚinspectr   ro   Zsetuptools.package_indexr   Údistutils.errorsr+   r   rt   rŽ   ÚmarkÚtimeoutr—   r   r   r   r   Ú<module>   s    L%
