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  }