github.com/ari-anchor/sei-tendermint@v0.0.0-20230519144642-dc826b7b56bb/types/validator_test.go (about) 1 package types 2 3 import ( 4 "context" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 "github.com/stretchr/testify/require" 9 10 "github.com/ari-anchor/sei-tendermint/crypto" 11 ) 12 13 func TestValidatorProtoBuf(t *testing.T) { 14 ctx, cancel := context.WithCancel(context.Background()) 15 defer cancel() 16 17 val, _, err := randValidator(ctx, true, 100) 18 require.NoError(t, err) 19 20 testCases := []struct { 21 msg string 22 v1 *Validator 23 expPass1 bool 24 expPass2 bool 25 }{ 26 {"success validator", val, true, true}, 27 {"failure empty", &Validator{}, false, false}, 28 {"failure nil", nil, false, false}, 29 } 30 for _, tc := range testCases { 31 protoVal, err := tc.v1.ToProto() 32 33 if tc.expPass1 { 34 require.NoError(t, err, tc.msg) 35 } else { 36 require.Error(t, err, tc.msg) 37 } 38 39 val, err := ValidatorFromProto(protoVal) 40 if tc.expPass2 { 41 require.NoError(t, err, tc.msg) 42 require.Equal(t, tc.v1, val, tc.msg) 43 } else { 44 require.Error(t, err, tc.msg) 45 } 46 } 47 } 48 49 func TestValidatorValidateBasic(t *testing.T) { 50 ctx, cancel := context.WithCancel(context.Background()) 51 defer cancel() 52 53 priv := NewMockPV() 54 pubKey, _ := priv.GetPubKey(ctx) 55 testCases := []struct { 56 val *Validator 57 err bool 58 msg string 59 }{ 60 { 61 val: NewValidator(pubKey, 1), 62 err: false, 63 msg: "", 64 }, 65 { 66 val: nil, 67 err: true, 68 msg: "nil validator", 69 }, 70 { 71 val: &Validator{ 72 PubKey: nil, 73 }, 74 err: true, 75 msg: "validator does not have a public key", 76 }, 77 { 78 val: NewValidator(pubKey, -1), 79 err: true, 80 msg: "validator has negative voting power", 81 }, 82 { 83 val: &Validator{ 84 PubKey: pubKey, 85 Address: nil, 86 }, 87 err: true, 88 msg: "validator address is the wrong size: ", 89 }, 90 { 91 val: &Validator{ 92 PubKey: pubKey, 93 Address: []byte{'a'}, 94 }, 95 err: true, 96 msg: "validator address is the wrong size: 61", 97 }, 98 } 99 100 for _, tc := range testCases { 101 err := tc.val.ValidateBasic() 102 if tc.err { 103 if assert.Error(t, err) { 104 assert.Equal(t, tc.msg, err.Error()) 105 } 106 } else { 107 assert.NoError(t, err) 108 } 109 } 110 } 111 112 // Testing util functions 113 114 // deterministicValidator returns a deterministic validator, useful for testing. 115 // UNSTABLE 116 func deterministicValidator(ctx context.Context, t *testing.T, key crypto.PrivKey) (*Validator, PrivValidator) { 117 t.Helper() 118 privVal := NewMockPV() 119 privVal.PrivKey = key 120 var votePower int64 = 50 121 pubKey, err := privVal.GetPubKey(ctx) 122 require.NoError(t, err, "could not retrieve pubkey") 123 val := NewValidator(pubKey, votePower) 124 return val, privVal 125 }