-
Notifications
You must be signed in to change notification settings - Fork 1
/
index.test.js
136 lines (130 loc) · 4.8 KB
/
index.test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
const express = require('express');
const request = require('supertest');
const {
getCounter, getGauge, getHistogram, getSummary, initPrometheus,
} = require('./index.js');
const getServer = (options) => {
const app = express();
initPrometheus(app, options);
app.get('/test/:status', (req, res) => {
res.sendStatus(parseInt(req.params.status, 10));
});
return app;
};
describe('initPrometheus()', () => {
it('should throw an error without the app parameter', () => {
expect(() => initPrometheus()).toThrow();
});
it('should automatically collect metrics from the routes', async () => {
const app = getServer({ collectDefaultMetrics: false });
await request(app).get('/test/200');
const { text } = await request(app)
.get('/metrics')
.expect(200);
expect(text).toContain('get_test_status_response_time');
});
describe('options.collectDefaultMetrics', () => {
it('should add default metrics by default', async () => {
const app = getServer();
await request(app).get('/test/200');
const { text } = await request(app)
.get('/metrics')
.expect(200);
expect(text).toContain('process_cpu_user_seconds_total');
});
it('should not add default metrics if the option is set to "false"', async () => {
const app = getServer({ collectDefaultMetrics: false });
await request(app).get('/test/200');
const { text } = await request(app)
.get('/metrics')
.expect(200);
expect(text).not.toContain('process_cpu_user_seconds_total');
});
});
describe('options.authorization', () => {
it.todo('should respond 200 to /metrics without authorization option');
it.todo('should respond 501 to /metrics with authorization option without the header');
it.todo('should respond 200 to /metrics with authorization option with the header');
});
describe('options.addRouteMetrics', () => {
it('should add default metrics by default', async () => {
const app = getServer();
await request(app).get('/test/200');
const { text } = await request(app)
.get('/metrics')
.expect(200);
expect(text).toContain('get_test_status_status_code');
});
it('should not collect routes metrics if deactivated', async () => {
const app = getServer({ addRouteMetrics: false });
await request(app).get('/test/200');
const { text } = await request(app)
.get('/metrics')
.expect(200);
expect(text).not.toContain('get_test_status_status_code');
});
it('should collect all kind of status codes', async () => {
const app = getServer();
await request(app).get('/test/200');
await request(app).get('/test/201');
await request(app).get('/test/404');
await request(app).get('/test/500');
await request(app).get('/test/501');
await request(app).get('/test/502');
const { text } = await request(app)
.get('/metrics')
.expect(200);
expect(text).toContain('get_test_status_status_code{code="200"} 2');
expect(text).toContain('get_test_status_status_code{code="400"} 1');
expect(text).toContain('get_test_status_status_code{code="500"} 3');
});
});
});
describe('Metrics', () => {
it('should return a counter object', () => {
const counter = getCounter('new_counter');
expect(typeof counter).toEqual('object');
});
it('should format the names for prometheus', () => {
const counter = getCounter('This is my counter');
expect(typeof counter).toEqual('object');
});
it('should format the names for prometheus by removing all special character', async () => {
const app = getServer({ collectDefaultMetrics: false });
const counter = getCounter('This i$ -- my counter --');
counter.inc();
const { text } = await request(app)
.get('/metrics')
.expect(200);
expect(text).toContain('this_i_my_counter');
});
it('should throw an error without name', () => {
expect(() => getCounter()).toThrow();
expect(() => getHistogram()).toThrow();
expect(() => getSummary()).toThrow();
});
describe('getCounter', () => {
it('should return a counter object', () => {
const counter = getCounter('new_counter');
expect(typeof counter).toEqual('object');
});
});
describe('getGauge', () => {
it('should return a gauge object', () => {
const gauge = getGauge('new_gauge');
expect(typeof gauge).toEqual('object');
});
});
describe('getHistogram', () => {
it('should return a counter object', () => {
const histogram = getHistogram('new_histogram');
expect(typeof histogram).toEqual('object');
});
});
describe('getSummary', () => {
it('should return a counter object', () => {
const summary = getSummary('new_summary');
expect(typeof summary).toEqual('object');
});
});
});