pino/test/http.test.js
James Sumners 41d1706410
Convert tests to node:test (#2299)
* Convert tests to node:test

* broken-pipe.test.js

* browser-is-level-enabled.test.js

* complex-objects.test.js

* crlf.test.js

* custom-levels.test.js

* error.test.js

* error-key.test.js

* escaping.test.js

* exit.test.js

* formatters.test.js

* hooks.test.js

* http.test.js

* is-level-enabled.test.js

* levels.test.js

* metadata.test.js

* mixin.test.js

* mixin-merge-strategy.test.js

* multistream.test.js

* redact.test.js

* serializers.test.js

* stdout-protection.test.js

* syncfalse.test.js

* timestamp.test.js

* timestamp-nano.test.js

* transport-stream.test.js

* esm/*

* internals/version.test.js

* transport/big.test.js

* transport/bundlers-support.test.js

* transport/caller.test.js

* transport/core.test.js

* transport/core.transpiled.test.js

* transport/module-link.test.js

* transport/pipeline.test.js

* transport/repl.test.js

* transport/sync-false.test.js

* transport/sync-true.test.js

* transport/targets.test.js

* transport/uses-pino-config.test.js

* clean helper

* finalize

* restore transport/core.test.js

* address feedback

* skip broken-pipe in CITGM

* remove unused package

* remove duplicate test file
2025-10-03 06:12:54 -04:00

215 lines
5.2 KiB
JavaScript

'use strict'
const test = require('node:test')
const http = require('node:http')
const os = require('node:os')
const tspl = require('@matteo.collina/tspl')
const { sink, once } = require('./helper')
const pino = require('../')
const { pid } = process
const hostname = os.hostname()
test('http request support', async (t) => {
const plan = tspl(t, { plan: 3 })
let originalReq
const instance = pino(sink((chunk, enc) => {
plan.ok(new Date(chunk.time) <= new Date(), 'time is greater than Date.now()')
delete chunk.time
plan.deepEqual(chunk, {
pid,
hostname,
level: 30,
msg: 'my request',
req: {
method: originalReq.method,
url: originalReq.url,
headers: originalReq.headers,
remoteAddress: originalReq.socket.remoteAddress,
remotePort: originalReq.socket.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')
plan.equal(err, undefined)
const res = await once(http.get('http://localhost:' + server.address().port), 'response')
res.resume()
server.close()
await plan
})
test('http request support via serializer', async (t) => {
const plan = tspl(t, { plan: 3 })
let originalReq
const instance = pino({
serializers: {
req: pino.stdSerializers.req
}
}, sink((chunk, enc) => {
plan.ok(new Date(chunk.time) <= new Date(), 'time is greater than Date.now()')
delete chunk.time
plan.deepEqual(chunk, {
pid,
hostname,
level: 30,
msg: 'my request',
req: {
method: originalReq.method,
url: originalReq.url,
headers: originalReq.headers,
remoteAddress: originalReq.socket.remoteAddress,
remotePort: originalReq.socket.remotePort
}
})
}))
const server = http.createServer(function (req, res) {
originalReq = req
instance.info({ req }, 'my request')
res.end('hello')
})
server.unref()
server.listen()
const err = await once(server, 'listening')
plan.equal(err, undefined)
const res = await once(http.get('http://localhost:' + server.address().port), 'response')
res.resume()
server.close()
await plan
})
test('http response support', async (t) => {
const plan = tspl(t, { plan: 3 })
let originalRes
const instance = pino(sink((chunk, enc) => {
plan.ok(new Date(chunk.time) <= new Date(), 'time is greater than Date.now()')
delete chunk.time
plan.deepEqual(chunk, {
pid,
hostname,
level: 30,
msg: 'my response',
res: {
statusCode: originalRes.statusCode,
headers: originalRes.getHeaders()
}
})
}))
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')
plan.equal(err, undefined)
const res = await once(http.get('http://localhost:' + server.address().port), 'response')
res.resume()
server.close()
await plan
})
test('http response support via a serializer', async (t) => {
const plan = tspl(t, { plan: 3 })
const instance = pino({
serializers: {
res: pino.stdSerializers.res
}
}, sink((chunk, enc) => {
plan.ok(new Date(chunk.time) <= new Date(), 'time is greater than Date.now()')
delete chunk.time
plan.deepEqual(chunk, {
pid,
hostname,
level: 30,
msg: 'my response',
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 }, 'my response')
})
server.unref()
server.listen()
const err = await once(server, 'listening')
plan.equal(err, undefined)
const res = await once(http.get('http://localhost:' + server.address().port), 'response')
res.resume()
server.close()
await plan
})
test('http request support via serializer in a child', async (t) => {
const plan = tspl(t, { plan: 3 })
let originalReq
const instance = pino({
serializers: {
req: pino.stdSerializers.req
}
}, sink((chunk, enc) => {
plan.ok(new Date(chunk.time) <= new Date(), 'time is greater than Date.now()')
delete chunk.time
plan.deepEqual(chunk, {
pid,
hostname,
level: 30,
msg: 'my request',
req: {
method: originalReq.method,
url: originalReq.url,
headers: originalReq.headers,
remoteAddress: originalReq.socket.remoteAddress,
remotePort: originalReq.socket.remotePort
}
})
}))
const server = http.createServer(function (req, res) {
originalReq = req
const child = instance.child({ req })
child.info('my request')
res.end('hello')
})
server.unref()
server.listen()
const err = await once(server, 'listening')
plan.equal(err, undefined)
const res = await once(http.get('http://localhost:' + server.address().port), 'response')
res.resume()
server.close()
await plan
})