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  }