@@ -115,44 +115,53 @@ func TestS3Reader_Read_CallFails_ReturnsError(t *testing.T) {
115115 assert .True (t , err != nil )
116116}
117117
118- func TestS3Reader_Read_ShouldBuffer (t * testing.T ) {
118+ func TestS3Reader_Seek_SeeksToCorrectPosition (t * testing.T ) {
119119 ctrl := gomock .NewController (t )
120120 defer ctrl .Finish ()
121121 mockS3Client := NewMockS3API (ctrl )
122- setupS3MockExpects (mockS3Client )
123122
124- mockS3Client .EXPECT ().GetObjectWithContext (gomock .Any (), gomock .Any (), gomock .Any ()).Return (& s3.GetObjectOutput {
125- Body : ioutil .NopCloser (strings .NewReader (testBodyContent [2 :4 ])),
123+ mockS3Client .EXPECT ().HeadObject (gomock .Any ()).Return (& s3.HeadObjectOutput {
124+ ContentLength : aws .Int64 (int64 (len (testBodyContent ))),
125+ ETag : aws .String (testEtag ),
126126 }, nil ).Times (1 )
127127
128- config := newS3ReaderConfig ( )
129- config . BufferSize = 2
130- s3Reader , _ := newS3ReaderWithConfig ( mockS3Client , testBucket , testKey , config )
128+ s3Reader , _ := newS3ReaderBucketAndKey ( mockS3Client , testBucket , testKey )
129+ s3Reader . Seek ( 5 , io . SeekCurrent )
130+ assert . True ( t , s3Reader . offset == 5 )
131131
132- //First call will read from s3 since the buffer is empty.
133- //Second call should read from internal buffer
134- //Third call should read from s3 again
135- s3Reader .Read (make ([]byte , 1 ))
136- s3Reader .Read (make ([]byte , 1 ))
137- s3Reader .Read (make ([]byte , 1 ))
132+ s3Reader .Seek (1 , io .SeekCurrent )
133+ assert .True (t , s3Reader .offset == 6 )
134+
135+ s3Reader .Seek (0 , io .SeekStart )
136+ assert .True (t , s3Reader .offset == 0 )
137+
138+ s3Reader .Seek (0 , io .SeekEnd )
139+ assert .True (t , s3Reader .offset == s3Reader .ContentLength )
140+
141+ s3Reader .Seek (100000 , io .SeekCurrent )
142+ assert .True (t , s3Reader .offset == s3Reader .ContentLength )
138143}
139144
140- func TestS3Reader_Seek_ResetsBuffer (t * testing.T ) {
145+ func TestS3Reader_Read_ShouldKeepS3SocketOpen (t * testing.T ) {
141146 ctrl := gomock .NewController (t )
142147 defer ctrl .Finish ()
143148 mockS3Client := NewMockS3API (ctrl )
144149 setupS3MockExpects (mockS3Client )
145- s3Reader , _ := newS3ReaderBucketAndKey (mockS3Client , testBucket , testKey )
150+ config := newS3ReaderConfig ()
151+ s3Reader , _ := newS3ReaderWithConfig (mockS3Client , testBucket , testKey , config )
146152
147- //Read to fill the buffer
153+ //First call will read from s3 since the buffer is empty.
154+ //Second call should reuse the existing s3 socket
155+ //Third call should reuse the existing s3 socket
156+ s3Reader .Read (make ([]byte , 1 ))
157+ s3Reader .Read (make ([]byte , 1 ))
148158 s3Reader .Read (make ([]byte , 1 ))
149- assert .True (t , s3Reader .bufferEnd != 0 )
150159
151- s3Reader . Seek ( 1 , io . SeekCurrent )
152- assert .True (t , s3Reader .bufferEnd == 0 )
160+ //After finish reading, socket closed
161+ assert .Nil (t , s3Reader .resp )
153162}
154163
155- func TestS3Reader_SeekNoop_DoesNotResetBuffer (t * testing.T ) {
164+ func TestS3Reader_Seek_S3SocketClose (t * testing.T ) {
156165 ctrl := gomock .NewController (t )
157166 defer ctrl .Finish ()
158167 mockS3Client := NewMockS3API (ctrl )
@@ -161,34 +170,25 @@ func TestS3Reader_SeekNoop_DoesNotResetBuffer(t *testing.T) {
161170
162171 //Read to fill the buffer
163172 s3Reader .Read (make ([]byte , 1 ))
164- assert .True (t , s3Reader .bufferEnd != 0 )
173+ assert .NotNil (t , s3Reader .resp )
165174
166- s3Reader .Seek (0 , io .SeekCurrent )
167- assert .True (t , s3Reader .bufferEnd != 0 )
175+ //seek and s3 socket close
176+ s3Reader .Seek (0 , io .SeekStart )
177+ assert .Nil (t , s3Reader .resp )
168178}
169179
170- func TestS3Reader_Seek_SeeksToCorrectPosition (t * testing.T ) {
180+ func TestS3Reader_SeekNoop_DoesNotCloseSocket (t * testing.T ) {
171181 ctrl := gomock .NewController (t )
172182 defer ctrl .Finish ()
173183 mockS3Client := NewMockS3API (ctrl )
174- mockS3Client .EXPECT ().HeadObject (gomock .Any ()).Return (& s3.HeadObjectOutput {
175- ContentLength : aws .Int64 (int64 (len (testBodyContent ))),
176- ETag : aws .String (testEtag ),
177- }, nil ).Times (1 )
184+ setupS3MockExpects (mockS3Client )
178185 s3Reader , _ := newS3ReaderBucketAndKey (mockS3Client , testBucket , testKey )
179186
180- s3Reader .Seek (5 , io .SeekCurrent )
181- assert .True (t , s3Reader .offset == 5 )
182-
183- s3Reader .Seek (1 , io .SeekCurrent )
184- assert .True (t , s3Reader .offset == 6 )
185-
186- s3Reader .Seek (0 , io .SeekStart )
187- assert .True (t , s3Reader .offset == 0 )
188-
189- s3Reader .Seek (0 , io .SeekEnd )
190- assert .True (t , s3Reader .offset == s3Reader .ContentLength )
187+ //Read to fill the buffer
188+ s3Reader .Read (make ([]byte , 1 ))
189+ assert .NotNil (t , s3Reader .resp )
191190
192- s3Reader .Seek (100000 , io .SeekCurrent )
193- assert .True (t , s3Reader .offset == s3Reader .ContentLength )
191+ //seek and s3 socket still open
192+ s3Reader .Seek (1 , io .SeekStart )
193+ assert .NotNil (t , s3Reader .resp )
194194}
0 commit comments