You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
248 lines
6.3 KiB
248 lines
6.3 KiB
4 years ago
|
'use strict'
|
||
|
|
||
|
const http = require('http')
|
||
|
const os = require('os')
|
||
|
const semver = require('semver')
|
||
|
const { test } = require('tap')
|
||
|
const { sink, once } = require('./helper')
|
||
|
const pino = require('../')
|
||
|
|
||
|
const { pid } = process
|
||
|
const hostname = os.hostname()
|
||
|
|
||
|
test('http request support', async ({ ok, same, error, teardown }) => {
|
||
|
var originalReq
|
||
|
const instance = pino(sink((chunk, enc) => {
|
||
|
ok(new Date(chunk.time) <= new Date(), 'time is greater than Date.now()')
|
||
|
delete chunk.time
|
||
|
same(chunk, {
|
||
|
pid: pid,
|
||
|
hostname: hostname,
|
||
|
level: 30,
|
||
|
msg: 'my request',
|
||
|
v: 1,
|
||
|
req: {
|
||
|
method: originalReq.method,
|
||
|
url: originalReq.url,
|
||
|
headers: originalReq.headers,
|
||
|
remoteAddress: originalReq.connection.remoteAddress,
|
||
|
remotePort: originalReq.connection.remotePort
|
||
|
}
|
||
|
})
|
||
|
}))
|
||
|
|
||
|
const server = http.createServer((req, res) => {
|
||
|
originalReq = req
|
||
|
instance.info(req, 'my request')
|
||
|
res.end('hello')
|
||
|
})
|
||
|
server.unref()
|
||
|
server.listen()
|
||
|
const err = await once(server, 'listening')
|
||
|
error(err)
|
||
|
const res = await once(http.get('http://localhost:' + server.address().port), 'response')
|
||
|
res.resume()
|
||
|
server.close()
|
||
|
})
|
||
|
|
||
|
test('http request support via serializer', async ({ ok, same, error, teardown }) => {
|
||
|
var originalReq
|
||
|
const instance = pino({
|
||
|
serializers: {
|
||
|
req: pino.stdSerializers.req
|
||
|
}
|
||
|
}, sink((chunk, enc) => {
|
||
|
ok(new Date(chunk.time) <= new Date(), 'time is greater than Date.now()')
|
||
|
delete chunk.time
|
||
|
same(chunk, {
|
||
|
pid: pid,
|
||
|
hostname: hostname,
|
||
|
level: 30,
|
||
|
msg: 'my request',
|
||
|
v: 1,
|
||
|
req: {
|
||
|
method: originalReq.method,
|
||
|
url: originalReq.url,
|
||
|
headers: originalReq.headers,
|
||
|
remoteAddress: originalReq.connection.remoteAddress,
|
||
|
remotePort: originalReq.connection.remotePort
|
||
|
}
|
||
|
})
|
||
|
}))
|
||
|
|
||
|
const server = http.createServer(function (req, res) {
|
||
|
originalReq = req
|
||
|
instance.info({ req: req }, 'my request')
|
||
|
res.end('hello')
|
||
|
})
|
||
|
server.unref()
|
||
|
server.listen()
|
||
|
const err = await once(server, 'listening')
|
||
|
error(err)
|
||
|
|
||
|
const res = await once(http.get('http://localhost:' + server.address().port), 'response')
|
||
|
res.resume()
|
||
|
server.close()
|
||
|
})
|
||
|
|
||
|
test('http request support via serializer without request connection', async ({ ok, same, error, teardown }) => {
|
||
|
var originalReq
|
||
|
const instance = pino({
|
||
|
serializers: {
|
||
|
req: pino.stdSerializers.req
|
||
|
}
|
||
|
}, sink((chunk, enc) => {
|
||
|
ok(new Date(chunk.time) <= new Date(), 'time is greater than Date.now()')
|
||
|
delete chunk.time
|
||
|
const expected = {
|
||
|
pid: pid,
|
||
|
hostname: hostname,
|
||
|
level: 30,
|
||
|
msg: 'my request',
|
||
|
v: 1,
|
||
|
req: {
|
||
|
method: originalReq.method,
|
||
|
url: originalReq.url,
|
||
|
headers: originalReq.headers
|
||
|
}
|
||
|
}
|
||
|
if (semver.gte(process.version, '13.0.0')) {
|
||
|
expected.req.remoteAddress = originalReq.connection.remoteAddress
|
||
|
expected.req.remotePort = originalReq.connection.remotePort
|
||
|
}
|
||
|
same(chunk, expected)
|
||
|
}))
|
||
|
|
||
|
const server = http.createServer(function (req, res) {
|
||
|
originalReq = req
|
||
|
delete req.connection
|
||
|
instance.info({ req: req }, 'my request')
|
||
|
res.end('hello')
|
||
|
})
|
||
|
server.unref()
|
||
|
server.listen()
|
||
|
const err = await once(server, 'listening')
|
||
|
error(err)
|
||
|
|
||
|
const res = await once(http.get('http://localhost:' + server.address().port), 'response')
|
||
|
res.resume()
|
||
|
server.close()
|
||
|
})
|
||
|
|
||
|
test('http response support', async ({ ok, same, error, teardown }) => {
|
||
|
var originalRes
|
||
|
const instance = pino(sink((chunk, enc) => {
|
||
|
ok(new Date(chunk.time) <= new Date(), 'time is greater than Date.now()')
|
||
|
delete chunk.time
|
||
|
same(chunk, {
|
||
|
pid: pid,
|
||
|
hostname: hostname,
|
||
|
level: 30,
|
||
|
msg: 'my response',
|
||
|
v: 1,
|
||
|
res: {
|
||
|
statusCode: originalRes.statusCode,
|
||
|
headers: originalRes._headers
|
||
|
}
|
||
|
})
|
||
|
}))
|
||
|
|
||
|
const server = http.createServer(function (req, res) {
|
||
|
originalRes = res
|
||
|
res.end('hello')
|
||
|
instance.info(res, 'my response')
|
||
|
})
|
||
|
server.unref()
|
||
|
server.listen()
|
||
|
const err = await once(server, 'listening')
|
||
|
|
||
|
error(err)
|
||
|
|
||
|
const res = await once(http.get('http://localhost:' + server.address().port), 'response')
|
||
|
res.resume()
|
||
|
server.close()
|
||
|
})
|
||
|
|
||
|
test('http response support via a serializer', async ({ ok, same, error, teardown }) => {
|
||
|
const instance = pino({
|
||
|
serializers: {
|
||
|
res: pino.stdSerializers.res
|
||
|
}
|
||
|
}, sink((chunk, enc) => {
|
||
|
ok(new Date(chunk.time) <= new Date(), 'time is greater than Date.now()')
|
||
|
delete chunk.time
|
||
|
same(chunk, {
|
||
|
pid: pid,
|
||
|
hostname: hostname,
|
||
|
level: 30,
|
||
|
msg: 'my response',
|
||
|
v: 1,
|
||
|
res: {
|
||
|
statusCode: 200,
|
||
|
headers: {
|
||
|
'x-single': 'y',
|
||
|
'x-multi': [1, 2]
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
}))
|
||
|
|
||
|
const server = http.createServer(function (req, res) {
|
||
|
res.setHeader('x-single', 'y')
|
||
|
res.setHeader('x-multi', [1, 2])
|
||
|
res.end('hello')
|
||
|
instance.info({ res: res }, 'my response')
|
||
|
})
|
||
|
|
||
|
server.unref()
|
||
|
server.listen()
|
||
|
const err = await once(server, 'listening')
|
||
|
error(err)
|
||
|
|
||
|
const res = await once(http.get('http://localhost:' + server.address().port), 'response')
|
||
|
res.resume()
|
||
|
server.close()
|
||
|
})
|
||
|
|
||
|
test('http request support via serializer in a child', async ({ ok, same, error, teardown }) => {
|
||
|
var originalReq
|
||
|
const instance = pino({
|
||
|
serializers: {
|
||
|
req: pino.stdSerializers.req
|
||
|
}
|
||
|
}, sink((chunk, enc) => {
|
||
|
ok(new Date(chunk.time) <= new Date(), 'time is greater than Date.now()')
|
||
|
delete chunk.time
|
||
|
same(chunk, {
|
||
|
pid: pid,
|
||
|
hostname: hostname,
|
||
|
level: 30,
|
||
|
msg: 'my request',
|
||
|
v: 1,
|
||
|
req: {
|
||
|
method: originalReq.method,
|
||
|
url: originalReq.url,
|
||
|
headers: originalReq.headers,
|
||
|
remoteAddress: originalReq.connection.remoteAddress,
|
||
|
remotePort: originalReq.connection.remotePort
|
||
|
}
|
||
|
})
|
||
|
}))
|
||
|
|
||
|
const server = http.createServer(function (req, res) {
|
||
|
originalReq = req
|
||
|
const child = instance.child({ req: req })
|
||
|
child.info('my request')
|
||
|
res.end('hello')
|
||
|
})
|
||
|
|
||
|
server.unref()
|
||
|
server.listen()
|
||
|
const err = await once(server, 'listening')
|
||
|
error(err)
|
||
|
|
||
|
const res = await once(http.get('http://localhost:' + server.address().port), 'response')
|
||
|
res.resume()
|
||
|
server.close()
|
||
|
})
|