github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/x/gov/simulation/decoder_test.go (about)

     1  package simulation
     2  
     3  import (
     4  	"encoding/binary"
     5  	"fmt"
     6  	"testing"
     7  	"time"
     8  
     9  	"github.com/stretchr/testify/require"
    10  
    11  	"github.com/fibonacci-chain/fbc/libs/tendermint/crypto/ed25519"
    12  	tmkv "github.com/fibonacci-chain/fbc/libs/tendermint/libs/kv"
    13  
    14  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec"
    15  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
    16  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/gov/types"
    17  )
    18  
    19  var (
    20  	delPk1   = ed25519.GenPrivKey().PubKey()
    21  	delAddr1 = sdk.AccAddress(delPk1.Address())
    22  )
    23  
    24  func makeTestCodec() (cdc *codec.Codec) {
    25  	cdc = codec.New()
    26  	sdk.RegisterCodec(cdc)
    27  	codec.RegisterCrypto(cdc)
    28  	types.RegisterCodec(cdc)
    29  	return
    30  }
    31  
    32  func TestDecodeStore(t *testing.T) {
    33  	cdc := makeTestCodec()
    34  
    35  	endTime := time.Now().UTC()
    36  
    37  	content := types.ContentFromProposalType("test", "test", types.ProposalTypeText)
    38  	proposal := types.NewProposal(content, 1, endTime, endTime.Add(24*time.Hour))
    39  	proposalIDBz := make([]byte, 8)
    40  	binary.LittleEndian.PutUint64(proposalIDBz, 1)
    41  	deposit := types.NewDeposit(1, delAddr1, sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdk.OneInt())))
    42  	vote := types.NewVote(1, delAddr1, types.OptionYes)
    43  
    44  	kvPairs := tmkv.Pairs{
    45  		tmkv.Pair{Key: types.ProposalKey(1), Value: cdc.MustMarshalBinaryLengthPrefixed(proposal)},
    46  		tmkv.Pair{Key: types.InactiveProposalQueueKey(1, endTime), Value: proposalIDBz},
    47  		tmkv.Pair{Key: types.DepositKey(1, delAddr1), Value: cdc.MustMarshalBinaryLengthPrefixed(deposit)},
    48  		tmkv.Pair{Key: types.VoteKey(1, delAddr1), Value: cdc.MustMarshalBinaryLengthPrefixed(vote)},
    49  		tmkv.Pair{Key: []byte{0x99}, Value: []byte{0x99}},
    50  	}
    51  
    52  	tests := []struct {
    53  		name        string
    54  		expectedLog string
    55  	}{
    56  		{"proposals", fmt.Sprintf("%v\n%v", proposal, proposal)},
    57  		{"proposal IDs", "proposalIDA: 1\nProposalIDB: 1"},
    58  		{"deposits", fmt.Sprintf("%v\n%v", deposit, deposit)},
    59  		{"votes", fmt.Sprintf("%v\n%v", vote, vote)},
    60  		{"other", ""},
    61  	}
    62  
    63  	for i, tt := range tests {
    64  		i, tt := i, tt
    65  		t.Run(tt.name, func(t *testing.T) {
    66  			switch i {
    67  			case len(tests) - 1:
    68  				require.Panics(t, func() { DecodeStore(cdc, kvPairs[i], kvPairs[i]) }, tt.name)
    69  			default:
    70  				require.Equal(t, tt.expectedLog, DecodeStore(cdc, kvPairs[i], kvPairs[i]), tt.name)
    71  			}
    72  		})
    73  	}
    74  }