taler-rust

GNU Taler code in Rust. Largely core banking integrations.
Log | Files | Refs | Submodules | README | LICENSE

commit 95dd8e8fda8020e68023df935207272eefbf1c26
parent 2116901c50a4d7b35e1948c9720051c26f03baf1
Author: Antoine A <>
Date:   Thu, 19 Mar 2026 11:22:16 +0100

common: improve test utils

Diffstat:
Mcommon/taler-api/tests/api.rs | 14+++++++-------
Mcommon/taler-api/tests/common/mod.rs | 10++++------
Mcommon/taler-api/tests/security.rs | 4++--
Mcommon/taler-test-utils/Cargo.toml | 1+
Mcommon/taler-test-utils/src/db.rs | 51+++++++++++++++++++--------------------------------
Mcommon/taler-test-utils/src/server.rs | 31++++++++++---------------------
Mtaler-cyclos/src/db.rs | 68+++++++++++++++++++++++++++++++++-----------------------------------
Mtaler-cyclos/tests/api.rs | 2+-
Mtaler-magnet-bank/src/db.rs | 72+++++++++++++++++++++++++++++++++++++-----------------------------------
Mtaler-magnet-bank/tests/api.rs | 2+-
10 files changed, 115 insertions(+), 140 deletions(-)

diff --git a/common/taler-api/tests/api.rs b/common/taler-api/tests/api.rs @@ -33,7 +33,7 @@ mod common; #[tokio::test] async fn errors() { - let (server, _) = setup().await; + let server = setup().await; server .get("/unknown") .await @@ -46,7 +46,7 @@ async fn errors() { #[tokio::test] async fn config() { - let (server, _) = setup().await; + let server = setup().await; server .get("/taler-wire-gateway/config") .await @@ -59,13 +59,13 @@ async fn config() { #[tokio::test] async fn transfer() { - let (server, _) = setup().await; + let server = setup().await; transfer_routine(&server, TransferState::success, &payto("payto://test")).await; } #[tokio::test] async fn outgoing_history() { - let (server, _) = setup().await; + let server = setup().await; routine_pagination::<OutgoingHistory, _>( &server, "/taler-wire-gateway/history/outgoing", @@ -94,19 +94,19 @@ async fn outgoing_history() { #[tokio::test] async fn admin_add_incoming() { - let (server, _) = setup().await; + let server = setup().await; admin_add_incoming_routine(&server, &payto("payto://test"), true).await; } #[tokio::test] async fn revenue() { - let (server, _) = setup().await; + let server = setup().await; revenue_routine(&server, &payto("payto://test"), true).await; } #[tokio::test] async fn account_check() { - let (server, _) = setup().await; + let server = setup().await; server .get("/taler-wire-gateway/account/check") .query("account", "payto://test") diff --git a/common/taler-api/tests/common/mod.rs b/common/taler-api/tests/common/mod.rs @@ -179,7 +179,7 @@ impl Revenue for TestApi { } } -pub async fn test_api(pool: PgPool, currency: Currency) -> Router { +pub fn test_api(pool: PgPool, currency: Currency) -> Router { let outgoing_channel = Sender::new(0); let incoming_channel = Sender::new(0); let wg = TestApi { @@ -199,9 +199,7 @@ pub async fn test_api(pool: PgPool, currency: Currency) -> Router { .revenue(state, AuthMethod::None) } -pub async fn setup() -> (Router, PgPool) { - let pool = db_test_setup_manual("db".as_ref(), "taler-api").await; - let api = test_api(pool.clone(), "EUR".parse().unwrap()).await; - - (api.finalize(), pool) +pub async fn setup() -> Router { + let (_, pool) = db_test_setup_manual("db".as_ref(), "taler-api").await; + test_api(pool.clone(), "EUR".parse().unwrap()).finalize() } diff --git a/common/taler-api/tests/security.rs b/common/taler-api/tests/security.rs @@ -1,6 +1,6 @@ /* This file is part of TALER - Copyright (C) 2025 Taler Systems SA + Copyright (C) 2025, 2026 Taler Systems SA TALER is free software; you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software @@ -33,7 +33,7 @@ mod common; #[tokio::test] async fn body_parsing() { - let (server, _) = setup().await; + let server = setup().await; let eur: Currency = "EUR".parse().unwrap(); let normal_body = TransferRequest { request_uid: Base32::rand(), diff --git a/common/taler-test-utils/Cargo.toml b/common/taler-test-utils/Cargo.toml @@ -10,6 +10,7 @@ license-file.workspace = true [dependencies] tower = "0.5" flate2 = { version = "1.0", features = ["zlib-rs"], default-features = false } +uuid = { version = "1", features = ["v4"] } axum.workspace = true tokio.workspace = true serde_json.workspace = true diff --git a/common/taler-test-utils/src/db.rs b/common/taler-test-utils/src/db.rs @@ -14,28 +14,21 @@ TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/> */ -use std::{ - path::Path, - str::FromStr as _, - sync::{ - OnceLock, - atomic::{AtomicUsize, Ordering}, - }, -}; +use std::{path::Path, str::FromStr as _}; use sqlx::{ - PgPool, - postgres::{PgConnectOptions, PgPoolOptions}, + Connection, PgConnection, PgPool, Postgres, pool::PoolConnection, postgres::PgConnectOptions, }; use taler_api::config::DbCfg; use taler_common::{ config::{Config, parser::ConfigSource}, db::{dbinit, pool}, }; +use tracing::info; use crate::setup_tracing; -pub async fn db_test_setup(src: ConfigSource) -> PgPool { +pub async fn db_test_setup(src: ConfigSource) -> (PoolConnection<Postgres>, PgPool) { let cfg = Config::from_file(src, None::<&str>).unwrap(); let name = format!("{}db-postgres", src.component_name); let sect = cfg.section(&name); @@ -43,7 +36,10 @@ pub async fn db_test_setup(src: ConfigSource) -> PgPool { db_test_setup_manual(db_cfg.sql_dir.as_ref(), src.component_name).await } -pub async fn db_test_setup_manual(sql_dir: &Path, component_name: &str) -> PgPool { +pub async fn db_test_setup_manual( + sql_dir: &Path, + component_name: &str, +) -> (PoolConnection<Postgres>, PgPool) { setup_tracing(); let cfg = test_db().await; let pool = pool(cfg, &component_name.replace("-", "_")).await.unwrap(); @@ -52,35 +48,26 @@ pub async fn db_test_setup_manual(sql_dir: &Path, component_name: &str) -> PgPoo dbinit(&mut conn, sql_dir, component_name, true) .await .unwrap(); - pool + (conn, pool) } -static MASTER_POOL: OnceLock<PgPool> = OnceLock::new(); - -const DB: &str = "postgres:///taler_rust_check"; -static NB_DB: AtomicUsize = AtomicUsize::new(0); - async fn test_db() -> PgConnectOptions { - let master = MASTER_POOL.get_or_init(|| { - PgPoolOptions::new() - .max_connections(20) - .test_before_acquire(false) - .after_release(|_conn, _| Box::pin(async move { Ok(false) })) - .connect_lazy(DB) - .expect("pg pool") - }); - let idx = NB_DB.fetch_add(1, Ordering::Relaxed); + let mut conn = PgConnection::connect("postgres:///taler_rust_check") + .await + .unwrap(); + let id = uuid::Uuid::new_v4(); // Cleanup test db - let name = format!("taler_rust_test_{idx}"); - let mut conn = master.acquire().await.unwrap(); + let name = format!("taler_rust_test_{}", id.to_string().replace('-', "_")); sqlx::raw_sql(&format!("DROP DATABASE IF EXISTS {name}")) - .execute(&mut *conn) + .execute(&mut conn) .await .unwrap(); sqlx::raw_sql(&format!("CREATE DATABASE {name}")) - .execute(&mut *conn) + .execute(&mut conn) .await .unwrap(); drop(conn); - PgConnectOptions::from_str(&format!("postgresql:/{name}")).unwrap() + let db_url = format!("postgresql:/{name}"); + info!("Running on db {db_url}"); + PgConnectOptions::from_str(&db_url).unwrap() } diff --git a/common/taler-test-utils/src/server.rs b/common/taler-test-utils/src/server.rs @@ -89,7 +89,7 @@ impl TestRequest { pub fn deflate(mut self) -> Self { let body = self.body.unwrap(); - let mut encoder = ZlibEncoder::new(Vec::new(), Compression::fast()); + let mut encoder = ZlibEncoder::new(Vec::with_capacity(body.len() / 4), Compression::fast()); encoder.write_all(&body).unwrap(); let compressed = encoder.finish().unwrap(); self.body = Some(compressed); @@ -123,21 +123,13 @@ impl TestRequest { headers, } = self; let uri = Uri::try_from(uri.as_str()).unwrap(); - let mut builder = axum::http::request::Builder::new() + let mut req = axum::http::request::Builder::new() .method(&method) - .uri(&uri); - for (k, v) in headers { - if let Some(k) = k { - builder = builder.header(k, v); - } else { - builder = builder.header("", v); - } - } - - let resp = router - .oneshot(builder.body(Body::from(body.unwrap_or_default())).unwrap()) - .await + .uri(&uri) + .body(body.map(Body::from).unwrap_or_else(Body::empty)) .unwrap(); + *req.headers_mut() = headers; + let resp = router.oneshot(req).await.unwrap(); let (parts, body) = resp.into_parts(); let bytes = body.collect().await.unwrap(); TestResponse { @@ -191,13 +183,10 @@ impl TestResponse { } = self; match serde_json::from_slice(bytes) { Ok(body) => body, - Err(err) => match serde_json::from_slice::<serde_json::Value>(bytes) { - Ok(raw) => panic!("{method} {uri} {status} invalid JSON schema: {err}\n{raw}"), - Err(err) => panic!( - "{method} {uri} {status} invalid JSON body: {err}\n{}", - String::from_utf8_lossy(bytes) - ), - }, + Err(err) => panic!( + "{method} {uri} {status} invalid JSON body: {err}\n{}", + String::from_utf8_lossy(bytes) + ), } } diff --git a/taler-cyclos/src/db.rs b/taler-cyclos/src/db.rs @@ -840,7 +840,7 @@ mod test { use compact_str::CompactString; use jiff::{Span, Timestamp}; use serde_json::json; - use sqlx::{PgConnection, PgPool, Row as _, postgres::PgRow}; + use sqlx::{PgConnection, PgPool, Postgres, Row as _, pool::PoolConnection, postgres::PgRow}; use taler_api::{ db::TypeHelper, notification::dummy_listen, @@ -868,10 +868,8 @@ mod test { pub static CURRENCY: LazyLock<Currency> = LazyLock::new(|| "TEST".parse().unwrap()); pub const ROOT: CompactString = CompactString::const_new("localhost"); - async fn setup() -> (PgConnection, PgPool) { - let pool = taler_test_utils::db::db_test_setup(CONFIG_SOURCE).await; - let conn = pool.acquire().await.unwrap().leak(); - (conn, pool) + async fn setup() -> (PoolConnection<Postgres>, PgPool) { + taler_test_utils::db::db_test_setup(CONFIG_SOURCE).await } #[tokio::test] @@ -884,15 +882,15 @@ mod test { }); assert_eq!( - db::kv_get::<serde_json::Value>(&mut db, "value") + db::kv_get::<serde_json::Value>(&mut *db, "value") .await .unwrap(), None ); - db::kv_set(&mut db, "value", &value).await.unwrap(); - db::kv_set(&mut db, "value", &value).await.unwrap(); + db::kv_set(&mut *db, "value", &value).await.unwrap(); + db::kv_set(&mut *db, "value", &value).await.unwrap(); assert_eq!( - db::kv_get::<serde_json::Value>(&mut db, "value") + db::kv_get::<serde_json::Value>(&mut *db, "value") .await .unwrap(), Some(value) @@ -1231,13 +1229,13 @@ mod test { // Empty db assert_eq!( - db::transfer_by_id(&mut db, 0, &CURRENCY, &ROOT) + db::transfer_by_id(&mut *db, 0, &CURRENCY, &ROOT) .await .unwrap(), None ); assert_eq!( - db::transfer_page(&mut db, &None, &CURRENCY, &ROOT, &Page::default()) + db::transfer_page(&mut *db, &None, &CURRENCY, &ROOT, &Page::default()) .await .unwrap(), Vec::new() @@ -1255,7 +1253,7 @@ mod test { let later = now + Span::new().hours(2); // Insert assert_eq!( - db::make_transfer(&mut db, &req, &now) + db::make_transfer(&mut *db, &req, &now) .await .expect("transfer"), TransferResult::Success { @@ -1265,7 +1263,7 @@ mod test { ); // Idempotent assert_eq!( - db::make_transfer(&mut db, &req, &later) + db::make_transfer(&mut *db, &req, &later) .await .expect("transfer"), TransferResult::Success { @@ -1276,7 +1274,7 @@ mod test { // Request UID reuse assert_eq!( db::make_transfer( - &mut db, + &mut *db, &Transfer { wtid: ShortHashCode::rand(), ..req.clone() @@ -1290,7 +1288,7 @@ mod test { // wtid reuse assert_eq!( db::make_transfer( - &mut db, + &mut *db, &Transfer { request_uid: HashCode::rand(), ..req.clone() @@ -1304,7 +1302,7 @@ mod test { // Many assert_eq!( db::make_transfer( - &mut db, + &mut *db, &Transfer { request_uid: HashCode::rand(), wtid: ShortHashCode::rand(), @@ -1322,25 +1320,25 @@ mod test { // Get assert!( - db::transfer_by_id(&mut db, 1, &CURRENCY, &ROOT) + db::transfer_by_id(&mut *db, 1, &CURRENCY, &ROOT) .await .unwrap() .is_some() ); assert!( - db::transfer_by_id(&mut db, 2, &CURRENCY, &ROOT) + db::transfer_by_id(&mut *db, 2, &CURRENCY, &ROOT) .await .unwrap() .is_some() ); assert!( - db::transfer_by_id(&mut db, 3, &CURRENCY, &ROOT) + db::transfer_by_id(&mut *db, 3, &CURRENCY, &ROOT) .await .unwrap() .is_none() ); assert_eq!( - db::transfer_page(&mut db, &None, &CURRENCY, &ROOT, &Page::default()) + db::transfer_page(&mut *db, &None, &CURRENCY, &ROOT, &Page::default()) .await .unwrap() .len(), @@ -1451,10 +1449,10 @@ mod test { } // Unknown transfer - db::initiated_submit_permanent_failure(&mut db, 1, "msg") + db::initiated_submit_permanent_failure(&mut *db, 1, "msg") .await .unwrap(); - db::initiated_submit_success(&mut db, 1, &Timestamp::now(), 12) + db::initiated_submit_success(&mut *db, 1, &Timestamp::now(), 12) .await .unwrap(); assert_eq!( @@ -1464,7 +1462,7 @@ mod test { // Failure db::make_transfer( - &mut db, + &mut *db, &Transfer { request_uid: HashCode::rand(), amount: decimal("1"), @@ -1478,7 +1476,7 @@ mod test { .await .expect("transfer"); check_status(&mut db, 1, TransferState::pending, None).await; - db::initiated_submit_permanent_failure(&mut db, 1, "error status") + db::initiated_submit_permanent_failure(&mut *db, 1, "error status") .await .unwrap(); check_status( @@ -1491,7 +1489,7 @@ mod test { // Success db::make_transfer( - &mut db, + &mut *db, &Transfer { request_uid: HashCode::rand(), amount: decimal("1"), @@ -1505,7 +1503,7 @@ mod test { .await .expect("transfer"); check_status(&mut db, 2, TransferState::pending, None).await; - db::initiated_submit_success(&mut db, 2, &Timestamp::now(), 3) + db::initiated_submit_success(&mut *db, 2, &Timestamp::now(), 3) .await .unwrap(); check_status(&mut db, 2, TransferState::pending, None).await; @@ -1551,7 +1549,7 @@ mod test { let start = Timestamp::now(); // Empty db - let pendings = db::pending_batch(&mut db, &start) + let pendings = db::pending_batch(&mut *db, &start) .await .expect("pending_batch"); assert_eq!(pendings.len(), 0); @@ -1559,7 +1557,7 @@ mod test { // Some transfers for i in 0..3 { db::make_transfer( - &mut db, + &mut *db, &Transfer { request_uid: HashCode::rand(), amount: decimal(format!("{}", i + 1)), @@ -1573,7 +1571,7 @@ mod test { .await .expect("transfer"); } - let pendings = db::pending_batch(&mut db, &start) + let pendings = db::pending_batch(&mut *db, &start) .await .expect("pending_batch"); assert_eq!(pendings.len(), 3); @@ -1581,7 +1579,7 @@ mod test { // Max 100 txs in batch for i in 0..100 { db::make_transfer( - &mut db, + &mut *db, &Transfer { request_uid: HashCode::rand(), amount: decimal(format!("{}", i + 1)), @@ -1595,29 +1593,29 @@ mod test { .await .expect("transfer"); } - let pendings = db::pending_batch(&mut db, &start) + let pendings = db::pending_batch(&mut *db, &start) .await .expect("pending_batch"); assert_eq!(pendings.len(), 100); // Skip uploaded for i in 0..=10 { - db::initiated_submit_success(&mut db, i, &Timestamp::now(), i) + db::initiated_submit_success(&mut *db, i, &Timestamp::now(), i) .await .expect("status success"); } - let pendings = db::pending_batch(&mut db, &start) + let pendings = db::pending_batch(&mut *db, &start) .await .expect("pending_batch"); assert_eq!(pendings.len(), 93); // Skip failed for i in 0..=10 { - db::initiated_submit_permanent_failure(&mut db, 10 + i, "failure") + db::initiated_submit_permanent_failure(&mut *db, 10 + i, "failure") .await .expect("status failure"); } - let pendings = db::pending_batch(&mut db, &start) + let pendings = db::pending_batch(&mut *db, &start) .await .expect("pending_batch"); assert_eq!(pendings.len(), 83); diff --git a/taler-cyclos/tests/api.rs b/taler-cyclos/tests/api.rs @@ -41,7 +41,7 @@ use taler_test_utils::{ }; async fn setup() -> (Router, PgPool) { - let pool = db_test_setup(CONFIG_SOURCE).await; + let (_, pool) = db_test_setup(CONFIG_SOURCE).await; let api = Arc::new( CyclosApi::start( pool.clone(), diff --git a/taler-magnet-bank/src/db.rs b/taler-magnet-bank/src/db.rs @@ -807,7 +807,7 @@ pub async fn kv_set<'a, T: Serialize>( mod test { use jiff::{Span, Timestamp, Zoned}; use serde_json::json; - use sqlx::{PgConnection, PgPool, postgres::PgRow}; + use sqlx::{PgConnection, PgPool, Postgres, pool::PoolConnection, postgres::PgRow}; use taler_api::{ db::TypeHelper, notification::dummy_listen, @@ -836,10 +836,8 @@ mod test { use super::TxInAdmin; - async fn setup() -> (PgConnection, PgPool) { - let pool = taler_test_utils::db::db_test_setup(CONFIG_SOURCE).await; - let conn = pool.acquire().await.unwrap().leak(); - (conn, pool) + async fn setup() -> (PoolConnection<Postgres>, PgPool) { + taler_test_utils::db::db_test_setup(CONFIG_SOURCE).await } #[tokio::test] @@ -852,13 +850,17 @@ mod test { }); assert_eq!( - kv_get::<serde_json::Value>(&mut db, "value").await.unwrap(), + kv_get::<serde_json::Value>(&mut *db, "value") + .await + .unwrap(), None ); - kv_set(&mut db, "value", &value).await.unwrap(); - kv_set(&mut db, "value", &value).await.unwrap(); + kv_set(&mut *db, "value", &value).await.unwrap(); + kv_set(&mut *db, "value", &value).await.unwrap(); assert_eq!( - kv_get::<serde_json::Value>(&mut db, "value").await.unwrap(), + kv_get::<serde_json::Value>(&mut *db, "value") + .await + .unwrap(), Some(value) ); } @@ -1227,13 +1229,13 @@ mod test { }; let payto = magnet_payto("payto://iban/HU30162000031000163100000000?receiver-name=name"); assert_eq!( - make_transfer(&mut db, &req, &now).await.unwrap(), + make_transfer(&mut *db, &req, &now).await.unwrap(), TransferResult::Success { id: 1, initiated_at: now } ); - db::initiated_submit_success(&mut db, 1, &Timestamp::now(), 34) + db::initiated_submit_success(&mut *db, 1, &Timestamp::now(), 34) .await .expect("status success"); assert_eq!( @@ -1300,9 +1302,9 @@ mod test { let (mut db, _) = setup().await; // Empty db - assert_eq!(db::transfer_by_id(&mut db, 0).await.unwrap(), None); + assert_eq!(db::transfer_by_id(&mut *db, 0).await.unwrap(), None); assert_eq!( - db::transfer_page(&mut db, &None, &Page::default()) + db::transfer_page(&mut *db, &None, &Page::default()) .await .unwrap(), Vec::new() @@ -1319,7 +1321,7 @@ mod test { let later = now + Span::new().hours(2); // Insert assert_eq!( - make_transfer(&mut db, &req, &now).await.expect("transfer"), + make_transfer(&mut *db, &req, &now).await.expect("transfer"), TransferResult::Success { id: 1, initiated_at: now @@ -1327,7 +1329,7 @@ mod test { ); // Idempotent assert_eq!( - make_transfer(&mut db, &req, &later) + make_transfer(&mut *db, &req, &later) .await .expect("transfer"), TransferResult::Success { @@ -1338,7 +1340,7 @@ mod test { // Request UID reuse assert_eq!( make_transfer( - &mut db, + &mut *db, &db::Transfer { wtid: ShortHashCode::rand(), ..req.clone() @@ -1352,7 +1354,7 @@ mod test { // wtid reuse assert_eq!( make_transfer( - &mut db, + &mut *db, &db::Transfer { request_uid: HashCode::rand(), ..req.clone() @@ -1366,7 +1368,7 @@ mod test { // Many assert_eq!( make_transfer( - &mut db, + &mut *db, &db::Transfer { request_uid: HashCode::rand(), wtid: ShortHashCode::rand(), @@ -1383,11 +1385,11 @@ mod test { ); // Get - assert!(db::transfer_by_id(&mut db, 1).await.unwrap().is_some()); - assert!(db::transfer_by_id(&mut db, 2).await.unwrap().is_some()); - assert!(db::transfer_by_id(&mut db, 3).await.unwrap().is_none()); + assert!(db::transfer_by_id(&mut *db, 1).await.unwrap().is_some()); + assert!(db::transfer_by_id(&mut *db, 2).await.unwrap().is_some()); + assert!(db::transfer_by_id(&mut *db, 3).await.unwrap().is_none()); assert_eq!( - db::transfer_page(&mut db, &None, &Page::default()) + db::transfer_page(&mut *db, &None, &Page::default()) .await .unwrap() .len(), @@ -1405,7 +1407,7 @@ mod test { let date = Zoned::now().date(); // Empty db - assert!(db::pending_batch(&mut db, &now).await.unwrap().is_empty()); + assert!(db::pending_batch(&mut *db, &now).await.unwrap().is_empty()); // Insert assert_eq!( @@ -1535,7 +1537,7 @@ mod test { // Batch assert_eq!( - db::pending_batch(&mut db, &now).await.unwrap(), + db::pending_batch(&mut *db, &now).await.unwrap(), &[ Initiated { id: 1, @@ -1558,10 +1560,10 @@ mod test { let (mut db, _) = setup().await; // Unknown transfer - db::initiated_submit_permanent_failure(&mut db, 1, &Timestamp::now(), "msg") + db::initiated_submit_permanent_failure(&mut *db, 1, &Timestamp::now(), "msg") .await .unwrap(); - db::initiated_submit_success(&mut db, 1, &Timestamp::now(), 12) + db::initiated_submit_success(&mut *db, 1, &Timestamp::now(), 12) .await .unwrap(); } @@ -1574,7 +1576,7 @@ mod test { magnet_payto("payto://iban/HU30162000031000163100000000?receiver-name=name"); // Empty db - let pendings = db::pending_batch(&mut db, &start) + let pendings = db::pending_batch(&mut *db, &start) .await .expect("pending_batch"); assert_eq!(pendings.len(), 0); @@ -1582,7 +1584,7 @@ mod test { // Some transfers for i in 0..3 { make_transfer( - &mut db, + &mut *db, &db::Transfer { request_uid: HashCode::rand(), amount: decimal(format!("{}", i + 1)), @@ -1595,7 +1597,7 @@ mod test { .await .expect("transfer"); } - let pendings = db::pending_batch(&mut db, &start) + let pendings = db::pending_batch(&mut *db, &start) .await .expect("pending_batch"); assert_eq!(pendings.len(), 3); @@ -1603,7 +1605,7 @@ mod test { // Max 100 txs in batch for i in 0..100 { make_transfer( - &mut db, + &mut *db, &db::Transfer { request_uid: HashCode::rand(), amount: decimal(format!("{}", i + 1)), @@ -1616,29 +1618,29 @@ mod test { .await .expect("transfer"); } - let pendings = db::pending_batch(&mut db, &start) + let pendings = db::pending_batch(&mut *db, &start) .await .expect("pending_batch"); assert_eq!(pendings.len(), 100); // Skip uploaded for i in 0..=10 { - db::initiated_submit_success(&mut db, i, &Timestamp::now(), i) + db::initiated_submit_success(&mut *db, i, &Timestamp::now(), i) .await .expect("status success"); } - let pendings = db::pending_batch(&mut db, &start) + let pendings = db::pending_batch(&mut *db, &start) .await .expect("pending_batch"); assert_eq!(pendings.len(), 93); // Skip failed for i in 0..=10 { - db::initiated_submit_permanent_failure(&mut db, 10 + i, &Timestamp::now(), "failure") + db::initiated_submit_permanent_failure(&mut *db, 10 + i, &Timestamp::now(), "failure") .await .expect("status failure"); } - let pendings = db::pending_batch(&mut db, &start) + let pendings = db::pending_batch(&mut *db, &start) .await .expect("pending_batch"); assert_eq!(pendings.len(), 83); diff --git a/taler-magnet-bank/tests/api.rs b/taler-magnet-bank/tests/api.rs @@ -39,7 +39,7 @@ use taler_test_utils::{ }; async fn setup() -> (Router, PgPool) { - let pool = db_test_setup(CONFIG_SOURCE).await; + let (_, pool) = db_test_setup(CONFIG_SOURCE).await; let api = Arc::new( MagnetApi::start( pool.clone(),