node/test/parallel/test-cppheap-stats.js
Antoine du Hamel 572cc6fa55
test: ensure assertions are reached on more tests
PR-URL: https://github.com/nodejs/node/pull/60498
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
2025-11-07 16:22:01 +00:00

126 lines
4.6 KiB
JavaScript

'use strict';
// Tests that v8.getCppHeapStatistics() returns an object with an expected shape.
require('../common');
const assert = require('assert');
const v8 = require('v8');
// Detailed heap statistics
const heapStatsDetailed = v8.getCppHeapStatistics('detailed');
assert.strictEqual(heapStatsDetailed.detail_level, 'detailed');
const expectedTopLevelKeys = [
'committed_size_bytes',
'resident_size_bytes',
'used_size_bytes',
'detail_level',
'space_statistics',
'type_names',
].sort();
// Check top level properties
const actualTopLevelKeys = Object.keys(heapStatsDetailed).sort();
assert.deepStrictEqual(actualTopLevelKeys, expectedTopLevelKeys);
// Check types of top level properties
assert.strictEqual(typeof heapStatsDetailed.committed_size_bytes, 'number');
assert.strictEqual(typeof heapStatsDetailed.resident_size_bytes, 'number');
assert.strictEqual(typeof heapStatsDetailed.used_size_bytes, 'number');
assert.strictEqual(typeof heapStatsDetailed.detail_level, 'string');
assert.strictEqual(Array.isArray(heapStatsDetailed.space_statistics), true);
assert.strictEqual(Array.isArray(heapStatsDetailed.type_names), true);
// Check space statistics array
const expectedSpaceKeys = [
'name',
'committed_size_bytes',
'resident_size_bytes',
'used_size_bytes',
'page_stats',
'free_list_stats',
].sort();
for (const space of heapStatsDetailed.space_statistics) {
const actualSpaceKeys = Object.keys(space).sort();
assert.deepStrictEqual(actualSpaceKeys, expectedSpaceKeys);
assert.strictEqual(typeof space.name, 'string');
assert.strictEqual(typeof space.committed_size_bytes, 'number');
assert.strictEqual(typeof space.resident_size_bytes, 'number');
assert.strictEqual(typeof space.used_size_bytes, 'number');
assert.strictEqual(Array.isArray(space.page_stats), true);
assert.strictEqual(typeof space.free_list_stats, 'object');
}
// Check page statistics array
const expectedPageKeys = [
'committed_size_bytes',
'resident_size_bytes',
'used_size_bytes',
'object_statistics',
].sort();
for (const space of heapStatsDetailed.space_statistics) {
for (const page of space.page_stats) {
const actualPageKeys = Object.keys(page).sort();
assert.deepStrictEqual(actualPageKeys, expectedPageKeys);
assert.strictEqual(typeof page.committed_size_bytes, 'number');
assert.strictEqual(typeof page.resident_size_bytes, 'number');
assert.strictEqual(typeof page.used_size_bytes, 'number');
assert.strictEqual(Array.isArray(page.object_statistics), true);
}
}
// Check free list statistics
const expectedFreeListKeys = ['bucket_size', 'free_count', 'free_size'].sort();
for (const space of heapStatsDetailed.space_statistics) {
const actualFreeListKeys = Object.keys(space.free_list_stats).sort();
assert.deepStrictEqual(actualFreeListKeys, expectedFreeListKeys);
assert.strictEqual(Array.isArray(space.free_list_stats.bucket_size), true);
assert.strictEqual(Array.isArray(space.free_list_stats.free_count), true);
assert.strictEqual(Array.isArray(space.free_list_stats.free_size), true);
}
// Check object statistics
const expectedObjectStatsKeys = ['allocated_bytes', 'object_count'].sort();
for (const space of heapStatsDetailed.space_statistics) {
for (const page of space.page_stats) {
for (const objectStats of page.object_statistics) {
const actualObjectStatsKeys = Object.keys(objectStats).sort();
assert.deepStrictEqual(actualObjectStatsKeys, expectedObjectStatsKeys);
assert.strictEqual(typeof objectStats.allocated_bytes, 'number');
assert.strictEqual(typeof objectStats.object_count, 'number');
}
}
}
// Check type names
for (const typeName of heapStatsDetailed.type_names) {
assert.strictEqual(typeof typeName, 'string');
}
// Brief heap statistics
const heapStatsBrief = v8.getCppHeapStatistics('brief');
const expectedBriefKeys = [
'committed_size_bytes',
'resident_size_bytes',
'used_size_bytes',
'detail_level',
'space_statistics',
'type_names',
].sort();
// Check top level properties
const actualBriefKeys = Object.keys(heapStatsBrief).sort();
assert.strictEqual(heapStatsBrief.detail_level, 'brief');
assert.deepStrictEqual(actualBriefKeys, expectedBriefKeys);
// Check types of top level properties
assert.strictEqual(typeof heapStatsBrief.committed_size_bytes, 'number');
assert.strictEqual(typeof heapStatsBrief.resident_size_bytes, 'number');
assert.strictEqual(typeof heapStatsBrief.used_size_bytes, 'number');
assert.strictEqual(typeof heapStatsBrief.detail_level, 'string');
assert.strictEqual(Array.isArray(heapStatsBrief.space_statistics), true);
assert.strictEqual(Array.isArray(heapStatsBrief.type_names), true);