feat: setup project
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
/* Дымовой тест 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');
|
||||
Reference in New Issue
Block a user