1'use strict'; 2const common = require('../common'); 3const assert = require('assert'); 4const result = process.cpuUsage(); 5 6// Validate the result of calling with no previous value argument. 7validateResult(result); 8 9// Validate the result of calling with a previous value argument. 10validateResult(process.cpuUsage(result)); 11 12// Ensure the results are >= the previous. 13let thisUsage; 14let lastUsage = process.cpuUsage(); 15for (let i = 0; i < 10; i++) { 16 thisUsage = process.cpuUsage(); 17 validateResult(thisUsage); 18 assert(thisUsage.user >= lastUsage.user); 19 assert(thisUsage.system >= lastUsage.system); 20 lastUsage = thisUsage; 21} 22 23// Ensure that the diffs are >= 0. 24let startUsage; 25let diffUsage; 26for (let i = 0; i < 10; i++) { 27 startUsage = process.cpuUsage(); 28 diffUsage = process.cpuUsage(startUsage); 29 validateResult(startUsage); 30 validateResult(diffUsage); 31 assert(diffUsage.user >= 0); 32 assert(diffUsage.system >= 0); 33} 34 35// Ensure that an invalid shape for the previous value argument throws an error. 36assert.throws( 37 () => process.cpuUsage(1), 38 { 39 code: 'ERR_INVALID_ARG_TYPE', 40 name: 'TypeError', 41 message: 'The "prevValue" argument must be of type object. ' + 42 'Received type number (1)' 43 } 44); 45 46// Check invalid types. 47[ 48 {}, 49 { user: 'a' }, 50 { user: null, system: 'c' }, 51].forEach((value) => { 52 assert.throws( 53 () => process.cpuUsage(value), 54 { 55 code: 'ERR_INVALID_ARG_TYPE', 56 name: 'TypeError', 57 message: 'The "prevValue.user" property must be of type number.' + 58 common.invalidArgTypeHelper(value.user) 59 } 60 ); 61}); 62 63[ 64 { user: 3, system: 'b' }, 65 { user: 3, system: null }, 66].forEach((value) => { 67 assert.throws( 68 () => process.cpuUsage(value), 69 { 70 code: 'ERR_INVALID_ARG_TYPE', 71 name: 'TypeError', 72 message: 'The "prevValue.system" property must be of type number.' + 73 common.invalidArgTypeHelper(value.system) 74 } 75 ); 76}); 77 78// Check invalid values. 79[ 80 { user: -1, system: 2 }, 81 { user: Number.POSITIVE_INFINITY, system: 4 }, 82].forEach((value) => { 83 assert.throws( 84 () => process.cpuUsage(value), 85 { 86 code: 'ERR_INVALID_ARG_VALUE', 87 name: 'RangeError', 88 message: "The property 'prevValue.user' is invalid. " + 89 `Received ${value.user}`, 90 } 91 ); 92}); 93 94[ 95 { user: 3, system: -2 }, 96 { user: 5, system: Number.NEGATIVE_INFINITY }, 97].forEach((value) => { 98 assert.throws( 99 () => process.cpuUsage(value), 100 { 101 code: 'ERR_INVALID_ARG_VALUE', 102 name: 'RangeError', 103 message: "The property 'prevValue.system' is invalid. " + 104 `Received ${value.system}`, 105 } 106 ); 107}); 108 109// Ensure that the return value is the expected shape. 110function validateResult(result) { 111 assert.notStrictEqual(result, null); 112 113 assert(Number.isFinite(result.user)); 114 assert(Number.isFinite(result.system)); 115 116 assert(result.user >= 0); 117 assert(result.system >= 0); 118} 119