From 9d50e89e694c8d7c016099e5efda1769064e6e73 Mon Sep 17 00:00:00 2001 From: Nicolas ANGOT Date: Wed, 26 Sep 2018 16:40:50 +0200 Subject: [PATCH] update mss unit tests --- src/mss/MssFragmentMoovProcessor.js | 6 ++++-- src/mss/MssHandler.js | 9 ++++++-- src/mss/errors/MssErrors.js | 2 ++ test/unit/mss.MssFragmentProcessor.js | 30 +++++++++++++++++++++++++-- test/unit/mss.errors.MssErrors.js | 2 ++ test/unit/mss.parser.MssParser.js | 1 + 6 files changed, 44 insertions(+), 6 deletions(-) diff --git a/src/mss/MssFragmentMoovProcessor.js b/src/mss/MssFragmentMoovProcessor.js index fad1b83115..4390e10449 100644 --- a/src/mss/MssFragmentMoovProcessor.js +++ b/src/mss/MssFragmentMoovProcessor.js @@ -29,6 +29,8 @@ * POSSIBILITY OF SUCH DAMAGE. */ + import MssErrors from './errors/MssErrors'; + /** * @module MssFragmentMoovProcessor * @param {Object} config object @@ -304,8 +306,8 @@ function MssFragmentMoovProcessor(config) { return createMP4AudioSampleEntry(stsd, codec); default: throw { - name: 'Unsupported codec', - message: 'Unsupported codec', + code: MssErrors.MSS_UNSUPPORTED_CODEC_CODE, + message: MssErrors.MSS_UNSUPPORTED_CODEC_MESSAGE, data: { codec: codec } diff --git a/src/mss/MssHandler.js b/src/mss/MssHandler.js index fe9b036da8..282e2b4ded 100644 --- a/src/mss/MssHandler.js +++ b/src/mss/MssHandler.js @@ -35,6 +35,7 @@ import MssFragmentInfoController from './MssFragmentInfoController'; import MssFragmentProcessor from './MssFragmentProcessor'; import MssParser from './parser/MssParser'; import MssErrors from './errors/MssErrors'; +import DashJSError from '../streaming/vo/DashJSError'; function MssHandler(config) { @@ -85,8 +86,12 @@ function MssHandler(config) { const chunk = createDataChunk(request, streamProcessor.getStreamInfo().id, e.type !== events.FRAGMENT_LOADING_PROGRESS); - // Generate initialization segment (moov) - chunk.bytes = mssFragmentProcessor.generateMoov(representation); + try { + // Generate initialization segment (moov) + chunk.bytes = mssFragmentProcessor.generateMoov(representation); + } catch (e) { + config.errHandler.error(new DashJSError(e.code, e.message, e.data)); + } eventBus.trigger(events.INIT_FRAGMENT_LOADED, { chunk: chunk, diff --git a/src/mss/errors/MssErrors.js b/src/mss/errors/MssErrors.js index 2a40dfe0fd..9490082919 100644 --- a/src/mss/errors/MssErrors.js +++ b/src/mss/errors/MssErrors.js @@ -38,7 +38,9 @@ class MssErrors extends ErrorsBase { super(); this.MSS_NO_TFRF_CODE = 200; + this.MSS_UNSUPPORTED_CODEC_CODE = 201; this.MSS_NO_TFRF_MESSAGE = 'Missing tfrf in live media segment'; + this.MSS_UNSUPPORTED_CODEC_MESSAGE = 'Unsupported codec'; } } diff --git a/test/unit/mss.MssFragmentProcessor.js b/test/unit/mss.MssFragmentProcessor.js index d147c8e15b..20128178bc 100644 --- a/test/unit/mss.MssFragmentProcessor.js +++ b/test/unit/mss.MssFragmentProcessor.js @@ -3,6 +3,7 @@ import MetricsModel from '../../src/streaming/models/MetricsModel'; import PlaybackController from '../../src/streaming/controllers/PlaybackController'; import EventBus from '../../src/core/EventBus'; import MssErrors from '../../src/mss/errors/MssErrors'; +import Constants from '../../src/streaming/constants/Constants'; import ErrorHandlerMock from './mocks/ErrorHandlerMock'; import StreamProcessorMock from './mocks/StreamProcessorMock'; @@ -18,8 +19,12 @@ const playbackController = PlaybackController(context).getInstance(); const eventBus = EventBus(context).getInstance(); const errorHandlerMock = new ErrorHandlerMock(); const mssFragmentProcessor = MssFragmentProcessor(context).create({metricsModel: metricsModel, - playbackController: playbackController, eventBus: eventBus, ISOBoxer: ISOBoxer, - errHandler: errorHandlerMock, debug: new DebugMock()}); + playbackController: playbackController, + eventBus: eventBus, + ISOBoxer: ISOBoxer, + errHandler: errorHandlerMock, + debug: new DebugMock(), + constants: Constants}); describe('MssFragmentProcessor', function () { const testType = 'video'; @@ -48,4 +53,25 @@ describe('MssFragmentProcessor', function () { expect(errorHandlerMock.errorValue).to.equal(MssErrors.MSS_NO_TFRF_MESSAGE); expect(errorHandlerMock.errorCode).to.equal(MssErrors.MSS_NO_TFRF_CODE); }); + + it('should throw an error when attempting to call generateMoov for mp4 initialization segment', () => { + const rep = {BaseURL: undefined, + SegmentTemplate: {media: 'QualityLevels($Bandwidth$)/Fragments(audio=$Time$)', timescale: 10000000, SegmentTimeline: {}}, + audioChannels: NaN, + audioSamplingRate: NaN, + bandwidth: 64000, + codecPrivateData: '1000', + codecs: 'mp7a.58.2', + height: NaN, + id: 'audio_0', + mimeType: 'audio/mp4', + width: NaN, + adaptation: {period: {mpd: {manifest: {Period_asArray: [{AdaptationSet_asArray: [{SegmentTemplate: {timescale: 0}}]}]}}, index: 0}, index: 0, type: 'audio'} + }; + expect(mssFragmentProcessor.generateMoov.bind(mssFragmentProcessor, rep)).to.throw({ + name: 'Unsupported codec', + message: 'Unsupported codec', + data: {} + }); + }); }); \ No newline at end of file diff --git a/test/unit/mss.errors.MssErrors.js b/test/unit/mss.errors.MssErrors.js index 8f689e3576..10cade8feb 100644 --- a/test/unit/mss.errors.MssErrors.js +++ b/test/unit/mss.errors.MssErrors.js @@ -6,10 +6,12 @@ describe('Errors', function () { it('MssErrors code should exist', () => { expect(MssErrors).to.exist; // jshint ignore:line expect(MssErrors.MSS_NO_TFRF_CODE).to.equal(200); + expect(MssErrors.MSS_UNSUPPORTED_CODEC_CODE).to.equal(201); }); it('MssErrors should return the correct error message', () => { expect(MssErrors).to.exist; // jshint ignore:line expect(MssErrors.MSS_NO_TFRF_MESSAGE).to.equal('Missing tfrf in live media segment'); + expect(MssErrors.MSS_UNSUPPORTED_CODEC_MESSAGE).to.equal('Unsupported codec'); }); }); \ No newline at end of file diff --git a/test/unit/mss.parser.MssParser.js b/test/unit/mss.parser.MssParser.js index 681ceb2160..6d53bb0b06 100644 --- a/test/unit/mss.parser.MssParser.js +++ b/test/unit/mss.parser.MssParser.js @@ -70,6 +70,7 @@ describe('MssParser', function () { expect(adaptations).to.have.lengthOf(1); expect(adaptations[0].contentType).to.equal('audio'); }); + it('should throw an error when parse is called with invalid smooth data', function () { expect(mssParser.parse.bind('