mqrpc
Version:
💫 Easy RPC over RabbitMQ
50 lines (49 loc) • 1.97 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const ava_1 = require("ava");
const sinon = require("sinon");
const _config_1 = require("../_config");
const RpcClient_1 = require("../../lib/RpcClient");
const errors_1 = require("../../lib/RpcClient/errors");
const Timer_1 = require("../../lib/Timer");
ava_1.default.beforeEach(async (t) => {
t.context.client = new RpcClient_1.default({
amqpClient: { amqpUrl: _config_1.AMQP_URL },
rpcClient: { idleTimeout: 30, callTimeout: 100 }
});
await t.context.client.init();
t.context.sandbox = sinon.sandbox.create();
t.context.sandbox.stub(t.context.client.amqpClient.channel, 'publish').resolves();
});
ava_1.default.afterEach(t => t.context.sandbox.restore());
ava_1.default('[unit] #term calls #term on the Amqp client', async (t) => {
const spy = t.context.sandbox.spy(t.context.client.amqpClient, 'term');
await t.context.client.term();
sinon.assert.calledOnce(spy);
t.pass();
});
ava_1.default('[unit] #term rejects all pending calls', async (t) => {
const promises = [
t.context.client.call('marco'),
t.context.client.call('polo')
];
await t.context.client.term();
await Promise.all(promises.map(promise => {
return t.throws(promise, errors_1.CallTerminated);
}));
});
ava_1.default('[unit] #term clears all call timeouts', async (t) => {
const spy = t.context.sandbox.spy(t.context.client.callTimer, 'clear');
await t.context.client.term();
sinon.assert.calledOnce(spy);
t.pass();
});
ava_1.default('[unit] #term is idempotent', async (t) => {
await t.context.client.term();
await t.notThrows(t.context.client.term());
});
ava_1.default('[unit] #term can wait for pending calls', async (t) => {
const callPromise = t.context.client.call('marco');
await t.context.client.term({ waitForCalls: 500 });
await t.throws(callPromise, Timer_1.TimeoutExpired);
});