cardano-addresses-4.0.0: test/Command/Key/InspectSpec.hs
{-# LANGUAGE FlexibleContexts #-}
module Command.Key.InspectSpec
( spec
) where
import Prelude
import Cardano.Address.Derivation
( xprvChainCode
, xprvPrivateKey
, xprvToBytes
, xpubChainCode
, xpubPublicKey
, xpubToBytes
)
import Codec.Binary.Bech32
( HumanReadablePart )
import Codec.Binary.Encoding
( AbstractEncoding (..), encode )
import Data.ByteString
( ByteString )
import Test.Hspec
( Spec, SpecWith, it, shouldContain )
import Test.QuickCheck
( arbitrary, generate )
import Test.Utils
( cli, describeCmd )
import Test.Arbitrary
()
import qualified Cardano.Codec.Bech32.Prefixes as CIP5
import qualified Data.Text as T
import qualified Data.Text.Encoding as T
spec :: Spec
spec = describeCmd [ "key", "inspect" ] $ do
specInspectPrivate CIP5.root_xsk
specInspectPrivate CIP5.acct_xsk
specInspectPrivate CIP5.addr_xsk
specInspectPrivate CIP5.stake_xsk
specInspectPrivate CIP5.root_shared_xsk
specInspectPrivate CIP5.acct_shared_xsk
specInspectPrivate CIP5.addr_shared_xsk
specInspectPrivate CIP5.stake_shared_xsk
specInspectPrivate CIP5.policy_xsk
specInspectPrivate CIP5.drep_xsk
specInspectPrivate CIP5.cc_cold_xsk
specInspectPrivate CIP5.cc_hot_xsk
specInspectPublic CIP5.root_xvk
specInspectPublic CIP5.acct_xvk
specInspectPublic CIP5.addr_xvk
specInspectPublic CIP5.stake_xvk
specInspectPublic CIP5.policy_xvk
specInspectPublic CIP5.root_shared_xvk
specInspectPublic CIP5.acct_shared_xvk
specInspectPublic CIP5.addr_shared_xvk
specInspectPublic CIP5.stake_shared_xvk
specInspectPublic CIP5.drep_xvk
specInspectPublic CIP5.cc_cold_xvk
specInspectPublic CIP5.cc_hot_xvk
specInspectPrivate :: HumanReadablePart -> SpecWith ()
specInspectPrivate hrp = it "can inspect private key" $ do
xprv <- generate arbitrary
let cc = base16 $ xprvChainCode xprv
let prv = base16 $ xprvPrivateKey xprv
out <- cli [ "key", "inspect" ] (bech32 hrp $ xprvToBytes xprv)
out `shouldContain` "private"
out `shouldContain` cc
out `shouldContain` prv
specInspectPublic :: HumanReadablePart -> SpecWith ()
specInspectPublic hrp = it "can inspect public key" $ do
xpub <- generate arbitrary
let cc = base16 $ xpubChainCode xpub
let pub = base16 $ xpubPublicKey xpub
out <- cli [ "key", "inspect" ] (bech32 hrp $ xpubToBytes xpub)
out `shouldContain` "public"
out `shouldContain` cc
out `shouldContain` pub
base16 :: ByteString -> String
base16 = T.unpack . T.decodeUtf8 . encode EBase16
bech32 :: HumanReadablePart -> ByteString -> String
bech32 hrp = T.unpack . T.decodeUtf8 . encode (EBech32 hrp)