/
cmcd.js
74 lines (61 loc) · 2.39 KB
/
cmcd.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import Constants from '../../src/Constants.js';
import Utils from '../../src/Utils.js';
import {
checkIsPlaying,
checkIsProgressing,
checkNoCriticalErrors,
initializeDashJsAdapter
} from '../common/common.js';
import {expect} from 'chai';
const TESTCASE = Constants.TESTCASES.FEATURE_SUPPORT.CMCD;
Utils.getTestvectorsForTestcase(TESTCASE).forEach((item) => {
const mpd = item.url;
describe(`${TESTCASE} - ${item.name} - ${mpd}`, () => {
let playerAdapter;
before(() => {
const settings = {
streaming: {
cmcd: {
enabled: true,
sid: 'sid',
cid: 'cid',
mode: 'query'
}
}
}
playerAdapter = initializeDashJsAdapter(item, mpd, settings);
})
after(() => {
playerAdapter.destroy();
})
it(`Checking playing state`, async () => {
await checkIsPlaying(playerAdapter, true);
})
it(`Checking progressing state`, async () => {
await checkIsProgressing(playerAdapter);
});
it(`Expect CMCD event to be thrown`, async () => {
await playerAdapter.waitForEvent(Constants.TEST_TIMEOUT_THRESHOLDS.EVENT_WAITING_TIME, dashjs.MetricsReporting.events.CMCD_DATA_GENERATED)
});
it(`Expect requests to have CMCD query parameters`, async () => {
const eventPayload = await playerAdapter.waitForMediaSegmentDownload(Constants.TEST_TIMEOUT_THRESHOLDS.EVENT_WAITING_TIME)
expect(eventPayload.request).to.not.be.undefined;
expect(eventPayload.request.url).to.not.be.undefined;
const requestUrl = eventPayload.request.url;
const url = new URL(requestUrl);
const cmcdString = url.searchParams.get('CMCD');
const cmcdParams = {}
cmcdString.split(',').forEach(pair => {
const [key, value] = pair.split('=');
if (value) {
cmcdParams[key] = value.replace(/"/g, '');
}
});
expect(cmcdParams.sid).to.be.equal('sid');
expect(cmcdParams.cid).to.be.equal('cid');
});
it(`Expect no critical errors to be thrown`, () => {
checkNoCriticalErrors(playerAdapter);
})
})
})