Skip to content

Commit 1bf8e74

Browse files
committed
Added a test for decoding duplicate certs
1 parent 6c24032 commit 1bf8e74

File tree

5 files changed

+67
-11
lines changed

5 files changed

+67
-11
lines changed

eras/conway/impl/testlib/Test/Cardano/Ledger/Conway/Binary/Golden.hs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
module Test.Cardano.Ledger.Conway.Binary.Golden (
1212
expectDecoderResultOn,
13-
expectDecoderFailure,
13+
expectDecoderFailureAnn,
1414
listRedeemersEnc,
1515
goldenListRedeemers,
1616
) where
@@ -50,14 +50,14 @@ import Test.Cardano.Ledger.Common (
5050
)
5151
import Test.Cardano.Ledger.Conway.Era (ConwayEraTest)
5252

53-
expectDecoderFailure ::
53+
expectDecoderFailureAnn ::
5454
forall a.
5555
(ToExpr a, DecCBOR (Annotator a), Typeable a, HasCallStack) =>
5656
Version ->
5757
Enc ->
5858
DecoderError ->
5959
Expectation
60-
expectDecoderFailure version enc expectedErr =
60+
expectDecoderFailureAnn version enc expectedErr =
6161
case result of
6262
Left err -> err `shouldBe` expectedErr
6363
Right x ->

eras/dijkstra/impl/cardano-ledger-dijkstra.cabal

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ library testlib
140140
cardano-ledger-allegra:{cardano-ledger-allegra, testlib},
141141
cardano-ledger-alonzo:{cardano-ledger-alonzo, testlib},
142142
cardano-ledger-babbage:{cardano-ledger-babbage, testlib},
143-
cardano-ledger-binary,
143+
cardano-ledger-binary:{cardano-ledger-binary, testlib},
144144
cardano-ledger-conway:{cardano-ledger-conway, testlib},
145145
cardano-ledger-core:{cardano-ledger-core, testlib},
146146
cardano-ledger-dijkstra,
221 Bytes
Binary file not shown.

eras/dijkstra/impl/test/Main.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,4 @@ main =
3131
txInfoSpec @DijkstraEra SPlutusV3
3232
txInfoSpec @DijkstraEra SPlutusV4
3333
describe "Golden" $ do
34-
Golden.goldenListRedeemersDisallowed @DijkstraEra
34+
Golden.spec @DijkstraEra
Lines changed: 62 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,83 @@
11
{-# LANGUAGE AllowAmbiguousTypes #-}
22
{-# LANGUAGE OverloadedStrings #-}
3+
{-# LANGUAGE PatternSynonyms #-}
34
{-# LANGUAGE RankNTypes #-}
45
{-# LANGUAGE ScopedTypeVariables #-}
56
{-# LANGUAGE TypeApplications #-}
67

78
module Test.Cardano.Ledger.Dijkstra.Binary.Golden (
8-
goldenListRedeemersDisallowed,
9+
spec,
910
) where
1011

1112
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)
1631
import Test.Cardano.Ledger.Dijkstra.Era (DijkstraEraTest)
1732

33+
spec :: forall era. DijkstraEraTest era => Spec
34+
spec = describe "Golden" $ do
35+
goldenListRedeemersDisallowed @era
36+
goldenDuplicateCertsDisallowed @era
37+
1838
goldenListRedeemersDisallowed :: forall era. DijkstraEraTest era => Spec
1939
goldenListRedeemersDisallowed =
2040
it "Decoding Redeemers encoded as a list fails" $
21-
expectDecoderFailure @(Redeemers era)
41+
expectDecoderFailureAnn @(Redeemers era)
2242
(eraProtVerLow @era)
2343
listRedeemersEnc
2444
( DecoderErrorDeserialiseFailure
2545
"Annotator (MemoBytes (RedeemersRaw DijkstraEra))"
2646
(DeserialiseFailure 0 "List encoding of redeemers not supported starting with PV 12")
2747
)
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

Comments
 (0)