]> Piment Noir Git Repositories - e-mobility-charging-stations-simulator.git/commitdiff
fix: randomInt() usage and its boundaries
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Thu, 14 Aug 2025 20:26:22 +0000 (22:26 +0200)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Thu, 14 Aug 2025 20:26:22 +0000 (22:26 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
src/charging-station/AutomaticTransactionGenerator.ts
src/charging-station/ChargingStation.ts
src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts
tests/utils/AsyncLock.test.ts
tests/utils/Utils.test.ts

index 61be7d7650688a6869420460f9e56e1302a9b204..ebe543aed48ab7e46c7e6b15fd36c4872da29637 100644 (file)
@@ -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(
index 7b6281dd94a1c8f3bcdaac64075f0886f5f5c2a5..5b93b0bb08b14371e2e63f47a9e751210ee0978a 100644 (file)
@@ -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(
index 7c0afb283aabf5f24336948b5bd3088220f024bb..9fbf6a69d78ad0d2cab99106292fbeac8e280a8e 100644 (file)
@@ -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)
     }
   }
index 3af1c5cb641a4e5fbf668df99244e581b33ef1c8..dcdd8b0a5767b9dbc1d82802b79e69517b981d88 100644 (file)
@@ -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)
     }
index ec46791279ba79568bc2c029292cdfa35638bc52..30a387befff14972cdb2b83ee8fb7242e8aeaf63 100644 (file)
@@ -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)