github.com/ouraigua/jenkins-library@v0.0.0-20231028010029-fbeaf2f3aa9b/pkg/transportrequest/solman/upload_test.go (about) 1 //go:build unit 2 // +build unit 3 4 package solman 5 6 import ( 7 "fmt" 8 "github.com/SAP/jenkins-library/pkg/mock" 9 "github.com/stretchr/testify/assert" 10 "testing" 11 ) 12 13 func TestSolmanUpload(t *testing.T) { 14 15 f := &mock.FilesMock{} 16 f.AddFile("myDeployable.xxx", []byte("")) 17 18 defaultUploadAction := UploadAction{} 19 defaultUploadAction.WithConnection( 20 Connection{ 21 Endpoint: "https://example.org/solman", 22 User: "me", 23 Password: "******", 24 }) 25 defaultUploadAction.WithChangeDocumentID("123456") 26 defaultUploadAction.WithTransportRequestID("000K11111111") 27 defaultUploadAction.WithApplicationID("MY_APP") 28 defaultUploadAction.WithFile("myDeployable.xxx") 29 defaultUploadAction.WithCMOpts([]string{"-Dmyprop1=abc", "-Dmyprop2=def"}) 30 31 t.Run("Deployable does not exist", func(t *testing.T) { 32 33 uploadActionFileMissing := defaultUploadAction 34 uploadActionFileMissing.WithFile("myMissingDeployable.xxx") 35 e := &mock.ExecMockRunner{} 36 37 err := uploadActionFileMissing.Perform(f, e) 38 39 assert.EqualError(t, err, "cannot upload artifact 'myMissingDeployable.xxx': file 'myMissingDeployable.xxx' does not exist") 40 }) 41 42 t.Run("Straight forward", func(t *testing.T) { 43 44 e := &mock.ExecMockRunner{} 45 46 err := defaultUploadAction.Perform(f, e) 47 48 if assert.NoError(t, err) { 49 assert.Len(t, e.Calls, 1) 50 assert.Equal(t, mock.ExecCall{ 51 Exec: "cmclient", 52 Params: []string{ 53 "--endpoint", "https://example.org/solman", 54 "--user", "me", 55 "--password", "******", 56 "upload-file-to-transport", 57 "-cID", "123456", 58 "-tID", "000K11111111", 59 "MY_APP", 60 "myDeployable.xxx", 61 }, 62 }, e.Calls[0]) 63 assert.Equal(t, []string{"CMCLIENT_OPTS=-Dmyprop1=abc -Dmyprop2=def"}, e.Env) 64 } 65 }) 66 67 t.Run("Missing parameters", func(t *testing.T) { 68 e := &mock.ExecMockRunner{} 69 uploadAction := defaultUploadAction 70 uploadAction.WithConnection( 71 Connection{ 72 Endpoint: "", 73 User: "me", 74 Password: "******", 75 }, 76 ) 77 uploadAction.WithTransportRequestID("") 78 err := uploadAction.Perform(f, e) 79 if assert.Error(t, err) { 80 // we should not rely on the order of the missing parameters 81 assert.Contains(t, err.Error(), "cannot upload artifact 'myDeployable.xxx': the following parameters are not available") 82 assert.Contains(t, err.Error(), "Connection.Endpoint") 83 assert.Contains(t, err.Error(), "TransportRequestID") 84 } 85 }) 86 87 t.Run("Deploy command returns with return code not equal zero", func(t *testing.T) { 88 89 e := &mock.ExecMockRunner{} 90 e.ExitCode = 1 91 92 err := defaultUploadAction.Perform(f, e) 93 94 assert.EqualError(t, err, "cannot upload artifact 'myDeployable.xxx': upload command returned with exit code '1'") 95 }) 96 97 t.Run("Deploy command cannot be executed", func(t *testing.T) { 98 99 e := &mock.ExecMockRunner{ 100 ShouldFailOnCommand: map[string]error{ 101 "cmclient.*": fmt.Errorf("cannot execute upload command"), 102 }, 103 } 104 105 err := defaultUploadAction.Perform(f, e) 106 107 assert.EqualError(t, err, "cannot upload artifact 'myDeployable.xxx': cannot execute upload command") 108 }) 109 110 }