fix pay-abort integration test

This commit is contained in:
Florian Dold 2021-01-13 01:19:23 +01:00
parent 096d21189c
commit 94e35ca70a
No known key found for this signature in database
GPG Key ID: D2E4F00F29D02A4B
2 changed files with 45 additions and 94 deletions

View File

@ -45,7 +45,7 @@ import {
ConfirmPayResultType, ConfirmPayResultType,
ContractTerms, ContractTerms,
} from "taler-wallet-core"; } from "taler-wallet-core";
import { FaultInjectedMerchantService } from "./faultInjection"; import { FaultInjectedExchangeService, FaultInjectedMerchantService } from "./faultInjection";
import { defaultCoinConfig } from "./denomStructures"; import { defaultCoinConfig } from "./denomStructures";
export interface SimpleTestEnvironment { export interface SimpleTestEnvironment {
@ -139,6 +139,7 @@ export interface FaultyMerchantTestEnvironment {
commonDb: DbInfo; commonDb: DbInfo;
bank: BankService; bank: BankService;
exchange: ExchangeService; exchange: ExchangeService;
faultyExchange: FaultInjectedExchangeService,
exchangeBankAccount: ExchangeBankAccount; exchangeBankAccount: ExchangeBankAccount;
merchant: MerchantService; merchant: MerchantService;
faultyMerchant: FaultInjectedMerchantService; faultyMerchant: FaultInjectedMerchantService;
@ -176,6 +177,7 @@ export async function createFaultInjectedMerchantTestkudosEnvironment(
}); });
const faultyMerchant = new FaultInjectedMerchantService(t, merchant, 9083); const faultyMerchant = new FaultInjectedMerchantService(t, merchant, 9083);
const faultyExchange = new FaultInjectedExchangeService(t, exchange, 9081);
const exchangeBankAccount = await bank.createExchangeAccount( const exchangeBankAccount = await bank.createExchangeAccount(
"MyExchange", "MyExchange",
@ -183,7 +185,7 @@ export async function createFaultInjectedMerchantTestkudosEnvironment(
); );
exchange.addBankAccount("1", exchangeBankAccount); exchange.addBankAccount("1", exchangeBankAccount);
bank.setSuggestedExchange(exchange, exchangeBankAccount.accountPaytoUri); bank.setSuggestedExchange(faultyExchange, exchangeBankAccount.accountPaytoUri);
await bank.start(); await bank.start();
@ -194,7 +196,7 @@ export async function createFaultInjectedMerchantTestkudosEnvironment(
await exchange.start(); await exchange.start();
await exchange.pingUntilAvailable(); await exchange.pingUntilAvailable();
merchant.addExchange(exchange); merchant.addExchange(faultyExchange);
await merchant.start(); await merchant.start();
await merchant.pingUntilAvailable(); await merchant.pingUntilAvailable();
@ -223,6 +225,7 @@ export async function createFaultInjectedMerchantTestkudosEnvironment(
bank, bank,
exchangeBankAccount, exchangeBankAccount,
faultyMerchant, faultyMerchant,
faultyExchange,
}; };
} }

View File

@ -22,89 +22,26 @@
/** /**
* Imports. * Imports.
*/ */
import { PreparePayResultType, TalerErrorCode, URL } from "taler-wallet-core";
import { FaultInjectionRequestContext, FaultInjectionResponseContext } from "./faultInjection";
import { GlobalTestState, MerchantPrivateApi, setupDb } from "./harness";
import { import {
GlobalTestState, createFaultInjectedMerchantTestkudosEnvironment,
MerchantService, withdrawViaBank,
ExchangeService, } from "./helpers";
setupDb,
BankService,
WalletCli,
MerchantPrivateApi,
} from "./harness";
import {
FaultInjectedExchangeService,
FaultInjectionRequestContext,
FaultInjectionResponseContext,
} from "./faultInjection";
import { PreparePayResultType, URL, TalerErrorCode } from "taler-wallet-core";
import { defaultCoinConfig } from "./denomStructures";
import { withdrawViaBank, makeTestPayment } from "./helpers";
/** /**
* Run test for basic, bank-integrated withdrawal. * Run test for basic, bank-integrated withdrawal.
*/ */
export async function runPayAbortTest(t: GlobalTestState) { export async function runPayAbortTest(t: GlobalTestState) {
const {
bank,
faultyExchange,
wallet,
faultyMerchant,
} = await createFaultInjectedMerchantTestkudosEnvironment(t);
// Set up test environment // Set up test environment
const db = await setupDb(t);
const bank = await BankService.create(t, {
allowRegistrations: true,
currency: "TESTKUDOS",
database: db.connStr,
httpPort: 8082,
});
const exchange = ExchangeService.create(t, {
name: "testexchange-1",
currency: "TESTKUDOS",
httpPort: 8081,
database: db.connStr,
});
const exchangeBankAccount = await bank.createExchangeAccount(
"MyExchange",
"x",
);
bank.setSuggestedExchange(exchange, exchangeBankAccount.accountPaytoUri);
await bank.start();
await bank.pingUntilAvailable();
await exchange.addBankAccount("1", exchangeBankAccount);
exchange.addOfferedCoins(defaultCoinConfig);
await exchange.start();
await exchange.pingUntilAvailable();
const faultyExchange = new FaultInjectedExchangeService(t, exchange, 8091);
const merchant = await MerchantService.create(t, {
name: "testmerchant-1",
currency: "TESTKUDOS",
httpPort: 8083,
database: db.connStr,
});
merchant.addExchange(faultyExchange);
await merchant.start();
await merchant.pingUntilAvailable();
await merchant.addInstance({
id: "default",
name: "Default Instance",
paytoUris: [`payto://x-taler-bank/merchant-default`],
});
console.log("setup done!");
const wallet = new WalletCli(t);
// Create withdrawal operation
await withdrawViaBank(t, { await withdrawViaBank(t, {
wallet, wallet,
exchange: faultyExchange, exchange: faultyExchange,
@ -112,23 +49,24 @@ export async function runPayAbortTest(t: GlobalTestState) {
bank, bank,
}); });
// faultyExchange.faultProxy.addFault({ const orderResp = await MerchantPrivateApi.createOrder(
// modifyRequest(ctx: FaultInjectionRequestContext) { faultyMerchant,
// console.log("proxy request to", ctx.requestUrl); "default",
// } {
// });
const orderResp = await MerchantPrivateApi.createOrder(merchant, "default", {
order: { order: {
summary: "Buy me!", summary: "Buy me!",
amount: "TESTKUDOS:15", amount: "TESTKUDOS:15",
fulfillment_url: "taler://fulfillment-success/thx", fulfillment_url: "taler://fulfillment-success/thx",
}, },
}); },
);
let orderStatus = await MerchantPrivateApi.queryPrivateOrderStatus(merchant, { let orderStatus = await MerchantPrivateApi.queryPrivateOrderStatus(
faultyMerchant,
{
orderId: orderResp.order_id, orderId: orderResp.order_id,
}); },
);
t.assertTrue(orderStatus.order_status === "unpaid"); t.assertTrue(orderStatus.order_status === "unpaid");
@ -168,6 +106,16 @@ export async function runPayAbortTest(t: GlobalTestState) {
}, },
}); });
faultyMerchant.faultProxy.addFault({
modifyResponse(ctx: FaultInjectionResponseContext) {
const url = new URL(ctx.request.requestUrl);
if (url.pathname.endsWith("/pay") && url.href != firstDepositUrl) {
ctx.responseBody = Buffer.from("{}");
ctx.statusCode = 400;
}
},
});
await t.assertThrowsOperationErrorAsync(async () => { await t.assertThrowsOperationErrorAsync(async () => {
await wallet.confirmPay({ await wallet.confirmPay({
proposalId: preparePayResult.proposalId, proposalId: preparePayResult.proposalId,
@ -181,7 +129,7 @@ export async function runPayAbortTest(t: GlobalTestState) {
t.assertDeepEqual(txr.transactions[1].pending, true); t.assertDeepEqual(txr.transactions[1].pending, true);
t.assertDeepEqual( t.assertDeepEqual(
txr.transactions[1].error?.code, txr.transactions[1].error?.code,
TalerErrorCode.WALLET_UNEXPECTED_REQUEST_ERROR, TalerErrorCode.WALLET_RECEIVED_MALFORMED_RESPONSE,
); );
await wallet.abortFailedPayWithRefund({ await wallet.abortFailedPayWithRefund({