1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2024-12-14 11:03:09 +02:00
sap-jenkins-library/pkg/piperutils/stepResults_test.go
Jk1484 ffc931aad1
feat(golangBuild): use 'unit' build tag to include tests during test execution (#4345)
* Added unit tag as argument. Added description to runTests command. Changed code generator to have unit build tag in generated unit test files.

* Added unit build tag to all unit test files.

* added to new unit test unit build tag

* Update verify-go.yml

* small fix

---------

Co-authored-by: Muhammadali Nazarov <Muhammadali.Nazarov@acronis.com>
Co-authored-by: Christopher Fenner <26137398+CCFenner@users.noreply.github.com>
2023-05-03 21:02:11 +05:00

130 lines
4.6 KiB
Go

//go:build unit
// +build unit
package piperutils
import (
"encoding/json"
"fmt"
"os"
"path/filepath"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
type fileMock struct {
fileMap map[string][]byte
writeErrors map[string]error
}
func (f *fileMock) WriteFile(filename string, data []byte, perm os.FileMode) error {
if f.writeErrors != nil && f.writeErrors[filename] != nil {
return f.writeErrors[filename]
}
f.fileMap[filename] = data
return nil
}
func (f *fileMock) ReadFile(name string) ([]byte, error) {
return f.fileMap[name], nil
}
func (f *fileMock) FileExists(name string) bool {
return f.fileMap[name] != nil
}
func TestPersistReportAndLinks(t *testing.T) {
workspace := ""
t.Run("success - default", func(t *testing.T) {
files := fileMock{fileMap: map[string][]byte{}}
reports := []Path{{Target: "testFile1.json", Mandatory: true}, {Target: "testFile2.json"}}
links := []Path{{Target: "https://1234568.com/test", Name: "Weblink"}}
err := PersistReportsAndLinks("checkmarxExecuteScan", workspace, &files, reports, links)
assert.NoError(t, err)
reportsJSONPath := filepath.Join(workspace, "checkmarxExecuteScan_reports.json")
assert.True(t, files.FileExists(reportsJSONPath))
linksJSONPath := filepath.Join(workspace, "checkmarxExecuteScan_links.json")
assert.True(t, files.FileExists(linksJSONPath))
var reportsLoaded []Path
var linksLoaded []Path
reportsFileData, err := files.ReadFile(reportsJSONPath)
reportsDataString := string(reportsFileData)
println(reportsDataString)
assert.NoError(t, err, "No error expected but got one")
linksFileData, err := files.ReadFile(linksJSONPath)
linksDataString := string(linksFileData)
println(linksDataString)
assert.NoError(t, err, "No error expected but got one")
_ = json.Unmarshal(reportsFileData, &reportsLoaded)
_ = json.Unmarshal(linksFileData, &linksLoaded)
assert.Equal(t, 2, len(reportsLoaded), "wrong number of reports")
assert.Equal(t, 1, len(linksLoaded), "wrong number of links")
assert.Equal(t, true, reportsLoaded[0].Mandatory, "mandatory flag on report 1 has wrong value")
assert.Equal(t, "testFile1.json", reportsLoaded[0].Target, "target value on report 1 has wrong value")
assert.Equal(t, false, reportsLoaded[1].Mandatory, "mandatory flag on report 2 has wrong value")
assert.Equal(t, "testFile2.json", reportsLoaded[1].Target, "target value on report 1 has wrong value")
assert.Equal(t, false, linksLoaded[0].Mandatory, "mandatory flag on link 1 has wrong value")
assert.Equal(t, "https://1234568.com/test", linksLoaded[0].Target, "target value on link 1 has wrong value")
assert.Equal(t, "Weblink", linksLoaded[0].Name, "name value on link 1 has wrong value")
})
t.Run("success - empty list", func(t *testing.T) {
files := fileMock{fileMap: map[string][]byte{}}
reportsJSONPath := filepath.Join(workspace, "sonarExecuteScan_reports.json")
linksJSONPath := filepath.Join(workspace, "sonarExecuteScan_links.json")
// prepare uninitialised parameters
var reports, links []Path
require.Empty(t, reports)
require.Empty(t, links)
// test
err := PersistReportsAndLinks("sonarExecuteScan", workspace, &files, reports, links)
// assert
assert.NoError(t, err)
for _, reportFile := range []string{reportsJSONPath, linksJSONPath} {
assert.True(t, files.FileExists(reportFile))
reportsFileData, err := files.ReadFile(reportFile)
require.NoError(t, err, "No error expected but got one")
assert.Equal(t, "[]", string(reportsFileData))
}
})
t.Run("failure - write reports", func(t *testing.T) {
stepName := "checkmarxExecuteScan"
files := fileMock{
fileMap: map[string][]byte{},
writeErrors: map[string]error{filepath.Join(workspace, fmt.Sprintf("%v_reports.json", stepName)): fmt.Errorf("write error")},
}
reports := []Path{{Target: "testFile1.json"}, {Target: "testFile2.json"}}
links := []Path{{Target: "https://1234568.com/test", Name: "Weblink"}}
err := PersistReportsAndLinks(stepName, workspace, &files, reports, links)
assert.EqualError(t, err, "failed to write reports.json: write error")
})
t.Run("failure - write links", func(t *testing.T) {
stepName := "checkmarxExecuteScan"
files := fileMock{
fileMap: map[string][]byte{},
writeErrors: map[string]error{filepath.Join(workspace, fmt.Sprintf("%v_links.json", stepName)): fmt.Errorf("write error")},
}
reports := []Path{{Target: "testFile1.json"}, {Target: "testFile2.json"}}
links := []Path{{Target: "https://1234568.com/test", Name: "Weblink"}}
err := PersistReportsAndLinks(stepName, workspace, &files, reports, links)
assert.EqualError(t, err, "failed to write links.json: write error")
})
}