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