~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_http.py

Merge bzr.dev

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)
65
70
        self.assertRaises(ValueError,
66
71
            t.abspath,
67
72
            '.bzr/')
68
 
        self.assertRaises(ValueError,
69
 
            t.abspath,
70
 
            '/.bzr')
71
73
 
72
74
    def test_http_root_urls(self):
73
75
        """Construction of URLs from server root"""
90
92
        except DependencyNotPresent:
91
93
            raise TestSkipped('pycurl not present')
92
94
 
 
95
 
93
96
class TestHttpMixins(object):
94
97
 
95
98
    def _prep_tree(self):
124
127
 
125
128
 
126
129
class TestHttpConnections_urllib(TestCaseWithWebserver, TestHttpMixins):
 
130
 
127
131
    _transport = HttpTransport_urllib
128
132
 
129
133
    def setUp(self):
130
134
        TestCaseWithWebserver.setUp(self)
131
135
        self._prep_tree()
132
136
 
 
137
    def test_has_on_bogus_host(self):
 
138
        import urllib2
 
139
        # Get a random address, so that we can be sure there is no
 
140
        # http handler there.
 
141
        s = socket.socket()
 
142
        s.bind(('localhost', 0))
 
143
        t = self._transport('http://%s:%s/' % s.getsockname())
 
144
        self.assertRaises(urllib2.URLError, t.has, 'foo/bar')
133
145
 
134
146
 
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)
 
174
 
 
175
 
 
176
class TestOffsets(TestCase):
 
177
    """Test offsets_to_ranges method"""
 
178
 
 
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)
 
183
 
 
184
        ranges = to_range([(0, 1), (1, 1)])
 
185
        self.assertEqual([[0, 1]], ranges)
 
186
 
 
187
        ranges = to_range([(1, 1), (0, 1)])
 
188
        self.assertEqual([[0, 1]], ranges)
 
189
 
 
190
    def test_offset_to_ranges_overlapped(self):
 
191
        to_range = HttpTransportBase.offsets_to_ranges
 
192
 
 
193
        ranges = to_range([(10, 1), (20, 2), (22, 5)])
 
194
        self.assertEqual([[10, 10], [20, 26]], ranges)
 
195
 
 
196
        ranges = to_range([(10, 1), (11, 2), (22, 5)])
 
197
        self.assertEqual([[10, 12], [22, 26]], ranges)
 
198
 
 
199
 
 
200
class TestRangeHeader(TestCase):
 
201
    """Test range_header method"""
 
202
 
 
203
    def check_header(self, value, ranges=[], tail=0):
 
204
        range_header = HttpTransportBase.range_header
 
205
        self.assertEqual(value, range_header(ranges, tail))
 
206
 
 
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]])
 
210
 
 
211
    def test_range_header_tail(self):
 
212
        self.check_header('-10', tail=10)
 
213
        self.check_header('-50', tail=50)
 
214
 
 
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)])
 
218
 
 
219
    def test_range_header_mixed(self):
 
220
        self.check_header('0-9,300-5000,-50',
 
221
                          ranges=[(0,9), (300,5000)],
 
222
                          tail=50)