Pass start/end options down to the S3PersistorManager.

Test that those options cause a 'Range' header to be attached to the
request sent to S3.
This commit is contained in:
Shane Kilkelly 2015-08-28 10:09:41 +01:00
parent d88736e3b5
commit 76506ed91e
3 changed files with 26 additions and 3 deletions

View file

@ -27,6 +27,7 @@ module.exports =
return callback err
@sendFile location, target, fsPath, callback
# opts may be {start: Number, end: Number}
getFileStream: (location, name, opts, _callback = (err, res)->) ->
callback = (args...) ->
_callback(args...)

View file

@ -58,14 +58,19 @@ module.exports =
return callback(err)
@sendFile bucketName, key, fsPath, callback
# opts may be {start: Number, end: Number}
getFileStream: (bucketName, key, opts, callback = (err, res)->)->
opts = opts || {}
headers = {}
if opts.start? and opts.end?
headers['Range'] = "bytes=#{opts.start}-#{opts.end}"
callback = _.once callback
logger.log bucketName:bucketName, key:key, "getting file from s3"
s3Client = knox.createClient
key: settings.filestore.s3.key
secret: settings.filestore.s3.secret
bucket: bucketName
s3Stream = s3Client.get(key)
s3Stream = s3Client.get(key, headers)
s3Stream.end()
s3Stream.on 'response', (res) ->
callback null, res

View file

@ -42,17 +42,34 @@ describe "S3PersistorManagerTests", ->
describe "getFileStream", ->
beforeEach ->
@S3PersistorManager = SandboxedModule.require modulePath, requires: @requires
@opts = {}
it "should use correct key", (done)->
@stubbedKnoxClient.get.returns(
on:->
end:->
)
@S3PersistorManager.getFileStream @bucketName, @key, @fsPath, (err)=>
@S3PersistorManager.getFileStream @bucketName, @key, @opts, (err)=> # empty callback
@stubbedKnoxClient.get.calledWith(@key).should.equal true
done()
describe "with start and end options", ->
beforeEach ->
@opts =
start: 0
end: 8
it "should pass headers to the knox.Client.get()", (done) ->
@stubbedKnoxClient.get.returns(
on:->
end:->
)
@S3PersistorManager.getFileStream @bucketName, @key, @opts, (err)=> # empty callback
@stubbedKnoxClient.get.calledWith(@key, {'Range': 'bytes=0-8'}).should.equal true
done()
describe "sendFile", ->
beforeEach ->