Repository URL to install this package:
|
Version:
0.0.0-beeb224 ▾
|
/* global jasmine, describe, it, expect, beforeEach */
const request = require('supertest');
const express = require('express');
const LoggerMiddleware = require('../src/middleware');
const Logger = require('../src/logger');
const InMemoryTransport = require('./support/InMemoryTransport');
function createFakeApp(logger) {
const fakeApp = express();
fakeApp.enable('trust proxy');
fakeApp.get('/middleware-test', (req, res, next) => {
res
.json({})
.status(200)
.end();
next();
});
fakeApp.get('/middleware-test/not-found', (req, res, next) => {
res
.json({})
.status(404)
.end();
next();
});
fakeApp.get('/middleware-test/throw', () => {
throw new Error('Error in test!');
});
LoggerMiddleware.initialize(fakeApp, logger);
fakeApp.use(LoggerMiddleware.expressLogger);
fakeApp.use(LoggerMiddleware.expressErrorLogger);
return fakeApp;
}
let logReader;
let server;
let app;
beforeAll(() => {
logReader = new InMemoryTransport();
const logger = new Logger('test', {
K8S_POD_NAME: `TestPodName`,
K8S_POD_NAMESPACE: `TestPodNamespace`,
K8S_POD_IP: `0.0.0.0`,
K8S_NODE_NAME: `TestNodeName`,
});
logger.instance.add(logReader);
app = createFakeApp(logger);
server = app.listen(3001);
});
beforeEach(() => {
logReader.clearLog();
});
afterAll(done => {
server.close(done);
});
describe('logger middleware', () => {
it('logs a request', done => {
request(app)
.get('/middleware-test')
.then(() => {
expect(logReader.getLog()).toHaveLength(1);
done();
});
});
it('logs the status code', done => {
request(app)
.get('/middleware-test/not-found')
.then(() => {
expect(logReader.getLog()[0]).toEqual(
jasmine.objectContaining({
resStatusCode: `404`,
})
);
done();
});
});
it('logs the request URL', done => {
request(app)
.get('/middleware-test/not-found')
.then(() => {
expect(logReader.getLog()[0]).toEqual(
jasmine.objectContaining({
reqUrl: `/middleware-test/not-found`,
})
);
done();
});
});
it('logs the request headers', done => {
request(app)
.get('/middleware-test')
.set('X-B3-TraceId', 'testTrace')
.set('X-B3-SpanId', 'testSpan')
.set('X-B3-ParentSpanId', 'testParentSpan')
.set('X-Span-Export', 'testSpanExport')
.then(() => {
expect(logReader.getLog()[0]).toEqual(
jasmine.objectContaining({
trace: `testTrace`,
span: `testSpan`,
parent: `testParentSpan`,
exportable: `testSpanExport`,
})
);
done();
});
});
it('logs errors', done => {
request(app)
.get('/middleware-test/throw')
.then(() => {
expect(logReader.getLog()[0].severity).toBe(`error`);
expect(logReader.getLog()[0].rest).toMatch(/Error/);
done();
});
});
it('sets the request status code to 500 when there is an error', done => {
request(app)
.get('/middleware-test/throw')
.then(() => {
expect(logReader.getLog()[0]).toEqual(
jasmine.objectContaining({
resStatusCode: `500`,
})
);
done();
});
});
});