github.com/ouraigua/jenkins-library@v0.0.0-20231028010029-fbeaf2f3aa9b/integration/integration_golang_test.go (about) 1 //go:build integration 2 // +build integration 3 4 // can be executed with 5 // go test -v -tags integration -run TestGolangIntegration ./integration/... 6 7 package main 8 9 import ( 10 "testing" 11 12 "github.com/stretchr/testify/assert" 13 ) 14 15 // In this test the piper command golangBuild performs testing, BOM file creation and building a project with entry point in the cmd/server/server.go 16 // The configuration for golangBuild can be found in testdata/TestGolangIntegration/golang-project1/.pipeline/config.yml 17 func TestGolangIntegrationBuildProject1(t *testing.T) { 18 t.Parallel() 19 20 container := givenThisContainer(t, IntegrationTestDockerExecRunnerBundle{ 21 Image: "golang:1", 22 TestDir: []string{"testdata", "TestGolangIntegration", "golang-project1"}, 23 ExecNoLogin: true, 24 }) 25 defer container.terminate(t) 26 27 err := container.whenRunningPiperCommand("golangBuild") 28 assert.NoError(t, err) 29 30 container.assertHasOutput(t, 31 "info golangBuild - running command: go install gotest.tools/gotestsum@latest", 32 "info golangBuild - running command: go install github.com/CycloneDX/cyclonedx-gomod/cmd/cyclonedx-gomod@v1.4.0", 33 "info golangBuild - running command: gotestsum --junitfile TEST-go.xml --jsonfile unit-report.out -- -coverprofile=cover.out -tags=unit ./...", 34 "info golangBuild - DONE 8 tests", 35 "info golangBuild - running command: go tool cover -html cover.out -o coverage.html", 36 "info golangBuild - running command: gotestsum --junitfile TEST-integration.xml --jsonfile integration-report.out -- -tags=integration ./...", 37 "info golangBuild - running command: cyclonedx-gomod mod -licenses -verbose=false -test -output bom-golang.xml", 38 "info golangBuild - running command: go build -trimpath -o golang-app-linux.amd64 cmd/server/server.go", 39 "info golangBuild - SUCCESS", 40 ) 41 42 container.assertHasFiles(t, 43 "/project/TEST-go.xml", 44 "/project/TEST-integration.xml", 45 "/project/bom-golang.xml", 46 "/project/cover.out", 47 "/project/coverage.html", 48 "/project/golang-app-linux.amd64", 49 ) 50 } 51 52 // This test extends TestGolangIntegrationBuildProject1 with multi-package build 53 func TestGolangIntegrationBuildProject1MultiPackage(t *testing.T) { 54 t.Parallel() 55 56 container := givenThisContainer(t, IntegrationTestDockerExecRunnerBundle{ 57 Image: "golang:1", 58 TestDir: []string{"testdata", "TestGolangIntegration", "golang-project1"}, 59 ExecNoLogin: true, 60 }) 61 defer container.terminate(t) 62 63 err := container.whenRunningPiperCommand("golangBuild", "--packages", "github.com/example/golang-app/cmd/server,github.com/example/golang-app/cmd/helper") 64 assert.NoError(t, err) 65 66 container.assertHasOutput(t, "info golangBuild - running command: go install gotest.tools/gotestsum@latest", 67 "info golangBuild - running command: go install github.com/CycloneDX/cyclonedx-gomod/cmd/cyclonedx-gomod@v1.4.0", 68 "info golangBuild - running command: gotestsum --junitfile TEST-go.xml --jsonfile unit-report.out -- -coverprofile=cover.out -tags=unit ./...", 69 "info golangBuild - DONE 8 tests", 70 "info golangBuild - running command: go tool cover -html cover.out -o coverage.html", 71 "info golangBuild - running command: gotestsum --junitfile TEST-integration.xml --jsonfile integration-report.out -- -tags=integration ./...", 72 "info golangBuild - running command: cyclonedx-gomod mod -licenses -verbose=false -test -output bom-golang.xml", 73 "info golangBuild - running command: go build -trimpath -o golang-app-linux-amd64/ github.com/example/golang-app/cmd/server github.com/example/golang-app/cmd/helper", 74 "info golangBuild - SUCCESS", 75 ) 76 77 container.assertHasFiles(t, 78 "/project/TEST-go.xml", 79 "/project/TEST-integration.xml", 80 "/project/bom-golang.xml", 81 "/project/cover.out", 82 "/project/coverage.html", 83 "/project/golang-app-linux-amd64/server", 84 "/project/golang-app-linux-amd64/helper", 85 ) 86 } 87 88 // In this test, the piper golangBuild command only builds the project with the entry point at the project root. 89 // The configuration for golangBuild can be found in testdata/TestGolangIntegration/golang-project2/.pipeline/config.yml 90 func TestGolangIntegrationBuildProject2(t *testing.T) { 91 t.Parallel() 92 93 container := givenThisContainer(t, IntegrationTestDockerExecRunnerBundle{ 94 Image: "golang:1", 95 TestDir: []string{"testdata", "TestGolangIntegration", "golang-project2"}, 96 ExecNoLogin: true, 97 }) 98 defer container.terminate(t) 99 100 err := container.whenRunningPiperCommand("golangBuild") 101 assert.NoError(t, err) 102 103 container.assertHasNoOutput(t, 104 "info golangBuild - running command: go install gotest.tools/gotestsum@latest", 105 "info golangBuild - running command: go install github.com/CycloneDX/cyclonedx-gomod/cmd/cyclonedx-gomod@v1.4.0", 106 "info golangBuild - running command: gotestsum --junitfile TEST-go.xml --jsonfile unit-report.out -- -coverprofile=cover.out -tags=unit ./...", 107 "info golangBuild - running command: go tool cover -html cover.out -o coverage.html", 108 "info golangBuild - running command: gotestsum --junitfile TEST-integration.xml --jsonfile integration-report.out -- -tags=integration ./...", 109 "info golangBuild - running command: cyclonedx-gomod mod -licenses -verbose=false -test -output bom-golang.xml", 110 ) 111 112 container.assertHasOutput(t, 113 "info golangBuild - running command: go build -trimpath -o golang-app-linux.amd64", 114 "info golangBuild - SUCCESS", 115 ) 116 }