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: ðpb.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 }