Skip to content

Commit 0704cd9

Browse files
committed
test: add integration tests for connect_raw_tokio with and without TLS
1 parent d9725f3 commit 0704cd9

2 files changed

Lines changed: 120 additions & 1 deletion

File tree

sqlx-core/src/net/socket/async_rw_adapter.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,6 @@ mod tests {
370370
assert_eq!(&received[..], &data[..]);
371371
});
372372
}
373-
374373
}
375374

376375
#[cfg(feature = "_rt-async-io")]

tests/postgres/postgres.rs

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2218,3 +2218,123 @@ async fn it_can_recover_from_copy_in_invalid_params() -> anyhow::Result<()> {
22182218
)
22192219
.await
22202220
}
2221+
2222+
#[cfg(feature = "_rt-tokio")]
2223+
#[sqlx_macros::test]
2224+
async fn it_connects_raw_tokio() -> anyhow::Result<()> {
2225+
setup_if_needed();
2226+
2227+
let db_url = env::var("DATABASE_URL")?;
2228+
let options: PgConnectOptions = db_url.parse()?;
2229+
2230+
let stream =
2231+
tokio::net::TcpStream::connect(format!("{}:{}", options.get_host(), options.get_port()))
2232+
.await?;
2233+
2234+
let mut conn = PgConnection::connect_raw_tokio(stream, &options).await?;
2235+
conn.ping().await?;
2236+
2237+
let value: (i32,) = sqlx::query_as("SELECT 1 + 1").fetch_one(&mut conn).await?;
2238+
assert_eq!(value.0, 2);
2239+
2240+
Ok(())
2241+
}
2242+
2243+
#[cfg(all(
2244+
feature = "_rt-tokio",
2245+
any(
2246+
feature = "tls-native-tls",
2247+
feature = "tls-rustls",
2248+
feature = "tls-rustls-aws-lc-rs",
2249+
feature = "tls-rustls-ring",
2250+
feature = "tls-rustls-ring-webpki",
2251+
feature = "tls-rustls-ring-native-roots",
2252+
)
2253+
))]
2254+
#[sqlx_macros::test]
2255+
async fn it_connects_raw_tokio_with_tls() -> anyhow::Result<()> {
2256+
setup_if_needed();
2257+
2258+
let db_url = env::var("DATABASE_URL")?;
2259+
let options: PgConnectOptions = db_url
2260+
.parse::<PgConnectOptions>()?
2261+
.ssl_mode(sqlx::postgres::PgSslMode::Require);
2262+
2263+
let stream =
2264+
tokio::net::TcpStream::connect(format!("{}:{}", options.get_host(), options.get_port()))
2265+
.await?;
2266+
2267+
let mut conn = PgConnection::connect_raw_tokio(stream, &options).await?;
2268+
conn.ping().await?;
2269+
2270+
// Verify TLS is actually in use by checking the connection's SSL status
2271+
let ssl: bool = sqlx::query_scalar("SELECT ssl FROM pg_stat_ssl WHERE pid = pg_backend_pid()")
2272+
.fetch_one(&mut conn)
2273+
.await?;
2274+
assert!(ssl, "expected connection to be using TLS");
2275+
2276+
Ok(())
2277+
}
2278+
2279+
#[cfg(feature = "_rt-async-std")]
2280+
#[sqlx_macros::test]
2281+
async fn it_connects_raw_futures() -> anyhow::Result<()> {
2282+
setup_if_needed();
2283+
2284+
let db_url = env::var("DATABASE_URL")?;
2285+
let options: PgConnectOptions = db_url.parse()?;
2286+
2287+
let stream = async_std::net::TcpStream::connect(format!(
2288+
"{}:{}",
2289+
options.get_host(),
2290+
options.get_port()
2291+
))
2292+
.await?;
2293+
2294+
let mut conn = PgConnection::connect_raw_futures(stream, &options).await?;
2295+
conn.ping().await?;
2296+
2297+
let value: (i32,) = sqlx::query_as("SELECT 1 + 1").fetch_one(&mut conn).await?;
2298+
assert_eq!(value.0, 2);
2299+
2300+
Ok(())
2301+
}
2302+
2303+
#[cfg(all(
2304+
feature = "_rt-async-std",
2305+
any(
2306+
feature = "tls-native-tls",
2307+
feature = "tls-rustls",
2308+
feature = "tls-rustls-aws-lc-rs",
2309+
feature = "tls-rustls-ring",
2310+
feature = "tls-rustls-ring-webpki",
2311+
feature = "tls-rustls-ring-native-roots",
2312+
)
2313+
))]
2314+
#[sqlx_macros::test]
2315+
async fn it_connects_raw_futures_with_tls() -> anyhow::Result<()> {
2316+
setup_if_needed();
2317+
2318+
let db_url = env::var("DATABASE_URL")?;
2319+
let options: PgConnectOptions = db_url
2320+
.parse::<PgConnectOptions>()?
2321+
.ssl_mode(sqlx::postgres::PgSslMode::Require);
2322+
2323+
let stream = async_std::net::TcpStream::connect(format!(
2324+
"{}:{}",
2325+
options.get_host(),
2326+
options.get_port()
2327+
))
2328+
.await?;
2329+
2330+
let mut conn = PgConnection::connect_raw_futures(stream, &options).await?;
2331+
conn.ping().await?;
2332+
2333+
// Verify TLS is actually in use by checking the connection's SSL status
2334+
let ssl: bool = sqlx::query_scalar("SELECT ssl FROM pg_stat_ssl WHERE pid = pg_backend_pid()")
2335+
.fetch_one(&mut conn)
2336+
.await?;
2337+
assert!(ssl, "expected connection to be using TLS");
2338+
2339+
Ok(())
2340+
}

0 commit comments

Comments
 (0)