|
|
|
package nodeconfig
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/harmony-one/harmony/crypto/bls"
|
|
|
|
|
|
|
|
"github.com/harmony-one/harmony/internal/blsgen"
|
|
|
|
shardingconfig "github.com/harmony-one/harmony/internal/configs/sharding"
|
|
|
|
"github.com/harmony-one/harmony/multibls"
|
|
|
|
"github.com/pkg/errors"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestNodeConfigSingleton(t *testing.T) {
|
|
|
|
// init 3 configs
|
|
|
|
_ = GetShardConfig(2)
|
|
|
|
// get the singleton variable
|
|
|
|
c := GetShardConfig(Global)
|
|
|
|
c.SetBeaconGroupID(GroupIDBeacon)
|
|
|
|
d := GetShardConfig(Global)
|
|
|
|
g := d.GetBeaconGroupID()
|
|
|
|
if g != GroupIDBeacon {
|
|
|
|
t.Errorf("GetBeaconGroupID = %v, expected = %v", g, GroupIDBeacon)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestNodeConfigMultiple(t *testing.T) {
|
|
|
|
// init 3 configs
|
|
|
|
d := GetShardConfig(1)
|
|
|
|
e := GetShardConfig(0)
|
|
|
|
f := GetShardConfig(42)
|
|
|
|
|
|
|
|
if f != nil {
|
|
|
|
t.Errorf("expecting nil, got: %v", f)
|
|
|
|
}
|
|
|
|
|
|
|
|
d.SetShardGroupID("abcd")
|
|
|
|
if d.GetShardGroupID() != "abcd" {
|
|
|
|
t.Errorf("expecting abcd, got: %v", d.GetShardGroupID())
|
|
|
|
}
|
|
|
|
|
|
|
|
e.SetClientGroupID("client")
|
|
|
|
if e.GetClientGroupID() != "client" {
|
|
|
|
t.Errorf("expecting client, got: %v", d.GetClientGroupID())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestValidateConsensusKeysForSameShard(t *testing.T) {
|
|
|
|
// set localnet config
|
|
|
|
networkType := "localnet"
|
|
|
|
schedule := shardingconfig.LocalnetSchedule
|
|
|
|
netType := NetworkType(networkType)
|
|
|
|
SetNetworkType(netType)
|
|
|
|
SetShardingSchedule(schedule)
|
|
|
|
|
|
|
|
// import two keys that belong to same shard and test ValidateConsensusKeysForSameShard
|
|
|
|
keyPath1 := "../../../.hmy/65f55eb3052f9e9f632b2923be594ba77c55543f5c58ee1454b9cfd658d25e06373b0f7d42a19c84768139ea294f6204.key"
|
|
|
|
priKey1, err := blsgen.LoadBLSKeyWithPassPhrase(keyPath1, "")
|
|
|
|
pubKey1 := priKey1.GetPublicKey()
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
}
|
|
|
|
keyPath2 := "../../../.hmy/ca86e551ee42adaaa6477322d7db869d3e203c00d7b86c82ebee629ad79cb6d57b8f3db28336778ec2180e56a8e07296.key"
|
|
|
|
priKey2, err := blsgen.LoadBLSKeyWithPassPhrase(keyPath2, "")
|
|
|
|
pubKey2 := priKey2.GetPublicKey()
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
}
|
|
|
|
keys := multibls.PublicKeys{}
|
|
|
|
dummyKey := bls.SerializedPublicKey{}
|
|
|
|
dummyKey.FromLibBLSPublicKey(pubKey1)
|
|
|
|
keys = append(keys, bls.PublicKeyWrapper{Object: pubKey1, Bytes: dummyKey})
|
|
|
|
dummyKey = bls.SerializedPublicKey{}
|
|
|
|
dummyKey.FromLibBLSPublicKey(pubKey2)
|
|
|
|
keys = append(keys, bls.PublicKeyWrapper{Object: pubKey2, Bytes: dummyKey})
|
|
|
|
if err := GetDefaultConfig().ValidateConsensusKeysForSameShard(keys, 0); err != nil {
|
|
|
|
t.Error("expected", nil, "got", err)
|
|
|
|
}
|
|
|
|
// add third key in different shard and test ValidateConsensusKeysForSameShard
|
|
|
|
keyPath3 := "../../../.hmy/68ae289d73332872ec8d04ac256ca0f5453c88ad392730c5741b6055bc3ec3d086ab03637713a29f459177aaa8340615.key"
|
|
|
|
priKey3, err := blsgen.LoadBLSKeyWithPassPhrase(keyPath3, "")
|
|
|
|
pubKey3 := priKey3.GetPublicKey()
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err)
|
|
|
|
}
|
|
|
|
dummyKey = bls.SerializedPublicKey{}
|
|
|
|
dummyKey.FromLibBLSPublicKey(pubKey3)
|
|
|
|
keys = append(keys, bls.PublicKeyWrapper{Object: pubKey3, Bytes: dummyKey})
|
|
|
|
if err := GetDefaultConfig().ValidateConsensusKeysForSameShard(keys, 0); err == nil {
|
|
|
|
e := errors.New("bls keys do not belong to the same shard")
|
|
|
|
t.Error("expected", e, "got", nil)
|
|
|
|
}
|
|
|
|
}
|