Skip to content
This repository has been archived by the owner on Jun 12, 2018. It is now read-only.

Fix logging handling in hapi log events + added tests #131

Merged
merged 4 commits into from
Mar 14, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions lib/instrumentation/modules/hapi.js
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ module.exports = function (hapi, agent, version) {
payload.extra.tags = tags

var err = event.data
if (!(err instanceof Error) || typeof err !== 'string') {
if (!(err instanceof Error) && typeof err !== 'string') {
err = 'hapi server emitted a log event tagged error'
}

Expand All @@ -108,7 +108,7 @@ module.exports = function (hapi, agent, version) {
payload.extra.tags = tags

var err = event.data
if (!(err instanceof Error) || typeof err !== 'string') {
if (!(err instanceof Error) && typeof err !== 'string') {
err = 'hapi server emitted a request event tagged error'
}

Expand Down
225 changes: 224 additions & 1 deletion test/instrumentation/modules/hapi.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,230 @@ test('connectionless', function (t) {
var server = new Hapi.Server()
server.initialize(function (err) {
server.stop()
t.error(err)
t.error(err, 'start error')
})
})

test('server error logging with Error', function (t) {
t.plan(6)

var customError = new Error('custom error')

resetAgent()

agent.captureError = function (err, opts) {
server.stop()

t.equal(err, customError)
t.ok(opts.extra)
t.deepEqual(opts.extra.tags, { error: true })
t.false(opts.extra.internals)
t.ok(opts.extra.data instanceof Error)
}

var server = new Hapi.Server()
server.connection()

server.start(function (err) {
t.error(err, 'start error')

server.log(['error'], customError)
})
})

test('server error logging with String', function (t) {
t.plan(6)

var customError = 'custom error'

resetAgent()

agent.captureError = function (err, opts) {
server.stop()

t.equal(err, customError)
t.ok(opts.extra)
t.deepEqual(opts.extra.tags, { error: true })
t.false(opts.extra.internals)
t.ok(typeof opts.extra.data === 'string')
}

var server = new Hapi.Server()
server.connection()

server.start(function (err) {
t.error(err, 'start error')

server.log(['error'], customError)
})
})

test('server error logging with Object', function (t) {
t.plan(6)

var customError = {
error: 'I forgot to turn this into an actual Error'
}

resetAgent()

agent.captureError = function (err, opts) {
server.stop()

t.equal(err, 'hapi server emitted a log event tagged error')
t.ok(opts.extra)
t.deepEqual(opts.extra.tags, { error: true })
t.false(opts.extra.internals)
t.deepEqual(opts.extra.data, customError)
}

var server = new Hapi.Server()
server.connection()

server.start(function (err) {
t.error(err, 'start error')

server.log(['error'], customError)
})
})

test('request error logging with Error', function (t) {
t.plan(25)

var customError = new Error('custom error')

resetAgent(function (endpoint, headers, data, cb) {
assert(t, data, { status: 200, name: 'GET /error' })

server.stop()
})

agent.captureError = function (err, opts) {
t.equal(err, customError)
t.ok(opts.extra)
t.ok(opts.request)
t.deepEqual(opts.extra.tags, { error: true })
t.false(opts.extra.internals)
t.ok(opts.extra.data instanceof Error)
}

var server = new Hapi.Server()
server.connection()

server.route({
method: 'GET',
path: '/error',
handler: function (request, reply) {
request.log(['error'], customError)

return reply('hello world')
}
})

server.start(function (err) {
t.error(err, 'start error')

http.get('http://localhost:' + server.info.port + '/error', function (res) {
t.equal(res.statusCode, 200)

res.resume().on('end', function () {
agent._instrumentation._queue._flush()
})
})
})
})

test('request error logging with String', function (t) {
t.plan(25)

var customError = 'custom error'

resetAgent(function (endpoint, headers, data, cb) {
assert(t, data, { status: 200, name: 'GET /error' })

server.stop()
})

agent.captureError = function (err, opts) {
t.equal(err, customError)
t.ok(opts.extra)
t.ok(opts.request)
t.deepEqual(opts.extra.tags, { error: true })
t.false(opts.extra.internals)
t.ok(typeof opts.extra.data === 'string')
}

var server = new Hapi.Server()
server.connection()

server.route({
method: 'GET',
path: '/error',
handler: function (request, reply) {
request.log(['error'], customError)

return reply('hello world')
}
})

server.start(function (err) {
t.error(err, 'start error')

http.get('http://localhost:' + server.info.port + '/error', function (res) {
t.equal(res.statusCode, 200)

res.resume().on('end', function () {
agent._instrumentation._queue._flush()
})
})
})
})

test('request error logging with Object', function (t) {
t.plan(25)

var customError = {
error: 'I forgot to turn this into an actual Error'
}

resetAgent(function (endpoint, headers, data, cb) {
assert(t, data, { status: 200, name: 'GET /error' })

server.stop()
})

agent.captureError = function (err, opts) {
t.equal(err, 'hapi server emitted a request event tagged error')
t.ok(opts.extra)
t.ok(opts.request)
t.deepEqual(opts.extra.tags, { error: true })
t.false(opts.extra.internals)
t.deepEqual(opts.extra.data, customError)
}

var server = new Hapi.Server()
server.connection()

server.route({
method: 'GET',
path: '/error',
handler: function (request, reply) {
request.log(['error'], customError)

return reply('hello world')
}
})

server.start(function (err) {
t.error(err, 'start error')

http.get('http://localhost:' + server.info.port + '/error', function (res) {
t.equal(res.statusCode, 200)

res.resume().on('end', function () {
agent._instrumentation._queue._flush()
})
})
})
})

Expand Down