@@ -18,9 +18,14 @@ import qualified V1.ChangedMaintainersExpr as V1
1818import qualified V2.ChangedMaintainersExpr as V2
1919import qualified V1.UpgradedContractKeys as V1
2020import qualified V2.UpgradedContractKeys as V2
21+ import qualified V1.InvalidKeyUpgrade as V1
22+ import qualified V2.InvalidKeyUpgrade as V2
23+ import qualified V1.InvalidKeyRenaming as V1
24+ import qualified V2.InvalidKeyRenaming as V2
2125import qualified V1.ContractKeyPresence as V1
2226import qualified V2.ContractKeyPresence as V2
2327import qualified V1.IfaceMod as Iface
28+ import qualified V1.KeyUpgradeClient as Client
2429
2530{- PACKAGE
2631name: contract-key-upgrades-iface
@@ -107,14 +112,26 @@ main = tests
107112 ]
108113 ]
109114 ]
110- , subtree "Changed key type"
115+ , subtree "Changed key type, valid upgrade "
111116 [ subtree "Unchanged key value (modulo trailing `None`s)"
112117 [ ("queryContractKey, src=v1 tgt=v2", queryKeyUpgraded)
113118 , ("exerciseByKeyCmd, src=v1 tgt=v2", exerciseCmdKeyUpgraded)
114119 , ("fetch, src=v1 tgt=v2", fetchKeyUpgraded)
115120 , ("exerciseByKey, src=v1 tgt=v2", exerciseUpdateKeyUpgraded)
116121 ]
117122 ]
123+ , subtree "Changed key type, invalid upgrade"
124+ [ broken ("queryContractKeyCmd, global", queryInvalidKeyUpgradeGlobal)
125+ , broken ("exerciseByKeyCmd, global", exerciseInvalidKeyUpgradeGlobal)
126+ , broken ("fetch, local", fetchInvalidKeyUpgradeLocal)
127+ , broken ("exerciseByKey, local", exerciseInvalidKeyUpgradeLocal)
128+ ]
129+ , subtree "Renamed key label, invalid upgrade"
130+ [ broken ("queryContractKeyCmd, global", queryInvalidKeyRenamingGlobal)
131+ , broken ("exerciseByKeyCmd, global", exerciseInvalidKeyRenamingGlobal)
132+ , broken ("fetch, local", fetchInvalidKeyRenamingLocal)
133+ , broken ("exerciseByKey, local", exerciseInvalidKeyRenamingLocal)
134+ ]
118135 , subtree "Changed key presence"
119136 [ subtree "Key in v1, no key in v2"
120137 [ ("fetch", fetchTemplateWithUnexpectedKey)
@@ -666,6 +683,182 @@ exerciseUpdateKeyUpgraded = test $ do
666683 res <- a `submit` createAndExerciseCmd (V2.UpgradedKeyHelper a) (V2.UpgradedKeyExercise $ V2.UpgradedKeyKey a 1 None)
667684 res === "V2"
668685
686+ {- MODULE
687+ package: contract-key-upgrades
688+ contents: |
689+ module InvalidKeyUpgrade where
690+
691+ data InvalidKeyUpgradeKey = InvalidKeyUpgradeKey with
692+ p : Party
693+ n : Int -- @V 1
694+ n : Bool -- @V 2
695+ deriving (Eq, Show)
696+
697+ template InvalidKeyUpgrade
698+ with
699+ party : Party
700+ where
701+ signatory party
702+ key (InvalidKeyUpgradeKey party 0) : InvalidKeyUpgradeKey -- @V 1
703+ key (InvalidKeyUpgradeKey party False) : InvalidKeyUpgradeKey -- @V 2
704+ maintainer key.p
705+
706+ choice InvalidKeyUpgradeCall : Text
707+ controller party
708+ do pure (show (key this).n)
709+ -}
710+
711+ {- MODULE
712+ package: contract-key-upgrades
713+ contents: |
714+ module InvalidKeyRenaming where
715+
716+ data InvalidKeyRenamingKey = InvalidKeyRenamingKey with
717+ p : Party
718+ n : Int -- @V 1
719+ m : Int -- @V 2
720+ deriving (Eq, Show)
721+
722+ template InvalidKeyRenaming
723+ with
724+ party : Party
725+ where
726+ signatory party
727+ key (InvalidKeyRenamingKey party 42) : InvalidKeyRenamingKey
728+ maintainer key.p
729+
730+ choice InvalidKeyRenamingCall : Int
731+ controller party
732+ do
733+ pure (key this).n -- @V 1
734+ pure (key this).m -- @V 2
735+ -}
736+
737+ {- PACKAGE
738+ name: contract-key-upgrades-client
739+ versions: 1
740+ depends: |
741+ contract-key-upgrades-1.0.0
742+ contract-key-upgrades-2.0.0
743+ -}
744+
745+ {- MODULE
746+ package: contract-key-upgrades-client
747+ contents: |
748+ module KeyUpgradeClient where
749+
750+ import V1.InvalidKeyUpgrade as V1
751+ import V2.InvalidKeyUpgrade as V2
752+ import V1.InvalidKeyRenaming as V1
753+ import V2.InvalidKeyRenaming as V2
754+
755+ template KeyUpgradeClient
756+ with
757+ party : Party
758+ where
759+ signatory party
760+
761+ -- InvalidKeyUpgrade
762+
763+ choice InvalidKeyUpgradeFetch : (ContractId V2.InvalidKeyUpgrade, V2.InvalidKeyUpgrade)
764+ controller party
765+ do
766+ cid <- create (V1.InvalidKeyUpgrade party)
767+ fetchByKey (V2.InvalidKeyUpgradeKey party False)
768+
769+ choice InvalidKeyUpgradeExercise : Text
770+ controller party
771+ do
772+ cid <- create (V1.InvalidKeyUpgrade party)
773+ exerciseByKey @V2.InvalidKeyUpgrade (V2.InvalidKeyUpgradeKey party False) V2.InvalidKeyUpgradeCall
774+
775+ -- InvalidKeyRenaming
776+
777+ choice InvalidKeyRenamingFetch : (ContractId V2.InvalidKeyRenaming, V2.InvalidKeyRenaming)
778+ controller party
779+ do
780+ cid <- create (V1.InvalidKeyRenaming party)
781+ fetchByKey (V2.InvalidKeyRenamingKey party 42)
782+
783+ choice InvalidKeyRenamingExercise : Int
784+ controller party
785+ do
786+ cid <- create (V1.InvalidKeyRenaming party)
787+ exerciseByKey @V2.InvalidKeyRenaming (V2.InvalidKeyRenamingKey party 42) V2.InvalidKeyRenamingCall
788+ -}
789+
790+ -- InvalidKeyUpgrade
791+
792+ queryInvalidKeyUpgradeGlobal : Test
793+ queryInvalidKeyUpgradeGlobal = test $ do
794+ a <- allocateParty "alice"
795+ cid <- a `submit` createExactCmd (V1.InvalidKeyUpgrade a)
796+ keyRes <- queryContractKey @V2.InvalidKeyUpgrade a $ V2.InvalidKeyUpgradeKey a False
797+ case keyRes of
798+ None -> pure ()
799+ _ -> assertFail ("Expected None (key not found), but got: " <> show keyRes)
800+
801+ exerciseInvalidKeyUpgradeGlobal : Test
802+ exerciseInvalidKeyUpgradeGlobal = test $ do
803+ a <- allocateParty "alice"
804+ cid <- a `submit` createExactCmd (V1.InvalidKeyUpgrade a)
805+ res <- a `trySubmit` exerciseByKeyExactCmd @V2.InvalidKeyUpgrade (V2.InvalidKeyUpgradeKey a False) V2.InvalidKeyUpgradeCall
806+ case res of
807+ Left (ContractKeyNotFound _) -> pure ()
808+ _ -> assertFail ("Expected ContractKeyNotFound, but got: " <> show res)
809+
810+ fetchInvalidKeyUpgradeLocal : Test
811+ fetchInvalidKeyUpgradeLocal = test $ do
812+ a <- allocateParty "alice"
813+ res <- a `trySubmit` createAndExerciseCmd (Client.KeyUpgradeClient a) Client.InvalidKeyUpgradeFetch
814+ case res of
815+ Left (ContractKeyNotFound _) -> pure ()
816+ _ -> assertFail ("Expected ContractKeyNotFound, but got: " <> show res)
817+
818+ exerciseInvalidKeyUpgradeLocal : Test
819+ exerciseInvalidKeyUpgradeLocal = test $ do
820+ a <- allocateParty "alice"
821+ res <- a `trySubmit` createAndExerciseCmd (Client.KeyUpgradeClient a) Client.InvalidKeyUpgradeExercise
822+ case res of
823+ Left (ContractKeyNotFound _) -> pure ()
824+ _ -> assertFail ("Expected ContractKeyNotFound, but got: " <> show res)
825+
826+ -- InvalidKeyRenaming
827+
828+ queryInvalidKeyRenamingGlobal : Test
829+ queryInvalidKeyRenamingGlobal = test $ do
830+ a <- allocateParty "alice"
831+ cid <- a `submit` createExactCmd (V1.InvalidKeyRenaming a)
832+ keyRes <- queryContractKey @V2.InvalidKeyRenaming a $ V2.InvalidKeyRenamingKey a 42
833+ case keyRes of
834+ None -> pure ()
835+ _ -> assertFail ("Expected None (key not found), but got: " <> show keyRes)
836+
837+ exerciseInvalidKeyRenamingGlobal : Test
838+ exerciseInvalidKeyRenamingGlobal = test $ do
839+ a <- allocateParty "alice"
840+ cid <- a `submit` createExactCmd (V1.InvalidKeyRenaming a)
841+ res <- a `trySubmit` exerciseByKeyExactCmd @V2.InvalidKeyRenaming (V2.InvalidKeyRenamingKey a 42) V2.InvalidKeyRenamingCall
842+ case res of
843+ Left (ContractKeyNotFound _) -> pure ()
844+ _ -> assertFail ("Expected ContractKeyNotFound, but got: " <> show res)
845+
846+ fetchInvalidKeyRenamingLocal : Test
847+ fetchInvalidKeyRenamingLocal = test $ do
848+ a <- allocateParty "alice"
849+ res <- a `trySubmit` createAndExerciseCmd (Client.KeyUpgradeClient a) Client.InvalidKeyRenamingFetch
850+ case res of
851+ Left (ContractKeyNotFound _) -> pure ()
852+ _ -> assertFail ("Expected ContractKeyNotFound, but got: " <> show res)
853+
854+ exerciseInvalidKeyRenamingLocal : Test
855+ exerciseInvalidKeyRenamingLocal = test $ do
856+ a <- allocateParty "alice"
857+ res <- a `trySubmit` createAndExerciseCmd (Client.KeyUpgradeClient a) Client.InvalidKeyRenamingExercise
858+ case res of
859+ Left (ContractKeyNotFound _) -> pure ()
860+ _ -> assertFail ("Expected ContractKeyNotFound, but got: " <> show res)
861+
669862{- MODULE
670863package: contract-key-upgrades
671864contents: |
0 commit comments