rx-player
Version:
Canal+ HTML5 Video Player
112 lines (103 loc) • 4.44 kB
text/typescript
import { describe, beforeEach, it, expect, vi, afterEach } from "vitest";
import { OtherError } from "../../../errors";
import checkISOBMFFIntegrity from "../check_isobmff_integrity";
const mocks = vi.hoisted(() => {
return {
findCompleteBox: vi.fn(),
};
});
vi.mock("../../../parsers/containers/isobmff", () => ({
findCompleteBox: mocks.findCompleteBox,
}));
describe("transports utils - checkISOBMFFIntegrity", () => {
beforeEach(() => {
vi.resetModules();
});
afterEach(() => {
mocks.findCompleteBox.mockReset();
});
it("should check just ftyp and and moov integrity for init segments", () => {
mocks.findCompleteBox.mockImplementation(() => 45);
const myUint8Array = new Uint8Array([0, 1, 2]);
expect(() => checkISOBMFFIntegrity(myUint8Array, true)).not.toThrow();
expect(mocks.findCompleteBox).toHaveBeenCalledTimes(2);
expect(mocks.findCompleteBox).toHaveBeenCalledWith(myUint8Array, 0x66747970);
expect(mocks.findCompleteBox).toHaveBeenCalledWith(myUint8Array, 0x6d6f6f76);
});
it("should check just moof and and mdat integrity for regular segments", () => {
mocks.findCompleteBox.mockImplementation(() => 45);
const myUint8Array = new Uint8Array([0, 1, 2]);
expect(() => checkISOBMFFIntegrity(myUint8Array, false)).not.toThrow();
expect(mocks.findCompleteBox).toHaveBeenCalledTimes(2);
expect(mocks.findCompleteBox).toHaveBeenCalledWith(myUint8Array, 0x6d6f6f66);
expect(mocks.findCompleteBox).toHaveBeenCalledWith(myUint8Array, 0x6d646174);
});
it("should throw an other error if an init segment is missing a complete ftyp", () => {
mocks.findCompleteBox.mockImplementation((_, box) => (box === 0x66747970 ? -1 : 45));
const myUint8Array = new Uint8Array([0, 1, 2]);
let error: unknown = null;
try {
checkISOBMFFIntegrity(myUint8Array, true);
} catch (e: unknown) {
error = e;
}
expect(error).toBeInstanceOf(OtherError);
expect((error as OtherError).name).toEqual("OtherError");
expect((error as OtherError).type).toEqual("OTHER_ERROR");
expect((error as OtherError).code).toEqual("INTEGRITY_ERROR");
expect((error as OtherError).message).toEqual(
"INTEGRITY_ERROR: Incomplete `ftyp` box",
);
});
it("should throw an other error if an init segment is missing a complete moov", () => {
mocks.findCompleteBox.mockImplementation((_, box) => (box === 0x6d6f6f76 ? -1 : 45));
const myUint8Array = new Uint8Array([0, 1, 2]);
let error: unknown = null;
try {
checkISOBMFFIntegrity(myUint8Array, true);
} catch (e: unknown) {
error = e;
}
expect(error).toBeInstanceOf(OtherError);
expect((error as OtherError).name).toEqual("OtherError");
expect((error as OtherError).type).toEqual("OTHER_ERROR");
expect((error as OtherError).code).toEqual("INTEGRITY_ERROR");
expect((error as OtherError).message).toEqual(
"INTEGRITY_ERROR: Incomplete `moov` box",
);
});
it("should throw an other error if a regular segment is missing a complete moof", () => {
mocks.findCompleteBox.mockImplementation((_, box) => (box === 0x6d6f6f66 ? -1 : 45));
const myUint8Array = new Uint8Array([0, 1, 2]);
let error: unknown = null;
try {
checkISOBMFFIntegrity(myUint8Array, false);
} catch (e: unknown) {
error = e;
}
expect(error).toBeInstanceOf(OtherError);
expect((error as OtherError).name).toEqual("OtherError");
expect((error as OtherError).type).toEqual("OTHER_ERROR");
expect((error as OtherError).code).toEqual("INTEGRITY_ERROR");
expect((error as OtherError).message).toEqual(
"INTEGRITY_ERROR: Incomplete `moof` box",
);
});
it("should throw an other error if a regular segment is missing a complete mdat", () => {
mocks.findCompleteBox.mockImplementation((_, box) => (box === 0x6d646174 ? -1 : 45));
const myUint8Array = new Uint8Array([0, 1, 2]);
let error: unknown = null;
try {
checkISOBMFFIntegrity(myUint8Array, false);
} catch (e: unknown) {
error = e;
}
expect(error).toBeInstanceOf(OtherError);
expect((error as OtherError).name).toEqual("OtherError");
expect((error as OtherError).type).toEqual("OTHER_ERROR");
expect((error as OtherError).code).toEqual("INTEGRITY_ERROR");
expect((error as OtherError).message).toEqual(
"INTEGRITY_ERROR: Incomplete `mdat` box",
);
});
});