github.com/prysmaticlabs/prysm@v1.4.4/beacon-chain/rpc/prysm/v1alpha1/debug/block_test.go (about)

     1  package debug
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  	"time"
     7  
     8  	"github.com/prysmaticlabs/go-bitfield"
     9  	mock "github.com/prysmaticlabs/prysm/beacon-chain/blockchain/testing"
    10  	"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
    11  	dbTest "github.com/prysmaticlabs/prysm/beacon-chain/db/testing"
    12  	"github.com/prysmaticlabs/prysm/beacon-chain/state/stategen"
    13  	pbrpc "github.com/prysmaticlabs/prysm/proto/beacon/rpc/v1"
    14  	ethpb "github.com/prysmaticlabs/prysm/proto/eth/v1alpha1"
    15  	"github.com/prysmaticlabs/prysm/proto/eth/v1alpha1/wrapper"
    16  	"github.com/prysmaticlabs/prysm/shared/params"
    17  	"github.com/prysmaticlabs/prysm/shared/testutil"
    18  	"github.com/prysmaticlabs/prysm/shared/testutil/assert"
    19  	"github.com/prysmaticlabs/prysm/shared/testutil/require"
    20  )
    21  
    22  func TestServer_GetBlock(t *testing.T) {
    23  	db := dbTest.SetupDB(t)
    24  	ctx := context.Background()
    25  
    26  	b := testutil.NewBeaconBlock()
    27  	b.Block.Slot = 100
    28  	require.NoError(t, db.SaveBlock(ctx, wrapper.WrappedPhase0SignedBeaconBlock(b)))
    29  	blockRoot, err := b.Block.HashTreeRoot()
    30  	require.NoError(t, err)
    31  	bs := &Server{
    32  		BeaconDB: db,
    33  	}
    34  	res, err := bs.GetBlock(ctx, &pbrpc.BlockRequest{
    35  		BlockRoot: blockRoot[:],
    36  	})
    37  	require.NoError(t, err)
    38  	wanted, err := b.MarshalSSZ()
    39  	require.NoError(t, err)
    40  	assert.DeepEqual(t, wanted, res.Encoded)
    41  
    42  	// Checking for nil block.
    43  	blockRoot = [32]byte{}
    44  	res, err = bs.GetBlock(ctx, &pbrpc.BlockRequest{
    45  		BlockRoot: blockRoot[:],
    46  	})
    47  	require.NoError(t, err)
    48  	assert.DeepEqual(t, []byte{}, res.Encoded)
    49  }
    50  
    51  func TestServer_GetAttestationInclusionSlot(t *testing.T) {
    52  	db := dbTest.SetupDB(t)
    53  	ctx := context.Background()
    54  	offset := int64(2 * params.BeaconConfig().SlotsPerEpoch.Mul(params.BeaconConfig().SecondsPerSlot))
    55  	bs := &Server{
    56  		BeaconDB:           db,
    57  		StateGen:           stategen.New(db),
    58  		GenesisTimeFetcher: &mock.ChainService{Genesis: time.Now().Add(time.Duration(-1*offset) * time.Second)},
    59  	}
    60  
    61  	s, _ := testutil.DeterministicGenesisState(t, 2048)
    62  	tr := [32]byte{'a'}
    63  	require.NoError(t, bs.StateGen.SaveState(ctx, tr, s))
    64  	c, err := helpers.BeaconCommitteeFromState(s, 1, 0)
    65  	require.NoError(t, err)
    66  
    67  	a := &ethpb.Attestation{
    68  		Data: &ethpb.AttestationData{
    69  			Target:          &ethpb.Checkpoint{Root: tr[:]},
    70  			Source:          &ethpb.Checkpoint{Root: make([]byte, 32)},
    71  			BeaconBlockRoot: make([]byte, 32),
    72  			Slot:            1,
    73  		},
    74  		AggregationBits: bitfield.Bitlist{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01},
    75  		Signature:       make([]byte, 96),
    76  	}
    77  	b := testutil.NewBeaconBlock()
    78  	b.Block.Slot = 2
    79  	b.Block.Body.Attestations = []*ethpb.Attestation{a}
    80  	require.NoError(t, bs.BeaconDB.SaveBlock(ctx, wrapper.WrappedPhase0SignedBeaconBlock(b)))
    81  	res, err := bs.GetInclusionSlot(ctx, &pbrpc.InclusionSlotRequest{Slot: 1, Id: uint64(c[0])})
    82  	require.NoError(t, err)
    83  	require.Equal(t, b.Block.Slot, res.Slot)
    84  	res, err = bs.GetInclusionSlot(ctx, &pbrpc.InclusionSlotRequest{Slot: 1, Id: 9999999})
    85  	require.NoError(t, err)
    86  	require.Equal(t, params.BeaconConfig().FarFutureSlot, res.Slot)
    87  }