Skip to content

Commit 7e6510b

Browse files
TrottMylesBorins
authored andcommitted
test: delay loading 'os' in test/common module
There is a test that doesn't load the common module initially because it needs to monkey-patch the 'os' module. I think it would be a good idea to minimize the side-effects of loading common anyway, so let's defer loading 'os' unless/until it's actually needed. PR-URL: #30914 Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Richard Lau <riclau@uk.ibm.com>
1 parent a221017 commit 7e6510b

File tree

1 file changed

+37
-30
lines changed

1 file changed

+37
-30
lines changed

test/common/index.js

+37-30
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,20 @@
2323
/* eslint-disable node-core/crypto-check */
2424
'use strict';
2525
const process = global.process; // Some tests tamper with the process global.
26-
const path = require('path');
27-
const fs = require('fs');
26+
2827
const assert = require('assert');
29-
const os = require('os');
3028
const { exec, execSync, spawnSync } = require('child_process');
29+
const fs = require('fs');
30+
// Do not require 'os' until needed so that test-os-checked-fucnction can
31+
// monkey patch it. If 'os' is required here, that test will fail.
32+
const path = require('path');
3133
const util = require('util');
34+
const { isMainThread } = require('worker_threads');
35+
3236
const tmpdir = require('./tmpdir');
3337
const bits = ['arm64', 'mips', 'mipsel', 'ppc64', 's390x', 'x64']
3438
.includes(process.arch) ? 64 : 32;
3539
const hasIntl = !!process.config.variables.v8_enable_i18n_support;
36-
const { isMainThread } = require('worker_threads');
3740

3841
// Some tests assume a umask of 0o022 so set that up front. Tests that need a
3942
// different umask will set it themselves.
@@ -102,23 +105,12 @@ if (process.argv.length === 2 &&
102105

103106
const isWindows = process.platform === 'win32';
104107
const isAIX = process.platform === 'aix';
105-
// On IBMi, process.platform and os.platform() both return 'aix',
106-
// It is not enough to differentiate between IBMi and real AIX system.
107-
const isIBMi = os.type() === 'OS400';
108-
const isLinuxPPCBE = (process.platform === 'linux') &&
109-
(process.arch === 'ppc64') &&
110-
(os.endianness() === 'BE');
111108
const isSunOS = process.platform === 'sunos';
112109
const isFreeBSD = process.platform === 'freebsd';
113110
const isOpenBSD = process.platform === 'openbsd';
114111
const isLinux = process.platform === 'linux';
115112
const isOSX = process.platform === 'darwin';
116113

117-
const enoughTestMem = os.totalmem() > 0x70000000; /* 1.75 Gb */
118-
const cpus = os.cpus();
119-
const enoughTestCpu = Array.isArray(cpus) &&
120-
(cpus.length > 1 || cpus[0].speed > 999);
121-
122114
const rootDir = isWindows ? 'c:\\' : '/';
123115

124116
const buildType = process.config.target_defaults ?
@@ -198,15 +190,6 @@ const PIPE = (() => {
198190
return path.join(pipePrefix, pipeName);
199191
})();
200192

201-
const hasIPv6 = (() => {
202-
const iFaces = os.networkInterfaces();
203-
const re = isWindows ? /Loopback Pseudo-Interface/ : /lo/;
204-
return Object.keys(iFaces).some((name) => {
205-
return re.test(name) &&
206-
iFaces[name].some(({ family }) => family === 'IPv6');
207-
});
208-
})();
209-
210193
/*
211194
* Check that when running a test with
212195
* `$node --abort-on-uncaught-exception $file child`
@@ -742,8 +725,6 @@ module.exports = {
742725
childShouldThrowAndAbort,
743726
createZeroFilledFile,
744727
disableCrashOnUnhandledRejection,
745-
enoughTestCpu,
746-
enoughTestMem,
747728
expectsError,
748729
expectsInternalAssertion,
749730
expectWarning,
@@ -753,14 +734,11 @@ module.exports = {
753734
getTTYfd,
754735
hasIntl,
755736
hasCrypto,
756-
hasIPv6,
757737
hasMultiLocalhost,
758738
isAIX,
759739
isAlive,
760740
isFreeBSD,
761-
isIBMi,
762741
isLinux,
763-
isLinuxPPCBE,
764742
isMainThread,
765743
isOpenBSD,
766744
isOSX,
@@ -784,12 +762,28 @@ module.exports = {
784762
skipIfReportDisabled,
785763
skipIfWorker,
786764

787-
get localhostIPv6() { return '::1'; },
765+
get enoughTestCPU() {
766+
const cpus = require('os').cpus();
767+
return Array.isArray(cpus) && (cpus.length > 1 || cpus[0].speed > 999);
768+
},
769+
770+
get enoughTestMeme() {
771+
return require('os').totalmem() > 0x70000000; /* 1.75 Gb */
772+
},
788773

789774
get hasFipsCrypto() {
790775
return hasCrypto && require('crypto').getFips();
791776
},
792777

778+
get hasIPv6() {
779+
const iFaces = require('os').networkInterfaces();
780+
const re = isWindows ? /Loopback Pseudo-Interface/ : /lo/;
781+
return Object.keys(iFaces).some((name) => {
782+
return re.test(name) &&
783+
iFaces[name].some(({ family }) => family === 'IPv6');
784+
});
785+
},
786+
793787
get inFreeBSDJail() {
794788
if (inFreeBSDJail !== null) return inFreeBSDJail;
795789

@@ -802,6 +796,17 @@ module.exports = {
802796
return inFreeBSDJail;
803797
},
804798

799+
// On IBMi, process.platform and os.platform() both return 'aix',
800+
// It is not enough to differentiate between IBMi and real AIX system.
801+
get isIBMi() {
802+
return require('os').type() === 'OS400';
803+
},
804+
805+
get isLinuxPPCBE() {
806+
return (process.platform === 'linux') && (process.arch === 'ppc64') &&
807+
(require('os').endianness() === 'BE');
808+
},
809+
805810
get localhostIPv4() {
806811
if (localhostIPv4 !== null) return localhostIPv4;
807812

@@ -823,6 +828,8 @@ module.exports = {
823828
return localhostIPv4;
824829
},
825830

831+
get localhostIPv6() { return '::1'; },
832+
826833
// opensslCli defined lazily to reduce overhead of spawnSync
827834
get opensslCli() {
828835
if (opensslCli !== null) return opensslCli;

0 commit comments

Comments
 (0)