test: disambiguate AIX and IBM i

When built with Python 3.9 on IBM i, `process.platform` will return
`os400` instead of `aix`. In preparation for this, make `common.isAIX`
only return true for AIX and update the tests to add checks for
`common.isIBMi` where they were missing.

PR-URL: https://github.com/nodejs/node/pull/48056
Refs: https://github.com/nodejs/node/pull/46739
Refs: https://github.com/nodejs/build/pull/3358
Reviewed-By: Moshe Atlow <moshe@atlow.co.il>
Reviewed-By: Michael Dawson <midawson@redhat.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
This commit is contained in:
Richard Lau 2023-09-28 13:51:44 +01:00 committed by Node.js GitHub Bot
parent 53b5545672
commit 035e06317a
13 changed files with 25 additions and 18 deletions

View File

@ -78,6 +78,7 @@ if (process.argv[2] === 'child') {
if (!(common.isFreeBSD ||
common.isAIX ||
common.isIBMi ||
(common.isLinux && !isGlibc()) ||
common.isWindows)) {
assert(stderr.includes('ExampleOwnerClass'), stderr);

View File

@ -123,7 +123,6 @@ if (process.argv.length === 2 &&
}
const isWindows = process.platform === 'win32';
const isAIX = process.platform === 'aix';
const isSunOS = process.platform === 'sunos';
const isFreeBSD = process.platform === 'freebsd';
const isOpenBSD = process.platform === 'openbsd';
@ -274,7 +273,7 @@ function platformTimeout(ms) {
if (process.features.debug)
ms = multipliers.two * ms;
if (isAIX)
if (exports.isAIX || exports.isIBMi)
return multipliers.two * ms; // Default localhost speed is slower on AIX
if (isPi)
@ -928,7 +927,6 @@ const common = {
hasQuic,
hasMultiLocalhost,
invalidArgTypeHelper,
isAIX,
isAlive,
isAsan,
isDumbTerminal,
@ -999,7 +997,12 @@ const common = {
},
// On IBMi, process.platform and os.platform() both return 'aix',
// when built with Python versions earlier than 3.9.
// It is not enough to differentiate between IBMi and real AIX system.
get isAIX() {
return require('os').type() === 'AIX';
},
get isIBMi() {
return require('os').type() === 'OS400';
},

View File

@ -5,7 +5,7 @@
const common = require('../common');
const assert = require('assert');
if (common.isSunOS || common.isWindows || common.isAIX) {
if (common.isSunOS || common.isWindows || common.isAIX || common.isIBMi) {
// The current working directory cannot be removed on these platforms.
// Change this to common.skip() when this is no longer a known issue test.
assert.fail('cannot rmdir current working directory');

View File

@ -1,7 +1,7 @@
'use strict';
const common = require('../common');
// Fails with EINVAL on SmartOS, EBUSY on Windows, EBUSY on AIX.
if (common.isSunOS || common.isWindows || common.isAIX)
if (common.isSunOS || common.isWindows || common.isAIX || common.isIBMi)
common.skip('cannot rmdir current working directory');
if (!common.isMainThread)
common.skip('process.chdir is not available in Workers');

View File

@ -1,7 +1,7 @@
'use strict';
const common = require('../common');
// Fails with EINVAL on SmartOS, EBUSY on Windows, EBUSY on AIX.
if (common.isSunOS || common.isWindows || common.isAIX)
if (common.isSunOS || common.isWindows || common.isAIX || common.isIBMi)
common.skip('cannot rmdir current working directory');
if (!common.isMainThread)
common.skip('process.chdir is not available in Workers');

View File

@ -1,7 +1,7 @@
'use strict';
const common = require('../common');
// Fails with EINVAL on SmartOS, EBUSY on Windows, EBUSY on AIX.
if (common.isSunOS || common.isWindows || common.isAIX)
if (common.isSunOS || common.isWindows || common.isAIX || common.isIBMi)
common.skip('cannot rmdir current working directory');
if (!common.isMainThread)
common.skip('process.chdir is not available in Workers');

View File

@ -3,7 +3,7 @@ const common = require('../common');
// Simulate `cat readfile.js | node readfile.js`
if (common.isWindows || common.isAIX)
if (common.isWindows || common.isAIX || common.isIBMi)
common.skip(`No /dev/stdin on ${process.platform}.`);
const assert = require('assert');

View File

@ -24,7 +24,7 @@ const common = require('../common');
// Simulate `cat readfile.js | node readfile.js`
if (common.isWindows || common.isAIX)
if (common.isWindows || common.isAIX || common.isIBMi)
common.skip(`No /dev/stdin on ${process.platform}.`);
const assert = require('assert');

View File

@ -3,7 +3,7 @@ const common = require('../common');
// Simulate `cat readfile.js | node readfile.js`
if (common.isWindows || common.isAIX)
if (common.isWindows || common.isAIX || common.isIBMi)
common.skip(`No /dev/stdin on ${process.platform}.`);
const assert = require('assert');

View File

@ -2,7 +2,7 @@
const common = require('../common');
if (common.isWindows || common.isAIX)
if (common.isWindows || common.isAIX || common.isIBMi)
common.skip(`No /dev/stdin on ${process.platform}.`);
const assert = require('assert');

View File

@ -39,7 +39,7 @@ function stat_resource(resource, statSync = fs.statSync) {
const stats = fs.fstatSync(resource);
// Ensure mtime has been written to disk
// except for directories on AIX where it cannot be synced
if (common.isAIX && stats.isDirectory())
if ((common.isAIX || common.isIBMi) && stats.isDirectory())
return stats;
fs.fsyncSync(resource);
return fs.fstatSync(resource);

View File

@ -81,11 +81,14 @@ const hostname = os.hostname();
is.string(hostname);
assert.ok(hostname.length > 0);
const DUMMY_PRIORITY = 10;
os.setPriority(DUMMY_PRIORITY);
const priority = os.getPriority();
is.number(priority);
assert.strictEqual(priority, DUMMY_PRIORITY);
// IBMi process priority is different.
if (!common.isIBMi) {
const DUMMY_PRIORITY = 10;
os.setPriority(DUMMY_PRIORITY);
const priority = os.getPriority();
is.number(priority);
assert.strictEqual(priority, DUMMY_PRIORITY);
}
// On IBMi, os.uptime() returns 'undefined'
if (!common.isIBMi) {

View File

@ -17,7 +17,7 @@ assert.throws(() => {
}, ({ name, code, message }) => {
assert.strictEqual(name, 'Error');
assert.strictEqual(code, 'ERR_DLOPEN_FAILED');
if (!common.isAIX) {
if (!common.isAIX && !common.isIBMi) {
assert.match(message, /foo-%s\.node/);
}
return true;