root / env / lib / python2.7 / site-packages / distribute-0.6.19-py2.7.egg / setuptools / tests / test_packageindex.py @ 1a305335
History | View | Annotate | Download (4.27 KB)
1 |
"""Package Index Tests
|
---|---|
2 |
"""
|
3 |
# More would be better!
|
4 |
import sys |
5 |
import os, shutil, tempfile, unittest, urllib2 |
6 |
import pkg_resources |
7 |
import setuptools.package_index |
8 |
from server import IndexServer |
9 |
|
10 |
class TestPackageIndex(unittest.TestCase): |
11 |
|
12 |
def test_bad_urls(self): |
13 |
index = setuptools.package_index.PackageIndex() |
14 |
url = 'http://127.0.0.1:0/nonesuch/test_package_index'
|
15 |
try:
|
16 |
v = index.open_url(url) |
17 |
except Exception, v: |
18 |
self.assert_(url in str(v)) |
19 |
else:
|
20 |
self.assert_(isinstance(v,urllib2.HTTPError)) |
21 |
|
22 |
# issue 16
|
23 |
# easy_install inquant.contentmirror.plone breaks because of a typo
|
24 |
# in its home URL
|
25 |
index = setuptools.package_index.PackageIndex( |
26 |
hosts=('www.example.com',)
|
27 |
) |
28 |
|
29 |
url = 'url:%20https://svn.plone.org/svn/collective/inquant.contentmirror.plone/trunk'
|
30 |
try:
|
31 |
v = index.open_url(url) |
32 |
except Exception, v: |
33 |
self.assert_(url in str(v)) |
34 |
else:
|
35 |
self.assert_(isinstance(v, urllib2.HTTPError)) |
36 |
|
37 |
def _urlopen(*args): |
38 |
import httplib |
39 |
raise httplib.BadStatusLine('line') |
40 |
|
41 |
old_urlopen = urllib2.urlopen |
42 |
urllib2.urlopen = _urlopen |
43 |
url = 'http://example.com'
|
44 |
try:
|
45 |
try:
|
46 |
v = index.open_url(url) |
47 |
except Exception, v: |
48 |
self.assert_('line' in str(v)) |
49 |
else:
|
50 |
raise AssertionError('Should have raise here!') |
51 |
finally:
|
52 |
urllib2.urlopen = old_urlopen |
53 |
|
54 |
# issue 20
|
55 |
url = 'http://http://svn.pythonpaste.org/Paste/wphp/trunk'
|
56 |
try:
|
57 |
index.open_url(url) |
58 |
except Exception, v: |
59 |
self.assert_('nonnumeric port' in str(v)) |
60 |
|
61 |
|
62 |
# issue #160
|
63 |
if sys.version_info[0] == 2 and sys.version_info[1] == 7: |
64 |
# this should not fail
|
65 |
url = 'http://example.com'
|
66 |
page = ('<a href="http://www.famfamfam.com]('
|
67 |
'http://www.famfamfam.com/">')
|
68 |
index.process_index(url, page) |
69 |
|
70 |
|
71 |
def test_url_ok(self): |
72 |
index = setuptools.package_index.PackageIndex( |
73 |
hosts=('www.example.com',)
|
74 |
) |
75 |
url = 'file:///tmp/test_package_index'
|
76 |
self.assert_(index.url_ok(url, True)) |
77 |
|
78 |
def test_links_priority(self): |
79 |
"""
|
80 |
Download links from the pypi simple index should be used before
|
81 |
external download links.
|
82 |
http://bitbucket.org/tarek/distribute/issue/163/md5-validation-error
|
83 |
|
84 |
Usecase :
|
85 |
- someone uploads a package on pypi, a md5 is generated
|
86 |
- someone manually copies this link (with the md5 in the url) onto an
|
87 |
external page accessible from the package page.
|
88 |
- someone reuploads the package (with a different md5)
|
89 |
- while easy_installing, an MD5 error occurs because the external link
|
90 |
is used
|
91 |
-> Distribute should use the link from pypi, not the external one.
|
92 |
"""
|
93 |
# start an index server
|
94 |
server = IndexServer() |
95 |
server.start() |
96 |
index_url = server.base_url() + 'test_links_priority/simple/'
|
97 |
|
98 |
# scan a test index
|
99 |
pi = setuptools.package_index.PackageIndex(index_url) |
100 |
requirement = pkg_resources.Requirement.parse('foobar')
|
101 |
pi.find_packages(requirement) |
102 |
server.stop() |
103 |
|
104 |
# the distribution has been found
|
105 |
self.assert_('foobar' in pi) |
106 |
# we have only one link, because links are compared without md5
|
107 |
self.assert_(len(pi['foobar'])==1) |
108 |
# the link should be from the index
|
109 |
self.assert_('correct_md5' in pi['foobar'][0].location) |
110 |
|
111 |
def test_parse_bdist_wininst(self): |
112 |
self.assertEqual(setuptools.package_index.parse_bdist_wininst(
|
113 |
'reportlab-2.5.win32-py2.4.exe'), ('reportlab-2.5', '2.4', 'win32')) |
114 |
self.assertEqual(setuptools.package_index.parse_bdist_wininst(
|
115 |
'reportlab-2.5.win32.exe'), ('reportlab-2.5', None, 'win32')) |
116 |
self.assertEqual(setuptools.package_index.parse_bdist_wininst(
|
117 |
'reportlab-2.5.win-amd64-py2.7.exe'), ('reportlab-2.5', '2.7', 'win-amd64')) |
118 |
self.assertEqual(setuptools.package_index.parse_bdist_wininst(
|
119 |
'reportlab-2.5.win-amd64.exe'), ('reportlab-2.5', None, 'win-amd64')) |
120 |
|
121 |
|