github.com/ava-labs/avalanchego@v1.11.11/cache/cachetest/cacher.go (about)

     1  // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved.
     2  // See the file LICENSE for licensing terms.
     3  
     4  package cachetest
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/stretchr/testify/require"
    10  
    11  	"github.com/ava-labs/avalanchego/cache"
    12  	"github.com/ava-labs/avalanchego/ids"
    13  )
    14  
    15  const IntSize = ids.IDLen + 8
    16  
    17  func IntSizeFunc(ids.ID, int64) int {
    18  	return IntSize
    19  }
    20  
    21  // Tests is a list of all Cacher tests
    22  var Tests = []struct {
    23  	Size int
    24  	Func func(t *testing.T, c cache.Cacher[ids.ID, int64])
    25  }{
    26  	{Size: 1, Func: TestBasic},
    27  	{Size: 2, Func: TestEviction},
    28  }
    29  
    30  func TestBasic(t *testing.T, cache cache.Cacher[ids.ID, int64]) {
    31  	require := require.New(t)
    32  
    33  	id1 := ids.ID{1}
    34  	_, found := cache.Get(id1)
    35  	require.False(found)
    36  
    37  	expectedValue1 := int64(1)
    38  	cache.Put(id1, expectedValue1)
    39  	value, found := cache.Get(id1)
    40  	require.True(found)
    41  	require.Equal(expectedValue1, value)
    42  
    43  	cache.Put(id1, expectedValue1)
    44  	value, found = cache.Get(id1)
    45  	require.True(found)
    46  	require.Equal(expectedValue1, value)
    47  
    48  	cache.Put(id1, expectedValue1)
    49  	value, found = cache.Get(id1)
    50  	require.True(found)
    51  	require.Equal(expectedValue1, value)
    52  
    53  	id2 := ids.ID{2}
    54  
    55  	expectedValue2 := int64(2)
    56  	cache.Put(id2, expectedValue2)
    57  	_, found = cache.Get(id1)
    58  	require.False(found)
    59  
    60  	value, found = cache.Get(id2)
    61  	require.True(found)
    62  	require.Equal(expectedValue2, value)
    63  }
    64  
    65  func TestEviction(t *testing.T, cache cache.Cacher[ids.ID, int64]) {
    66  	require := require.New(t)
    67  
    68  	id1 := ids.ID{1}
    69  	id2 := ids.ID{2}
    70  	id3 := ids.ID{3}
    71  
    72  	expectedValue1 := int64(1)
    73  	expectedValue2 := int64(2)
    74  	expectedValue3 := int64(3)
    75  
    76  	require.Zero(cache.Len())
    77  
    78  	cache.Put(id1, expectedValue1)
    79  
    80  	require.Equal(1, cache.Len())
    81  
    82  	cache.Put(id2, expectedValue2)
    83  
    84  	require.Equal(2, cache.Len())
    85  
    86  	val, found := cache.Get(id1)
    87  	require.True(found)
    88  	require.Equal(expectedValue1, val)
    89  
    90  	val, found = cache.Get(id2)
    91  	require.True(found)
    92  	require.Equal(expectedValue2, val)
    93  
    94  	_, found = cache.Get(id3)
    95  	require.False(found)
    96  
    97  	cache.Put(id3, expectedValue3)
    98  	require.Equal(2, cache.Len())
    99  
   100  	_, found = cache.Get(id1)
   101  	require.False(found)
   102  
   103  	val, found = cache.Get(id2)
   104  	require.True(found)
   105  	require.Equal(expectedValue2, val)
   106  
   107  	val, found = cache.Get(id3)
   108  	require.True(found)
   109  	require.Equal(expectedValue3, val)
   110  
   111  	cache.Get(id2)
   112  	cache.Put(id1, expectedValue1)
   113  
   114  	val, found = cache.Get(id1)
   115  	require.True(found)
   116  	require.Equal(expectedValue1, val)
   117  
   118  	val, found = cache.Get(id2)
   119  	require.True(found)
   120  	require.Equal(expectedValue2, val)
   121  
   122  	_, found = cache.Get(id3)
   123  	require.False(found)
   124  
   125  	cache.Evict(id2)
   126  	cache.Put(id3, expectedValue3)
   127  
   128  	val, found = cache.Get(id1)
   129  	require.True(found)
   130  	require.Equal(expectedValue1, val)
   131  
   132  	_, found = cache.Get(id2)
   133  	require.False(found)
   134  
   135  	val, found = cache.Get(id3)
   136  	require.True(found)
   137  	require.Equal(expectedValue3, val)
   138  
   139  	cache.Flush()
   140  
   141  	_, found = cache.Get(id1)
   142  	require.False(found)
   143  	_, found = cache.Get(id2)
   144  	require.False(found)
   145  	_, found = cache.Get(id3)
   146  	require.False(found)
   147  }