@@ -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