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