PrivValidator.GetAddress() and PrivValidator.GetPublicKey() return an

error instead of panic
This commit is contained in:
Ismail Khoffi
2018-11-29 18:52:19 +01:00
parent 44b769b1ac
commit 417c30b9c1
23 changed files with 345 additions and 151 deletions
+7 -5
View File
@@ -58,14 +58,14 @@ type FilePV struct {
// GetAddress returns the address of the validator.
// Implements PrivValidator.
func (pv *FilePV) GetAddress() types.Address {
return pv.Address
func (pv *FilePV) GetAddress() (types.Address, error) {
return pv.Address, nil
}
// GetPubKey returns the public key of the validator.
// Implements PrivValidator.
func (pv *FilePV) GetPubKey() crypto.PubKey {
return pv.PubKey
func (pv *FilePV) GetPubKey() (crypto.PubKey, error) {
return pv.PubKey, nil
}
// GenFilePV generates a new validator with randomly generated private key
@@ -292,7 +292,9 @@ func (pv *FilePV) saveSigned(height int64, round int, step int8,
// String returns a string representation of the FilePV.
func (pv *FilePV) String() string {
return fmt.Sprintf("PrivValidator{%v LH:%v, LR:%v, LS:%v}", pv.GetAddress(), pv.LastHeight, pv.LastRound, pv.LastStep)
// does not error in FilePV:
addr, _ := pv.GetAddress()
return fmt.Sprintf("PrivValidator{%v LH:%v, LR:%v, LS:%v}", addr, pv.LastHeight, pv.LastRound, pv.LastStep)
}
//-------------------------------------
+15 -6
View File
@@ -25,10 +25,13 @@ func TestGenLoadValidator(t *testing.T) {
height := int64(100)
privVal.LastHeight = height
privVal.Save()
addr := privVal.GetAddress()
addr, err := privVal.GetAddress() // FilePV doesn't err here
assert.NoError(err)
privVal = LoadFilePV(tempFile.Name())
assert.Equal(addr, privVal.GetAddress(), "expected privval addr to be the same")
loadedAddr, err := privVal.GetAddress()
assert.NoError(err)
assert.Equal(addr, loadedAddr, "expected privval addr to be the same")
assert.Equal(height, privVal.LastHeight, "expected privval.LastHeight to have been saved")
}
@@ -42,9 +45,11 @@ func TestLoadOrGenValidator(t *testing.T) {
t.Error(err)
}
privVal := LoadOrGenFilePV(tempFilePath)
addr := privVal.GetAddress()
addr, err := privVal.GetAddress()
assert.NoError(err)
privVal = LoadOrGenFilePV(tempFilePath)
assert.Equal(addr, privVal.GetAddress(), "expected privval addr to be the same")
loadedAddr, err := privVal.GetAddress()
assert.Equal(addr, loadedAddr, "expected privval addr to be the same")
}
func TestUnmarshalValidator(t *testing.T) {
@@ -81,8 +86,12 @@ func TestUnmarshalValidator(t *testing.T) {
require.Nil(err, "%+v", err)
// make sure the values match
assert.EqualValues(addr, val.GetAddress())
assert.EqualValues(pubKey, val.GetPubKey())
loadedAddr, err := val.GetAddress()
assert.NoError(err)
assert.EqualValues(addr, loadedAddr)
loadedKey, err := val.GetPubKey()
assert.NoError(err)
assert.EqualValues(pubKey, loadedKey)
assert.EqualValues(privKey, val.PrivKey)
// export it and make sure it is the same
+10 -7
View File
@@ -33,23 +33,23 @@ func NewRemoteSignerClient(
}
// GetAddress implements PrivValidator.
func (sc *RemoteSignerClient) GetAddress() types.Address {
func (sc *RemoteSignerClient) GetAddress() (types.Address, error) {
pubKey, err := sc.getPubKey()
if err != nil {
panic(err)
return nil, err
}
return pubKey.Address()
return pubKey.Address(), nil
}
// GetPubKey implements PrivValidator.
func (sc *RemoteSignerClient) GetPubKey() crypto.PubKey {
func (sc *RemoteSignerClient) GetPubKey() (crypto.PubKey, error) {
pubKey, err := sc.getPubKey()
if err != nil {
panic(err)
return nil, err
}
return pubKey
return pubKey, nil
}
func (sc *RemoteSignerClient) getPubKey() (crypto.PubKey, error) {
@@ -229,7 +229,10 @@ func handleRequest(req RemoteSignerMsg, chainID string, privVal types.PrivValida
switch r := req.(type) {
case *PubKeyMsg:
var p crypto.PubKey
p = privVal.GetPubKey()
p, err = privVal.GetPubKey()
if err != nil {
}
res = &PubKeyMsg{p}
case *SignVoteRequest:
err = privVal.SignVote(chainID, r.Vote)
+6 -10
View File
@@ -25,15 +25,13 @@ func TestSocketPVAddress(t *testing.T) {
defer sc.Stop()
defer rs.Stop()
serverAddr := rs.privVal.GetAddress()
serverAddr, err := rs.privVal.GetAddress()
assert.NoError(t, err)
clientAddr := sc.GetAddress()
clientAddr, err := sc.GetAddress()
assert.NoError(t, err)
assert.Equal(t, serverAddr, clientAddr)
// TODO(xla): Remove when PrivValidator2 replaced PrivValidator.
assert.Equal(t, serverAddr, sc.GetAddress())
}
func TestSocketPVPubKey(t *testing.T) {
@@ -47,12 +45,10 @@ func TestSocketPVPubKey(t *testing.T) {
clientKey, err := sc.getPubKey()
require.NoError(t, err)
privKey := rs.privVal.GetPubKey()
privKey, err := rs.privVal.GetPubKey()
assert.NoError(t, err)
assert.Equal(t, privKey, clientKey)
// TODO(xla): Remove when PrivValidator2 replaced PrivValidator.
assert.Equal(t, privKey, sc.GetPubKey())
}
func TestSocketPVProposal(t *testing.T) {