From 244452224331d74439eb7cd3a51bd9f21f7e8498 Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Mon, 4 Sep 2017 21:39:21 +0200 Subject: [PATCH] Add test for colliding names --- internal/archiver/archiver_test.go | 54 ++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/internal/archiver/archiver_test.go b/internal/archiver/archiver_test.go index 2961d403c..aaaf02a22 100644 --- a/internal/archiver/archiver_test.go +++ b/internal/archiver/archiver_test.go @@ -4,6 +4,9 @@ import ( "bytes" "context" "io" + "io/ioutil" + "os" + "path/filepath" "testing" "time" @@ -312,3 +315,54 @@ func TestArchiveEmptySnapshot(t *testing.T) { t.Errorf("expected null snapshot for empty snapshot, got %v", sn) } } + +func chdir(t testing.TB, target string) (cleanup func()) { + curdir, err := os.Getwd() + if err != nil { + t.Fatal(err) + } + + t.Logf("chdir to %v", target) + err = os.Chdir(target) + if err != nil { + t.Fatal(err) + } + + return func() { + t.Logf("chdir back to %v", curdir) + err := os.Chdir(curdir) + if err != nil { + t.Fatal(err) + } + } +} + +func TestArchiveNameCollision(t *testing.T) { + repo, cleanup := repository.TestRepository(t) + defer cleanup() + + dir, cleanup := TempDir(t) + defer cleanup() + + root := filepath.Join(dir, "root") + OK(t, os.MkdirAll(root, 0755)) + + OK(t, ioutil.WriteFile(filepath.Join(dir, "testfile"), []byte("testfile1"), 0644)) + OK(t, ioutil.WriteFile(filepath.Join(dir, "root", "testfile"), []byte("testfile2"), 0644)) + + defer chdir(t, root)() + + arch := archiver.New(repo) + + sn, id, err := arch.Snapshot(context.TODO(), nil, []string{"testfile", filepath.Join("..", "testfile")}, nil, "localhost", nil) + OK(t, err) + + t.Logf("snapshot archived as %v", id) + + tree, err := repo.LoadTree(context.TODO(), *sn.Tree) + OK(t, err) + + if len(tree.Nodes) != 2 { + t.Fatalf("tree has %d nodes, wanted 2: %v", len(tree.Nodes), tree.Nodes) + } +}