github.com/prysmaticlabs/prysm@v1.4.4/beacon-chain/rpc/prysm/v1alpha1/beacon/validators_stream_test.go (about) 1 package beacon 2 3 import ( 4 "sync" 5 "testing" 6 7 types "github.com/prysmaticlabs/eth2-types" 8 mock "github.com/prysmaticlabs/prysm/beacon-chain/blockchain/testing" 9 "github.com/prysmaticlabs/prysm/shared/params" 10 "github.com/prysmaticlabs/prysm/shared/testutil" 11 "github.com/prysmaticlabs/prysm/shared/testutil/assert" 12 "github.com/prysmaticlabs/prysm/shared/testutil/require" 13 ) 14 15 func TestInfostream_EpochToTimestamp(t *testing.T) { 16 params.SetupTestConfigCleanup(t) 17 params.OverrideBeaconConfig(params.MainnetConfig()) 18 tests := []struct { 19 name string 20 epoch types.Epoch 21 timestamp uint64 22 }{ 23 { 24 name: "Genesis", 25 epoch: 0, 26 timestamp: 0, 27 }, 28 { 29 name: "One", 30 epoch: 1, 31 timestamp: 384, 32 }, 33 { 34 name: "Two", 35 epoch: 2, 36 timestamp: 768, 37 }, 38 { 39 name: "OneHundred", 40 epoch: 100, 41 timestamp: 38400, 42 }, 43 } 44 45 is := &infostream{} 46 for _, test := range tests { 47 timestamp := is.epochToTimestamp(test.epoch) 48 assert.Equal(t, test.timestamp, timestamp, "Incorrect timestamp") 49 } 50 } 51 52 func TestInfostream_HandleSetValidatorKeys(t *testing.T) { 53 params.SetupTestConfigCleanup(t) 54 params.OverrideBeaconConfig(params.MainnetConfig()) 55 tests := []struct { 56 name string 57 reqPubKeys [][]byte 58 }{ 59 { 60 name: "None", 61 }, 62 { 63 name: "One", 64 reqPubKeys: [][]byte{{0x01}}, 65 }, 66 { 67 name: "Two", 68 reqPubKeys: [][]byte{{0x01}, {0x02}}, 69 }, 70 } 71 72 s, err := testutil.NewBeaconState() 73 require.NoError(t, err) 74 75 is := &infostream{ 76 pubKeysMutex: &sync.RWMutex{}, 77 pubKeys: make([][]byte, 0), 78 headFetcher: &mock.ChainService{ 79 State: s, 80 }, 81 } 82 for _, test := range tests { 83 t.Run(test.name, func(t *testing.T) { 84 assert.NoError(t, is.handleSetValidatorKeys(test.reqPubKeys)) 85 assert.Equal(t, len(test.reqPubKeys), len(is.pubKeys), "Incorrect number of keys") 86 }) 87 } 88 } 89 90 func TestInfostream_HandleAddValidatorKeys(t *testing.T) { 91 params.SetupTestConfigCleanup(t) 92 params.OverrideBeaconConfig(params.MainnetConfig()) 93 tests := []struct { 94 name string 95 initialPubKeys [][]byte 96 reqPubKeys [][]byte 97 finalLen int 98 }{ 99 { 100 name: "None", 101 finalLen: 0, 102 }, 103 { 104 name: "NoneAddOne", 105 reqPubKeys: [][]byte{{0x01}}, 106 finalLen: 1, 107 }, 108 { 109 name: "OneAddOne", 110 initialPubKeys: [][]byte{{0x01}}, 111 reqPubKeys: [][]byte{{0x02}}, 112 finalLen: 2, 113 }, 114 { 115 name: "Duplicate", 116 initialPubKeys: [][]byte{{0x01}}, 117 reqPubKeys: [][]byte{{0x01}}, 118 finalLen: 1, 119 }, 120 } 121 122 s, err := testutil.NewBeaconState() 123 require.NoError(t, err) 124 is := &infostream{ 125 pubKeysMutex: &sync.RWMutex{}, 126 pubKeys: make([][]byte, 0), 127 headFetcher: &mock.ChainService{ 128 State: s, 129 }, 130 } 131 for _, test := range tests { 132 assert.NoError(t, is.handleSetValidatorKeys(test.initialPubKeys)) 133 assert.NoError(t, is.handleAddValidatorKeys(test.reqPubKeys)) 134 assert.Equal(t, test.finalLen, len(is.pubKeys), "Incorrect number of keys") 135 } 136 } 137 138 func TestInfostream_HandleRemoveValidatorKeys(t *testing.T) { 139 params.SetupTestConfigCleanup(t) 140 params.OverrideBeaconConfig(params.MainnetConfig()) 141 tests := []struct { 142 name string 143 initialPubKeys [][]byte 144 reqPubKeys [][]byte 145 finalLen int 146 }{ 147 { 148 name: "None", 149 finalLen: 0, 150 }, 151 { 152 name: "OneRemoveNone", 153 initialPubKeys: [][]byte{{0x01}}, 154 finalLen: 1, 155 }, 156 { 157 name: "NoneRemoveOne", 158 initialPubKeys: [][]byte{}, 159 reqPubKeys: [][]byte{{0x01}}, 160 finalLen: 0, 161 }, 162 { 163 name: "TwoRemoveOne", 164 initialPubKeys: [][]byte{{0x01, 0x02}}, 165 reqPubKeys: [][]byte{{0x01}}, 166 finalLen: 1, 167 }, 168 } 169 170 s, err := testutil.NewBeaconState() 171 require.NoError(t, err) 172 173 is := &infostream{ 174 pubKeysMutex: &sync.RWMutex{}, 175 pubKeys: make([][]byte, 0), 176 headFetcher: &mock.ChainService{ 177 State: s, 178 }, 179 } 180 for _, test := range tests { 181 assert.NoError(t, is.handleSetValidatorKeys(test.initialPubKeys)) 182 is.handleRemoveValidatorKeys(test.reqPubKeys) 183 assert.Equal(t, test.finalLen, len(is.pubKeys), "Incorrect number of keys") 184 } 185 }