@@ -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,11 @@ 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 ( port, listener) = TestEnv :: get_bound_port ( ) . await . expect ( "listener" ) ;
105+ spawn_wallet_grpc_service (
106+ listener,
107+ WalletServiceImpl :: create_with_rpc_params ( testenv. bitcoin_core_rpc_client ( ) . unwrap ( ) ) ,
108+ ) ;
105109
106110 task:: spawn_blocking ( move || assert_cli_with_port ( port, [ "wallet-balance" ] ) )
107111 . await . unwrap ( )
@@ -113,8 +117,11 @@ async fn test_cli_wallet_balance() {
113117#[ tokio:: test( flavor = "multi_thread" , worker_threads = 1 ) ]
114118async fn test_cli_new_address ( ) {
115119 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 ( ) ) ) ;
120+ let ( port, listener) = TestEnv :: get_bound_port ( ) . await . expect ( "listener" ) ;
121+ spawn_wallet_grpc_service (
122+ listener,
123+ WalletServiceImpl :: create_with_rpc_params ( testenv. bitcoin_core_rpc_client ( ) . unwrap ( ) ) ,
124+ ) ;
118125
119126 task:: spawn_blocking ( move || assert_cli_with_port ( port, [ "new-address" ] ) )
120127 . await . unwrap ( )
@@ -135,8 +142,8 @@ async fn test_cli_list_unspent() {
135142 . some_call ( matching ! ( ) ) . returns ( vec ! [ mock_utxo( ) ] ) ;
136143 let mock_wallet_service = Unimock :: new ( clause) . no_verify_in_drop ( ) ;
137144
138- let port = testenv :: get_available_port ( ) . expect ( "port " ) ;
139- spawn_wallet_grpc_service ( port , mock_wallet_service) ;
145+ let ( port, listener ) = TestEnv :: get_bound_port ( ) . await . expect ( "listener " ) ;
146+ spawn_wallet_grpc_service ( listener , mock_wallet_service) ;
140147
141148 task:: spawn_blocking ( move || assert_cli_with_port ( port, [ "list-unspent" ] ) )
142149 . await . unwrap ( )
@@ -153,8 +160,8 @@ async fn test_cli_notify_confidence() {
153160 . answers ( & |_, _| mock_confidence_stream ( ) ) ;
154161 let mock_wallet_service = Unimock :: new ( clause) . no_verify_in_drop ( ) ;
155162
156- let port = testenv :: get_available_port ( ) . expect ( "port " ) ;
157- spawn_wallet_grpc_service ( port , mock_wallet_service) ;
163+ let ( port, listener ) = TestEnv :: get_bound_port ( ) . await . expect ( "listener " ) ;
164+ spawn_wallet_grpc_service ( listener , mock_wallet_service) ;
158165
159166 task:: spawn_blocking ( move || assert_cli_with_port ( port, [ "notify-confidence" ,
160167 "37b560334094515cfdaa0146bfd4ce19e940064c505082031858b0aba3218990" ] ) )
@@ -229,10 +236,12 @@ fn assert_cli_with_port<'a>(port: u16, args: impl IntoIterator<Item=&'a str>) ->
229236 assert_cli ( args)
230237}
231238
232- fn spawn_wallet_grpc_service ( port : u16 , wallet_service : impl WalletService + Send + Sync + ' static )
233- -> JoinHandle < Result < ( ) , transport:: Error > > {
239+ fn spawn_wallet_grpc_service (
240+ listener : TcpListener ,
241+ wallet_service : impl WalletService + Send + Sync + ' static ,
242+ ) -> JoinHandle < Result < ( ) , transport:: Error > > {
234243 let wallet = WalletImpl { wallet_service : Arc :: new ( wallet_service) } ;
235- let incoming = TcpIncoming :: bind ( format ! ( "127.0.0.1:{port}" ) . parse ( ) . unwrap ( ) ) . unwrap ( ) ;
244+ let incoming = TcpIncoming :: from ( listener ) ;
236245
237246 task:: spawn ( async move {
238247 Server :: builder ( )
0 commit comments