From 176d434dd24f0b889af41ce0a3f8a5820096bf95 Mon Sep 17 00:00:00 2001 From: Utkarsh Sachan Date: Wed, 17 Jun 2026 07:59:15 +0530 Subject: [PATCH] feat: support DATABASE_URL_TEST override in sqlx::test macro Allow #[sqlx::test] to use DATABASE_URL_TEST env var when set, falling back to DATABASE_URL if not present. This enables users to configure a dedicated test database user with elevated permissions (e.g. superuser for Postgres) while keeping production/dev credentials separate, following the principle of least privilege. Fixes #4302 --- sqlx-mysql/src/testing/mod.rs | 8 ++++++-- sqlx-postgres/src/testing/mod.rs | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/sqlx-mysql/src/testing/mod.rs b/sqlx-mysql/src/testing/mod.rs index f509f9da45..1b76e69f49 100644 --- a/sqlx-mysql/src/testing/mod.rs +++ b/sqlx-mysql/src/testing/mod.rs @@ -37,7 +37,9 @@ impl TestSupport for MySql { } async fn cleanup_test_dbs() -> Result, Error> { - let url = dotenvy::var("DATABASE_URL").expect("DATABASE_URL must be set"); + let url = dotenvy::var("DATABASE_URL_TEST") + .or_else(|_| dotenvy::var("DATABASE_URL")) + .expect("DATABASE_URL_TEST or DATABASE_URL must be set"); let mut conn = MySqlConnection::connect(&url).await?; @@ -97,7 +99,9 @@ impl TestSupport for MySql { } async fn test_context(args: &TestArgs) -> Result, Error> { - let url = dotenvy::var("DATABASE_URL").expect("DATABASE_URL must be set"); + let url = dotenvy::var("DATABASE_URL_TEST") + .or_else(|_| dotenvy::var("DATABASE_URL")) + .expect("DATABASE_URL_TEST or DATABASE_URL must be set"); let master_opts = MySqlConnectOptions::from_str(&url).expect("failed to parse DATABASE_URL"); diff --git a/sqlx-postgres/src/testing/mod.rs b/sqlx-postgres/src/testing/mod.rs index 3e1cf0ddf7..a84030c6eb 100644 --- a/sqlx-postgres/src/testing/mod.rs +++ b/sqlx-postgres/src/testing/mod.rs @@ -39,7 +39,9 @@ impl TestSupport for Postgres { } async fn cleanup_test_dbs() -> Result, Error> { - let url = dotenvy::var("DATABASE_URL").expect("DATABASE_URL must be set"); + let url = dotenvy::var("DATABASE_URL_TEST") + .or_else(|_| dotenvy::var("DATABASE_URL")) + .expect("DATABASE_URL_TEST or DATABASE_URL must be set"); let mut conn = PgConnection::connect(&url).await?; @@ -90,7 +92,9 @@ impl TestSupport for Postgres { } async fn test_context(args: &TestArgs) -> Result, Error> { - let url = dotenvy::var("DATABASE_URL").expect("DATABASE_URL must be set"); + let url = dotenvy::var("DATABASE_URL_TEST") + .or_else(|_| dotenvy::var("DATABASE_URL")) + .expect("DATABASE_URL_TEST or DATABASE_URL must be set"); let master_opts = PgConnectOptions::from_str(&url).expect("failed to parse DATABASE_URL");