import { test } from 'node:test'; import assert from 'node:assert/strict'; import { ReconnectPolicy } from '../../YouleNexus/assets/framework/net/reconnect.ts'; test('单服务器:失败永不轮换', () => { const p = new ReconnectPolicy('ws://a', 3); assert.equal(p.current(), 'ws://a'); for (let i = 0; i < 10; i++) assert.equal(p.onFailure(), 'ws://a'); }); test('多服务器:每 3 次失败轮换下一个', () => { const p = new ReconnectPolicy(['ws://a', 'ws://b', 'ws://c'], 3); assert.equal(p.onFailure(), 'ws://a'); // 1 assert.equal(p.onFailure(), 'ws://a'); // 2 assert.equal(p.onFailure(), 'ws://b'); // 3 → 轮换 assert.equal(p.onFailure(), 'ws://b'); // 4 assert.equal(p.onFailure(), 'ws://b'); // 5 assert.equal(p.onFailure(), 'ws://c'); // 6 → 轮换 }); test('reset 清零失败计数', () => { const p = new ReconnectPolicy(['ws://a', 'ws://b'], 3); p.onFailure(); p.onFailure(); p.reset(); assert.equal(p.onFailure(), 'ws://a'); // 计数从 1 起,未到 3,不轮换 }); test('setCurrent 切换到指定服务器(服务器切换指令)', () => { const p = new ReconnectPolicy(['ws://a', 'ws://b'], 3); p.setCurrent('ws://room1'); assert.equal(p.current(), 'ws://room1'); });