117 lines
3.3 KiB
JavaScript
117 lines
3.3 KiB
JavaScript
|
|
'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
|
||
|
|
}
|
||
|
|
})
|