@@ -690,9 +690,11 @@ fn chain_update(
690690#[ cfg( test) ]
691691mod test {
692692 use crate :: { bdk_electrum_client:: TxUpdate , BdkElectrumClient } ;
693- use bdk_chain:: bitcoin:: { OutPoint , Transaction , TxIn } ;
694- use bdk_core:: collections:: BTreeMap ;
695- use bdk_testenv:: { utils:: new_tx, TestEnv } ;
693+ use bdk_chain:: bitcoin:: { constants, Network , OutPoint , ScriptBuf , Transaction , TxIn } ;
694+ use bdk_chain:: { BlockId , CheckPoint } ;
695+ use bdk_core:: { collections:: BTreeMap , spk_client:: SyncRequest } ;
696+ use bdk_testenv:: { anyhow, utils:: new_tx, TestEnv } ;
697+ use electrum_client:: Error as ElectrumError ;
696698 use std:: sync:: Arc ;
697699
698700 #[ cfg( feature = "default" ) ]
@@ -725,4 +727,34 @@ mod test {
725727 // Ensure that the txouts are empty.
726728 assert_eq ! ( tx_update. txouts, BTreeMap :: default ( ) ) ;
727729 }
730+
731+ #[ cfg( feature = "default" ) ]
732+ #[ test]
733+ fn test_sync_wrong_network_error ( ) -> anyhow:: Result < ( ) > {
734+ let env = TestEnv :: new ( ) ?;
735+ let client = electrum_client:: Client :: new ( env. electrsd . electrum_url . as_str ( ) ) . unwrap ( ) ;
736+ let electrum_client = BdkElectrumClient :: new ( client) ;
737+
738+ let _ = env. mine_blocks ( 1 , None ) . unwrap ( ) ;
739+
740+ let bogus_spks: Vec < ScriptBuf > = Vec :: new ( ) ;
741+ let bogus_genesis = constants:: genesis_block ( Network :: Testnet ) . block_hash ( ) ;
742+ let bogus_cp = CheckPoint :: new ( BlockId {
743+ height : 0 ,
744+ hash : bogus_genesis,
745+ } ) ;
746+
747+ let req = SyncRequest :: builder ( )
748+ . chain_tip ( bogus_cp)
749+ . spks ( bogus_spks)
750+ . build ( ) ;
751+ let err = electrum_client. sync ( req, 1 , false ) . unwrap_err ( ) ;
752+
753+ assert ! (
754+ matches!( err, ElectrumError :: Message ( m) if m. contains( "cannot find agreement block with server" ) ) ,
755+ "expected missing agreement block error"
756+ ) ;
757+
758+ Ok ( ( ) )
759+ }
728760}
0 commit comments