github.com/Finschia/finschia-sdk@v0.48.1/x/gov/common_test.go (about)

     1  package gov_test
     2  
     3  import (
     4  	"bytes"
     5  	"log"
     6  	"sort"
     7  	"testing"
     8  
     9  	"github.com/stretchr/testify/require"
    10  
    11  	"github.com/Finschia/finschia-sdk/crypto/keys/ed25519"
    12  	cryptotypes "github.com/Finschia/finschia-sdk/crypto/types"
    13  	sdk "github.com/Finschia/finschia-sdk/types"
    14  	"github.com/Finschia/finschia-sdk/x/gov/types"
    15  	stakingtypes "github.com/Finschia/finschia-sdk/x/staking/types"
    16  )
    17  
    18  var (
    19  	valTokens           = sdk.TokensFromConsensusPower(42, sdk.DefaultPowerReduction)
    20  	TestProposal        = types.NewTextProposal("Test", "description")
    21  	TestDescription     = stakingtypes.NewDescription("T", "E", "S", "T", "Z")
    22  	TestCommissionRates = stakingtypes.NewCommissionRates(sdk.ZeroDec(), sdk.ZeroDec(), sdk.ZeroDec())
    23  )
    24  
    25  // SortAddresses - Sorts Addresses
    26  func SortAddresses(addrs []sdk.AccAddress) {
    27  	byteAddrs := make([][]byte, len(addrs))
    28  
    29  	for i, addr := range addrs {
    30  		byteAddrs[i] = addr.Bytes()
    31  	}
    32  
    33  	SortByteArrays(byteAddrs)
    34  
    35  	for i, byteAddr := range byteAddrs {
    36  		addrs[i] = byteAddr
    37  	}
    38  }
    39  
    40  // implement `Interface` in sort package.
    41  type sortByteArrays [][]byte
    42  
    43  func (b sortByteArrays) Len() int {
    44  	return len(b)
    45  }
    46  
    47  func (b sortByteArrays) Less(i, j int) bool {
    48  	// bytes package already implements Comparable for []byte.
    49  	switch bytes.Compare(b[i], b[j]) {
    50  	case -1:
    51  		return true
    52  	case 0, 1:
    53  		return false
    54  	default:
    55  		log.Panic("not fail-able with `bytes.Comparable` bounded [-1, 1].")
    56  		return false
    57  	}
    58  }
    59  
    60  func (b sortByteArrays) Swap(i, j int) {
    61  	b[j], b[i] = b[i], b[j]
    62  }
    63  
    64  // SortByteArrays - sorts the provided byte array
    65  func SortByteArrays(src [][]byte) [][]byte {
    66  	sorted := sortByteArrays(src)
    67  	sort.Sort(sorted)
    68  	return sorted
    69  }
    70  
    71  const contextKeyBadProposal = "contextKeyBadProposal"
    72  
    73  var pubkeys = []cryptotypes.PubKey{
    74  	ed25519.GenPrivKey().PubKey(),
    75  	ed25519.GenPrivKey().PubKey(),
    76  	ed25519.GenPrivKey().PubKey(),
    77  }
    78  
    79  func createValidators(t *testing.T, stakingHandler sdk.Handler, ctx sdk.Context, addrs []sdk.ValAddress, powerAmt []int64) {
    80  	require.True(t, len(addrs) <= len(pubkeys), "Not enough pubkeys specified at top of file.")
    81  
    82  	for i := 0; i < len(addrs); i++ {
    83  		valTokens := sdk.TokensFromConsensusPower(powerAmt[i], sdk.DefaultPowerReduction)
    84  		valCreateMsg, err := stakingtypes.NewMsgCreateValidator(
    85  			addrs[i], pubkeys[i], sdk.NewCoin(sdk.DefaultBondDenom, valTokens),
    86  			TestDescription, TestCommissionRates, sdk.OneInt(),
    87  		)
    88  		require.NoError(t, err)
    89  		handleAndCheck(t, stakingHandler, ctx, valCreateMsg)
    90  	}
    91  }
    92  
    93  func handleAndCheck(t *testing.T, h sdk.Handler, ctx sdk.Context, msg sdk.Msg) {
    94  	res, err := h(ctx, msg)
    95  	require.NoError(t, err)
    96  	require.NotNil(t, res)
    97  }