Files
upstream-jitsi-meet/tests/prosody/mod_auth_jitsi_anonymous_spec.js
upstream-mirror 1d2bfcac0c
Some checks failed
Prosody Plugin Tests / test (push) Failing after 10m11s
Close stale issues and PRs / stale (push) Failing after 1s
snapshot of https://github.com/jitsi/jitsi-meet.git @ fd1749dd28f4138aa80234fc7f311b19aaffa0e7 (2026-09-15)
2026-09-15 15:56:32 +05:00

81 lines
2.7 KiB
JavaScript

import assert from 'assert';
import { createXmppClient } from './helpers/xmpp_client.js';
describe('mod_auth_jitsi-anonymous', () => {
const clients = [];
afterEach(async () => {
await Promise.all(clients.map(c => c.disconnect()));
clients.length = 0;
});
/**
* Creates and connects an XMPP client.
*
* @param {object} opts - Options passed to createXmppClient.
* @returns {Promise<object>}
*/
async function connect(opts = {}) {
const c = await createXmppClient({ domain: 'jitsi-anonymous.localhost',
...opts });
clients.push(c);
return c;
}
it('assigns a UUID-based JID on anonymous connect', async () => {
const c = await connect();
assert.ok(c.jid, 'client must have a JID after connect');
const username = c.jid.split('@')[0];
// Prosody anonymous auth assigns a UUID (32 hex chars + 4 dashes = 36 chars).
assert.match(username,
/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/,
`JID username must be a UUID, got: ${username}`);
});
it('assigns a different JID to each client', async () => {
const c1 = await connect();
const c2 = await connect();
assert.notEqual(c1.jid.split('@')[0], c2.jid.split('@')[0],
'each anonymous client must get a unique username');
});
it('resumes session with same username when previd matches SM token', async () => {
const c1 = await connect();
const username = c1.jid.split('@')[0];
// Capture the SM resumption token before disconnecting — it is cleared on offline.
const smId = c1.smId;
assert.ok(smId, 'stream management id must be set after connect');
// Drop the connection abruptly (no stream close) so Prosody puts the
// session into smacks hibernation — it stays in full_sessions where
// mod_auth_jitsi-anonymous can find it by resumption_token.
c1.dropConnection();
// Reconnect with previd — mod_auth_jitsi-anonymous should reuse the username.
const c2 = await connect({ params: { previd: smId } });
assert.equal(c2.jid.split('@')[0], username,
'reconnecting with previd must yield the same username');
});
it('assigns a new username when previd does not match any session', async () => {
const c = await connect({ params: { previd: 'nonexistent-token' } });
const username = c.jid.split('@')[0];
assert.match(username,
/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/,
'unmatched previd must fall back to a fresh UUID username');
});
});