diff --git a/src/core_plugins/elasticsearch/lib/__tests__/health_check.js b/src/core_plugins/elasticsearch/lib/__tests__/health_check.js index 84bf94a639ae6..680cb6f22c108 100644 --- a/src/core_plugins/elasticsearch/lib/__tests__/health_check.js +++ b/src/core_plugins/elasticsearch/lib/__tests__/health_check.js @@ -23,12 +23,17 @@ describe('plugins/elasticsearch', () => { let plugin; let cluster; let server; + const sandbox = sinon.sandbox.create(); + + function getTimerCount() { + return Object.keys(sandbox.clock.timers || {}).length; + } beforeEach(() => { const COMPATIBLE_VERSION_NUMBER = '5.0.0'; // Stub the Kibana version instead of drawing from package.json. - sinon.stub(kibanaVersion, 'get').returns(COMPATIBLE_VERSION_NUMBER); + sandbox.stub(kibanaVersion, 'get').returns(COMPATIBLE_VERSION_NUMBER); // setup the plugin stub plugin = { @@ -55,7 +60,7 @@ describe('plugins/elasticsearch', () => { } })); - sinon.stub(determineEnabledScriptingLangsNS, 'determineEnabledScriptingLangs').returns(Promise.resolve([])); + sandbox.stub(determineEnabledScriptingLangsNS, 'determineEnabledScriptingLangs').returns(Promise.resolve([])); // setup the config().get()/.set() stubs const get = sinon.stub(); @@ -74,15 +79,37 @@ describe('plugins/elasticsearch', () => { elasticsearch: { getCluster: sinon.stub().returns(cluster) } - } + }, + ext: sinon.stub() }; health = healthCheck(plugin, server, { mappings }); }); afterEach(() => { - kibanaVersion.get.restore(); - determineEnabledScriptingLangs.restore(); + sandbox.restore(); + }); + + it('should stop when cluster is shutdown', () => { + sandbox.useFakeTimers(); + + // ensure that health.start() is responsible for the timer we are observing + expect(getTimerCount()).to.be(0); + health.start(); + expect(getTimerCount()).to.be(1); + + // ensure that a server extension was registered + sinon.assert.calledOnce(server.ext); + sinon.assert.calledWithExactly(server.ext, sinon.match.string, sinon.match.func); + + // call the server extension + const reply = sinon.stub(); + const [,handler] = server.ext.firstCall.args; + handler({}, reply); + + // ensure that the handler called reply and unregistered the time + sinon.assert.calledOnce(reply); + expect(getTimerCount()).to.be(0); }); it('should set the cluster green if everything is ready', function () { diff --git a/src/core_plugins/elasticsearch/lib/health_check.js b/src/core_plugins/elasticsearch/lib/health_check.js index 31e3d336e9847..9c1af93d30bbf 100644 --- a/src/core_plugins/elasticsearch/lib/health_check.js +++ b/src/core_plugins/elasticsearch/lib/health_check.js @@ -145,6 +145,11 @@ module.exports = function (plugin, server, { mappings }) { return true; } + server.ext('onPreStop', (request, reply) => { + stopChecking(); + reply(); + }); + return { waitUntilReady: waitUntilReady, run: check,