From 66df133eecff25da82d34a941c1845bdbbc95ec0 Mon Sep 17 00:00:00 2001 From: Nicolas ANGOT Date: Mon, 10 Jul 2017 17:11:30 +0200 Subject: [PATCH] first version for AbandonRequestsRule unit test --- .../rules/abr/AbandonRequestsRule.js | 7 +- ...streaming.rules.abr.AbandonRequestsRule.js | 76 +++++++++++++++++++ 2 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 test/unit/streaming.rules.abr.AbandonRequestsRule.js diff --git a/src/streaming/rules/abr/AbandonRequestsRule.js b/src/streaming/rules/abr/AbandonRequestsRule.js index e16c8a43ee..bb2f06c378 100644 --- a/src/streaming/rules/abr/AbandonRequestsRule.js +++ b/src/streaming/rules/abr/AbandonRequestsRule.js @@ -64,11 +64,16 @@ function AbandonRequestsRule(config) { } function shouldAbandon(rulesContext) { + const switchRequest = SwitchRequest(context).create(SwitchRequest.NO_CHANGE, {name: AbandonRequestsRule.__dashjs_factory_name}); + + if (!rulesContext || !rulesContext.hasOwnProperty('getMediaInfo') || !rulesContext.hasOwnProperty('getMediaType') || !rulesContext.hasOwnProperty('getCurrentRequest') || + !rulesContext.hasOwnProperty('getTrackInfo') || !rulesContext.hasOwnProperty('getAbrController')) { + return switchRequest; + } const mediaInfo = rulesContext.getMediaInfo(); const mediaType = rulesContext.getMediaType(); const req = rulesContext.getCurrentRequest(); - const switchRequest = SwitchRequest(context).create(SwitchRequest.NO_CHANGE, {name: AbandonRequestsRule.__dashjs_factory_name}); if (!isNaN(req.index)) { diff --git a/test/unit/streaming.rules.abr.AbandonRequestsRule.js b/test/unit/streaming.rules.abr.AbandonRequestsRule.js new file mode 100644 index 0000000000..4dc50fe519 --- /dev/null +++ b/test/unit/streaming.rules.abr.AbandonRequestsRule.js @@ -0,0 +1,76 @@ +import AbandonRequestsRule from '../../src/streaming/rules/abr/AbandonRequestsRule'; +import FragmentRequest from '../../src/streaming/vo/FragmentRequest'; + +const expect = require('chai').expect; + +const context = {}; + +function RulesContextMock () { + this.getMediaInfo = function() { + + }; + this.getMediaType = function() { + return 'video'; + }; + this.getCurrentRequest = function() { + let fragRequest = new FragmentRequest(); + fragRequest.index = 1; + + return fragRequest; + }; + this.getTrackInfo = function() {}; + this.getAbrController = function() {}; +} + +class MetricsModelMock { + constructor() { + } + + getReadOnlyMetricsFor(type) { + return null; + } +} + +class DashMetricsMock { + constructor() { + } + + getCurrentBufferLevel() { + return 15; + } +} + +class MediaPlayerModelMock { + constructor() { + } + + getStableBufferTime() { + return 10; + } + +} + +describe('AbandonRequestsRule', function () { + it("should return an empty switchRequest when shouldAbandon function is called with an empty parameter", function () { + const abandonRequestsRule = AbandonRequestsRule(context).create({}); + const abandonRequest = abandonRequestsRule.shouldAbandon(); + + expect(abandonRequest.quality).to.be.equal(-1); // jshint ignore:line + }); + + it("should return an empty switchRequest when shouldAbandon function is called with a mock parameter", function () { + let rulesContextMock = new RulesContextMock(); + let dashMetricsMock = new DashMetricsMock(); + let metricsModelMock = new MetricsModelMock(); + let mediaPlayerModelMock = new MediaPlayerModelMock(); + + const abandonRequestsRule = AbandonRequestsRule(context).create({metricsModel: metricsModelMock, + dashMetrics: dashMetricsMock, + mediaPlayerModel: mediaPlayerModelMock}); + + + const abandonRequest = abandonRequestsRule.shouldAbandon(rulesContextMock); + + expect(abandonRequest.quality).to.be.equal(-1); // jshint ignore:line + }); +}); \ No newline at end of file