Renamed endpoint /range-request -> /range

This commit is contained in:
David Shirley
2015-01-26 13:51:47 -08:00
parent 548e4df1f2
commit 7e18da5ae9
4 changed files with 23 additions and 23 deletions
+2 -2
View File
@@ -40,7 +40,7 @@ Endpoint Description
`/stream/:n`_ Streams *n* 100 lines.
`/delay/:n`_ Delays responding for *n* 10 seconds.
`/drip`_ Drips data over a duration after an optional initial delay, then (optionally) returns with the given status code.
`/range-request/:n`_ Streams *n* bytes, and allows specifying a *Range* header to select a subset of the data. Accepts a *chunk\_size* and request *duration* parameter.
`/range/:n`_ Streams *n* bytes, and allows specifying a *Range* header to select a subset of the data. Accepts a *chunk\_size* and request *duration* parameter.
`/html`_ Renders an HTML Page.
`/robots.txt`_ Returns some robots.txt rules.
`/deny`_ Denied by robots.txt file.
@@ -75,7 +75,7 @@ Endpoint Description
.. _/stream/:n: http://httpbin.org/stream/20
.. _/delay/:n: http://httpbin.org/delay/3
.. _/drip: http://httpbin.org/drip?numbytes=5&duration=5&code=200
.. _/range-request/:n: http://httpbin.org/range-request/1024
.. _/range/:n: http://httpbin.org/range/1024
.. _/html: http://httpbin.org/html
.. _/robots.txt: http://httpbin.org/robots.txt
.. _/deny: http://httpbin.org/deny
+4 -4
View File
@@ -541,13 +541,13 @@ def stream_random_bytes(n):
return Response(generate_bytes(), headers=headers)
@app.route('/range-request/<int:numbytes>')
@app.route('/range/<int:numbytes>')
def range_request(numbytes):
"""Streams n random bytes generated with given seed, at given chunk size per packet."""
if numbytes <= 0 or numbytes > (100 * 1024):
response = Response(headers={
'ETag' : 'range-request%d' % numbytes,
'ETag' : 'range%d' % numbytes,
'Accept-Ranges' : 'bytes'
})
response.status_code = 404
@@ -582,7 +582,7 @@ def range_request(numbytes):
if first_byte_pos > last_byte_pos or first_byte_pos not in xrange(0, numbytes) or last_byte_pos not in xrange(0, numbytes):
response = Response(headers={
'ETag' : 'range-request%d' % numbytes,
'ETag' : 'range%d' % numbytes,
'Accept-Ranges' : 'bytes',
'Content-Range' : 'bytes */%d' % numbytes
})
@@ -610,7 +610,7 @@ def range_request(numbytes):
response_headers = {
'Transfer-Encoding': 'chunked',
'Content-Type': 'application/octet-stream',
'ETag' : 'range-request%d' % numbytes,
'ETag' : 'range%d' % numbytes,
'Accept-Ranges' : 'bytes',
'Content-Range' : content_range }
+1 -1
View File
@@ -34,7 +34,7 @@
<li><a href="/stream/20"><code>/stream/:n</code></a> Streams <em>n</em>100 lines.</li>
<li><a href="/delay/3"><code>/delay/:n</code></a> Delays responding for <em>n</em>10 seconds.</li>
<li><a href="/drip?numbytes=5&amp;duration=5&amp;code=200"><code>/drip?numbytes=n&amp;duration=s&amp;delay=s&amp;code=code</code></a> Drips data over a duration after an optional initial delay, then (optionally) returns with the given status code.</li>
<li><a href="/range-request/1024"><code>/range-request/1024?duration=s&amp;chunk_size=code</code></a> Streams <em>n</em> bytes, and allows specifying a <em>Range</em> header to select a subset of the data. Accepts a <em>chunk_size</em> and request <em>duration</em> parameter.</li>
<li><a href="/range/1024"><code>/range/1024?duration=s&amp;chunk_size=code</code></a> Streams <em>n</em> bytes, and allows specifying a <em>Range</em> header to select a subset of the data. Accepts a <em>chunk_size</em> and request <em>duration</em> parameter.</li>
<li><a href="/html" data-bare-link="true"><code>/html</code></a> Renders an HTML Page.</li>
<li><a href="/robots.txt" data-bare-link="true"><code>/robots.txt</code></a> Returns some robots.txt rules.</li>
<li><a href="/deny" data-bare-link="true"><code>/deny</code></a> Denied by robots.txt file.</li>
+16 -16
View File
@@ -336,84 +336,84 @@ class HttpbinTestCase(unittest.TestCase):
)
def test_request_range(self):
response1 = self.app.get('/range-request/1234')
response1 = self.app.get('/range/1234')
self.assertEqual(response1.status_code, 200)
self.assertEqual(response1.headers.get('ETag'), 'range-request1234')
self.assertEqual(response1.headers.get('ETag'), 'range1234')
self.assertEqual(response1.headers.get('Content-range'), 'bytes 0-1233/1234')
self.assertEqual(response1.headers.get('Accept-ranges'), 'bytes')
self.assertEqual(len(response1.get_data()), 1234)
response2 = self.app.get('/range-request/1234')
response2 = self.app.get('/range/1234')
self.assertEqual(response2.status_code, 200)
self.assertEqual(response2.headers.get('ETag'), 'range-request1234')
self.assertEqual(response2.headers.get('ETag'), 'range1234')
self.assertEqual(response1.get_data(), response2.get_data())
def test_request_range_with_parameters(self):
response = self.app.get(
'/range-request/100?duration=1.5&chunk_size=5',
'/range/100?duration=1.5&chunk_size=5',
headers={ 'Range': 'bytes=10-24' }
)
self.assertEqual(response.status_code, 206)
self.assertEqual(response.headers.get('ETag'), 'range-request100')
self.assertEqual(response.headers.get('ETag'), 'range100')
self.assertEqual(response.headers.get('Content-range'), 'bytes 10-24/100')
self.assertEqual(response.headers.get('Accept-ranges'), 'bytes')
self.assertEqual(response.get_data(), 'klmnopqrstuvwxy')
def test_request_range_first_15_bytes(self):
response = self.app.get(
'/range-request/1000',
'/range/1000',
headers={ 'Range': 'bytes=0-15' }
)
self.assertEqual(response.status_code, 206)
self.assertEqual(response.headers.get('ETag'), 'range-request1000')
self.assertEqual(response.headers.get('ETag'), 'range1000')
self.assertEqual(response.get_data(), 'abcdefghijklmnop')
self.assertEqual(response.headers.get('Content-range'), 'bytes 0-15/1000')
def test_request_range_open_ended_last_6_bytes(self):
response = self.app.get(
'/range-request/26',
'/range/26',
headers={ 'Range': 'bytes=20-' }
)
self.assertEqual(response.status_code, 206)
self.assertEqual(response.headers.get('ETag'), 'range-request26')
self.assertEqual(response.headers.get('ETag'), 'range26')
self.assertEqual(response.get_data(), 'uvwxyz')
self.assertEqual(response.headers.get('Content-range'), 'bytes 20-25/26')
def test_request_range_suffix(self):
response = self.app.get(
'/range-request/26',
'/range/26',
headers={ 'Range': 'bytes=-5' }
)
self.assertEqual(response.status_code, 206)
self.assertEqual(response.headers.get('ETag'), 'range-request26')
self.assertEqual(response.headers.get('ETag'), 'range26')
self.assertEqual(response.get_data(), 'vwxyz')
self.assertEqual(response.headers.get('Content-range'), 'bytes 21-25/26')
def test_request_out_of_bounds(self):
response = self.app.get(
'/range-request/26',
'/range/26',
headers={ 'Range': 'bytes=10-5',
}
)
self.assertEqual(response.status_code, 416)
self.assertEqual(response.headers.get('ETag'), 'range-request26')
self.assertEqual(response.headers.get('ETag'), 'range26')
self.assertEqual(len(response.get_data()), 0)
self.assertEqual(response.headers.get('Content-range'), 'bytes */26')
response = self.app.get(
'/range-request/26',
'/range/26',
headers={ 'Range': 'bytes=32-40',
}
)
self.assertEqual(response.status_code, 416)
response = self.app.get(
'/range-request/26',
'/range/26',
headers={ 'Range': 'bytes=0-40',
}
)