diff options
-rw-r--r-- | packages/taler-integrationtests/src/harness.ts | 63 |
1 files changed, 36 insertions, 27 deletions
diff --git a/packages/taler-integrationtests/src/harness.ts b/packages/taler-integrationtests/src/harness.ts index 17a21232a..ec25ca25b 100644 --- a/packages/taler-integrationtests/src/harness.ts +++ b/packages/taler-integrationtests/src/harness.ts @@ -63,13 +63,17 @@ interface WaitResult { /** * Run a shell command, return stdout. */ -export async function sh(command: string): Promise<string> { +export async function sh( + t: GlobalTestState, + logName: string, + command: string, +): Promise<string> { console.log("runing command"); console.log(command); return new Promise((resolve, reject) => { const stdoutChunks: Buffer[] = []; const proc = spawn(command, { - stdio: ["inherit", "pipe", "inherit"], + stdio: ["inherit", "pipe", "pipe"], shell: true, }); proc.stdout.on("data", (x) => { @@ -80,6 +84,11 @@ export async function sh(command: string): Promise<string> { throw Error("unexpected data chunk type"); } }); + const stderrLogFileName = path.join(t.testDir, `${logName}-stderr.log`); + const stderrLog = fs.createWriteStream(stderrLogFileName, { + flags: "a", + }); + proc.stderr.pipe(stderrLog); proc.on("exit", (code) => { console.log("child process exited"); if (code != 0) { @@ -113,22 +122,6 @@ export class ProcessWrapper { } } -export function makeTempDir(): Promise<string> { - return new Promise((resolve, reject) => { - fs.mkdtemp( - path.join(os.tmpdir(), "taler-integrationtest-"), - (err, directory) => { - if (err) { - reject(err); - return; - } - resolve(directory); - console.log(directory); - }, - ); - }); -} - interface CoinConfig { name: string; value: string; @@ -620,13 +613,6 @@ export class ExchangeService implements ExchangeServiceInterface { fs.writeFileSync(masterPrivFile, Buffer.from(exchangeMasterKey.eddsaPriv)); - console.log("writing key to", masterPrivFile); - console.log("pub is", talerCrypto.encodeCrock(exchangeMasterKey.eddsaPub)); - console.log( - "priv is", - talerCrypto.encodeCrock(exchangeMasterKey.eddsaPriv), - ); - const cfgFilename = gc.testDir + `/exchange-${e.name}.conf`; config.write(cfgFilename); return new ExchangeService(gc, e, cfgFilename, exchangeMasterKey); @@ -873,14 +859,29 @@ function shouldLinger(): boolean { return process.env["TALER_TEST_KEEP"] == "1"; } +function updateCurrentSymlink(testDir: string): void { + const currLink = path.join(os.tmpdir(), "taler-integrationtest-current"); + try { + fs.unlinkSync(currLink); + } catch (e) { + // Ignore + } + try { + fs.symlinkSync(currLink, testDir); + } catch (e) { + // Ignore + } +} + export function runTest(testMain: (gc: GlobalTestState) => Promise<void>) { const main = async () => { let gc: GlobalTestState | undefined; let ret = 0; try { gc = new GlobalTestState({ - testDir: await makeTempDir(), + testDir: fs.mkdtempSync("taler-integrationtest-"), }); + updateCurrentSymlink(gc.testDir); await testMain(gc); } catch (e) { console.error("FATAL: test failed with exception", e); @@ -915,6 +916,8 @@ export class WalletCli { ): Promise<walletCoreApi.CoreApiResponse> { const wdb = this.globalTestState.testDir + "/walletdb.json"; const resp = await sh( + this.globalTestState, + "wallet", `taler-wallet-cli --no-throttle --wallet-db '${wdb}' api '${request}' ${shellWrap( JSON.stringify(payload), )}`, @@ -926,12 +929,18 @@ export class WalletCli { async runUntilDone(): Promise<void> { const wdb = this.globalTestState.testDir + "/walletdb.json"; await sh( + this.globalTestState, + "wallet", `taler-wallet-cli --no-throttle --wallet-db ${wdb} run-until-done`, ); } async runPending(): Promise<void> { const wdb = this.globalTestState.testDir + "/walletdb.json"; - await sh(`taler-wallet-cli --no-throttle --wallet-db ${wdb} run-pending`); + await sh( + this.globalTestState, + "wallet", + `taler-wallet-cli --no-throttle --wallet-db ${wdb} run-pending`, + ); } } |