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