guardianset_test.go 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. package common
  2. import (
  3. "reflect"
  4. "testing"
  5. gossipv1 "github.com/certusone/wormhole/node/pkg/proto/gossip/v1"
  6. "github.com/ethereum/go-ethereum/common"
  7. "github.com/stretchr/testify/assert"
  8. "github.com/wormhole-foundation/wormhole/sdk/vaa"
  9. )
  10. func TestNewGuardianSet(t *testing.T) {
  11. keys := []common.Address{
  12. common.HexToAddress("0xbeFA429d57cD18b7F8A4d91A2da9AB4AF05d0FBe"),
  13. common.HexToAddress("0x88D7D8B32a9105d228100E72dFFe2Fae0705D31c"),
  14. common.HexToAddress("0x58076F561CC62A47087B567C86f986426dFCD000"),
  15. common.HexToAddress("0xBd6e9833490F8fA87c733A183CD076a6cBD29074"),
  16. common.HexToAddress("0xb853FCF0a5C78C1b56D15fCE7a154e6ebe9ED7a2"),
  17. common.HexToAddress("0xAF3503dBD2E37518ab04D7CE78b630F98b15b78a"),
  18. common.HexToAddress("0x785632deA5609064803B1c8EA8bB2c77a6004Bd1"),
  19. common.HexToAddress("0x09a281a698C0F5BA31f158585B41F4f33659e54D"),
  20. common.HexToAddress("0x3178443AB76a60E21690DBfB17f7F59F09Ae3Ea1"),
  21. common.HexToAddress("0x647ec26ae49b14060660504f4DA1c2059E1C5Ab6"),
  22. common.HexToAddress("0x810AC3D8E1258Bd2F004a94Ca0cd4c68Fc1C0611"),
  23. common.HexToAddress("0x80610e96d645b12f47ae5cf4546b18538739e90F"),
  24. common.HexToAddress("0x2edb0D8530E31A218E72B9480202AcBaeB06178d"),
  25. common.HexToAddress("0xa78858e5e5c4705CdD4B668FFe3Be5bae4867c9D"),
  26. common.HexToAddress("0x5Efe3A05Efc62D60e1D19fAeB56A80223CDd3472"),
  27. common.HexToAddress("0xD791b7D32C05aBB1cc00b6381FA0c4928f0c56fC"),
  28. common.HexToAddress("0x14Bc029B8809069093D712A3fd4DfAb31963597e"),
  29. common.HexToAddress("0x246Ab29FC6EBeDf2D392a51ab2Dc5C59d0902A03"),
  30. common.HexToAddress("0x132A84dFD920b35a3D0BA5f7A0635dF298F9033e"),
  31. }
  32. gs := NewGuardianSet(keys, 1)
  33. assert.True(t, reflect.DeepEqual(keys, gs.Keys))
  34. assert.Equal(t, uint32(1), gs.Index)
  35. assert.Equal(t, vaa.CalculateQuorum(len(keys)), gs.Quorum())
  36. }
  37. func TestKeyIndex(t *testing.T) {
  38. type test struct {
  39. guardianSet GuardianSet
  40. address string
  41. result bool
  42. keyIndex int
  43. }
  44. guardianSet := *NewGuardianSet(
  45. []common.Address{
  46. common.HexToAddress("0x5aaeb6053f3e94c9b9a09f33669435e7ef1beaed"),
  47. common.HexToAddress("0x5aaeb6053f3e94c9b9a09f33669435e7ef1beaee"),
  48. },
  49. 1,
  50. )
  51. tests := []test{
  52. {guardianSet: guardianSet, address: "0x5aaeb6053f3e94c9b9a09f33669435e7ef1beaed", result: true, keyIndex: 0},
  53. {guardianSet: guardianSet, address: "0x5aaeb6053f3e94c9b9a09f33669435e7ef1beaee", result: true, keyIndex: 1},
  54. {guardianSet: guardianSet, address: "0x5aaeb6053f3e94c9b9a09f33669435e7ef1beaef", result: false, keyIndex: -1},
  55. }
  56. for _, testCase := range tests {
  57. t.Run(testCase.address, func(t *testing.T) {
  58. gs := testCase.guardianSet
  59. keyIndex, result := gs.KeyIndex(common.HexToAddress(testCase.address))
  60. assert.Equal(t, result, testCase.result)
  61. assert.Equal(t, keyIndex, testCase.keyIndex)
  62. })
  63. }
  64. }
  65. func TestKeysAsHexStrings(t *testing.T) {
  66. gs := GuardianSet{
  67. Keys: []common.Address{
  68. common.HexToAddress("0x5aaeb6053f3e94c9b9a09f33669435e7ef1beaed"),
  69. common.HexToAddress("0x5aaeb6053f3e94c9b9a09f33669435e7ef1beaee"),
  70. },
  71. Index: 1,
  72. }
  73. keyStrings := make([]string, len(gs.Keys))
  74. // Note that go-ethereum common.HexToAddress() will force a supplied all-lower
  75. // address to mixedcase for a valid checksum, which is why these are different
  76. keyStrings[0] = "0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed"
  77. keyStrings[1] = "0x5Aaeb6053f3e94c9B9a09F33669435e7EF1BeAee"
  78. assert.Equal(t, keyStrings, gs.KeysAsHexStrings())
  79. }
  80. func TestNewGuardianSetState(t *testing.T) {
  81. gss := NewGuardianSetState(nil)
  82. assert.NotNil(t, gss)
  83. assert.Nil(t, gss.current)
  84. assert.Nil(t, gss.Get())
  85. }
  86. func TestSet(t *testing.T) {
  87. var gs GuardianSet = GuardianSet{
  88. Keys: []common.Address{
  89. common.HexToAddress("0x5aaeb6053f3e94c9b9a09f33669435e7ef1beaed"),
  90. common.HexToAddress("0x5aaeb6053f3e94c9b9a09f33669435e7ef1beaee"),
  91. },
  92. Index: 1,
  93. }
  94. gss := NewGuardianSetState(nil)
  95. assert.Nil(t, gss.current)
  96. gss.Set(&gs)
  97. assert.Equal(t, gss.current, &gs)
  98. }
  99. func TestGet(t *testing.T) {
  100. var gs GuardianSet = GuardianSet{
  101. Keys: []common.Address{
  102. common.HexToAddress("0x5aaeb6053f3e94c9b9a09f33669435e7ef1beaed"),
  103. common.HexToAddress("0x5aaeb6053f3e94c9b9a09f33669435e7ef1beaee"),
  104. },
  105. Index: 1,
  106. }
  107. gss := NewGuardianSetState(nil)
  108. assert.Nil(t, gss.Get())
  109. gss.Set(&gs)
  110. assert.Equal(t, gss.Get(), &gs)
  111. }
  112. func TestIsSubscribedToHeartbeats(t *testing.T) {
  113. heartbeatC := make(chan *gossipv1.Heartbeat, 20000)
  114. gst1 := NewGuardianSetState(heartbeatC)
  115. assert.True(t, gst1.IsSubscribedToHeartbeats())
  116. gst2 := NewGuardianSetState(nil)
  117. assert.False(t, gst2.IsSubscribedToHeartbeats())
  118. }