tinylink/node_modules/pino/test/transport/node-options.test.js

117 lines
3.3 KiB
JavaScript
Raw Normal View History

'use strict'
const test = require('node:test')
const assert = require('node:assert')
const { EventEmitter } = require('node:events')
const { join } = require('node:path')
const { pathToFileURL } = require('node:url')
const proxyquire = require('proxyquire')
function buildTransportWithFakeThreadStream () {
let lastCtorOpts
class FakeThreadStream extends EventEmitter {
constructor (opts) {
super()
this._closed = false
lastCtorOpts = opts
}
unref () {}
ref () {}
flushSync () {}
end () {
this._closed = true
this.emit('close')
}
get closed () {
return this._closed
}
}
const transport = proxyquire('../../lib/transport', {
'thread-stream': FakeThreadStream
})
return {
transport,
getLastCtorOpts () {
return lastCtorOpts
}
}
}
test('pino.transport sanitizes missing absolute preload in NODE_OPTIONS', () => {
const previous = process.env.NODE_OPTIONS
const missing = join(__dirname, '..', 'fixtures', 'missing-preload.js')
process.env.NODE_OPTIONS = `--require ${missing} --trace-warnings`
const { transport, getLastCtorOpts } = buildTransportWithFakeThreadStream()
transport({ target: join(__dirname, '..', 'fixtures', 'to-file-transport.js') })
assert.equal(getLastCtorOpts().workerOpts.env.NODE_OPTIONS, '--trace-warnings')
if (previous === undefined) {
delete process.env.NODE_OPTIONS
} else {
process.env.NODE_OPTIONS = previous
}
})
test('pino.transport sanitizes missing file:// preload in NODE_OPTIONS', () => {
const previous = process.env.NODE_OPTIONS
const missingFileUrl = pathToFileURL(join(__dirname, '..', 'fixtures', 'missing-import.mjs')).href
process.env.NODE_OPTIONS = `--import=${missingFileUrl}`
const { transport, getLastCtorOpts } = buildTransportWithFakeThreadStream()
transport({ target: join(__dirname, '..', 'fixtures', 'to-file-transport.js') })
assert.equal(getLastCtorOpts().workerOpts.env.NODE_OPTIONS, '')
if (previous === undefined) {
delete process.env.NODE_OPTIONS
} else {
process.env.NODE_OPTIONS = previous
}
})
test('pino.transport keeps relative preload flags in NODE_OPTIONS', () => {
const previous = process.env.NODE_OPTIONS
process.env.NODE_OPTIONS = '--require ./relative-preload.js'
const { transport, getLastCtorOpts } = buildTransportWithFakeThreadStream()
transport({ target: join(__dirname, '..', 'fixtures', 'to-file-transport.js') })
assert.equal(getLastCtorOpts().workerOpts.env, undefined)
if (previous === undefined) {
delete process.env.NODE_OPTIONS
} else {
process.env.NODE_OPTIONS = previous
}
})
test('pino.transport does not override explicit worker.env', () => {
const previous = process.env.NODE_OPTIONS
process.env.NODE_OPTIONS = `--require ${join(__dirname, '..', 'fixtures', 'missing-preload.js')}`
const explicitEnv = { NODE_OPTIONS: '--trace-warnings' }
const { transport, getLastCtorOpts } = buildTransportWithFakeThreadStream()
transport({
target: join(__dirname, '..', 'fixtures', 'to-file-transport.js'),
worker: {
env: explicitEnv
}
})
assert.equal(getLastCtorOpts().workerOpts.env, explicitEnv)
if (previous === undefined) {
delete process.env.NODE_OPTIONS
} else {
process.env.NODE_OPTIONS = previous
}
})