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(&ethpb.Attestation{AggregationBits: bitfield.Bitlist{0b10000011}})
    16  	seenA2 := testutil.HydrateAttestation(&ethpb.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(&ethpb.Attestation{AggregationBits: bitfield.Bitlist{0b10000000}}), want: true},
    24  		{att: testutil.HydrateAttestation(&ethpb.Attestation{AggregationBits: bitfield.Bitlist{0b10000001}}), want: true},
    25  		{att: testutil.HydrateAttestation(&ethpb.Attestation{AggregationBits: bitfield.Bitlist{0b11100000}}), want: true},
    26  		{att: testutil.HydrateAttestation(&ethpb.Attestation{AggregationBits: bitfield.Bitlist{0b10000011}}), want: true},
    27  		{att: testutil.HydrateAttestation(&ethpb.Attestation{AggregationBits: bitfield.Bitlist{0b10001000}}), want: false},
    28  		{att: testutil.HydrateAttestation(&ethpb.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(&ethpb.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  }