diff --git a/spec/unit/matrixrtc/MatrixRTCSession.spec.ts b/spec/unit/matrixrtc/MatrixRTCSession.spec.ts index 8424d9704..df998c2d1 100644 --- a/spec/unit/matrixrtc/MatrixRTCSession.spec.ts +++ b/spec/unit/matrixrtc/MatrixRTCSession.spec.ts @@ -773,7 +773,7 @@ describe("MatrixRTCSession", () => { expect(client.cancelPendingEvent).toHaveBeenCalledWith(eventSentinel); }); - it("rotates key if a new member joins", async () => { + it("Re-sends key if a new member joins", async () => { jest.useFakeTimers(); try { const mockRoom = makeMockRoom([membershipTemplate]); @@ -784,9 +784,7 @@ describe("MatrixRTCSession", () => { }); sess.joinRoomSession([mockFocus], mockFocus, { manageMediaKeys: true }); - const firstKeysPayload = await keysSentPromise1; - expect(firstKeysPayload.keys).toHaveLength(1); - expect(firstKeysPayload.keys[0].index).toEqual(0); + await keysSentPromise1; expect(sess!.statistics.counters.roomEventEncryptionKeysSent).toEqual(1); sendEventMock.mockClear(); @@ -808,14 +806,9 @@ describe("MatrixRTCSession", () => { .mockReturnValue(makeMockRoomState([membershipTemplate, member2], mockRoom.roomId)); sess.onMembershipUpdate(); - jest.advanceTimersByTime(10000); - - const secondKeysPayload = await keysSentPromise2; + await keysSentPromise2; expect(sendEventMock).toHaveBeenCalled(); - expect(secondKeysPayload.keys).toHaveLength(1); - expect(secondKeysPayload.keys[0].index).toEqual(1); - expect(secondKeysPayload.keys[0].key).not.toEqual(firstKeysPayload.keys[0].key); expect(sess!.statistics.counters.roomEventEncryptionKeysSent).toEqual(2); } finally { jest.useRealTimers(); @@ -1103,8 +1096,8 @@ describe("MatrixRTCSession", () => { } jest.useFakeTimers(); try { - // start with a single member - const mockRoom = makeMockRoom(members.slice(0, 1)); + // start with all members + const mockRoom = makeMockRoom(members); for (let i = 0; i < membersToTest; i++) { const keysSentPromise = new Promise((resolve) => { @@ -1116,10 +1109,12 @@ describe("MatrixRTCSession", () => { sess = MatrixRTCSession.roomSessionForRoom(client, mockRoom); sess.joinRoomSession([mockFocus], mockFocus, { manageMediaKeys: true }); } else { - // otherwise update the state + // otherwise update the state reducing the membership each time in order to trigger key rotation mockRoom.getLiveTimeline().getState = jest .fn() - .mockReturnValue(makeMockRoomState(members.slice(0, i + 1), mockRoom.roomId)); + .mockReturnValue( + makeMockRoomState(members.slice(0, membersToTest - i), mockRoom.roomId), + ); } sess!.onMembershipUpdate(); diff --git a/src/matrixrtc/MatrixRTCSession.ts b/src/matrixrtc/MatrixRTCSession.ts index b35205519..0e4b385b9 100644 --- a/src/matrixrtc/MatrixRTCSession.ts +++ b/src/matrixrtc/MatrixRTCSession.ts @@ -328,7 +328,7 @@ export class MatrixRTCSession extends TypedEventEmitter !oldFingerprints.has(x)); if (candidateUpdates) { logger.debug(`Member(s) have updated/reconnected: re-sending keys to everyone`); - this.requestKeyEventSend(); + this.requestSendCurrentKey(); } } }