| // Flags: --expose-internals |
| // Verifies that Buffer.allocUnsafe() indeed allocates uninitialized memory by checking |
| // the usage count of the relevant native allocator code path. |
| 'use strict'; |
| |
| const common = require('../common'); |
| if (!common.isDebug) { |
| common.skip('Only works in debug mode'); |
| } |
| const { internalBinding } = require('internal/test/binding'); |
| const { getGenericUsageCount } = internalBinding('debug'); |
| const assert = require('assert'); |
| |
| const initialUninitializedCount = getGenericUsageCount('NodeArrayBufferAllocator.Allocate.Uninitialized'); |
| const initialZeroFilledCount = getGenericUsageCount('NodeArrayBufferAllocator.Allocate.ZeroFilled'); |
| Buffer.allocUnsafe(Buffer.poolSize + 1); |
| // We can't reliably check the contents of the buffer here because the OS or memory allocator |
| // used might zero-fill memory for us, or they might happen to return reused memory that was |
| // previously used by a process that zero-filled it. So instead we just check the usage counts. |
| const newUninitializedCount = getGenericUsageCount('NodeArrayBufferAllocator.Allocate.Uninitialized'); |
| const newZeroFilledCount = getGenericUsageCount('NodeArrayBufferAllocator.Allocate.ZeroFilled'); |
| assert.notStrictEqual(newUninitializedCount, initialUninitializedCount); |
| assert.strictEqual(newZeroFilledCount, initialZeroFilledCount); |