From 76506ed91e99ef48e11b078b5640c88fc77d5118 Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Fri, 28 Aug 2015 10:09:41 +0100 Subject: [PATCH] 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. --- .../app/coffee/FSPersistorManager.coffee | 1 + .../app/coffee/S3PersistorManager.coffee | 7 ++++++- .../coffee/S3PersistorManagerTests.coffee | 21 +++++++++++++++++-- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/services/filestore/app/coffee/FSPersistorManager.coffee b/services/filestore/app/coffee/FSPersistorManager.coffee index 283d773e88..6568f81f74 100644 --- a/services/filestore/app/coffee/FSPersistorManager.coffee +++ b/services/filestore/app/coffee/FSPersistorManager.coffee @@ -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...) diff --git a/services/filestore/app/coffee/S3PersistorManager.coffee b/services/filestore/app/coffee/S3PersistorManager.coffee index 7e0cb3947e..8d40113200 100644 --- a/services/filestore/app/coffee/S3PersistorManager.coffee +++ b/services/filestore/app/coffee/S3PersistorManager.coffee @@ -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 diff --git a/services/filestore/test/unit/coffee/S3PersistorManagerTests.coffee b/services/filestore/test/unit/coffee/S3PersistorManagerTests.coffee index fe70f1008d..ca324ae212 100644 --- a/services/filestore/test/unit/coffee/S3PersistorManagerTests.coffee +++ b/services/filestore/test/unit/coffee/S3PersistorManagerTests.coffee @@ -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 ->