| 'use strict'; |
| require('../common'); |
| const assert = require('assert'); |
| const result = process.cpuUsage(); |
| |
| // Validate the result of calling with no previous value argument. |
| validateResult(result); |
| |
| // Validate the result of calling with a previous value argument. |
| validateResult(process.cpuUsage(result)); |
| |
| // Ensure the results are >= the previous. |
| let thisUsage; |
| let lastUsage = process.cpuUsage(); |
| for (let i = 0; i < 10; i++) { |
| thisUsage = process.cpuUsage(); |
| validateResult(thisUsage); |
| assert(thisUsage.user >= lastUsage.user); |
| assert(thisUsage.system >= lastUsage.system); |
| lastUsage = thisUsage; |
| } |
| |
| // Ensure that the diffs are >= 0. |
| let startUsage; |
| let diffUsage; |
| for (let i = 0; i < 10; i++) { |
| startUsage = process.cpuUsage(); |
| diffUsage = process.cpuUsage(startUsage); |
| validateResult(startUsage); |
| validateResult(diffUsage); |
| assert(diffUsage.user >= 0); |
| assert(diffUsage.system >= 0); |
| } |
| |
| // Ensure that an invalid shape for the previous value argument throws an error. |
| assert.throws( |
| () => process.cpuUsage(1), |
| { |
| code: 'ERR_INVALID_ARG_TYPE', |
| name: 'TypeError [ERR_INVALID_ARG_TYPE]', |
| message: 'The "prevValue" argument must be of type object. ' + |
| 'Received type number' |
| } |
| ); |
| |
| // Check invalid types. |
| [ |
| {}, |
| { user: 'a' }, |
| { user: null, system: 'c' }, |
| ].forEach((value) => { |
| assert.throws( |
| () => process.cpuUsage(value), |
| { |
| code: 'ERR_INVALID_ARG_TYPE', |
| name: 'TypeError [ERR_INVALID_ARG_TYPE]', |
| message: 'The "prevValue.user" property must be of type number. ' + |
| `Received type ${typeof value.user}` |
| } |
| ); |
| }); |
| |
| [ |
| { user: 3, system: 'b' }, |
| { user: 3, system: null } |
| ].forEach((value) => { |
| assert.throws( |
| () => process.cpuUsage(value), |
| { |
| code: 'ERR_INVALID_ARG_TYPE', |
| name: 'TypeError [ERR_INVALID_ARG_TYPE]', |
| message: 'The "prevValue.system" property must be of type number. ' + |
| `Received type ${typeof value.system}` |
| } |
| ); |
| }); |
| |
| // Check invalid values. |
| [ |
| { user: -1, system: 2 }, |
| { user: Number.POSITIVE_INFINITY, system: 4 } |
| ].forEach((value) => { |
| assert.throws( |
| () => process.cpuUsage(value), |
| { |
| code: 'ERR_INVALID_OPT_VALUE', |
| name: 'RangeError [ERR_INVALID_OPT_VALUE]', |
| message: `The value "${value.user}" is invalid ` + |
| 'for option "prevValue.user"' |
| } |
| ); |
| }); |
| |
| [ |
| { user: 3, system: -2 }, |
| { user: 5, system: Number.NEGATIVE_INFINITY } |
| ].forEach((value) => { |
| assert.throws( |
| () => process.cpuUsage(value), |
| { |
| code: 'ERR_INVALID_OPT_VALUE', |
| name: 'RangeError [ERR_INVALID_OPT_VALUE]', |
| message: `The value "${value.system}" is invalid ` + |
| 'for option "prevValue.system"' |
| } |
| ); |
| }); |
| |
| // Ensure that the return value is the expected shape. |
| function validateResult(result) { |
| assert.notStrictEqual(result, null); |
| |
| assert(Number.isFinite(result.user)); |
| assert(Number.isFinite(result.system)); |
| |
| assert(result.user >= 0); |
| assert(result.system >= 0); |
| } |