mirror of
https://github.com/SAP/jenkins-library.git
synced 2025-03-03 15:02:35 +02:00
added some tests, fixed CodeClimat findings
This commit is contained in:
parent
1a609e5418
commit
e763194779
@ -81,8 +81,10 @@ func generateStepDocumentation(stepData config.StepData, docuHelperData DocuHelp
|
||||
//create the file path for the template and open it.
|
||||
docTemplateFilePath := fmt.Sprintf("%v%v.md", docuHelperData.DocTemplatePath, stepData.Metadata.Name)
|
||||
docTemplate, err := docuHelperData.OpenDocTemplateFile(docTemplateFilePath)
|
||||
defer docTemplate.Close()
|
||||
|
||||
if docTemplate != nil {
|
||||
defer docTemplate.Close()
|
||||
}
|
||||
//check if there is an error during opening the template (true : skip docu generation for this meta data file)
|
||||
if err != nil {
|
||||
return fmt.Errorf("error occured: %v", err)
|
||||
@ -316,34 +318,58 @@ func appendSecretsToParameters(stepData *config.StepData) {
|
||||
}
|
||||
}
|
||||
|
||||
func getDocuContextDefaults(m *config.StepData) map[string]string {
|
||||
func getDocuContextDefaults(step *config.StepData) map[string]string {
|
||||
|
||||
var result map[string]string = make(map[string]string)
|
||||
|
||||
//creates the context defaults for containers
|
||||
addContainerContent(step, result)
|
||||
//creates the context defaults for sidecars
|
||||
addSidecarContent(step, result)
|
||||
//creates the context defaults for resources
|
||||
addStashContent(step, result)
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
func addContainerContent(m *config.StepData, result map[string]string) {
|
||||
//creates the context defaults for containers
|
||||
if len(m.Spec.Containers) > 0 {
|
||||
keys := []string{}
|
||||
resources := map[string][]string{}
|
||||
bEmptyKey := true
|
||||
for _, container := range m.Spec.Containers {
|
||||
|
||||
key := ""
|
||||
if len(container.Conditions) > 0 {
|
||||
key = fmt.Sprintf("%v=%v", container.Conditions[0].Params[0].Name, container.Conditions[0].Params[0].Value)
|
||||
}
|
||||
if len(container.Command) > 0 {
|
||||
keys = append(keys, key+"_containerCommand")
|
||||
|
||||
if bEmptyKey || len(key) > 0 {
|
||||
|
||||
if len(container.Command) > 0 {
|
||||
keys = append(keys, key+"_containerCommand")
|
||||
}
|
||||
if m.Metadata.Name == "dockerExecuteOnKubernetes" {
|
||||
keys = append(keys, key+"_containerName")
|
||||
}
|
||||
keys = append(keys, key+"_containerShell")
|
||||
keys = append(keys, key+"_dockerEnvVars")
|
||||
keys = append(keys, key+"_dockerImage")
|
||||
keys = append(keys, key+"_dockerName")
|
||||
keys = append(keys, key+"_dockerPullImage")
|
||||
keys = append(keys, key+"_dockerWorkspace")
|
||||
|
||||
}
|
||||
if m.Metadata.Name == "dockerExecuteOnKubernetes" {
|
||||
keys = append(keys, key+"_containerName")
|
||||
|
||||
if len(container.Conditions) == 0 {
|
||||
bEmptyKey = false
|
||||
}
|
||||
keys = append(keys, key+"_containerShell")
|
||||
keys = append(keys, key+"_dockerEnvVars")
|
||||
keys = append(keys, key+"_dockerImage")
|
||||
keys = append(keys, key+"_dockerName")
|
||||
keys = append(keys, key+"_dockerPullImage")
|
||||
keys = append(keys, key+"_dockerWorkspace")
|
||||
|
||||
workingDir := ifThenElse(len(container.WorkingDir) > 0, container.WorkingDir, "\\<empty\\>")
|
||||
resources[key+"_containerShell"] = append(resources[key+"_containerShell"], container.Shell)
|
||||
if len(container.Shell) > 0 {
|
||||
resources[key+"_containerShell"] = append(resources[key+"_containerShell"], container.Shell)
|
||||
}
|
||||
resources[key+"_dockerName"] = append(resources[key+"_dockerName"], container.Name)
|
||||
|
||||
//Only for Step: dockerExecuteOnKubernetes
|
||||
@ -358,7 +384,6 @@ func getDocuContextDefaults(m *config.StepData) map[string]string {
|
||||
if len(container.ImagePullPolicy) > 0 {
|
||||
resources[key+"_dockerPullImage"] = []string{fmt.Sprintf("%v", container.ImagePullPolicy != "Never")}
|
||||
}
|
||||
|
||||
//Different when key is set (Param.Name + Param.Value)
|
||||
if len(key) > 0 {
|
||||
resources[key+"_dockerEnvVars"] = append(resources[key+"_dockerEnvVars"], fmt.Sprintf("%v:\\[%v\\]", key, strings.Join(envVarsAsStringSlice(container.EnvVars), "")))
|
||||
@ -369,8 +394,6 @@ func getDocuContextDefaults(m *config.StepData) map[string]string {
|
||||
resources[key+"_dockerImage"] = append(resources[key+"_dockerImage"], container.Image)
|
||||
resources[key+"_dockerWorkspace"] = append(resources[key+"_dockerWorkspace"], workingDir)
|
||||
}
|
||||
// Ready command not relevant for main runtime container so far
|
||||
//p[] = container.ReadyCommand
|
||||
}
|
||||
|
||||
for _, key := range keys {
|
||||
@ -384,7 +407,8 @@ func getDocuContextDefaults(m *config.StepData) map[string]string {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
func addSidecarContent(m *config.StepData, result map[string]string) {
|
||||
//creates the context defaults for sidecars
|
||||
if len(m.Spec.Sidecars) > 0 {
|
||||
if len(m.Spec.Sidecars[0].Command) > 0 {
|
||||
@ -400,12 +424,9 @@ func getDocuContextDefaults(m *config.StepData) map[string]string {
|
||||
result["sidecarWorkspace"] = m.Spec.Sidecars[0].WorkingDir
|
||||
}
|
||||
|
||||
// not filled for now since this is not relevant in Kubernetes case
|
||||
//p["dockerOptions"] = container.
|
||||
//p["dockerVolumeBind"] = container.
|
||||
//root["containerPortMappings"] = m.Spec.Sidecars[0].
|
||||
//root["sidecarOptions"] = m.Spec.Sidecars[0].
|
||||
//root["sidecarVolumeBind"] = m.Spec.Sidecars[0].
|
||||
}
|
||||
|
||||
func addStashContent(m *config.StepData, result map[string]string) {
|
||||
|
||||
//creates the context defaults for resources
|
||||
if len(m.Spec.Inputs.Resources) > 0 {
|
||||
@ -437,8 +458,6 @@ func getDocuContextDefaults(m *config.StepData) map[string]string {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
func envVarsAsStringSlice(envVars []config.EnvVar) []string {
|
||||
|
@ -88,6 +88,63 @@ func configOpenDocTemplateFileMock(docTemplateFilePath string) (io.ReadCloser, e
|
||||
}
|
||||
}
|
||||
|
||||
var stepData config.StepData = config.StepData{
|
||||
Spec: config.StepSpec{
|
||||
Inputs: config.StepInputs{
|
||||
Parameters: []config.StepParameters{
|
||||
{Name: "param0", Scope: []string{"GENERAL"}, Type: "string", Default: "val0"},
|
||||
},
|
||||
Resources: []config.StepResources{
|
||||
{Name: "resource0", Type: "stash", Description: "val0"},
|
||||
{Name: "resource1", Type: "stash", Description: "val1"},
|
||||
{Name: "resource2", Type: "stash", Description: "val2"},
|
||||
},
|
||||
},
|
||||
Containers: []config.Container{
|
||||
{Name: "container0", Image: "image", WorkingDir: "workingdir", Shell: "shell",
|
||||
EnvVars: []config.EnvVar{
|
||||
{"envar.name0", "envar.value0"},
|
||||
},
|
||||
},
|
||||
{Name: "container1", Image: "image", WorkingDir: "workingdir",
|
||||
EnvVars: []config.EnvVar{
|
||||
{"envar.name1", "envar.value1"},
|
||||
},
|
||||
},
|
||||
{Name: "container2a", Command: []string{"command"}, ImagePullPolicy: "pullpolicy", Image: "image", WorkingDir: "workingdir",
|
||||
EnvVars: []config.EnvVar{
|
||||
{"envar.name2a", "envar.value2a"}},
|
||||
Conditions: []config.Condition{
|
||||
{Params: []config.Param{
|
||||
{"param.name2a", "param.value2a"},
|
||||
}},
|
||||
},
|
||||
},
|
||||
{Name: "container2b", Image: "image", WorkingDir: "workingdir",
|
||||
EnvVars: []config.EnvVar{
|
||||
{"envar.name2b", "envar.value2b"},
|
||||
},
|
||||
Conditions: []config.Condition{
|
||||
{Params: []config.Param{
|
||||
{"param.name2b", "param.value2b"},
|
||||
}},
|
||||
},
|
||||
},
|
||||
},
|
||||
Sidecars: []config.Container{
|
||||
{Name: "sidecar0", Command: []string{"command"}, ImagePullPolicy: "pullpolicy", Image: "image", WorkingDir: "workingdir", ReadyCommand: "readycommand",
|
||||
EnvVars: []config.EnvVar{
|
||||
{"envar.name3", "envar.value3"}},
|
||||
Conditions: []config.Condition{
|
||||
{Params: []config.Param{
|
||||
{"param.name0", "param.value0"},
|
||||
}},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
var resultDocumentContent string
|
||||
|
||||
func docFileWriterMock(docTemplateFilePath string, data []byte, perm os.FileMode) error {
|
||||
@ -124,3 +181,138 @@ func TestGenerateStepDocumentationError(t *testing.T) {
|
||||
assert.Error(t, err, fmt.Sprintf("Error occured: %v\n", err))
|
||||
})
|
||||
}
|
||||
|
||||
func TestReadAndAdjustTemplate(t *testing.T) {
|
||||
|
||||
t.Run("Success Case", func(t *testing.T) {
|
||||
|
||||
tmpl, _ := configOpenDocTemplateFileMock("testStep.md")
|
||||
content := readAndAdjustTemplate(tmpl)
|
||||
|
||||
cases := []struct {
|
||||
x, y string
|
||||
}{
|
||||
{"{{docGenStepName .}}", "${docGenStepName}"},
|
||||
{"{{docGenConfiguration .}}", "${docGenConfiguration}"},
|
||||
{"{{docGenParameters .}}", "${docGenParameters}"},
|
||||
{"{{docGenDescription .}}", "${docGenDescription}"},
|
||||
{"", "${docJenkinsPluginDependencies}"},
|
||||
}
|
||||
for _, c := range cases {
|
||||
if len(c.x) > 0 {
|
||||
assert.Contains(t, content, c.x)
|
||||
}
|
||||
if len(c.y) > 0 {
|
||||
assert.NotContains(t, content, c.y)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestAddContainerContent(t *testing.T) {
|
||||
|
||||
t.Run("Success Case", func(t *testing.T) {
|
||||
|
||||
var m map[string]string = make(map[string]string)
|
||||
addContainerContent(&stepData, m)
|
||||
assert.Equal(t, 7, len(m))
|
||||
|
||||
cases := []struct {
|
||||
x, want string
|
||||
}{
|
||||
{"containerCommand", "command"},
|
||||
{"containerShell", "shell"},
|
||||
{"dockerEnvVars", "envar.name0=envar.value0, envar.name1=envar.value1 <br>param.name2a=param.value2a:\\[envar.name2a=envar.value2a\\] <br>param.name2b=param.value2b:\\[envar.name2b=envar.value2b\\]"},
|
||||
{"dockerImage", "image, image <br>param.name2a=param.value2a:image <br>param.name2b=param.value2b:image"},
|
||||
{"dockerName", "container0, container1 <br>container2a <br>container2b <br>"},
|
||||
{"dockerPullImage", "true"},
|
||||
{"dockerWorkspace", "workingdir, workingdir <br>param.name2a=param.value2a:workingdir <br>param.name2b=param.value2b:workingdir"},
|
||||
}
|
||||
for _, c := range cases {
|
||||
assert.Contains(t, m, c.x)
|
||||
assert.True(t, len(m[c.x]) > 0)
|
||||
assert.True(t, strings.Contains(m[c.x], c.want), fmt.Sprintf("%v:%v", c.x, m[c.x]))
|
||||
}
|
||||
})
|
||||
}
|
||||
func TestAddSidecarContent(t *testing.T) {
|
||||
|
||||
t.Run("Success Case", func(t *testing.T) {
|
||||
|
||||
var m map[string]string = make(map[string]string)
|
||||
addSidecarContent(&stepData, m)
|
||||
assert.Equal(t, 7, len(m))
|
||||
|
||||
cases := []struct {
|
||||
x, want string
|
||||
}{
|
||||
{"sidecarCommand", "command"},
|
||||
{"sidecarEnvVars", "envar.name3=envar.value3"},
|
||||
{"sidecarImage", "image"},
|
||||
{"sidecarName", "sidecar0"},
|
||||
{"sidecarPullImage", "true"},
|
||||
{"sidecarReadyCommand", "readycommand"},
|
||||
{"sidecarWorkspace", "workingdir"},
|
||||
}
|
||||
for _, c := range cases {
|
||||
assert.Contains(t, m, c.x)
|
||||
assert.True(t, len(m[c.x]) > 0)
|
||||
assert.Equal(t, c.want, m[c.x], fmt.Sprintf("%v:%v", c.x, m[c.x]))
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestAddStashContent(t *testing.T) {
|
||||
|
||||
t.Run("Success Case", func(t *testing.T) {
|
||||
|
||||
var m map[string]string = make(map[string]string)
|
||||
addStashContent(&stepData, m)
|
||||
assert.Equal(t, 1, len(m))
|
||||
|
||||
cases := []struct {
|
||||
x, want string
|
||||
}{
|
||||
{"stashContent", "resource0, resource1, resource2"},
|
||||
}
|
||||
for _, c := range cases {
|
||||
assert.Contains(t, m, c.x)
|
||||
assert.True(t, len(m[c.x]) > 0)
|
||||
assert.True(t, strings.Contains(m[c.x], c.want), fmt.Sprintf("%v:%v", c.x, m[c.x]))
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestGetDocuContextDefaults(t *testing.T) {
|
||||
|
||||
t.Run("Success Case", func(t *testing.T) {
|
||||
|
||||
m := getDocuContextDefaults(&stepData)
|
||||
assert.Equal(t, 15, len(m))
|
||||
|
||||
cases := []struct {
|
||||
x, want string
|
||||
}{
|
||||
{"stashContent", "resource0, resource1, resource2"},
|
||||
{"sidecarCommand", "command"},
|
||||
{"sidecarEnvVars", "envar.name3=envar.value3"},
|
||||
{"sidecarImage", "image"},
|
||||
{"sidecarName", "sidecar0"},
|
||||
{"sidecarPullImage", "true"},
|
||||
{"sidecarReadyCommand", "readycommand"},
|
||||
{"sidecarWorkspace", "workingdir"},
|
||||
{"containerCommand", "command"},
|
||||
{"containerShell", "shell"},
|
||||
{"dockerEnvVars", "envar.name0=envar.value0, envar.name1=envar.value1 <br>param.name2a=param.value2a:\\[envar.name2a=envar.value2a\\] <br>param.name2b=param.value2b:\\[envar.name2b=envar.value2b\\]"},
|
||||
{"dockerImage", "image, image <br>param.name2a=param.value2a:image <br>param.name2b=param.value2b:image"},
|
||||
{"dockerName", "container0, container1 <br>container2a <br>container2b <br>"},
|
||||
{"dockerPullImage", "true"},
|
||||
{"dockerWorkspace", "workingdir, workingdir <br>param.name2a=param.value2a:workingdir <br>param.name2b=param.value2b:workingdir"},
|
||||
}
|
||||
for _, c := range cases {
|
||||
assert.Contains(t, m, c.x)
|
||||
assert.True(t, len(m[c.x]) > 0)
|
||||
assert.True(t, strings.Contains(m[c.x], c.want), fmt.Sprintf("%v:%v", c.x, m[c.x]))
|
||||
}
|
||||
})
|
||||
}
|
||||
|
@ -150,7 +150,10 @@ func ProcessMetaFiles(metadataFiles []string, openFile func(s string) (io.ReadCl
|
||||
err = writeFile(fmt.Sprintf("cmd/%v_generated_test.go", stepData.Metadata.Name), test, 0644)
|
||||
checkError(err)
|
||||
} else {
|
||||
generateStepDocumentation(stepData, docuHelperData)
|
||||
err = generateStepDocumentation(stepData, docuHelperData)
|
||||
if err != nil {
|
||||
fmt.Printf("%v\n", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
|
Loading…
x
Reference in New Issue
Block a user