github.com/cosmos/cosmos-sdk@v0.50.1/crypto/keyring/types_test.go (about)

     1  package keyring
     2  
     3  import (
     4  	"encoding/hex"
     5  	"fmt"
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/require"
     9  
    10  	"github.com/cosmos/cosmos-sdk/crypto/hd"
    11  	"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
    12  	sdk "github.com/cosmos/cosmos-sdk/types"
    13  )
    14  
    15  func Test_writeReadLedgerInfo(t *testing.T) {
    16  	tests := []struct {
    17  		hexPK        string
    18  		recordName   string
    19  		expectedPath string
    20  	}{
    21  		{
    22  			hexPK:        "035AD6810A47F073553FF30D2FCC7E0D3B1C0B74B61A1AAA2582344037151E143A",
    23  			recordName:   "test_record",
    24  			expectedPath: "m/44'/118'/5'/0/1",
    25  		},
    26  	}
    27  	for _, tt := range tests {
    28  		t.Run(tt.hexPK, func(t *testing.T) {
    29  			tmpKey := make([]byte, secp256k1.PubKeySize)
    30  			hexPK := tt.hexPK
    31  			bz, err := hex.DecodeString(hexPK)
    32  			require.NoError(t, err)
    33  			copy(tmpKey, bz)
    34  
    35  			pk := &secp256k1.PubKey{Key: tmpKey}
    36  			path := hd.NewFundraiserParams(5, sdk.CoinType, 1)
    37  			k, err := NewLedgerRecord(tt.recordName, pk, path)
    38  			require.NoError(t, err)
    39  
    40  			l := k.GetLedger()
    41  			require.NotNil(t, l)
    42  			path = l.Path
    43  			require.Equal(t, tt.expectedPath, path.String())
    44  			pubKey, err := k.GetPubKey()
    45  			require.NoError(t, err)
    46  			require.Equal(t,
    47  				fmt.Sprintf("PubKeySecp256k1{%s}", hexPK),
    48  				pubKey.String())
    49  
    50  			// Serialize and restore
    51  			cdc := getCodec()
    52  			serialized, err := cdc.Marshal(k)
    53  			require.NoError(t, err)
    54  			var restoredRecord Record
    55  			err = cdc.Unmarshal(serialized, &restoredRecord)
    56  			require.NoError(t, err)
    57  			require.NotNil(t, restoredRecord)
    58  
    59  			// Check both keys match
    60  			require.Equal(t, k.Name, restoredRecord.Name)
    61  			require.Equal(t, k.GetType(), restoredRecord.GetType())
    62  
    63  			restoredPubKey, err := restoredRecord.GetPubKey()
    64  			require.NoError(t, err)
    65  			require.Equal(t, pubKey, restoredPubKey)
    66  
    67  			l = restoredRecord.GetLedger()
    68  			require.NotNil(t, l)
    69  			restoredPath := l.GetPath()
    70  			require.NoError(t, err)
    71  			require.Equal(t, path, restoredPath)
    72  		})
    73  	}
    74  }