github.com/jaylevin/jenkins-library@v1.230.4/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 }`