node/test/parallel/test-process-threadCpuUsage-main-thread.js
Paolo Insogna e027791c6d
process: add threadCpuUsage
PR-URL: https://github.com/nodejs/node/pull/56467
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Juan José Arboleda <soyjuanarbol@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
2025-02-21 14:14:02 +00:00

88 lines
2.2 KiB
JavaScript

'use strict';
const { isSunOS } = require('../common');
const { ok, throws, notStrictEqual } = require('assert');
function validateResult(result) {
notStrictEqual(result, null);
ok(Number.isFinite(result.user));
ok(Number.isFinite(result.system));
ok(result.user >= 0);
ok(result.system >= 0);
}
// Test that process.threadCpuUsage() works on the main thread
// The if check and the else branch should be removed once SmartOS support is fixed in
// https://github.com/libuv/libuv/issues/4706
if (!isSunOS) {
const result = process.threadCpuUsage();
// Validate the result of calling with no previous value argument.
validateResult(process.threadCpuUsage());
// Validate the result of calling with a previous value argument.
validateResult(process.threadCpuUsage(result));
// Ensure the results are >= the previous.
let thisUsage;
let lastUsage = process.threadCpuUsage();
for (let i = 0; i < 10; i++) {
thisUsage = process.threadCpuUsage();
validateResult(thisUsage);
ok(thisUsage.user >= lastUsage.user);
ok(thisUsage.system >= lastUsage.system);
lastUsage = thisUsage;
}
} else {
throws(
() => process.threadCpuUsage(),
{
code: 'ERR_OPERATION_FAILED',
name: 'Error',
message: 'Operation failed: threadCpuUsage is not available on SunOS'
}
);
}
// Test argument validaton
{
throws(
() => process.threadCpuUsage(123),
{
code: 'ERR_INVALID_ARG_TYPE',
name: 'TypeError',
message: 'The "prevValue" argument must be of type object. Received type number (123)'
}
);
throws(
() => process.threadCpuUsage([]),
{
code: 'ERR_INVALID_ARG_TYPE',
name: 'TypeError',
message: 'The "prevValue" argument must be of type object. Received an instance of Array'
}
);
throws(
() => process.threadCpuUsage({ user: -123 }),
{
code: 'ERR_INVALID_ARG_VALUE',
name: 'RangeError',
message: "The property 'prevValue.user' is invalid. Received -123"
}
);
throws(
() => process.threadCpuUsage({ user: 0, system: 'bar' }),
{
code: 'ERR_INVALID_ARG_TYPE',
name: 'TypeError',
message: "The \"prevValue.system\" property must be of type number. Received type string ('bar')"
}
);
}