@@ -115,44 +115,53 @@ func TestS3Reader_Read_CallFails_ReturnsError(t *testing.T) {
115
115
assert .True (t , err != nil )
116
116
}
117
117
118
- func TestS3Reader_Read_ShouldBuffer (t * testing.T ) {
118
+ func TestS3Reader_Seek_SeeksToCorrectPosition (t * testing.T ) {
119
119
ctrl := gomock .NewController (t )
120
120
defer ctrl .Finish ()
121
121
mockS3Client := NewMockS3API (ctrl )
122
- setupS3MockExpects (mockS3Client )
123
122
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 ),
126
126
}, nil ).Times (1 )
127
127
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 )
131
131
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 )
138
143
}
139
144
140
- func TestS3Reader_Seek_ResetsBuffer (t * testing.T ) {
145
+ func TestS3Reader_Read_ShouldKeepS3SocketOpen (t * testing.T ) {
141
146
ctrl := gomock .NewController (t )
142
147
defer ctrl .Finish ()
143
148
mockS3Client := NewMockS3API (ctrl )
144
149
setupS3MockExpects (mockS3Client )
145
- s3Reader , _ := newS3ReaderBucketAndKey (mockS3Client , testBucket , testKey )
150
+ config := newS3ReaderConfig ()
151
+ s3Reader , _ := newS3ReaderWithConfig (mockS3Client , testBucket , testKey , config )
146
152
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 ))
148
158
s3Reader .Read (make ([]byte , 1 ))
149
- assert .True (t , s3Reader .bufferEnd != 0 )
150
159
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 )
153
162
}
154
163
155
- func TestS3Reader_SeekNoop_DoesNotResetBuffer (t * testing.T ) {
164
+ func TestS3Reader_Seek_S3SocketClose (t * testing.T ) {
156
165
ctrl := gomock .NewController (t )
157
166
defer ctrl .Finish ()
158
167
mockS3Client := NewMockS3API (ctrl )
@@ -161,34 +170,25 @@ func TestS3Reader_SeekNoop_DoesNotResetBuffer(t *testing.T) {
161
170
162
171
//Read to fill the buffer
163
172
s3Reader .Read (make ([]byte , 1 ))
164
- assert .True (t , s3Reader .bufferEnd != 0 )
173
+ assert .NotNil (t , s3Reader .resp )
165
174
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 )
168
178
}
169
179
170
- func TestS3Reader_Seek_SeeksToCorrectPosition (t * testing.T ) {
180
+ func TestS3Reader_SeekNoop_DoesNotCloseSocket (t * testing.T ) {
171
181
ctrl := gomock .NewController (t )
172
182
defer ctrl .Finish ()
173
183
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 )
178
185
s3Reader , _ := newS3ReaderBucketAndKey (mockS3Client , testBucket , testKey )
179
186
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 )
191
190
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 )
194
194
}
0 commit comments