23
23
from bzrlib.errors import DependencyNotPresent
24
24
from bzrlib.tests import TestCase, TestSkipped
25
25
from bzrlib.transport import Transport
26
from bzrlib.transport.http import extract_auth
26
from bzrlib.transport.http import extract_auth, HttpTransportBase
27
27
from bzrlib.transport.http._urllib import HttpTransport_urllib
28
28
from bzrlib.tests.HTTPTestUtil import TestCaseWithWebserver
30
31
class FakeManager (object):
31
33
def __init__(self):
32
34
self.credentials = []
38
40
class TestHttpUrls(TestCase):
39
42
def test_url_parsing(self):
41
44
url = extract_auth('http://example.com', f)
42
45
self.assertEquals('http://example.com', url)
43
46
self.assertEquals(0, len(f.credentials))
44
url = extract_auth('http://user:pass@www.bazaar-ng.org/bzr/bzr.dev', f)
45
self.assertEquals('http://www.bazaar-ng.org/bzr/bzr.dev', url)
47
url = extract_auth('http://user:pass@www.bazaar-vcs.org/bzr/bzr.dev', f)
48
self.assertEquals('http://www.bazaar-vcs.org/bzr/bzr.dev', url)
46
49
self.assertEquals(1, len(f.credentials))
47
self.assertEquals([None, 'www.bazaar-ng.org', 'user', 'pass'], f.credentials[0])
50
self.assertEquals([None, 'www.bazaar-vcs.org', 'user', 'pass'], f.credentials[0])
49
52
def test_abs_url(self):
50
53
"""Construction of absolute http URLs"""
51
t = HttpTransport_urllib('http://bazaar-ng.org/bzr/bzr.dev/')
54
t = HttpTransport_urllib('http://bazaar-vcs.org/bzr/bzr.dev/')
52
55
eq = self.assertEqualDiff
54
'http://bazaar-ng.org/bzr/bzr.dev')
57
'http://bazaar-vcs.org/bzr/bzr.dev')
55
58
eq(t.abspath('foo/bar'),
56
'http://bazaar-ng.org/bzr/bzr.dev/foo/bar')
59
'http://bazaar-vcs.org/bzr/bzr.dev/foo/bar')
57
60
eq(t.abspath('.bzr'),
58
'http://bazaar-ng.org/bzr/bzr.dev/.bzr')
61
'http://bazaar-vcs.org/bzr/bzr.dev/.bzr')
59
62
eq(t.abspath('.bzr/1//2/./3'),
60
'http://bazaar-ng.org/bzr/bzr.dev/.bzr/1/2/3')
63
'http://bazaar-vcs.org/bzr/bzr.dev/.bzr/1/2/3')
62
65
def test_invalid_http_urls(self):
63
66
"""Trap invalid construction of urls"""
64
t = HttpTransport_urllib('http://bazaar-ng.org/bzr/bzr.dev/')
67
t = HttpTransport_urllib('http://bazaar-vcs.org/bzr/bzr.dev/')
65
68
self.assertRaises(ValueError,
159
164
t = get_transport('http+urllib://bzr.google.com/')
160
165
self.assertIsInstance(t, Transport)
161
166
self.assertIsInstance(t, bzrlib.transport.http._urllib.HttpTransport_urllib)
169
class TestOffsets(TestCase):
170
"""Test offsets_to_ranges method"""
172
def test_offsets_to_ranges_simple(self):
173
to_range = HttpTransportBase.offsets_to_ranges
174
ranges = to_range([(10, 1)])
175
self.assertEqual([[10, 10]], ranges)
177
ranges = to_range([(0, 1), (1, 1)])
178
self.assertEqual([[0, 1]], ranges)
180
ranges = to_range([(1, 1), (0, 1)])
181
self.assertEqual([[0, 1]], ranges)
183
def test_offset_to_ranges_overlapped(self):
184
to_range = HttpTransportBase.offsets_to_ranges
186
ranges = to_range([(10, 1), (20, 2), (22, 5)])
187
self.assertEqual([[10, 10], [20, 26]], ranges)
189
ranges = to_range([(10, 1), (11, 2), (22, 5)])
190
self.assertEqual([[10, 12], [22, 26]], ranges)
193
class TestRangeHeader(TestCase):
194
"""Test range_header method"""
196
def check_header(self, value, ranges=[], tail=0):
197
range_header = HttpTransportBase.range_header
198
self.assertEqual(value, range_header(ranges, tail))
200
def test_range_header_single(self):
201
self.check_header('0-9', ranges=[[0,9]])
202
self.check_header('100-109', ranges=[[100,109]])
204
def test_range_header_tail(self):
205
self.check_header('-10', tail=10)
206
self.check_header('-50', tail=50)
208
def test_range_header_multi(self):
209
self.check_header('0-9,100-200,300-5000',
210
ranges=[(0,9), (100, 200), (300,5000)])
212
def test_range_header_mixed(self):
213
self.check_header('0-9,300-5000,-50',
214
ranges=[(0,9), (300,5000)],