Skip to content

Commit

Permalink
Add round trip tests for ledger config
Browse files Browse the repository at this point in the history
  • Loading branch information
DavidEichmann authored and jasagredo committed Feb 17, 2025
1 parent 8becbc0 commit 8ab1971
Show file tree
Hide file tree
Showing 7 changed files with 515 additions and 1 deletion.
124 changes: 124 additions & 0 deletions ouroboros-consensus-byron-test/ouroboros-consensus-byron-test.cabal
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
name: ouroboros-consensus-byron-test
version: 0.1.0.0
synopsis: Test infrastructure for Byron
-- description:
license: Apache-2.0
license-files:
LICENSE
NOTICE
copyright: 2020 Input Output (Hong Kong) Ltd.
author: IOHK Engineering Team
maintainer: [email protected]
category: Network
build-type: Simple
cabal-version: >=1.10

source-repository head
type: git
location: https://github.com/input-output-hk/ouroboros-network

library
hs-source-dirs: src

exposed-modules:
Ouroboros.Consensus.ByronDual.Ledger
Ouroboros.Consensus.ByronDual.Node
Ouroboros.Consensus.ByronDual.Node.Serialisation

Test.Consensus.Byron.Examples
Test.Consensus.Byron.Generators
Test.ThreadNet.Infra.Byron
Test.ThreadNet.Infra.Byron.Genesis
Test.ThreadNet.Infra.Byron.ProtocolInfo
Test.ThreadNet.Infra.Byron.TrackUpdates
Test.ThreadNet.TxGen.Byron

build-depends: base >=4.9 && <4.15
, bytestring >=0.10 && <0.11
, base64-bytestring
, cardano-binary
, cardano-crypto
, cardano-crypto-class
, cardano-crypto-test
, cardano-crypto-wrapper
, cardano-ledger-byron
, cardano-ledger-byron-test
, containers >=0.5 && <0.7
, hedgehog-quickcheck
, mtl >=2.2 && <2.3
, QuickCheck
, serialise >=0.2 && <0.3
, text

, byron-spec-ledger

, ouroboros-network
, ouroboros-consensus
, ouroboros-consensus-test
, ouroboros-consensus-byron
, ouroboros-consensus-byronspec


default-language: Haskell2010
ghc-options: -Wall
-Wcompat
-Wincomplete-uni-patterns
-Wincomplete-record-updates
-Wpartial-fields
-Widentities
-Wredundant-constraints
-Wmissing-export-lists
-fno-ignore-asserts

test-suite test
type: exitcode-stdio-1.0
hs-source-dirs: test
main-is: Main.hs
other-modules:
Test.Consensus.Byron.Golden
Test.Consensus.Byron.Serialisation
Test.ThreadNet.Byron
Test.ThreadNet.DualByron

build-depends: base
, binary-search
, bytestring
, cardano-binary
, cardano-crypto-class
, cardano-crypto-wrapper
, cardano-ledger-byron
, cardano-ledger-byron-test
, cardano-slotting
, cborg
, containers
, filepath
, hedgehog-quickcheck
, mtl
, QuickCheck
, tasty
, tasty-quickcheck

, byron-spec-chain
, byron-spec-ledger
, small-steps
, small-steps-test

, ouroboros-network
, ouroboros-consensus
, ouroboros-consensus-test
, ouroboros-consensus-byron
, ouroboros-consensus-byron-test
, ouroboros-consensus-byronspec

default-language: Haskell2010
ghc-options: -Wall
-Wcompat
-Wincomplete-uni-patterns
-Wincomplete-record-updates
-Wpartial-fields
-Widentities
-Wredundant-constraints
-Wmissing-export-lists
-fno-ignore-asserts
-threaded
-rtsopts
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,31 @@ module Test.Consensus.Byron.Generators (
, protocolMagicId
) where

<<<<<<< HEAD:ouroboros-consensus-cardano/src/unstable-byron-testlib/Test/Consensus/Byron/Generators.hs
||||||| parent of 247fc7048... Add round trip tests for ledger config:ouroboros-consensus-byron-test/src/Test/Consensus/Byron/Generators.hs
import Control.Monad (replicateM)
import Data.Coerce (coerce)
import qualified Data.Map.Strict as Map

import Cardano.Binary (fromCBOR, toCBOR)
=======
import Control.Monad (replicateM)
import qualified Data.ByteString as BS
import qualified Data.ByteString.Base64 as B64
import qualified Data.ByteString.Char8 as BSC8
import Data.Coerce (coerce)
import qualified Data.Map.Strict as Map
import Data.String (IsString (fromString))
import qualified Data.Text as T

import Cardano.Binary (fromCBOR, toCBOR)
>>>>>>> 247fc7048... Add round trip tests for ledger config:ouroboros-consensus-byron-test/src/Test/Consensus/Byron/Generators.hs
import Cardano.Chain.Block (ABlockOrBoundary (..),
ABlockOrBoundaryHdr (..))
import qualified Cardano.Chain.Block as CC.Block
import qualified Cardano.Chain.Byron.API as API
import Cardano.Chain.Common (KeyHash)
import Cardano.Chain.Common (Address, BlockCount (..), CompactAddress,
KeyHash, Lovelace)
import qualified Cardano.Chain.Delegation as CC.Del
import qualified Cardano.Chain.Delegation.Validation.Activation as CC.Act
import qualified Cardano.Chain.Delegation.Validation.Interface as CC.DI
Expand All @@ -25,13 +45,28 @@ import Cardano.Chain.Slotting (EpochNumber, EpochSlots (..),
import qualified Cardano.Chain.Update as CC.Update
import qualified Cardano.Chain.Update.Validation.Interface as CC.UPI
import qualified Cardano.Chain.Update.Validation.Registration as CC.Reg
<<<<<<< HEAD:ouroboros-consensus-cardano/src/unstable-byron-testlib/Test/Consensus/Byron/Generators.hs
import qualified Cardano.Chain.UTxO as CC.UTxO
import Cardano.Crypto (ProtocolMagicId (..))
||||||| parent of 247fc7048... Add round trip tests for ledger config:ouroboros-consensus-byron-test/src/Test/Consensus/Byron/Generators.hs
import Cardano.Crypto (ProtocolMagicId (..))
=======
import Cardano.Crypto (ProtocolMagicId (..),
RequiresNetworkMagic (..))
>>>>>>> 247fc7048... Add round trip tests for ledger config:ouroboros-consensus-byron-test/src/Test/Consensus/Byron/Generators.hs
import Cardano.Crypto.Hashing (Hash)
<<<<<<< HEAD:ouroboros-consensus-cardano/src/unstable-byron-testlib/Test/Consensus/Byron/Generators.hs
import Cardano.Ledger.Binary (decCBOR, encCBOR)
import Control.Monad (replicateM)
import Data.Coerce (coerce)
import qualified Data.Map.Strict as Map
||||||| parent of 247fc7048... Add round trip tests for ledger config:ouroboros-consensus-byron-test/src/Test/Consensus/Byron/Generators.hs

=======
import Cardano.Crypto.Signing
import qualified Cardano.Crypto.Wallet as Wallet

>>>>>>> 247fc7048... Add round trip tests for ledger config:ouroboros-consensus-byron-test/src/Test/Consensus/Byron/Generators.hs
import Ouroboros.Consensus.Block
import Ouroboros.Consensus.Byron.Ledger
import Ouroboros.Consensus.Byron.Protocol
Expand Down Expand Up @@ -72,6 +107,82 @@ epochSlots = EpochSlots 100
protocolMagicId :: ProtocolMagicId
protocolMagicId = ProtocolMagicId 100

instance Arbitrary CC.Genesis.Config where
arbitrary = CC.Genesis.Config
<$> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary

instance Arbitrary CC.Genesis.GenesisData where
arbitrary = CC.Genesis.GenesisData
<$> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary

instance Arbitrary CC.Genesis.GenesisKeyHashes where
arbitrary = CC.Genesis.GenesisKeyHashes <$> arbitrary

instance Arbitrary CC.Genesis.GenesisDelegation where
arbitrary = (CC.Genesis.mkGenesisDelegation <$> arbitrary)
`suchThatMap` (either (const Nothing) Just)

instance Arbitrary (CC.Del.ACertificate ()) where
arbitrary = CC.Del.signCertificate
<$> arbitrary
<*> arbitrary
<*> arbitrary
<*> arbitrary

instance Arbitrary SafeSigner where
arbitrary = do
seed <- BS.pack <$> sequence (replicate 32 arbitrary)
passPhrase <- BS.pack <$> sequence (replicate passphraseLength arbitrary)
let xprv = Wallet.generate seed passPhrase
return $ SafeSigner (SigningKey xprv) (PassPhrase (fromString (BSC8.unpack passPhrase)))

instance Arbitrary VerificationKey where
arbitrary = either (error . show) id . parseFullVerificationKey <$>
(T.pack . BSC8.unpack . B64.encode <$> arbitraryKey)
where
-- The key must be 64 bytes
arbitraryKey = BS.pack <$> sequence (replicate 64 arbitrary)

instance Arbitrary CC.Genesis.GenesisNonAvvmBalances where
arbitrary = CC.Genesis.GenesisNonAvvmBalances <$> arbitrary

instance Arbitrary Address where
arbitrary = hedgehog CC.genAddress

instance Arbitrary Lovelace where
arbitrary = hedgehog CC.genLovelace

instance Arbitrary CC.Genesis.GenesisAvvmBalances where
arbitrary = CC.Genesis.GenesisAvvmBalances <$> arbitrary

instance Arbitrary CompactRedeemVerificationKey where
arbitrary = hedgehog CC.genCompactRedeemVerificationKey

instance Arbitrary BlockCount where
arbitrary = hedgehog CC.genBlockCount

instance Arbitrary RequiresNetworkMagic where
arbitrary = hedgehog CC.genRequiresNetworkMagic

instance Arbitrary ProtocolMagicId where
arbitrary = hedgehog CC.genProtocolMagicId

instance Arbitrary CC.UTxO.UTxOConfiguration where
arbitrary = CC.UTxO.UTxOConfiguration <$> arbitrary

instance Arbitrary CompactAddress where
arbitrary = hedgehog CC.genCompactAddress

-- | A 'ByronBlock' that is never an EBB.
newtype RegularBlock = RegularBlock { unRegularBlock :: ByronBlock }
deriving (Eq, Show)
Expand Down
Loading

0 comments on commit 8ab1971

Please sign in to comment.