github.com/weiwenhao/getter@v1.30.1/decompress_tar_test.go (about) 1 package getter 2 3 import ( 4 "io/ioutil" 5 "os" 6 "path/filepath" 7 "runtime" 8 "testing" 9 "time" 10 ) 11 12 func TestTar(t *testing.T) { 13 mtime := time.Unix(0, 0) 14 cases := []TestDecompressCase{ 15 { 16 "extended_header.tar", 17 true, 18 false, 19 []string{"directory/", "directory/a", "directory/b"}, 20 "", 21 nil, 22 }, 23 { 24 "implied_dir.tar", 25 true, 26 false, 27 []string{"directory/", "directory/sub/", "directory/sub/a", "directory/sub/b"}, 28 "", 29 nil, 30 }, 31 { 32 "unix_time_0.tar", 33 true, 34 false, 35 []string{"directory/", "directory/sub/", "directory/sub/a", "directory/sub/b"}, 36 "", 37 &mtime, 38 }, 39 } 40 41 for i, tc := range cases { 42 cases[i].Input = filepath.Join("./testdata", "decompress-tar", tc.Input) 43 } 44 45 TestDecompressor(t, new(TarDecompressor), cases) 46 } 47 48 // testDecompressPermissions decompresses a directory and checks the permissions of the expanded files 49 func testDecompressorPermissions(t *testing.T, d Decompressor, input string, expected map[string]int, umask os.FileMode) { 50 td, err := ioutil.TempDir("", "getter") 51 if err != nil { 52 t.Fatalf("err: %s", err) 53 } 54 55 // Destination is always joining result so that we have a new path 56 dst := filepath.Join(td, "subdir", "result") 57 58 err = d.Decompress(dst, input, true, umask) 59 if err != nil { 60 t.Fatalf("err: %s", err) 61 } 62 63 defer os.RemoveAll(dst) 64 65 for name, mode := range expected { 66 fi, err := os.Stat(filepath.Join(dst, name)) 67 if err != nil { 68 t.Fatalf("err: %s", err) 69 } 70 71 real := fi.Mode() 72 if real != os.FileMode(mode) { 73 t.Fatalf("err: %s expected mode %o got %o", name, mode, real) 74 } 75 } 76 } 77 78 func TestDecompressTarPermissions(t *testing.T) { 79 d := new(TarDecompressor) 80 input := "./test-fixtures/decompress-tar/permissions.tar" 81 82 var expected map[string]int 83 var masked int 84 85 if runtime.GOOS == "windows" { 86 expected = map[string]int{ 87 "directory/public": 0666, 88 "directory/private": 0666, 89 "directory/exec": 0666, 90 "directory/setuid": 0666, 91 } 92 masked = 0666 93 } else { 94 expected = map[string]int{ 95 "directory/public": 0666, 96 "directory/private": 0600, 97 "directory/exec": 0755, 98 "directory/setuid": 040000755, 99 } 100 masked = 0755 101 } 102 103 testDecompressorPermissions(t, d, input, expected, os.FileMode(0)) 104 105 expected["directory/setuid"] = masked 106 testDecompressorPermissions(t, d, input, expected, os.FileMode(060000000)) 107 }