U
    ui#                     @   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   F/tmp/pip-unpacked-wheel-9osl9suo/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st|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   Z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_   r`   ra   )r   r   r   rd   re   )r   rg   rh   r   r   ri   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-   re   )r   rg   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]   rk   rm   ro   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 )N3http://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anythingru   Nr   r   rv   rw   rx   ry   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   ru   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 )Nrt   md5)r   r   rv   rw   	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 )Nrt   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   rv   rw   reportr
   )r   r~   repr   r   r   test_report   s
    zTestContentCheckers.test_reportN)rp   rq   rr   r   r   r   r   r   r   r   r   r   rs      s
   rs   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)rp   rq   rr   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   rn   Zsetuptools.package_indexr   distutils.errorsr+   r   rs   r   marktimeoutr   r   r   r   r   <module>   s    L%
