github.com/cosmos/cosmos-sdk@v0.50.1/crypto/keyring/record_test.go (about) 1 package keyring 2 3 import ( 4 "strings" 5 "testing" 6 7 "github.com/stretchr/testify/suite" 8 9 "github.com/cosmos/cosmos-sdk/codec" 10 codectypes "github.com/cosmos/cosmos-sdk/codec/types" 11 "github.com/cosmos/cosmos-sdk/crypto/hd" 12 "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" 13 cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" 14 ) 15 16 type RecordTestSuite struct { 17 suite.Suite 18 19 appName string 20 cdc codec.Codec 21 priv cryptotypes.PrivKey 22 pub cryptotypes.PubKey 23 } 24 25 func (s *RecordTestSuite) SetupSuite() { 26 s.appName = "cosmos" 27 s.cdc = getCodec() 28 s.priv = cryptotypes.PrivKey(ed25519.GenPrivKey()) 29 s.pub = s.priv.PubKey() 30 } 31 32 func (s *RecordTestSuite) TestOfflineRecordMarshaling() { 33 k, err := NewOfflineRecord("testrecord", s.pub) 34 s.Require().NoError(err) 35 36 bz, err := s.cdc.Marshal(k) 37 s.Require().NoError(err) 38 39 var k2 Record 40 s.Require().NoError(s.cdc.Unmarshal(bz, &k2)) 41 s.Require().Equal(k.Name, k2.Name) 42 s.Require().True(k.PubKey.Equal(k2.PubKey)) 43 44 pk2, err := k2.GetPubKey() 45 s.Require().NoError(err) 46 s.Require().True(s.pub.Equals(pk2)) 47 } 48 49 func (s *RecordTestSuite) TestLocalRecordMarshaling() { 50 dir := s.T().TempDir() 51 mockIn := strings.NewReader("") 52 53 kb, err := New(s.appName, BackendTest, dir, mockIn, s.cdc) 54 s.Require().NoError(err) 55 56 k, err := NewLocalRecord("testrecord", s.priv, s.pub) 57 s.Require().NoError(err) 58 59 ks, ok := kb.(keystore) 60 s.Require().True(ok) 61 62 bz, err := ks.cdc.Marshal(k) 63 s.Require().NoError(err) 64 65 k2, err := ks.protoUnmarshalRecord(bz) 66 s.Require().NoError(err) 67 s.Require().Equal(k.Name, k2.Name) 68 // not sure if this will work -- we can remove this line, the later check is better. 69 s.Require().True(k.PubKey.Equal(k2.PubKey)) 70 71 pub2, err := k2.GetPubKey() 72 s.Require().NoError(err) 73 s.Require().True(s.pub.Equals(pub2)) 74 75 localRecord2 := k2.GetLocal() 76 s.Require().NotNil(localRecord2) 77 anyPrivKey, err := codectypes.NewAnyWithValue(s.priv) 78 s.Require().NoError(err) 79 s.Require().Equal(localRecord2.PrivKey, anyPrivKey) 80 } 81 82 func (s *RecordTestSuite) TestLedgerRecordMarshaling() { 83 dir := s.T().TempDir() 84 mockIn := strings.NewReader("") 85 86 kb, err := New(s.appName, BackendTest, dir, mockIn, s.cdc) 87 s.Require().NoError(err) 88 89 path := hd.NewFundraiserParams(4, 12345, 57) 90 k, err := NewLedgerRecord("testrecord", s.pub, path) 91 s.Require().NoError(err) 92 93 ks, ok := kb.(keystore) 94 s.Require().True(ok) 95 96 bz, err := ks.cdc.Marshal(k) 97 s.Require().NoError(err) 98 99 k2, err := ks.protoUnmarshalRecord(bz) 100 s.Require().NoError(err) 101 s.Require().Equal(k.Name, k2.Name) 102 // not sure if this will work -- we can remove this line, the later check is better. 103 s.Require().True(k.PubKey.Equal(k2.PubKey)) 104 105 pub2, err := k2.GetPubKey() 106 s.Require().NoError(err) 107 s.Require().True(s.pub.Equals(pub2)) 108 109 ledgerRecord2 := k2.GetLedger() 110 s.Require().NotNil(ledgerRecord2) 111 s.Require().Nil(k2.GetLocal()) 112 113 s.Require().Equal(ledgerRecord2.Path.String(), path.String()) 114 } 115 116 func (s *RecordTestSuite) TestExtractPrivKeyFromLocalRecord() { 117 // use proto serialize 118 k, err := NewLocalRecord("testrecord", s.priv, s.pub) 119 s.Require().NoError(err) 120 121 privKey2, err := extractPrivKeyFromRecord(k) 122 s.Require().NoError(err) 123 s.Require().True(privKey2.Equals(s.priv)) 124 } 125 126 func (s *RecordTestSuite) TestExtractPrivKeyFromOfflineRecord() { 127 k, err := NewOfflineRecord("testrecord", s.pub) 128 s.Require().NoError(err) 129 130 privKey2, err := extractPrivKeyFromRecord(k) 131 s.Require().Error(err) 132 s.Require().Nil(privKey2) 133 } 134 135 func TestRecordTestSuite(t *testing.T) { 136 suite.Run(t, new(RecordTestSuite)) 137 }