mirror of
https://github.com/restic/restic.git
synced 2025-12-08 06:09:56 +00:00
archiver: assert number of uploaded chunks in fileSaver test
This commit is contained in:
parent
7f6fdcc52c
commit
3f92987974
2 changed files with 23 additions and 10 deletions
|
|
@ -30,7 +30,7 @@ func createTestFiles(t testing.TB, num int) (files []string) {
|
||||||
return files
|
return files
|
||||||
}
|
}
|
||||||
|
|
||||||
func startFileSaver(ctx context.Context, t testing.TB, _ fs.FS) (*fileSaver, context.Context, *errgroup.Group) {
|
func startFileSaver(ctx context.Context, t testing.TB, _ fs.FS) (*fileSaver, *mockSaver, context.Context, *errgroup.Group) {
|
||||||
wg, ctx := errgroup.WithContext(ctx)
|
wg, ctx := errgroup.WithContext(ctx)
|
||||||
|
|
||||||
workers := uint(runtime.NumCPU())
|
workers := uint(runtime.NumCPU())
|
||||||
|
|
@ -39,26 +39,26 @@ func startFileSaver(ctx context.Context, t testing.TB, _ fs.FS) (*fileSaver, con
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
s := newFileSaver(ctx, wg, &noopSaver{}, pol, workers)
|
saver := &mockSaver{saved: make(map[string]int)}
|
||||||
|
s := newFileSaver(ctx, wg, saver, pol, workers)
|
||||||
s.NodeFromFileInfo = func(snPath, filename string, meta ToNoder, ignoreXattrListError bool) (*data.Node, error) {
|
s.NodeFromFileInfo = func(snPath, filename string, meta ToNoder, ignoreXattrListError bool) (*data.Node, error) {
|
||||||
return meta.ToNode(ignoreXattrListError, t.Logf)
|
return meta.ToNode(ignoreXattrListError, t.Logf)
|
||||||
}
|
}
|
||||||
|
|
||||||
return s, ctx, wg
|
return s, saver, ctx, wg
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestFileSaver(t *testing.T) {
|
func TestFileSaver(t *testing.T) {
|
||||||
ctx, cancel := context.WithCancel(context.Background())
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
files := createTestFiles(t, 15)
|
|
||||||
|
|
||||||
startFn := func() {}
|
startFn := func() {}
|
||||||
completeReadingFn := func() {}
|
completeReadingFn := func() {}
|
||||||
completeFn := func(*data.Node, ItemStats) {}
|
completeFn := func(*data.Node, ItemStats) {}
|
||||||
|
|
||||||
|
files := createTestFiles(t, 15)
|
||||||
testFs := fs.Local{}
|
testFs := fs.Local{}
|
||||||
s, ctx, wg := startFileSaver(ctx, t, testFs)
|
s, saver, ctx, wg := startFileSaver(ctx, t, testFs)
|
||||||
|
|
||||||
var results []futureNode
|
var results []futureNode
|
||||||
|
|
||||||
|
|
@ -79,6 +79,8 @@ func TestFileSaver(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
test.Assert(t, len(saver.saved) == len(files), "expected %d saved files, got %d", len(files), len(saver.saved))
|
||||||
|
|
||||||
s.TriggerShutdown()
|
s.TriggerShutdown()
|
||||||
|
|
||||||
err := wg.Wait()
|
err := wg.Wait()
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"sync"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/restic/restic/internal/data"
|
"github.com/restic/restic/internal/data"
|
||||||
|
|
@ -13,10 +14,20 @@ import (
|
||||||
"golang.org/x/sync/errgroup"
|
"golang.org/x/sync/errgroup"
|
||||||
)
|
)
|
||||||
|
|
||||||
type noopSaver struct{}
|
type mockSaver struct {
|
||||||
|
saved map[string]int
|
||||||
|
mutex sync.Mutex
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *mockSaver) SaveBlobAsync(_ context.Context, _ restic.BlobType, buf []byte, id restic.ID, storeDuplicate bool, cb func(newID restic.ID, known bool, sizeInRepo int, err error)) {
|
||||||
|
// Fake async operation
|
||||||
|
go func() {
|
||||||
|
m.mutex.Lock()
|
||||||
|
m.saved[string(buf)]++
|
||||||
|
m.mutex.Unlock()
|
||||||
|
|
||||||
func (n *noopSaver) SaveBlobAsync(_ context.Context, _ restic.BlobType, buf []byte, id restic.ID, storeDuplicate bool, cb func(newID restic.ID, known bool, sizeInRepo int, err error)) {
|
|
||||||
cb(restic.Hash(buf), false, len(buf), nil)
|
cb(restic.Hash(buf), false, len(buf), nil)
|
||||||
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
func setupTreeSaver() (context.Context, context.CancelFunc, *treeSaver, func() error) {
|
func setupTreeSaver() (context.Context, context.CancelFunc, *treeSaver, func() error) {
|
||||||
|
|
@ -27,7 +38,7 @@ func setupTreeSaver() (context.Context, context.CancelFunc, *treeSaver, func() e
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
b := newTreeSaver(ctx, wg, uint(runtime.NumCPU()), &noopSaver{}, errFn)
|
b := newTreeSaver(ctx, wg, uint(runtime.NumCPU()), &mockSaver{saved: make(map[string]int)}, errFn)
|
||||||
|
|
||||||
shutdown := func() error {
|
shutdown := func() error {
|
||||||
b.TriggerShutdown()
|
b.TriggerShutdown()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue