github.com/goreleaser/goreleaser@v1.25.1/pkg/archive/archive_test.go (about)

     1  package archive
     2  
     3  import (
     4  	"io"
     5  	"os"
     6  	"path/filepath"
     7  	"testing"
     8  
     9  	"github.com/goreleaser/goreleaser/internal/testlib"
    10  	"github.com/goreleaser/goreleaser/pkg/config"
    11  	"github.com/stretchr/testify/require"
    12  )
    13  
    14  func TestArchive(t *testing.T) {
    15  	folder := t.TempDir()
    16  	empty, err := os.Create(folder + "/empty.txt")
    17  	require.NoError(t, err)
    18  	require.NoError(t, empty.Close())
    19  	require.NoError(t, os.Mkdir(folder+"/folder-inside", 0o755))
    20  
    21  	for _, format := range []string{"tar.gz", "zip", "gz", "tar.xz", "tar", "tgz", "txz"} {
    22  		format := format
    23  		t.Run(format, func(t *testing.T) {
    24  			f1, err := os.Create(filepath.Join(t.TempDir(), "1.tar"))
    25  			require.NoError(t, err)
    26  
    27  			archive, err := New(f1, format)
    28  			require.NoError(t, err)
    29  			require.NoError(t, archive.Add(config.File{
    30  				Source:      empty.Name(),
    31  				Destination: "empty.txt",
    32  			}))
    33  			require.Error(t, archive.Add(config.File{
    34  				Source:      empty.Name() + "_nope",
    35  				Destination: "dont.txt",
    36  			}))
    37  			require.NoError(t, archive.Close())
    38  			require.NoError(t, f1.Close())
    39  
    40  			if format == "tar.xz" || format == "txz" || format == "gz" {
    41  				_, err := Copying(f1, io.Discard, format)
    42  				require.Error(t, err)
    43  				return
    44  			}
    45  
    46  			f1, err = os.Open(f1.Name())
    47  			require.NoError(t, err)
    48  			f2, err := os.Create(filepath.Join(t.TempDir(), "2.tar"))
    49  			require.NoError(t, err)
    50  
    51  			a, err := Copying(f1, f2, format)
    52  			require.NoError(t, err)
    53  			require.NoError(t, f1.Close())
    54  
    55  			require.NoError(t, a.Add(config.File{
    56  				Source:      empty.Name(),
    57  				Destination: "added_later.txt",
    58  			}))
    59  			require.NoError(t, a.Add(config.File{
    60  				Source:      empty.Name(),
    61  				Destination: "ملف.txt",
    62  			}))
    63  			require.NoError(t, a.Close())
    64  			require.NoError(t, f2.Close())
    65  
    66  			require.ElementsMatch(
    67  				t,
    68  				[]string{"empty.txt", "added_later.txt", "ملف.txt"},
    69  				testlib.LsArchive(t, f2.Name(), format),
    70  			)
    71  		})
    72  	}
    73  
    74  	// unsupported format...
    75  	t.Run("7z", func(t *testing.T) {
    76  		_, err := New(io.Discard, "7z")
    77  		require.EqualError(t, err, "invalid archive format: 7z")
    78  	})
    79  }