github.com/prysmaticlabs/prysm@v1.4.4/beacon-chain/operations/attestations/kv/seen_bits_test.go (about) 1 package kv 2 3 import ( 4 "testing" 5 6 "github.com/prysmaticlabs/go-bitfield" 7 ethpb "github.com/prysmaticlabs/prysm/proto/eth/v1alpha1" 8 "github.com/prysmaticlabs/prysm/shared/testutil" 9 "github.com/prysmaticlabs/prysm/shared/testutil/require" 10 ) 11 12 func TestAttCaches_hasSeenBit(t *testing.T) { 13 c := NewAttCaches() 14 15 seenA1 := testutil.HydrateAttestation(ðpb.Attestation{AggregationBits: bitfield.Bitlist{0b10000011}}) 16 seenA2 := testutil.HydrateAttestation(ðpb.Attestation{AggregationBits: bitfield.Bitlist{0b11100000}}) 17 require.NoError(t, c.insertSeenBit(seenA1)) 18 require.NoError(t, c.insertSeenBit(seenA2)) 19 tests := []struct { 20 att *ethpb.Attestation 21 want bool 22 }{ 23 {att: testutil.HydrateAttestation(ðpb.Attestation{AggregationBits: bitfield.Bitlist{0b10000000}}), want: true}, 24 {att: testutil.HydrateAttestation(ðpb.Attestation{AggregationBits: bitfield.Bitlist{0b10000001}}), want: true}, 25 {att: testutil.HydrateAttestation(ðpb.Attestation{AggregationBits: bitfield.Bitlist{0b11100000}}), want: true}, 26 {att: testutil.HydrateAttestation(ðpb.Attestation{AggregationBits: bitfield.Bitlist{0b10000011}}), want: true}, 27 {att: testutil.HydrateAttestation(ðpb.Attestation{AggregationBits: bitfield.Bitlist{0b10001000}}), want: false}, 28 {att: testutil.HydrateAttestation(ðpb.Attestation{AggregationBits: bitfield.Bitlist{0b11110111}}), want: false}, 29 } 30 for _, tt := range tests { 31 got, err := c.hasSeenBit(tt.att) 32 require.NoError(t, err) 33 if got != tt.want { 34 t.Errorf("hasSeenBit() got = %v, want %v", got, tt.want) 35 } 36 } 37 } 38 39 func TestAttCaches_insertSeenBitDuplicates(t *testing.T) { 40 c := NewAttCaches() 41 att1 := testutil.HydrateAttestation(ðpb.Attestation{AggregationBits: bitfield.Bitlist{0b10000011}}) 42 r, err := hashFn(att1.Data) 43 require.NoError(t, err) 44 require.NoError(t, c.insertSeenBit(att1)) 45 require.Equal(t, 1, c.seenAtt.ItemCount()) 46 47 _, expirationTime1, ok := c.seenAtt.GetWithExpiration(string(r[:])) 48 require.Equal(t, true, ok) 49 50 // Make sure that duplicates are not inserted, but expiration time gets updated. 51 require.NoError(t, c.insertSeenBit(att1)) 52 require.Equal(t, 1, c.seenAtt.ItemCount()) 53 _, expirationTime2, ok := c.seenAtt.GetWithExpiration(string(r[:])) 54 require.Equal(t, true, ok) 55 require.Equal(t, true, expirationTime2.After(expirationTime1), "Expiration time is not updated") 56 }