172
179
def test_offsets_to_ranges_simple(self):
173
180
to_range = HttpTransportBase.offsets_to_ranges
174
ranges, tail = to_range([(10, 1)])
181
ranges = to_range([(10, 1)])
175
182
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)
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)
186
190
def test_offset_to_ranges_overlapped(self):
187
191
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)
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)
220
200
class TestRangeHeader(TestCase):
225
205
self.assertEqual(value, range_header(ranges, tail))
227
207
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]])
208
self.check_header('0-9', ranges=[[0,9]])
209
self.check_header('100-109', ranges=[[100,109]])
231
211
def test_range_header_tail(self):
232
self.check_header('bytes=-10', tail=10)
233
self.check_header('bytes=-50', tail=50)
212
self.check_header('-10', tail=10)
213
self.check_header('-50', tail=50)
235
215
def test_range_header_multi(self):
236
self.check_header('bytes=0-9,100-200,300-5000',
216
self.check_header('0-9,100-200,300-5000',
237
217
ranges=[(0,9), (100, 200), (300,5000)])
239
219
def test_range_header_mixed(self):
240
self.check_header('bytes=0-9,300-5000,-50',
220
self.check_header('0-9,300-5000,-50',
241
221
ranges=[(0,9), (300,5000)],