commit fa128544b13e5eded540cd4d0b3c5200e367e0a3
parent f3e3171efc1edd5e1470f2562eb9d7b899a32ad6
Author: Antoine A <>
Date: Tue, 3 Nov 2026 11:45:33 +0100
tests: use at most 30 test databases concurrenlty
Diffstat:
2 files changed, 60 insertions(+), 51 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
@@ -120,9 +120,9 @@ checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53"
[[package]]
name = "aws-lc-rs"
-version = "1.18.2"
+version = "1.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "faac5829c2b74c28f830747e7818ccfb684261b5f48a1118b1e2a13d36dfab13"
+checksum = "048006790404103c488e6c5616b3e7e702a71292aadda08e8f7698a9e0d2eb53"
dependencies = [
"aws-lc-sys",
"untrusted 0.7.1",
@@ -131,9 +131,9 @@ dependencies = [
[[package]]
name = "aws-lc-sys"
-version = "0.46.0"
+version = "0.47.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1622d8446a2d4b2ce0c7eefc73dd43a99779028d5ee5c2dd8073a658ba8a2bc"
+checksum = "8bfbe32ac36b3c428696ce315464181bc4029d689fd58e3f2a4e58c252242f52"
dependencies = [
"cc",
"cmake",
@@ -286,9 +286,9 @@ dependencies = [
[[package]]
name = "cc"
-version = "1.10.0"
+version = "1.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "86e055fa6e3e40ad6187ba25b6855eeb635d5271f8e0f0e1e9a5826b8d75bea0"
+checksum = "375989decec1a0fa424442bed520fa12ede43a48475ce8c7417d2c69b32b5f6b"
dependencies = [
"find-msvc-tools",
"jobserver",
@@ -599,9 +599,9 @@ dependencies = [
[[package]]
name = "ctutils"
-version = "0.4.6"
+version = "0.4.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fe3e9d21d39e6f39ff46e03d5b621424f88ee23d8a1672c6bfc9ccc7f2da4f6a"
+checksum = "261af4dc7a06ea8a527a8717d8cbba3417530d6ea14e1edb3de6b67806be474f"
dependencies = [
"cmov",
]
@@ -1398,9 +1398,9 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
[[package]]
name = "jiff"
-version = "0.2.38"
+version = "0.2.39"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2b005715dcbeb0089a3c0dab99f2ff1cc3b2525323552703d648585d342a383"
+checksum = "3ac703058abac89e5c39b0b879dce2b6b14a4ba36600c7e7e3d0c60a6883ef3c"
dependencies = [
"defmt",
"jiff-core",
@@ -1415,9 +1415,9 @@ dependencies = [
[[package]]
name = "jiff-core"
-version = "0.1.1"
+version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e52fe76043ccecc9005d2305ebaadf7d7fc0cc89ca6baa10a94d6bc68c7128c"
+checksum = "aee43309eb53bafb8c36d35d6e444769c8f8e6206a9fbf7546f5db9d7d4a0e93"
dependencies = [
"defmt",
"log",
@@ -1425,9 +1425,9 @@ dependencies = [
[[package]]
name = "jiff-static"
-version = "0.2.38"
+version = "0.2.39"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2cc9817253cf7c7ee4684451bd327e88d6f3658014e54a29198625590650695c"
+checksum = "6dc32470c67eb7d0e9ccb74303fa925313dc04cecb1aa048beaa6f391e36a93d"
dependencies = [
"jiff-core",
"proc-macro2",
@@ -1511,9 +1511,9 @@ dependencies = [
[[package]]
name = "js-sys"
-version = "0.3.106"
+version = "0.3.107"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7883d941dae510fb2d978fc3fe018c71c9e2892fd38854de3e8b92c2e5ad9cc5"
+checksum = "8dc09d2154098bbf4ef54eab6b117a3c24cbbffe94046b16ee6d6d4510584d3a"
dependencies = [
"cfg-if",
"futures-util",
@@ -1591,9 +1591,9 @@ dependencies = [
[[package]]
name = "log"
-version = "0.4.34"
+version = "0.4.35"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6"
+checksum = "5d15f86d12da44cd8d4ec3c73984537eb7f4cadcb9776a575a0a8a05ca11005c"
[[package]]
name = "matchit"
@@ -1813,9 +1813,9 @@ dependencies = [
[[package]]
name = "prometheus-client"
-version = "0.25.1"
+version = "0.25.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1784dc11a05f5a8f57c4a62915686be140f24f70301290b997e317241fa9ffc2"
+checksum = "6d150ad7bf80e60f45769d18a0a8c01028ab8f56355f33ed7bfce3a31f82e696"
dependencies = [
"dtoa",
"itoa",
@@ -3118,9 +3118,9 @@ dependencies = [
[[package]]
name = "unicode-properties"
-version = "0.1.4"
+version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7df058c713841ad818f1dc5d3fd88063241cc61f49f5fbea4b951e8cf5a8d71d"
+checksum = "993ad287eb20e8ba755312801cfe1413e0f25d604075863acaddca10b04c1833"
[[package]]
name = "unicode-segmentation"
@@ -3130,9 +3130,9 @@ checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8"
[[package]]
name = "unicode-width"
-version = "0.2.2"
+version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254"
+checksum = "ca718471876992059f251e33aafc334346ada08042b7661dd1fe313a9bced557"
[[package]]
name = "untrusted"
@@ -3161,9 +3161,12 @@ dependencies = [
[[package]]
name = "utf8_iter"
-version = "1.0.4"
+version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
+checksum = "af3bd9d3e571c26fcce9d033b87ea5ab061b8d2ffe9b7a5675d810d68f03edf0"
+dependencies = [
+ "utf_types",
+]
[[package]]
name = "utf8parse"
@@ -3172,6 +3175,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
[[package]]
+name = "utf_types"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a3b425286980a367278453f3b6d28cdcb134b574e5a35824a6ff5eebad50bb6"
+
+[[package]]
name = "uuid"
version = "1.29.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3236,12 +3245,11 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
[[package]]
name = "wasm-bindgen"
-version = "0.2.129"
+version = "0.2.130"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9bb54f33acc68fd454578d9820b0bde1a1a3d17aa17bb7b6595806d02886d409"
+checksum = "a0181c14ddd6c7b8b0b0132a5f1ea2f32be0d893cd3ea97b6e3b28886b8a3d1c"
dependencies = [
"cfg-if",
- "once_cell",
"rustversion",
"wasm-bindgen-macro",
"wasm-bindgen-shared",
@@ -3249,9 +3257,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro"
-version = "0.2.129"
+version = "0.2.130"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2e29d0c35b16e224a7eeb5cd2d25e3e1968fbd65604117b44d3b789d00ee8535"
+checksum = "6e931a02a39abdbf66966fc35902b5ed58344750a70885bed4ebb3d8eaf28ed9"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -3259,9 +3267,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
-version = "0.2.129"
+version = "0.2.130"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6f501a8bc3719dba86ef8ae4728879c08001bea749eb1333ac5b91e040e2a6b7"
+checksum = "2ca4b54280e455bd831e33a6b8e734baf432fe63fbc35c42ac14ce67a043a53a"
dependencies = [
"bumpalo",
"proc-macro2",
@@ -3272,18 +3280,18 @@ dependencies = [
[[package]]
name = "wasm-bindgen-shared"
-version = "0.2.129"
+version = "0.2.130"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "23f0c9c52aa7cd7d77769a4cfe2a9adb1b331f489a41d912ce14513d5ab995c6"
+checksum = "3b1f9c3798725016c6ee5f2f57869ec0831e8bbc0ab0310a86e787e97f41389e"
dependencies = [
"unicode-ident",
]
[[package]]
name = "web-sys"
-version = "0.3.106"
+version = "0.3.107"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "88261b9deccee56594c11a3460c462c41f58d148598fe70ad77070126a68aba4"
+checksum = "d7d179596ff5ec0f6de4db64d54011bde6289cc49603d3a6e4ce3f329207ab88"
dependencies = [
"js-sys",
"wasm-bindgen",
diff --git a/common/taler-test-utils/src/db.rs b/common/taler-test-utils/src/db.rs
@@ -14,7 +14,7 @@
TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
-use std::{path::Path, str::FromStr as _};
+use std::{path::Path, str::FromStr as _, time::Duration};
use sqlx::{
Connection, PgConnection, PgPool,
@@ -125,7 +125,8 @@ fn run(test_name: &str, test: impl AsyncFnOnce(&TestDb)) {
})
}
-/// Reserve a reusable test database through a session advisory lock.
+/// Reserve one of 30 reusable test databases through a session advisory lock.
+/// Wait until a database is available if all are currently reserved.
///
/// Connection defaults are `postgres:///taler_rust_check`. PostgreSQL's usual
/// `PGHOST`, `PGPORT`, and `PGUSER` settings can select another test server.
@@ -138,18 +139,18 @@ async fn reserve_db(test_name: &str) -> sqlx::Result<TestDb> {
PgConnectOptions::from_str("postgres:///taler_rust_check")?.application_name(test_name);
let mut conn = PgConnection::connect_with(&admin).await?;
- // Find a free slot via Advisory Locks.
- let slot: Option<i32> = sqlx::query_scalar(
- "SELECT id FROM generate_series(0, 1000) AS id
- WHERE pg_try_advisory_lock(id) LIMIT 1",
- )
- .fetch_optional(&mut conn)
- .await?;
-
- let Some(slot) = slot else {
- return Err(sqlx::Error::Protocol(
- "Could not find a free database slot after 1001 attempts.".into(),
- ));
+ // Advisory locks enforce the limit across test processes as well as threads.
+ let slot = loop {
+ let slot: Option<i32> = sqlx::query_scalar(
+ "SELECT id FROM generate_series(0, 29) AS id
+ WHERE pg_try_advisory_lock(id) LIMIT 1",
+ )
+ .fetch_optional(&mut conn)
+ .await?;
+ if let Some(slot) = slot {
+ break slot;
+ }
+ tokio::time::sleep(Duration::from_millis(100)).await;
};
let name = match slot {
0 => "taler_rust_test".to_owned(),