1
0
mirror of https://github.com/goreleaser/goreleaser.git synced 2025-03-17 20:47:50 +02:00

test: improve source tests

Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>
This commit is contained in:
Carlos A Becker 2023-04-08 02:30:18 +00:00
parent 458bbb4a60
commit 00d16bb51d
No known key found for this signature in database
GPG Key ID: E61E2F7DC14AB940
3 changed files with 87 additions and 2 deletions

View File

@ -9,7 +9,6 @@ import (
"github.com/goreleaser/goreleaser/internal/testctx"
"github.com/goreleaser/goreleaser/internal/testlib"
"github.com/goreleaser/goreleaser/pkg/config"
"github.com/goreleaser/goreleaser/pkg/context"
"github.com/stretchr/testify/require"
)
@ -23,8 +22,20 @@ func TestArchive(t *testing.T) {
require.NoError(t, os.WriteFile("code.rb", []byte("not really code"), 0o655))
require.NoError(t, os.WriteFile("code.py", []byte("print 1"), 0o655))
require.NoError(t, os.WriteFile("README.md", []byte("# my dope fake project"), 0o655))
require.NoError(t, os.WriteFile(".gitignore", []byte(`
added-later.txt
ignored.txt
code.txt
subfolder/
`), 0o655))
require.NoError(t, os.WriteFile(".gitattributes", []byte(`
.VERSION export-subst
`), 0o655))
require.NoError(t, os.WriteFile(".VERSION", []byte("$Format:%d$"), 0o655))
testlib.GitAdd(t)
testlib.GitCommit(t, "feat: first")
testlib.GitTag(t, "v1.0.0")
require.NoError(t, os.WriteFile("added-later.txt", []byte("this file was added later"), 0o655))
require.NoError(t, os.WriteFile("ignored.md", []byte("never added"), 0o655))
require.NoError(t, os.WriteFile("code.txt", []byte("not really code"), 0o655))
@ -45,8 +56,9 @@ func TestArchive(t *testing.T) {
},
},
},
testctx.WithGitInfo(context.GitInfo{FullCommit: "HEAD"}),
testctx.WithCommit("HEAD"),
testctx.WithVersion("1.0.0"),
testctx.WithCurrentTag("v1.0.0"),
)
require.NoError(t, Pipe{}.Default(ctx))
@ -69,6 +81,9 @@ func TestArchive(t *testing.T) {
expected := []string{
"foo-1.0.0/",
"foo-1.0.0/.gitignore",
"foo-1.0.0/.gitattributes",
"foo-1.0.0/.VERSION",
"foo-1.0.0/README.md",
"foo-1.0.0/code.py",
"foo-1.0.0/code.rb",
@ -83,6 +98,9 @@ func TestArchive(t *testing.T) {
}
require.ElementsMatch(t, expected, testlib.LsArchive(t, path, format))
version := testlib.GetFileFromArchive(t, path, format, "foo-1.0.0/.VERSION")
require.Equal(t, " (HEAD -> main, tag: v1.0.0)", string(version))
})
}
}

View File

@ -70,6 +70,7 @@ func WithCurrentTag(tag string) Opt {
func WithCommit(commig string) Opt {
return func(ctx *context.Context) {
ctx.Git.Commit = commig
ctx.Git.FullCommit = commig
}
}

View File

@ -12,6 +12,30 @@ import (
"github.com/ulikunitz/xz"
)
// GetFileFromArchive returns the contents of filename inside the given archive
// path.
func GetFileFromArchive(tb testing.TB, path, format, filename string) []byte {
tb.Helper()
f := openFile(tb, path)
switch format {
case "tar.gz", "tgz":
return catTarFile(tb, openGzip(tb, f), filename)
case "tar.xz", "txz":
return catTarFile(tb, openXz(tb, f), filename)
case "tar":
return catTarFile(tb, f, filename)
case "zip":
return catZipFile(tb, f, filename)
case "gz":
out, err := io.ReadAll(openGzip(tb, f))
require.NoError(tb, err)
return out
default:
tb.Errorf("invalid format: %s", format)
return nil
}
}
// LsArchive return the file list of a given archive in a given formatkj
func LsArchive(tb testing.TB, path, format string) []string {
tb.Helper()
@ -47,6 +71,27 @@ func openXz(tb testing.TB, r io.Reader) *xz.Reader {
return xz
}
func catZipFile(tb testing.TB, f *os.File, path string) []byte {
tb.Helper()
stat, err := f.Stat()
require.NoError(tb, err)
z, err := zip.NewReader(f, stat.Size())
require.NoError(tb, err)
for _, zf := range z.File {
if path == zf.Name {
zz, err := zf.Open()
require.NoError(tb, err)
tb.Cleanup(func() { require.NoError(tb, zz.Close()) })
bts, err := io.ReadAll(zz)
require.NoError(tb, err)
return bts
}
}
return nil
}
func lsZip(tb testing.TB, f *os.File) []string {
tb.Helper()
@ -62,6 +107,27 @@ func lsZip(tb testing.TB, f *os.File) []string {
return paths
}
func catTarFile(tb testing.TB, f io.Reader, path string) []byte {
tb.Helper()
z := tar.NewReader(f)
for {
h, err := z.Next()
if h == nil || err == io.EOF {
break
}
if h.Format == tar.FormatPAX {
continue
}
if h.Name == path {
out, err := io.ReadAll(z)
require.NoError(tb, err)
return out
}
}
return nil
}
func doLsTar(f io.Reader) []string {
z := tar.NewReader(f)
var paths []string