|
1 | 1 | {-# LANGUAGE AllowAmbiguousTypes #-} |
2 | 2 | {-# LANGUAGE OverloadedStrings #-} |
| 3 | +{-# LANGUAGE PatternSynonyms #-} |
3 | 4 | {-# LANGUAGE RankNTypes #-} |
4 | 5 | {-# LANGUAGE ScopedTypeVariables #-} |
5 | 6 | {-# LANGUAGE TypeApplications #-} |
6 | 7 |
|
7 | 8 | module Test.Cardano.Ledger.Dijkstra.Binary.Golden ( |
8 | | - goldenListRedeemersDisallowed, |
| 9 | + spec, |
9 | 10 | ) where |
10 | 11 |
|
11 | 12 | import Cardano.Ledger.Alonzo.TxWits (Redeemers) |
12 | | -import Cardano.Ledger.Binary (DecoderError (..), DeserialiseFailure (..)) |
13 | | -import Cardano.Ledger.Dijkstra.Core (eraProtVerLow) |
14 | | -import Test.Cardano.Ledger.Common (Spec, it) |
15 | | -import Test.Cardano.Ledger.Conway.Binary.Golden (expectDecoderFailure, listRedeemersEnc) |
| 13 | +import Cardano.Ledger.BaseTypes (Version) |
| 14 | +import Cardano.Ledger.Binary (DecoderError (..), DeserialiseFailure (..), Tokens (..)) |
| 15 | +import Cardano.Ledger.Coin (Coin (..)) |
| 16 | +import Cardano.Ledger.Conway.TxCert (Delegatee (..)) |
| 17 | +import Cardano.Ledger.Credential (Credential (..)) |
| 18 | +import Cardano.Ledger.Dijkstra.Core ( |
| 19 | + EraTxBody (..), |
| 20 | + EraTxOut (..), |
| 21 | + TxLevel (..), |
| 22 | + eraProtVerLow, |
| 23 | + pattern DelegTxCert, |
| 24 | + ) |
| 25 | +import Cardano.Ledger.TxIn (TxIn (..)) |
| 26 | +import qualified Data.Set as Set |
| 27 | +import Test.Cardano.Ledger.Binary.Plain.Golden (Enc (..)) |
| 28 | +import Test.Cardano.Ledger.Common (Spec, describe, it) |
| 29 | +import Test.Cardano.Ledger.Conway.Binary.Golden (expectDecoderFailureAnn, listRedeemersEnc) |
| 30 | +import Test.Cardano.Ledger.Core.KeyPair (mkKeyHash) |
16 | 31 | import Test.Cardano.Ledger.Dijkstra.Era (DijkstraEraTest) |
17 | 32 |
|
| 33 | +spec :: forall era. DijkstraEraTest era => Spec |
| 34 | +spec = describe "Golden" $ do |
| 35 | + goldenListRedeemersDisallowed @era |
| 36 | + goldenDuplicateCertsDisallowed @era |
| 37 | + |
18 | 38 | goldenListRedeemersDisallowed :: forall era. DijkstraEraTest era => Spec |
19 | 39 | goldenListRedeemersDisallowed = |
20 | 40 | it "Decoding Redeemers encoded as a list fails" $ |
21 | | - expectDecoderFailure @(Redeemers era) |
| 41 | + expectDecoderFailureAnn @(Redeemers era) |
22 | 42 | (eraProtVerLow @era) |
23 | 43 | listRedeemersEnc |
24 | 44 | ( DecoderErrorDeserialiseFailure |
25 | 45 | "Annotator (MemoBytes (RedeemersRaw DijkstraEra))" |
26 | 46 | (DeserialiseFailure 0 "List encoding of redeemers not supported starting with PV 12") |
27 | 47 | ) |
| 48 | + |
| 49 | +duplicateCertsTx :: forall era. DijkstraEraTest era => Version -> Enc |
| 50 | +duplicateCertsTx v = |
| 51 | + mconcat |
| 52 | + [ E $ TkMapLen 4 |
| 53 | + , Em [E @Int 0, Ev v $ Set.empty @TxIn] |
| 54 | + , Em [E @Int 1, Ev v $ [] @(TxOut era)] |
| 55 | + , Em [E @Int 2, E $ Coin 0] |
| 56 | + , Em |
| 57 | + [ E @Int 4 |
| 58 | + , Em |
| 59 | + [ E $ TkTag 258 |
| 60 | + , E $ TkListLen 2 |
| 61 | + , Ev v cert |
| 62 | + , Ev v cert |
| 63 | + ] |
| 64 | + ] |
| 65 | + ] |
| 66 | + where |
| 67 | + cert = DelegTxCert @era (KeyHashObj (mkKeyHash 0)) (DelegStake (mkKeyHash 1)) |
| 68 | + |
| 69 | +goldenDuplicateCertsDisallowed :: forall era. DijkstraEraTest era => Spec |
| 70 | +goldenDuplicateCertsDisallowed = |
| 71 | + it "Decoding a transaction body with duplicate certificates fails" $ |
| 72 | + expectDecoderFailureAnn @(TxBody TopTx era) |
| 73 | + version |
| 74 | + (duplicateCertsTx @era version) |
| 75 | + ( DecoderErrorDeserialiseFailure |
| 76 | + "Annotator (MemoBytes (DijkstraTxBodyRaw TopTx DijkstraEra))" |
| 77 | + ( DeserialiseFailure |
| 78 | + 143 |
| 79 | + "Final number of elements: 1 does not match the total count that was decoded: 2" |
| 80 | + ) |
| 81 | + ) |
| 82 | + where |
| 83 | + version = eraProtVerLow @era |
0 commit comments