UNPKG

openhim-core

Version:

The OpenHIM core application that provides logging and routing of http requests

165 lines (149 loc) 6.72 kB
should = require 'should' metrics = require('../../lib/metrics') testUtils = require('../../test/testUtils') mongoose = require('mongoose') describe 'Metrics unit tests', -> describe '.calculateMetrics()', -> before (done) -> testUtils.setupMetricsTransactions -> done() it 'should return metrics for a particular channel', (done) -> p = metrics.calculateMetrics new Date("2014-07-15T00:00:00.000Z"), new Date("2014-07-19T00:00:00.000Z"), null, [mongoose.Types.ObjectId('111111111111111111111111')] p.then (metrics) -> metrics[0].total.should.be.exactly 5 metrics[0].failed.should.be.exactly 1 metrics[0].successful.should.be.exactly 1 metrics[0].completed.should.be.exactly 1 metrics[0].processing.should.be.exactly 1 metrics[0].completedWErrors.should.be.exactly 1 metrics[0].avgResp.should.be.exactly 140 metrics[0].minResp.should.be.exactly 100 metrics[0].maxResp.should.be.exactly 200 done() .catch (err) -> done err it 'should return metrics for all channels', (done) -> p = metrics.calculateMetrics new Date("2014-07-15T00:00:00.000Z"), new Date("2014-07-19T00:00:00.000Z") p.then (metrics) -> metrics[0].total.should.be.exactly 10 metrics[0].failed.should.be.exactly 1 metrics[0].successful.should.be.exactly 1 metrics[0].completed.should.be.exactly 6 metrics[0].processing.should.be.exactly 1 metrics[0].completedWErrors.should.be.exactly 1 metrics[0].avgResp.should.be.exactly 150 metrics[0].minResp.should.be.exactly 100 metrics[0].maxResp.should.be.exactly 200 done() .catch (err) -> done err it 'should return metrics in time series by minute', (done) -> p = metrics.calculateMetrics new Date("2014-07-15T00:00:00.000Z"), new Date("2014-07-19T00:00:00.000Z"), null, null, 'minute' p.then (metrics) -> metrics.length.should.be.exactly 10 metrics[0]._id.minute.should.be.exactly 25 metrics[0]._id.hour.should.be.exactly 11 metrics[0]._id.day.should.be.exactly 18 metrics[0]._id.week.should.be.exactly 28 metrics[0]._id.month.should.be.exactly 7 metrics[0]._id.year.should.be.exactly 2014 metrics[0].total.should.be.exactly 1 done() .catch (err) -> done err it 'should return metrics in time series by hour', (done) -> p = metrics.calculateMetrics new Date("2014-07-15T00:00:00.000Z"), new Date("2014-07-19T00:00:00.000Z"), null, null, 'hour' p.then (metrics) -> metrics.length.should.be.exactly 9 metrics[1]._id.hour.should.be.exactly 11 metrics[1]._id.day.should.be.exactly 18 metrics[1]._id.week.should.be.exactly 28 metrics[1]._id.month.should.be.exactly 7 metrics[1]._id.year.should.be.exactly 2014 metrics[1].total.should.be.exactly 2 done() .catch (err) -> done err it 'should return metrics in time series by day', (done) -> p = metrics.calculateMetrics new Date("2014-07-15T00:00:00.000Z"), new Date("2014-07-19T00:00:00.000Z"), null, null, 'day' p.then (metrics) -> metrics.length.should.be.exactly 4 metrics[0]._id.day.should.be.exactly 18 metrics[0]._id.week.should.be.exactly 28 metrics[0]._id.month.should.be.exactly 7 metrics[0]._id.year.should.be.exactly 2014 metrics[0].total.should.be.exactly 2 done() .catch (err) -> done err it 'should return metrics in time series by week', (done) -> p = metrics.calculateMetrics new Date("2013-07-15T00:00:00.000Z"), new Date("2014-07-19T00:00:00.000Z"), null, null, 'week' p.then (metrics) -> metrics.length.should.be.exactly 2 metrics[0]._id.week.should.be.exactly 28 metrics[0]._id.month.should.be.exactly 7 metrics[0]._id.year.should.be.exactly 2014 metrics[0].total.should.be.exactly 10 done() .catch (err) -> done err it 'should return metrics in time series by month', (done) -> p = metrics.calculateMetrics new Date("2013-07-15T00:00:00.000Z"), new Date("2014-07-19T00:00:00.000Z"), null, null, 'month' p.then (metrics) -> metrics.length.should.be.exactly 2 metrics[0]._id.month.should.be.exactly 7 metrics[0]._id.year.should.be.exactly 2014 metrics[0].total.should.be.exactly 10 done() .catch (err) -> done err it 'should return metrics in time series by year', (done) -> p = metrics.calculateMetrics new Date("2013-07-15T00:00:00.000Z"), new Date("2015-07-19T00:00:00.000Z"), null, null, 'year' p.then (metrics) -> metrics.length.should.be.exactly 2 metrics[0]._id.year.should.be.exactly 2015 metrics[0].total.should.be.exactly 1 done() .catch (err) -> done err it 'should return metrics grouped by channels', (done) -> p = metrics.calculateMetrics new Date("2014-07-15T00:00:00.000Z"), new Date("2014-07-19T00:00:00.000Z"), null, null, null, true p.then (metrics) -> metrics.length.should.be.exactly 2 metrics[0]._id.channelID.toString().should.be.exactly '222222222222222222222222' metrics[0].total.should.be.exactly 5 metrics[1]._id.channelID.toString().should.be.exactly '111111111111111111111111' metrics[1].total.should.be.exactly 5 done() .catch (err) -> done err it 'should return metrics grouped by channels and time series', (done) -> p = metrics.calculateMetrics new Date("2014-07-15T00:00:00.000Z"), new Date("2014-07-19T00:00:00.000Z"), null, null, 'day', true p.then (metrics) -> metrics.length.should.be.exactly 8 m1 = metrics.find (m) -> return m._id.channelID.toString() is '111111111111111111111111' and m._id.day is 18 and m._id.week is 28 and m._id.month is 7 and m._id.year is 2014 should.exist(m1) m1.total.should.be.exactly 1 m2 = metrics.find (m) -> return m._id.channelID.toString() is '222222222222222222222222' m._id.day is 18 m._id.week is 28 m._id.month is 7 m._id.year is 2014 should.exist(m2) m2.total.should.be.exactly 1 done() .catch (err) -> done err it 'should return an error if date not supplied', (done) -> p = metrics.calculateMetrics() p.then (metrics) -> done(new Error 'An error should be thrown') .catch (err) -> err.should.be.ok() done()