diff --git a/googleapiclient/http.py b/googleapiclient/http.py index 1b661e1b260..927464e9ff7 100644 --- a/googleapiclient/http.py +++ b/googleapiclient/http.py @@ -733,7 +733,7 @@ def next_chunk(self, num_retries=0): headers = self._headers.copy() headers["range"] = "bytes=%d-%d" % ( self._progress, - self._progress + self._chunksize, + self._progress + self._chunksize - 1, ) http = self._request.http diff --git a/tests/test_http.py b/tests/test_http.py index 852cd7e1a2e..e55e0566202 100644 --- a/tests/test_http.py +++ b/tests/test_http.py @@ -488,6 +488,23 @@ def test_media_io_base_download(self): self.assertEqual(5, download._progress) self.assertEqual(5, download._total_size) + def test_media_io_base_download_range_request_header(self): + self.request.http = HttpMockSequence( + [ + ( + {"status": "200", "content-range": "0-2/5"}, + "echo_request_headers_as_json", + ), + ] + ) + + download = MediaIoBaseDownload(fd=self.fd, request=self.request, chunksize=3) + + status, done = download.next_chunk() + result = json.loads(self.fd.getvalue().decode("utf-8")) + + self.assertEqual(result.get("range"), "bytes=0-2") + def test_media_io_base_download_custom_request_headers(self): self.request.http = HttpMockSequence( [