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 }