github.com/axxelG/goreleaser@v0.92.0/pkg/archive/tar/tar_test.go (about)

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