github.com/ouraigua/jenkins-library@v0.0.0-20231028010029-fbeaf2f3aa9b/pkg/transportrequest/rfc/upload_test.go (about) 1 //go:build unit 2 // +build unit 3 4 package rfc 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 TestUploadRFC(t *testing.T) { 14 15 defaultUploadAction := UploadAction{ 16 Connection: Connection{ 17 Endpoint: "https://example.org/rfc", 18 Client: "001", 19 Instance: "DEV", 20 User: "me", 21 Password: "******", 22 }, 23 Application: Application{ 24 Name: "myApp", 25 Description: "The description", 26 AbapPackage: "YYY", 27 }, 28 Configuration: UploadConfig{ 29 AcceptUnixStyleEndOfLine: true, 30 CodePage: "UTF-8", 31 FailUploadOnWarning: true, 32 Verbose: true, 33 }, 34 TransportRequestID: "123456", 35 ApplicationURL: "https://localhost:8081/myDeployable.zip", 36 } 37 38 t.Run("straight forward", func(t *testing.T) { 39 40 exec := mock.ExecMockRunner{} 41 42 upload := defaultUploadAction 43 44 err := upload.Perform(&exec) 45 46 if assert.NoError(t, err) { 47 assert.Equal(t, exec.Calls, []mock.ExecCall{{Exec: "cts", Params: []string{"uploadToABAP:123456"}}}) 48 assert.Subset(t, []string{ 49 "ABAP_DEVELOPMENT_SERVER=https://example.org/rfc", 50 "ABAP_DEVELOPMENT_USER=me", 51 "ABAP_DEVELOPMENT_PASSWORD=******", 52 "ABAP_DEVELOPMENT_INSTANCE=DEV", 53 "ABAP_DEVELOPMENT_CLIENT=001", 54 "ABAP_APPLICATION_NAME=myApp", 55 "ABAP_APPLICATION_DESC=The description", 56 "ABAP_PACKAGE=YYY", 57 "ZIP_FILE_URL=https://localhost:8081/myDeployable.zip", 58 "CODE_PAGE=UTF-8", 59 "ABAP_ACCEPT_UNIX_STYLE_EOL=X", 60 "FAIL_UPLOAD_ON_WARNING=true", 61 "VERBOSE=true", 62 }, exec.Env) 63 assert.Len(t, exec.Env, 13) 64 } 65 }) 66 67 t.Run("incomplete config", func(t *testing.T) { 68 69 exec := mock.ExecMockRunner{} 70 71 upload := defaultUploadAction 72 upload.Connection.Endpoint = "" 73 upload.Application.AbapPackage = "" 74 75 err := upload.Perform(&exec) 76 77 if assert.Error(t, err) { 78 // Don't want to rely on the order, hence not checking for the full string ... 79 assert.Contains(t, err.Error(), "cannot perform artifact upload. The following parameters are not available") 80 assert.Contains(t, err.Error(), "Connection.Endpoint") 81 assert.Contains(t, err.Error(), "Application.AbapPackage") 82 } 83 }) 84 85 t.Run("invocation of cts tooling fails", func(t *testing.T) { 86 87 t.Run("error raised", func(t *testing.T) { 88 89 exec := mock.ExecMockRunner{ShouldFailOnCommand: map[string]error{"cts.*": fmt.Errorf("generic failure")}} 90 91 upload := defaultUploadAction 92 93 err := upload.Perform(&exec) 94 95 assert.EqualError(t, err, "cannot upload artifact: generic failure") 96 }) 97 98 t.Run("return code not zero", func(t *testing.T) { 99 100 exec := mock.ExecMockRunner{ExitCode: 42} 101 102 upload := defaultUploadAction 103 104 err := upload.Perform(&exec) 105 106 assert.EqualError(t, err, "cannot upload artifact: upload command returned with exit code '42'") 107 }) 108 }) 109 } 110 111 func TestTheAbapBool(t *testing.T) { 112 t.Run("true", func(t *testing.T) { 113 assert.Equal(t, "X", toAbapBool(true)) 114 }) 115 t.Run("false", func(t *testing.T) { 116 assert.Equal(t, "-", toAbapBool(false)) 117 }) 118 }