//go:build go1.17 // +build go1.17 package restic import ( "sort" "strings" "testing" "github.com/rclone/rclone/fstest/mockobject" "github.com/stretchr/testify/assert" ) func (c *cache) String() string { keys := []string{} c.mu.Lock() for k := range c.items { keys = append(keys, k) } c.mu.Unlock() sort.Strings(keys) return strings.Join(keys, ",") } func TestCacheCRUD(t *testing.T) { c := newCache() assert.Equal(t, "", c.String()) assert.Nil(t, c.find("potato")) o := mockobject.New("potato") c.add(o.Remote(), o) assert.Equal(t, "potato", c.String()) assert.Equal(t, o, c.find("potato")) c.remove("potato") assert.Equal(t, "", c.String()) assert.Nil(t, c.find("potato")) c.remove("notfound") } func TestCacheRemovePrefix(t *testing.T) { c := newCache() for _, remote := range []string{ "a", "b", "b/1", "b/2/3", "b/2/4", "b/2", "c", } { c.add(remote, mockobject.New(remote)) } assert.Equal(t, "a,b,b/1,b/2,b/2/3,b/2/4,c", c.String()) c.removePrefix("b") assert.Equal(t, "a,b,c", c.String()) c.removePrefix("/") assert.Equal(t, "", c.String()) }