sofa-rpc-node/test/server/cluster.test.js
2022-11-25 00:16:44 +08:00

88 lines
2.1 KiB
JavaScript

'use strict';
const mm = require('mm');
const path = require('path');
const coffee = require('coffee');
const pedding = require('pedding');
const { RpcClient } = require('../../').client;
const { ZookeeperRegistry } = require('../../').registry;
const logger = console;
describe('test/server/cluster.test.js', () => {
const interfaceName = 'com.nodejs.test.ClusterService';
let registry;
let client;
before(async () => {
mm(process.env, 'NODE_CLUSTER_CLIENT_SINGLE_MODE', '1');
registry = new ZookeeperRegistry({
logger,
address: '127.0.0.1:2181',
});
client = new RpcClient({
logger,
registry,
});
await client.ready();
});
after(async () => {
mm.restore();
let count = 2;
while (count--) {
await client.invoke({
interfaceName,
methodName: 'kill',
args: [],
}).catch(err => {
console.log(err);
});
}
await client.close();
await registry.close();
});
it('should support cluster server', function(done) {
done = pedding(done, 2);
coffee.fork(path.join(__dirname, '..', 'fixtures', 'server_1.js'), [], { env: { NODE_CLUSTER_CLIENT_SINGLE_MODE: '1' } })
.expect('code', 0)
.debug()
.end(done);
coffee.fork(path.join(__dirname, '..', 'fixtures', 'server_2.js'), [], { env: { NODE_CLUSTER_CLIENT_SINGLE_MODE: '1' } })
.expect('code', 0)
.debug()
.end(done);
registry.ready(err => {
if (err) {
return done(err);
}
registry.subscribe({ interfaceName }, val => {
console.log(val);
if (val.length === 2) {
client.invoke({
interfaceName,
methodName: 'kill',
args: [],
}).catch(err => {
console.log(err);
});
registry.subscribe({ interfaceName }, val => {
if (val.length === 1) {
client.invoke({
interfaceName,
methodName: 'kill',
args: [],
}).catch(err => {
console.log(err);
});
}
});
}
});
});
});
});