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 }