From 5278ab51c8449ca33300486ae7ba4cd74d6ad4d9 Mon Sep 17 00:00:00 2001 From: Michael Eischer Date: Sat, 20 Aug 2022 11:56:00 +0200 Subject: [PATCH] archiver: Check that duplicates are only ignored if identical --- internal/archiver/tree_saver_test.go | 39 ++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/internal/archiver/tree_saver_test.go b/internal/archiver/tree_saver_test.go index 053b3e249..ab55a2742 100644 --- a/internal/archiver/tree_saver_test.go +++ b/internal/archiver/tree_saver_test.go @@ -8,6 +8,7 @@ import ( "github.com/restic/restic/internal/errors" "github.com/restic/restic/internal/restic" + "github.com/restic/restic/internal/test" "golang.org/x/sync/errgroup" ) @@ -119,3 +120,41 @@ func TestTreeSaverError(t *testing.T) { }) } } + +func TestTreeSaverDuplicates(t *testing.T) { + for _, identicalNodes := range []bool{true, false} { + t.Run("", func(t *testing.T) { + ctx, cancel, b, shutdown := setupTreeSaver() + defer cancel() + + node := &restic.Node{ + Name: "file", + } + nodes := []FutureNode{ + newFutureNodeWithResult(futureNodeResult{node: &restic.Node{ + Name: "child", + }}), + } + if identicalNodes { + nodes = append(nodes, newFutureNodeWithResult(futureNodeResult{node: &restic.Node{ + Name: "child", + }})) + } else { + nodes = append(nodes, newFutureNodeWithResult(futureNodeResult{node: &restic.Node{ + Name: "child", + Size: 42, + }})) + } + + fb := b.Save(ctx, join("/", node.Name), node.Name, node, nodes, nil) + fb.take(ctx) + + err := shutdown() + if identicalNodes { + test.Assert(t, err == nil, "unexpected error found: %v", err) + } else { + test.Assert(t, err != nil, "expected error not found") + } + }) + } +}