143 lines
4.8 KiB
Rust
143 lines
4.8 KiB
Rust
#![allow(unused_imports, dead_code)]
|
|
|
|
pub mod common;
|
|
|
|
pub use common::{bakery_chain::*, setup::*, TestContext};
|
|
use pretty_assertions::assert_eq;
|
|
use sea_orm::prelude::*;
|
|
|
|
#[sea_orm_macros::test]
|
|
pub async fn connection_ping() {
|
|
let ctx = TestContext::new("connection_ping").await;
|
|
|
|
ctx.db.ping().await.unwrap();
|
|
|
|
ctx.delete().await;
|
|
}
|
|
|
|
#[sea_orm_macros::test]
|
|
#[cfg(feature = "sqlx-mysql")]
|
|
pub async fn connection_ping_closed_mysql() {
|
|
let ctx = std::rc::Rc::new(Box::new(TestContext::new("connection_ping_closed").await));
|
|
let ctx_ping = std::rc::Rc::clone(&ctx);
|
|
|
|
ctx.db.get_mysql_connection_pool().close().await;
|
|
assert_eq!(
|
|
ctx_ping.db.ping().await,
|
|
Err(DbErr::ConnectionAcquire(ConnAcquireErr::ConnectionClosed))
|
|
);
|
|
|
|
let base_url = std::env::var("DATABASE_URL").unwrap();
|
|
let mut opt = sea_orm::ConnectOptions::new(format!("{base_url}/connection_ping_closed"));
|
|
opt
|
|
// The connection pool has a single connection only
|
|
.max_connections(1)
|
|
// A controlled connection acquire timeout
|
|
.acquire_timeout(std::time::Duration::from_secs(2));
|
|
|
|
let db = sea_orm::Database::connect(opt).await.unwrap();
|
|
|
|
async fn transaction_blocked(db: &DatabaseConnection) {
|
|
let _txn = sea_orm::TransactionTrait::begin(db).await.unwrap();
|
|
// Occupy the only connection, thus forcing others fail to acquire connection
|
|
tokio::time::sleep(std::time::Duration::from_secs(3)).await;
|
|
}
|
|
|
|
async fn transaction(db: &DatabaseConnection) {
|
|
// Should fail to acquire
|
|
let txn = sea_orm::TransactionTrait::begin(db).await;
|
|
assert_eq!(
|
|
txn.expect_err("should be a time out"),
|
|
crate::DbErr::ConnectionAcquire(ConnAcquireErr::Timeout)
|
|
)
|
|
}
|
|
|
|
tokio::join!(transaction_blocked(&db), transaction(&db));
|
|
|
|
ctx.delete().await;
|
|
}
|
|
|
|
#[sea_orm_macros::test]
|
|
#[cfg(feature = "sqlx-sqlite")]
|
|
pub async fn connection_ping_closed_sqlite() {
|
|
let ctx = std::rc::Rc::new(Box::new(TestContext::new("connection_ping_closed").await));
|
|
let ctx_ping = std::rc::Rc::clone(&ctx);
|
|
|
|
ctx.db.get_sqlite_connection_pool().close().await;
|
|
assert_eq!(
|
|
ctx_ping.db.ping().await,
|
|
Err(DbErr::ConnectionAcquire(ConnAcquireErr::ConnectionClosed))
|
|
);
|
|
|
|
let base_url = std::env::var("DATABASE_URL").unwrap();
|
|
let mut opt = sea_orm::ConnectOptions::new(base_url);
|
|
opt
|
|
// The connection pool has a single connection only
|
|
.max_connections(1)
|
|
// A controlled connection acquire timeout
|
|
.acquire_timeout(std::time::Duration::from_secs(2));
|
|
|
|
let db = sea_orm::Database::connect(opt).await.unwrap();
|
|
|
|
async fn transaction_blocked(db: &DatabaseConnection) {
|
|
let _txn = sea_orm::TransactionTrait::begin(db).await.unwrap();
|
|
// Occupy the only connection, thus forcing others fail to acquire connection
|
|
tokio::time::sleep(std::time::Duration::from_secs(3)).await;
|
|
}
|
|
|
|
async fn transaction(db: &DatabaseConnection) {
|
|
// Should fail to acquire
|
|
let txn = sea_orm::TransactionTrait::begin(db).await;
|
|
assert_eq!(
|
|
txn.expect_err("should be a time out"),
|
|
crate::DbErr::ConnectionAcquire(ConnAcquireErr::Timeout)
|
|
)
|
|
}
|
|
|
|
tokio::join!(transaction_blocked(&db), transaction(&db));
|
|
|
|
ctx.delete().await;
|
|
}
|
|
|
|
#[sea_orm_macros::test]
|
|
#[cfg(feature = "sqlx-postgres")]
|
|
pub async fn connection_ping_closed_postgres() {
|
|
let ctx = std::rc::Rc::new(Box::new(TestContext::new("connection_ping_closed").await));
|
|
let ctx_ping = std::rc::Rc::clone(&ctx);
|
|
|
|
ctx.db.get_postgres_connection_pool().close().await;
|
|
assert_eq!(
|
|
ctx_ping.db.ping().await,
|
|
Err(DbErr::ConnectionAcquire(ConnAcquireErr::ConnectionClosed))
|
|
);
|
|
|
|
let base_url = std::env::var("DATABASE_URL").unwrap();
|
|
let mut opt = sea_orm::ConnectOptions::new(format!("{base_url}/connection_ping_closed"));
|
|
opt
|
|
// The connection pool has a single connection only
|
|
.max_connections(1)
|
|
// A controlled connection acquire timeout
|
|
.acquire_timeout(std::time::Duration::from_secs(2));
|
|
|
|
let db = sea_orm::Database::connect(opt).await.unwrap();
|
|
|
|
async fn transaction_blocked(db: &DatabaseConnection) {
|
|
let _txn = sea_orm::TransactionTrait::begin(db).await.unwrap();
|
|
// Occupy the only connection, thus forcing others fail to acquire connection
|
|
tokio::time::sleep(std::time::Duration::from_secs(3)).await;
|
|
}
|
|
|
|
async fn transaction(db: &DatabaseConnection) {
|
|
// Should fail to acquire
|
|
let txn = sea_orm::TransactionTrait::begin(db).await;
|
|
assert_eq!(
|
|
txn.expect_err("should be a time out"),
|
|
crate::DbErr::ConnectionAcquire(ConnAcquireErr::Timeout)
|
|
)
|
|
}
|
|
|
|
tokio::join!(transaction_blocked(&db), transaction(&db));
|
|
|
|
ctx.delete().await;
|
|
}
|