@@ -9,6 +9,7 @@ module Test.Cardano.Db.Mock.Unit.Conway.Rollback (
99 simpleRollback ,
1010 bigChain ,
1111 restartAndRollback ,
12+ restartAndRollbackLarge ,
1213 lazyRollback ,
1314 lazyRollbackRestart ,
1415 doubleRollback ,
@@ -35,7 +36,7 @@ import Cardano.Mock.Forging.Types (PoolIndex (..), StakeIndex (..), UTxOIndex (.
3536import Cardano.Prelude
3637import Data.Maybe.Strict (StrictMaybe (.. ))
3738import Ouroboros.Network.Block (blockPoint )
38- import Test.Cardano.Db.Mock.Config (claFullMode , configPoolStats , conwayConfigDir , initCommandLineArgs , queryDBSync , startDBSync , stopDBSync , withCustomConfigDropDB , withFullConfigDropDB )
39+ import Test.Cardano.Db.Mock.Config (claFullMode , configPoolStats , conwayConfigDir , initCommandLineArgs , queryDBSync , startDBSync , stopDBSync , withCustomConfigDropDB , withFullConfigDropDB , withFullConfigDropDBNoFingerprint )
3940import Test.Cardano.Db.Mock.Examples
4041import Test.Cardano.Db.Mock.UnifiedApi
4142import Test.Cardano.Db.Mock.Validate (assertBlockNoBackoff , assertEqQuery , assertTxCount )
@@ -94,7 +95,7 @@ bigChain =
9495
9596restartAndRollback :: IOManager -> [(Text , Text )] -> Assertion
9697restartAndRollback =
97- withFullConfigDropDB conwayConfigDir testLabel $ \ interpreter mockServer dbSync -> do
98+ withFullConfigDropDBNoFingerprint conwayConfigDir testLabel $ \ interpreter mockServer dbSync -> do
9899 -- Forge some blocks
99100 forM_ (replicate 101 mockBlock0) (forgeNextAndSubmit interpreter mockServer)
100101
@@ -107,20 +108,49 @@ restartAndRollback =
107108 -- Wait for it to sync
108109 assertBlockNoBackoff dbSync 201
109110
110- -- Forge some more blocks
111- forM_ (replicate 5 mockBlock2 ) (forgeNextAndSubmit interpreter mockServer)
111+ -- Forge some more blocks (using mockBlock0 so the new block after rollback will have a different forger)
112+ forM_ (replicate 5 mockBlock0 ) (forgeNextAndSubmit interpreter mockServer)
112113 assertBlockNoBackoff dbSync 206
113114
114115 -- Rollback and restart
115116 stopDBSync dbSync
116117 void $ rollbackTo interpreter mockServer (blockPoint $ last blks)
117118 startDBSync dbSync
118119
119- -- TODO: DBSync doesn't detect rollbacks while stopped
120- assertBlockNoBackoff dbSync 206
120+ -- rollbackTo forges an empty block after rollback, so we expect 202 blocks
121+ -- (rollback point at 201 + the new empty block)
122+ assertBlockNoBackoff dbSync 202
121123 where
122124 testLabel = " conwayRestartAndRollback"
123125
126+ restartAndRollbackLarge :: IOManager -> [(Text , Text )] -> Assertion
127+ restartAndRollbackLarge =
128+ withFullConfigDropDBNoFingerprint conwayConfigDir testLabel $ \ interpreter mockServer dbSync -> do
129+ -- Forge initial blocks
130+ forM_ (replicate 101 mockBlock0) (forgeNextAndSubmit interpreter mockServer)
131+
132+ startDBSync dbSync
133+ assertBlockNoBackoff dbSync 101
134+
135+ -- First batch: blocks to rollback to
136+ blks1 <- forM (replicate 100 mockBlock0) (forgeNextAndSubmit interpreter mockServer)
137+ assertBlockNoBackoff dbSync 201
138+
139+ -- Second batch: blocks that will be rolled back
140+ forM_ (replicate 100 mockBlock0) (forgeNextAndSubmit interpreter mockServer)
141+ assertBlockNoBackoff dbSync 301
142+
143+ -- Rollback and restart - rolling back 100 blocks
144+ stopDBSync dbSync
145+ void $ rollbackTo interpreter mockServer (blockPoint $ last blks1)
146+ startDBSync dbSync
147+
148+ -- rollbackTo forges an empty block after rollback, so we expect 202 blocks
149+ -- (rollback point at 201 + the new empty block)
150+ assertBlockNoBackoff dbSync 202
151+ where
152+ testLabel = " conwayRestartAndRollbackLarge"
153+
124154lazyRollback :: IOManager -> [(Text , Text )] -> Assertion
125155lazyRollback =
126156 withFullConfigDropDB conwayConfigDir testLabel $ \ interpreter mockServer dbSync -> do
0 commit comments