github.com/joselitofilho/goreleaser@v0.155.1-0.20210123221854-e4891856c593/pkg/archive/zip/zip_test.go (about)

     1  package zip
     2  
     3  import (
     4  	"archive/zip"
     5  	"fmt"
     6  	"os"
     7  	"path/filepath"
     8  	"testing"
     9  
    10  	"github.com/stretchr/testify/require"
    11  )
    12  
    13  func TestZipFile(t *testing.T) {
    14  	var tmp = t.TempDir()
    15  	f, err := os.Create(filepath.Join(tmp, "test.zip"))
    16  	require.NoError(t, err)
    17  	fmt.Println(f.Name())
    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() < 900, "archived file should be smaller than %d", info.Size())
    41  
    42  	r, err := zip.NewReader(f, info.Size())
    43  	require.NoError(t, err)
    44  
    45  	var paths = make([]string, len(r.File))
    46  	for i, zf := range r.File {
    47  		paths[i] = zf.Name
    48  		t.Logf("%s: %v", zf.Name, zf.Mode())
    49  		if zf.Name == "sub1/executable" {
    50  			var ex = zf.Mode() | 0111
    51  			require.Equal(t, zf.Mode().String(), ex.String())
    52  		}
    53  	}
    54  	require.Equal(t, []string{
    55  		"foo.txt",
    56  		"sub1/bar.txt",
    57  		"sub1/executable",
    58  		"sub1/sub2/subfoo.txt",
    59  	}, paths)
    60  }