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  }