mirror of
https://github.com/SAP/jenkins-library.git
synced 2024-12-14 11:03:09 +02:00
a46f796bcd
* 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
127 lines
4.6 KiB
Go
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")
|
|
})
|
|
}
|