diff options
Diffstat (limited to 'largeobject_test.go')
| -rw-r--r-- | largeobject_test.go | 50 |
1 files changed, 49 insertions, 1 deletions
diff --git a/largeobject_test.go b/largeobject_test.go index fe781ab..724654a 100644 --- a/largeobject_test.go +++ b/largeobject_test.go @@ -18,7 +18,11 @@ package schwift -import "testing" +import ( + "bytes" + "io/ioutil" + "testing" +) func TestParseHTTPRange(t *testing.T) { testCases := []struct { @@ -62,3 +66,47 @@ func TestParseHTTPRange(t *testing.T) { } } } + +func TestSegmentingReader(t *testing.T) { + testCases := []struct { + input string + segments []string + }{ + {"abcdefghi", []string{"abc", "def", "ghi"}}, + {"abcdefgh", []string{"abc", "def", "gh"}}, + {"abcdefg", []string{"abc", "def", "g"}}, + } + + for _, tc := range testCases { + sr := segmentingReader{ + Reader: bytes.NewReader([]byte(tc.input)), + SegmentSizeBytes: 3, + } + + for _, expected := range tc.segments { + segment := sr.NextSegment() + if segment == nil { + t.Errorf("expected segment %q, but NextSegment() returned nil", expected) + break + } + actual, err := ioutil.ReadAll(segment) + if err != nil { + t.Errorf("expected segment %q, but got read error %q", expected, err.Error()) + break + } + if string(actual) != expected { + t.Errorf("expected segment %q, but got %q", expected, string(actual)) + } + } + + segment := sr.NextSegment() + if segment != nil { + actual, err := ioutil.ReadAll(segment) + if err == nil { + t.Errorf("expected no more segments, but got segment producing read error %q", err.Error()) + } else { + t.Errorf("expected no more segments, but got %q", string(actual)) + } + } + } +} |
