mirror of
https://github.com/SAP/jenkins-library.git
synced 2025-02-09 13:47:31 +02:00
SAP BTP ABAP Environment: addon build with supported Languages (#2689)
* first try * fix unit test * remove obsolete attributes
This commit is contained in:
parent
0186989593
commit
b04e3140de
@ -189,6 +189,12 @@ func (br *buildWithRepository) start() error {
|
||||
abapbuild.Value{ValueID: "ACTUAL_DELIVERY_COMMIT",
|
||||
Value: br.repo.CommitID})
|
||||
}
|
||||
if len(br.repo.Languages) > 0 {
|
||||
valuesInput.Values = append(valuesInput.Values,
|
||||
abapbuild.Value{ValueID: "SSDC_EXPORT_LANGUAGE_VECTOR",
|
||||
Value: br.repo.GetAakAasLanguageVector()})
|
||||
}
|
||||
|
||||
phase := "BUILD_" + br.repo.PackageType
|
||||
log.Entry().Infof("Starting assembly of package %s", br.repo.PackageName)
|
||||
return br.build.Start(phase, valuesInput)
|
||||
|
@ -5,7 +5,6 @@ import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/SAP/jenkins-library/pkg/log"
|
||||
@ -248,115 +247,6 @@ func TestTimeConverter(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
func TestReadAddonDescriptor(t *testing.T) {
|
||||
t.Run("Test: success case", func(t *testing.T) {
|
||||
|
||||
dir, err := ioutil.TempDir("", "test read addon descriptor")
|
||||
if err != nil {
|
||||
t.Fatal("Failed to create temporary directory")
|
||||
}
|
||||
oldCWD, _ := os.Getwd()
|
||||
_ = os.Chdir(dir)
|
||||
// clean up tmp dir
|
||||
defer func() {
|
||||
_ = os.Chdir(oldCWD)
|
||||
_ = os.RemoveAll(dir)
|
||||
}()
|
||||
|
||||
body := `---
|
||||
addonProduct: /DMO/myAddonProduct
|
||||
addonVersion: 3.1.4
|
||||
addonUniqueId: myAddonId
|
||||
customerID: 1234
|
||||
repositories:
|
||||
- name: /DMO/REPO_A
|
||||
tag: v-1.0.1-build-0001
|
||||
branch: branchA
|
||||
version: 1.0.1
|
||||
- name: /DMO/REPO_B
|
||||
tag: rel-2.1.1-build-0001
|
||||
branch: branchB
|
||||
version: 2.1.1
|
||||
`
|
||||
file, _ := os.Create("filename.yaml")
|
||||
file.Write([]byte(body))
|
||||
|
||||
addonDescriptor, err := ReadAddonDescriptor("filename.yaml")
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, `/DMO/myAddonProduct`, addonDescriptor.AddonProduct)
|
||||
assert.Equal(t, `3.1.4`, addonDescriptor.AddonVersionYAML)
|
||||
assert.Equal(t, `myAddonId`, addonDescriptor.AddonUniqueID)
|
||||
assert.Equal(t, float64(1234), addonDescriptor.CustomerID)
|
||||
assert.Equal(t, ``, addonDescriptor.AddonSpsLevel)
|
||||
assert.Equal(t, `/DMO/REPO_A`, addonDescriptor.Repositories[0].Name)
|
||||
assert.Equal(t, `/DMO/REPO_B`, addonDescriptor.Repositories[1].Name)
|
||||
assert.Equal(t, `v-1.0.1-build-0001`, addonDescriptor.Repositories[0].Tag)
|
||||
assert.Equal(t, `rel-2.1.1-build-0001`, addonDescriptor.Repositories[1].Tag)
|
||||
assert.Equal(t, `branchA`, addonDescriptor.Repositories[0].Branch)
|
||||
assert.Equal(t, `branchB`, addonDescriptor.Repositories[1].Branch)
|
||||
assert.Equal(t, `1.0.1`, addonDescriptor.Repositories[0].VersionYAML)
|
||||
assert.Equal(t, `2.1.1`, addonDescriptor.Repositories[1].VersionYAML)
|
||||
assert.Equal(t, ``, addonDescriptor.Repositories[0].SpLevel)
|
||||
assert.Equal(t, ``, addonDescriptor.Repositories[1].SpLevel)
|
||||
|
||||
err = CheckAddonDescriptorForRepositories(addonDescriptor)
|
||||
assert.NoError(t, err)
|
||||
})
|
||||
t.Run("Test: file does not exist", func(t *testing.T) {
|
||||
expectedErrorMessage := "AddonDescriptor doesn't contain any repositories"
|
||||
|
||||
addonDescriptor, err := ReadAddonDescriptor("filename.yaml")
|
||||
assert.EqualError(t, err, fmt.Sprintf("Could not find %v", "filename.yaml"))
|
||||
assert.Equal(t, AddonDescriptor{}, addonDescriptor)
|
||||
|
||||
err = CheckAddonDescriptorForRepositories(addonDescriptor)
|
||||
assert.EqualError(t, err, expectedErrorMessage)
|
||||
})
|
||||
t.Run("Test: empty config - failure case", func(t *testing.T) {
|
||||
expectedErrorMessage := "AddonDescriptor doesn't contain any repositories"
|
||||
|
||||
addonDescriptor, err := ReadAddonDescriptor("")
|
||||
|
||||
assert.EqualError(t, err, fmt.Sprintf("Could not find %v", ""))
|
||||
assert.Equal(t, AddonDescriptor{}, addonDescriptor)
|
||||
|
||||
err = CheckAddonDescriptorForRepositories(addonDescriptor)
|
||||
assert.EqualError(t, err, expectedErrorMessage)
|
||||
})
|
||||
t.Run("Read empty addon descriptor from wrong config - failure case", func(t *testing.T) {
|
||||
expectedErrorMessage := "AddonDescriptor doesn't contain any repositories"
|
||||
expectedRepositoryList := AddonDescriptor{Repositories: []Repository{{}, {}}}
|
||||
|
||||
dir, err := ioutil.TempDir("", "test abap utils")
|
||||
if err != nil {
|
||||
t.Fatal("Failed to create temporary directory")
|
||||
}
|
||||
oldCWD, _ := os.Getwd()
|
||||
_ = os.Chdir(dir)
|
||||
// clean up tmp dir
|
||||
|
||||
defer func() {
|
||||
_ = os.Chdir(oldCWD)
|
||||
_ = os.RemoveAll(dir)
|
||||
}()
|
||||
|
||||
manifestFileString := `
|
||||
repositories:
|
||||
- repo: 'testRepo'
|
||||
- repo: 'testRepo2'`
|
||||
|
||||
err = ioutil.WriteFile("repositories.yml", []byte(manifestFileString), 0644)
|
||||
|
||||
addonDescriptor, err := ReadAddonDescriptor("repositories.yml")
|
||||
|
||||
assert.Equal(t, expectedRepositoryList, addonDescriptor)
|
||||
assert.NoError(t, err)
|
||||
|
||||
err = CheckAddonDescriptorForRepositories(addonDescriptor)
|
||||
assert.EqualError(t, err, expectedErrorMessage)
|
||||
})
|
||||
}
|
||||
|
||||
func TestHandleHTTPError(t *testing.T) {
|
||||
t.Run("Test", func(t *testing.T) {
|
||||
|
||||
|
@ -11,13 +11,23 @@ import (
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
/*
|
||||
* The AddonDescriptor
|
||||
* ===================
|
||||
* contains information about the Add-on Product and the comprised Add-on Software Component Git Repositories
|
||||
*
|
||||
* Lifecycle
|
||||
* =========
|
||||
* addon.yml file is read by abapAddonAssemblyKitCheckPV|CheckCV
|
||||
* addonDesriptor is stored in CPE [commonPipelineEnvironment]
|
||||
* subsequent steps enrich and update the data in CPE
|
||||
*/
|
||||
|
||||
// AddonDescriptor contains fields about the addonProduct
|
||||
type AddonDescriptor struct {
|
||||
AddonProduct string `json:"addonProduct"`
|
||||
AddonVersionYAML string `json:"addonVersion"`
|
||||
AddonVersion string `json:"addonVersionAAK"`
|
||||
AddonUniqueID string `json:"addonUniqueID"`
|
||||
CustomerID interface{} `json:"customerID"`
|
||||
AddonProduct string `json:"addonProduct"`
|
||||
AddonVersionYAML string `json:"addonVersion"`
|
||||
AddonVersion string `json:"addonVersionAAK"`
|
||||
AddonSpsLevel string
|
||||
AddonPatchLevel string
|
||||
TargetVectorID string
|
||||
@ -40,15 +50,17 @@ type Repository struct {
|
||||
Status string
|
||||
Namespace string
|
||||
SarXMLFilePath string
|
||||
Languages []string `json:"languages"`
|
||||
}
|
||||
|
||||
// ReadAddonDescriptorType is the type for ReadAddonDescriptor for mocking
|
||||
type ReadAddonDescriptorType func(FileName string) (AddonDescriptor, error)
|
||||
type readFileFunc func(FileName string) ([]byte, error)
|
||||
|
||||
// ReadAddonDescriptor parses AddonDescriptor YAML file
|
||||
func ReadAddonDescriptor(FileName string) (AddonDescriptor, error) {
|
||||
var addonDescriptor AddonDescriptor
|
||||
err := addonDescriptor.initFromYmlFile(FileName)
|
||||
err := addonDescriptor.initFromYmlFile(FileName, readFile)
|
||||
return addonDescriptor, err
|
||||
}
|
||||
|
||||
@ -59,26 +71,35 @@ func ConstructAddonDescriptorFromJSON(JSON []byte) (AddonDescriptor, error) {
|
||||
return addonDescriptor, err
|
||||
}
|
||||
|
||||
func readFile(FileName string) ([]byte, error) {
|
||||
fileLocations, err := filepath.Glob(FileName)
|
||||
if err != nil || len(fileLocations) != 1 {
|
||||
return nil, errors.New(fmt.Sprintf("Could not find %v", FileName))
|
||||
}
|
||||
|
||||
absoluteFilename, err := filepath.Abs(fileLocations[0])
|
||||
if err != nil {
|
||||
return nil, errors.New(fmt.Sprintf("Could not get path of %v", FileName))
|
||||
}
|
||||
|
||||
var fileContent []byte
|
||||
fileContent, err = ioutil.ReadFile(absoluteFilename)
|
||||
if err != nil {
|
||||
return nil, errors.New(fmt.Sprintf("Could not read %v", FileName))
|
||||
}
|
||||
|
||||
return fileContent, nil
|
||||
}
|
||||
|
||||
// initFromYmlFile : Reads from file
|
||||
func (me *AddonDescriptor) initFromYmlFile(FileName string) error {
|
||||
filelocation, err := filepath.Glob(FileName)
|
||||
if err != nil || len(filelocation) != 1 {
|
||||
return errors.New(fmt.Sprintf("Could not find %v", FileName))
|
||||
}
|
||||
|
||||
filename, err := filepath.Abs(filelocation[0])
|
||||
func (me *AddonDescriptor) initFromYmlFile(FileName string, readFile readFileFunc) error {
|
||||
fileContent, err := readFile(FileName)
|
||||
if err != nil {
|
||||
return errors.New(fmt.Sprintf("Could not get path of %v", FileName))
|
||||
}
|
||||
|
||||
var yamlBytes []byte
|
||||
yamlBytes, err = ioutil.ReadFile(filename)
|
||||
if err != nil {
|
||||
return errors.New(fmt.Sprintf("Could not read %v", FileName))
|
||||
return err
|
||||
}
|
||||
|
||||
var jsonBytes []byte
|
||||
jsonBytes, err = yaml.YAMLToJSON(yamlBytes)
|
||||
jsonBytes, err = yaml.YAMLToJSON(fileContent)
|
||||
if err != nil {
|
||||
return errors.New(fmt.Sprintf("Could not parse %v", FileName))
|
||||
}
|
||||
@ -126,3 +147,15 @@ func (me *AddonDescriptor) AsJSON() []byte {
|
||||
func (me *AddonDescriptor) SetRepositories(Repositories []Repository) {
|
||||
me.Repositories = Repositories
|
||||
}
|
||||
|
||||
// GetAakAasLanguageVector : dito
|
||||
func (me *Repository) GetAakAasLanguageVector() string {
|
||||
if len(me.Languages) <= 0 {
|
||||
return `ISO-DEEN`
|
||||
}
|
||||
languageVector := `ISO-`
|
||||
for _, language := range me.Languages {
|
||||
languageVector = languageVector + language
|
||||
}
|
||||
return languageVector
|
||||
}
|
||||
|
142
pkg/abaputils/addonDescriptor_test.go
Normal file
142
pkg/abaputils/addonDescriptor_test.go
Normal file
@ -0,0 +1,142 @@
|
||||
package abaputils
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func readFileMock(FileName string) ([]byte, error) {
|
||||
return []byte(FileName), nil
|
||||
}
|
||||
|
||||
func TestAddonDescriptorNew(t *testing.T) {
|
||||
t.Run("Import addon.yml", func(t *testing.T) {
|
||||
var addonDescriptor AddonDescriptor
|
||||
err := addonDescriptor.initFromYmlFile(TestAddonDescriptorYAML, readFileMock)
|
||||
CheckAddonDescriptorForRepositories(addonDescriptor)
|
||||
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, "/DMO/myAddonProduct", addonDescriptor.AddonProduct)
|
||||
assert.Equal(t, "/DMO/REPO_A", addonDescriptor.Repositories[0].Name)
|
||||
assert.Equal(t, "JEK8S273S", addonDescriptor.Repositories[1].CommitID)
|
||||
assert.Equal(t, "FR", addonDescriptor.Repositories[1].Languages[2])
|
||||
assert.Equal(t, `ISO-DEENFR`, addonDescriptor.Repositories[1].GetAakAasLanguageVector())
|
||||
})
|
||||
}
|
||||
|
||||
var TestAddonDescriptorYAML = `---
|
||||
addonProduct: /DMO/myAddonProduct
|
||||
addonVersion: 3.1.4
|
||||
repositories:
|
||||
- name: /DMO/REPO_A
|
||||
tag: v-1.0.1
|
||||
commitID: 89fLKS273S
|
||||
branch: release-v.1.0.1
|
||||
version: 1.0.1
|
||||
languages:
|
||||
- DE
|
||||
- EN
|
||||
- name: /DMO/REPO_B
|
||||
tag: rel-2.1.1
|
||||
commitID: JEK8S273S
|
||||
branch: release-v.2.1.1
|
||||
version: 2.1.1
|
||||
languages:
|
||||
- DE
|
||||
- EN
|
||||
- FR`
|
||||
|
||||
func TestReadAddonDescriptor(t *testing.T) {
|
||||
t.Run("Test: success case", func(t *testing.T) {
|
||||
|
||||
dir, err := ioutil.TempDir("", "test read addon descriptor")
|
||||
if err != nil {
|
||||
t.Fatal("Failed to create temporary directory")
|
||||
}
|
||||
oldCWD, _ := os.Getwd()
|
||||
_ = os.Chdir(dir)
|
||||
// clean up tmp dir
|
||||
defer func() {
|
||||
_ = os.Chdir(oldCWD)
|
||||
_ = os.RemoveAll(dir)
|
||||
}()
|
||||
|
||||
file, _ := os.Create("filename.yaml")
|
||||
file.Write([]byte(TestAddonDescriptorYAML))
|
||||
|
||||
addonDescriptor, err := ReadAddonDescriptor("filename.yaml")
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, `/DMO/myAddonProduct`, addonDescriptor.AddonProduct)
|
||||
assert.Equal(t, `3.1.4`, addonDescriptor.AddonVersionYAML)
|
||||
assert.Equal(t, ``, addonDescriptor.AddonSpsLevel)
|
||||
assert.Equal(t, `/DMO/REPO_A`, addonDescriptor.Repositories[0].Name)
|
||||
assert.Equal(t, `/DMO/REPO_B`, addonDescriptor.Repositories[1].Name)
|
||||
assert.Equal(t, `v-1.0.1`, addonDescriptor.Repositories[0].Tag)
|
||||
assert.Equal(t, `rel-2.1.1`, addonDescriptor.Repositories[1].Tag)
|
||||
assert.Equal(t, `release-v.1.0.1`, addonDescriptor.Repositories[0].Branch)
|
||||
assert.Equal(t, `release-v.2.1.1`, addonDescriptor.Repositories[1].Branch)
|
||||
assert.Equal(t, `1.0.1`, addonDescriptor.Repositories[0].VersionYAML)
|
||||
assert.Equal(t, `2.1.1`, addonDescriptor.Repositories[1].VersionYAML)
|
||||
assert.Equal(t, ``, addonDescriptor.Repositories[0].SpLevel)
|
||||
assert.Equal(t, ``, addonDescriptor.Repositories[1].SpLevel)
|
||||
|
||||
err = CheckAddonDescriptorForRepositories(addonDescriptor)
|
||||
assert.NoError(t, err)
|
||||
})
|
||||
t.Run("Test: file does not exist", func(t *testing.T) {
|
||||
expectedErrorMessage := "AddonDescriptor doesn't contain any repositories"
|
||||
|
||||
addonDescriptor, err := ReadAddonDescriptor("filename.yaml")
|
||||
assert.EqualError(t, err, fmt.Sprintf("Could not find %v", "filename.yaml"))
|
||||
assert.Equal(t, AddonDescriptor{}, addonDescriptor)
|
||||
|
||||
err = CheckAddonDescriptorForRepositories(addonDescriptor)
|
||||
assert.EqualError(t, err, expectedErrorMessage)
|
||||
})
|
||||
t.Run("Test: empty config - failure case", func(t *testing.T) {
|
||||
expectedErrorMessage := "AddonDescriptor doesn't contain any repositories"
|
||||
|
||||
addonDescriptor, err := ReadAddonDescriptor("")
|
||||
|
||||
assert.EqualError(t, err, fmt.Sprintf("Could not find %v", ""))
|
||||
assert.Equal(t, AddonDescriptor{}, addonDescriptor)
|
||||
|
||||
err = CheckAddonDescriptorForRepositories(addonDescriptor)
|
||||
assert.EqualError(t, err, expectedErrorMessage)
|
||||
})
|
||||
t.Run("Read empty addon descriptor from wrong config - failure case", func(t *testing.T) {
|
||||
expectedErrorMessage := "AddonDescriptor doesn't contain any repositories"
|
||||
expectedRepositoryList := AddonDescriptor{Repositories: []Repository{{}, {}}}
|
||||
|
||||
dir, err := ioutil.TempDir("", "test abap utils")
|
||||
if err != nil {
|
||||
t.Fatal("Failed to create temporary directory")
|
||||
}
|
||||
oldCWD, _ := os.Getwd()
|
||||
_ = os.Chdir(dir)
|
||||
// clean up tmp dir
|
||||
defer func() {
|
||||
_ = os.Chdir(oldCWD)
|
||||
_ = os.RemoveAll(dir)
|
||||
}()
|
||||
|
||||
manifestFileString := `
|
||||
repositories:
|
||||
- repo: 'testRepo'
|
||||
- repo: 'testRepo2'`
|
||||
|
||||
err = ioutil.WriteFile("repositories.yml", []byte(manifestFileString), 0644)
|
||||
|
||||
addonDescriptor, err := ReadAddonDescriptor("repositories.yml")
|
||||
|
||||
assert.Equal(t, expectedRepositoryList, addonDescriptor)
|
||||
assert.NoError(t, err)
|
||||
|
||||
err = CheckAddonDescriptorForRepositories(addonDescriptor)
|
||||
assert.EqualError(t, err, expectedErrorMessage)
|
||||
})
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user