1
0
mirror of https://github.com/Unleash/unleash.git synced 2024-12-28 00:06:53 +01:00
unleash.unleash/lib/db/client-metrics-store.test.js

92 lines
2.4 KiB
JavaScript
Raw Normal View History

'use strict';
2018-12-17 09:24:49 +01:00
const test = require('ava');
const { EventEmitter } = require('events');
2017-08-23 11:21:34 +02:00
const lolex = require('lolex');
const ClientMetricStore = require('./client-metrics-store');
const getLogger = require('../../test/fixtures/no-logger');
2017-06-28 10:17:14 +02:00
function getMockDb() {
2016-12-04 14:09:37 +01:00
const list = [
{ id: 4, metrics: { appName: 'test' } },
{ id: 3, metrics: { appName: 'test' } },
{ id: 2, metrics: { appName: 'test' } },
];
return {
2017-06-28 10:17:14 +02:00
getMetricsLastHour() {
2016-12-04 14:09:37 +01:00
return Promise.resolve([{ id: 1, metrics: { appName: 'test' } }]);
},
2017-06-28 10:17:14 +02:00
getNewMetrics() {
return Promise.resolve([list.pop() || { id: 0 }]);
2016-12-04 14:09:37 +01:00
},
destroy() {
// noop
},
};
}
2017-06-28 10:17:14 +02:00
test.cb('should call database on startup', t => {
const mock = getMockDb();
const ee = new EventEmitter();
const store = new ClientMetricStore(mock, ee, getLogger);
2016-12-04 14:09:37 +01:00
t.plan(2);
2017-06-28 10:17:14 +02:00
store.on('metrics', metrics => {
t.true(store.highestIdSeen === 1);
t.true(metrics.appName === 'test');
store.destroy();
2016-12-04 14:09:37 +01:00
t.end();
});
});
test.cb('should start poller even if inital database fetch fails', t => {
2021-01-06 13:25:25 +01:00
getLogger.setMuteError(true);
const clock = lolex.install();
const mock = getMockDb();
mock.getMetricsLastHour = () => Promise.reject(new Error('oops'));
const ee = new EventEmitter();
const store = new ClientMetricStore(mock, ee, getLogger, 100);
const metrics = [];
store.on('metrics', m => metrics.push(m));
store.on('ready', () => {
t.true(metrics.length === 0);
clock.tick(300);
process.nextTick(() => {
t.true(metrics.length === 3);
t.true(store.highestIdSeen === 4);
store.destroy();
t.end();
});
});
2021-01-06 13:25:25 +01:00
getLogger.setMuteError(false);
});
2017-06-28 10:17:14 +02:00
test.cb('should poll for updates', t => {
2017-08-23 11:21:34 +02:00
const clock = lolex.install();
const mock = getMockDb();
const ee = new EventEmitter();
const store = new ClientMetricStore(mock, ee, getLogger, 100);
const metrics = [];
2017-06-28 10:17:14 +02:00
store.on('metrics', m => metrics.push(m));
t.true(metrics.length === 0);
store.on('ready', () => {
t.true(metrics.length === 1);
clock.tick(300);
process.nextTick(() => {
t.true(metrics.length === 4);
t.true(store.highestIdSeen === 4);
store.destroy();
t.end();
});
});
});