feat(framework): config 远程配置分层取参 getParam + 服务器解析 resolveServers
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
import { test } from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import { getParam, resolveServers, type RemoteConfig } from '../../YouleNexus/assets/framework/config/remote-config.ts';
|
||||
import type { ChannelIdentity } from '../../YouleNexus/assets/framework/config/identity.ts';
|
||||
|
||||
const ID: ChannelIdentity = { agentid: 'A', channelid: 'C', gameid: 'G', marketid: 2, version: '1', versionCode: 1 };
|
||||
|
||||
const CONFIG: RemoteConfig = {
|
||||
data: {
|
||||
player_server_tcp: '1.1.1.1:1000', // 顶层默认
|
||||
agentlist: [{
|
||||
agentid: 'A',
|
||||
player_server_tcp: '2.2.2.2:2000', // agent 级覆盖
|
||||
gamelist: [{
|
||||
gameid: 'G',
|
||||
channellist: [{
|
||||
channelid: 'C',
|
||||
player_server_tcp: '3.3.3.3:3000', // channel 级覆盖(最具体)
|
||||
visitor_server_tcp: '4.4.4.4:4000',
|
||||
marketlist: [{ marketid: 2 }],
|
||||
}],
|
||||
}],
|
||||
}],
|
||||
},
|
||||
};
|
||||
|
||||
test('getParam:最具体层级胜出', () => {
|
||||
assert.equal(getParam(CONFIG, 'player_server_tcp', ID), '3.3.3.3:3000');
|
||||
});
|
||||
|
||||
test('getParam:channel 未匹配时回退到 agent 级值', () => {
|
||||
const id2 = { ...ID, channelid: 'OTHER' };
|
||||
assert.equal(getParam(CONFIG, 'player_server_tcp', id2), '2.2.2.2:2000');
|
||||
});
|
||||
|
||||
test('getParam:agent 未匹配时回退到顶层默认', () => {
|
||||
const id3 = { ...ID, agentid: 'NONE' };
|
||||
assert.equal(getParam(CONFIG, 'player_server_tcp', id3), '1.1.1.1:1000');
|
||||
});
|
||||
|
||||
test('getParam:键不存在 → null', () => {
|
||||
assert.equal(getParam(CONFIG, 'not_a_key', ID), null);
|
||||
});
|
||||
|
||||
test('getParam:无 data → null', () => {
|
||||
assert.equal(getParam({}, 'player_server_tcp', ID), null);
|
||||
});
|
||||
|
||||
test('resolveServers:player 优先、visitor 回退,前缀 ws://', () => {
|
||||
assert.deepEqual(resolveServers(CONFIG, ID), ['ws://3.3.3.3:3000', 'ws://4.4.4.4:4000']);
|
||||
});
|
||||
|
||||
test('resolveServers:已带 ws:// 不重复前缀;无地址 → 空数组', () => {
|
||||
const cfg: RemoteConfig = { data: { player_server_tcp: 'ws://9.9.9.9:9' } };
|
||||
assert.deepEqual(resolveServers(cfg, ID), ['ws://9.9.9.9:9']);
|
||||
assert.deepEqual(resolveServers({ data: {} }, ID), []);
|
||||
});
|
||||
Reference in New Issue
Block a user