1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2025-09-16 09:26:22 +02:00

integrationArtifactUpload Fixes (#2987)

* integrationArtifactUpload Fixes

* format fixes

* Doc fixes

* Fix unit tests

Co-authored-by: Oliver Feldmann <oliver.feldmann@sap.com>
This commit is contained in:
Mayur Belur Mohan
2021-07-16 19:39:55 +05:30
committed by GitHub
parent ee6d46a77c
commit a763112fe6
6 changed files with 41 additions and 68 deletions

View File

@@ -73,7 +73,7 @@ func runIntegrationArtifactUpload(config *integrationArtifactUploadOptions, tele
clientOptions := piperhttp.ClientOptions{}
header := make(http.Header)
header.Add("Accept", "application/json")
iFlowStatusServiceURL := fmt.Sprintf("%s/api/v1/IntegrationDesigntimeArtifacts(Id='%s',Version='%s')", serviceKey.OAuth.Host, config.IntegrationFlowID, config.IntegrationFlowVersion)
iFlowStatusServiceURL := fmt.Sprintf("%s/api/v1/IntegrationDesigntimeArtifacts(Id='%s',Version='%s')", serviceKey.OAuth.Host, config.IntegrationFlowID, "Active")
tokenParameters := cpi.TokenParameters{TokenURL: serviceKey.OAuth.OAuthTokenProviderURL, Username: serviceKey.OAuth.ClientID, Password: serviceKey.OAuth.ClientSecret, Client: httpClient}
token, err := cpi.CommonUtils.GetBearerToken(tokenParameters)
if err != nil {
@@ -150,10 +150,10 @@ func UploadIntegrationArtifact(config *integrationArtifactUploadOptions, httpCli
//UpdateIntegrationArtifact - Update existing integration artifact
func UpdateIntegrationArtifact(config *integrationArtifactUploadOptions, httpClient piperhttp.Sender, fileUtils piperutils.FileUtils, apiHost string) error {
httpMethod := "POST"
httpMethod := "PUT"
header := make(http.Header)
header.Add("content-type", "application/json")
updateIflowStatusURL := fmt.Sprintf("%s/api/v1/IntegrationDesigntimeArtifactSaveAsVersion?Id='%s'&SaveAsVersion='%s'", apiHost, config.IntegrationFlowID, config.IntegrationFlowVersion)
updateIflowStatusURL := fmt.Sprintf("%s/api/v1/IntegrationDesigntimeArtifacts(Id='%s',Version='%s')", apiHost, config.IntegrationFlowID, "Active")
payload, jsonError := GetJSONPayloadAsByteArray(config, "update", fileUtils)
if jsonError != nil {
return errors.Wrapf(jsonError, "Failed to get json payload for file %v, failed with error", config.FilePath)
@@ -193,11 +193,12 @@ func GetJSONPayloadAsByteArray(config *integrationArtifactUploadOptions, mode st
}
jsonObj := gabs.New()
if mode == "create" {
jsonObj.Set(config.IntegrationFlowID, "Name")
jsonObj.Set(config.IntegrationFlowName, "Name")
jsonObj.Set(config.IntegrationFlowID, "Id")
jsonObj.Set(config.PackageID, "PackageId")
jsonObj.Set(b64.StdEncoding.EncodeToString(fileContent), "ArtifactContent")
} else if mode == "update" {
jsonObj.Set(config.IntegrationFlowName, "Name")
jsonObj.Set(b64.StdEncoding.EncodeToString(fileContent), "ArtifactContent")
} else {
return nil, fmt.Errorf("Unkown node: '%s'", mode)

View File

@@ -15,12 +15,11 @@ import (
)
type integrationArtifactUploadOptions struct {
APIServiceKey string `json:"apiServiceKey,omitempty"`
IntegrationFlowID string `json:"integrationFlowId,omitempty"`
IntegrationFlowVersion string `json:"integrationFlowVersion,omitempty"`
IntegrationFlowName string `json:"integrationFlowName,omitempty"`
PackageID string `json:"packageId,omitempty"`
FilePath string `json:"filePath,omitempty"`
APIServiceKey string `json:"apiServiceKey,omitempty"`
IntegrationFlowID string `json:"integrationFlowId,omitempty"`
IntegrationFlowName string `json:"integrationFlowName,omitempty"`
PackageID string `json:"packageId,omitempty"`
FilePath string `json:"filePath,omitempty"`
}
// IntegrationArtifactUploadCommand Upload or Update an integration flow designtime artifact
@@ -101,14 +100,12 @@ func IntegrationArtifactUploadCommand() *cobra.Command {
func addIntegrationArtifactUploadFlags(cmd *cobra.Command, stepConfig *integrationArtifactUploadOptions) {
cmd.Flags().StringVar(&stepConfig.APIServiceKey, "apiServiceKey", os.Getenv("PIPER_apiServiceKey"), "Service key JSON string to access the Process Integration Runtime service instance of plan 'api'")
cmd.Flags().StringVar(&stepConfig.IntegrationFlowID, "integrationFlowId", os.Getenv("PIPER_integrationFlowId"), "Specifies the ID of the Integration Flow artifact")
cmd.Flags().StringVar(&stepConfig.IntegrationFlowVersion, "integrationFlowVersion", os.Getenv("PIPER_integrationFlowVersion"), "Specifies the version of the Integration Flow artifact")
cmd.Flags().StringVar(&stepConfig.IntegrationFlowName, "integrationFlowName", os.Getenv("PIPER_integrationFlowName"), "Specifies the Name of the Integration Flow artifact")
cmd.Flags().StringVar(&stepConfig.PackageID, "packageId", os.Getenv("PIPER_packageId"), "Specifies the ID of the Integration Package")
cmd.Flags().StringVar(&stepConfig.FilePath, "filePath", os.Getenv("PIPER_filePath"), "Specifies integration artifact relative file path.")
cmd.MarkFlagRequired("apiServiceKey")
cmd.MarkFlagRequired("integrationFlowId")
cmd.MarkFlagRequired("integrationFlowVersion")
cmd.MarkFlagRequired("integrationFlowName")
cmd.MarkFlagRequired("packageId")
cmd.MarkFlagRequired("filePath")
@@ -152,15 +149,6 @@ func integrationArtifactUploadMetadata() config.StepData {
Aliases: []config.Alias{},
Default: os.Getenv("PIPER_integrationFlowId"),
},
{
Name: "integrationFlowVersion",
ResourceRef: []config.ResourceReference{},
Scope: []string{"PARAMETERS", "GENERAL", "STAGES", "STEPS"},
Type: "string",
Mandatory: true,
Aliases: []config.Alias{},
Default: os.Getenv("PIPER_integrationFlowVersion"),
},
{
Name: "integrationFlowName",
ResourceRef: []config.ResourceReference{},

View File

@@ -42,12 +42,11 @@ func TestRunIntegrationArtifactUpload(t *testing.T) {
}`
config := integrationArtifactUploadOptions{
APIServiceKey: apiServiceKey,
IntegrationFlowName: "flow4",
IntegrationFlowID: "flow4",
IntegrationFlowVersion: "1.0.4",
PackageID: "CICD",
FilePath: path,
APIServiceKey: apiServiceKey,
IntegrationFlowName: "flow4",
IntegrationFlowID: "flow4",
PackageID: "CICD",
FilePath: path,
}
httpClient := httpMockCpis{CPIFunction: "", ResponseBody: ``, TestType: "PositiveAndCreateIntegrationDesigntimeArtifactResBody"}
@@ -57,11 +56,11 @@ func TestRunIntegrationArtifactUpload(t *testing.T) {
if assert.NoError(t, err) {
t.Run("check url", func(t *testing.T) {
assert.Equal(t, "https://demo/api/v1/IntegrationDesigntimeArtifactSaveAsVersion?Id='flow4'&SaveAsVersion='1.0.4'", httpClient.URL)
assert.Equal(t, "https://demo/api/v1/IntegrationDesigntimeArtifacts(Id='flow4',Version='Active')", httpClient.URL)
})
t.Run("check method", func(t *testing.T) {
assert.Equal(t, "POST", httpClient.Method)
assert.Equal(t, "PUT", httpClient.Method)
})
}
})
@@ -83,12 +82,11 @@ func TestRunIntegrationArtifactUpload(t *testing.T) {
}
}`
config := integrationArtifactUploadOptions{
APIServiceKey: apiServiceKey,
IntegrationFlowName: "flow4",
IntegrationFlowID: "flow4",
IntegrationFlowVersion: "1.0.4",
PackageID: "CICD",
FilePath: path,
APIServiceKey: apiServiceKey,
IntegrationFlowName: "flow4",
IntegrationFlowID: "flow4",
PackageID: "CICD",
FilePath: path,
}
httpClient := httpMockCpis{CPIFunction: "", ResponseBody: ``, TestType: "PositiveAndUpdateIntegrationDesigntimeArtifactResBody"}
@@ -118,12 +116,11 @@ func TestRunIntegrationArtifactUpload(t *testing.T) {
}
}`
config := integrationArtifactUploadOptions{
APIServiceKey: apiServiceKey,
IntegrationFlowName: "flow4",
IntegrationFlowID: "flow4",
IntegrationFlowVersion: "1.0.4",
PackageID: "CICD",
FilePath: "path",
APIServiceKey: apiServiceKey,
IntegrationFlowName: "flow4",
IntegrationFlowID: "flow4",
PackageID: "CICD",
FilePath: "path",
}
httpClient := httpMockCpis{CPIFunction: "", ResponseBody: ``, TestType: "NegativeAndGetIntegrationDesigntimeArtifactResBody"}
@@ -149,18 +146,17 @@ func TestRunIntegrationArtifactUpload(t *testing.T) {
}
}`
config := integrationArtifactUploadOptions{
APIServiceKey: apiServiceKey,
IntegrationFlowName: "flow4",
IntegrationFlowID: "flow4",
IntegrationFlowVersion: "1.0.4",
PackageID: "CICD",
FilePath: path,
APIServiceKey: apiServiceKey,
IntegrationFlowName: "flow4",
IntegrationFlowID: "flow4",
PackageID: "CICD",
FilePath: path,
}
httpClient := httpMockCpis{CPIFunction: "", ResponseBody: ``, TestType: "NegativeAndCreateIntegrationDesigntimeArtifactResBody"}
err = runIntegrationArtifactUpload(&config, nil, &files, &httpClient)
assert.EqualError(t, err, "HTTP POST request to https://demo/api/v1/IntegrationDesigntimeArtifactSaveAsVersion?Id='flow4'&SaveAsVersion='1.0.4' failed with error: : 401 Unauthorized")
assert.EqualError(t, err, "HTTP PUT request to https://demo/api/v1/IntegrationDesigntimeArtifacts(Id='flow4',Version='Active') failed with error: : 401 Unauthorized")
})
t.Run("Failed case of Integration Flow Create Test", func(t *testing.T) {
@@ -180,12 +176,11 @@ func TestRunIntegrationArtifactUpload(t *testing.T) {
}
}`
config := integrationArtifactUploadOptions{
APIServiceKey: apiServiceKey,
IntegrationFlowName: "flow4",
IntegrationFlowID: "flow4",
IntegrationFlowVersion: "1.0.4",
PackageID: "CICD",
FilePath: path,
APIServiceKey: apiServiceKey,
IntegrationFlowName: "flow4",
IntegrationFlowID: "flow4",
PackageID: "CICD",
FilePath: path,
}
httpClient := httpMockCpis{CPIFunction: "", ResponseBody: ``, TestType: "NegativeAndUpdateIntegrationDesigntimeArtifactResBody"}

View File

@@ -26,7 +26,6 @@ steps:
integrationArtifactUpload:
cpiApiServiceKeyCredentialsId: 'MY_API_SERVICE_KEY'
integrationFlowId: 'MY_INTEGRATION_FLOW_ID'
integrationFlowVersion: 'MY_INTEGRATION_FLOW_VERSION'
integrationFlowName: 'MY_INTEGRATION_FLOW_Name'
packageId: 'MY_INTEGRATION_Package_ID'
filePath: 'MY_INTEGRATION_FLOW_Artifact_Relative_Path'

View File

@@ -413,7 +413,7 @@ func GetCPIFunctionNameByURLCheck(url, method, testType string) string {
case "https://demo/api/v1/IntegrationDesigntimeArtifacts(Id='flow4',Version='1.0.4')":
return GetFunctionNameByTestTypeAndMethod(method, testType)
case "https://demo/api/v1/IntegrationDesigntimeArtifactSaveAsVersion?Id='flow4'&SaveAsVersion='1.0.4'":
case "https://demo/api/v1/IntegrationDesigntimeArtifacts(Id='flow4',Version='Active')":
return GetFunctionNameByTestTypeAndMethod(method, testType)
case "https://demo/api/v1/IntegrationDesigntimeArtifacts":
@@ -448,10 +448,9 @@ func GetFunctionNameByTestTypeAndMethod(method, testType string) string {
if method == "GET" {
return "GetIntegrationDesigntimeArtifact"
}
if method == "POST" {
if method == "PUT" {
return "UploadIntegrationDesigntimeArtifactNegative"
}
case "NegativeAndUpdateIntegrationDesigntimeArtifactResBody":
if method == "GET" {
return "GetIntegrationDesigntimeArtifact"
@@ -487,7 +486,7 @@ func GetFunctionNamePositiveAndCreateIntegrationDesigntimeArtifactResBody(method
if method == "GET" {
return "GetIntegrationDesigntimeArtifact"
}
if method == "POST" {
if method == "PUT" {
return "UploadIntegrationDesigntimeArtifact"
}
return ""

View File

@@ -31,15 +31,6 @@ spec:
- STAGES
- STEPS
mandatory: true
- name: integrationFlowVersion
type: string
description: Specifies the version of the Integration Flow artifact
scope:
- PARAMETERS
- GENERAL
- STAGES
- STEPS
mandatory: true
- name: integrationFlowName
type: string
description: Specifies the Name of the Integration Flow artifact