This commit is contained in:
2026-05-25 22:58:11 +08:00
parent e6dfb28ef2
commit d74a0c8121
12 changed files with 347 additions and 189 deletions

View File

@@ -1,18 +1,49 @@
import { jest } from '@jest/globals';
import fs from 'fs';
import * as Path from 'path';
import process from 'process';
import { setup, teardown } from 'jest-dev-server';
import { Signaling, WebSocketSignaling } from "../../src/core/signaling.js";
import { MockSignaling, reset } from "../mocks/mocksignaling.js";
import { waitFor, sleep, serverExeName } from "../helpers/testutils.js";
const portNumber = 8081;
const runSignalingIntegration = process.env.RUN_SIGNALING_INTEGRATION === '1';
const signalingModes = runSignalingIntegration
? [{ mode: "mock" }, { mode: "http" }, { mode: "websocket" }]
: [{ mode: "mock" }];
jest.setTimeout(10000);
describe.each([
{ mode: "mock" },
{ mode: "http" },
{ mode: "websocket" },
])('signaling test in public mode', ({ mode }) => {
function buildServerCommand(args = '') {
const binaryPath = Path.resolve(`../bin~/${serverExeName()}`);
const buildEntryPath = Path.resolve('../build/index.js');
const serverCommand = fs.existsSync(binaryPath)
? `"${binaryPath}"`
: `"${process.execPath}" "${buildEntryPath}"`;
return `${serverCommand} ${args}`.trim();
}
function getPortForMode(mode, isPrivate) {
if (mode === 'mock') {
return portNumber;
}
const publicPorts = { http: portNumber + 1, websocket: portNumber + 2 };
const privatePorts = { http: portNumber + 3, websocket: portNumber + 4 };
return (isPrivate ? privatePorts : publicPorts)[mode];
}
function createHttpSignaling(port) {
return new Signaling(1, `http://localhost:${port}`);
}
function createWebSocketSignaling(port) {
return new WebSocketSignaling(1, `ws://localhost:${port}`);
}
describe.each(signalingModes)('signaling test in public mode', ({ mode }) => {
let signaling1;
let signaling2;
const connectionId1 = "12345";
@@ -26,22 +57,22 @@ describe.each([
signaling1 = new MockSignaling(1);
signaling2 = new MockSignaling(1);
} else {
const path = Path.resolve(`../bin~/${serverExeName()}`);
let cmd = `${path} -p ${portNumber}`;
const serverPort = getPortForMode(mode, false);
let cmd = buildServerCommand(`-p ${serverPort}`);
if (mode == "http") {
cmd += " -t http";
}
await setup({ command: cmd, port: portNumber, usedPortAction: 'error' });
await setup({ command: cmd, port: serverPort, usedPortAction: 'error' });
if (mode == "http") {
signaling1 = new Signaling(1);
signaling2 = new Signaling(1);
signaling1 = createHttpSignaling(serverPort);
signaling2 = createHttpSignaling(serverPort);
}
if (mode == "websocket") {
signaling1 = new WebSocketSignaling(1);
signaling2 = new WebSocketSignaling(1);
signaling1 = createWebSocketSignaling(serverPort);
signaling2 = createWebSocketSignaling(serverPort);
}
}
@@ -50,8 +81,8 @@ describe.each([
});
afterAll(async () => {
await signaling1.stop();
await signaling2.stop();
await signaling1?.stop();
await signaling2?.stop();
signaling1 = null;
signaling2 = null;
@@ -207,11 +238,7 @@ describe.each([
});
});
describe.each([
{ mode: "mock" },
{ mode: "http" },
{ mode: "websocket" },
])('signaling test in private mode', ({ mode }) => {
describe.each(signalingModes)('signaling test in private mode', ({ mode }) => {
let signaling1;
let signaling2;
const connectionId = "12345";
@@ -226,22 +253,22 @@ describe.each([
return;
}
const path = Path.resolve(`../bin~/${serverExeName()}`);
let cmd = `${path} -p ${portNumber} -m private`;
const serverPort = getPortForMode(mode, true);
let cmd = buildServerCommand(`-p ${serverPort} -m private`);
if (mode == "http") {
cmd += " -t http";
}
await setup({ command: cmd, port: portNumber, usedPortAction: 'error' });
await setup({ command: cmd, port: serverPort, usedPortAction: 'error' });
if (mode == "http") {
signaling1 = new Signaling(1);
signaling2 = new Signaling(1);
signaling1 = createHttpSignaling(serverPort);
signaling2 = createHttpSignaling(serverPort);
}
if (mode == "websocket") {
signaling1 = new WebSocketSignaling(1);
signaling2 = new WebSocketSignaling(1);
signaling1 = createWebSocketSignaling(serverPort);
signaling2 = createWebSocketSignaling(serverPort);
}
await signaling1.start();
@@ -249,8 +276,8 @@ describe.each([
});
afterAll(async () => {
await signaling1.stop();
await signaling2.stop();
await signaling1?.stop();
await signaling2?.stop();
signaling1 = null;
signaling2 = null;