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  }