Merge "Stop overriding builtin range"

This commit is contained in:
Jenkins 2016-01-22 10:40:47 +00:00 committed by Gerrit Code Review
commit b49ddf847d
2 changed files with 61 additions and 59 deletions

View File

@ -461,13 +461,13 @@ class SloGetContext(WSGIContext):
# no bytes are needed from this or any future segment # no bytes are needed from this or any future segment
break break
range = seg_dict.get('range') seg_range = seg_dict.get('range')
if range is None: if seg_range is None:
range_start, range_end = 0, seg_length - 1 range_start, range_end = 0, seg_length - 1
else: else:
# We already validated and supplied concrete values # We already validated and supplied concrete values
# for the range on upload # for the range on upload
range_start, range_end = map(int, range.split('-')) range_start, range_end = map(int, seg_range.split('-'))
if config_true_value(seg_dict.get('sub_slo')): if config_true_value(seg_dict.get('sub_slo')):
# do this check here so that we can avoid fetching this last # do this check here so that we can avoid fetching this last

View File

@ -158,120 +158,122 @@ class TestHeaderKeyDict(unittest.TestCase):
class TestRange(unittest.TestCase): class TestRange(unittest.TestCase):
def test_range(self): def test_range(self):
range = swift.common.swob.Range('bytes=1-7') swob_range = swift.common.swob.Range('bytes=1-7')
self.assertEqual(range.ranges[0], (1, 7)) self.assertEqual(swob_range.ranges[0], (1, 7))
def test_upsidedown_range(self): def test_upsidedown_range(self):
range = swift.common.swob.Range('bytes=5-10') swob_range = swift.common.swob.Range('bytes=5-10')
self.assertEqual(range.ranges_for_length(2), []) self.assertEqual(swob_range.ranges_for_length(2), [])
def test_str(self): def test_str(self):
for range_str in ('bytes=1-7', 'bytes=1-', 'bytes=-1', for range_str in ('bytes=1-7', 'bytes=1-', 'bytes=-1',
'bytes=1-7,9-12', 'bytes=-7,9-'): 'bytes=1-7,9-12', 'bytes=-7,9-'):
range = swift.common.swob.Range(range_str) swob_range = swift.common.swob.Range(range_str)
self.assertEqual(str(range), range_str) self.assertEqual(str(swob_range), range_str)
def test_ranges_for_length(self): def test_ranges_for_length(self):
range = swift.common.swob.Range('bytes=1-7') swob_range = swift.common.swob.Range('bytes=1-7')
self.assertEqual(range.ranges_for_length(10), [(1, 8)]) self.assertEqual(swob_range.ranges_for_length(10), [(1, 8)])
self.assertEqual(range.ranges_for_length(5), [(1, 5)]) self.assertEqual(swob_range.ranges_for_length(5), [(1, 5)])
self.assertEqual(range.ranges_for_length(None), None) self.assertEqual(swob_range.ranges_for_length(None), None)
def test_ranges_for_large_length(self): def test_ranges_for_large_length(self):
range = swift.common.swob.Range('bytes=-1000000000000000000000000000') swob_range = swift.common.swob.Range('bytes=-100000000000000000000000')
self.assertEqual(range.ranges_for_length(100), [(0, 100)]) self.assertEqual(swob_range.ranges_for_length(100), [(0, 100)])
def test_ranges_for_length_no_end(self): def test_ranges_for_length_no_end(self):
range = swift.common.swob.Range('bytes=1-') swob_range = swift.common.swob.Range('bytes=1-')
self.assertEqual(range.ranges_for_length(10), [(1, 10)]) self.assertEqual(swob_range.ranges_for_length(10), [(1, 10)])
self.assertEqual(range.ranges_for_length(5), [(1, 5)]) self.assertEqual(swob_range.ranges_for_length(5), [(1, 5)])
self.assertEqual(range.ranges_for_length(None), None) self.assertEqual(swob_range.ranges_for_length(None), None)
# This used to freak out: # This used to freak out:
range = swift.common.swob.Range('bytes=100-') swob_range = swift.common.swob.Range('bytes=100-')
self.assertEqual(range.ranges_for_length(5), []) self.assertEqual(swob_range.ranges_for_length(5), [])
self.assertEqual(range.ranges_for_length(None), None) self.assertEqual(swob_range.ranges_for_length(None), None)
range = swift.common.swob.Range('bytes=4-6,100-') swob_range = swift.common.swob.Range('bytes=4-6,100-')
self.assertEqual(range.ranges_for_length(5), [(4, 5)]) self.assertEqual(swob_range.ranges_for_length(5), [(4, 5)])
def test_ranges_for_length_no_start(self): def test_ranges_for_length_no_start(self):
range = swift.common.swob.Range('bytes=-7') swob_range = swift.common.swob.Range('bytes=-7')
self.assertEqual(range.ranges_for_length(10), [(3, 10)]) self.assertEqual(swob_range.ranges_for_length(10), [(3, 10)])
self.assertEqual(range.ranges_for_length(5), [(0, 5)]) self.assertEqual(swob_range.ranges_for_length(5), [(0, 5)])
self.assertEqual(range.ranges_for_length(None), None) self.assertEqual(swob_range.ranges_for_length(None), None)
range = swift.common.swob.Range('bytes=4-6,-100') swob_range = swift.common.swob.Range('bytes=4-6,-100')
self.assertEqual(range.ranges_for_length(5), [(4, 5), (0, 5)]) self.assertEqual(swob_range.ranges_for_length(5), [(4, 5), (0, 5)])
def test_ranges_for_length_multi(self): def test_ranges_for_length_multi(self):
range = swift.common.swob.Range('bytes=-20,4-') swob_range = swift.common.swob.Range('bytes=-20,4-')
self.assertEqual(len(range.ranges_for_length(200)), 2) self.assertEqual(len(swob_range.ranges_for_length(200)), 2)
# the actual length greater than each range element # the actual length greater than each range element
self.assertEqual(range.ranges_for_length(200), [(180, 200), (4, 200)]) self.assertEqual(swob_range.ranges_for_length(200),
[(180, 200), (4, 200)])
range = swift.common.swob.Range('bytes=30-150,-10') swob_range = swift.common.swob.Range('bytes=30-150,-10')
self.assertEqual(len(range.ranges_for_length(200)), 2) self.assertEqual(len(swob_range.ranges_for_length(200)), 2)
# the actual length lands in the middle of a range # the actual length lands in the middle of a range
self.assertEqual(range.ranges_for_length(90), [(30, 90), (80, 90)]) self.assertEqual(swob_range.ranges_for_length(90),
[(30, 90), (80, 90)])
# the actual length greater than any of the range # the actual length greater than any of the range
self.assertEqual(range.ranges_for_length(200), self.assertEqual(swob_range.ranges_for_length(200),
[(30, 151), (190, 200)]) [(30, 151), (190, 200)])
self.assertEqual(range.ranges_for_length(None), None) self.assertEqual(swob_range.ranges_for_length(None), None)
def test_ranges_for_length_edges(self): def test_ranges_for_length_edges(self):
range = swift.common.swob.Range('bytes=0-1, -7') swob_range = swift.common.swob.Range('bytes=0-1, -7')
self.assertEqual(range.ranges_for_length(10), self.assertEqual(swob_range.ranges_for_length(10),
[(0, 2), (3, 10)]) [(0, 2), (3, 10)])
range = swift.common.swob.Range('bytes=-7, 0-1') swob_range = swift.common.swob.Range('bytes=-7, 0-1')
self.assertEqual(range.ranges_for_length(10), self.assertEqual(swob_range.ranges_for_length(10),
[(3, 10), (0, 2)]) [(3, 10), (0, 2)])
range = swift.common.swob.Range('bytes=-7, 0-1') swob_range = swift.common.swob.Range('bytes=-7, 0-1')
self.assertEqual(range.ranges_for_length(5), self.assertEqual(swob_range.ranges_for_length(5),
[(0, 5), (0, 2)]) [(0, 5), (0, 2)])
def test_ranges_for_length_overlapping(self): def test_ranges_for_length_overlapping(self):
# Fewer than 3 overlaps is okay # Fewer than 3 overlaps is okay
range = swift.common.swob.Range('bytes=10-19,15-24') swob_range = swift.common.swob.Range('bytes=10-19,15-24')
self.assertEqual(range.ranges_for_length(100), self.assertEqual(swob_range.ranges_for_length(100),
[(10, 20), (15, 25)]) [(10, 20), (15, 25)])
range = swift.common.swob.Range('bytes=10-19,15-24,20-29') swob_range = swift.common.swob.Range('bytes=10-19,15-24,20-29')
self.assertEqual(range.ranges_for_length(100), self.assertEqual(swob_range.ranges_for_length(100),
[(10, 20), (15, 25), (20, 30)]) [(10, 20), (15, 25), (20, 30)])
# Adjacent ranges, though suboptimal, don't overlap # Adjacent ranges, though suboptimal, don't overlap
range = swift.common.swob.Range('bytes=10-19,20-29,30-39') swob_range = swift.common.swob.Range('bytes=10-19,20-29,30-39')
self.assertEqual(range.ranges_for_length(100), self.assertEqual(swob_range.ranges_for_length(100),
[(10, 20), (20, 30), (30, 40)]) [(10, 20), (20, 30), (30, 40)])
# Ranges that share a byte do overlap # Ranges that share a byte do overlap
range = swift.common.swob.Range('bytes=10-20,20-30,30-40,40-50') swob_range = swift.common.swob.Range('bytes=10-20,20-30,30-40,40-50')
self.assertEqual(range.ranges_for_length(100), []) self.assertEqual(swob_range.ranges_for_length(100), [])
# With suffix byte range specs (e.g. bytes=-2), make sure that we # With suffix byte range specs (e.g. bytes=-2), make sure that we
# correctly determine overlapping-ness based on the entity length # correctly determine overlapping-ness based on the entity length
range = swift.common.swob.Range('bytes=10-15,15-20,30-39,-9') swob_range = swift.common.swob.Range('bytes=10-15,15-20,30-39,-9')
self.assertEqual(range.ranges_for_length(100), self.assertEqual(swob_range.ranges_for_length(100),
[(10, 16), (15, 21), (30, 40), (91, 100)]) [(10, 16), (15, 21), (30, 40), (91, 100)])
self.assertEqual(range.ranges_for_length(20), []) self.assertEqual(swob_range.ranges_for_length(20), [])
def test_ranges_for_length_nonascending(self): def test_ranges_for_length_nonascending(self):
few_ranges = ("bytes=100-109,200-209,300-309,500-509," few_ranges = ("bytes=100-109,200-209,300-309,500-509,"
"400-409,600-609,700-709") "400-409,600-609,700-709")
many_ranges = few_ranges + ",800-809" many_ranges = few_ranges + ",800-809"
range = swift.common.swob.Range(few_ranges) swob_range = swift.common.swob.Range(few_ranges)
self.assertEqual(range.ranges_for_length(100000), self.assertEqual(swob_range.ranges_for_length(100000),
[(100, 110), (200, 210), (300, 310), (500, 510), [(100, 110), (200, 210), (300, 310), (500, 510),
(400, 410), (600, 610), (700, 710)]) (400, 410), (600, 610), (700, 710)])
range = swift.common.swob.Range(many_ranges) swob_range = swift.common.swob.Range(many_ranges)
self.assertEqual(range.ranges_for_length(100000), []) self.assertEqual(swob_range.ranges_for_length(100000), [])
def test_ranges_for_length_too_many(self): def test_ranges_for_length_too_many(self):
at_the_limit_ranges = ( at_the_limit_ranges = (