github.com/jaylevin/jenkins-library@v1.230.4/cmd/pythonBuild_test.go (about) 1 package cmd 2 3 import ( 4 "fmt" 5 "path/filepath" 6 "testing" 7 8 piperhttp "github.com/SAP/jenkins-library/pkg/http" 9 "github.com/SAP/jenkins-library/pkg/telemetry" 10 11 "github.com/stretchr/testify/assert" 12 13 "github.com/SAP/jenkins-library/pkg/mock" 14 ) 15 16 type pythonBuildMockUtils struct { 17 t *testing.T 18 config *pythonBuildOptions 19 *mock.ExecMockRunner 20 *mock.FilesMock 21 } 22 23 type puthonBuildMockUtils struct { 24 *mock.ExecMockRunner 25 *mock.FilesMock 26 27 clientOptions []piperhttp.ClientOptions // set by mock 28 fileUploads map[string]string // set by mock 29 } 30 31 func newPythonBuildTestsUtils() pythonBuildMockUtils { 32 utils := pythonBuildMockUtils{ 33 ExecMockRunner: &mock.ExecMockRunner{}, 34 FilesMock: &mock.FilesMock{}, 35 } 36 return utils 37 } 38 39 func (f *pythonBuildMockUtils) GetConfig() *pythonBuildOptions { 40 return f.config 41 } 42 43 func TestRunPythonBuild(t *testing.T) { 44 cpe := pythonBuildCommonPipelineEnvironment{} 45 t.Run("success - build", func(t *testing.T) { 46 config := pythonBuildOptions{ 47 VirutalEnvironmentName: "dummy", 48 } 49 utils := newPythonBuildTestsUtils() 50 telemetryData := telemetry.CustomData{} 51 52 runPythonBuild(&config, &telemetryData, utils, &cpe) 53 assert.Equal(t, "python3", utils.ExecMockRunner.Calls[0].Exec) 54 assert.Equal(t, []string{"-m", "venv", "dummy"}, utils.ExecMockRunner.Calls[0].Params) 55 }) 56 57 t.Run("failure - build failure", func(t *testing.T) { 58 config := pythonBuildOptions{} 59 utils := newPythonBuildTestsUtils() 60 utils.ShouldFailOnCommand = map[string]error{"python setup.py sdist bdist_wheel": fmt.Errorf("build failure")} 61 telemetryData := telemetry.CustomData{} 62 63 err := runPythonBuild(&config, &telemetryData, utils, &cpe) 64 assert.EqualError(t, err, "Python build failed with error: build failure") 65 }) 66 67 t.Run("success - publishes binaries", func(t *testing.T) { 68 config := pythonBuildOptions{ 69 Publish: true, 70 TargetRepositoryURL: "https://my.target.repository.local", 71 TargetRepositoryUser: "user", 72 TargetRepositoryPassword: "password", 73 VirutalEnvironmentName: "dummy", 74 } 75 utils := newPythonBuildTestsUtils() 76 telemetryData := telemetry.CustomData{} 77 78 runPythonBuild(&config, &telemetryData, utils, &cpe) 79 assert.Equal(t, "python3", utils.ExecMockRunner.Calls[0].Exec) 80 assert.Equal(t, []string{"-m", "venv", config.VirutalEnvironmentName}, utils.ExecMockRunner.Calls[0].Params) 81 assert.Equal(t, "bash", utils.ExecMockRunner.Calls[1].Exec) 82 assert.Equal(t, []string{"-c", "source " + filepath.Join("dummy", "bin", "activate")}, utils.ExecMockRunner.Calls[1].Params) 83 assert.Equal(t, "python", utils.ExecMockRunner.Calls[2].Exec) 84 assert.Equal(t, []string{"setup.py", "sdist", "bdist_wheel"}, utils.ExecMockRunner.Calls[2].Params) 85 assert.Equal(t, filepath.Join("dummy", "bin", "pip"), utils.ExecMockRunner.Calls[3].Exec) 86 assert.Equal(t, []string{"install", "--upgrade", "twine"}, utils.ExecMockRunner.Calls[3].Params) 87 assert.Equal(t, filepath.Join("dummy", "bin", "twine"), utils.ExecMockRunner.Calls[4].Exec) 88 assert.Equal(t, []string{"upload", "--username", config.TargetRepositoryUser, 89 "--password", config.TargetRepositoryPassword, "--repository-url", config.TargetRepositoryURL, 90 "dist/*"}, utils.ExecMockRunner.Calls[4].Params) 91 }) 92 93 t.Run("success - create BOM", func(t *testing.T) { 94 config := pythonBuildOptions{ 95 CreateBOM: true, 96 Publish: false, 97 VirutalEnvironmentName: "dummy", 98 } 99 utils := newPythonBuildTestsUtils() 100 telemetryData := telemetry.CustomData{} 101 102 runPythonBuild(&config, &telemetryData, utils, &cpe) 103 // assert.NoError(t, err) 104 assert.Equal(t, "python3", utils.ExecMockRunner.Calls[0].Exec) 105 assert.Equal(t, []string{"-m", "venv", config.VirutalEnvironmentName}, utils.ExecMockRunner.Calls[0].Params) 106 assert.Equal(t, "bash", utils.ExecMockRunner.Calls[1].Exec) 107 assert.Equal(t, []string{"-c", "source " + filepath.Join("dummy", "bin", "activate")}, utils.ExecMockRunner.Calls[1].Params) 108 assert.Equal(t, "python", utils.ExecMockRunner.Calls[2].Exec) 109 assert.Equal(t, []string{"setup.py", "sdist", "bdist_wheel"}, utils.ExecMockRunner.Calls[2].Params) 110 assert.Equal(t, filepath.Join("dummy", "bin", "pip"), utils.ExecMockRunner.Calls[3].Exec) 111 assert.Equal(t, []string{"install", "--upgrade", "cyclonedx-bom"}, utils.ExecMockRunner.Calls[3].Params) 112 assert.Equal(t, filepath.Join("dummy", "bin", "cyclonedx-bom"), utils.ExecMockRunner.Calls[4].Exec) 113 assert.Equal(t, []string{"--e", "--output", "bom.xml"}, utils.ExecMockRunner.Calls[4].Params) 114 }) 115 }