From c4d289956275677b24459237d13ed8c23a606079 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Mon, 23 Mar 2020 17:47:35 +0530 Subject: [PATCH] implement time travelling --- src/headless/taler-wallet-cli.ts | 9 +++++++++ src/util/time.ts | 8 +++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/headless/taler-wallet-cli.ts b/src/headless/taler-wallet-cli.ts index c4d8664d9..9a21d2a1d 100644 --- a/src/headless/taler-wallet-cli.ts +++ b/src/headless/taler-wallet-cli.ts @@ -31,6 +31,7 @@ import { Bank } from "./bank"; import { classifyTalerUri, TalerUriType } from "../util/taleruri"; import util = require("util"); import { Configuration } from "../util/talerconfig"; +import { setDangerousTimetravel } from "../util/time"; // Backwards compatibility with nodejs<0.11, where TextEncoder and TextDecoder // are not globals yet. @@ -119,6 +120,14 @@ const walletCli = clk .maybeOption("walletDbFile", ["--wallet-db"], clk.STRING, { help: "location of the wallet database file" }) + .maybeOption("timetravel", ["--timetravel"], clk.INT, { + help: "modify system time by given offset in microseconds", + onPresentHandler: (x) => { + // Convert microseconds to milliseconds and do timetravel + logger.info(`timetravelling ${x} microseconds`); + setDangerousTimetravel(x / 1000); + }, + }) .maybeOption("inhibit", ["--inhibit"], clk.STRING, { help: "Inhibit running certain operations, useful for debugging and testing.", diff --git a/src/util/time.ts b/src/util/time.ts index 88297f9a9..2740c361f 100644 --- a/src/util/time.ts +++ b/src/util/time.ts @@ -34,9 +34,15 @@ export interface Duration { readonly d_ms: number | "forever"; } +let timeshift: number = 0; + +export function setDangerousTimetravel(dt: number) { + timeshift = dt; +} + export function getTimestampNow(): Timestamp { return { - t_ms: new Date().getTime(), + t_ms: new Date().getTime() + timeshift, }; }