github.com/xgoffin/jenkins-library@v1.154.0/cmd/abapAddonAssemblyKitRegisterPackages_test.go (about)

     1  package cmd
     2  
     3  import (
     4  	"encoding/json"
     5  	"testing"
     6  
     7  	"github.com/SAP/jenkins-library/pkg/abap/aakaas"
     8  	abapbuild "github.com/SAP/jenkins-library/pkg/abap/build"
     9  	"github.com/SAP/jenkins-library/pkg/abaputils"
    10  	"github.com/pkg/errors"
    11  	"github.com/stretchr/testify/assert"
    12  )
    13  
    14  func mockReader(path string) ([]byte, error) {
    15  	if path == "exists" {
    16  		return []byte("test"), nil
    17  	} else if path == "null" {
    18  		return []byte(""), nil
    19  	}
    20  	return nil, errors.New("error reading the file")
    21  }
    22  
    23  func TestRegisterPackagesStep(t *testing.T) {
    24  	var config abapAddonAssemblyKitRegisterPackagesOptions
    25  	config.Username = "dummy"
    26  	config.Password = "dummy"
    27  	var cpe abapAddonAssemblyKitRegisterPackagesCommonPipelineEnvironment
    28  	t.Run("step success", func(t *testing.T) {
    29  		client := &abaputils.ClientMock{
    30  			BodyList: []string{responseRegisterPackagesPost, "myToken", "dummyResponseUpload"},
    31  		}
    32  		addonDescriptor := abaputils.AddonDescriptor{
    33  			Repositories: []abaputils.Repository{
    34  				{
    35  					PackageName:    "SAPK-002AAINDRNMSPC",
    36  					Status:         "P",
    37  					SarXMLFilePath: "exists",
    38  				},
    39  				{
    40  					PackageName: "SAPK-001AAINDRNMSPC",
    41  					Status:      "R",
    42  				},
    43  			},
    44  		}
    45  		adoDesc, _ := json.Marshal(addonDescriptor)
    46  		config.AddonDescriptor = string(adoDesc)
    47  		err := runAbapAddonAssemblyKitRegisterPackages(&config, nil, client, &cpe, mockReader)
    48  
    49  		assert.NoError(t, err, "Did not expect error")
    50  		var addonDescriptorFinal abaputils.AddonDescriptor
    51  		json.Unmarshal([]byte(cpe.abap.addonDescriptor), &addonDescriptorFinal)
    52  		assert.Equal(t, "L", addonDescriptorFinal.Repositories[0].Status)
    53  	})
    54  	t.Run("step error - null file", func(t *testing.T) {
    55  		client := &abaputils.ClientMock{
    56  			BodyList: []string{responseRegisterPackagesPost, "myToken", "dummyResponseUpload"},
    57  		}
    58  		addonDescriptor := abaputils.AddonDescriptor{
    59  			Repositories: []abaputils.Repository{
    60  				{
    61  					PackageName:    "SAPK-002AAINDRNMSPC",
    62  					Status:         "P",
    63  					SarXMLFilePath: "null",
    64  				},
    65  			},
    66  		}
    67  		adoDesc, _ := json.Marshal(addonDescriptor)
    68  		config.AddonDescriptor = string(adoDesc)
    69  		err := runAbapAddonAssemblyKitRegisterPackages(&config, nil, client, &cpe, mockReader)
    70  
    71  		assert.Error(t, err, "Did expect error")
    72  	})
    73  	t.Run("step error - uploadSarFiles", func(t *testing.T) {
    74  		client := &abaputils.ClientMock{
    75  			Body:  "ErrorBody",
    76  			Error: errors.New("Failure during upload of SAR file"),
    77  		}
    78  		addonDescriptor := abaputils.AddonDescriptor{
    79  			Repositories: []abaputils.Repository{
    80  				{
    81  					PackageName:    "SAPK-002AAINDRNMSPC",
    82  					Status:         "P",
    83  					SarXMLFilePath: "exists",
    84  				},
    85  			},
    86  		}
    87  		adoDesc, _ := json.Marshal(addonDescriptor)
    88  		config.AddonDescriptor = string(adoDesc)
    89  		err := runAbapAddonAssemblyKitRegisterPackages(&config, nil, client, &cpe, mockReader)
    90  		assert.Error(t, err, "Did expect error")
    91  	})
    92  	t.Run("step error - registerPackages - invalid input", func(t *testing.T) {
    93  		client := &abaputils.ClientMock{
    94  			BodyList: []string{"myToken", "dummyResponseUpload"},
    95  		}
    96  		addonDescriptor := abaputils.AddonDescriptor{
    97  			Repositories: []abaputils.Repository{
    98  				{
    99  					Status:         "P",
   100  					SarXMLFilePath: "exists",
   101  				},
   102  			},
   103  		}
   104  		adoDesc, _ := json.Marshal(addonDescriptor)
   105  		config.AddonDescriptor = string(adoDesc)
   106  		err := runAbapAddonAssemblyKitRegisterPackages(&config, nil, client, &cpe, mockReader)
   107  		assert.Error(t, err, "Did expect error")
   108  	})
   109  }
   110  
   111  // ********************* Test uploadSarFiles *******************
   112  func TestUploadSarFiles(t *testing.T) {
   113  	t.Run("test uploadSarFiles - success", func(t *testing.T) {
   114  		client := abaputils.ClientMock{
   115  			Body: "dummy",
   116  		}
   117  		repositories, conn := setupRepos("exists", aakaas.PackageStatusPlanned, client)
   118  		err := uploadSarFiles(repositories, conn, mockReader)
   119  		assert.NoError(t, err)
   120  	})
   121  	t.Run("test uploadSarFiles - error due to missing file path", func(t *testing.T) {
   122  		repositories, conn := setupRepos("", aakaas.PackageStatusPlanned, abaputils.ClientMock{})
   123  		err := uploadSarFiles(repositories, conn, mockReader)
   124  		assert.Error(t, err)
   125  	})
   126  	t.Run("test uploadSarFiles - error due to missing file", func(t *testing.T) {
   127  		repositories, conn := setupRepos("does_not_exist", aakaas.PackageStatusPlanned, abaputils.ClientMock{})
   128  		err := uploadSarFiles(repositories, conn, mockReader)
   129  		assert.Error(t, err)
   130  	})
   131  	t.Run("test uploadSarFiles - error during upload", func(t *testing.T) {
   132  		client := abaputils.ClientMock{
   133  			Body:  "ErrorBody",
   134  			Error: errors.New("Failure during upload of SAR file"),
   135  		}
   136  		repositories, conn := setupRepos("exists", aakaas.PackageStatusPlanned, client)
   137  		err := uploadSarFiles(repositories, conn, mockReader)
   138  		assert.Error(t, err)
   139  	})
   140  }
   141  
   142  // ********************* Test registerPackages *******************
   143  func TestRegisterPackages(t *testing.T) {
   144  	t.Run("test registerPackages - planned", func(t *testing.T) {
   145  		client := abaputils.ClientMock{
   146  			Body: responseRegisterPackagesPost,
   147  		}
   148  		repositories, conn := setupRepos("Filepath", aakaas.PackageStatusPlanned, client)
   149  		repos, err := registerPackages(repositories, conn)
   150  		assert.NoError(t, err)
   151  		assert.Equal(t, string(aakaas.PackageStatusLocked), repos[0].Status)
   152  	})
   153  	t.Run("test registerPackages - released", func(t *testing.T) {
   154  		repositories, conn := setupRepos("Filepath", aakaas.PackageStatusReleased, abaputils.ClientMock{})
   155  		repos, err := registerPackages(repositories, conn)
   156  		assert.NoError(t, err)
   157  		assert.Equal(t, string(aakaas.PackageStatusReleased), repos[0].Status)
   158  	})
   159  	t.Run("test registerPackages - with error", func(t *testing.T) {
   160  		client := abaputils.ClientMock{
   161  			Body:  "ErrorBody",
   162  			Error: errors.New("Failure during registration"),
   163  		}
   164  		repositories, conn := setupRepos("Filepath", aakaas.PackageStatusPlanned, client)
   165  		repos, err := registerPackages(repositories, conn)
   166  		assert.Error(t, err)
   167  		assert.Equal(t, string(aakaas.PackageStatusPlanned), repos[0].Status)
   168  	})
   169  }
   170  
   171  // ********************* Test Setup *******************
   172  func setupRepos(filePath string, status aakaas.PackageStatus, cl abaputils.ClientMock) ([]abaputils.Repository, abapbuild.Connector) {
   173  	repositories := []abaputils.Repository{
   174  		{
   175  			Name:           "/DRNMSPC/COMP01",
   176  			VersionYAML:    "1.0.0",
   177  			PackageName:    "SAPK-001AAINDRNMSPC",
   178  			Status:         string(status),
   179  			SarXMLFilePath: filePath,
   180  		},
   181  	}
   182  	conn := new(abapbuild.Connector)
   183  	conn.Client = &cl
   184  	conn.Header = make(map[string][]string)
   185  	return repositories, *conn
   186  }
   187  
   188  // ********************* Testdata *******************
   189  
   190  var responseRegisterPackagesPost = `{
   191      "d": {
   192          "__metadata": {
   193              "id": "https://W7Q.DMZWDF.SAP.CORP:443/odata/aas_ocs_package/OcsPackageSet('SAPK-001AAINDRNMSPC')",
   194              "uri": "https://W7Q.DMZWDF.SAP.CORP:443/odata/aas_ocs_package/OcsPackageSet('SAPK-001AAINDRNMSPC')",
   195              "type": "SSDA.AAS_ODATA_PACKAGE_SRV.OcsPackage"
   196          },
   197          "Name": "SAPK-001AAINDRNMSPC",
   198          "Type": "AOI",
   199          "Component": "/DRNMSPC/COMP01",
   200          "Release": "0001",
   201          "Level": "0000",
   202          "Status": "L",
   203          "Operation": "",
   204          "Namespace": "/DRNMSPC/",
   205          "Vendorid": "0000203069"
   206      }
   207  }`