172
172
def test_offsets_to_ranges_simple(self):
173
173
to_range = HttpTransportBase.offsets_to_ranges
174
ranges, tail = to_range([(10, 1)])
174
ranges = to_range([(10, 1)])
175
175
self.assertEqual([[10, 10]], ranges)
176
self.assertEqual(0, tail)
178
ranges, tail = to_range([(0, 1), (1, 1)])
179
self.assertEqual([[0, 1]], ranges)
180
self.assertEqual(0, tail)
182
ranges, tail = to_range([(1, 1), (0, 1)])
183
self.assertEqual([[0, 1]], ranges)
184
self.assertEqual(0, tail)
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)
186
183
def test_offset_to_ranges_overlapped(self):
187
184
to_range = HttpTransportBase.offsets_to_ranges
189
ranges, tail = to_range([(10, 1), (20, 2), (22, 5)])
190
self.assertEquals(tuple(ranges[0]), (10, 10))
191
self.assertEquals(tuple(ranges[1]), (20, 26))
192
self.assertEquals(tail, 0)
194
ranges, tail = to_range([(10, 1), (11, 2), (22, 5), (-4, 4)])
195
self.assertEquals(tuple(ranges[0]), (10, 12))
196
self.assertEquals(tuple(ranges[1]), (22, 26))
197
self.assertEquals(tail, 4)
199
def test_offset_to_ranges_tail(self):
200
to_range = HttpTransportBase.offsets_to_ranges
202
ranges, tail = to_range([(-4, 4), (-8, 8)])
203
self.assertEquals(tuple(ranges), ())
204
self.assertEquals(tail, 8)
206
def test_offset_to_ranges_fudge(self):
207
to_range = HttpTransportBase.offsets_to_ranges
209
ranges, tail = to_range([(10, 1), (20, 2)], fudge_factor=9)
210
self.assertEquals(tuple(ranges[0]), (10, 21))
211
self.assertEquals(len(ranges), 1)
212
self.assertEquals(tail, 0)
214
ranges, tail = to_range([(10, 1), (20, 2)], fudge_factor=8)
215
self.assertEquals(tuple(ranges[0]), (10, 10))
216
self.assertEquals(tuple(ranges[1]), (20, 21))
217
self.assertEquals(tail, 0)
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)
220
193
class TestRangeHeader(TestCase):
225
198
self.assertEqual(value, range_header(ranges, tail))
227
200
def test_range_header_single(self):
228
self.check_header('bytes=0-9', ranges=[[0,9]])
229
self.check_header('bytes=100-109', ranges=[[100,109]])
201
self.check_header('0-9', ranges=[[0,9]])
202
self.check_header('100-109', ranges=[[100,109]])
231
204
def test_range_header_tail(self):
232
self.check_header('bytes=-10', tail=10)
233
self.check_header('bytes=-50', tail=50)
205
self.check_header('-10', tail=10)
206
self.check_header('-50', tail=50)
235
208
def test_range_header_multi(self):
236
self.check_header('bytes=0-9,100-200,300-5000',
209
self.check_header('0-9,100-200,300-5000',
237
210
ranges=[(0,9), (100, 200), (300,5000)])
239
212
def test_range_header_mixed(self):
240
self.check_header('bytes=0-9,300-5000,-50',
213
self.check_header('0-9,300-5000,-50',
241
214
ranges=[(0,9), (300,5000)],