libeufin

Integration and sandbox testing for FinTech APIs and data formats
Log | Files | Refs | Submodules | README | LICENSE

commit 3903dd7360afe1cc96d7675e3b183fd80796cb1e
parent 214d846a40647b5fba18abf43680d1aad7881594
Author: Antoine A <>
Date:   Thu, 22 Oct 2026 11:28:48 +0200

bank: reuse db notification listener when swapping cfg during tests and
set max connections for test db pool

Diffstat:
MCargo.lock | 60++++++++++++++++++++++++++++++------------------------------
Mlibeufin-bank/src/api.rs | 29++++++++++++++++++++++-------
2 files changed, 52 insertions(+), 37 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock @@ -1365,7 +1365,7 @@ dependencies = [ [[package]] name = "http-client" version = "1.5.0" -source = "git+git://git.taler.net/taler-rust.git/#bd5726298887d7242c47a01cbcfa4f171ac1b7a5" +source = "git+git://git.taler.net/taler-rust.git/#a0099119dc8c6cb95324f2b3b0283bd1ffc8fea5" dependencies = [ "futures-util", "http", @@ -1502,9 +1502,9 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa68d21081c4a05d5a901a1c62add574c77048b6a1c67be3b50ce0b60d4ca513" +checksum = "fe090a42a0d3140fed8c63263ed1fecc02422cb2f4bfe55cd8de2de1b8e105dd" dependencies = [ "displaydoc", "potential_utf", @@ -1516,9 +1516,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56e28588da92eee5c3201a6eff33fabdd49b62269c8938d4ff050ce4d900deb" +checksum = "25d29b57c17c6528d0dc4c2141cfa2d08200465acb537a3909c8b9b8a4a984c0" dependencies = [ "displaydoc", "litemap", @@ -1529,9 +1529,9 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f9cf5f235641ed274641dd81c3f28d870e276763d0797aeeab72317b1c646f" +checksum = "404a3b8c486f205c87fe7f23ab6894d84a4ad76d6e4671ae1981ba7def87c599" dependencies = [ "icu_collections", "icu_normalizer_data", @@ -1543,15 +1543,15 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1563da1ed3e0b3bf3d74c9b85917ac9c56464d2f57242270c09c9e752f8021a0" +checksum = "20f0088bfb7441f7a37fa0c9e20cb1e9cba1cac6b9ce8cd2a6dc44294f8e8cbc" [[package]] name = "icu_properties" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e7ca276ad3145661a65914e6daf131ca5120cd3dcee8f8f3214b8875184a148" +checksum = "2ea83d991c56158f7cf898bf86436c1dfe7c07ee82fe88951f2695c9f37a379f" dependencies = [ "displaydoc", "icu_collections", @@ -1564,15 +1564,15 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e590f038c1464a96894fd6d10127e90a8be4509f56ff7ecef851b15cee0b7caa" +checksum = "b98f29af82d02b163fe50161388350e743bb3107cc8e8c2f7314cb505faddfcf" [[package]] name = "icu_provider" -version = "2.3.1" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d27bbb9d3abbefac45d55f647c9de1d44aafcd1186eb91879afef17c396c3e73" +checksum = "413099315636c588ee8f011190b329b971a09a8fae9d157e01dcae8379468514" dependencies = [ "displaydoc", "icu_locale_core", @@ -3398,7 +3398,7 @@ dependencies = [ [[package]] name = "taler-api" version = "1.5.0" -source = "git+git://git.taler.net/taler-rust.git/#bd5726298887d7242c47a01cbcfa4f171ac1b7a5" +source = "git+git://git.taler.net/taler-rust.git/#a0099119dc8c6cb95324f2b3b0283bd1ffc8fea5" dependencies = [ "aws-lc-rs", "axum", @@ -3428,12 +3428,12 @@ dependencies = [ [[package]] name = "taler-build" version = "1.5.0" -source = "git+git://git.taler.net/taler-rust.git/#bd5726298887d7242c47a01cbcfa4f171ac1b7a5" +source = "git+git://git.taler.net/taler-rust.git/#a0099119dc8c6cb95324f2b3b0283bd1ffc8fea5" [[package]] name = "taler-common" version = "1.5.0" -source = "git+git://git.taler.net/taler-rust.git/#bd5726298887d7242c47a01cbcfa4f171ac1b7a5" +source = "git+git://git.taler.net/taler-rust.git/#a0099119dc8c6cb95324f2b3b0283bd1ffc8fea5" dependencies = [ "anyhow", "aws-lc-rs", @@ -3465,7 +3465,7 @@ dependencies = [ [[package]] name = "taler-macros" version = "1.5.0" -source = "git+git://git.taler.net/taler-rust.git/#bd5726298887d7242c47a01cbcfa4f171ac1b7a5" +source = "git+git://git.taler.net/taler-rust.git/#a0099119dc8c6cb95324f2b3b0283bd1ffc8fea5" dependencies = [ "proc-macro2", "quote", @@ -3475,7 +3475,7 @@ dependencies = [ [[package]] name = "taler-test-utils" version = "1.5.0" -source = "git+git://git.taler.net/taler-rust.git/#bd5726298887d7242c47a01cbcfa4f171ac1b7a5" +source = "git+git://git.taler.net/taler-rust.git/#a0099119dc8c6cb95324f2b3b0283bd1ffc8fea5" dependencies = [ "aws-lc-rs", "axum", @@ -3604,9 +3604,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1e27c91459209c2986af3dcf603a5a74a4368754ce37414f59acc971167f643" +checksum = "abc840c238154d58f9e86b2792261edfde565a17696e1cda1a449de27979801a" dependencies = [ "displaydoc", "zerovec", @@ -3620,9 +3620,9 @@ checksum = "fd3ca314f692efd6c868f8408f53fe444634a845f96c028b97d35f6a1f79f0ee" [[package]] name = "tokio" -version = "1.54.0" +version = "1.54.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c168a474b95bfecfe908a65d4bdffc523144b649a74c09c286afb35d53e0bc" +checksum = "b52fd3255258d26fac7264ab5a76b53c13367136dc011d3d6ad4f8ed070396a3" dependencies = [ "bytes", "libc", @@ -4387,9 +4387,9 @@ dependencies = [ [[package]] name = "yoke" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" +checksum = "417ef3fcf6c300b7dbd25c85531a746931c02ad536f3cf4786ed1e88223340b3" dependencies = [ "stable_deref_trait", "yoke-derive", @@ -4468,9 +4468,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0464e17806c1d976d5cba29399c7f08e516e279e2ba493f63123b5fca67dd8" +checksum = "f58a2799cfe9a1670c7ea8edbd52ef8edb93cb37a7f83bf31ba9e35d9dae6a40" dependencies = [ "yoke", "zerofrom", @@ -4479,9 +4479,9 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.6" +version = "0.11.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da" +checksum = "c3743ddbf47738d929cd1ae2e199d40d0162979dfe31aef8ae646d2bf00bf97a" dependencies = [ "proc-macro2", "quote", diff --git a/libeufin-bank/src/api.rs b/libeufin-bank/src/api.rs @@ -327,12 +327,12 @@ pub mod test { use compact_str::{CompactString, CompactStringExt}; use jiff::Timestamp; use rand::{random_range, seq::IndexedRandom}; - use sqlx::{AssertSqlSafe, PgPool, postgres::PgConnectOptions}; + use sqlx::{AssertSqlSafe, PgPool, pool::PoolOptions, postgres::PgConnectOptions}; use taler_api::{api::TalerRouter, db::BindHelper}; use taler_common::{ api::{EddsaPublicKey, HashCode, ShortHashCode}, config::Config, - db::{dbinit, pool}, + db::{dbinit, pool_with_options}, error_code::ErrorCode, types::{ amount::{Amount, Decimal, decimal}, @@ -349,7 +349,7 @@ pub mod test { use crate::{ TanChannel, api::{ - BankState, + BankState, Metrics, account::{ AccountData, Balance, CreditDebitInfo, create_admin_account, rand_iban_payto, }, @@ -650,7 +650,13 @@ pub mod test { let cfg = Config::load(CONFIG_SOURCE, Some(format!("conf/{conf}"))).unwrap(); let cfg = BankCfg::parse(&cfg).unwrap(); let dir = cfg.db_cfg.sql_dir.as_ref(); - let db = pool(options, "libeufin_bank").await.unwrap(); + let db = pool_with_options( + options, + "libeufin_bank", + PoolOptions::new().max_connections(3), + ) + .await + .unwrap(); let mut conn = db.acquire().await.unwrap(); dbinit(&mut conn, dir, "libeufin-bank", true).await.unwrap(); dbinit(&mut conn, dir, "libeufin-nexus", true) @@ -786,9 +792,18 @@ pub mod test { pub async fn swap_cfg(mut self, conf: &str) -> Self { let cfg = Config::load(CONFIG_SOURCE, Some(format!("conf/{conf}"))).unwrap(); - let state = Arc::new( - BankState::start(self.state.db.clone(), BankCfg::parse(&cfg).unwrap()).await, - ); + let metrics = Metrics::default(); + let state = Arc::new(BankState { + db: self.state.db.clone(), + cfg: BankCfg::parse(&cfg).unwrap(), + tx_channel: self.state.tx_channel.clone(), + taler_out_channel: self.state.taler_out_channel.clone(), + taler_in_channel: self.state.taler_in_channel.clone(), + revenue_channel: self.state.revenue_channel.clone(), + withdrawal_channel: self.state.withdrawal_channel.clone(), + registry: metrics.registry(), + metrics, + }); self.client.server = bank_api(state.clone()); self.state = state; self