github.com/storacha/go-ucanto@v0.7.2/server/retrieval/cache_test.go (about)

     1  package retrieval
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/storacha/go-ucanto/core/delegation"
     8  	"github.com/storacha/go-ucanto/testing/fixtures"
     9  	"github.com/storacha/go-ucanto/ucan"
    10  	"github.com/stretchr/testify/require"
    11  )
    12  
    13  func TestMemoryDelegationCache(t *testing.T) {
    14  	dlg, err := delegation.Delegate(
    15  		fixtures.Alice,
    16  		fixtures.Alice,
    17  		[]ucan.Capability[ucan.NoCaveats]{
    18  			ucan.NewCapability(
    19  				"test/cache",
    20  				fixtures.Alice.DID().String(),
    21  				ucan.NoCaveats{},
    22  			),
    23  		},
    24  	)
    25  	require.NoError(t, err)
    26  
    27  	t.Run("put", func(t *testing.T) {
    28  		cache, err := NewMemoryDelegationCache(5)
    29  		require.NoError(t, err)
    30  		err = cache.Put(t.Context(), dlg)
    31  		require.NoError(t, err)
    32  	})
    33  
    34  	t.Run("get", func(t *testing.T) {
    35  		cache, err := NewMemoryDelegationCache(5)
    36  		require.NoError(t, err)
    37  
    38  		err = cache.Put(t.Context(), dlg)
    39  		require.NoError(t, err)
    40  
    41  		cached, ok, err := cache.Get(t.Context(), dlg.Link())
    42  		require.NoError(t, err)
    43  		require.True(t, ok)
    44  		require.Equal(t, dlg.Link().String(), cached.Link().String())
    45  	})
    46  
    47  	t.Run("miss", func(t *testing.T) {
    48  		cache, err := NewMemoryDelegationCache(5)
    49  		require.NoError(t, err)
    50  
    51  		cached, ok, err := cache.Get(t.Context(), dlg.Link())
    52  		require.NoError(t, err)
    53  		require.False(t, ok)
    54  		require.Nil(t, cached)
    55  	})
    56  
    57  	t.Run("uses default size if not specified", func(t *testing.T) {
    58  		cache, err := NewMemoryDelegationCache(-1)
    59  		require.NoError(t, err)
    60  
    61  		for i := range MemoryDelegationCacheSize + 1 {
    62  			dlg, err := delegation.Delegate(
    63  				fixtures.Alice,
    64  				fixtures.Alice,
    65  				[]ucan.Capability[ucan.NoCaveats]{
    66  					ucan.NewCapability(
    67  						"test/cache",
    68  						fixtures.Alice.DID().String(),
    69  						ucan.NoCaveats{},
    70  					),
    71  				},
    72  				delegation.WithNonce(fmt.Sprintf("%d", i)),
    73  			)
    74  			require.NoError(t, err)
    75  
    76  			err = cache.Put(t.Context(), dlg)
    77  			require.NoError(t, err)
    78  		}
    79  
    80  		require.Equal(t, MemoryDelegationCacheSize, cache.data.Len())
    81  	})
    82  }