Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test: make test-os-checked-function work without test harness #30914

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 37 additions & 30 deletions test/common/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,17 +23,20 @@
/* eslint-disable node-core/crypto-check */
'use strict';
const process = global.process; // Some tests tamper with the process global.
const path = require('path');
const fs = require('fs');

const assert = require('assert');
const os = require('os');
const { exec, execSync, spawnSync } = require('child_process');
const fs = require('fs');
// Do not require 'os' until needed so that test-os-checked-fucnction can
// monkey patch it. If 'os' is required here, that test will fail.
const path = require('path');
const util = require('util');
const { isMainThread } = require('worker_threads');

const tmpdir = require('./tmpdir');
const bits = ['arm64', 'mips', 'mipsel', 'ppc64', 's390x', 'x64']
.includes(process.arch) ? 64 : 32;
const hasIntl = !!process.config.variables.v8_enable_i18n_support;
const { isMainThread } = require('worker_threads');

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

const isWindows = process.platform === 'win32';
const isAIX = process.platform === 'aix';
// On IBMi, process.platform and os.platform() both return 'aix',
// It is not enough to differentiate between IBMi and real AIX system.
const isIBMi = os.type() === 'OS400';
const isLinuxPPCBE = (process.platform === 'linux') &&
(process.arch === 'ppc64') &&
(os.endianness() === 'BE');
const isSunOS = process.platform === 'sunos';
const isFreeBSD = process.platform === 'freebsd';
const isOpenBSD = process.platform === 'openbsd';
const isLinux = process.platform === 'linux';
const isOSX = process.platform === 'darwin';

const enoughTestMem = os.totalmem() > 0x70000000; /* 1.75 Gb */
const cpus = os.cpus();
const enoughTestCpu = Array.isArray(cpus) &&
(cpus.length > 1 || cpus[0].speed > 999);

const rootDir = isWindows ? 'c:\\' : '/';

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

const hasIPv6 = (() => {
const iFaces = os.networkInterfaces();
const re = isWindows ? /Loopback Pseudo-Interface/ : /lo/;
return Object.keys(iFaces).some((name) => {
return re.test(name) &&
iFaces[name].some(({ family }) => family === 'IPv6');
});
})();

/*
* Check that when running a test with
* `$node --abort-on-uncaught-exception $file child`
Expand Down Expand Up @@ -742,8 +725,6 @@ module.exports = {
childShouldThrowAndAbort,
createZeroFilledFile,
disableCrashOnUnhandledRejection,
enoughTestCpu,
enoughTestMem,
expectsError,
expectsInternalAssertion,
expectWarning,
Expand All @@ -753,14 +734,11 @@ module.exports = {
getTTYfd,
hasIntl,
hasCrypto,
hasIPv6,
hasMultiLocalhost,
isAIX,
isAlive,
isFreeBSD,
isIBMi,
isLinux,
isLinuxPPCBE,
isMainThread,
isOpenBSD,
isOSX,
Expand All @@ -784,12 +762,28 @@ module.exports = {
skipIfReportDisabled,
skipIfWorker,

get localhostIPv6() { return '::1'; },
get enoughTestCPU() {
const cpus = require('os').cpus();
return Array.isArray(cpus) && (cpus.length > 1 || cpus[0].speed > 999);
},

get enoughTestMeme() {
return require('os').totalmem() > 0x70000000; /* 1.75 Gb */
},

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

get hasIPv6() {
const iFaces = require('os').networkInterfaces();
const re = isWindows ? /Loopback Pseudo-Interface/ : /lo/;
return Object.keys(iFaces).some((name) => {
return re.test(name) &&
iFaces[name].some(({ family }) => family === 'IPv6');
});
},

get inFreeBSDJail() {
if (inFreeBSDJail !== null) return inFreeBSDJail;

Expand All @@ -802,6 +796,17 @@ module.exports = {
return inFreeBSDJail;
},

// On IBMi, process.platform and os.platform() both return 'aix',
// It is not enough to differentiate between IBMi and real AIX system.
get isIBMi() {
return require('os').type() === 'OS400';
},

get isLinuxPPCBE() {
return (process.platform === 'linux') && (process.arch === 'ppc64') &&
(require('os').endianness() === 'BE');
},

get localhostIPv4() {
if (localhostIPv4 !== null) return localhostIPv4;

Expand All @@ -823,6 +828,8 @@ module.exports = {
return localhostIPv4;
},

get localhostIPv6() { return '::1'; },

// opensslCli defined lazily to reduce overhead of spawnSync
get opensslCli() {
if (opensslCli !== null) return opensslCli;
Expand Down
3 changes: 1 addition & 2 deletions test/parallel/test-os-checked-function.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/* eslint-disable node-core/require-common-first */
'use strict';
// Flags: --expose_internals

const common = require('../common');
const { internalBinding } = require('internal/test/binding');

// Monkey patch the os binding before requiring any other modules, including
Expand All @@ -12,7 +12,6 @@ internalBinding('os').getHomeDirectory = function(ctx) {
ctx.message = 'baz';
};

const common = require('../common');
const os = require('os');

common.expectsError(os.homedir, {
Expand Down