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
|
// Flags: --experimental-modules
|
||||||
/* eslint-disable required-modules */
|
/* eslint-disable required-modules */
|
||||||
|
import '../common/index';
|
||||||
import assert from 'assert';
|
import assert from 'assert';
|
||||||
import ok from './test-esm-ok.mjs';
|
import ok from './test-esm-ok.mjs';
|
||||||
import json from './json.json';
|
import json from './json.json';
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
// Flags: --experimental-modules --loader ./test/fixtures/es-module-loaders/builtin-named-exports-loader.mjs
|
// Flags: --experimental-modules --loader ./test/fixtures/es-module-loaders/builtin-named-exports-loader.mjs
|
||||||
/* eslint-disable required-modules */
|
/* eslint-disable required-modules */
|
||||||
|
import '../common/index';
|
||||||
import { readFile } from 'fs';
|
import { readFile } from 'fs';
|
||||||
import assert from 'assert';
|
import assert from 'assert';
|
||||||
import ok from './test-esm-ok.mjs';
|
import ok from './test-esm-ok.mjs';
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
// Flags: --experimental-modules
|
// Flags: --experimental-modules
|
||||||
/* eslint-disable required-modules */
|
/* eslint-disable required-modules */
|
||||||
|
|
||||||
|
import '../common/index';
|
||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
import assert from 'assert';
|
import assert from 'assert';
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
// Flags: --experimental-modules
|
// Flags: --experimental-modules
|
||||||
/* eslint-disable required-modules */
|
/* eslint-disable required-modules */
|
||||||
|
import '../common/index';
|
||||||
import './esm-snapshot-mutator';
|
import './esm-snapshot-mutator';
|
||||||
import one from './esm-snapshot';
|
import one from './esm-snapshot';
|
||||||
import assert from 'assert';
|
import assert from 'assert';
|
||||||
|
Loading…
x
Reference in New Issue
Block a user