From 05535fdc226f39666ed0a692871f54dea904af7b Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Mon, 17 Jun 2024 13:05:16 +0200 Subject: wallet-core,harness: new test, provide reason for exchange entry update conflicts --- .../test-exchange-master-pub-change.ts | 114 +++++++++++++++++++++ .../src/integrationtests/testrunner.ts | 2 + 2 files changed, 116 insertions(+) create mode 100644 packages/taler-harness/src/integrationtests/test-exchange-master-pub-change.ts (limited to 'packages/taler-harness/src/integrationtests') diff --git a/packages/taler-harness/src/integrationtests/test-exchange-master-pub-change.ts b/packages/taler-harness/src/integrationtests/test-exchange-master-pub-change.ts new file mode 100644 index 000000000..a66d94b57 --- /dev/null +++ b/packages/taler-harness/src/integrationtests/test-exchange-master-pub-change.ts @@ -0,0 +1,114 @@ +/* + This file is part of GNU Taler + (C) 2020 Taler Systems S.A. + + GNU Taler is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + GNU Taler; see the file COPYING. If not, see + */ + +/** + * Imports. + */ +import { + ExchangeUpdateStatus, + TalerErrorCode, + j2s, +} from "@gnu-taler/taler-util"; +import { WalletApiOperation } from "@gnu-taler/taler-wallet-core"; +import { defaultCoinConfig } from "../harness/denomStructures.js"; +import { + ExchangeService, + GlobalTestState, + setupDb, +} from "../harness/harness.js"; +import { + createSimpleTestkudosEnvironmentV3, + withdrawViaBankV3, +} from "../harness/helpers.js"; + +/** + * Test the wallet's behavior when the exchange switches to a completely + * new master public keyy. + */ +export async function runExchangeMasterPubChangeTest( + t: GlobalTestState, +): Promise { + // Set up test environment + + const { walletClient, exchange, bankClient, exchangeBankAccount } = + await createSimpleTestkudosEnvironmentV3(t); + + const wres = await withdrawViaBankV3(t, { + walletClient, + amount: "TESTKUDOS:10", + bankClient, + exchange, + }); + + await wres.withdrawalFinishedCond; + + t.logStep("withdrawal-done"); + + const exchangesListOld = await walletClient.call( + WalletApiOperation.ListExchanges, + {}, + ); + + console.log(j2s(exchangesListOld)); + + await exchange.stop(); + + // Instead of reconfiguring the old exchange, we just create a new exchange here + // that runs under the same base URL as the old exchange. + + const db2 = await setupDb(t, { + nameSuffix: "e2", + }); + const exchange2 = ExchangeService.create(t, { + name: "testexchange-2", + currency: "TESTKUDOS", + httpPort: 8081, + database: db2.connStr, + }); + + await exchange2.addBankAccount("1", exchangeBankAccount); + exchange2.addCoinConfigList(defaultCoinConfig.map((x) => x("TESTKUDOS"))); + await exchange2.start(); + + t.logStep("exchange-restarted"); + + const err = await t.assertThrowsTalerErrorAsync(async () => { + await walletClient.call(WalletApiOperation.UpdateExchangeEntry, { + exchangeBaseUrl: exchange.baseUrl, + force: true, + }); + }); + + console.log("updateExchangeEntry err:", j2s(err)); + + const exchangesList = await walletClient.call( + WalletApiOperation.ListExchanges, + {}, + ); + + console.log(j2s(exchangesList)); + + t.assertDeepEqual( + exchangesList.exchanges[0].exchangeUpdateStatus, + ExchangeUpdateStatus.UnavailableUpdate, + ); + t.assertDeepEqual( + exchangesList.exchanges[0].unavailableReason?.code, + TalerErrorCode.WALLET_EXCHANGE_ENTRY_UPDATE_CONFLICT, + ); +} + +runExchangeMasterPubChangeTest.suites = ["wallet", "exchange"]; diff --git a/packages/taler-harness/src/integrationtests/testrunner.ts b/packages/taler-harness/src/integrationtests/testrunner.ts index 4588310b1..b329036eb 100644 --- a/packages/taler-harness/src/integrationtests/testrunner.ts +++ b/packages/taler-harness/src/integrationtests/testrunner.ts @@ -42,6 +42,7 @@ import { runDepositTest } from "./test-deposit.js"; import { runExchangeDepositTest } from "./test-exchange-deposit.js"; import { runExchangeManagementFaultTest } from "./test-exchange-management-fault.js"; import { runExchangeManagementTest } from "./test-exchange-management.js"; +import { runExchangeMasterPubChangeTest } from "./test-exchange-master-pub-change.js"; import { runExchangePurseTest } from "./test-exchange-purse.js"; import { runExchangeTimetravelTest } from "./test-exchange-timetravel.js"; import { runFeeRegressionTest } from "./test-fee-regression.js"; @@ -234,6 +235,7 @@ const allTests: TestMainFunction[] = [ runWithdrawalHandoverTest, runWithdrawalAmountTest, runWithdrawalFlexTest, + runExchangeMasterPubChangeTest, ]; export interface TestRunSpec { -- cgit v1.2.3