github.com/prysmaticlabs/prysm@v1.4.4/slasher/detection/proposals/detector_test.go (about)

     1  package proposals
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  
     7  	"github.com/prysmaticlabs/prysm/beacon-chain/core/helpers"
     8  	ethpb "github.com/prysmaticlabs/prysm/proto/eth/v1alpha1"
     9  	"github.com/prysmaticlabs/prysm/shared/testutil/assert"
    10  	"github.com/prysmaticlabs/prysm/shared/testutil/require"
    11  	testDB "github.com/prysmaticlabs/prysm/slasher/db/testing"
    12  	"github.com/prysmaticlabs/prysm/slasher/detection/proposals/iface"
    13  	testDetect "github.com/prysmaticlabs/prysm/slasher/detection/testing"
    14  )
    15  
    16  var _ iface.ProposalsDetector = (*ProposeDetector)(nil)
    17  
    18  func TestProposalsDetector_DetectSlashingsForBlockHeaders(t *testing.T) {
    19  	type testStruct struct {
    20  		name        string
    21  		blk         *ethpb.SignedBeaconBlockHeader
    22  		incomingBlk *ethpb.SignedBeaconBlockHeader
    23  		slashing    *ethpb.ProposerSlashing
    24  	}
    25  	s0, err := helpers.StartSlot(0)
    26  	require.NoError(t, err)
    27  	blk1slot0, err := testDetect.SignedBlockHeader(s0, 0)
    28  	require.NoError(t, err)
    29  	blk2slot0, err := testDetect.SignedBlockHeader(s0, 0)
    30  	require.NoError(t, err)
    31  	blk1slot1, err := testDetect.SignedBlockHeader(s0+1, 0)
    32  	require.NoError(t, err)
    33  	s1, err := helpers.StartSlot(1)
    34  	require.NoError(t, err)
    35  	blk1epoch1, err := testDetect.SignedBlockHeader(s1, 0)
    36  	require.NoError(t, err)
    37  	tests := []testStruct{
    38  		{
    39  			name:        "same block sig dont slash",
    40  			blk:         blk1slot0,
    41  			incomingBlk: blk1slot0,
    42  			slashing:    nil,
    43  		},
    44  		{
    45  			name:        "block from different epoch dont slash",
    46  			blk:         blk1slot0,
    47  			incomingBlk: blk1epoch1,
    48  			slashing:    nil,
    49  		},
    50  		{
    51  			name:        "different sig from different slot dont slash",
    52  			blk:         blk1slot0,
    53  			incomingBlk: blk1slot1,
    54  			slashing:    nil,
    55  		},
    56  		{
    57  			name:        "different sig from same slot slash",
    58  			blk:         blk1slot0,
    59  			incomingBlk: blk2slot0,
    60  			slashing:    &ethpb.ProposerSlashing{Header_1: blk2slot0, Header_2: blk1slot0},
    61  		},
    62  	}
    63  
    64  	for _, tt := range tests {
    65  		t.Run(tt.name, func(t *testing.T) {
    66  			db := testDB.SetupSlasherDB(t, false)
    67  			ctx := context.Background()
    68  
    69  			sd := &ProposeDetector{
    70  				slasherDB: db,
    71  			}
    72  
    73  			require.NoError(t, sd.slasherDB.SaveBlockHeader(ctx, tt.blk))
    74  
    75  			res, err := sd.DetectDoublePropose(ctx, tt.incomingBlk)
    76  			require.NoError(t, err)
    77  			assert.DeepEqual(t, tt.slashing, res)
    78  		})
    79  	}
    80  }