chairo-health-check
Version:
A Chairo plugin that adds a health check action to expose basic service information
286 lines (192 loc) • 5.48 kB
JavaScript
// Increase max listeners to avoid "Warning: Possible EventEmitter
// memory leak detected" during the test
process.setMaxListeners(100)
// Load modules
const Chairo = require('chairo')
const Code = require('code')
const Hapi = require('hapi')
const Lab = require('lab')
const Promise = require('bluebird')
const pkg = require('../package.json')
// Test shortcuts
const lab = exports.lab = Lab.script()
const describe = lab.describe
const it = lab.it
const expect = Code.expect
// SUT
const HealthCheckPlugin = require('./index.js')
const plugins = [
Chairo,
HealthCheckPlugin,
]
describe('role:health,cmd:check', () => {
it('registers as a Hapi plugin without error', (done) => {
const server = new Hapi.Server()
server.connection()
server.register(plugins, (error) => {
expect(error).to.not.exist()
const serverPlugins = Object.keys(server.registrations)
expect(serverPlugins).to.contain(HealthCheckPlugin.attributes.pkg.name)
done()
})
})
it('returns ready:true', (done) => {
const server = new Hapi.Server()
server.connection()
server.register(plugins, (error) => {
expect(error).to.not.exist()
server.seneca.act({
role: 'health',
cmd: 'check',
}, (err, result) => {
expect(err).to.not.exist()
expect(result.ready).to.be.true()
done()
})
})
})
it('returns current package version and name by default', (done) => {
const server = new Hapi.Server()
server.connection()
server.register(plugins, (error) => {
expect(error).to.not.exist()
server.seneca.act({
role: 'health',
cmd: 'check',
}, (err, result) => {
expect(err).to.not.exist()
expect(result.version).to.equal(pkg.version)
expect(result.name).to.equal(pkg.name)
done()
})
})
})
it('returns current server info', (done) => {
const server = new Hapi.Server()
server.connection()
server.register(plugins, (error) => {
expect(error).to.not.exist()
server.seneca.act({
role: 'health',
cmd: 'check',
}, (err, result) => {
expect(err).to.not.exist()
expect(result.info).to.equal(server.info)
done()
})
})
})
it('adds cmd, host, role, src to action if set', (done) => {
const action = {
cmd: 'testcmd',
host: 'testhost',
role: 'testrole',
src: 'testsrc',
}
const server = new Hapi.Server()
server.connection()
server.register([Chairo, {
register: HealthCheckPlugin,
options: {
action,
},
}], (error) => {
expect(error).to.not.exist()
server.seneca.act(action, (err, result) => {
expect(err).to.not.exist()
expect(result.ready).to.be.true()
server.seneca.close()
done()
})
})
})
it('returns passed options name and version', (done) => {
const options = {
name: 'test name',
version: 'test version',
}
const server = new Hapi.Server()
server.connection()
server.register([Chairo, {
register: HealthCheckPlugin,
options,
}], (error) => {
expect(error).to.not.exist()
server.seneca.act({
role: 'health',
cmd: 'check',
}, (err, result) => {
expect(err).to.not.exist()
expect(result.name).to.equal(options.name)
expect(result.version).to.equal(options.version)
server.seneca.close()
done()
})
})
})
it('omits the promise property if promise had null result', (done) => {
const server = new Hapi.Server()
server.connection()
server.register([Chairo, {
register: HealthCheckPlugin,
}], (error) => {
expect(error).to.not.exist()
server.seneca.act({
role: 'health',
cmd: 'check',
}, (err, result) => {
expect(err).to.not.exist()
expect(result.promise).to.not.exist()
server.seneca.close()
done()
})
})
})
it('resolves and returns the value from the passed promise', (done) => {
const expected = 'this is a test'
const options = {
promise: Promise.resolve(expected),
}
const server = new Hapi.Server()
server.connection()
server.register([Chairo, {
register: HealthCheckPlugin,
options,
}], (error) => {
expect(error).to.not.exist()
server.seneca.act({
role: 'health',
cmd: 'check',
}, (err, result) => {
expect(err).to.not.exist()
expect(result.promise).to.equal(expected)
server.seneca.close()
done()
})
})
})
// it('returns caught error from promise in err callback param', (done) => {
// const expected = 'this is a test'
// const options = {
// promise: Promise.reject({ data: { message: expected } }),
// }
// const server = new Hapi.Server()
// server.connection()
// server.register([Chairo, {
// register: HealthCheckPlugin,
// options,
// }], (error) => {
// expect(error).to.not.exist()
// server.seneca.act({
// role: 'health',
// cmd: 'check',
// }, (err, result) => {
// expect(err).to.equal(expected)
// expect(result).to.not.exist()
// server.seneca.close()
// done()
// })
// })
// })
})