add tests for open id delay fallback
This commit is contained in:
@@ -34,6 +34,7 @@ describe("getSFUConfigWithOpenID", () => {
|
|||||||
vitest.clearAllMocks();
|
vitest.clearAllMocks();
|
||||||
fetchMock.reset();
|
fetchMock.reset();
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should handle fetching a token", async () => {
|
it("should handle fetching a token", async () => {
|
||||||
fetchMock.post("https://sfu.example.org/sfu/get", () => {
|
fetchMock.post("https://sfu.example.org/sfu/get", () => {
|
||||||
return {
|
return {
|
||||||
@@ -56,6 +57,7 @@ describe("getSFUConfigWithOpenID", () => {
|
|||||||
});
|
});
|
||||||
void (await fetchMock.flush());
|
void (await fetchMock.flush());
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should fail if the SFU errors", async () => {
|
it("should fail if the SFU errors", async () => {
|
||||||
fetchMock.post("https://sfu.example.org/sfu/get", () => {
|
fetchMock.post("https://sfu.example.org/sfu/get", () => {
|
||||||
return {
|
return {
|
||||||
@@ -81,6 +83,103 @@ describe("getSFUConfigWithOpenID", () => {
|
|||||||
expect.fail("Expected test to throw;");
|
expect.fail("Expected test to throw;");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("should try legacy and then new endpoint with delay delegation", async () => {
|
||||||
|
fetchMock.post("https://sfu.example.org/get_token", () => {
|
||||||
|
return {
|
||||||
|
status: 500,
|
||||||
|
body: { error: "Test failure" },
|
||||||
|
};
|
||||||
|
});
|
||||||
|
fetchMock.post("https://sfu.example.org/sfu/get", () => {
|
||||||
|
return {
|
||||||
|
status: 500,
|
||||||
|
body: { error: "Test failure" },
|
||||||
|
};
|
||||||
|
});
|
||||||
|
try {
|
||||||
|
await getSFUConfigWithOpenID(
|
||||||
|
matrixClient,
|
||||||
|
ownMemberMock,
|
||||||
|
"https://sfu.example.org",
|
||||||
|
false,
|
||||||
|
"!example_room_id",
|
||||||
|
"https://matrix.homeserverserver.org",
|
||||||
|
"mock_delay_id",
|
||||||
|
);
|
||||||
|
} catch (ex) {
|
||||||
|
logger.info(ex);
|
||||||
|
expect(((ex as Error).cause as Error).message).toEqual(
|
||||||
|
"SFU Config fetch failed with status code 500",
|
||||||
|
);
|
||||||
|
void (await fetchMock.flush());
|
||||||
|
}
|
||||||
|
const calls = fetchMock.calls();
|
||||||
|
expect(calls.length).toBe(2);
|
||||||
|
|
||||||
|
expect(calls[0][0]).toStrictEqual("https://sfu.example.org/get_token");
|
||||||
|
expect(calls[0][1]).toStrictEqual({
|
||||||
|
// check if it uses correct delayID!
|
||||||
|
body: '{"room_id":"!example_room_id","slot_id":"m.call#ROOM","member":{"id":"@alice:example.org:DEVICE","claimed_user_id":"@alice:example.org","claimed_device_id":"DEVICE"},"delay_id":"mock_delay_id","delay_timeout":1000,"delay_cs_api_url":"https://matrix.homeserverserver.org"}',
|
||||||
|
method: "POST",
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(calls[1][0]).toStrictEqual("https://sfu.example.org/sfu/get");
|
||||||
|
|
||||||
|
expect(calls[1][1]).toStrictEqual({
|
||||||
|
body: '{"room":"!example_room_id","device_id":"DEVICE"}',
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
method: "POST",
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it("dont try legacy if endpoint with delay delegation is sucessful", async () => {
|
||||||
|
fetchMock.post("https://sfu.example.org/get_token", () => {
|
||||||
|
return {
|
||||||
|
status: 200,
|
||||||
|
body: { url: sfuUrl, jwt: testJWTToken },
|
||||||
|
};
|
||||||
|
});
|
||||||
|
fetchMock.post("https://sfu.example.org/sfu/get", () => {
|
||||||
|
return {
|
||||||
|
status: 500,
|
||||||
|
body: { error: "Test failure" },
|
||||||
|
};
|
||||||
|
});
|
||||||
|
try {
|
||||||
|
await getSFUConfigWithOpenID(
|
||||||
|
matrixClient,
|
||||||
|
ownMemberMock,
|
||||||
|
"https://sfu.example.org",
|
||||||
|
false,
|
||||||
|
"!example_room_id",
|
||||||
|
"https://matrix.homeserverserver.org",
|
||||||
|
"mock_delay_id",
|
||||||
|
);
|
||||||
|
} catch (ex) {
|
||||||
|
expect(((ex as Error).cause as Error).message).toEqual(
|
||||||
|
"SFU Config fetch failed with status code 500",
|
||||||
|
);
|
||||||
|
void (await fetchMock.flush());
|
||||||
|
}
|
||||||
|
const calls = fetchMock.calls();
|
||||||
|
expect(calls.length).toBe(1);
|
||||||
|
|
||||||
|
expect(calls[0][0]).toStrictEqual("https://sfu.example.org/get_token");
|
||||||
|
expect(calls[0][1]).toStrictEqual({
|
||||||
|
// check if it uses correct delayID!
|
||||||
|
body: '{"room_id":"!example_room_id","slot_id":"m.call#ROOM","member":{"id":"@alice:example.org:DEVICE","claimed_user_id":"@alice:example.org","claimed_device_id":"DEVICE"},"delay_id":"mock_delay_id","delay_timeout":1000,"delay_cs_api_url":"https://matrix.homeserverserver.org"}',
|
||||||
|
method: "POST",
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it("should retry fetching the openid token", async () => {
|
it("should retry fetching the openid token", async () => {
|
||||||
let count = 0;
|
let count = 0;
|
||||||
matrixClient.getOpenIdToken.mockImplementation(async () => {
|
matrixClient.getOpenIdToken.mockImplementation(async () => {
|
||||||
|
|||||||
@@ -49,16 +49,12 @@ const transportB: LivekitTransport = {
|
|||||||
livekit_alias: "!alias:sample.com",
|
livekit_alias: "!alias:sample.com",
|
||||||
};
|
};
|
||||||
|
|
||||||
const bobMembership = mockRtcMembership(
|
const bobMembership = mockRtcMembership("@bob:example.org", "DEV000", {
|
||||||
"@bob:example.org",
|
fociPreferred: [transportA],
|
||||||
"DEV000",
|
});
|
||||||
transportA,
|
const carlMembership = mockRtcMembership("@carl:sample.com", "DEV111", {
|
||||||
);
|
fociPreferred: [transportB],
|
||||||
const carlMembership = mockRtcMembership(
|
});
|
||||||
"@carl:sample.com",
|
|
||||||
"DEV111",
|
|
||||||
transportB,
|
|
||||||
);
|
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
testScope = new ObservableScope();
|
testScope = new ObservableScope();
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ import {
|
|||||||
vitest,
|
vitest,
|
||||||
} from "vitest";
|
} from "vitest";
|
||||||
import {
|
import {
|
||||||
encodeUnpaddedBase64,
|
|
||||||
MatrixEvent,
|
MatrixEvent,
|
||||||
type Room as MatrixRoom,
|
type Room as MatrixRoom,
|
||||||
type Room,
|
type Room,
|
||||||
@@ -44,7 +43,7 @@ import {
|
|||||||
type Room as LivekitRoom,
|
type Room as LivekitRoom,
|
||||||
Track,
|
Track,
|
||||||
} from "livekit-client";
|
} from "livekit-client";
|
||||||
import { createHash, randomUUID } from "crypto";
|
import { randomUUID } from "crypto";
|
||||||
import { type TrackReference } from "@livekit/components-core";
|
import { type TrackReference } from "@livekit/components-core";
|
||||||
import EventEmitter from "events";
|
import EventEmitter from "events";
|
||||||
import {
|
import {
|
||||||
|
|||||||
Reference in New Issue
Block a user