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
Oliver Nocon a46f796bcd
chore: cleanup reporting & some incorrect file usage in tests (#3943)
* chore: cleanup reporting & some incorrect file usage in tests

* cleanup interface

* chore: remove comment

* preserve error handling

* Rename FileUtils.go to fileUtils.go

* clean up formatting

* chore: address static check findings

* fix brittle test

* chore: cleanup formatting
2022-08-09 10:57:02 +02:00

127 lines
4.6 KiB
Go

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")
})
}