github.com/anchore/syft@v1.38.2/internal/cache/error_resolver_test.go (about)

     1  package cache
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  	"time"
     7  
     8  	"github.com/stretchr/testify/require"
     9  )
    10  
    11  func Test_errorResolver(t *testing.T) {
    12  	original := GetManager()
    13  	defer SetManager(original)
    14  	SetManager(NewInMemory(time.Hour))
    15  
    16  	resolver := GetResolverCachingErrors[string]("theCache", "theVersion")
    17  
    18  	resolveCount := 0
    19  	resolveFunc := func() (string, error) {
    20  		resolveCount++
    21  		return "theValue", nil
    22  	}
    23  
    24  	val, err := resolver.Resolve("theKey", resolveFunc)
    25  	require.NoError(t, err)
    26  	require.Equal(t, 1, resolveCount)
    27  	require.Equal(t, "theValue", val)
    28  
    29  	val, err = resolver.Resolve("theKey", resolveFunc)
    30  	require.NoError(t, err)
    31  	require.Equal(t, 1, resolveCount)
    32  	require.Equal(t, "theValue", val)
    33  
    34  	errorCount := 0
    35  	errorFunc := func() (string, error) {
    36  		errorCount++
    37  		return "", fmt.Errorf("an error")
    38  	}
    39  
    40  	_, err = resolver.Resolve("errorValue", errorFunc)
    41  	require.ErrorContains(t, err, "an error")
    42  	require.Equal(t, 1, errorCount)
    43  
    44  	_, err = resolver.Resolve("errorValue", errorFunc)
    45  	require.ErrorContains(t, err, "an error")
    46  	require.Equal(t, 1, errorCount)
    47  }