39 lines
1.5 KiB
JavaScript
39 lines
1.5 KiB
JavaScript
/* Дымовой тест M0: сервер должен быть запущен. `pnpm --filter @idle/server smoke` */
|
|
import WebSocket from 'ws';
|
|
|
|
const seen = [];
|
|
await new Promise((resolve, reject) => {
|
|
const ws = new WebSocket('ws://localhost:3000/ws');
|
|
ws.on('open', () => ws.send(JSON.stringify({ t: 'hello', v: 1 })));
|
|
ws.on('message', (d) => {
|
|
seen.push(JSON.parse(String(d)));
|
|
if (seen.length >= 2) {
|
|
ws.close();
|
|
resolve();
|
|
}
|
|
});
|
|
ws.on('error', reject);
|
|
setTimeout(() => reject(new Error('timeout waiting for welcome+snapshot')), 5000);
|
|
});
|
|
|
|
const [welcome, snap] = seen;
|
|
console.log('welcome:', JSON.stringify(welcome));
|
|
console.log(
|
|
'avatars:',
|
|
snap.avatars.map((a) => `${a.name}@${a.x},${a.y} ${a.face}`).join(' | '),
|
|
);
|
|
if (welcome.t !== 'welcome' || welcome.v !== 1) throw new Error('bad welcome');
|
|
if (snap.t !== 'snapshot' || snap.avatars.length !== 3) throw new Error('bad snapshot');
|
|
|
|
// неверная версия протокола — сервер обязан закрыть сокет с кодом 4001
|
|
const closeCode = await new Promise((resolve) => {
|
|
const ws = new WebSocket('ws://localhost:3000/ws');
|
|
ws.on('open', () => ws.send(JSON.stringify({ t: 'hello', v: 999 })));
|
|
ws.on('close', (code) => resolve(code));
|
|
setTimeout(() => resolve('no-close'), 3000);
|
|
});
|
|
console.log('close code for wrong version:', closeCode);
|
|
if (closeCode !== 4001) throw new Error(`expected close 4001, got ${closeCode}`);
|
|
|
|
console.log('WS smoke: OK');
|