@@ -4,7 +4,7 @@ use std::time::Duration;
44use assert_cmd:: assert:: Assert ;
55use assert_cmd:: cargo:: cargo_bin_cmd;
66use bdk_wallet:: bitcoin:: hex:: test_hex_unwrap as hex;
7- use bdk_wallet:: bitcoin:: { consensus , OutPoint , Transaction } ;
7+ use bdk_wallet:: bitcoin:: { OutPoint , Transaction , consensus } ;
88use bdk_wallet:: chain:: { ChainPosition , ConfirmationBlockTime } ;
99use bdk_wallet:: { KeychainKind , LocalOutput } ;
1010use const_format:: str_replace;
@@ -13,10 +13,11 @@ use predicates::str;
1313use rpc:: server:: { WalletImpl , WalletServer } ;
1414use rpc:: wallet:: { TxConfidence , WalletService , WalletServiceImpl , WalletServiceMock , WalletTx } ;
1515use testenv:: TestEnv ;
16+ use tokio:: net:: TcpListener ;
1617use tokio:: task:: { self , JoinHandle } ;
1718use tonic:: transport:: server:: TcpIncoming ;
1819use tonic:: transport:: { self , Server } ;
19- use unimock:: { matching , MockFn as _, Unimock } ;
20+ use unimock:: { MockFn as _, Unimock , matching } ;
2021
2122const CLI_TIMEOUT : Duration = Duration :: from_millis ( 200 ) ;
2223
@@ -100,8 +101,12 @@ fn test_cli_no_connection() {
100101#[ tokio:: test( flavor = "multi_thread" , worker_threads = 1 ) ]
101102async fn test_cli_wallet_balance ( ) {
102103 let testenv = TestEnv :: new ( ) . expect ( "testEnv could not start" ) ;
103- let port = testenv:: get_available_port ( ) . expect ( "port" ) ;
104- spawn_wallet_grpc_service ( port, WalletServiceImpl :: create_with_rpc_params ( testenv. bitcoin_core_rpc_client ( ) . unwrap ( ) ) ) ;
104+ let listener = testenv:: get_bound_port ( ) . await . expect ( "listener" ) ;
105+ let port = listener. local_addr ( ) . unwrap ( ) . port ( ) ;
106+ spawn_wallet_grpc_service (
107+ listener,
108+ WalletServiceImpl :: create_with_rpc_params ( testenv. bitcoin_core_rpc_client ( ) . unwrap ( ) ) ,
109+ ) ;
105110
106111 task:: spawn_blocking ( move || assert_cli_with_port ( port, [ "wallet-balance" ] ) )
107112 . await . unwrap ( )
@@ -113,8 +118,12 @@ async fn test_cli_wallet_balance() {
113118#[ tokio:: test( flavor = "multi_thread" , worker_threads = 1 ) ]
114119async fn test_cli_new_address ( ) {
115120 let testenv = TestEnv :: new ( ) . expect ( "testEnv could not start" ) ; // TODO: this doesnt make sense as a CLI make only sense if the bitcoind is
116- let port = testenv:: get_available_port ( ) . expect ( "port" ) ;
117- spawn_wallet_grpc_service ( port, WalletServiceImpl :: create_with_rpc_params ( testenv. bitcoin_core_rpc_client ( ) . unwrap ( ) ) ) ;
121+ let listener = testenv:: get_bound_port ( ) . await . expect ( "listener" ) ;
122+ let port = listener. local_addr ( ) . unwrap ( ) . port ( ) ;
123+ spawn_wallet_grpc_service (
124+ listener,
125+ WalletServiceImpl :: create_with_rpc_params ( testenv. bitcoin_core_rpc_client ( ) . unwrap ( ) ) ,
126+ ) ;
118127
119128 task:: spawn_blocking ( move || assert_cli_with_port ( port, [ "new-address" ] ) )
120129 . await . unwrap ( )
@@ -135,8 +144,9 @@ async fn test_cli_list_unspent() {
135144 . some_call ( matching ! ( ) ) . returns ( vec ! [ mock_utxo( ) ] ) ;
136145 let mock_wallet_service = Unimock :: new ( clause) . no_verify_in_drop ( ) ;
137146
138- let port = testenv:: get_available_port ( ) . expect ( "port" ) ;
139- spawn_wallet_grpc_service ( port, mock_wallet_service) ;
147+ let listener = testenv:: get_bound_port ( ) . await . expect ( "listener" ) ;
148+ let port = listener. local_addr ( ) . unwrap ( ) . port ( ) ;
149+ spawn_wallet_grpc_service ( listener, mock_wallet_service) ;
140150
141151 task:: spawn_blocking ( move || assert_cli_with_port ( port, [ "list-unspent" ] ) )
142152 . await . unwrap ( )
@@ -153,8 +163,9 @@ async fn test_cli_notify_confidence() {
153163 . answers ( & |_, _| mock_confidence_stream ( ) ) ;
154164 let mock_wallet_service = Unimock :: new ( clause) . no_verify_in_drop ( ) ;
155165
156- let port = testenv:: get_available_port ( ) . expect ( "port" ) ;
157- spawn_wallet_grpc_service ( port, mock_wallet_service) ;
166+ let listener = testenv:: get_bound_port ( ) . await . expect ( "listener" ) ;
167+ let port = listener. local_addr ( ) . unwrap ( ) . port ( ) ;
168+ spawn_wallet_grpc_service ( listener, mock_wallet_service) ;
158169
159170 task:: spawn_blocking ( move || assert_cli_with_port ( port, [ "notify-confidence" ,
160171 "37b560334094515cfdaa0146bfd4ce19e940064c505082031858b0aba3218990" ] ) )
@@ -229,10 +240,12 @@ fn assert_cli_with_port<'a>(port: u16, args: impl IntoIterator<Item=&'a str>) ->
229240 assert_cli ( args)
230241}
231242
232- fn spawn_wallet_grpc_service ( port : u16 , wallet_service : impl WalletService + Send + Sync + ' static )
233- -> JoinHandle < Result < ( ) , transport:: Error > > {
243+ fn spawn_wallet_grpc_service (
244+ listener : TcpListener ,
245+ wallet_service : impl WalletService + Send + Sync + ' static ,
246+ ) -> JoinHandle < Result < ( ) , transport:: Error > > {
234247 let wallet = WalletImpl { wallet_service : Arc :: new ( wallet_service) } ;
235- let incoming = TcpIncoming :: bind ( format ! ( "127.0.0.1:{port}" ) . parse ( ) . unwrap ( ) ) . unwrap ( ) ;
248+ let incoming = TcpIncoming :: from ( listener ) ;
236249
237250 task:: spawn ( async move {
238251 Server :: builder ( )
0 commit comments