Skip to content
This repository has been archived by the owner on Jun 12, 2024. It is now read-only.

Commit

Permalink
Add sanity checks to random number generation code
Browse files Browse the repository at this point in the history
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
  • Loading branch information
Jérôme Benoit committed Sep 19, 2021
1 parent 265e426 commit b322b8b
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 37 deletions.
12 changes: 6 additions & 6 deletions src/charging-station/AutomaticTransactionGenerator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,8 @@ export default class AutomaticTransactionGenerator {

private async startOnConnector(connectorId: number): Promise<void> {
logger.info(this.logPrefix(connectorId) + ' started on connector');
let transactionSkip = 0;
let totalTransactionSkip = 0;
let skippedTransactions = 0;
let skippedTransactionsTotal = 0;
while (this.started) {
if ((new Date()) > this.stopDate) {
await this.stop();
Expand Down Expand Up @@ -89,7 +89,7 @@ export default class AutomaticTransactionGenerator {
await Utils.sleep(wait);
const start = Utils.secureRandom();
if (start < this.chargingStation.stationInfo.AutomaticTransactionGenerator.probabilityOfStart) {
transactionSkip = 0;
skippedTransactions = 0;
// Start transaction
const startResponse = await this.startTransaction(connectorId);
if (startResponse?.idTagInfo?.status !== AuthorizationStatus.ACCEPTED) {
Expand All @@ -108,9 +108,9 @@ export default class AutomaticTransactionGenerator {
}
}
} else {
transactionSkip++;
totalTransactionSkip++;
logger.info(this.logPrefix(connectorId) + ' skipped transaction ' + transactionSkip.toString() + '/' + totalTransactionSkip.toString());
skippedTransactions++;
skippedTransactionsTotal++;
logger.info(this.logPrefix(connectorId) + ' skipped transaction ' + skippedTransactions.toString() + '/' + skippedTransactionsTotal.toString());
}
this.lastRunDate = new Date();
}
Expand Down
4 changes: 4 additions & 0 deletions src/charging-station/Bootstrap.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,13 +72,17 @@ export default class Bootstrap {
} catch (error) {
console.error(chalk.red('Bootstrap start error '), error);
}
} else {
console.error(chalk.red('Cannot start an already started charging stations simulator'));
}
}

public async stop(): Promise<void> {
if (isMainThread && this.started) {
await Bootstrap.workerImplementation.stop();
await Bootstrap.storage.close();
} else {
console.error(chalk.red('Trying to stop the charging stations simulator while not started'));
}
this.started = false;
}
Expand Down
36 changes: 5 additions & 31 deletions src/utils/Utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,31 +33,15 @@ export default class Utils {
minutesStr = '0' + minutes.toString();
}
if (seconds < 10) {
secondsStr = ('0' + seconds.toString()).substring(0, 6);
secondsStr = '0' + seconds.toString();
}
return hoursStr + ':' + minutesStr + ':' + secondsStr;
return hoursStr + ':' + minutesStr + ':' + secondsStr.substring(0, 6);
}

public static formatDurationSeconds(duration: number): string {
return Utils.formatDurationMilliSeconds(duration * 1000);
}

public static removeExtraEmptyLines(tab: string[]): void {
// Start from the end
for (let i = tab.length - 1; i > 0; i--) {
// Two consecutive empty lines?
if (tab[i].length === 0 && tab[i - 1].length === 0) {
// Remove the last one
tab.splice(i, 1);
}
// Check last line
if (i === 1 && tab[i - 1].length === 0) {
// Remove the first one
tab.splice(i - 1, 1);
}
}
}

public static convertToDate(value: unknown): Date {
// Check
if (!value) {
Expand Down Expand Up @@ -116,6 +100,9 @@ export default class Utils {
}

public static getRandomFloat(max: number, min = 0, negative = false): number {
if (max < min || min < 0 || max < 0) {
throw new RangeError('Invalid interval');
}
const randomPositiveFloat = crypto.randomBytes(4).readUInt32LE() / 0xffffffff;
const sign = (negative && randomPositiveFloat < 0.5) ? 1 : -1;
return sign * (randomPositiveFloat * (max - min) + min);
Expand Down Expand Up @@ -166,19 +153,6 @@ export default class Utils {
return false;
}

public static isEmptyJSon(document: unknown): boolean {
// Empty?
if (!document) {
return true;
}
// Check type
if (typeof document !== 'object') {
return true;
}
// Check
return Object.keys(document).length === 0;
}

public static isString(value: unknown): boolean {
return typeof value === 'string';
}
Expand Down

0 comments on commit b322b8b

Please sign in to comment.