1+ {-# LANGUAGE NumericUnderscores #-}
12module Test.Cardano.Db.Mock.Unit.Alonzo.Stake (
23 -- stake addresses
34 registrationTx ,
@@ -24,7 +25,7 @@ import qualified Cardano.Mock.Forging.Tx.Alonzo as Alonzo
2425import Cardano.Mock.Forging.Tx.Alonzo.Scenarios (delegateAndSendBlocks )
2526import Cardano.Mock.Forging.Types (StakeIndex (.. ), UTxOIndex (.. ))
2627import Control.Concurrent.Class.MonadSTM.Strict (MonadSTM (atomically ))
27- import Control.Monad (forM_ , replicateM_ , void )
28+ import Control.Monad (forM_ , void )
2829import Data.Text (Text )
2930import Ouroboros.Network.Block (blockSlot )
3031import Test.Cardano.Db.Mock.Config (alonzoConfigDir , startDBSync , withFullConfig , withFullConfigAndDropDB )
@@ -33,7 +34,6 @@ import Test.Cardano.Db.Mock.UnifiedApi (
3334 fillUntilNextEpoch ,
3435 forgeAndSubmitBlocks ,
3536 forgeNextFindLeaderAndSubmit ,
36- forgeNextSkipSlotsFindLeaderAndSubmit ,
3737 getAlonzoLedgerState ,
3838 withAlonzoFindLeaderAndSubmit ,
3939 withAlonzoFindLeaderAndSubmitTx ,
@@ -215,126 +215,130 @@ stakeDistGenesis :: IOManager -> [(Text, Text)] -> Assertion
215215stakeDistGenesis =
216216 withFullConfigAndDropDB alonzoConfigDir testLabel $ \ interpreter mockServer dbSync -> do
217217 startDBSync dbSync
218- a <- fillUntilNextEpoch interpreter mockServer
219- assertBlockNoBackoff dbSync (fromIntegral $ length a)
220- -- There are 5 delegations in genesis
221- assertEpochStake dbSync 5
218+ blks <- fillUntilNextEpoch interpreter mockServer
219+ assertBlockNoBackoff dbSync (fromIntegral $ length blks)
220+ -- There are 10 delegations in genesis
221+ assertEpochStakeEpoch dbSync 1 5
222+ assertEpochStakeEpoch dbSync 2 5
223+
222224 where
223225 testLabel = " stakeDistGenesis-alonzo"
224226
225227delegations2000 :: IOManager -> [(Text , Text )] -> Assertion
226228delegations2000 =
227- withFullConfig alonzoConfigDir testLabel $ \ interpreter mockServer dbSync -> do
229+ withFullConfigAndDropDB alonzoConfigDir testLabel $ \ interpreter mockServer dbSync -> do
228230 startDBSync dbSync
229- a <- delegateAndSendBlocks 1995 interpreter
230- forM_ a $ atomically . addBlock mockServer
231- b <- fillUntilNextEpoch interpreter mockServer
232- c <- forgeAndSubmitBlocks interpreter mockServer 10
233-
234- assertBlockNoBackoff dbSync (fromIntegral $ length a + length b + length c)
235- -- There are exactly 2000 entries on the second epoch, 5 from genesis and 1995 manually added
231+ blks <- delegateAndSendBlocks 1995 interpreter
232+ forM_ blks (atomically . addBlock mockServer)
233+ -- Fill the rest of the epoch
234+ epoch <- fillUntilNextEpoch interpreter mockServer
235+ -- Wait for them to sync
236+ assertBlockNoBackoff dbSync (length blks + length epoch)
237+ assertEpochStakeEpoch dbSync 1 5
238+ -- Add some more blocks
239+ blks' <- forgeAndSubmitBlocks interpreter mockServer 10
240+ -- Wait for it to sync
241+ assertBlockNoBackoff dbSync (length blks + length epoch + length blks')
236242 assertEpochStakeEpoch dbSync 2 2000
237-
243+ -- Forge another block
238244 void $ forgeNextFindLeaderAndSubmit interpreter mockServer []
239- assertBlockNoBackoff dbSync (fromIntegral $ length a + length b + length c + 1 )
245+ -- Wait for it to sync
246+ assertBlockNoBackoff dbSync (length blks + length epoch + length blks' + 1 )
247+ -- There are still 2000 entries
240248 assertEpochStakeEpoch dbSync 2 2000
241249 where
242250 testLabel = " delegations2000-alonzo"
243251
244252delegations2001 :: IOManager -> [(Text , Text )] -> Assertion
245253delegations2001 =
246- withFullConfig alonzoConfigDir testLabel $ \ interpreter mockServer dbSync -> do
254+ withFullConfigAndDropDB alonzoConfigDir testLabel $ \ interpreter mockServer dbSync -> do
247255 startDBSync dbSync
248- a <- delegateAndSendBlocks 1996 interpreter
249- forM_ a $ atomically . addBlock mockServer
250- b <- fillUntilNextEpoch interpreter mockServer
251- c <- forgeAndSubmitBlocks interpreter mockServer 9
252-
253- assertBlockNoBackoff dbSync (fromIntegral $ length a + length b + length c)
254- assertEpochStakeEpoch dbSync 2 0
256+ -- We want exactly 2001 delegations, 5 from genesis and 1996 manually added
257+ blks <- delegateAndSendBlocks 1996 interpreter
258+ forM_ blks (atomically . addBlock mockServer)
259+ -- Fill the rest of the epoch
260+ epoch <- fillUntilNextEpoch interpreter mockServer
261+ -- Add some more blocks
262+ blks' <- forgeAndSubmitBlocks interpreter mockServer 9
263+ -- Wait for it to sync
264+ assertBlockNoBackoff dbSync (length blks + length epoch + length blks')
265+ assertEpochStakeEpoch dbSync 1 5
266+ -- The next 2000 entries is inserted on the next block
255267 void $ forgeNextFindLeaderAndSubmit interpreter mockServer []
256- assertBlockNoBackoff dbSync (fromIntegral $ length a + length b + length c + 1 )
257- assertEpochStakeEpoch dbSync 2 2000
258- -- The remaining entry is inserted on the next block.
268+ assertBlockNoBackoff dbSync (length blks + length epoch + length blks' + 1 )
269+ assertEpochStakeEpoch dbSync 2 2001
270+ -- The remaining entry is inserted on the next block
259271 void $ forgeNextFindLeaderAndSubmit interpreter mockServer []
260- assertBlockNoBackoff dbSync (fromIntegral $ length a + length b + length c + 2 )
272+ assertBlockNoBackoff dbSync (length blks + length epoch + length blks' + 2 )
261273 assertEpochStakeEpoch dbSync 2 2001
274+
262275 where
263276 testLabel = " delegations2001-alonzo"
264277
265278delegations8000 :: IOManager -> [(Text , Text )] -> Assertion
266279delegations8000 =
267- withFullConfig alonzoConfigDir testLabel $ \ interpreter mockServer dbSync -> do
280+ withFullConfigAndDropDB alonzoConfigDir testLabel $ \ interpreter mockServer dbSync -> do
268281 startDBSync dbSync
269- a <- delegateAndSendBlocks 7995 interpreter
270- forM_ a $ atomically . addBlock mockServer
271- b <- fillEpochs interpreter mockServer 2
272- c <- forgeAndSubmitBlocks interpreter mockServer 10
273-
274- assertBlockNoBackoff dbSync (fromIntegral $ length a + length b + length c)
275- assertEpochStakeEpoch dbSync 3 2000
276-
277- void $ forgeNextFindLeaderAndSubmit interpreter mockServer []
278- assertEpochStakeEpoch dbSync 3 4000
279-
280- void $ forgeNextFindLeaderAndSubmit interpreter mockServer []
281- assertEpochStakeEpoch dbSync 3 6000
282-
283- void $ forgeNextFindLeaderAndSubmit interpreter mockServer []
284- assertEpochStakeEpoch dbSync 3 8000
285-
286- void $ forgeNextFindLeaderAndSubmit interpreter mockServer []
287- assertEpochStakeEpoch dbSync 3 8000
282+ -- We want exactly 8000 delegations, 5 from genesis and 7995 manually added
283+ blks <- delegateAndSendBlocks 7995 interpreter
284+ forM_ blks (atomically . addBlock mockServer)
285+ -- Fill the rest of the epoch
286+ epoch <- fillEpochs interpreter mockServer 2
287+ -- Add some more blocks
288+ blks' <- forgeAndSubmitBlocks interpreter mockServer 10
289+ -- Wait for it to sync
290+ assertBlockNoBackoff dbSync (length blks + length epoch + length blks')
291+ assertEpochStakeEpoch dbSync 1 5
292+ assertEpochStakeEpoch dbSync 2 8000
288293 where
289294 testLabel = " delegations8000-alonzo"
290295
291296delegationsMany :: IOManager -> [(Text , Text )] -> Assertion
292297delegationsMany =
293- withFullConfig alonzoConfigDir testLabel $ \ interpreter mockServer dbSync -> do
298+ withFullConfigAndDropDB alonzoConfigDir testLabel $ \ interpreter mockServer dbSync -> do
294299 startDBSync dbSync
295- a <- delegateAndSendBlocks 40000 interpreter
296- forM_ a $ atomically . addBlock mockServer
297- b <- fillEpochs interpreter mockServer 4
298- c <- forgeAndSubmitBlocks interpreter mockServer 10
299-
300- -- too long. We cannot use default delays
301- assertBlockNoBackoffTimes (repeat 10 ) dbSync (fromIntegral $ length a + length b + length c)
302- -- The slice size here is
303- -- 1 + div (delegationsLen * 5) expectedBlocks = 2001
304- -- instead of 2000, because there are many delegations
305- assertEpochStakeEpoch dbSync 7 2001
306-
307- void $ forgeNextFindLeaderAndSubmit interpreter mockServer []
308- assertEpochStakeEpoch dbSync 7 4002
309-
310- void $ forgeNextFindLeaderAndSubmit interpreter mockServer []
311- assertEpochStakeEpoch dbSync 7 6003
300+ -- Forge many delegations
301+ blks <- delegateAndSendBlocks 40_000 interpreter
302+ forM_ blks (atomically . addBlock mockServer)
303+ -- Fill some epochs
304+ epochs <- fillEpochs interpreter mockServer 4
305+ -- Add some more blocks
306+ blks' <- forgeAndSubmitBlocks interpreter mockServer 10
307+ -- We can't use default delays because this takes too long
308+ assertBlockNoBackoffTimes
309+ (repeat 10 )
310+ dbSync
311+ (length blks + length epochs + length blks')
312+ assertEpochStakeEpoch dbSync 6 40_005
313+ assertEpochStakeEpoch dbSync 7 40_005
312314 where
313315 testLabel = " delegationsMany-alonzo"
314316
315317delegationsManyNotDense :: IOManager -> [(Text , Text )] -> Assertion
316318delegationsManyNotDense =
317- withFullConfig alonzoConfigDir testLabel $ \ interpreter mockServer dbSync -> do
319+ withFullConfigAndDropDB alonzoConfigDir testLabel $ \ interpreter mockServer dbSync -> do
318320 startDBSync dbSync
319- a <- delegateAndSendBlocks 40000 interpreter
320- forM_ a $ atomically . addBlock mockServer
321- b <- fillEpochs interpreter mockServer 4
322- c <- forgeAndSubmitBlocks interpreter mockServer 10
323-
324- -- too long. We cannot use default delays
325- assertBlockNoBackoffTimes (repeat 10 ) dbSync (fromIntegral $ length a + length b + length c)
326- -- The slice size here is
327- -- 1 + div (delegationsLen * 5) expectedBlocks = 2001
328- -- instead of 2000, because there are many delegations
329- assertEpochStakeEpoch dbSync 7 2001
330-
331- -- Blocks come on average every 5 slots. If we skip 15 slots before each block,
332- -- we are expected to get only 1/4 of the expected blocks. The adjusted slices
333- -- should still be long enough to cover everything.
334- replicateM_ 40 $
335- forgeNextSkipSlotsFindLeaderAndSubmit interpreter mockServer 15 []
336-
337- -- Even if the chain is sparse, all distributions are inserted.
338- assertEpochStakeEpoch dbSync 7 40005
321+ -- Forge many delegations
322+ blks <- delegateAndSendBlocks 40_000 interpreter
323+ forM_ blks (atomically . addBlock mockServer)
324+ -- Fill some epochs
325+ epochs <- fillEpochs interpreter mockServer 4
326+ -- Add some more blocks
327+ blks' <- forgeAndSubmitBlocks interpreter mockServer 10
328+ -- We can't use default delays because this takes too long
329+ assertBlockNoBackoffTimes
330+ (repeat 10 )
331+ dbSync
332+ (length blks + length epochs + length blks')
333+ -- check the stake distribution for each epoch
334+ assertEpochStakeEpoch dbSync 1 5
335+ assertEpochStakeEpoch dbSync 2 12_505
336+ assertEpochStakeEpoch dbSync 3 40_005
337+ assertEpochStakeEpoch dbSync 4 40_005
338+ assertEpochStakeEpoch dbSync 5 40_005
339+ assertEpochStakeEpoch dbSync 6 40_005
340+ assertEpochStakeEpoch dbSync 7 40_005
341+ -- check the sum of stake distribution for all epochs
342+ assertEpochStake dbSync 212_535
339343 where
340344 testLabel = " delegationsManyNotDense-alonzo"
0 commit comments