20
20
# TODO: Should be renamed to bzrlib.transport.http.tests?
23
25
from bzrlib.errors import DependencyNotPresent
24
26
from bzrlib.tests import TestCase, TestSkipped
25
27
from bzrlib.transport import Transport
26
from bzrlib.transport.http import extract_auth
28
from bzrlib.transport.http import extract_auth, HttpTransportBase
27
29
from bzrlib.transport.http._urllib import HttpTransport_urllib
28
30
from bzrlib.tests.HTTPTestUtil import TestCaseWithWebserver
30
33
class FakeManager (object):
31
35
def __init__(self):
32
36
self.credentials = []
126
129
class TestHttpConnections_urllib(TestCaseWithWebserver, TestHttpMixins):
127
131
_transport = HttpTransport_urllib
130
134
TestCaseWithWebserver.setUp(self)
131
135
self._prep_tree()
137
def test_has_on_bogus_host(self):
139
# Get a random address, so that we can be sure there is no
140
# http handler there.
142
s.bind(('localhost', 0))
143
t = self._transport('http://%s:%s/' % s.getsockname())
144
self.assertRaises(urllib2.URLError, t.has, 'foo/bar')
135
147
class TestHttpConnections_pycurl(TestCaseWithWebserver, TestHttpMixins):
159
171
t = get_transport('http+urllib://bzr.google.com/')
160
172
self.assertIsInstance(t, Transport)
161
173
self.assertIsInstance(t, bzrlib.transport.http._urllib.HttpTransport_urllib)
176
class TestOffsets(TestCase):
177
"""Test offsets_to_ranges method"""
179
def test_offsets_to_ranges_simple(self):
180
to_range = HttpTransportBase.offsets_to_ranges
181
ranges = to_range([(10, 1)])
182
self.assertEqual([[10, 10]], ranges)
184
ranges = to_range([(0, 1), (1, 1)])
185
self.assertEqual([[0, 1]], ranges)
187
ranges = to_range([(1, 1), (0, 1)])
188
self.assertEqual([[0, 1]], ranges)
190
def test_offset_to_ranges_overlapped(self):
191
to_range = HttpTransportBase.offsets_to_ranges
193
ranges = to_range([(10, 1), (20, 2), (22, 5)])
194
self.assertEqual([[10, 10], [20, 26]], ranges)
196
ranges = to_range([(10, 1), (11, 2), (22, 5)])
197
self.assertEqual([[10, 12], [22, 26]], ranges)
200
class TestRangeHeader(TestCase):
201
"""Test range_header method"""
203
def check_header(self, value, ranges=[], tail=0):
204
range_header = HttpTransportBase.range_header
205
self.assertEqual(value, range_header(ranges, tail))
207
def test_range_header_single(self):
208
self.check_header('0-9', ranges=[[0,9]])
209
self.check_header('100-109', ranges=[[100,109]])
211
def test_range_header_tail(self):
212
self.check_header('-10', tail=10)
213
self.check_header('-50', tail=50)
215
def test_range_header_multi(self):
216
self.check_header('0-9,100-200,300-5000',
217
ranges=[(0,9), (100, 200), (300,5000)])
219
def test_range_header_mixed(self):
220
self.check_header('0-9,300-5000,-50',
221
ranges=[(0,9), (300,5000)],