@pionerlabs/grpc-interceptors
Version:
This library provides a way to instrument Node.js gRPC clients and servers with interceptors/middleware e.g. for Prometheus metrics, Zipkin tracing etc.
86 lines (68 loc) • 2.31 kB
JavaScript
let callStack = [];
async function one(ctx, next) {
callStack.push('one');
await next();
callStack.push('one');
}
async function two(ctx, next) {
callStack.push('two');
await next();
}
async function three(ctx, next) {
callStack.push('three');
await next();
}
describe('server-proxy', () => {
describe('without interceptors', () => {
const { server, client } = require('./test-service')(55051);
beforeAll(() => {
server.start();
});
afterAll(() => {
server.forceShutdown();
});
test('should execute the server function', done => {
callStack = [];
client.Greet({ message: 'test' }, (err, res) => {
expect(err).toBeNull();
expect(res.message).toBe('Hello test');
expect(callStack).toHaveLength(0);
done();
});
});
});
describe('with interceptors', () => {
const { server, client } = require('./test-service')(55052);
beforeAll(() => {
server.use(one);
server.use(two);
server.use(three);
server.start();
});
afterAll(() => {
server.forceShutdown();
});
test('should execute interceptors in order', done => {
callStack = [];
client.Greet({ message: 'test' }, (err, res) => {
expect(err).toBeNull();
expect(res.message).toBe('Hello test');
expect(callStack).toHaveLength(4);
expect(callStack[0]).toBe('one');
expect(callStack[1]).toBe('two');
expect(callStack[2]).toBe('three');
expect(callStack[3]).toBe('one');
client.Wave({ message: 'test' }, (err, res) => {
expect(err).toBeNull();
expect(res.message).toBe('Wave');
expect(callStack).toHaveLength(8);
expect(callStack[4]).toBe('one');
expect(callStack[5]).toBe('two');
expect(callStack[6]).toBe('three');
expect(callStack[7]).toBe('one');
done();
});
});
});
});
});