implement Server#unregister(handlerName)

This commit is contained in:
Daniel Shmuglin 2020-10-29 10:54:33 +02:00
parent e49524a2ba
commit 7c3ccda8ff
2 changed files with 59 additions and 0 deletions

View File

@ -458,6 +458,10 @@ export class Server {
return true;
}
unregister(name: string): boolean {
return this.handlers.delete(name);
}
start(): void {
if (
this.http2ServerList.length === 0 ||

View File

@ -220,6 +220,61 @@ describe('Server', () => {
});
});
describe('unregister', () => {
let server: Server;
let client: ServiceClient;
const mathProtoFile = path.join(__dirname, 'fixtures', 'math.proto');
const mathClient = (loadProtoFile(mathProtoFile).math as any).Math;
const mathServiceAttrs = mathClient.service;
beforeEach(done => {
server = new Server();
server.addService(mathServiceAttrs, {
div(call: ServerUnaryCall<any, any>, callback: sendUnaryData<any>) {
callback(null, {quotient: '42'});
},
});
server.bindAsync(
'localhost:0',
ServerCredentials.createInsecure(),
(err, port) => {
assert.ifError(err);
client = new mathClient(
`localhost:${port}`,
grpc.credentials.createInsecure()
);
server.start();
done();
}
);
});
afterEach(done => {
client.close();
server.tryShutdown(done);
});
it('removes handler by name and returns true', done => {
const name = mathServiceAttrs['Div'].path;
assert.strictEqual(server.unregister(name), true, 'Server#unregister should return true on success');
client.div(
{ divisor: 4, dividend: 3 },
(error: ServiceError, response: any) => {
assert(error);
assert.strictEqual(error.code, grpc.status.UNIMPLEMENTED);
done();
}
);
});
it('returns false for unknown handler', () => {
assert.strictEqual(server.unregister('noOneHere'), false, 'Server#unregister should return false on failure');
});
});
it('throws when unimplemented methods are called', () => {
const server = new Server();