| 'use strict'; |
| |
| // This tests that --trace-env works. |
| const common = require('../common'); |
| const { spawnSyncAndAssert } = require('../common/child_process'); |
| const assert = require('assert'); |
| const fixtures = require('../common/fixtures'); |
| |
| // Check reads from the Node.js internals. |
| spawnSyncAndAssert(process.execPath, ['--trace-env', fixtures.path('empty.js')], { |
| stderr(output) { |
| // This is a non-exhaustive list of the environment variables checked |
| // during startup of an empty script at the time this test was written. |
| // If the internals remove any one of them, the checks here can be updated |
| // accordingly. |
| if (common.hasIntl) { |
| assert.match(output, /get "NODE_ICU_DATA"/); |
| } |
| if (common.hasCrypto) { |
| assert.match(output, /get "NODE_EXTRA_CA_CERTS"/); |
| |
| const { hasOpenSSL3 } = require('../common/crypto'); |
| if (hasOpenSSL3) { |
| assert.match(output, /get "OPENSSL_CONF"/); |
| } |
| } |
| assert.match(output, /get "NODE_DEBUG_NATIVE"/); |
| assert.match(output, /get "NODE_COMPILE_CACHE"/); |
| assert.match(output, /get "NODE_NO_WARNINGS"/); |
| assert.match(output, /get "NODE_V8_COVERAGE"/); |
| assert.match(output, /get "NODE_DEBUG"/); |
| assert.match(output, /get "NODE_CHANNEL_FD"/); |
| assert.match(output, /get "NODE_UNIQUE_ID"/); |
| if (common.isWindows) { |
| assert.match(output, /get "USERPROFILE"/); |
| } else { |
| assert.match(output, /get "HOME"/); |
| } |
| assert.match(output, /get "NODE_PATH"/); |
| assert.match(output, /get "WATCH_REPORT_DEPENDENCIES"/); |
| } |
| }); |
| |
| // Check get from user land. |
| spawnSyncAndAssert(process.execPath, ['--trace-env', fixtures.path('process-env', 'get.js') ], { |
| env: { |
| ...process.env, |
| FOO: 'FOO', |
| BAR: undefined, |
| } |
| }, { |
| stderr(output) { |
| assert.match(output, /get "FOO"/); |
| assert.match(output, /get "BAR"/); |
| } |
| }); |
| |
| // Check set from user land. |
| spawnSyncAndAssert(process.execPath, ['--trace-env', fixtures.path('process-env', 'set.js') ], { |
| stderr(output) { |
| assert.match(output, /set "FOO"/); |
| } |
| }); |
| |
| // Check define from user land. |
| spawnSyncAndAssert(process.execPath, ['--trace-env', fixtures.path('process-env', 'define.js') ], { |
| stderr(output) { |
| assert.match(output, /set "FOO"/); |
| } |
| }); |
| |
| // Check query from user land. |
| spawnSyncAndAssert(process.execPath, ['--trace-env', fixtures.path('process-env', 'query.js') ], { |
| env: { |
| ...process.env, |
| FOO: 'FOO', |
| BAR: undefined, |
| BAZ: undefined, |
| } |
| }, { |
| stderr(output) { |
| assert.match(output, /query "FOO"/); |
| assert.match(output, /query "BAR"/); |
| assert.match(output, /query "BAZ"/); |
| } |
| }); |
| |
| // Check delete from user land. |
| spawnSyncAndAssert(process.execPath, ['--trace-env', fixtures.path('process-env', 'delete.js') ], { |
| stderr(output) { |
| assert.match(output, /delete "FOO"/); |
| } |
| }); |
| |
| // Check enumeration from user land. |
| spawnSyncAndAssert(process.execPath, ['--trace-env', fixtures.path('process-env', 'enumerate.js') ], { |
| stderr(output) { |
| const matches = output.match(/enumerate environment variables/g); |
| assert.strictEqual(matches.length, 2); |
| } |
| }); |