gitlab.com/apertussolutions/u-root@v7.0.0+incompatible/pkg/tarutil/tar_test.go (about) 1 // Copyright 2019 the u-root Authors. All rights reserved 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package tarutil 6 7 import ( 8 "io/ioutil" 9 "os" 10 "os/exec" 11 "path/filepath" 12 "testing" 13 ) 14 15 func extractAndCompare(t *testing.T, files []struct{ name, body string }) { 16 f, err := os.Open("test.tar") 17 if err != nil { 18 t.Fatal(err) 19 } 20 defer f.Close() 21 22 tmpDir := "tartest" 23 if err := ExtractDir(f, tmpDir); err != nil { 24 t.Fatal(err) 25 } 26 27 for _, f := range files { 28 body, err := ioutil.ReadFile(filepath.Join(tmpDir, f.name)) 29 if err != nil { 30 t.Errorf("could not read %s: %v", f.name, err) 31 continue 32 } 33 if string(body) != f.body { 34 t.Errorf("for file %s, got %q, want %q", 35 f.name, string(body), f.body) 36 } 37 } 38 } 39 40 func TestExtractDir(t *testing.T) { 41 tmpDir, err := ioutil.TempDir("", "tartest") 42 if err != nil { 43 t.Fatal(err) 44 } 45 defer os.RemoveAll(tmpDir) 46 47 var files = []struct { 48 name, body string 49 }{ 50 {"a.txt", "hello\n"}, 51 {"dir/b.txt", "world\n"}, 52 } 53 extractAndCompare(t, files) 54 } 55 56 func TestExtractDirNotExist(t *testing.T) { 57 tmpDir := "tartest" 58 defer os.RemoveAll(tmpDir) // ExtractDir should have created dir 59 60 var files = []struct { 61 name, body string 62 }{ 63 {"a.txt", "hello\n"}, 64 {"dir/b.txt", "world\n"}, 65 } 66 extractAndCompare(t, files) 67 } 68 69 func TestCreateTarSingleFile(t *testing.T) { 70 tmpDir, err := ioutil.TempDir("", "tartest") 71 if err != nil { 72 t.Fatal(err) 73 } 74 defer os.RemoveAll(tmpDir) 75 76 filename := filepath.Join(tmpDir, "test.tar") 77 f, err := os.Create(filename) 78 if err != nil { 79 t.Fatal(err) 80 } 81 defer f.Close() 82 83 if err := CreateTar(f, []string{"test0"}); err != nil { 84 t.Fatal(err) 85 } 86 87 out, err := exec.Command("tar", "-tf", filename).CombinedOutput() 88 if err != nil { 89 t.Fatalf("system tar could not parse the file: %v", err) 90 } 91 expected := `test0 92 test0/a.txt 93 test0/dir 94 test0/dir/b.txt 95 ` 96 if string(out) != expected { 97 t.Fatalf("got %q, want %q", string(out), expected) 98 } 99 } 100 101 func TestCreateTarMultFiles(t *testing.T) { 102 tmpDir, err := ioutil.TempDir("", "tartest") 103 if err != nil { 104 t.Fatal(err) 105 } 106 defer os.RemoveAll(tmpDir) 107 108 filename := filepath.Join(tmpDir, "test.tar") 109 f, err := os.Create(filename) 110 if err != nil { 111 t.Fatal(err) 112 } 113 defer f.Close() 114 115 files := []string{"test0", "test1", "test2.txt"} 116 if err := CreateTar(f, files); err != nil { 117 t.Fatal(err) 118 } 119 120 out, err := exec.Command("tar", "-tf", filename).CombinedOutput() 121 if err != nil { 122 t.Fatalf("system tar could not parse the file: %v", err) 123 } 124 expected := `test0 125 test0/a.txt 126 test0/dir 127 test0/dir/b.txt 128 test1 129 test1/a1.txt 130 test2.txt 131 ` 132 if string(out) != expected { 133 t.Fatalf("got %q, want %q", string(out), expected) 134 } 135 } 136 137 func TestListArchive(t *testing.T) { 138 f, err := os.Open("test.tar") 139 if err != nil { 140 t.Fatal(err) 141 } 142 defer f.Close() 143 144 if err := ListArchive(f); err != nil { 145 t.Fatal(err) 146 } 147 }