github.com/prysmaticlabs/prysm@v1.4.4/beacon-chain/state/v1/setters_attestation_test.go (about)

     1  package v1
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  
     7  	types "github.com/prysmaticlabs/eth2-types"
     8  	pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
     9  	eth "github.com/prysmaticlabs/prysm/proto/eth/v1alpha1"
    10  	"github.com/prysmaticlabs/prysm/shared/params"
    11  	"github.com/prysmaticlabs/prysm/shared/testutil/assert"
    12  	"github.com/prysmaticlabs/prysm/shared/testutil/require"
    13  )
    14  
    15  func TestBeaconState_RotateAttestations(t *testing.T) {
    16  	st, err := InitializeFromProto(&pb.BeaconState{
    17  		Slot:                      1,
    18  		CurrentEpochAttestations:  []*pb.PendingAttestation{{Data: &eth.AttestationData{Slot: 456}}},
    19  		PreviousEpochAttestations: []*pb.PendingAttestation{{Data: &eth.AttestationData{Slot: 123}}},
    20  	})
    21  	require.NoError(t, err)
    22  
    23  	require.NoError(t, st.RotateAttestations())
    24  	require.Equal(t, 0, len(st.currentEpochAttestations()))
    25  	require.Equal(t, types.Slot(456), st.previousEpochAttestations()[0].Data.Slot)
    26  }
    27  
    28  func TestAppendBeyondIndicesLimit(t *testing.T) {
    29  	zeroHash := params.BeaconConfig().ZeroHash
    30  	mockblockRoots := make([][]byte, params.BeaconConfig().SlotsPerHistoricalRoot)
    31  	for i := 0; i < len(mockblockRoots); i++ {
    32  		mockblockRoots[i] = zeroHash[:]
    33  	}
    34  
    35  	mockstateRoots := make([][]byte, params.BeaconConfig().SlotsPerHistoricalRoot)
    36  	for i := 0; i < len(mockstateRoots); i++ {
    37  		mockstateRoots[i] = zeroHash[:]
    38  	}
    39  	mockrandaoMixes := make([][]byte, params.BeaconConfig().EpochsPerHistoricalVector)
    40  	for i := 0; i < len(mockrandaoMixes); i++ {
    41  		mockrandaoMixes[i] = zeroHash[:]
    42  	}
    43  	st, err := InitializeFromProto(&pb.BeaconState{
    44  		Slot:                      1,
    45  		CurrentEpochAttestations:  []*pb.PendingAttestation{{Data: &eth.AttestationData{Slot: 456}}},
    46  		PreviousEpochAttestations: []*pb.PendingAttestation{{Data: &eth.AttestationData{Slot: 123}}},
    47  		Validators:                []*eth.Validator{},
    48  		Eth1Data:                  &eth.Eth1Data{},
    49  		BlockRoots:                mockblockRoots,
    50  		StateRoots:                mockstateRoots,
    51  		RandaoMixes:               mockrandaoMixes,
    52  	})
    53  	require.NoError(t, err)
    54  	_, err = st.HashTreeRoot(context.Background())
    55  	require.NoError(t, err)
    56  	for i := fieldIndex(0); i < fieldIndex(params.BeaconConfig().BeaconStateFieldCount); i++ {
    57  		st.dirtyFields[i] = true
    58  	}
    59  	_, err = st.HashTreeRoot(context.Background())
    60  	require.NoError(t, err)
    61  	for i := 0; i < 10; i++ {
    62  		assert.NoError(t, st.AppendValidator(&eth.Validator{}))
    63  	}
    64  	assert.Equal(t, false, st.rebuildTrie[validators])
    65  	assert.NotEqual(t, len(st.dirtyIndices[validators]), 0)
    66  
    67  	for i := 0; i < indicesLimit; i++ {
    68  		assert.NoError(t, st.AppendValidator(&eth.Validator{}))
    69  	}
    70  	assert.Equal(t, true, st.rebuildTrie[validators])
    71  	assert.Equal(t, len(st.dirtyIndices[validators]), 0)
    72  }