Просмотр исходного кода

Refactor to make _get_range testable.

Shane Kilkelly 11 лет назад
Родитель
Сommit
387e96ab67

+ 10 - 11
services/filestore/app/coffee/FileController.coffee

@@ -8,14 +8,7 @@ parseRange = require('range-parser')
 oneDayInSeconds = 60 * 60 * 24
 maxSizeInBytes = 1024 * 1024 * 1024 # 1GB
 
-
-get_range = (header) ->
-	parsed = parseRange(maxSizeInBytes, header)
-	range_type = parsed.type
-	range = parsed[0]
-	{start: range.start, end: range.end}
-
-module.exports =
+module.exports = FileController =
 
 	getFile: (req, res)->
 		{key, bucket} = req
@@ -25,12 +18,10 @@ module.exports =
 			bucket: bucket,
 			format: format,
 			style: style,
-			start: null,
-			end: null
 		}
 		metrics.inc "getFile"
 		if req.headers.range?
-			range = get_range(req.headers.range)
+			range = FileController._get_range(req.headers.range)
 			opts.start = range.start
 			opts.end = range.end
 		logger.log key:key, bucket:bucket, format:format, style:style, "reciving request to get file"
@@ -76,3 +67,11 @@ module.exports =
 				res.send 500
 			else
 				res.send 204
+
+	_get_range: (header) ->
+		parsed = parseRange(maxSizeInBytes, header)
+		if parsed == -1 or parsed == -2 or parsed.type != 'bytes'
+			null
+		else
+			range = parsed[0]
+			{start: range.start, end: range.end}

+ 19 - 0
services/filestore/test/unit/coffee/FileControllerTests.coffee

@@ -133,3 +133,22 @@ describe "FileController", ->
 				code.should.equal 500
 				done()
 			@controller.deleteFile @req, @res
+
+	describe "_get_range", ->
+
+		it "should parse a valid Range header", (done) ->
+			result = @controller._get_range('bytes=0-200')
+			expect(result).to.not.equal null
+			expect(result.start).to.equal 0
+			expect(result.end).to.equal 200
+			done()
+
+		it "should return null for an invalid Range header", (done) ->
+			result = @controller._get_range('wat')
+			expect(result).to.equal null
+			done()
+
+		it "should return null for any type other than 'bytes'", (done) ->
+			result = @controller._get_range('carrots=0-200')
+			expect(result).to.equal null
+			done()