/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_http.py

  • Committer: John Arbash Meinel
  • Date: 2006-09-12 15:29:07 UTC
  • mto: This revision was merged to the branch mainline in revision 2001.
  • Revision ID: john@arbash-meinel.com-20060912152907-f6f310a88437b17f
NEWS for fixing bug #59835

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
 
20
20
# TODO: Should be renamed to bzrlib.transport.http.tests?
21
21
 
 
22
import socket
 
23
 
22
24
import bzrlib
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
29
31
 
 
32
 
30
33
class FakeManager (object):
 
34
 
31
35
    def __init__(self):
32
36
        self.credentials = []
33
37
        
36
40
 
37
41
 
38
42
class TestHttpUrls(TestCase):
 
43
 
39
44
    def test_url_parsing(self):
40
45
        f = FakeManager()
41
46
        url = extract_auth('http://example.com', f)
42
47
        self.assertEquals('http://example.com', url)
43
48
        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)
 
49
        url = extract_auth('http://user:pass@www.bazaar-vcs.org/bzr/bzr.dev', f)
 
50
        self.assertEquals('http://www.bazaar-vcs.org/bzr/bzr.dev', url)
46
51
        self.assertEquals(1, len(f.credentials))
47
 
        self.assertEquals([None, 'www.bazaar-ng.org', 'user', 'pass'], f.credentials[0])
 
52
        self.assertEquals([None, 'www.bazaar-vcs.org', 'user', 'pass'], f.credentials[0])
48
53
        
49
54
    def test_abs_url(self):
50
55
        """Construction of absolute http URLs"""
51
 
        t = HttpTransport_urllib('http://bazaar-ng.org/bzr/bzr.dev/')
 
56
        t = HttpTransport_urllib('http://bazaar-vcs.org/bzr/bzr.dev/')
52
57
        eq = self.assertEqualDiff
53
58
        eq(t.abspath('.'),
54
 
           'http://bazaar-ng.org/bzr/bzr.dev')
 
59
           'http://bazaar-vcs.org/bzr/bzr.dev')
55
60
        eq(t.abspath('foo/bar'), 
56
 
           'http://bazaar-ng.org/bzr/bzr.dev/foo/bar')
 
61
           'http://bazaar-vcs.org/bzr/bzr.dev/foo/bar')
57
62
        eq(t.abspath('.bzr'),
58
 
           'http://bazaar-ng.org/bzr/bzr.dev/.bzr')
 
63
           'http://bazaar-vcs.org/bzr/bzr.dev/.bzr')
59
64
        eq(t.abspath('.bzr/1//2/./3'),
60
 
           'http://bazaar-ng.org/bzr/bzr.dev/.bzr/1/2/3')
 
65
           'http://bazaar-vcs.org/bzr/bzr.dev/.bzr/1/2/3')
61
66
 
62
67
    def test_invalid_http_urls(self):
63
68
        """Trap invalid construction of urls"""
64
 
        t = HttpTransport_urllib('http://bazaar-ng.org/bzr/bzr.dev/')
 
69
        t = HttpTransport_urllib('http://bazaar-vcs.org/bzr/bzr.dev/')
65
70
        self.assertRaises(ValueError,
66
71
            t.abspath,
67
72
            '.bzr/')
90
95
        except DependencyNotPresent:
91
96
            raise TestSkipped('pycurl not present')
92
97
 
 
98
 
93
99
class TestHttpMixins(object):
94
100
 
95
101
    def _prep_tree(self):
124
130
 
125
131
 
126
132
class TestHttpConnections_urllib(TestCaseWithWebserver, TestHttpMixins):
 
133
 
127
134
    _transport = HttpTransport_urllib
128
135
 
129
136
    def setUp(self):
130
137
        TestCaseWithWebserver.setUp(self)
131
138
        self._prep_tree()
132
139
 
 
140
    def test_has_on_bogus_host(self):
 
141
        import urllib2
 
142
        # Get a random address, so that we can be sure there is no
 
143
        # http handler there.
 
144
        s = socket.socket()
 
145
        s.bind(('localhost', 0))
 
146
        t = self._transport('http://%s:%s/' % s.getsockname())
 
147
        self.assertRaises(urllib2.URLError, t.has, 'foo/bar')
133
148
 
134
149
 
135
150
class TestHttpConnections_pycurl(TestCaseWithWebserver, TestHttpMixins):
159
174
        t = get_transport('http+urllib://bzr.google.com/')
160
175
        self.assertIsInstance(t, Transport)
161
176
        self.assertIsInstance(t, bzrlib.transport.http._urllib.HttpTransport_urllib)
 
177
 
 
178
 
 
179
class TestOffsets(TestCase):
 
180
    """Test offsets_to_ranges method"""
 
181
 
 
182
    def test_offsets_to_ranges_simple(self):
 
183
        to_range = HttpTransportBase.offsets_to_ranges
 
184
        ranges = to_range([(10, 1)])
 
185
        self.assertEqual([[10, 10]], ranges)
 
186
 
 
187
        ranges = to_range([(0, 1), (1, 1)])
 
188
        self.assertEqual([[0, 1]], ranges)
 
189
 
 
190
        ranges = to_range([(1, 1), (0, 1)])
 
191
        self.assertEqual([[0, 1]], ranges)
 
192
 
 
193
    def test_offset_to_ranges_overlapped(self):
 
194
        to_range = HttpTransportBase.offsets_to_ranges
 
195
 
 
196
        ranges = to_range([(10, 1), (20, 2), (22, 5)])
 
197
        self.assertEqual([[10, 10], [20, 26]], ranges)
 
198
 
 
199
        ranges = to_range([(10, 1), (11, 2), (22, 5)])
 
200
        self.assertEqual([[10, 12], [22, 26]], ranges)
 
201
 
 
202
 
 
203
class TestRangeHeader(TestCase):
 
204
    """Test range_header method"""
 
205
 
 
206
    def check_header(self, value, ranges=[], tail=0):
 
207
        range_header = HttpTransportBase.range_header
 
208
        self.assertEqual(value, range_header(ranges, tail))
 
209
 
 
210
    def test_range_header_single(self):
 
211
        self.check_header('0-9', ranges=[[0,9]])
 
212
        self.check_header('100-109', ranges=[[100,109]])
 
213
 
 
214
    def test_range_header_tail(self):
 
215
        self.check_header('-10', tail=10)
 
216
        self.check_header('-50', tail=50)
 
217
 
 
218
    def test_range_header_multi(self):
 
219
        self.check_header('0-9,100-200,300-5000',
 
220
                          ranges=[(0,9), (100, 200), (300,5000)])
 
221
 
 
222
    def test_range_header_mixed(self):
 
223
        self.check_header('0-9,300-5000,-50',
 
224
                          ranges=[(0,9), (300,5000)],
 
225
                          tail=50)