Skip to content

Commit b8f38f5

Browse files
authored
Merge pull request #5932 from IntersectMBO/query-spo-stake-distr-node
Add test for `query spo-stake-distribution`
2 parents 914c62c + 0d02742 commit b8f38f5

File tree

2 files changed

+38
-5
lines changed

2 files changed

+38
-5
lines changed

cardano-testnet/cardano-testnet.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,7 @@ test-suite cardano-testnet-test
234234
, hedgehog
235235
, hedgehog-extras
236236
, http-conduit
237+
, lens
237238
, lens-aeson
238239
, microlens
239240
, mtl

cardano-testnet/test/cardano-testnet-test/Cardano/Testnet/Test/Cli/Query.hs

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,19 @@ import Cardano.Testnet
3333

3434
import Prelude
3535

36+
import Control.Lens ((^?))
3637
import Control.Monad (forM_)
3738
import Control.Monad.Catch (MonadCatch)
3839
import qualified Data.Aeson as Aeson
3940
import qualified Data.Aeson.Encode.Pretty as Aeson
4041
import qualified Data.Aeson.Key as Aeson
4142
import qualified Data.Aeson.KeyMap as Aeson
43+
import qualified Data.Aeson.Lens as Aeson
4244
import Data.Bifunctor (bimap)
4345
import qualified Data.ByteString.Lazy as LBS
4446
import Data.Data (type (:~:) (Refl))
4547
import qualified Data.Map as Map
46-
import Data.String
48+
import Data.String (IsString (fromString))
4749
import Data.Text (Text)
4850
import qualified Data.Text as T
4951
import qualified Data.Text.Lazy as TL
@@ -56,6 +58,7 @@ import Lens.Micro ((^.))
5658
import System.Directory (makeAbsolute)
5759
import System.FilePath ((</>))
5860

61+
import Testnet.Components.Configuration (eraToString)
5962
import Testnet.Components.Query (EpochStateView, checkDRepsNumber, getEpochStateView,
6063
watchEpochStateUpdate)
6164
import qualified Testnet.Defaults as Defaults
@@ -65,7 +68,6 @@ import Testnet.Process.Cli.Transaction (TxOutAddress (ReferenceScriptA
6568
import Testnet.Process.Run (execCli', execCliStdoutToJson, mkExecConfig)
6669
import Testnet.Property.Assert (assertErasEqual)
6770
import Testnet.Property.Util (integrationWorkspace)
68-
import Testnet.Start.Types (eraToString)
6971
import Testnet.TestQueryCmds (TestQueryCmds (..), forallQueryCommands)
7072
import Testnet.Types
7173

@@ -230,6 +232,39 @@ hprop_cli_queries = integrationWorkspace "cli-queries" $ \tempAbsBasePath' -> H.
230232
H.noteM_ $ execCli' execConfig [ eraName, "query", "stake-distribution"
231233
, "--out-file", stakePoolsOutFile ]
232234

235+
TestQuerySPOStakeDistributionCmd ->
236+
-- spo-stake-distribution
237+
do
238+
-- Query all SPOs
239+
aesonSpoDist :: Aeson.Value <- execCliStdoutToJson execConfig [ eraName, "query", "spo-stake-distribution", "--all-spos" ]
240+
secondHash <- H.evalMaybe $ T.unpack <$> aesonSpoDist ^? Aeson.nth 1 . Aeson.nth 0 . Aeson._String
241+
secondAmount <- H.evalMaybe $ aesonSpoDist ^? Aeson.nth 1 . Aeson.nth 1 . Aeson._Number
242+
243+
-- Query individual SPO using result and ensure result is the same
244+
secondSpoInfo :: Aeson.Value <- execCliStdoutToJson execConfig [ eraName, "query", "spo-stake-distribution", "--spo-key-hash", secondHash ]
245+
individualHash <- H.evalMaybe $ T.unpack <$> secondSpoInfo ^? Aeson.nth 0 . Aeson.nth 0 . Aeson._String
246+
individualAmount <- H.evalMaybe $ secondSpoInfo ^? Aeson.nth 0 . Aeson.nth 1 . Aeson._Number
247+
secondHash === individualHash
248+
secondAmount === individualAmount
249+
250+
-- Query individual SPO using SPOs verification file
251+
let spoKey = verificationKey . poolNodeKeysCold $ Defaults.defaultSpoKeys 1
252+
fileQueryResult :: Aeson.Value <- execCliStdoutToJson execConfig [ eraName, "query", "spo-stake-distribution"
253+
, "--spo-verification-key-file", unFile spoKey
254+
]
255+
fileQueryHash <- H.evalMaybe $ T.unpack <$> fileQueryResult ^? Aeson.nth 0 . Aeson.nth 0 . Aeson._String
256+
fileQueryAmount <- H.evalMaybe $ fileQueryResult ^? Aeson.nth 0 . Aeson.nth 1 . Aeson._Number
257+
258+
-- Query individual SPO using SPOs bech32 of key and compare to previous result
259+
delegatorVKey :: VerificationKey StakePoolKey <- readVerificationKeyFromFile AsStakePoolKey work spoKey
260+
keyQueryResult :: Aeson.Value <- execCliStdoutToJson execConfig [ eraName, "query", "spo-stake-distribution"
261+
, "--spo-verification-key", T.unpack $ serialiseToBech32 delegatorVKey
262+
]
263+
keyQueryHash <- H.evalMaybe $ T.unpack <$> keyQueryResult ^? Aeson.nth 0 . Aeson.nth 0 . Aeson._String
264+
keyQueryAmount <- H.evalMaybe $ keyQueryResult ^? Aeson.nth 0 . Aeson.nth 1 . Aeson._Number
265+
fileQueryHash === keyQueryHash
266+
fileQueryAmount === keyQueryAmount
267+
233268
TestQueryStakeAddressInfoCmd ->
234269
-- stake-address-info
235270
do
@@ -362,9 +397,6 @@ hprop_cli_queries = integrationWorkspace "cli-queries" $ \tempAbsBasePath' -> H.
362397
-- treasury
363398
H.noteM_ $ execCli' execConfig [ eraName, "query", "treasury" ]
364399

365-
TestQuerySPOStakeDistributionCmd -> do
366-
pure () -- FIXME: https://github.com/IntersectMBO/cardano-node/pull/5932
367-
368400
where
369401
-- | Wait for the part of the epoch when futurePParams are known
370402
waitForFuturePParamsToStabilise

0 commit comments

Comments
 (0)