github.com/joselitofilho/goreleaser@v0.155.1-0.20210123221854-e4891856c593/pkg/archive/tarxz/tarxz_test.go (about) 1 package tarxz 2 3 import ( 4 "archive/tar" 5 "io" 6 "os" 7 "path/filepath" 8 "testing" 9 10 "github.com/stretchr/testify/require" 11 "github.com/ulikunitz/xz" 12 ) 13 14 func TestTarXzFile(t *testing.T) { 15 var tmp = t.TempDir() 16 f, err := os.Create(filepath.Join(tmp, "test.tar.xz")) 17 require.NoError(t, err) 18 defer f.Close() // nolint: errcheck 19 archive := New(f) 20 21 require.Error(t, archive.Add("nope.txt", "../testdata/nope.txt")) 22 require.NoError(t, archive.Add("foo.txt", "../testdata/foo.txt")) 23 require.NoError(t, archive.Add("sub1", "../testdata/sub1")) 24 require.NoError(t, archive.Add("sub1/bar.txt", "../testdata/sub1/bar.txt")) 25 require.NoError(t, archive.Add("sub1/executable", "../testdata/sub1/executable")) 26 require.NoError(t, archive.Add("sub1/sub2", "../testdata/sub1/sub2")) 27 require.NoError(t, archive.Add("sub1/sub2/subfoo.txt", "../testdata/sub1/sub2/subfoo.txt")) 28 29 require.NoError(t, archive.Close()) 30 require.Error(t, archive.Add("tar.go", "tar.go")) 31 require.NoError(t, f.Close()) 32 33 t.Log(f.Name()) 34 f, err = os.Open(f.Name()) 35 require.NoError(t, err) 36 defer f.Close() // nolint: errcheck 37 38 info, err := f.Stat() 39 require.NoError(t, err) 40 require.Truef(t, info.Size() < 500, "archived file should be smaller than %d", info.Size()) 41 42 xzf, err := xz.NewReader(f) 43 require.NoError(t, err) 44 //defer xzf.Close() // nolint: errcheck 45 46 var paths []string 47 r := tar.NewReader(xzf) 48 for { 49 next, err := r.Next() 50 if err == io.EOF { 51 break 52 } 53 require.NoError(t, err) 54 paths = append(paths, next.Name) 55 t.Logf("%s: %v", next.Name, next.FileInfo().Mode()) 56 if next.Name == "sub1/executable" { 57 var ex = next.FileInfo().Mode() | 0111 58 require.Equal(t, next.FileInfo().Mode().String(), ex.String()) 59 } 60 } 61 require.Equal(t, []string{ 62 "foo.txt", 63 "sub1", 64 "sub1/bar.txt", 65 "sub1/executable", 66 "sub1/sub2", 67 "sub1/sub2/subfoo.txt", 68 }, paths) 69 }