1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2024-12-14 11:03:09 +02:00
sap-jenkins-library/pkg/whitesource/configHelper_test.go

258 lines
9.5 KiB
Go
Raw Normal View History

feat(whitesourceExecuteScan): UA for all build tools, e.g. maven & npm (#2501) * feat(whitesource): add config helper this helps to ease & enforce config settings * fix accidential change of class * add todos wrt java download * use existing scanOptions, add option to download jre * update generation * fix generation * allow running UA via go library * correct image, improve logging * add removal of downloaded JVM * update java creation and deletion * refactor and add log output * remove obsolete ToDo * increase test coverage * increase test coverage * adding aliases and tests * make go modules as default * maven: update behavior of projectNaming * add Docker capabilities * correct parameter name * retrieve Docker coordinates * docker coordinates only to provide artifact * add ToDos * add mta capability * add aliases, mvn arguments for settings * clean up groovy part * update defaults * add container for pip * add defaults, add maven specifics, ... * properly download settings * maven: check existence of excluded files * fix reporting * Update CommonStepsTest.groovy * update comment * fix CodeClimate finding * add tests for pip & fix minor issues * fix order of pip build descriptors * update pip container options * fix pip virtualEnv parameter * update report permissions * fix test * update container options * add use fileUtils to load properties file * update parameter description * adding Docker scanning defaults * clean up configHelper * consider also npm tool cache * add todos
2021-02-03 15:52:48 +02:00
package whitesource
import (
"fmt"
"testing"
"github.com/stretchr/testify/assert"
)
func TestRewriteUAConfigurationFile(t *testing.T) {
t.Parallel()
t.Run("default", func(t *testing.T) {
config := ScanOptions{
BuildTool: "npm",
ConfigFilePath: "ua.props",
}
utilsMock := NewScanUtilsMock()
utilsMock.AddFile(config.ConfigFilePath, []byte("test = dummy"))
path, err := config.RewriteUAConfigurationFile(utilsMock, "")
feat(whitesourceExecuteScan): UA for all build tools, e.g. maven & npm (#2501) * feat(whitesource): add config helper this helps to ease & enforce config settings * fix accidential change of class * add todos wrt java download * use existing scanOptions, add option to download jre * update generation * fix generation * allow running UA via go library * correct image, improve logging * add removal of downloaded JVM * update java creation and deletion * refactor and add log output * remove obsolete ToDo * increase test coverage * increase test coverage * adding aliases and tests * make go modules as default * maven: update behavior of projectNaming * add Docker capabilities * correct parameter name * retrieve Docker coordinates * docker coordinates only to provide artifact * add ToDos * add mta capability * add aliases, mvn arguments for settings * clean up groovy part * update defaults * add container for pip * add defaults, add maven specifics, ... * properly download settings * maven: check existence of excluded files * fix reporting * Update CommonStepsTest.groovy * update comment * fix CodeClimate finding * add tests for pip & fix minor issues * fix order of pip build descriptors * update pip container options * fix pip virtualEnv parameter * update report permissions * fix test * update container options * add use fileUtils to load properties file * update parameter description * adding Docker scanning defaults * clean up configHelper * consider also npm tool cache * add todos
2021-02-03 15:52:48 +02:00
assert.NoError(t, err)
newUAConfig, err := utilsMock.FileRead(path)
assert.NoError(t, err)
assert.Contains(t, string(newUAConfig), "test = dummy")
assert.Contains(t, string(newUAConfig), "failErrorLevel = ALL")
})
t.Run("accept non-existing file", func(t *testing.T) {
config := ScanOptions{
BuildTool: "npm",
ConfigFilePath: "ua.props",
}
utilsMock := NewScanUtilsMock()
path, err := config.RewriteUAConfigurationFile(utilsMock, "")
feat(whitesourceExecuteScan): UA for all build tools, e.g. maven & npm (#2501) * feat(whitesource): add config helper this helps to ease & enforce config settings * fix accidential change of class * add todos wrt java download * use existing scanOptions, add option to download jre * update generation * fix generation * allow running UA via go library * correct image, improve logging * add removal of downloaded JVM * update java creation and deletion * refactor and add log output * remove obsolete ToDo * increase test coverage * increase test coverage * adding aliases and tests * make go modules as default * maven: update behavior of projectNaming * add Docker capabilities * correct parameter name * retrieve Docker coordinates * docker coordinates only to provide artifact * add ToDos * add mta capability * add aliases, mvn arguments for settings * clean up groovy part * update defaults * add container for pip * add defaults, add maven specifics, ... * properly download settings * maven: check existence of excluded files * fix reporting * Update CommonStepsTest.groovy * update comment * fix CodeClimate finding * add tests for pip & fix minor issues * fix order of pip build descriptors * update pip container options * fix pip virtualEnv parameter * update report permissions * fix test * update container options * add use fileUtils to load properties file * update parameter description * adding Docker scanning defaults * clean up configHelper * consider also npm tool cache * add todos
2021-02-03 15:52:48 +02:00
assert.NoError(t, err)
newUAConfig, err := utilsMock.FileRead(path)
assert.NoError(t, err)
assert.Contains(t, string(newUAConfig), "failErrorLevel = ALL")
})
t.Run("error - write file", func(t *testing.T) {
config := ScanOptions{
BuildTool: "npm",
ConfigFilePath: "ua.props",
}
utilsMock := NewScanUtilsMock()
utilsMock.FileWriteError = fmt.Errorf("failed to write file")
_, err := config.RewriteUAConfigurationFile(utilsMock, "")
feat(whitesourceExecuteScan): UA for all build tools, e.g. maven & npm (#2501) * feat(whitesource): add config helper this helps to ease & enforce config settings * fix accidential change of class * add todos wrt java download * use existing scanOptions, add option to download jre * update generation * fix generation * allow running UA via go library * correct image, improve logging * add removal of downloaded JVM * update java creation and deletion * refactor and add log output * remove obsolete ToDo * increase test coverage * increase test coverage * adding aliases and tests * make go modules as default * maven: update behavior of projectNaming * add Docker capabilities * correct parameter name * retrieve Docker coordinates * docker coordinates only to provide artifact * add ToDos * add mta capability * add aliases, mvn arguments for settings * clean up groovy part * update defaults * add container for pip * add defaults, add maven specifics, ... * properly download settings * maven: check existence of excluded files * fix reporting * Update CommonStepsTest.groovy * update comment * fix CodeClimate finding * add tests for pip & fix minor issues * fix order of pip build descriptors * update pip container options * fix pip virtualEnv parameter * update report permissions * fix test * update container options * add use fileUtils to load properties file * update parameter description * adding Docker scanning defaults * clean up configHelper * consider also npm tool cache * add todos
2021-02-03 15:52:48 +02:00
assert.Contains(t, fmt.Sprint(err), "failed to write file")
})
}
func TestUpdateConfig(t *testing.T) {
t.Parallel()
originalConfig := map[string]string{
"dependent": "dependentValue",
"forced": "forced_original",
"not_forced": "not_forced_original",
"dont_omit_forced": "dont_omit_forced_original",
"dont_omit_not_forced": "dont_omit_not_forced_original",
}
testConfig := ConfigOptions{
{Name: "non_existing_forced", Value: "non_existing_forced_val", Force: true},
{Name: "non_existing_not_forced", Value: "non_existing_not_forced_val", Force: false},
{Name: "forced", Value: "forced_val", Force: true},
{Name: "not_forced", Value: "not_forced_val", Force: false},
{Name: "omit", Value: "omit_val", OmitIfPresent: "dependent"},
{Name: "dont_omit", Value: "dont_omit_val", OmitIfPresent: "dependent_notExisting"},
{Name: "dont_omit_forced", Value: "dont_omit_forced_val", OmitIfPresent: "dependent_notExisting", Force: true},
{Name: "dont_omit_not_forced", Value: "dont_omit_not_forced_val", OmitIfPresent: "dependent_notExisting", Force: false},
}
updatedConfig := testConfig.updateConfig(&originalConfig)
assert.Equal(t, "dependentValue", updatedConfig["dependent"])
assert.Equal(t, "non_existing_forced_val", updatedConfig["non_existing_forced"])
assert.Equal(t, "non_existing_not_forced_val", updatedConfig["non_existing_not_forced"])
assert.Equal(t, "forced_val", updatedConfig["forced"])
assert.Equal(t, "not_forced_original", updatedConfig["not_forced"])
assert.NotEqual(t, "omit_val", updatedConfig["omit"])
assert.Equal(t, "dont_omit_val", updatedConfig["dont_omit"])
assert.Equal(t, "dont_omit_forced_val", updatedConfig["dont_omit_forced"])
assert.Equal(t, "dont_omit_not_forced_original", updatedConfig["dont_omit_not_forced"])
}
func TestAddGeneralDefaults(t *testing.T) {
t.Parallel()
utilsMock := NewScanUtilsMock()
t.Run("default", func(t *testing.T) {
testConfig := ConfigOptions{}
whitesourceConfig := ScanOptions{
OrgToken: "testOrgToken",
ProductName: "Test",
ProductToken: "testProductToken",
ProductVersion: "testVersion",
ProjectName: "testProject",
UserToken: "testuserKey",
}
testConfig.addGeneralDefaults(&whitesourceConfig, utilsMock, "")
feat(whitesourceExecuteScan): UA for all build tools, e.g. maven & npm (#2501) * feat(whitesource): add config helper this helps to ease & enforce config settings * fix accidential change of class * add todos wrt java download * use existing scanOptions, add option to download jre * update generation * fix generation * allow running UA via go library * correct image, improve logging * add removal of downloaded JVM * update java creation and deletion * refactor and add log output * remove obsolete ToDo * increase test coverage * increase test coverage * adding aliases and tests * make go modules as default * maven: update behavior of projectNaming * add Docker capabilities * correct parameter name * retrieve Docker coordinates * docker coordinates only to provide artifact * add ToDos * add mta capability * add aliases, mvn arguments for settings * clean up groovy part * update defaults * add container for pip * add defaults, add maven specifics, ... * properly download settings * maven: check existence of excluded files * fix reporting * Update CommonStepsTest.groovy * update comment * fix CodeClimate finding * add tests for pip & fix minor issues * fix order of pip build descriptors * update pip container options * fix pip virtualEnv parameter * update report permissions * fix test * update container options * add use fileUtils to load properties file * update parameter description * adding Docker scanning defaults * clean up configHelper * consider also npm tool cache * add todos
2021-02-03 15:52:48 +02:00
assert.Equal(t, "checkPolicies", testConfig[0].Name)
assert.Equal(t, true, testConfig[0].Value)
assert.Equal(t, "forceCheckAllDependencies", testConfig[1].Name)
assert.Equal(t, true, testConfig[1].Value)
assert.Equal(t, "testOrgToken", testConfig[2].Value)
assert.Equal(t, "Test", testConfig[3].Value)
assert.Equal(t, "testVersion", testConfig[4].Value)
assert.Equal(t, "testProject", testConfig[5].Value)
assert.Equal(t, "testVersion", testConfig[6].Value)
assert.Equal(t, "testProductToken", testConfig[7].Value)
assert.Equal(t, "testuserKey", testConfig[8].Value)
})
t.Run("DIST product", func(t *testing.T) {
testConfig := ConfigOptions{}
whitesourceConfig := ScanOptions{
OrgToken: "testOrgToken",
ProductName: "DIST - Test",
ProductToken: "testProductToken",
ProductVersion: "testVersion",
ProjectName: "testProject",
UserToken: "testuserKey",
}
testConfig.addGeneralDefaults(&whitesourceConfig, utilsMock, "anotherProject")
feat(whitesourceExecuteScan): UA for all build tools, e.g. maven & npm (#2501) * feat(whitesource): add config helper this helps to ease & enforce config settings * fix accidential change of class * add todos wrt java download * use existing scanOptions, add option to download jre * update generation * fix generation * allow running UA via go library * correct image, improve logging * add removal of downloaded JVM * update java creation and deletion * refactor and add log output * remove obsolete ToDo * increase test coverage * increase test coverage * adding aliases and tests * make go modules as default * maven: update behavior of projectNaming * add Docker capabilities * correct parameter name * retrieve Docker coordinates * docker coordinates only to provide artifact * add ToDos * add mta capability * add aliases, mvn arguments for settings * clean up groovy part * update defaults * add container for pip * add defaults, add maven specifics, ... * properly download settings * maven: check existence of excluded files * fix reporting * Update CommonStepsTest.groovy * update comment * fix CodeClimate finding * add tests for pip & fix minor issues * fix order of pip build descriptors * update pip container options * fix pip virtualEnv parameter * update report permissions * fix test * update container options * add use fileUtils to load properties file * update parameter description * adding Docker scanning defaults * clean up configHelper * consider also npm tool cache * add todos
2021-02-03 15:52:48 +02:00
assert.Equal(t, "checkPolicies", testConfig[0].Name)
assert.Equal(t, false, testConfig[0].Value)
assert.Equal(t, "forceCheckAllDependencies", testConfig[1].Name)
assert.Equal(t, false, testConfig[1].Value)
assert.Equal(t, "anotherProject", testConfig[5].Value)
feat(whitesourceExecuteScan): UA for all build tools, e.g. maven & npm (#2501) * feat(whitesource): add config helper this helps to ease & enforce config settings * fix accidential change of class * add todos wrt java download * use existing scanOptions, add option to download jre * update generation * fix generation * allow running UA via go library * correct image, improve logging * add removal of downloaded JVM * update java creation and deletion * refactor and add log output * remove obsolete ToDo * increase test coverage * increase test coverage * adding aliases and tests * make go modules as default * maven: update behavior of projectNaming * add Docker capabilities * correct parameter name * retrieve Docker coordinates * docker coordinates only to provide artifact * add ToDos * add mta capability * add aliases, mvn arguments for settings * clean up groovy part * update defaults * add container for pip * add defaults, add maven specifics, ... * properly download settings * maven: check existence of excluded files * fix reporting * Update CommonStepsTest.groovy * update comment * fix CodeClimate finding * add tests for pip & fix minor issues * fix order of pip build descriptors * update pip container options * fix pip virtualEnv parameter * update report permissions * fix test * update container options * add use fileUtils to load properties file * update parameter description * adding Docker scanning defaults * clean up configHelper * consider also npm tool cache * add todos
2021-02-03 15:52:48 +02:00
})
t.Run("verbose", func(t *testing.T) {
testConfig := ConfigOptions{}
whitesourceConfig := ScanOptions{
Verbose: true,
}
testConfig.addGeneralDefaults(&whitesourceConfig, utilsMock, "")
feat(whitesourceExecuteScan): UA for all build tools, e.g. maven & npm (#2501) * feat(whitesource): add config helper this helps to ease & enforce config settings * fix accidential change of class * add todos wrt java download * use existing scanOptions, add option to download jre * update generation * fix generation * allow running UA via go library * correct image, improve logging * add removal of downloaded JVM * update java creation and deletion * refactor and add log output * remove obsolete ToDo * increase test coverage * increase test coverage * adding aliases and tests * make go modules as default * maven: update behavior of projectNaming * add Docker capabilities * correct parameter name * retrieve Docker coordinates * docker coordinates only to provide artifact * add ToDos * add mta capability * add aliases, mvn arguments for settings * clean up groovy part * update defaults * add container for pip * add defaults, add maven specifics, ... * properly download settings * maven: check existence of excluded files * fix reporting * Update CommonStepsTest.groovy * update comment * fix CodeClimate finding * add tests for pip & fix minor issues * fix order of pip build descriptors * update pip container options * fix pip virtualEnv parameter * update report permissions * fix test * update container options * add use fileUtils to load properties file * update parameter description * adding Docker scanning defaults * clean up configHelper * consider also npm tool cache * add todos
2021-02-03 15:52:48 +02:00
assert.Equal(t, "log.level", testConfig[2].Name)
assert.Equal(t, "debug", testConfig[2].Value)
assert.Equal(t, "log.files.level", testConfig[3].Name)
assert.Equal(t, "debug", testConfig[3].Value)
})
t.Run("includes and excludes", func(t *testing.T) {
testConfig := ConfigOptions{}
whitesourceConfig := ScanOptions{
Excludes: []string{"**/excludes1", "**/excludes2"},
Includes: []string{"**/includes1", "**/includes2"},
}
testConfig.addGeneralDefaults(&whitesourceConfig, utilsMock, "")
feat(whitesourceExecuteScan): UA for all build tools, e.g. maven & npm (#2501) * feat(whitesource): add config helper this helps to ease & enforce config settings * fix accidential change of class * add todos wrt java download * use existing scanOptions, add option to download jre * update generation * fix generation * allow running UA via go library * correct image, improve logging * add removal of downloaded JVM * update java creation and deletion * refactor and add log output * remove obsolete ToDo * increase test coverage * increase test coverage * adding aliases and tests * make go modules as default * maven: update behavior of projectNaming * add Docker capabilities * correct parameter name * retrieve Docker coordinates * docker coordinates only to provide artifact * add ToDos * add mta capability * add aliases, mvn arguments for settings * clean up groovy part * update defaults * add container for pip * add defaults, add maven specifics, ... * properly download settings * maven: check existence of excluded files * fix reporting * Update CommonStepsTest.groovy * update comment * fix CodeClimate finding * add tests for pip & fix minor issues * fix order of pip build descriptors * update pip container options * fix pip virtualEnv parameter * update report permissions * fix test * update container options * add use fileUtils to load properties file * update parameter description * adding Docker scanning defaults * clean up configHelper * consider also npm tool cache * add todos
2021-02-03 15:52:48 +02:00
assert.Equal(t, "excludes", testConfig[2].Name)
assert.Equal(t, "**/excludes1 **/excludes2", testConfig[2].Value)
assert.Equal(t, true, testConfig[2].Force)
assert.Equal(t, "includes", testConfig[3].Name)
assert.Equal(t, "**/includes1 **/includes2", testConfig[3].Value)
assert.Equal(t, true, testConfig[3].Force)
})
}
func TestAddBuildToolDefaults(t *testing.T) {
t.Parallel()
t.Run("success case", func(t *testing.T) {
utilsMock := NewScanUtilsMock()
var testConfig ConfigOptions
whitesourceConfig := ScanOptions{
BuildTool: "dub",
}
err := testConfig.addBuildToolDefaults(&whitesourceConfig, utilsMock)
assert.NoError(t, err)
assert.Equal(t, ConfigOptions{{Name: "includes", Value: "**/*.d **/*.di"}}, testConfig)
})
t.Run("error case", func(t *testing.T) {
utilsMock := NewScanUtilsMock()
var testConfig ConfigOptions
whitesourceConfig := ScanOptions{
BuildTool: "notHardened",
}
err := testConfig.addBuildToolDefaults(&whitesourceConfig, utilsMock)
assert.EqualError(t, err, "configuration not hardened")
})
t.Run("maven - m2 path", func(t *testing.T) {
utilsMock := NewScanUtilsMock()
testConfig := ConfigOptions{}
whitesourceConfig := ScanOptions{
BuildTool: "maven",
M2Path: "test/.m2",
}
testConfig.addBuildToolDefaults(&whitesourceConfig, utilsMock)
assert.Contains(t, testConfig, ConfigOption{Name: "maven.m2RepositoryPath", Value: "test/.m2", Force: true})
assert.NotContains(t, testConfig, ConfigOption{Name: "maven.additionalArguments", Value: "", Force: true})
})
t.Run("maven - settings", func(t *testing.T) {
utilsMock := NewScanUtilsMock()
testConfig := ConfigOptions{}
whitesourceConfig := ScanOptions{
BuildTool: "maven",
ProjectSettingsFile: "project-settings.xml",
GlobalSettingsFile: "global-settings.xml",
BuildDescriptorExcludeList: []string{"unit-tests/pom.xml"},
}
utilsMock.AddFile("unit-tests/pom.xml", []byte("dummy"))
testConfig.addBuildToolDefaults(&whitesourceConfig, utilsMock)
assert.Contains(t, testConfig, ConfigOption{Name: "maven.additionalArguments", Value: "--global-settings global-settings.xml --settings project-settings.xml --projects !unit-tests", Force: true})
})
t.Run("Docker - default", func(t *testing.T) {
utilsMock := NewScanUtilsMock()
testConfig := ConfigOptions{}
whitesourceConfig := ScanOptions{
BuildTool: "docker",
}
utilsMock.AddFile("Dockerfile", []byte("dummy"))
testConfig.addBuildToolDefaults(&whitesourceConfig, utilsMock)
assert.Contains(t, testConfig, ConfigOption{Name: "docker.dockerfilePath", Value: "Dockerfile", Force: false})
})
t.Run("Docker - no builddescriptor found", func(t *testing.T) {
utilsMock := NewScanUtilsMock()
testConfig := ConfigOptions{}
whitesourceConfig := ScanOptions{
BuildTool: "docker",
}
testConfig.addBuildToolDefaults(&whitesourceConfig, utilsMock)
assert.NotContains(t, testConfig, ConfigOption{Name: "docker.dockerfilePath", Value: "Dockerfile", Force: false})
})
}
func TestMvnProjectExcludes(t *testing.T) {
utilsMock := NewScanUtilsMock()
utilsMock.AddFile("unit-tests/package.json", []byte("dummy"))
utilsMock.AddFile("unit-tests/pom.xml", []byte("dummy"))
utilsMock.AddFile("integration-tests/pom.xml", []byte("dummy"))
tt := []struct {
buildDescriptorExcludeList []string
expected []string
}{
{buildDescriptorExcludeList: []string{}, expected: []string{}},
{buildDescriptorExcludeList: []string{"unit-tests/package.json", "integration-tests/package.json"}, expected: []string{}},
{buildDescriptorExcludeList: []string{"unit-tests/pom.xml"}, expected: []string{"--projects", "!unit-tests"}},
{buildDescriptorExcludeList: []string{"unit-tests/pom.xml", "integration-tests/pom.xml"}, expected: []string{"--projects", "!unit-tests,!integration-tests"}},
}
for _, test := range tt {
assert.Equal(t, test.expected, mvnProjectExcludes(test.buildDescriptorExcludeList, utilsMock), test.buildDescriptorExcludeList)
}
}