test: add es6 module global leakage tests
* created testing es6 module for global leakage tests * fixed a couple basic errors (vars -> lets, ...) * added globals leakage detection to es module tests * reversed whitespace change * whitespace change reversed PR-URL: https://github.com/nodejs/node/pull/16341 Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Anatoli Papirovski <apapirovski@mac.com> Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
This commit is contained in:
parent
f31cf56972
commit
8075d82ecf
109
test/common/index.mjs
Normal file
109
test/common/index.mjs
Normal file
@ -0,0 +1,109 @@
|
||||
// Flags: --experimental-modules
|
||||
/* eslint-disable required-modules */
|
||||
|
||||
import assert from 'assert';
|
||||
|
||||
let knownGlobals = [
|
||||
Buffer,
|
||||
clearImmediate,
|
||||
clearInterval,
|
||||
clearTimeout,
|
||||
console,
|
||||
constructor, // Enumerable in V8 3.21.
|
||||
global,
|
||||
process,
|
||||
setImmediate,
|
||||
setInterval,
|
||||
setTimeout
|
||||
];
|
||||
|
||||
if (process.env.NODE_TEST_KNOWN_GLOBALS) {
|
||||
const knownFromEnv = process.env.NODE_TEST_KNOWN_GLOBALS.split(',');
|
||||
allowGlobals(...knownFromEnv);
|
||||
}
|
||||
|
||||
export function allowGlobals(...whitelist) {
|
||||
knownGlobals = knownGlobals.concat(whitelist);
|
||||
}
|
||||
|
||||
export function leakedGlobals() {
|
||||
//add possible expected globals
|
||||
if (global.gc) {
|
||||
knownGlobals.push(global.gc);
|
||||
}
|
||||
|
||||
if (global.DTRACE_HTTP_SERVER_RESPONSE) {
|
||||
knownGlobals.push(DTRACE_HTTP_SERVER_RESPONSE);
|
||||
knownGlobals.push(DTRACE_HTTP_SERVER_REQUEST);
|
||||
knownGlobals.push(DTRACE_HTTP_CLIENT_RESPONSE);
|
||||
knownGlobals.push(DTRACE_HTTP_CLIENT_REQUEST);
|
||||
knownGlobals.push(DTRACE_NET_STREAM_END);
|
||||
knownGlobals.push(DTRACE_NET_SERVER_CONNECTION);
|
||||
}
|
||||
|
||||
if (global.COUNTER_NET_SERVER_CONNECTION) {
|
||||
knownGlobals.push(COUNTER_NET_SERVER_CONNECTION);
|
||||
knownGlobals.push(COUNTER_NET_SERVER_CONNECTION_CLOSE);
|
||||
knownGlobals.push(COUNTER_HTTP_SERVER_REQUEST);
|
||||
knownGlobals.push(COUNTER_HTTP_SERVER_RESPONSE);
|
||||
knownGlobals.push(COUNTER_HTTP_CLIENT_REQUEST);
|
||||
knownGlobals.push(COUNTER_HTTP_CLIENT_RESPONSE);
|
||||
}
|
||||
|
||||
if (global.LTTNG_HTTP_SERVER_RESPONSE) {
|
||||
knownGlobals.push(LTTNG_HTTP_SERVER_RESPONSE);
|
||||
knownGlobals.push(LTTNG_HTTP_SERVER_REQUEST);
|
||||
knownGlobals.push(LTTNG_HTTP_CLIENT_RESPONSE);
|
||||
knownGlobals.push(LTTNG_HTTP_CLIENT_REQUEST);
|
||||
knownGlobals.push(LTTNG_NET_STREAM_END);
|
||||
knownGlobals.push(LTTNG_NET_SERVER_CONNECTION);
|
||||
}
|
||||
|
||||
if (global.ArrayBuffer) {
|
||||
knownGlobals.push(ArrayBuffer);
|
||||
knownGlobals.push(Int8Array);
|
||||
knownGlobals.push(Uint8Array);
|
||||
knownGlobals.push(Uint8ClampedArray);
|
||||
knownGlobals.push(Int16Array);
|
||||
knownGlobals.push(Uint16Array);
|
||||
knownGlobals.push(Int32Array);
|
||||
knownGlobals.push(Uint32Array);
|
||||
knownGlobals.push(Float32Array);
|
||||
knownGlobals.push(Float64Array);
|
||||
knownGlobals.push(DataView);
|
||||
}
|
||||
|
||||
// Harmony features.
|
||||
if (global.Proxy) {
|
||||
knownGlobals.push(Proxy);
|
||||
}
|
||||
|
||||
if (global.Symbol) {
|
||||
knownGlobals.push(Symbol);
|
||||
}
|
||||
|
||||
const leaked = [];
|
||||
|
||||
for (const val in global) {
|
||||
if (!knownGlobals.includes(global[val])) {
|
||||
leaked.push(val);
|
||||
}
|
||||
}
|
||||
|
||||
if (global.__coverage__) {
|
||||
return leaked.filter((varname) => !/^(?:cov_|__cov)/.test(varname));
|
||||
} else {
|
||||
return leaked;
|
||||
}
|
||||
}
|
||||
|
||||
// Turn this off if the test should not check for global leaks.
|
||||
export let globalCheck = true; // eslint-disable-line
|
||||
|
||||
process.on('exit', function() {
|
||||
if (!globalCheck) return;
|
||||
const leaked = leakedGlobals();
|
||||
if (leaked.length > 0) {
|
||||
assert.fail(`Unexpected global(s) found: ${leaked.join(', ')}`);
|
||||
}
|
||||
});
|
@ -1,5 +1,6 @@
|
||||
// Flags: --experimental-modules
|
||||
/* eslint-disable required-modules */
|
||||
import '../common/index';
|
||||
import assert from 'assert';
|
||||
import ok from './test-esm-ok.mjs';
|
||||
import json from './json.json';
|
||||
|
@ -1,5 +1,6 @@
|
||||
// Flags: --experimental-modules --loader ./test/fixtures/es-module-loaders/builtin-named-exports-loader.mjs
|
||||
/* eslint-disable required-modules */
|
||||
import '../common/index';
|
||||
import { readFile } from 'fs';
|
||||
import assert from 'assert';
|
||||
import ok from './test-esm-ok.mjs';
|
||||
|
@ -1,6 +1,7 @@
|
||||
// Flags: --experimental-modules
|
||||
/* eslint-disable required-modules */
|
||||
|
||||
import '../common/index';
|
||||
import * as fs from 'fs';
|
||||
import assert from 'assert';
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
// Flags: --experimental-modules
|
||||
/* eslint-disable required-modules */
|
||||
import '../common/index';
|
||||
import './esm-snapshot-mutator';
|
||||
import one from './esm-snapshot';
|
||||
import assert from 'assert';
|
||||
|
Loading…
x
Reference in New Issue
Block a user