UNPKG

@eyevinn/cmcd

Version:

NPM library for Common Media Client Data (CTA-5004)

133 lines (122 loc) 5.64 kB
import { createPayload, CMCDString, CMCDBoolean, CMCDInteger, CMCDDecimal, CMCDEncodedBitrate, CMCDBufferLength, CMCDBufferStarvation, CMCDContentId, CMCDObjectDuration, CMCDDeadline, CMCDMeasuredThroughput, CMCDNextObjectRequest, CMCDObjectType, CMCDNextRangeRequest, CMCDObjectTypeToken, CMCDHdr, CMCDPlaybackRate, CMCDRequestedMaximumThroughput, CMCDStreamingFormat, CMCDStreamingFormatToken, CMCDSessionId, CMCDStreamType, CMCDStreamTypeToken, CMCDStartup, CMCDTopBitrate, CMCDVersion, CMCDKey, Payload } from "."; describe("CMCD Basic Type", () => { test("string", () => { const cmcdString = new CMCDString(CMCDKey.cid, CMCDHdr.session, "foobar"); expect(cmcdString.value).toEqual("foobar"); expect(cmcdString.toString()).toEqual('cid="foobar"'); }); test("boolean", () => { const cmcdBooleanTrue = new CMCDBoolean(CMCDKey.bs, CMCDHdr.status, true); expect(cmcdBooleanTrue.value).toEqual(true); expect(cmcdBooleanTrue.toString()).toEqual("bs"); const cmcdBooleanFalse = new CMCDBoolean(CMCDKey.bs, CMCDHdr.status, false); expect(cmcdBooleanFalse.value).toEqual(false); expect(cmcdBooleanFalse.toString()).toEqual(""); }); test("number", () => { const cmcdInteger = new CMCDInteger(CMCDKey.br, CMCDHdr.object, 2000); expect(cmcdInteger.value).toEqual(2000); expect(cmcdInteger.toString()).toEqual("br=2000"); const cmcdDecimal = new CMCDDecimal(CMCDKey.d, CMCDHdr.object, 4.5); expect(cmcdDecimal.value).toEqual(4.5); expect(cmcdDecimal.toString()).toEqual("d=4.5") }); }); describe("CMCD Type", () => { test("EncodedBitrate", () => { expect(new CMCDEncodedBitrate(4232).toString()).toEqual("br=4232"); }); test("BufferLength", () => { expect(new CMCDBufferLength(1000).toString()).toEqual("bl=1000"); }); test("BufferStarvation", () => { expect(new CMCDBufferStarvation(true).toString()).toEqual("bs"); expect(new CMCDBufferStarvation(false).toString()).toEqual(""); }); test("ContentId", () => { expect(new CMCDContentId("foobar").toString()).toEqual('cid="foobar"'); }); test("ObjectDuration", () => { expect(new CMCDObjectDuration(2000).toString()).toEqual("d=2000"); }); test("Deadline", () => { expect(new CMCDDeadline(2300).toString()).toEqual("dl=2300"); }); test("Measured Throughput", () => { expect(new CMCDMeasuredThroughput(2500).toString()).toEqual("mtp=2500"); }); test("Next Object Request", () => { expect(new CMCDNextObjectRequest("fil2.ts?quack").toString()).toEqual('nor="fil2.ts%3Fquack"'); }); test("Next Range Request", () => { expect(new CMCDNextRangeRequest("200-300").toString()).toEqual('nrr="200-300"'); }); test("Object Type", () => { expect(new CMCDObjectType(CMCDObjectTypeToken.muxed).toString()).toEqual("ot=av"); }); test("Playback Rate", () => { expect(new CMCDPlaybackRate(1.5).toString()).toEqual("pr=1.5"); }); test("Requested Maximum Throughput", () => { expect(new CMCDRequestedMaximumThroughput(3000).toString()).toEqual("rtp=3000"); }); test("Streaming Format", () => { expect(new CMCDStreamingFormat(CMCDStreamingFormatToken.hls).toString()).toEqual("sf=h"); }); test("SessionId", () => { expect(new CMCDSessionId("barlow").toString()).toEqual('sid="barlow"'); }); test("Stream Type", () => { expect(new CMCDStreamType(CMCDStreamTypeToken.live).toString()).toEqual("st=l"); }); test("Startup", () => { expect(new CMCDStartup(true).toString()).toEqual("su"); expect(new CMCDStartup(false).toString()).toEqual(""); }); test("Top Bitrate", () => { expect(new CMCDTopBitrate(20000).toString()).toEqual("tb=20000"); }); test("Version", () => { expect(new CMCDVersion(1).toString()).toEqual("v=1"); }); }); describe("CMCD Payload", () => { test("can be constructed from URLSearchParams instance", () => { const url: URL = new URL("https://my.domain/f?CMCD=br%3D3200%2Cbs%2Cd%3D4004%2Cmtp%3D25400%2Cot%3Dv%2Crtp%3D15000%2Csid%3D%226e2fb550-c457-11e9-bb97-0800200c9a66%22%2Ctb%3D6000"); const payload = createPayload(url.searchParams); expect(payload.sessionId).toEqual('6e2fb550-c457-11e9-bb97-0800200c9a66'); expect(payload.bufferStarvation).toEqual(true); expect(payload.encodedBitrate).toEqual(3200); expect(payload.objectDuration).toEqual(4004); expect(payload.measuredThroughput).toEqual(25400); expect(payload.objectType).toEqual(CMCDObjectTypeToken.video); expect(payload.requestedMaximumThroughput).toEqual(15000); expect(payload.topBitrate).toEqual(6000); }); test("can be constructed and returned as query param", () => { const payload = new Payload({ sessionId: "foobar", bufferStarvation: false, objectDuration: 3000, objectType: CMCDObjectTypeToken.muxed }); expect(payload.toString()).toEqual("CMCD=%2Cd%3D3000%2Cot%3Dav%2Csid%3D%22foobar%22"); }); test("can be constructed and returned as headers", () => { const payload = new Payload({ sessionId: '6e2fb550-c457-11e9-bb97-0800200c9a66', bufferStarvation: true, requestedMaximumThroughput: 15000, encodedBitrate: 3200, objectDuration: 4004, objectType: CMCDObjectTypeToken.video, topBitrate: 6000, measuredThroughput: 25400 }); const headers = payload.headers; expect(headers['CMCD-Request']).toEqual('mtp=25400'); expect(headers['CMCD-Object']).toEqual('br=3200,d=4004,ot=v,tb=6000'); expect(headers['CMCD-Status']).toEqual('bs,rtp=15000'); expect(headers['CMCD-Session']).toEqual('sid="6e2fb550-c457-11e9-bb97-0800200c9a66"') }); });