У меня есть сервер LdapJS, который реализует стандартную операцию и расширенную операцию для проверки работоспособности:
const server = ldap.createServer();
server.exop('healthcheck', (req, res, next) => {
res.end();
console.log('ended');
return next();
});
...
Затем я написал простой клиентский скрипт для службы ping healthcheck:
const { createClient } = require('ldapjs');
const client = createClient({
url: 'ldap://localhost:1389',
timeout: 2000,
connectTimeout: 2000
});
client.exop('healthcheck', (err, value, res) => {
if (err) {
console.log(`ERROR: ${err.message}`);
process.exit(1);
}
else {
console.log(`STATUS: ${res.status}`);
process.exit(0);
}
});
Проблема в том, что exop
правильно получен сервером (я вижу журнал внутри его обратного вызова), но клиент всегда регистрирует: ERROR: request timeout (client interrupt)
.
Почему запрос не завершен правильно?
РЕДАКТИРОВАТЬ
Я написал тест мокко для exop, и он работает.Похоже, что проблема связана с автономным вызовом в скрипте Healthcheck.
describe('#healthcheck()', function () {
before(function () {
server = createServer();
server.listen(config.get('port'), config.get('host'), () => {});
});
after(function () {
server.close();
});
it('should return status 0', function (done) {
const { createClient } = require('ldapjs');
const client = createClient({
url: 'ldap://localhost:1389',
timeout: 2000,
connectTimeout: 2000
});
client.exop('healthcheck', (err, value, res) => {
should.not.exist(err);
res.status.should.be.equal(0);
client.destroy();
return done();
});
});
});