@@ -235,3 +235,44 @@ impl TestEnv {
235235 Ok ( txid)
236236 }
237237}
238+
239+ #[ cfg( test) ]
240+ mod test {
241+ use crate :: TestEnv ;
242+ use anyhow:: Result ;
243+ use bitcoincore_rpc:: RpcApi ;
244+
245+ /// This checks that reorgs initiated by `bitcoind` is detected by our `electrsd` instance.
246+ #[ test]
247+ fn test_reorg_is_detected_in_electrsd ( ) -> Result < ( ) > {
248+ let env = TestEnv :: new ( ) ?;
249+
250+ // Mine some blocks.
251+ env. mine_blocks ( 101 , None ) ?;
252+ env. wait_until_electrum_sees_block ( ) ?;
253+ let height = env. bitcoind . client . get_block_count ( ) ?;
254+ let blocks = ( 0 ..=height)
255+ . map ( |i| env. bitcoind . client . get_block_hash ( i) )
256+ . collect :: < Result < Vec < _ > , _ > > ( ) ?;
257+
258+ // Perform reorg on six blocks.
259+ env. reorg ( 6 ) ?;
260+ env. wait_until_electrum_sees_block ( ) ?;
261+ let reorged_height = env. bitcoind . client . get_block_count ( ) ?;
262+ let reorged_blocks = ( 0 ..=height)
263+ . map ( |i| env. bitcoind . client . get_block_hash ( i) )
264+ . collect :: < Result < Vec < _ > , _ > > ( ) ?;
265+
266+ assert_eq ! ( height, reorged_height) ;
267+
268+ // Block hashes should not be equal on the six reorged blocks.
269+ for ( i, ( block, reorged_block) ) in blocks. iter ( ) . zip ( reorged_blocks. iter ( ) ) . enumerate ( ) {
270+ match i <= height as usize - 6 {
271+ true => assert_eq ! ( block, reorged_block) ,
272+ false => assert_ne ! ( block, reorged_block) ,
273+ }
274+ }
275+
276+ Ok ( ( ) )
277+ }
278+ }
0 commit comments