@@ -2218,3 +2218,103 @@ 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( feature = "_rt-tokio" , any( feature = "_tls-native-tls" , feature = "_tls-rustls" ) ) ) ]
2244+ #[ sqlx_macros:: test]
2245+ async fn it_connects_raw_tokio_with_tls ( ) -> anyhow:: Result < ( ) > {
2246+ setup_if_needed ( ) ;
2247+
2248+ let db_url = env:: var ( "DATABASE_URL" ) ?;
2249+ let options: PgConnectOptions = db_url
2250+ . parse :: < PgConnectOptions > ( ) ?
2251+ . ssl_mode ( sqlx:: postgres:: PgSslMode :: Require ) ;
2252+
2253+ let stream =
2254+ tokio:: net:: TcpStream :: connect ( format ! ( "{}:{}" , options. get_host( ) , options. get_port( ) ) )
2255+ . await ?;
2256+
2257+ let mut conn = PgConnection :: connect_raw_tokio ( stream, & options) . await ?;
2258+ conn. ping ( ) . await ?;
2259+
2260+ // Verify TLS is actually in use by checking the connection's SSL status
2261+ let ssl: bool = sqlx:: query_scalar ( "SELECT ssl FROM pg_stat_ssl WHERE pid = pg_backend_pid()" )
2262+ . fetch_one ( & mut conn)
2263+ . await ?;
2264+ assert ! ( ssl, "expected connection to be using TLS" ) ;
2265+
2266+ Ok ( ( ) )
2267+ }
2268+
2269+ #[ cfg( feature = "_rt-async-std" ) ]
2270+ #[ sqlx_macros:: test]
2271+ async fn it_connects_raw_futures ( ) -> anyhow:: Result < ( ) > {
2272+ setup_if_needed ( ) ;
2273+
2274+ let db_url = env:: var ( "DATABASE_URL" ) ?;
2275+ let options: PgConnectOptions = db_url. parse ( ) ?;
2276+
2277+ let stream = async_std:: net:: TcpStream :: connect ( format ! (
2278+ "{}:{}" ,
2279+ options. get_host( ) ,
2280+ options. get_port( )
2281+ ) )
2282+ . await ?;
2283+
2284+ let mut conn = PgConnection :: connect_raw_futures ( stream, & options) . await ?;
2285+ conn. ping ( ) . await ?;
2286+
2287+ let value: ( i32 , ) = sqlx:: query_as ( "SELECT 1 + 1" ) . fetch_one ( & mut conn) . await ?;
2288+ assert_eq ! ( value. 0 , 2 ) ;
2289+
2290+ Ok ( ( ) )
2291+ }
2292+
2293+ #[ cfg( all( feature = "_rt-async-std" , any( feature = "_tls-native-tls" , feature = "_tls-rustls" ) ) ) ]
2294+ #[ sqlx_macros:: test]
2295+ async fn it_connects_raw_futures_with_tls ( ) -> anyhow:: Result < ( ) > {
2296+ setup_if_needed ( ) ;
2297+
2298+ let db_url = env:: var ( "DATABASE_URL" ) ?;
2299+ let options: PgConnectOptions = db_url
2300+ . parse :: < PgConnectOptions > ( ) ?
2301+ . ssl_mode ( sqlx:: postgres:: PgSslMode :: Require ) ;
2302+
2303+ let stream = async_std:: net:: TcpStream :: connect ( format ! (
2304+ "{}:{}" ,
2305+ options. get_host( ) ,
2306+ options. get_port( )
2307+ ) )
2308+ . await ?;
2309+
2310+ let mut conn = PgConnection :: connect_raw_futures ( stream, & options) . await ?;
2311+ conn. ping ( ) . await ?;
2312+
2313+ // Verify TLS is actually in use by checking the connection's SSL status
2314+ let ssl: bool = sqlx:: query_scalar ( "SELECT ssl FROM pg_stat_ssl WHERE pid = pg_backend_pid()" )
2315+ . fetch_one ( & mut conn)
2316+ . await ?;
2317+ assert ! ( ssl, "expected connection to be using TLS" ) ;
2318+
2319+ Ok ( ( ) )
2320+ }
0 commit comments