1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2025-07-15 01:34:38 +02:00

fix(golangBuild) properly handle multi main package builds

Co-authored-by: Pavel Busko <pavel.busko@sap.com>
This commit is contained in:
Gareth Evans
2022-04-14 12:37:07 +02:00
committed by Pavel Busko
parent 2ed1ed76fc
commit 74b6b09609
2 changed files with 140 additions and 20 deletions

View File

@ -72,7 +72,7 @@ func newGolangBuildTestsUtils() *golangBuildMockUtils {
utils := golangBuildMockUtils{
ExecMockRunner: &mock.ExecMockRunner{},
FilesMock: &mock.FilesMock{},
//clientOptions: []piperhttp.ClientOptions{},
// clientOptions: []piperhttp.ClientOptions{},
fileUploads: map[string]string{},
}
return &utils
@ -632,14 +632,15 @@ func TestRunGolangBuildPerArchitecture(t *testing.T) {
ldflags := "-X test=test"
architecture, _ := multiarch.ParsePlatformString("linux,amd64")
binaryName, err := runGolangBuildPerArchitecture(&config, utils, ldflags, architecture)
binaryNames, err := runGolangBuildPerArchitecture(&config, utils, ldflags, architecture)
assert.NoError(t, err)
assert.Contains(t, utils.Calls[0].Params, "-o")
assert.Contains(t, utils.Calls[0].Params, "testBin-linux.amd64")
assert.Contains(t, utils.Calls[0].Params, "./test/..")
assert.Contains(t, utils.Calls[0].Params, "-ldflags")
assert.Contains(t, utils.Calls[0].Params, "-X test=test")
assert.Equal(t, "testBin-linux.amd64", binaryName)
assert.Len(t, binaryNames, 1)
assert.Contains(t, binaryNames, "testBin-linux.amd64")
})
t.Run("success - windows", func(t *testing.T) {
@ -649,11 +650,80 @@ func TestRunGolangBuildPerArchitecture(t *testing.T) {
ldflags := ""
architecture, _ := multiarch.ParsePlatformString("windows,amd64")
binaryName, err := runGolangBuildPerArchitecture(&config, utils, ldflags, architecture)
binaryNames, err := runGolangBuildPerArchitecture(&config, utils, ldflags, architecture)
assert.NoError(t, err)
assert.Contains(t, utils.Calls[0].Params, "-o")
assert.Contains(t, utils.Calls[0].Params, "testBin-windows.amd64.exe")
assert.Equal(t, "testBin-windows.amd64.exe", binaryName)
assert.Len(t, binaryNames, 1)
assert.Contains(t, binaryNames, "testBin-windows.amd64.exe")
})
t.Run("success - multiple main packages (linux)", func(t *testing.T) {
t.Parallel()
config := golangBuildOptions{Output: "test/", Packages: []string{"package/foo", "package/bar"}}
utils := newGolangBuildTestsUtils()
utils.StdoutReturn = map[string]string{
"go list -f {{ .Name }} package/foo": "main",
"go list -f {{ .Name }} package/bar": "main",
}
ldflags := ""
architecture, _ := multiarch.ParsePlatformString("linux,amd64")
binaryNames, err := runGolangBuildPerArchitecture(&config, utils, ldflags, architecture)
assert.NoError(t, err)
assert.Contains(t, utils.Calls[0].Params, "list")
assert.Contains(t, utils.Calls[0].Params, "package/foo")
assert.Contains(t, utils.Calls[1].Params, "list")
assert.Contains(t, utils.Calls[1].Params, "package/bar")
assert.Len(t, binaryNames, 2)
assert.Contains(t, binaryNames, "test-linux-amd64/foo")
assert.Contains(t, binaryNames, "test-linux-amd64/bar")
})
t.Run("success - multiple main packages (windows)", func(t *testing.T) {
t.Parallel()
config := golangBuildOptions{Output: "test/", Packages: []string{"package/foo", "package/bar"}}
utils := newGolangBuildTestsUtils()
utils.StdoutReturn = map[string]string{
"go list -f {{ .Name }} package/foo": "main",
"go list -f {{ .Name }} package/bar": "main",
}
ldflags := ""
architecture, _ := multiarch.ParsePlatformString("windows,amd64")
binaryNames, err := runGolangBuildPerArchitecture(&config, utils, ldflags, architecture)
assert.NoError(t, err)
assert.Contains(t, utils.Calls[0].Params, "list")
assert.Contains(t, utils.Calls[0].Params, "package/foo")
assert.Contains(t, utils.Calls[1].Params, "list")
assert.Contains(t, utils.Calls[1].Params, "package/bar")
assert.Len(t, binaryNames, 2)
assert.Contains(t, binaryNames, "test-windows-amd64/foo.exe")
assert.Contains(t, binaryNames, "test-windows-amd64/bar.exe")
})
t.Run("success - multiple mixed packages", func(t *testing.T) {
t.Parallel()
config := golangBuildOptions{Output: "test/", Packages: []string{"package/foo", "package/bar"}}
utils := newGolangBuildTestsUtils()
utils.StdoutReturn = map[string]string{
"go list -f {{ .Name }} package/foo": "main",
"go list -f {{ .Name }} package/bar": "bar",
}
ldflags := ""
architecture, _ := multiarch.ParsePlatformString("linux,amd64")
binaryNames, err := runGolangBuildPerArchitecture(&config, utils, ldflags, architecture)
assert.NoError(t, err)
assert.Contains(t, utils.Calls[0].Params, "list")
assert.Contains(t, utils.Calls[0].Params, "package/foo")
assert.Contains(t, utils.Calls[1].Params, "list")
assert.Contains(t, utils.Calls[1].Params, "package/bar")
assert.Len(t, binaryNames, 1)
assert.Contains(t, binaryNames, "test-linux-amd64/foo")
})
t.Run("execution error", func(t *testing.T) {