Skip to content

Commit 3f56089

Browse files
authored
Merge pull request #49 from RachelTucker/GOSDK-12
GOSDK-12: Allowing multiple ranges to be set in get object
2 parents aa4fdf2 + 5abb042 commit 3f56089

File tree

2 files changed

+18
-8
lines changed

2 files changed

+18
-8
lines changed

ds3/ds3Client_test.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -328,12 +328,16 @@ func TestGetPartialObject(t *testing.T) {
328328

329329
// Create and run the mocked client.
330330
requestHeaders := &http.Header{}
331-
requestHeaders.Add("Range", "bytes=1-5")
331+
requestHeaders.Add("Range", "bytes=1-5,7-8,20-500")
332332

333333
response, err := mockedClient(t).
334334
Expecting(HTTP_VERB_GET, "/bucketName/object", &url.Values{}, requestHeaders, nil).
335335
Returning(206, stringResponse, nil).
336-
GetObject(models.NewGetObjectRequest("bucketName", "object").WithRange(1, 5))
336+
GetObject(models.NewGetObjectRequest("bucketName", "object").
337+
WithRanges(
338+
models.Range{Start: 1, End: 5},
339+
models.Range{Start: 7, End: 8},
340+
models.Range{Start: 20, End: 500}))
337341

338342
// Check the error result.
339343
ds3Testing.AssertNilError(t, err)
@@ -357,7 +361,7 @@ func TestGetObjectRange(t *testing.T) {
357361

358362
// Create and run the mocked client.
359363
request := models.NewGetObjectRequest("bucketName", "object").
360-
WithRange(20, 179)
364+
WithRanges(models.Range{Start: 20, End: 179})
361365

362366
response, err := mockedClient(t).
363367
Expecting(HTTP_VERB_GET, "/bucketName/object", &url.Values{}, requestHeaders, nil).

ds3/models/getObjectRequest.go

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,12 @@ package models
1515

1616
import (
1717
"fmt"
18+
"strings"
1819
)
1920

20-
type rangeHeader struct {
21-
start, end int
21+
type Range struct {
22+
Start int64
23+
End int64
2224
}
2325

2426
type GetObjectRequest struct {
@@ -56,7 +58,11 @@ func (getObjectRequest *GetObjectRequest) WithChecksum(contentHash string, check
5658
return getObjectRequest
5759
}
5860

59-
func (getObjectRequest *GetObjectRequest) WithRange(start, end int) *GetObjectRequest {
60-
getObjectRequest.Metadata["Range"] = fmt.Sprintf("bytes=%d-%d", start, end)
61+
func (getObjectRequest *GetObjectRequest) WithRanges(ranges ...Range) *GetObjectRequest {
62+
var rangeElements []string
63+
for _, cur := range ranges {
64+
rangeElements = append(rangeElements, fmt.Sprintf("%d-%d", cur.Start, cur.End))
65+
}
66+
getObjectRequest.Metadata["Range"] = fmt.Sprintf("bytes=%s", strings.Join(rangeElements[:], ","))
6167
return getObjectRequest
62-
}
68+
}

0 commit comments

Comments
 (0)