package nodeconfig import ( "math/big" "testing" "github.com/golang/mock/gomock" "github.com/harmony-one/bls/ffi/go/bls" mock_shardingconfig "github.com/harmony-one/harmony/internal/configs/sharding/mock" "github.com/harmony-one/harmony/internal/params" "github.com/harmony-one/harmony/multibls" ) 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()) } e.SetIsClient(false) if e.IsClient() != false { t.Errorf("expecting false, got: %v", e.IsClient()) } } func blsPubKeyFromHex(hex string) *bls.PublicKey { var k bls.PublicKey if err := k.DeserializeHexStr(hex); err != nil { panic(err) } return &k } func TestConfigType_ShardIDFromConsensusKey(t *testing.T) { type fields struct { ConsensusPubKey *bls.PublicKey networkType NetworkType } tests := []struct { name string fields fields epoch *big.Int shards uint32 want uint32 }{ { "Mainnet", fields{ blsPubKeyFromHex("ca23704be46ce9c4704681ac9c08ddc644f1858a5c28ce236e1b5d9dee67c1f5a28075b5ef089adeffa8a372c1762007"), "mainnet", }, params.MainnetChainConfig.StakingEpoch, 4, 3, }, { "Testnet", fields{ blsPubKeyFromHex("e7f54994bc5c02edeeb178ce2d34db276a893bab5c59ac3d7eb9f077c893f9e31171de6236ba0e21be415d8631e45b91"), "testnet", }, params.TestnetChainConfig.StakingEpoch, 3, 1, }, { "Devnet", fields{ blsPubKeyFromHex("e7f54994bc5c02edeeb178ce2d34db276a893bab5c59ac3d7eb9f077c893f9e31171de6236ba0e21be415d8631e45b91"), "devnet", }, params.TestnetChainConfig.StakingEpoch, 2, 1, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { mc := gomock.NewController(t) defer mc.Finish() instance := mock_shardingconfig.NewMockInstance(mc) instance.EXPECT().NumShards().Return(tt.shards) schedule := mock_shardingconfig.NewMockSchedule(mc) schedule.EXPECT().InstanceForEpoch(tt.epoch).Return(instance) conf := &ConfigType{ ConsensusPubKey: multibls.GetPublicKey(tt.fields.ConsensusPubKey), networkType: tt.fields.networkType, shardingSchedule: schedule, } got, err := conf.ShardIDFromConsensusKey() if err != nil { t.Errorf("ShardIDFromConsensusKey() error = %v", err) return } if got != tt.want { t.Errorf("ShardIDFromConsensusKey() got = %v, want %v", got, tt.want) } }) } }