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

     1  package gzip
     2  
     3  import (
     4  	"compress/gzip"
     5  	"io"
     6  	"os"
     7  	"path/filepath"
     8  	"testing"
     9  	"time"
    10  
    11  	"github.com/goreleaser/goreleaser/pkg/config"
    12  	"github.com/stretchr/testify/require"
    13  )
    14  
    15  func TestGzFile(t *testing.T) {
    16  	tmp := t.TempDir()
    17  	f, err := os.Create(filepath.Join(tmp, "test.gz"))
    18  	require.NoError(t, err)
    19  	defer f.Close() // nolint: errcheck
    20  	archive := New(f)
    21  	defer archive.Close() // nolint: errcheck
    22  
    23  	require.NoError(t, archive.Add(config.File{
    24  		Destination: "sub1/sub2/subfoo.txt",
    25  		Source:      "../testdata/sub1/sub2/subfoo.txt",
    26  	}))
    27  	require.EqualError(t, archive.Add(config.File{
    28  		Destination: "foo.txt",
    29  		Source:      "../testdata/foo.txt",
    30  	}), "gzip: failed to add foo.txt, only one file can be archived in gz format")
    31  	require.NoError(t, archive.Close())
    32  	require.NoError(t, f.Close())
    33  
    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.Lessf(t, info.Size(), int64(500), "archived file should be smaller than %d", info.Size())
    41  
    42  	gzf, err := gzip.NewReader(f)
    43  	require.NoError(t, err)
    44  	defer gzf.Close() // nolint: errcheck
    45  
    46  	require.Equal(t, "sub1/sub2/subfoo.txt", gzf.Name)
    47  
    48  	bts, err := io.ReadAll(gzf)
    49  	require.NoError(t, err)
    50  	require.Equal(t, "sub\n", string(bts))
    51  }
    52  
    53  func TestGzFileCustomMtime(t *testing.T) {
    54  	f, err := os.Create(filepath.Join(t.TempDir(), "test.gz"))
    55  	require.NoError(t, err)
    56  	defer f.Close() // nolint: errcheck
    57  	archive := New(f)
    58  	defer archive.Close() // nolint: errcheck
    59  
    60  	now := time.Now().Truncate(time.Second)
    61  
    62  	require.NoError(t, archive.Add(config.File{
    63  		Destination: "sub1/sub2/subfoo.txt",
    64  		Source:      "../testdata/sub1/sub2/subfoo.txt",
    65  		Info: config.FileInfo{
    66  			ParsedMTime: now,
    67  		},
    68  	}))
    69  	require.NoError(t, archive.Close())
    70  	require.NoError(t, f.Close())
    71  
    72  	f, err = os.Open(f.Name())
    73  	require.NoError(t, err)
    74  	defer f.Close() // nolint: errcheck
    75  
    76  	info, err := f.Stat()
    77  	require.NoError(t, err)
    78  	require.Lessf(t, info.Size(), int64(500), "archived file should be smaller than %d", info.Size())
    79  
    80  	gzf, err := gzip.NewReader(f)
    81  	require.NoError(t, err)
    82  	defer gzf.Close() // nolint: errcheck
    83  
    84  	require.Equal(t, "sub1/sub2/subfoo.txt", gzf.Name)
    85  	require.Equal(t, now, gzf.Header.ModTime)
    86  }