vitess.io/vitess@v0.16.2/go/cache/cache_test.go (about)

     1  package cache
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/require"
     8  
     9  	"vitess.io/vitess/go/cache/ristretto"
    10  )
    11  
    12  func TestNewDefaultCacheImpl(t *testing.T) {
    13  	assertNullCache := func(t *testing.T, cache Cache) {
    14  		_, ok := cache.(*nullCache)
    15  		require.True(t, ok)
    16  	}
    17  
    18  	assertLFUCache := func(t *testing.T, cache Cache) {
    19  		_, ok := cache.(*ristretto.Cache)
    20  		require.True(t, ok)
    21  	}
    22  
    23  	assertLRUCache := func(t *testing.T, cache Cache) {
    24  		_, ok := cache.(*LRUCache)
    25  		require.True(t, ok)
    26  	}
    27  
    28  	tests := []struct {
    29  		cfg    *Config
    30  		verify func(t *testing.T, cache Cache)
    31  	}{
    32  		{&Config{MaxEntries: 0, MaxMemoryUsage: 0, LFU: false}, assertNullCache},
    33  		{&Config{MaxEntries: 0, MaxMemoryUsage: 0, LFU: true}, assertNullCache},
    34  		{&Config{MaxEntries: 100, MaxMemoryUsage: 0, LFU: false}, assertLRUCache},
    35  		{&Config{MaxEntries: 0, MaxMemoryUsage: 1000, LFU: false}, assertNullCache},
    36  		{&Config{MaxEntries: 100, MaxMemoryUsage: 1000, LFU: false}, assertLRUCache},
    37  		{&Config{MaxEntries: 100, MaxMemoryUsage: 0, LFU: true}, assertNullCache},
    38  		{&Config{MaxEntries: 100, MaxMemoryUsage: 1000, LFU: true}, assertLFUCache},
    39  		{&Config{MaxEntries: 0, MaxMemoryUsage: 1000, LFU: true}, assertNullCache},
    40  	}
    41  	for _, tt := range tests {
    42  		t.Run(fmt.Sprintf("%d.%d.%v", tt.cfg.MaxEntries, tt.cfg.MaxMemoryUsage, tt.cfg.LFU), func(t *testing.T) {
    43  			cache := NewDefaultCacheImpl(tt.cfg)
    44  			tt.verify(t, cache)
    45  		})
    46  	}
    47  }