î
½1kdÉ  ã               @   s¼   d  Z  d d l Z d d l Z d d l Z d d l Z d d l m Z m Z m Z m	 Z	 m
 Z
 d d l Z d d l Z d d l m Z Gd d „  d e j ƒ Z Gd d „  d e j ƒ Z d S)	zPackage Index Tests
é    N)Úurllib2ÚhttplibÚ	HTTPErrorÚunicodeÚpathname2url)ÚIndexServerc               @   sˆ   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 S)ÚTestPackageIndexc             C   s€   t  j j ƒ  } d } y | j | ƒ } Wn; t k
 re t j ƒ  d } |  j | t | ƒ k ƒ Yn X|  j t	 | t
 ƒ ƒ d  S)Nz.http://127.0.0.1:0/nonesuch/test_package_indexé   )Ú
setuptoolsÚpackage_indexÚPackageIndexÚopen_urlÚ	ExceptionÚsysÚexc_infoÚ
assertTrueÚstrÚ
isinstancer   )ÚselfÚindexÚurlÚv© r   úX/var/www/pythonscrapper/code/venv/build/setuptools/setuptools/tests/test_packageindex.pyÚtest_bad_url_bad_port   s    z&TestPackageIndex.test_bad_url_bad_portc             C   s†   t  j j d d ƒ } d } y | j | ƒ } Wn; t k
 rk t j ƒ  d } |  j | t | ƒ k ƒ Yn X|  j t	 | t
 ƒ ƒ d  S)NÚhostsúwww.example.comzMurl:%20https://svn.plone.org/svn/collective/inquant.contentmirror.plone/trunkr	   )r   )r
   r   r   r   r   r   r   r   r   r   r   )r   r   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 } y | j | ƒ } Wn; t k
 r€ t j ƒ  d } |  j d t	 | ƒ k ƒ Yn Xt
 d ƒ ‚ d  S)
Nr   úwww.example.comc              W   s   t  j d ƒ ‚ d  S)NÚline)r   ÚBadStatusLine)Úargsr   r   r   Ú_urlopen/   s    z?TestPackageIndex.test_bad_url_bad_status_line.<locals>._urlopenzhttp://example.comr	   r   zShould have raise here!)r   )r
   r   r   Úopenerr   r   r   r   r   r   ÚAssertionError)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 } y | j | ƒ Wnb t j j k
 r� t j ƒ  d } t	 | ƒ } d | k sˆ d | k sˆ d | k sˆ t
 ‚ d SYn Xt d	 ƒ ‚ d S)zO
        A bad URL with a double scheme should raise a DistutilsError.
        r   úwww.example.comz2http://http://svn.pythonpaste.org/Paste/wphp/trunkr	   znonnumeric portzgetaddrinfo failedzName or service not knownNzDid not raise)r&   )r
   r   r   r   Ú	distutilsÚerrorsÚDistutilsErrorr   r   r   r$   ÚRuntimeError)r   r   r   ÚerrorÚmsgr   r   r   Útest_bad_url_double_scheme<   s    	*	z+TestPackageIndex.test_bad_url_double_schemec             C   s^   t  j j d d	 ƒ } t j d d k rZ t j d d k rZ d } d } | j | | ƒ n  d  S)
Nr   úwww.example.comr   é   r	   é   zhttp://example.comz><a href="http://www.famfamfam.com](http://www.famfamfam.com/">)r.   )r
   r   r   r   Úversion_infoZprocess_index)r   r   r   Úpager   r   r   Útest_bad_url_screwy_hrefO   s    	&z)TestPackageIndex.test_bad_url_screwy_hrefc             C   s8   t  j j d d ƒ } d } |  j | j | d ƒ ƒ d  S)Nr   úwww.example.comzfile:///tmp/test_package_indexT)r4   )r
   r   r   r   Zurl_ok)r   r   r   r   r   r   Útest_url_ok\   s    	zTestPackageIndex.test_url_okc             C   sÆ   t  j j d ƒ r d St ƒ  } | j ƒ  | j ƒ  d } t j j | ƒ } t	 j
 j d ƒ } | j | ƒ | j ƒ  |  j d | k ƒ |  j t | d ƒ d k ƒ |  j d | d d j k ƒ d S)aq  
        Download links from the pypi simple index should be used before
        external download links.
        https://bitbucket.org/tarek/distribute/issue/163

        Usecase :
        - someone uploads a package on pypi, a md5 is generated
        - someone manually copies this link (with the md5 in the url) onto an
          external page accessible from the package page.
        - someone reuploads the package (with a different md5)
        - while easy_installing, an MD5 error occurs because the external link
          is used
        -> Setuptools should use the link from pypi, not the external one.
        ÚjavaNztest_links_priority/simple/Zfoobarr	   Zcorrect_md5r   )r   ÚplatformÚ
startswithr   ÚstartÚbase_urlr
   r   r   Úpkg_resourcesÚRequirementÚparseZfind_packagesÚstopr   ÚlenÚlocation)r   ÚserverÚ	index_urlÚpiÚrequirementr   r   r   Útest_links_priorityc   s    	

z$TestPackageIndex.test_links_priorityc             C   st   |  j  t j j d ƒ d
 ƒ |  j  t j j d ƒ d ƒ |  j  t j j d ƒ d ƒ |  j  t j j d	 ƒ d ƒ d  S)Nzreportlab-2.5.win32-py2.4.exeúreportlab-2.5ú2.4Úwin32zreportlab-2.5.win32.exez!reportlab-2.5.win-amd64-py2.7.exeú2.7ú	win-amd64zreportlab-2.5.win-amd64.exe)rF   rG   úwin32)rF   NrK   )rF   rI   rJ   )rF   NrJ   )ÚassertEqualr
   r   Zparse_bdist_wininst)r   r   r   r   Útest_parse_bdist_wininstˆ   s    z)TestPackageIndex.test_parse_bdist_wininstc             C   sE   t  j j j } | d ƒ \ } } |  j | d ƒ |  j | d ƒ 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_urlrL   )r   Zvsrfur   Úrevr   r   r   Útest__vcs_split_rev_from_url’   s    z-TestPackageIndex.test__vcs_split_rev_from_urlc             C   sƒ   t  d d ƒ } | j d ƒ | j ƒ  z0 d t t j ƒ  ƒ d } t j j | ƒ } Wd t j	 d ƒ Xd | j
 ƒ  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:ú/NÚcontent)ÚopenÚwriteÚcloser   ÚosÚgetcwdr
   r   Z
local_openÚremoveÚreadr$   )r   Úfr   Úresr   r   r   Útest_local_index›   s    
z!TestPackageIndex.test_local_indexN)Ú__name__Ú
__module__Ú__qualname__r   r   r%   r-   r3   r5   rE   rM   rO   r\   r   r   r   r   r      s   %
	r   c               @   sL   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 j d ƒ } | j d j d ƒ ƒ |  j | j j ƒ  d ƒ |  j	 | j
 ƒ  ƒ d  S)Nz3http://foo/bar#md5=f12895fdffbd45007040d2e44df98478z$You should probably not be using MD5ÚasciiZ f12895fdffbd45007040d2e44df98478)r
   r   ÚHashCheckerÚfrom_urlÚfeedÚencoderL   ÚhashÚ	hexdigestr   Úis_valid)r   Úcheckerr   r   r   Útest_md5¬   s    	zTestContentCheckers.test_md5c             C   sB   t  j j j d ƒ } | j d j d ƒ ƒ |  j | j ƒ  ƒ d S)z<Content checks should succeed silently if no hash is presentz1http://foo/bar#something%20completely%20differentÚanythingra   N)r
   r   rb   rc   rd   re   r   rh   )r   ri   r   r   r   Útest_other_fragment´   s    	z'TestContentCheckers.test_other_fragmentc             C   sB   t  j j j d ƒ } | j d j d ƒ ƒ |  j | j ƒ  ƒ d S)z0Content checks should succeed if a hash is emptyzhttp://foo/bar#md5=rk   ra   N)r
   r   rb   rc   rd   re   r   rh   )r   ri   r   r   r   Útest_blank_md5»   s    	z"TestContentCheckers.test_blank_md5c             C   s,   t  j j j d ƒ } |  j | j d ƒ d  S)Nz3http://foo/bar#md5=f12895fdffbd45007040d2e44df98478Úmd5)r
   r   rb   rc   rL   Ú	hash_name)r   ri   r   r   r   Útest_get_hash_name_md5Â   s    	z*TestContentCheckers.test_get_hash_name_md5c             C   sA   t  j j j d ƒ } | j d d „  d ƒ } |  j | d ƒ d  S)Nz3http://foo/bar#md5=f12895fdffbd45007040d2e44df98478c             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   rb   rc   ÚreportrL   )r   ri   Zrepr   r   r   Útest_reportÇ   s    	zTestContentCheckers.test_reportN)r]   r^   r_   rj   rl   rm   rp   rt   r   r   r   r   r`   ª   s
   r`   )Ú__doc__r   rV   Zunittestr;   Zsetuptools.compatr   r   r   r   r   Zdistutils.errorsr'   Zsetuptools.package_indexr
   Zsetuptools.tests.serverr   ZTestCaser   r`   r   r   r   r   Ú<module>   s   (ž