From 96df231901db546358353767252e63f4f4e71380 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Thu, 14 Aug 2025 22:26:22 +0200 Subject: [PATCH] fix: randomInt() usage and its boundaries MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- src/charging-station/AutomaticTransactionGenerator.ts | 4 ++-- src/charging-station/ChargingStation.ts | 2 +- .../ocpp/1.6/OCPP16IncomingRequestService.ts | 11 ++++++----- tests/utils/AsyncLock.test.ts | 2 +- tests/utils/Utils.test.ts | 2 +- 5 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/charging-station/AutomaticTransactionGenerator.ts b/src/charging-station/AutomaticTransactionGenerator.ts index 61be7d76..ebe543ae 100644 --- a/src/charging-station/AutomaticTransactionGenerator.ts +++ b/src/charging-station/AutomaticTransactionGenerator.ts @@ -300,7 +300,7 @@ export class AutomaticTransactionGenerator { .minDelayBetweenTwoTransactions, // eslint-disable-next-line @typescript-eslint/no-non-null-assertion this.chargingStation.getAutomaticTransactionGeneratorConfiguration()! - .maxDelayBetweenTwoTransactions + .maxDelayBetweenTwoTransactions + 1 ) ) logger.info(`${this.logPrefix(connectorId)} waiting for ${formatDurationMilliSeconds(wait)}`) @@ -322,7 +322,7 @@ export class AutomaticTransactionGenerator { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion this.chargingStation.getAutomaticTransactionGeneratorConfiguration()!.minDuration, // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - this.chargingStation.getAutomaticTransactionGeneratorConfiguration()!.maxDuration + this.chargingStation.getAutomaticTransactionGeneratorConfiguration()!.maxDuration + 1 ) ) logger.info( diff --git a/src/charging-station/ChargingStation.ts b/src/charging-station/ChargingStation.ts index 7b6281dd..5b93b0bb 100644 --- a/src/charging-station/ChargingStation.ts +++ b/src/charging-station/ChargingStation.ts @@ -1625,7 +1625,7 @@ export class ChargingStation extends EventEmitter { } const templateConnectorId = connectorId > 0 && stationTemplate.randomConnectors === true - ? randomInt(1, templateMaxAvailableConnectors) + ? randomInt(1, templateMaxAvailableConnectors + 1) : connectorId const connectorStatus = stationTemplate.Connectors[templateConnectorId] checkStationInfoConnectorStatus( diff --git a/src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts b/src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts index 7c0afb28..9fbf6a69 100644 --- a/src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts +++ b/src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts @@ -1669,7 +1669,7 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService { chargingStation.stationInfo?.firmwareUpgrade?.failureStatus === OCPP16FirmwareStatus.DownloadFailed ) { - await sleep(secondsToMilliseconds(randomInt(minDelay, maxDelay))) + await sleep(secondsToMilliseconds(randomInt(minDelay, maxDelay + 1))) await chargingStation.ocppRequestService.requestHandler< OCPP16FirmwareStatusNotificationRequest, OCPP16FirmwareStatusNotificationResponse @@ -1680,7 +1680,7 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService { chargingStation.stationInfo.firmwareUpgrade.failureStatus return } - await sleep(secondsToMilliseconds(randomInt(minDelay, maxDelay))) + await sleep(secondsToMilliseconds(randomInt(minDelay, maxDelay + 1))) await chargingStation.ocppRequestService.requestHandler< OCPP16FirmwareStatusNotificationRequest, OCPP16FirmwareStatusNotificationResponse @@ -1736,7 +1736,8 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService { transactionsStarted = false } } while (transactionsStarted) - !wasTransactionsStarted && (await sleep(secondsToMilliseconds(randomInt(minDelay, maxDelay)))) + !wasTransactionsStarted && + (await sleep(secondsToMilliseconds(randomInt(minDelay, maxDelay + 1)))) if (!checkChargingStationState(chargingStation, chargingStation.logPrefix())) { return } @@ -1752,7 +1753,7 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService { chargingStation.stationInfo?.firmwareUpgrade?.failureStatus === OCPP16FirmwareStatus.InstallationFailed ) { - await sleep(secondsToMilliseconds(randomInt(minDelay, maxDelay))) + await sleep(secondsToMilliseconds(randomInt(minDelay, maxDelay + 1))) await chargingStation.ocppRequestService.requestHandler< OCPP16FirmwareStatusNotificationRequest, OCPP16FirmwareStatusNotificationResponse @@ -1764,7 +1765,7 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService { return } if (chargingStation.stationInfo?.firmwareUpgrade?.reset === true) { - await sleep(secondsToMilliseconds(randomInt(minDelay, maxDelay))) + await sleep(secondsToMilliseconds(randomInt(minDelay, maxDelay + 1))) await chargingStation.reset(OCPP16StopTransactionReason.REBOOT) } } diff --git a/tests/utils/AsyncLock.test.ts b/tests/utils/AsyncLock.test.ts index 3af1c5cb..dcdd8b0a 100644 --- a/tests/utils/AsyncLock.test.ts +++ b/tests/utils/AsyncLock.test.ts @@ -28,7 +28,7 @@ await describe('AsyncLock test suite', async () => { let count = 0 const asyncFn = async () => { await new Promise(resolve => { - setTimeout(resolve, randomInt(1, 100)) + setTimeout(resolve, randomInt(1, 101)) }) executed.push(++count) } diff --git a/tests/utils/Utils.test.ts b/tests/utils/Utils.test.ts index ec467912..30a387be 100644 --- a/tests/utils/Utils.test.ts +++ b/tests/utils/Utils.test.ts @@ -102,7 +102,7 @@ await describe('Utils test suite', async () => { expect(convertToInt(undefined)).toBe(0) expect(convertToInt(null)).toBe(0) expect(convertToInt(0)).toBe(0) - const randomInteger = randomInt(Constants.MAX_RANDOM_INTEGER) + const randomInteger = randomInt(Constants.MAX_RANDOM_INTEGER + 1) expect(convertToInt(randomInteger)).toEqual(randomInteger) expect(convertToInt('-1')).toBe(-1) expect(convertToInt('1')).toBe(1) -- 2.43.0