From 795a3cffb61d672941c49e8139eb1d7b15c87d73 Mon Sep 17 00:00:00 2001 From: Timo Date: Mon, 16 Dec 2024 19:59:19 +0100 Subject: [PATCH] dont adjust tests but remove legacy tests --- spec/unit/matrixrtc/CallMembership.spec.ts | 12 - spec/unit/matrixrtc/MatrixRTCSession.spec.ts | 275 +------------------ src/matrixrtc/MatrixRTCSession.ts | 25 -- 3 files changed, 3 insertions(+), 309 deletions(-) diff --git a/spec/unit/matrixrtc/CallMembership.spec.ts b/spec/unit/matrixrtc/CallMembership.spec.ts index fb2df400b9..970026a347 100644 --- a/spec/unit/matrixrtc/CallMembership.spec.ts +++ b/spec/unit/matrixrtc/CallMembership.spec.ts @@ -75,18 +75,6 @@ describe("CallMembership", () => { expect(membership.createdTs()).toEqual(67890); }); - it("considers memberships unexpired if local age low enough", () => { - const fakeEvent = makeMockEvent(1000); - fakeEvent.getTs = jest.fn().mockReturnValue(Date.now() - (DEFAULT_EXPIRE_DURATION - 1)); - expect(new CallMembership(fakeEvent, membershipTemplate).isExpired()).toEqual(false); - }); - - it("considers memberships expired if local age large enough", () => { - const fakeEvent = makeMockEvent(1000); - fakeEvent.getTs = jest.fn().mockReturnValue(Date.now() - (DEFAULT_EXPIRE_DURATION + 1)); - expect(new CallMembership(fakeEvent, membershipTemplate).isExpired()).toEqual(true); - }); - it("returns preferred foci", () => { const fakeEvent = makeMockEvent(); const mockFocus = { type: "this_is_a_mock_focus" }; diff --git a/spec/unit/matrixrtc/MatrixRTCSession.spec.ts b/spec/unit/matrixrtc/MatrixRTCSession.spec.ts index 861801a76c..2bb7ffc1fb 100644 --- a/spec/unit/matrixrtc/MatrixRTCSession.spec.ts +++ b/spec/unit/matrixrtc/MatrixRTCSession.spec.ts @@ -14,13 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { encodeBase64, EventTimeline, EventType, MatrixClient, MatrixError, MatrixEvent, Room } from "../../../src"; +import { encodeBase64, EventType, MatrixClient, MatrixError, MatrixEvent, Room } from "../../../src"; import { KnownMembership } from "../../../src/@types/membership"; -import { DEFAULT_EXPIRE_DURATION, SessionMembershipData } from "../../../src/matrixrtc/CallMembership"; +import { SessionMembershipData } from "../../../src/matrixrtc/CallMembership"; import { MatrixRTCSession, MatrixRTCSessionEvent } from "../../../src/matrixrtc/MatrixRTCSession"; import { EncryptionKeysEventContent } from "../../../src/matrixrtc/types"; import { randomString } from "../../../src/randomstring"; -import { makeMockRoom, makeMockRoomState, membershipTemplate, mockRTCEvent } from "./mocks"; +import { makeMockRoom, makeMockRoomState, membershipTemplate } from "./mocks"; const mockFocus = { type: "mock" }; @@ -269,55 +269,6 @@ describe("MatrixRTCSession", () => { }); }); - describe("getsActiveFocus", () => { - const firstPreferredFocus = { - type: "livekit", - livekit_service_url: "https://active.url", - livekit_alias: "!active:active.url", - }; - it("gets the correct active focus with oldest_membership", () => { - jest.useFakeTimers(); - jest.setSystemTime(3000); - const mockRoom = makeMockRoom([ - Object.assign({}, membershipTemplate, { - device_id: "foo", - created_ts: 500, - foci_preferred: [firstPreferredFocus], - }), - Object.assign({}, membershipTemplate, { device_id: "old", created_ts: 1000 }), - Object.assign({}, membershipTemplate, { device_id: "bar", created_ts: 2000 }), - ]); - - sess = MatrixRTCSession.roomSessionForRoom(client, mockRoom); - - sess.joinRoomSession([{ type: "livekit", livekit_service_url: "htts://test.org" }], { - type: "livekit", - focus_selection: "oldest_membership", - }); - expect(sess.getActiveFocus()).toBe(firstPreferredFocus); - jest.useRealTimers(); - }); - it("does not provide focus if the selection method is unknown", () => { - const mockRoom = makeMockRoom([ - Object.assign({}, membershipTemplate, { - device_id: "foo", - created_ts: 500, - foci_preferred: [firstPreferredFocus], - }), - Object.assign({}, membershipTemplate, { device_id: "old", created_ts: 1000 }), - Object.assign({}, membershipTemplate, { device_id: "bar", created_ts: 2000 }), - ]); - - sess = MatrixRTCSession.roomSessionForRoom(client, mockRoom); - - sess.joinRoomSession([{ type: "livekit", livekit_service_url: "htts://test.org" }], { - type: "livekit", - focus_selection: "unknown", - }); - expect(sess.getActiveFocus()).toBe(undefined); - }); - }); - describe("joining", () => { let mockRoom: Room; let sendStateEventMock: jest.Mock; @@ -368,68 +319,6 @@ describe("MatrixRTCSession", () => { expect(sess!.isJoined()).toEqual(true); }); - it("sends a membership event when joining a call", async () => { - const realSetTimeout = setTimeout; - jest.useFakeTimers(); - sess!.joinRoomSession([mockFocus], mockFocus); - await Promise.race([sentStateEvent, new Promise((resolve) => realSetTimeout(resolve, 500))]); - expect(client.sendStateEvent).toHaveBeenCalledWith( - mockRoom!.roomId, - EventType.GroupCallMemberPrefix, - { - application: "m.call", - scope: "m.room", - call_id: "", - device_id: "AAAAAAA", - expires: DEFAULT_EXPIRE_DURATION, - foci_preferred: [mockFocus], - focus_active: { - focus_selection: "oldest_membership", - type: "livekit", - }, - }, - "_@alice:example.org_AAAAAAA", - ); - await Promise.race([sentDelayedState, new Promise((resolve) => realSetTimeout(resolve, 500))]); - // Because we actually want to send the state - expect(client.sendStateEvent).toHaveBeenCalledTimes(1); - // For checking if the delayed event is still there or got removed while sending the state. - expect(client._unstable_updateDelayedEvent).toHaveBeenCalledTimes(1); - // For scheduling the delayed event - expect(client._unstable_sendDelayedStateEvent).toHaveBeenCalledTimes(1); - // This returns no error so we do not check if we reschedule the event again. this is done in another test. - - jest.useRealTimers(); - }); - - it("uses membershipExpiryTimeout from join config", async () => { - const realSetTimeout = setTimeout; - jest.useFakeTimers(); - sess!.joinRoomSession([mockFocus], mockFocus, { membershipExpiryTimeout: 60000 }); - await Promise.race([sentStateEvent, new Promise((resolve) => realSetTimeout(resolve, 500))]); - expect(client.sendStateEvent).toHaveBeenCalledWith( - mockRoom!.roomId, - EventType.GroupCallMemberPrefix, - { - application: "m.call", - scope: "m.room", - call_id: "", - device_id: "AAAAAAA", - expires: 60000, - foci_preferred: [mockFocus], - focus_active: { - focus_selection: "oldest_membership", - type: "livekit", - }, - }, - - "_@alice:example.org_AAAAAAA", - ); - await Promise.race([sentDelayedState, new Promise((resolve) => realSetTimeout(resolve, 500))]); - expect(client._unstable_sendDelayedStateEvent).toHaveBeenCalledTimes(1); - jest.useRealTimers(); - }); - describe("calls", () => { const activeFocusConfig = { type: "livekit", livekit_service_url: "https://active.url" }; const activeFocus = { type: "livekit", focus_selection: "oldest_membership" }; @@ -547,78 +436,6 @@ describe("MatrixRTCSession", () => { expect(client.sendStateEvent).toHaveBeenCalledTimes(1); }); - it("renews membership event before expiry time", async () => { - return "TODO add back the renew method since we also want this for non-legacy events."; - const activeFocus = { type: "livekit", focus_selection: "oldest_membership" }; - - jest.useFakeTimers(); - let resolveFn: ((_roomId: string, _type: string, val: Record) => void) | undefined; - - const eventSentPromise = new Promise>((r) => { - resolveFn = (_roomId: string, _type: string, val: Record) => { - r(val); - }; - }); - try { - const sendStateEventMock = jest.fn().mockImplementation(resolveFn); - client.sendStateEvent = sendStateEventMock; - - sess!.joinRoomSession([mockFocus], mockFocus, { membershipExpiryTimeout: 60 * 60 * 1000 }); - - const eventContent = await eventSentPromise; - - jest.setSystemTime(1000); - const event = mockRTCEvent(eventContent.memberships, mockRoom.roomId); - const getState = mockRoom.getLiveTimeline().getState(EventTimeline.FORWARDS)!; - getState.getStateEvents = jest.fn().mockReturnValue(event); - getState.events = new Map([ - [ - event.getType(), - { - size: () => true, - has: (_stateKey: string) => true, - get: (_stateKey: string) => event, - values: () => [event], - } as unknown as Map, - ], - ]); - - const eventReSentPromise = new Promise>((r) => { - resolveFn = (_roomId: string, _type: string, val: Record) => { - r(val); - }; - }); - - sendStateEventMock.mockReset().mockImplementation(resolveFn); - - // definitely should have renewed by 1 second before the expiry! - const timeElapsed = 60 * 60 * 1000 - 1000; - jest.setSystemTime(Date.now() + timeElapsed); - jest.advanceTimersByTime(timeElapsed); - await eventReSentPromise; - - expect(sendStateEventMock).toHaveBeenCalledWith( - mockRoom.roomId, - EventType.GroupCallMemberPrefix, - { - application: "m.call", - scope: "m.room", - call_id: "", - device_id: "AAAAAAA", - expires: 3600000 * 2, - foci_preferred: [mockFocus], - focus_active: activeFocus, - created_ts: 1000, - membershipID: expect.stringMatching(".*"), - }, - "_@alice:example.org_AAAAAAA", - ); - } finally { - jest.useRealTimers(); - } - }); - }); - describe("onMembershipsChanged", () => { it("does not emit if no membership changes", () => { const mockRoom = makeMockRoom(membershipTemplate); @@ -950,92 +767,6 @@ describe("MatrixRTCSession", () => { } }); - it("re-sends key if a member changes membership ID", async () => { - return "membershipID is not a thing anymore"; - /* - jest.useFakeTimers(); - try { - const keysSentPromise1 = new Promise((resolve) => { - sendEventMock.mockImplementation(resolve); - }); - - const member1 = membershipTemplate; - const member2 = { - ...membershipTemplate, - device_id: "BBBBBBB", - }; - - const mockRoom = makeMockRoom([member1, member2]); - mockRoom.getLiveTimeline().getState = jest - .fn() - .mockReturnValue(makeMockRoomState([member1, member2], mockRoom.roomId)); - - sess = MatrixRTCSession.roomSessionForRoom(client, mockRoom); - sess.joinRoomSession([mockFocus], mockFocus, { manageMediaKeys: true }); - - await keysSentPromise1; - - // make sure an encryption key was sent - expect(sendEventMock).toHaveBeenCalledWith( - expect.stringMatching(".*"), - "io.element.call.encryption_keys", - { - call_id: "", - device_id: "AAAAAAA", - keys: [ - { - index: 0, - key: expect.stringMatching(".*"), - }, - ], - sent_ts: Date.now(), - }, - ); - expect(sess!.statistics.counters.roomEventEncryptionKeysSent).toEqual(1); - - sendEventMock.mockClear(); - - // this should be a no-op: - sess.onMembershipUpdate(); - expect(sendEventMock).toHaveBeenCalledTimes(0); - - // advance time to avoid key throttling - jest.advanceTimersByTime(10000); - - // update membership ID - member2.membershipID = "newID"; - - const keysSentPromise2 = new Promise((resolve) => { - sendEventMock.mockImplementation(resolve); - }); - - // this should re-send the key - sess.onMembershipUpdate(); - - await keysSentPromise2; - - expect(sendEventMock).toHaveBeenCalledWith( - expect.stringMatching(".*"), - "io.element.call.encryption_keys", - { - call_id: "", - device_id: "AAAAAAA", - keys: [ - { - index: 0, - key: expect.stringMatching(".*"), - }, - ], - sent_ts: Date.now(), - }, - ); - expect(sess!.statistics.counters.roomEventEncryptionKeysSent).toEqual(2); - } finally { - jest.useRealTimers(); - } - */ - }); - it("re-sends key if a member changes created_ts", async () => { jest.useFakeTimers(); jest.setSystemTime(1000); diff --git a/src/matrixrtc/MatrixRTCSession.ts b/src/matrixrtc/MatrixRTCSession.ts index 884860c7c2..525fe50628 100644 --- a/src/matrixrtc/MatrixRTCSession.ts +++ b/src/matrixrtc/MatrixRTCSession.ts @@ -911,31 +911,6 @@ export class MatrixRTCSession extends TypedEventEmitter