GNU Taler Demo Upgrade Checklist¶
Domains¶
The checklist uses the demo.taler.net
domains. However,
the same sandcastle demo can also be hosted at other domains.
The same instructions should apply.
Post-upgrade checks¶
Run the headless wallet to check that services are actually working:
taler-wallet-cli api 'runIntegrationTestV2' '{"exchangeBaseUrl":"https://exchange.demo.taler.net", "corebankApiBaseUrl": "https://bank.demo.taler.net", "merchantBaseUrl": "https://backend.demo.taler.net", "merchantAuthToken":"secret-token:sandbox"}'
Wallets¶
We consider the following published wallets to be “production wallets”:
Browser: Firefox Add-On Store
Browser: Chrome Web Store
Android: Google Play / F-Droid / APK
iOS: Apple Store / Testflight
Basics¶
Visit https://demo.taler.net/ to see if the landing page is displayed correctly
landing language switcher
Visit the wallet installation page, install the wallet
see if the wallet presence indicator is updated correctly (in browsers).
Visit https://exchange.demo.taler.net/terms to check ToS works
libeufin¶
Visit https://bank.demo.taler.net/, register a new user
bank language switcher
bank logout
bank login
bank-integrated withdraw process, abort in bank
transaction history: delete pending withdraw
do bank-integrated withdraw process (5 KUDOS)
do wallet-initiated withdraw process (5 KUDOS)
check transaction history
change credentials (password)
(conversion-only) test cash-in
(conversion-only) test cash-out
(conversion-only) test cash-out limit enforced
(if configured) 2FA for withdrawals
(if configured) 2FA for cash-out
(MB-only) manually import transactions from bank account
(MB-only) manually export transactions to bank account
Android Cashier App¶
Configure cashier app with libeufin account
Withdraw cash using cashier app
Blog demo¶
blog page article list renders
payment for blog article
Verify that the balance in the wallet was updated correctly.
Go back to https://shop.demo.taler.net/ and click on the same article link. Verify that the article is shown and no repeated payment is requested.
Open the fulfillment page from the previous step in an anonymous browsing session (without the wallet installed) and verify that it requests a payment again.
Delete cookies on https://shop.demo.taler.net/ and click on the same article again. Verify that the wallet detects that the article has already purchased and successfully redirects to the article without spending more money.
payment for other blog article
refund of 2nd blog article (button at the end)
wallet transaction history rendering
delete refund history entry; check original purchase entry was also deleted
payment for other blog article
refund of 3rd blog article (button at the end)
wallet transaction history rendering
delete 3rd block purchase history entry; check refund entry was also deleted
Donation demo¶
Reset wallet
Withdraw age-restricted coins (< 14)
Try to make a donation on https://donations.demo.taler.net/, fail due to age-restriction
Withdraw age-restricted coins (>= 14)
Make a donation on https://donations.demo.taler.net/
Make another donation with the same parameters and verify that the payment is requested again, instead of showing the previous fulfillment page.
Merchant SPA¶
test SPA loads
check SPA language switcher
try to login with wrong password
try to login with correct password
create instance, check default is set to cover (STEFAN) fees
modify instance
add bank account
(if KYC is on) check KYC AUTH request notification is requested
edit bank account
(if KYC is on) check KYC AUTH request notification is requested
(if KYC is on) perform KYC AUTH wire transfer
(if KYC is on) check KYC AUTH request notification is cleared
remove bank account
check order creation fails without bank account
add bank account again
(if KYC is on) check KYC AUTH request notification remains off
add inventory category
add 2nd inventory category
edit inventory category
add product with 1 in stock and preview image and two categories
edit inventory product
add 2nd inventory product
delete 2nd inventory product
add “advanced” order with inventory product and a 2 minute wire delay
claim order, check available stock goes down in inventory
create 2nd order, check this fails due to missing inventory
pay for 1st order with wallet
check transaction history for preview image
trigger partial refund
accept refund with wallet
create template with fixed summary, default editable price
scan template QR code, edit price and pay
add TOTP device (using some TOTP app to share secret with)
edit TOTP device (using some TOTP app to share secret with)
edit template to add TOTP device, set price to fixed, summary to be entered
scan template QR code, edit summary and pay
check displayed TOTP code matches TOTP app
delete TOTP device
delete template device
do manual wire transfer in bank to establish reserve funding
check that partially refunded order is marked as awaiting wire transfer
check bank wired funds to merchant (if needed, wait)
add bank wire transfer manually to backend
change settings for merchant to not pay for (STEFAN) fees
create and pay for another order with 1 minute wire transfer delay
edit bank account details, adding revenue facade with credentials
wait and check if wire transfer is automatically imported
check that orders are marked as completed
Android Merchant PoS¶
Configure using instance with configured inventory
Check categories and products show (with images!)
Add product to order
Add product again to order (+)
Remove product from order (-)
Request payment
Abort payment, check order can still be edited
Request and make payment, check payment confirmed
Create another order, delete/abort it without paying
P2P payments¶
generating push payment (to self is OK)
accepting push payment (from self is OK)
generating pull payment (to self is OK)
accepting pull payment (from self is OK)
sending money back from wallet to bank account
wallet transaction history rendering
delete history entry
Wallet exchange management¶
Try to explicitly reload exchange keys (still needed?)
Have wallet show ToS of an exchange
Have wallet show PP of an exchange
Remove exchange with remaining balance
Check remaining balance is deposited into origin account
Auditor¶
Check auditor SPA is access controlled
Check /config endpoint (and implied POST /deposit-confirmation are public)
Check exchange /keys reports auditor’s existence
Check auditor imports exchange transaction data (non-zero progress points)
Check auditor SPA reports no failures from previous transactions
Check auditor SPA bank balance matches exchange bank balance
Exchange KYC Triggers¶
Each of these checks should be done with a fresh account, merchant instance or wallet (if they previously ran into a KYC check already). Specific amounts depend on the configured trigger thresholds.
withdraw: withdraw large amount, make sure it is forbidden or runs into KYC check (shown by wallet)
aggregation: pay large order, make sure it runs into aggregate KYC check (shown by merchant SPA)
deposit large amount into other account with wallet, make sure it runs into KYC AUTH + KYC check (shown by wallet)
balance: withdraw large amounts from multiple accounts, make sure it is forbidden or runs into KYC check (shown by wallet)
P2P receive large amount: make sure it runs into KYC check (shown by wallet)
P2P invoice large amount: make sure it runs into KYC check (shown by wallet)
Onboarding check (KYC AUTH, ToS-acceptance) triggered for new merchant accounts
Exchange KYC SPA¶
Consult the specific deployment’s KYC configuration to see which KYC processes are used.
check SPA language switcher
check INFO page(s) where KYC status is shown
check LINK page(s) with link to external KYC process (e.g. challenger)
(if possible) check challenger SPA language switcher
(if possible) check KYC SPA main page with multiple choices (AND/OR combinators)
perform LINKed external process, check data imported correctly
check FORM pages for each possible KYC form of the deployment
submit FORM pages with valid but also obviously invalid data (if applicable)
check main page updated to next stage correctly after each possible FORM
Exchange AML SPA¶
check SPA language switcher
load, enable account using taler-exchange-offline
log out
check log in fails from different browser with same password
check log in fails from original browser with incorrect password
check log in succeeds with correct password
enter data in each available AML form
check data of AML form shows properly in account history
submit AML form and trigger event (explicitly or by setting account property)
check event statistics are properly updated and shown on main page
submit AML form and change account thresholds for some operation with VERBOTEN
check new threshold is now enforced by the exchange (VERBOTEN)
submit AML form and change account threshold for some operation to trigger KYC check
check new threshold is now enforced by exchange and KYC check is triggered
submit AML form and change account threshold for some operation to trigger AML investigation (and clear investigation flag)
check new threshold marks account again for investigation after threshold is crossed
submit AML form with a short expiration (minutes) and a fallback of “investigate again”
check new rules are applied until expiration
check account is automatically listed again for investigation after expiration time is reached
view historic AML decisions in history, view submitted KYC data
Sanction lists¶
ensure account with KYC data exists in the system
manually write santion list with user that clearly does not match
import sanction list, check nothing is done
edit sanction list to match the existing account a bit
import sanction list, check account is flagged for investigation by AML staff but remains operational
clear the investigation flag
edit sanction list to match the existing account perfectly
import sanction list, check account is flagged for investigation by AML staff and also frozen (all limits 0, not exposed)
manually clear user and unfreeze account in AML SPA (setting “SANCTION-OVERRIDE: $DATE” property)
re-import sanction list with yet another user and cleared user
check manually cleared user is not re-frozen (due to “SANCTION-OVERRIDE” property with date in the future)
add user matching new entry in sanction list
check new user is auto-frozen and flagged for investigation
Shutdown¶
create two full wallets, fill one only via (a large) P2P transfer
revoke highest-value denomination
spend money in a wallet such that the balance falls below highest denomination value
revoke all remaining denominations
fail to spend any more money
if wallet was filled via p2p payments, wallet asks for target deposit account (exchange going out of business)
enter bank account (if possible)
wallet balance goes to zero
specified bank account receives remaining balance