introducing a health check for demo.taler.net.

This commit is contained in:
ms 2021-07-08 09:33:41 +02:00
parent ebfc79756f
commit ba995882ba
No known key found for this signature in database
GPG Key ID: 8D526861953F4C0F
4 changed files with 114 additions and 5 deletions

View File

@ -118,6 +118,10 @@ export async function delayMs(ms: number): Promise<void> {
});
}
export interface WithAuthorization {
Authorization?: string,
} ;
interface WaitResult {
code: number | null;
signal: NodeJS.Signals | null;
@ -1258,16 +1262,18 @@ export namespace MerchantPrivateApi {
merchantService: MerchantServiceInterface,
instanceName: string,
req: PostOrderRequest,
withAuthorization: WithAuthorization = {},
): Promise<PostOrderResponse> {
const baseUrl = merchantService.makeInstanceBaseUrl(instanceName);
let url = new URL("private/orders", baseUrl);
const resp = await axios.post(url.href, req);
const resp = await axios.post(url.href, req, { headers: withAuthorization });
return codecForPostOrderResponse().decode(resp.data);
}
export async function queryPrivateOrderStatus(
merchantService: MerchantServiceInterface,
query: PrivateOrderStatusQuery,
withAuthorization: WithAuthorization = {},
): Promise<MerchantOrderPrivateStatusResponse> {
const reqUrl = new URL(
`private/orders/${query.orderId}`,
@ -1276,7 +1282,7 @@ export namespace MerchantPrivateApi {
if (query.sessionId) {
reqUrl.searchParams.set("session_id", query.sessionId);
}
const resp = await axios.get(reqUrl.href);
const resp = await axios.get(reqUrl.href, { headers: withAuthorization });
return codecForMerchantOrderPrivateStatusResponse().decode(resp.data);
}

View File

@ -49,6 +49,7 @@ import {
MerchantServiceInterface,
MerchantPrivateApi,
HarnessExchangeBankAccount,
WithAuthorization,
} from "./harness.js";
import { WalletApiOperation } from "@gnu-taler/taler-wallet-core";
@ -345,6 +346,7 @@ export async function makeTestPayment(
order: Partial<ContractTerms>;
instance?: string;
},
auth: WithAuthorization = {},
): Promise<void> {
// Set up order.
@ -353,11 +355,11 @@ export async function makeTestPayment(
const orderResp = await MerchantPrivateApi.createOrder(merchant, instance, {
order: args.order,
});
}, auth);
let orderStatus = await MerchantPrivateApi.queryPrivateOrderStatus(merchant, {
orderId: orderResp.order_id,
});
}, auth);
t.assertTrue(orderStatus.order_status === "unpaid");
@ -385,7 +387,7 @@ export async function makeTestPayment(
orderStatus = await MerchantPrivateApi.queryPrivateOrderStatus(merchant, {
orderId: orderResp.order_id,
instance,
});
}, auth);
t.assertTrue(orderStatus.order_status === "paid");
}

View File

@ -0,0 +1,99 @@
/*
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 <http://www.gnu.org/licenses/>
*/
/**
* Imports.
*/
import {
GlobalTestState,
BankApi,
WalletCli,
BankAccessApi
} from "./harness";
import {
createSimpleTestkudosEnvironment,
withdrawViaBank,
makeTestPayment,
} from "./helpers";
import { WalletApiOperation } from "@gnu-taler/taler-wallet-core";
/**
* Run test for basic, bank-integrated withdrawal and payment.
*/
export async function runPaymentDemoTest(t: GlobalTestState) {
// Withdraw digital cash into the wallet.
let bankInterface = {
baseUrl: "https://bank.demo.taler.net/",
port: 0 // unused.
};
let user = await BankApi.createRandomBankUser(bankInterface);
let wop = await BankAccessApi.createWithdrawalOperation(bankInterface, user, "KUDOS:20");
let wallet = new WalletCli(t);
await wallet.client.call(WalletApiOperation.GetWithdrawalDetailsForUri, {
talerWithdrawUri: wop.taler_withdraw_uri,
});
await wallet.runPending();
// Confirm it
await BankApi.confirmWithdrawalOperation(bankInterface, user, wop);
// Withdraw
await wallet.client.call(WalletApiOperation.AcceptBankIntegratedWithdrawal, {
exchangeBaseUrl: "https://exchange.demo.taler.net/",
talerWithdrawUri: wop.taler_withdraw_uri,
});
await wallet.runUntilDone();
let balanceBefore = await wallet.client.call(WalletApiOperation.GetBalances, {});
t.assertTrue(balanceBefore["balances"].length == 1);
const order = {
summary: "Buy me!",
amount: "KUDOS:5",
fulfillment_url: "taler://fulfillment-success/thx",
};
let merchant = {
makeInstanceBaseUrl: function(instanceName?: string) {
return "https://backend.demo.taler.net/instances/donations/";
},
port: 0,
name: "donations",
};
t.assertTrue("TALER_MERCHANT_TOKEN" in process.env);
await makeTestPayment(
t,
{
merchant, wallet, order
},
{
"Authorization": `Bearer ${process.env["TALER_MERCHANT_TOKEN"]}`,
});
await wallet.runUntilDone();
let balanceAfter = await wallet.client.call(WalletApiOperation.GetBalances, {});
t.assertTrue(balanceAfter["balances"].length == 1);
t.assertTrue(balanceBefore["balances"][0]["available"] > balanceAfter["balances"][0]["available"]);
}
runPaymentDemoTest.suites = ["buildbot"];

View File

@ -22,6 +22,7 @@ import {
TestRunResult,
} from "./harness";
import { runPaymentTest } from "./test-payment";
import { runPaymentDemoTest } from "./test-payment-on-demo";
import * as fs from "fs";
import * as path from "path";
import * as os from "os";
@ -115,6 +116,7 @@ const allTests: TestMainFunction[] = [
runPaymentIdempotencyTest,
runPaymentMultipleTest,
runPaymentTest,
runPaymentDemoTest,
runPaymentTransientTest,
runPayPaidTest,
runPaywallFlowTest,