github.com/mckael/restic@v0.8.3/internal/restic/tree_test.go (about) 1 package restic_test 2 3 import ( 4 "context" 5 "encoding/json" 6 "io/ioutil" 7 "os" 8 "path/filepath" 9 "testing" 10 11 "github.com/restic/restic/internal/repository" 12 "github.com/restic/restic/internal/restic" 13 rtest "github.com/restic/restic/internal/test" 14 ) 15 16 var testFiles = []struct { 17 name string 18 content []byte 19 }{ 20 {"foo", []byte("bar")}, 21 {"bar/foo2", []byte("bar2")}, 22 {"bar/bla/blubb", []byte("This is just a test!\n")}, 23 } 24 25 func createTempDir(t *testing.T) string { 26 tempdir, err := ioutil.TempDir(rtest.TestTempDir, "restic-test-") 27 rtest.OK(t, err) 28 29 for _, test := range testFiles { 30 file := filepath.Join(tempdir, test.name) 31 dir := filepath.Dir(file) 32 if dir != "." { 33 rtest.OK(t, os.MkdirAll(dir, 0755)) 34 } 35 36 f, err := os.Create(file) 37 defer func() { 38 rtest.OK(t, f.Close()) 39 }() 40 41 rtest.OK(t, err) 42 43 _, err = f.Write(test.content) 44 rtest.OK(t, err) 45 } 46 47 return tempdir 48 } 49 50 func TestTree(t *testing.T) { 51 dir := createTempDir(t) 52 defer func() { 53 if rtest.TestCleanupTempDirs { 54 rtest.RemoveAll(t, dir) 55 } 56 }() 57 } 58 59 var testNodes = []restic.Node{ 60 {Name: "normal"}, 61 {Name: "with backslashes \\zzz"}, 62 {Name: "test utf-8 föbärß"}, 63 {Name: "test invalid \x00\x01\x02\x03\x04"}, 64 {Name: "test latin1 \x75\x6d\x6c\xe4\xfc\x74\xf6\x6e\xdf\x6e\x6c\x6c"}, 65 } 66 67 func TestNodeMarshal(t *testing.T) { 68 for i, n := range testNodes { 69 data, err := json.Marshal(&n) 70 rtest.OK(t, err) 71 72 var node restic.Node 73 err = json.Unmarshal(data, &node) 74 rtest.OK(t, err) 75 76 if n.Name != node.Name { 77 t.Fatalf("Node %d: Names are not equal, want: %q got: %q", i, n.Name, node.Name) 78 } 79 } 80 } 81 82 func TestNodeComparison(t *testing.T) { 83 fi, err := os.Lstat("tree_test.go") 84 rtest.OK(t, err) 85 86 node, err := restic.NodeFromFileInfo("tree_test.go", fi) 87 rtest.OK(t, err) 88 89 n2 := *node 90 rtest.Assert(t, node.Equals(n2), "nodes aren't equal") 91 92 n2.Size-- 93 rtest.Assert(t, !node.Equals(n2), "nodes are equal") 94 } 95 96 func TestLoadTree(t *testing.T) { 97 repo, cleanup := repository.TestRepository(t) 98 defer cleanup() 99 100 // save tree 101 tree := restic.NewTree() 102 id, err := repo.SaveTree(context.TODO(), tree) 103 rtest.OK(t, err) 104 105 // save packs 106 rtest.OK(t, repo.Flush(context.Background())) 107 108 // load tree again 109 tree2, err := repo.LoadTree(context.TODO(), id) 110 rtest.OK(t, err) 111 112 rtest.Assert(t, tree.Equals(tree2), 113 "trees are not equal: want %v, got %v", 114 tree, tree2) 115 }