1- use futures:: { Future , Stream } ;
1+ use futures:: { FutureExt , TryStreamExt } ;
22use native_tls:: { self , Certificate } ;
33use tokio:: net:: TcpStream ;
4- use tokio:: runtime:: current_thread:: Runtime ;
54use tokio_postgres:: tls:: TlsConnect ;
65
76#[ cfg( feature = "runtime" ) ]
87use crate :: MakeTlsConnector ;
98use crate :: TlsConnector ;
109
11- fn smoke_test < T > ( s : & str , tls : T )
10+ async fn smoke_test < T > ( s : & str , tls : T )
1211where
1312 T : TlsConnect < TcpStream > ,
14- T :: Stream : ' static ,
13+ T :: Stream : ' static + Send ,
1514{
16- let mut runtime = Runtime :: new ( ) . unwrap ( ) ;
15+ let stream = TcpStream :: connect ( "127.0.0.1:5433" )
16+ . await
17+ . unwrap ( ) ;
1718
1819 let builder = s. parse :: < tokio_postgres:: Config > ( ) . unwrap ( ) ;
20+ let ( mut client, connection) = builder. connect_raw ( stream, tls) . await . unwrap ( ) ;
1921
20- let handshake = TcpStream :: connect ( & "127.0.0.1:5433" . parse ( ) . unwrap ( ) )
21- . map_err ( |e| panic ! ( "{}" , e) )
22- . and_then ( |s| builder. connect_raw ( s, tls) ) ;
23- let ( mut client, connection) = runtime. block_on ( handshake) . unwrap ( ) ;
24- let connection = connection. map_err ( |e| panic ! ( "{}" , e) ) ;
25- runtime. spawn ( connection) ;
22+ let connection = connection. map ( |r| r. unwrap ( ) ) ;
23+ tokio:: spawn ( connection) ;
2624
27- let prepare = client. prepare ( "SELECT 1::INT4" ) ;
28- let statement = runtime. block_on ( prepare) . unwrap ( ) ;
29- let select = client. query ( & statement, & [ ] ) . collect ( ) . map ( |rows| {
30- assert_eq ! ( rows. len( ) , 1 ) ;
31- assert_eq ! ( rows[ 0 ] . get:: <_, i32 >( 0 ) , 1 ) ;
32- } ) ;
33- runtime. block_on ( select) . unwrap ( ) ;
25+ let stmt = client. prepare ( "SELECT $1::INT4" ) . await . unwrap ( ) ;
26+ let rows = client
27+ . query ( & stmt, & [ & 1i32 ] )
28+ . try_collect :: < Vec < _ > > ( )
29+ . await
30+ . unwrap ( ) ;
3431
35- drop ( statement) ;
36- drop ( client) ;
37- runtime. run ( ) . unwrap ( ) ;
32+ assert_eq ! ( rows. len( ) , 1 ) ;
33+ assert_eq ! ( rows[ 0 ] . get:: <_, i32 >( 0 ) , 1 ) ;
3834}
3935
40- #[ test]
41- fn require ( ) {
36+ #[ tokio :: test]
37+ async fn require ( ) {
4238 let connector = native_tls:: TlsConnector :: builder ( )
4339 . add_root_certificate (
4440 Certificate :: from_pem ( include_bytes ! ( "../../test/server.crt" ) ) . unwrap ( ) ,
@@ -48,11 +44,12 @@ fn require() {
4844 smoke_test (
4945 "user=ssl_user dbname=postgres sslmode=require" ,
5046 TlsConnector :: new ( connector, "localhost" ) ,
51- ) ;
47+ )
48+ . await ;
5249}
5350
54- #[ test]
55- fn prefer ( ) {
51+ #[ tokio :: test]
52+ async fn prefer ( ) {
5653 let connector = native_tls:: TlsConnector :: builder ( )
5754 . add_root_certificate (
5855 Certificate :: from_pem ( include_bytes ! ( "../../test/server.crt" ) ) . unwrap ( ) ,
@@ -62,11 +59,12 @@ fn prefer() {
6259 smoke_test (
6360 "user=ssl_user dbname=postgres" ,
6461 TlsConnector :: new ( connector, "localhost" ) ,
65- ) ;
62+ )
63+ . await ;
6664}
6765
68- #[ test]
69- fn scram_user ( ) {
66+ #[ tokio :: test]
67+ async fn scram_user ( ) {
7068 let connector = native_tls:: TlsConnector :: builder ( )
7169 . add_root_certificate (
7270 Certificate :: from_pem ( include_bytes ! ( "../../test/server.crt" ) ) . unwrap ( ) ,
@@ -76,14 +74,13 @@ fn scram_user() {
7674 smoke_test (
7775 "user=scram_user password=password dbname=postgres sslmode=require" ,
7876 TlsConnector :: new ( connector, "localhost" ) ,
79- ) ;
77+ )
78+ . await ;
8079}
8180
82- #[ test]
81+ #[ tokio :: test]
8382#[ cfg( feature = "runtime" ) ]
84- fn runtime ( ) {
85- let mut runtime = Runtime :: new ( ) . unwrap ( ) ;
86-
83+ async fn runtime ( ) {
8784 let connector = native_tls:: TlsConnector :: builder ( )
8885 . add_root_certificate (
8986 Certificate :: from_pem ( include_bytes ! ( "../../test/server.crt" ) ) . unwrap ( ) ,
@@ -92,14 +89,22 @@ fn runtime() {
9289 . unwrap ( ) ;
9390 let connector = MakeTlsConnector :: new ( connector) ;
9491
95- let connect = tokio_postgres:: connect (
92+ let ( mut client , connection ) = tokio_postgres:: connect (
9693 "host=localhost port=5433 user=postgres sslmode=require" ,
9794 connector,
98- ) ;
99- let ( mut client, connection) = runtime. block_on ( connect) . unwrap ( ) ;
100- let connection = connection. map_err ( |e| panic ! ( "{}" , e) ) ;
101- runtime. spawn ( connection) ;
95+ )
96+ . await
97+ . unwrap ( ) ;
98+ let connection = connection. map ( |r| r. unwrap ( ) ) ;
99+ tokio:: spawn ( connection) ;
100+
101+ let stmt = client. prepare ( "SELECT $1::INT4" ) . await . unwrap ( ) ;
102+ let rows = client
103+ . query ( & stmt, & [ & 1i32 ] )
104+ . try_collect :: < Vec < _ > > ( )
105+ . await
106+ . unwrap ( ) ;
102107
103- let execute = client . simple_query ( "SELECT 1" ) . for_each ( |_| Ok ( ( ) ) ) ;
104- runtime . block_on ( execute ) . unwrap ( ) ;
108+ assert_eq ! ( rows . len ( ) , 1 ) ;
109+ assert_eq ! ( rows [ 0 ] . get :: <_ , i32 > ( 0 ) , 1 ) ;
105110}
0 commit comments