mirror of https://github.com/octoleo/restic.git
69 lines
1.9 KiB
Go
69 lines
1.9 KiB
Go
package restic_test
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/restic/restic/internal/backend"
|
|
"github.com/restic/restic/internal/restic"
|
|
rtest "github.com/restic/restic/internal/test"
|
|
)
|
|
|
|
type ListHelper struct {
|
|
ListFn func(ctx context.Context, t restic.FileType, fn func(restic.ID, int64) error) error
|
|
}
|
|
|
|
func (l *ListHelper) List(ctx context.Context, t restic.FileType, fn func(restic.ID, int64) error) error {
|
|
return l.ListFn(ctx, t, fn)
|
|
}
|
|
|
|
func TestMemoizeList(t *testing.T) {
|
|
// setup backend to serve as data source for memoized list
|
|
be := &ListHelper{}
|
|
|
|
type FileInfo struct {
|
|
ID restic.ID
|
|
Size int64
|
|
}
|
|
files := []FileInfo{
|
|
{ID: restic.NewRandomID(), Size: 42},
|
|
{ID: restic.NewRandomID(), Size: 45},
|
|
}
|
|
be.ListFn = func(ctx context.Context, t restic.FileType, fn func(restic.ID, int64) error) error {
|
|
for _, fi := range files {
|
|
if err := fn(fi.ID, fi.Size); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
mem, err := restic.MemorizeList(context.TODO(), be, backend.SnapshotFile)
|
|
rtest.OK(t, err)
|
|
|
|
err = mem.List(context.TODO(), backend.IndexFile, func(id restic.ID, size int64) error {
|
|
t.Fatal("file type mismatch")
|
|
return nil // the memoized lister must return an error by itself
|
|
})
|
|
rtest.Assert(t, err != nil, "missing error on file typ mismatch")
|
|
|
|
var memFiles []FileInfo
|
|
err = mem.List(context.TODO(), backend.SnapshotFile, func(id restic.ID, size int64) error {
|
|
memFiles = append(memFiles, FileInfo{ID: id, Size: size})
|
|
return nil
|
|
})
|
|
rtest.OK(t, err)
|
|
rtest.Equals(t, files, memFiles)
|
|
}
|
|
|
|
func TestMemoizeListError(t *testing.T) {
|
|
// setup backend to serve as data source for memoized list
|
|
be := &ListHelper{}
|
|
be.ListFn = func(ctx context.Context, t backend.FileType, fn func(restic.ID, int64) error) error {
|
|
return fmt.Errorf("list error")
|
|
}
|
|
_, err := restic.MemorizeList(context.TODO(), be, backend.SnapshotFile)
|
|
rtest.Assert(t, err != nil, "missing error on list error")
|
|
}
|