1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2024-12-14 11:03:09 +02:00
sap-jenkins-library/pkg/piperenv/templating_test.go
Oliver Nocon 53f4ce96ae
feat(cpe): provide go templating functions (#3872)
* feat(cpe): provide go templating functions

* change type

* fix: type in test

* chore: add comment for exported function

* fix: ensure that custom returns string properly

* fix types and add tests

Co-authored-by: Anil Keshav <anil.keshav@sap.com>
2022-07-14 16:20:11 +02:00

220 lines
5.3 KiB
Go

package piperenv
import (
"fmt"
"io/ioutil"
"path/filepath"
"testing"
"github.com/stretchr/testify/assert"
)
func TestParseTemplate(t *testing.T) {
tt := []struct {
template string
cpe CPEMap
expected string
expectedError error
}{
{template: `version: {{index .CPE "artifactVersion"}}, sha: {{git "commitId"}}`, expected: "version: 1.2.3, sha: thisIsMyTestSha"},
{template: "version: {{", expectedError: fmt.Errorf("failed to parse cpe template 'version: {{'")},
}
cpe := CPEMap{
"artifactVersion": "1.2.3",
"git/commitId": "thisIsMyTestSha",
}
for _, test := range tt {
res, err := cpe.ParseTemplate(test.template)
if test.expectedError != nil {
assert.Contains(t, fmt.Sprint(err), fmt.Sprint(test.expectedError))
} else {
assert.NoError(t, err)
assert.Equal(t, test.expected, (*res).String())
}
}
}
func TestTemplateFunctionCpe(t *testing.T) {
t.Run("CPE from object", func(t *testing.T) {
tt := []struct {
element string
expected string
}{
{element: "artifactVersion", expected: "1.2.3"},
{element: "git/commitId", expected: "thisIsMyTestSha"},
}
cpe := CPEMap{
"artifactVersion": "1.2.3",
"git/commitId": "thisIsMyTestSha",
}
for _, test := range tt {
assert.Equal(t, test.expected, cpe.cpe(test.element))
}
})
t.Run("CPE from files", func(t *testing.T) {
theVersion := "1.2.3"
dir := t.TempDir()
assert.NoError(t, ioutil.WriteFile(filepath.Join(dir, "artifactVersion"), []byte(theVersion), 0o666))
cpe := CPEMap{}
assert.NoError(t, cpe.LoadFromDisk(dir))
res, err := cpe.ParseTemplate(`{{cpe "artifactVersion"}}`)
assert.NoError(t, err)
assert.Equal(t, theVersion, (*res).String())
})
}
func TestTemplateFunctionCustom(t *testing.T) {
tt := []struct {
element string
expected string
}{
{element: "repositoryUrl", expected: "https://this.is.the.repo.url"},
{element: "repositoryId", expected: "repoTestId"},
}
cpe := CPEMap{
"custom/repositoryUrl": "https://this.is.the.repo.url",
"custom/repositoryId": "repoTestId",
}
for _, test := range tt {
assert.Equal(t, test.expected, cpe.custom(test.element))
}
}
func TestTemplateFunctionGit(t *testing.T) {
tt := []struct {
element string
expected string
}{
{element: "commitId", expected: "thisIsMyTestSha"},
{element: "repository", expected: "testRepo"},
}
cpe := CPEMap{
"git/commitId": "thisIsMyTestSha",
"github/repository": "testRepo",
}
for _, test := range tt {
assert.Equal(t, test.expected, cpe.git(test.element))
}
}
func TestTemplateFunctionImageDigest(t *testing.T) {
t.Run("CPE from object", func(t *testing.T) {
tt := []struct {
imageName string
cpe CPEMap
expected string
}{
{
imageName: "image1",
cpe: CPEMap{},
expected: "",
},
{
imageName: "image2",
cpe: CPEMap{
"container/imageDigests": []interface{}{"digest1", "digest2", "digest3"},
"container/imageNames": []interface{}{"image1", "image2", "image3"},
},
expected: "digest2",
},
{
imageName: "image4",
cpe: CPEMap{
"container/imageDigests": []interface{}{"digest1", "digest2", "digest3"},
"container/imageNames": []interface{}{"image1", "image2", "image3"},
},
expected: "",
},
{
imageName: "image1",
cpe: CPEMap{
"container/imageDigests": []interface{}{"digest1", "digest3"},
"container/imageNames": []interface{}{"image1", "image2", "image3"},
},
expected: "",
},
}
for _, test := range tt {
assert.Equal(t, test.expected, test.cpe.imageDigest(test.imageName))
}
})
t.Run("CPE from files", func(t *testing.T) {
dir := t.TempDir()
imageDigests := []string{"digest1", "digest2", "digest3"}
imageNames := []string{"image1", "image2", "image3"}
cpeOut := CPEMap{"container/imageDigests": imageDigests, "container/imageNames": imageNames}
assert.NoError(t, cpeOut.WriteToDisk(dir))
cpe := CPEMap{}
assert.NoError(t, cpe.LoadFromDisk(dir))
res, err := cpe.ParseTemplate(`{{imageDigest "image2"}}`)
assert.NoError(t, err)
assert.Equal(t, "digest2", (*res).String())
})
}
func TestTemplateFunctionImageTag(t *testing.T) {
t.Run("CPE from object", func(t *testing.T) {
tt := []struct {
imageName string
cpe CPEMap
expected string
}{
{
imageName: "image1",
cpe: CPEMap{},
expected: "",
},
{
imageName: "image2",
cpe: CPEMap{
"container/imageNameTags": []interface{}{"image1:tag1", "image2:tag2", "image3:tag3"},
},
expected: "tag2",
},
{
imageName: "image4",
cpe: CPEMap{
"container/imageNameTags": []interface{}{"image1:tag1", "image2:tag2", "image3:tag3"},
},
expected: "",
},
}
for _, test := range tt {
assert.Equal(t, test.expected, test.cpe.imageTag(test.imageName))
}
})
t.Run("CPE from files", func(t *testing.T) {
dir := t.TempDir()
imageNameTags := []string{"image1:tag1", "image2:tag2", "image3:tag3"}
imageNames := []string{"image1", "image2", "image3"}
cpeOut := CPEMap{"container/imageNameTags": imageNameTags, "container/imageNames": imageNames}
assert.NoError(t, cpeOut.WriteToDisk(dir))
cpe := CPEMap{}
assert.NoError(t, cpe.LoadFromDisk(dir))
res, err := cpe.ParseTemplate(`{{imageTag "image2"}}`)
assert.NoError(t, err)
assert.Equal(t, "tag2", (*res).String())
})
}