backend(test): add LiveKit CLI installation check before joining fake participant

This commit is contained in:
Carlos Santos 2025-06-11 10:24:43 +02:00
parent e3cce4a03c
commit 17788f3a27

View File

@ -374,6 +374,7 @@ export const refreshParticipantToken = async (participantOptions: any) => {
* @param participantName The name for the fake participant
*/
export const joinFakeParticipant = async (roomId: string, participantName: string) => {
await ensureLivekitCliInstalled();
const process = spawn('lk', [
'room',
'join',
@ -392,6 +393,54 @@ export const joinFakeParticipant = async (roomId: string, participantName: strin
await sleep('1s');
};
/**
* Verifies that the LiveKit CLI tool 'lk' is installed and accessible
* @throws Error if 'lk' command is not found
*/
const ensureLivekitCliInstalled = async (): Promise<void> => {
return new Promise((resolve, reject) => {
const checkProcess = spawn('lk', ['--version'], {
stdio: 'pipe'
});
let hasResolved = false;
const resolveOnce = (success: boolean, message?: string) => {
if (hasResolved) return;
hasResolved = true;
if (success) {
resolve();
} else {
reject(new Error(message || 'LiveKit CLI check failed'));
}
};
checkProcess.on('error', (error) => {
if (error.message.includes('ENOENT')) {
resolveOnce(false, '❌ LiveKit CLI tool "lk" is not installed or not in PATH.');
} else {
resolveOnce(false, `Failed to check LiveKit CLI: ${error.message}`);
}
});
checkProcess.on('exit', (code) => {
if (code === 0) {
resolveOnce(true);
} else {
resolveOnce(false, `LiveKit CLI exited with code ${code}`);
}
});
// Timeout after 5 seconds
setTimeout(() => {
checkProcess.kill();
resolveOnce(false, 'LiveKit CLI check timed out');
}, 5000);
});
};
export const disconnectFakeParticipants = async () => {
fakeParticipantsProcesses.forEach((process, participantName) => {
process.kill();