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  }