sdg-rpc
Version:
pomelo ts rpc
141 lines (124 loc) • 4.21 kB
text/typescript
import _ from 'lodash';
import assert from 'assert';
import router from '../../src/client/router';
import { IRpcMsg } from '../../src/interfaces/common';
import RpcClient from '../../src/client/client';
describe('router', () => {
const allServers = {
'logic': [
{ id: 'logic-server-1', host: 'localhost', port: 1 },
{ id: 'logic-server-2', host: 'localhost', port: 2 },
{ id: 'logic-server-3', host: 'localhost', port: 3 },
{ id: 'logic-server-4', host: 'localhost', port: 4 },
{ id: 'logic-server-5', host: 'localhost', port: 5 },
],
'area': [
{ id: 'area-server-1', host: 'localhost', port: 1 },
{ id: 'area-server-2', host: 'localhost', port: 2 },
{ id: 'area-server-3', host: 'localhost', port: 3 },
{ id: 'area-server-4', host: 'localhost', port: 4 },
{ id: 'area-server-5', host: 'localhost', port: 5 },
]
};
const uid = [
'100_134_10431', '100_112_220355', '100_101_1005201', '100_114_10430', '100_136_10430',
'100_153_10428', '100_164_10428', '100_174_10430', '100_182_10430', '100_203_10430',
'100_211_10430', '100_215_10450', '100_220_70714', '100_227_29723', '100_241_10433',
'100_250_24152', '100_252_30717', '100_254_13301', '100_132_10430', '100_99_216577'
];
const serversMap = {};
const servers = {};
_.forOwn(allServers, (s, t) => {
serversMap[t] = s.map(i => {
servers[i.id] = i;
return i.id
});
});
// const client = {
// station: {
// serversMap,
// servers,
// on: () => {},
// },
// opts: {
// hashFieldIndex: 0
// }
// };
const client = new RpcClient({});
client.station.serversMap = serversMap;
client.station.servers = servers;
const sessions = uid.map(id => ({ uid: id }));
const context = {
getServersByType: (t: string) => allServers[t]
};
describe('#la', () => {
it('分配server', async function () {
const origin = {};
sessions.map(session => {
// @ts-ignore
origin[session.uid] = router.la(client, 'logic');
});
for (let i = 0; i < 100; i++) {
sessions.map(session => {
// @ts-ignore
const res = router.la(client, 'logic');
if (res !== origin[session.uid]) {
// assert.strictEqual(res, origin[session.uid]);
}
});
}
return true;
});
});
describe('#ch', () => {
it('分配server', async function () {
const origin = {};
const msg = { args: [] };
sessions.map(session => {
// @ts-ignore
msg.args[0] = session.uid;
// @ts-ignore
origin[session.uid] = router.ch(client, 'logic', msg);
});
console.log('origin', origin);
// assert.strictEqual(1, 1);
const s1 = { id: 'logic-server-6', host: 'localhost', port: 6 };
const s2 = { id: 'logic-server-7', host: 'localhost', port: 7 };
allServers.logic.push(s1);
allServers.logic.push(s2);
client.station.emit('addServer', s1);
client.station.emit('addServer', s2);
for (let i = 0; i < 100; i++) {
sessions.map(session => {
// @ts-ignore
msg.args[0] = session.uid;
// @ts-ignore
const res = router.ch(client, 'logic', msg);
if (res !== origin[session.uid]) {
assert.strictEqual(origin[session.uid], res, 'error: ' + session.uid);
}
});
}
return true;
});
});
describe('#df', () => {
it('df server', async function () {
const origin = {};
sessions.map(session => {
origin[session.uid] = router.df(session, { serverType: 'logic' } as IRpcMsg, context);
});
allServers.logic.push({ id: 'logic-server-6', host: 'localhost', port: 6 });
// console.log('context', context.getServersByType('logic'));
for (let i = 0; i < 100; i++) {
sessions.map(session => {
const res = router.df(session, { serverType: 'logic' } as IRpcMsg, context);
if (res !== origin[session.uid]) {
// assert.strictEqual(res, origin[session.uid]);
}
})
}
return true;
});
});
});