rclone/cmd/serve/restic/cache_test.go

59 lines
1.1 KiB
Go

//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())
}