aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-harness/src/harness/harness.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/taler-harness/src/harness/harness.ts')
-rw-r--r--packages/taler-harness/src/harness/harness.ts87
1 files changed, 56 insertions, 31 deletions
diff --git a/packages/taler-harness/src/harness/harness.ts b/packages/taler-harness/src/harness/harness.ts
index 8f1f3f452..926a0c93b 100644
--- a/packages/taler-harness/src/harness/harness.ts
+++ b/packages/taler-harness/src/harness/harness.ts
@@ -563,7 +563,7 @@ export async function pingProc(
return;
} catch (e: any) {
logger.warn(`service ${serviceName} not ready:`, e.toString());
- logger.info(`waiting ${nextDelay}ms`);
+ logger.info(`waiting ${nextDelay}ms on ${serviceName}`);
await delayMs(nextDelay);
nextDelay = backoffIncrement(nextDelay);
}
@@ -905,7 +905,7 @@ export class FakebankService
config.setString("bank", "max_debt", bc.maxDebt ?? `${bc.currency}:100`);
config.setString("bank", "ram_limit", `${1024}`);
const cfgFilename = testDir + "/bank.conf";
- config.write(cfgFilename);
+ config.write(cfgFilename, { excludeDefaults: true });
return new FakebankService(gc, bc, cfgFilename);
}
@@ -934,7 +934,7 @@ export class FakebankService
}
const config = Configuration.load(this.configFile);
config.setString("bank", "suggested_exchange", e.baseUrl);
- config.write(this.configFile);
+ config.write(this.configFile, { excludeDefaults: true });
}
get baseUrl(): string {
@@ -1037,7 +1037,9 @@ export class ExchangeService implements ExchangeServiceInterface {
name: exchangeName,
roundUnit: config.getString("taler", "currency_round_unit").required(),
};
- const privFile = config.getPath("exchange", "master_priv_file").required();
+ const privFile = config
+ .getPath("exchange-offline", "master_priv_file")
+ .required();
const eddsaPriv = fs.readFileSync(privFile);
const keyPair: EddsaKeyPair = {
eddsaPriv,
@@ -1135,7 +1137,7 @@ export class ExchangeService implements ExchangeServiceInterface {
changeConfig(f: (config: Configuration) => void) {
const config = Configuration.load(this.configFilename);
f(config);
- config.write(this.configFilename);
+ config.write(this.configFilename, { excludeDefaults: true });
}
static create(gc: GlobalTestState, e: ExchangeConfig) {
@@ -1184,10 +1186,16 @@ export class ExchangeService implements ExchangeServiceInterface {
fs.mkdirSync(path.dirname(masterPrivFile), { recursive: true });
+ if (fs.existsSync(masterPrivFile)) {
+ throw new Error(
+ "master priv file already exists, can't create new exchange config",
+ );
+ }
+
fs.writeFileSync(masterPrivFile, Buffer.from(exchangeMasterKey.eddsaPriv));
const cfgFilename = testDir + `/exchange-${e.name}.conf`;
- config.write(cfgFilename);
+ config.write(cfgFilename, { excludeDefaults: true });
return new ExchangeService(gc, e, cfgFilename, exchangeMasterKey);
}
@@ -1196,13 +1204,13 @@ export class ExchangeService implements ExchangeServiceInterface {
offeredCoins.forEach((cc) =>
setCoin(config, cc(this.exchangeConfig.currency)),
);
- config.write(this.configFilename);
+ config.write(this.configFilename, { excludeDefaults: true });
}
addCoinConfigList(ccs: CoinConfig[]) {
const config = Configuration.load(this.configFilename);
ccs.forEach((cc) => setCoin(config, cc));
- config.write(this.configFilename);
+ config.write(this.configFilename, { excludeDefaults: true });
}
enableAgeRestrictions(maskStr: string) {
@@ -1213,7 +1221,7 @@ export class ExchangeService implements ExchangeServiceInterface {
"age_groups",
maskStr,
);
- config.write(this.configFilename);
+ config.write(this.configFilename, { excludeDefaults: true });
}
get masterPub() {
@@ -1234,7 +1242,7 @@ export class ExchangeService implements ExchangeServiceInterface {
): Promise<void> {
const config = Configuration.load(this.configFilename);
await f(config);
- config.write(this.configFilename);
+ config.write(this.configFilename, { excludeDefaults: true });
}
async addBankAccount(
@@ -1274,7 +1282,7 @@ export class ExchangeService implements ExchangeServiceInterface {
"password",
exchangeBankAccount.accountPassword,
);
- config.write(this.configFilename);
+ config.write(this.configFilename, { excludeDefaults: true });
}
exchangeHttpProc: ProcessWrapper | undefined;
@@ -1535,19 +1543,25 @@ export class ExchangeService implements ExchangeServiceInterface {
);
}
- async start(opts: { skipSetup?: boolean } = {}): Promise<void> {
+ async dbinit() {
+ await sh(
+ this.globalState,
+ "exchange-dbinit",
+ `taler-exchange-dbinit -c "${this.configFilename}"`,
+ );
+ }
+
+ async start(
+ opts: { skipDbinit?: boolean; skipKeyup?: boolean } = {},
+ ): Promise<void> {
if (this.isRunning()) {
throw Error("exchange is already running");
}
- const skipSetup = opts.skipSetup ?? false;
+ const skipDbinit = opts.skipDbinit ?? false;
- if (!skipSetup) {
- await sh(
- this.globalState,
- "exchange-dbinit",
- `taler-exchange-dbinit -c "${this.configFilename}"`,
- );
+ if (!skipDbinit) {
+ await this.dbinit();
}
this.helperCryptoEddsaProc = this.globalState.spawnService(
@@ -1579,7 +1593,10 @@ export class ExchangeService implements ExchangeServiceInterface {
);
await this.pingUntilAvailable();
- if (!skipSetup) {
+
+ const skipKeyup = opts.skipKeyup ?? false;
+
+ if (!skipKeyup) {
await this.keyup();
} else {
logger.info("skipping keyup");
@@ -1921,16 +1938,23 @@ export class MerchantService implements MerchantServiceInterface {
}
}
- async start(opts: { skipSetup?: boolean } = {}): Promise<void> {
- const skipSetup = opts.skipSetup ?? false;
+ async dbinit() {
+ await runCommand(
+ this.globalState,
+ "merchant-dbinit",
+ "taler-merchant-dbinit",
+ ["-c", this.configFilename],
+ );
+ }
+
+ /**
+ * Start the merchant,
+ */
+ async start(opts: { skipDbinit?: boolean } = {}): Promise<void> {
+ const skipSetup = opts.skipDbinit ?? false;
if (!skipSetup) {
- await runCommand(
- this.globalState,
- "merchant-dbinit",
- "taler-merchant-dbinit",
- ["-c", this.configFilename],
- );
+ await this.dbinit();
}
this.proc = this.globalState.spawnService(
@@ -1964,7 +1988,7 @@ export class MerchantService implements MerchantServiceInterface {
"${TALER_DATA_HOME}/merchant/merchant.priv",
);
config.setString("merchantdb-postgres", "config", mc.database);
- config.write(cfgFilename);
+ config.write(cfgFilename, { excludeDefaults: true });
return new MerchantService(gc, mc, cfgFilename);
}
@@ -1982,7 +2006,7 @@ export class MerchantService implements MerchantServiceInterface {
this.merchantConfig.currency,
);
config.setString(`merchant-exchange-${e.name}`, "master_key", e.masterPub);
- config.write(this.configFilename);
+ config.write(this.configFilename, { excludeDefaults: true });
}
async addDefaultInstance(): Promise<void> {
@@ -2303,7 +2327,8 @@ export class WalletService {
try {
await tryUnixConnect(this.socketPath);
} catch (e) {
- logger.info(`connection attempt failed: ${e}`);
+ logger.info(`wallet connection attempt failed: ${e}`);
+ logger.info(`waiting on wallet for ${nextDelay}ms`);
await delayMs(nextDelay);
nextDelay = backoffIncrement(nextDelay);
continue;