github.com/Finschia/finschia-sdk@v0.48.1/x/staking/types/keys_test.go (about)

     1  package types_test
     2  
     3  import (
     4  	"bytes"
     5  	"encoding/hex"
     6  	"math/big"
     7  	"testing"
     8  	"time"
     9  
    10  	"github.com/stretchr/testify/require"
    11  
    12  	"github.com/Finschia/finschia-sdk/crypto/keys/ed25519"
    13  	sdk "github.com/Finschia/finschia-sdk/types"
    14  	"github.com/Finschia/finschia-sdk/x/staking/types"
    15  )
    16  
    17  var (
    18  	keysPK1   = ed25519.GenPrivKeyFromSecret([]byte{1}).PubKey()
    19  	keysPK2   = ed25519.GenPrivKeyFromSecret([]byte{2}).PubKey()
    20  	keysPK3   = ed25519.GenPrivKeyFromSecret([]byte{3}).PubKey()
    21  	keysAddr1 = keysPK1.Address()
    22  	keysAddr2 = keysPK2.Address()
    23  	keysAddr3 = keysPK3.Address()
    24  )
    25  
    26  func TestGetValidatorPowerRank(t *testing.T) {
    27  	valAddr1 := sdk.ValAddress(keysAddr1)
    28  	val1 := newValidator(t, valAddr1, keysPK1)
    29  	val1.Tokens = sdk.ZeroInt()
    30  	val2, val3, val4 := val1, val1, val1
    31  	val2.Tokens = sdk.TokensFromConsensusPower(1, sdk.DefaultPowerReduction)
    32  	val3.Tokens = sdk.TokensFromConsensusPower(10, sdk.DefaultPowerReduction)
    33  	x := new(big.Int).Exp(big.NewInt(2), big.NewInt(40), big.NewInt(0))
    34  	val4.Tokens = sdk.TokensFromConsensusPower(x.Int64(), sdk.DefaultPowerReduction)
    35  
    36  	tests := []struct {
    37  		validator types.Validator
    38  		wantHex   string
    39  	}{
    40  		{val1, "230000000000000000149c288ede7df62742fc3b7d0962045a8cef0f79f6"},
    41  		{val2, "230000000000000001149c288ede7df62742fc3b7d0962045a8cef0f79f6"},
    42  		{val3, "23000000000000000a149c288ede7df62742fc3b7d0962045a8cef0f79f6"},
    43  		{val4, "230000010000000000149c288ede7df62742fc3b7d0962045a8cef0f79f6"},
    44  	}
    45  	for i, tt := range tests {
    46  		got := hex.EncodeToString(types.GetValidatorsByPowerIndexKey(tt.validator, sdk.DefaultPowerReduction))
    47  
    48  		require.Equal(t, tt.wantHex, got, "Keys did not match on test case %d", i)
    49  	}
    50  }
    51  
    52  func TestGetREDByValDstIndexKey(t *testing.T) {
    53  	tests := []struct {
    54  		delAddr    sdk.AccAddress
    55  		valSrcAddr sdk.ValAddress
    56  		valDstAddr sdk.ValAddress
    57  		wantHex    string
    58  	}{
    59  		{
    60  			sdk.AccAddress(keysAddr1), sdk.ValAddress(keysAddr1), sdk.ValAddress(keysAddr1),
    61  			"361463d771218209d8bd03c482f69dfba57310f086091463d771218209d8bd03c482f69dfba57310f086091463d771218209d8bd03c482f69dfba57310f08609",
    62  		},
    63  		{
    64  			sdk.AccAddress(keysAddr1), sdk.ValAddress(keysAddr2), sdk.ValAddress(keysAddr3),
    65  			"36143ab62f0d93849be495e21e3e9013a517038f45bd1463d771218209d8bd03c482f69dfba57310f08609145ef3b5f25c54946d4a89fc0d09d2f126614540f2",
    66  		},
    67  		{
    68  			sdk.AccAddress(keysAddr2), sdk.ValAddress(keysAddr1), sdk.ValAddress(keysAddr3),
    69  			"36143ab62f0d93849be495e21e3e9013a517038f45bd145ef3b5f25c54946d4a89fc0d09d2f126614540f21463d771218209d8bd03c482f69dfba57310f08609",
    70  		},
    71  	}
    72  	for i, tt := range tests {
    73  		got := hex.EncodeToString(types.GetREDByValDstIndexKey(tt.delAddr, tt.valSrcAddr, tt.valDstAddr))
    74  
    75  		require.Equal(t, tt.wantHex, got, "Keys did not match on test case %d", i)
    76  	}
    77  }
    78  
    79  func TestGetREDByValSrcIndexKey(t *testing.T) {
    80  	tests := []struct {
    81  		delAddr    sdk.AccAddress
    82  		valSrcAddr sdk.ValAddress
    83  		valDstAddr sdk.ValAddress
    84  		wantHex    string
    85  	}{
    86  		{
    87  			sdk.AccAddress(keysAddr1), sdk.ValAddress(keysAddr1), sdk.ValAddress(keysAddr1),
    88  			"351463d771218209d8bd03c482f69dfba57310f086091463d771218209d8bd03c482f69dfba57310f086091463d771218209d8bd03c482f69dfba57310f08609",
    89  		},
    90  		{
    91  			sdk.AccAddress(keysAddr1), sdk.ValAddress(keysAddr2), sdk.ValAddress(keysAddr3),
    92  			"35145ef3b5f25c54946d4a89fc0d09d2f126614540f21463d771218209d8bd03c482f69dfba57310f08609143ab62f0d93849be495e21e3e9013a517038f45bd",
    93  		},
    94  		{
    95  			sdk.AccAddress(keysAddr2), sdk.ValAddress(keysAddr1), sdk.ValAddress(keysAddr3),
    96  			"351463d771218209d8bd03c482f69dfba57310f08609145ef3b5f25c54946d4a89fc0d09d2f126614540f2143ab62f0d93849be495e21e3e9013a517038f45bd",
    97  		},
    98  	}
    99  	for i, tt := range tests {
   100  		got := hex.EncodeToString(types.GetREDByValSrcIndexKey(tt.delAddr, tt.valSrcAddr, tt.valDstAddr))
   101  
   102  		require.Equal(t, tt.wantHex, got, "Keys did not match on test case %d", i)
   103  	}
   104  }
   105  
   106  func TestGetValidatorQueueKey(t *testing.T) {
   107  	ts := time.Now()
   108  	height := int64(1024)
   109  
   110  	bz := types.GetValidatorQueueKey(ts, height)
   111  	rTs, rHeight, err := types.ParseValidatorQueueKey(bz)
   112  	require.NoError(t, err)
   113  	require.Equal(t, ts.UTC(), rTs.UTC())
   114  	require.Equal(t, rHeight, height)
   115  }
   116  
   117  func TestTestGetValidatorQueueKeyOrder(t *testing.T) {
   118  	ts := time.Now().UTC()
   119  	height := int64(1000)
   120  
   121  	endKey := types.GetValidatorQueueKey(ts, height)
   122  
   123  	keyA := types.GetValidatorQueueKey(ts.Add(-10*time.Minute), height-10)
   124  	keyB := types.GetValidatorQueueKey(ts.Add(-5*time.Minute), height+50)
   125  	keyC := types.GetValidatorQueueKey(ts.Add(10*time.Minute), height+100)
   126  
   127  	require.Equal(t, -1, bytes.Compare(keyA, endKey)) // keyA <= endKey
   128  	require.Equal(t, -1, bytes.Compare(keyB, endKey)) // keyB <= endKey
   129  	require.Equal(t, 1, bytes.Compare(keyC, endKey))  // keyB >= endKey
   130  }