archiver: Add tests for Save() for fs.Reader
This commit is contained in:
parent
c284712cae
commit
9a02f17cc2
1 changed files with 149 additions and 0 deletions
|
@ -43,6 +43,11 @@ func saveFile(t testing.TB, repo restic.Repository, filename string, filesystem
|
|||
arch := New(repo, filesystem, Options{})
|
||||
arch.runWorkers(ctx, &tmb)
|
||||
|
||||
arch.Error = func(item string, fi os.FileInfo, err error) error {
|
||||
t.Errorf("archiver error for %v: %v", item, err)
|
||||
return err
|
||||
}
|
||||
|
||||
var (
|
||||
completeCallbackNode *restic.Node
|
||||
completeCallbackStats ItemStats
|
||||
|
@ -196,6 +201,150 @@ func TestArchiverSaveFileReaderFS(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestArchiverSave(t *testing.T) {
|
||||
var tests = []TestFile{
|
||||
TestFile{Content: ""},
|
||||
TestFile{Content: "foo"},
|
||||
TestFile{Content: string(restictest.Random(23, 12*1024*1024+1287898))},
|
||||
}
|
||||
|
||||
for _, testfile := range tests {
|
||||
t.Run("", func(t *testing.T) {
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
|
||||
tempdir, repo, cleanup := prepareTempdirRepoSrc(t, TestDir{"file": testfile})
|
||||
defer cleanup()
|
||||
|
||||
var tmb tomb.Tomb
|
||||
|
||||
arch := New(repo, fs.Track{fs.Local{}}, Options{})
|
||||
arch.Error = func(item string, fi os.FileInfo, err error) error {
|
||||
t.Errorf("archiver error for %v: %v", item, err)
|
||||
return err
|
||||
}
|
||||
arch.runWorkers(tmb.Context(ctx), &tmb)
|
||||
|
||||
node, excluded, err := arch.Save(ctx, "/", filepath.Join(tempdir, "file"), nil)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if excluded {
|
||||
t.Errorf("Save() excluded the node, that's unexpected")
|
||||
}
|
||||
|
||||
node.wait(ctx)
|
||||
if node.err != nil {
|
||||
t.Fatal(node.err)
|
||||
}
|
||||
|
||||
if node.node == nil {
|
||||
t.Fatalf("returned node is nil")
|
||||
}
|
||||
|
||||
stats := node.stats
|
||||
|
||||
err = repo.Flush(ctx)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
TestEnsureFileContent(ctx, t, repo, "file", node.node, testfile)
|
||||
if stats.DataSize != uint64(len(testfile.Content)) {
|
||||
t.Errorf("wrong stats returned in DataSize, want %d, got %d", len(testfile.Content), stats.DataSize)
|
||||
}
|
||||
if stats.DataBlobs <= 0 && len(testfile.Content) > 0 {
|
||||
t.Errorf("wrong stats returned in DataBlobs, want > 0, got %d", stats.DataBlobs)
|
||||
}
|
||||
if stats.TreeSize != 0 {
|
||||
t.Errorf("wrong stats returned in TreeSize, want 0, got %d", stats.TreeSize)
|
||||
}
|
||||
if stats.TreeBlobs != 0 {
|
||||
t.Errorf("wrong stats returned in DataBlobs, want 0, got %d", stats.DataBlobs)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestArchiverSaveReaderFS(t *testing.T) {
|
||||
var tests = []struct {
|
||||
Data string
|
||||
}{
|
||||
{Data: ""},
|
||||
{Data: "foo"},
|
||||
{Data: string(restictest.Random(23, 12*1024*1024+1287898))},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
t.Run("", func(t *testing.T) {
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
|
||||
repo, cleanup := repository.TestRepository(t)
|
||||
defer cleanup()
|
||||
|
||||
ts := time.Now()
|
||||
filename := "xx"
|
||||
readerFs := &fs.Reader{
|
||||
ModTime: ts,
|
||||
Mode: 0123,
|
||||
Name: filename,
|
||||
ReadCloser: ioutil.NopCloser(strings.NewReader(test.Data)),
|
||||
}
|
||||
|
||||
var tmb tomb.Tomb
|
||||
|
||||
arch := New(repo, readerFs, Options{})
|
||||
arch.Error = func(item string, fi os.FileInfo, err error) error {
|
||||
t.Errorf("archiver error for %v: %v", item, err)
|
||||
return err
|
||||
}
|
||||
arch.runWorkers(tmb.Context(ctx), &tmb)
|
||||
|
||||
node, excluded, err := arch.Save(ctx, "/", filename, nil)
|
||||
t.Logf("Save returned %v %v", node, err)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if excluded {
|
||||
t.Errorf("Save() excluded the node, that's unexpected")
|
||||
}
|
||||
|
||||
node.wait(ctx)
|
||||
if node.err != nil {
|
||||
t.Fatal(node.err)
|
||||
}
|
||||
|
||||
if node.node == nil {
|
||||
t.Fatalf("returned node is nil")
|
||||
}
|
||||
|
||||
stats := node.stats
|
||||
|
||||
err = repo.Flush(ctx)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
TestEnsureFileContent(ctx, t, repo, "file", node.node, TestFile{Content: test.Data})
|
||||
if stats.DataSize != uint64(len(test.Data)) {
|
||||
t.Errorf("wrong stats returned in DataSize, want %d, got %d", len(test.Data), stats.DataSize)
|
||||
}
|
||||
if stats.DataBlobs <= 0 && len(test.Data) > 0 {
|
||||
t.Errorf("wrong stats returned in DataBlobs, want > 0, got %d", stats.DataBlobs)
|
||||
}
|
||||
if stats.TreeSize != 0 {
|
||||
t.Errorf("wrong stats returned in TreeSize, want 0, got %d", stats.TreeSize)
|
||||
}
|
||||
if stats.TreeBlobs != 0 {
|
||||
t.Errorf("wrong stats returned in DataBlobs, want 0, got %d", stats.DataBlobs)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func BenchmarkArchiverSaveFileSmall(b *testing.B) {
|
||||
const fileSize = 4 * 1024
|
||||
d := TestDir{"file": TestFile{
|
||||
|
|
Loading…
Reference in a new issue