55 lines
2.1 KiB
TypeScript
55 lines
2.1 KiB
TypeScript
import { readFileSync } from 'node:fs';
|
|
import { test } from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { parseUrlServers } from '../../YouleNexus/assets/framework/config/remote-config.ts';
|
|
|
|
const single = JSON.parse(readFileSync(
|
|
new URL('../fixtures/contracts/remote-config-single.json', import.meta.url),
|
|
'utf8',
|
|
)) as unknown;
|
|
const array = JSON.parse(readFileSync(
|
|
new URL('../fixtures/contracts/remote-config-array.json', import.meta.url),
|
|
'utf8',
|
|
)) as unknown;
|
|
|
|
test('parseUrlServers:读取 data.urlserver 字符串并补 ws://', () => {
|
|
assert.deepEqual(parseUrlServers(single), ['ws://10.0.0.1:3088']);
|
|
});
|
|
|
|
test('parseUrlServers:读取 data.urlserver 数组并保留已有 wss://', () => {
|
|
assert.deepEqual(parseUrlServers(array), ['ws://10.0.0.1:3088', 'wss://backup.example/ws']);
|
|
});
|
|
|
|
test('parseUrlServers:拒绝旧的 *_server_tcp 字段', () => {
|
|
assert.throws(
|
|
() => parseUrlServers({ data: { player_server_tcp: 'wrong:1' } }),
|
|
/data\.urlserver/,
|
|
);
|
|
});
|
|
|
|
test('parseUrlServers:保留原顺序和重复项,并冻结结果', () => {
|
|
const servers = parseUrlServers({ data: { urlserver: ['same:1', 'same:1', 'ws://last:2'] } });
|
|
assert.deepEqual(servers, ['ws://same:1', 'ws://same:1', 'ws://last:2']);
|
|
assert.equal(Object.isFrozen(servers), true);
|
|
});
|
|
|
|
test('parseUrlServers:拒绝空字符串、空数组和非字符串数组项', () => {
|
|
assert.throws(() => parseUrlServers({ data: { urlserver: '' } }), /data\.urlserver/);
|
|
assert.throws(() => parseUrlServers({ data: { urlserver: [] } }), /data\.urlserver/);
|
|
assert.throws(() => parseUrlServers({ data: { urlserver: ['ok:1', ''] } }), /data\.urlserver/);
|
|
assert.throws(() => parseUrlServers({ data: { urlserver: ['ok:1', 2] } }), /data\.urlserver/);
|
|
});
|
|
|
|
test('parseUrlServers:显式拒绝已有的非 WebSocket scheme', () => {
|
|
for (const value of [
|
|
'http://config.example/ws',
|
|
'https://config.example/ws',
|
|
'ftp://config.example/ws',
|
|
]) {
|
|
assert.throws(
|
|
() => parseUrlServers({ data: { urlserver: value } }),
|
|
/不支持.*scheme/i,
|
|
);
|
|
}
|
|
});
|