diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 3194c95..abf473d 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -101,6 +101,18 @@ jobs: features: moka-store,sqlite-store docker: false + - store: mysql-store + features: __diesel_mysql + docker: true + + - store: postgres-store + features: __diesel_postgres + docker: true + + - store: diesel-store + features: diesel-store + docker: false + steps: - uses: actions/checkout@v4 - run: | diff --git a/Cargo.toml b/Cargo.toml index e7bb056..3b7a504 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,6 +26,9 @@ moka-store = ["moka"] tokio-rt = ["tokio/rt", "tokio/time"] diesel-store = ["dep:diesel", "tokio/rt", "rmp-serde"] +__diesel_postgres = ["diesel-store", "diesel/postgres"] +__diesel_mysql = ["diesel-store", "diesel/mysql"] + [dependencies] async-trait = "0.1.73" dashmap = "5.5.3" diff --git a/tests/integration-tests.rs b/tests/integration-tests.rs index ce15f0b..835784e 100644 --- a/tests/integration-tests.rs +++ b/tests/integration-tests.rs @@ -118,6 +118,93 @@ mod mysql_store_tests { route_tests!(app); } +#[cfg(all(test, feature = "axum-core", feature = "diesel-store"))] +mod diesel_sqlite_store_tests { + use axum::Router; + use diesel::prelude::*; + use diesel::r2d2::{ConnectionManager, Pool}; + use tower_sessions::diesel_store::DieselStore; + use tower_sessions::SessionManagerLayer; + + use crate::common::build_app; + + async fn app(max_age: Option) -> Router { + let pool = Pool::builder() + .max_size(1) + .build(ConnectionManager::::new(":memory:")) + .unwrap(); + let session_store = DieselStore::new(pool); + session_store.migrate().await.unwrap(); + let session_manager = SessionManagerLayer::new(session_store).with_secure(true); + + build_app(session_manager, max_age) + } + + route_tests!(app); +} + +#[cfg(all( + test, + feature = "axum-core", + feature = "diesel-store", + feature = "__diesel_postgres" +))] +mod diesel_pg_store_tests { + use axum::Router; + use diesel::prelude::*; + use diesel::r2d2::{ConnectionManager, Pool}; + use tower_sessions::diesel_store::DieselStore; + use tower_sessions::SessionManagerLayer; + + use crate::common::build_app; + + async fn app(max_age: Option) -> Router { + let database_url = std::option_env!("POSTGRES_URL").unwrap(); + let pool = Pool::builder() + .max_size(1) + .build(ConnectionManager::::new(database_url)) + .unwrap(); + let session_store = DieselStore::new(pool); + session_store.migrate().await.unwrap(); + let session_manager = SessionManagerLayer::new(session_store).with_secure(true); + + build_app(session_manager, max_age) + } + + route_tests!(app); +} + +#[cfg(all( + test, + feature = "axum-core", + feature = "diesel-store", + feature = "__diesel_mysql" +))] +mod diesel_mysql_store_tests { + use axum::Router; + use diesel::prelude::*; + use diesel::r2d2::{ConnectionManager, Pool}; + use tower_sessions::diesel_store::DieselStore; + use tower_sessions::SessionManagerLayer; + + use crate::common::build_app; + + async fn app(max_age: Option) -> Router { + let database_url = std::option_env!("MYSQL_URL").unwrap(); + let pool = Pool::builder() + .max_size(1) + .build(ConnectionManager::::new(database_url)) + .unwrap(); + let session_store = DieselStore::new(pool); + session_store.migrate().await.unwrap(); + let session_manager = SessionManagerLayer::new(session_store).with_secure(true); + + build_app(session_manager, max_age) + } + + route_tests!(app); +} + #[cfg(all(test, feature = "axum-core", feature = "mongodb-store"))] mod mongodb_store_tests { use axum::Router;