From 9befdc81bf06d656d020aea57d3ec2dc4e5fc805 Mon Sep 17 00:00:00 2001 From: Ryan Leckey Date: Fri, 17 Jul 2020 04:56:58 -0700 Subject: [PATCH] test: add a regression test for the bugs discovered with #527 --- tests/any/pool.rs | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/tests/any/pool.rs b/tests/any/pool.rs index d89afc0d..2d90e23c 100644 --- a/tests/any/pool.rs +++ b/tests/any/pool.rs @@ -1,11 +1,13 @@ use futures::{FutureExt, TryFutureExt}; use sqlx::any::AnyPoolOptions; use sqlx::prelude::*; +use sqlx_core::any::AnyPool; use sqlx_test::new; use std::sync::{ atomic::{AtomicUsize, Ordering}, Arc, }; +use std::time::Duration; #[sqlx_macros::test] async fn pool_should_invoke_after_connect() -> anyhow::Result<()> { @@ -35,3 +37,32 @@ async fn pool_should_invoke_after_connect() -> anyhow::Result<()> { Ok(()) } + +// https://github.com/launchbadge/sqlx/issues/527 +#[sqlx_macros::test] +async fn pool_should_be_returned_failed_transactions() -> anyhow::Result<()> { + let pool = AnyPoolOptions::new() + .max_connections(2) + .connect_timeout(Duration::from_secs(3)) + .connect(&dotenv::var("DATABASE_URL")?) + .await?; + + let query = "blah blah"; + + let mut tx = pool.begin().await?; + let res = sqlx::query(query).execute(&mut tx).await; + assert!(res.is_err()); + drop(tx); + + let mut tx = pool.begin().await?; + let res = sqlx::query(query).execute(&mut tx).await; + assert!(res.is_err()); + drop(tx); + + let mut tx = pool.begin().await?; + let res = sqlx::query(query).execute(&mut tx).await; + assert!(res.is_err()); + drop(tx); + + Ok(()) +}