Skip to content

Commit

Permalink
Unit test dynamic validator
Browse files Browse the repository at this point in the history
  • Loading branch information
birme committed Jan 28, 2017
1 parent c25844a commit c6ccd41
Show file tree
Hide file tree
Showing 7 changed files with 3,295 additions and 7 deletions.
5 changes: 3 additions & 2 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -193,9 +193,10 @@ DashValidator.prototype.verifyAllSegments = function verifyAllSegments(verifyFn,
* streaming
*
* @param {number} iterations Number of iterations to test
* @param {Function} _optIterator For testing purposes
* @returns {Promise}
*/
DashValidator.prototype.validateDynamicManifest = function validateDynamicManifest(iterations) {
DashValidator.prototype.validateDynamicManifest = function validateDynamicManifest(iterations, _optIterator) {
return new Promise((resolve, reject) => {
this._runner.start(iterations, () => {
return new Promise((resolveUpdateMpd) => {
Expand All @@ -209,7 +210,7 @@ DashValidator.prototype.validateDynamicManifest = function validateDynamicManife
})
});
});
})
}, _optIterator)
.then((result) => {
resolve(result);
}).catch(reject);
Expand Down
8 changes: 6 additions & 2 deletions lib/dash_validator_runner.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,9 @@ const DashValidatorRunner = function constructor(mpd, headers, updateTime) {
*
* @param {number} iterations Number of iterations to run
* @param {Function} mpdUpdateFn Function that is called to update manifest
* @param {Function} _optIterator Used for testing purposes
*/
DashValidatorRunner.prototype.start = function start(iterations, mpdUpdateFn) {
DashValidatorRunner.prototype.start = function start(iterations, mpdUpdateFn, _optIterator) {
return new Promise((resolve, reject) => {
function timerFn() {
mpdUpdateFn().then(() => {
Expand Down Expand Up @@ -67,7 +68,10 @@ DashValidatorRunner.prototype.start = function start(iterations, mpdUpdateFn) {
});
}

setTimeout(timerFn.bind(this), this.updateTime * 1000);
setTimeout(timerFn.bind(this), this.updateTime * 1000);
if (_optIterator) {
_optIterator();
}
});
};

Expand Down
34 changes: 31 additions & 3 deletions test/dash_validator_unit.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,23 @@ describe("Dash Validator", () => {
let failCount;
let requestFailType;
let mockManifestHeaders;
let dynamicCount = 1;

beforeEach((done) => {
jasmine.clock().install();

spyOn(util, "requestXml").and.callFake((uri) => {
return new Promise((resolve, reject) => {
const testAssets = new TestAssetsModule();
const m = uri.match(/^.*\/(.*?)\.mpd$/);
const asset = testAssets.getAssetByName(m[1]);
resolve({ xml: asset.xml, headers: mockManifestHeaders });
if (uri.match("MOCK-DYNAMIC")) {
const asset = testAssets.getAssetByName("dynamic." + dynamicCount + ".mpd");
dynamicCount++;
resolve({ xml: asset.xml, headers: mockManifestHeaders });
} else {
const m = uri.match(/^.*\/(.*?)\.mpd$/);
const asset = testAssets.getAssetByName(m[1]);
resolve({ xml: asset.xml, headers: mockManifestHeaders });
}
});
});

Expand Down Expand Up @@ -84,11 +93,13 @@ describe("Dash Validator", () => {
reject("HTTP error 404");
});
});

done();
});

afterEach((done) => {
MockDate.reset();
jasmine.clock().uninstall();
done();
});

Expand Down Expand Up @@ -220,4 +231,21 @@ describe("Dash Validator", () => {
}).then(done);
}).catch(fail).then(done);
});

it("should fail a dynamic manifest that is not updating headers correctly", (done) => {
MockDate.set(new Date("2017-01-28T10:04:28.424270Z"));
const validator = new DashValidator("http://mock.example.com/MOCK-DYNAMIC.mpd");
validator.load().then(() => {
function onIteration() {
jasmine.clock().tick(10000);
}
validator.validateDynamicManifest(2, onIteration).then((result) => {
expect(result.iterations).toBe(2);
expect(result.failed.length).toBe(2);
done();
}).catch((error) => {
console.error(error);
}).then(done);
}).catch(fail).then(done);
});
});
3 changes: 3 additions & 0 deletions test/support/testassets.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ const TestAssets = function constructor() {

this.assets.push(loadAsset("usp-live", "usp.live.mpd"));
this.assets.push(loadAsset("usp-vod", "usp.vod.mpd"));
this.assets.push(loadAsset("dynamic.1.mpd", "dynamic.1.mpd"));
this.assets.push(loadAsset("dynamic.2.mpd", "dynamic.2.mpd"));
this.assets.push(loadAsset("dynamic.3.mpd", "dynamic.3.mpd"));
};

TestAssets.prototype.getAssetByName = function(name) {
Expand Down
Loading

0 comments on commit c6ccd41

Please sign in to comment.