From 8287b765787fb3d41559488fe2514947e2c22389 Mon Sep 17 00:00:00 2001 From: Pablo Lamela Date: Tue, 15 Oct 2024 12:49:39 +0200 Subject: [PATCH] Add test to hash check in `governance vote create` --- cardano-cli/cardano-cli.cabal | 1 + .../Test/Cli/Governance/Vote.hs | 74 +++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 cardano-cli/test/cardano-cli-test/Test/Cli/Governance/Vote.hs diff --git a/cardano-cli/cardano-cli.cabal b/cardano-cli/cardano-cli.cabal index 47c3ed4c4..141e0fc29 100644 --- a/cardano-cli/cardano-cli.cabal +++ b/cardano-cli/cardano-cli.cabal @@ -340,6 +340,7 @@ test-suite cardano-cli-test Test.Cli.Governance.Committee Test.Cli.Governance.DRep Test.Cli.Governance.Hash + Test.Cli.Governance.Vote Test.Cli.Hash Test.Cli.ITN Test.Cli.Json diff --git a/cardano-cli/test/cardano-cli-test/Test/Cli/Governance/Vote.hs b/cardano-cli/test/cardano-cli-test/Test/Cli/Governance/Vote.hs new file mode 100644 index 000000000..0327d540d --- /dev/null +++ b/cardano-cli/test/cardano-cli-test/Test/Cli/Governance/Vote.hs @@ -0,0 +1,74 @@ +{-# LANGUAGE FlexibleContexts #-} + +module Test.Cli.Governance.Vote where + +import Cardano.Api (MonadIO) + +import Control.Monad (void) +import Control.Monad.Catch (MonadCatch) +import Control.Monad.Trans.Control (MonadBaseControl) + +import Test.Cardano.CLI.Hash (exampleAnchorDataHash, exampleAnchorDataIpfsHash, + exampleAnchorDataPathTest, serveFilesWhile, tamperBase16Hash) +import Test.Cardano.CLI.Util (execCardanoCLIWithEnvVars, expectFailure, noteInputFile, + propertyOnce) + +import Hedgehog (MonadTest, Property) +import qualified Hedgehog as H +import qualified Hedgehog.Extras as H + +-- | Execute me with: +-- @cabal test cardano-cli-test --test-options '-p "/governance vote create wrong hash fails/"'@ +hprop_governance_vote_create_wrong_hash_fails :: Property +hprop_governance_vote_create_wrong_hash_fails = + propertyOnce . expectFailure . H.moduleWorkspace "tmp" $ \tempDir -> do + -- We modify the hash slightly so that the hash check fails + alteredHash <- H.evalMaybe $ tamperBase16Hash exampleAnchorDataHash + -- We run the test with the altered + baseGovernanceVoteCreateHashCheck + alteredHash + tempDir + +-- | Execute me with: +-- @cabal test cardano-cli-test --test-options '-p "/governance vote create right hash works/"'@ +hprop_governance_vote_create_right_hash_works :: Property +hprop_governance_vote_create_right_hash_works = + propertyOnce . H.moduleWorkspace "tmp" $ \tempDir -> + baseGovernanceVoteCreateHashCheck exampleAnchorDataHash tempDir + +baseGovernanceVoteCreateHashCheck + :: (MonadBaseControl IO m, MonadTest m, MonadIO m, MonadCatch m) => String -> FilePath -> m () +baseGovernanceVoteCreateHashCheck hash tempDir = do + vkeyFile <- noteInputFile "test/cardano-cli-golden/files/input/drep.vkey" + voteFile <- H.noteTempFile tempDir "vote" + + let relativeUrl = ["ipfs", exampleAnchorDataIpfsHash] + + -- Create temporary HTTP server with files required by the call to `cardano-cli` + -- In this case, the server emulates an IPFS gateway + serveFilesWhile + [(relativeUrl, exampleAnchorDataPathTest)] + ( \port -> do + void $ + execCardanoCLIWithEnvVars + [("IPFS_GATEWAY_URI", "http://localhost:" ++ show port ++ "/")] + [ "conway" + , "governance" + , "vote" + , "create" + , "--yes" + , "--governance-action-tx-id" + , "b1015258a99351c143a7a40b7b58f033ace10e3cc09c67780ed5b2b0992aa60a" + , "--governance-action-index" + , "5" + , "--drep-verification-key-file" + , vkeyFile + , "--out-file" + , voteFile + , "--anchor-url" + , "ipfs://" ++ exampleAnchorDataIpfsHash + , "--anchor-data-hash" + , hash + , "--check-anchor-data-hash" + ] + )