You've already forked matrix-js-sdk
mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-12-04 05:02:41 +03:00
@@ -30,7 +30,6 @@ import { secureRandomString } from "../../../src/randomstring";
|
|||||||
import {
|
import {
|
||||||
makeMockEvent,
|
makeMockEvent,
|
||||||
makeMockRoom,
|
makeMockRoom,
|
||||||
sessionMembershipTemplate as membershipTemplate,
|
|
||||||
makeKey,
|
makeKey,
|
||||||
type MembershipData,
|
type MembershipData,
|
||||||
mockRoomState,
|
mockRoomState,
|
||||||
@@ -46,6 +45,7 @@ const textEncoder = new TextEncoder();
|
|||||||
const callSession = { id: "", application: "m.call" };
|
const callSession = { id: "", application: "m.call" };
|
||||||
|
|
||||||
describe("MatrixRTCSession", () => {
|
describe("MatrixRTCSession", () => {
|
||||||
|
const membershipTemplate = sessionMembershipTemplate;
|
||||||
let client: MatrixClient;
|
let client: MatrixClient;
|
||||||
let sess: MatrixRTCSession | undefined;
|
let sess: MatrixRTCSession | undefined;
|
||||||
|
|
||||||
@@ -67,7 +67,6 @@ describe("MatrixRTCSession", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe("roomSessionForRoom", () => {
|
describe("roomSessionForRoom", () => {
|
||||||
const membershipTemplate = sessionMembershipTemplate;
|
|
||||||
it("creates a room-scoped session from room state", async () => {
|
it("creates a room-scoped session from room state", async () => {
|
||||||
const mockRoom = makeMockRoom([membershipTemplate]);
|
const mockRoom = makeMockRoom([membershipTemplate]);
|
||||||
|
|
||||||
@@ -412,6 +411,7 @@ describe("MatrixRTCSession", () => {
|
|||||||
expect(client.sendEvent).toHaveBeenCalledWith(mockRoom!.roomId, EventType.RTCNotification, {
|
expect(client.sendEvent).toHaveBeenCalledWith(mockRoom!.roomId, EventType.RTCNotification, {
|
||||||
"m.mentions": { user_ids: [], room: true },
|
"m.mentions": { user_ids: [], room: true },
|
||||||
"notification_type": "ring",
|
"notification_type": "ring",
|
||||||
|
"m.call.intent": "voice",
|
||||||
"m.relates_to": {
|
"m.relates_to": {
|
||||||
event_id: ownMembershipId,
|
event_id: ownMembershipId,
|
||||||
rel_type: "m.reference",
|
rel_type: "m.reference",
|
||||||
@@ -431,6 +431,7 @@ describe("MatrixRTCSession", () => {
|
|||||||
expect(didSendEventFn).toHaveBeenCalledWith(
|
expect(didSendEventFn).toHaveBeenCalledWith(
|
||||||
{
|
{
|
||||||
"event_id": "new-evt",
|
"event_id": "new-evt",
|
||||||
|
"m.call.intent": "voice",
|
||||||
"lifetime": 30000,
|
"lifetime": 30000,
|
||||||
"m.mentions": { room: true, user_ids: [] },
|
"m.mentions": { room: true, user_ids: [] },
|
||||||
"m.relates_to": {
|
"m.relates_to": {
|
||||||
@@ -738,11 +739,17 @@ describe("MatrixRTCSession", () => {
|
|||||||
it("re-sends key if a new member joins even if a key rotation is in progress", async () => {
|
it("re-sends key if a new member joins even if a key rotation is in progress", async () => {
|
||||||
jest.useFakeTimers();
|
jest.useFakeTimers();
|
||||||
try {
|
try {
|
||||||
|
const ownMembership = {
|
||||||
|
...membershipTemplate,
|
||||||
|
user_id: client.getUserId()!,
|
||||||
|
device_id: client.getDeviceId()!,
|
||||||
|
};
|
||||||
// session with two members
|
// session with two members
|
||||||
const member2 = Object.assign({}, membershipTemplate, {
|
const member2 = Object.assign({}, ownMembership, {
|
||||||
device_id: "BBBBBBB",
|
device_id: "BBBBBBB",
|
||||||
|
user_id: "@bob:example.org",
|
||||||
});
|
});
|
||||||
const mockRoom = makeMockRoom([membershipTemplate, member2]);
|
const mockRoom = makeMockRoom([ownMembership, member2]);
|
||||||
sess = await MatrixRTCSession.sessionForRoom(client, mockRoom, callSession);
|
sess = await MatrixRTCSession.sessionForRoom(client, mockRoom, callSession);
|
||||||
|
|
||||||
// joining will trigger an initial key send
|
// joining will trigger an initial key send
|
||||||
@@ -758,14 +765,14 @@ describe("MatrixRTCSession", () => {
|
|||||||
expect(sess!.statistics.counters.roomEventEncryptionKeysSent).toEqual(1);
|
expect(sess!.statistics.counters.roomEventEncryptionKeysSent).toEqual(1);
|
||||||
|
|
||||||
// member2 leaves triggering key rotation
|
// member2 leaves triggering key rotation
|
||||||
mockRoomState(mockRoom, [membershipTemplate]);
|
mockRoomState(mockRoom, [ownMembership]);
|
||||||
await sess.onRTCSessionMemberUpdate();
|
await sess.onRTCSessionMemberUpdate();
|
||||||
|
|
||||||
// member2 re-joins which should trigger an immediate re-send
|
// member2 re-joins which should trigger an immediate re-send
|
||||||
const keysSentPromise2 = new Promise<EncryptionKeysEventContent>((resolve) => {
|
const keysSentPromise2 = new Promise<EncryptionKeysEventContent>((resolve) => {
|
||||||
sendEventMock.mockImplementation((_roomId, _evType, payload) => resolve(payload));
|
sendEventMock.mockImplementation((_roomId, _evType, payload) => resolve(payload));
|
||||||
});
|
});
|
||||||
mockRoomState(mockRoom, [membershipTemplate, member2]);
|
mockRoomState(mockRoom, [ownMembership, member2]);
|
||||||
await sess.onRTCSessionMemberUpdate();
|
await sess.onRTCSessionMemberUpdate();
|
||||||
// but, that immediate resend is throttled so we need to wait a bit
|
// but, that immediate resend is throttled so we need to wait a bit
|
||||||
jest.advanceTimersByTime(1000);
|
jest.advanceTimersByTime(1000);
|
||||||
|
|||||||
@@ -145,7 +145,7 @@ export function makeMockEvent(
|
|||||||
timestamp?: number,
|
timestamp?: number,
|
||||||
): MatrixEvent {
|
): MatrixEvent {
|
||||||
return new MatrixEvent({
|
return new MatrixEvent({
|
||||||
event_id: "mock_event_id",
|
event_id: secureRandomString(8),
|
||||||
sender,
|
sender,
|
||||||
type,
|
type,
|
||||||
content,
|
content,
|
||||||
@@ -155,7 +155,7 @@ export function makeMockEvent(
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function mockRTCEvent({ user_id: sender, ...membershipData }: MembershipData, roomId: string): MatrixEvent {
|
export function mockRTCEvent({ user_id: sender, ...membershipData }: MembershipData, roomId: string): MatrixEvent {
|
||||||
return makeMockEvent(EventType.GroupCallMemberPrefix, sender, roomId, membershipData);
|
return makeMockEvent(EventType.GroupCallMemberPrefix, sender, roomId, membershipData, Date.now());
|
||||||
}
|
}
|
||||||
|
|
||||||
export function mockCallMembership(membershipData: MembershipData, roomId: string): CallMembership {
|
export function mockCallMembership(membershipData: MembershipData, roomId: string): CallMembership {
|
||||||
|
|||||||
Reference in New Issue
Block a user