forked from SAP/jenkins-library
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcontainerExecuteStructureTests.go
93 lines (83 loc) · 2.92 KB
/
containerExecuteStructureTests.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package cmd
import (
"fmt"
"io"
"os"
"github.com/SAP/jenkins-library/pkg/command"
"github.com/SAP/jenkins-library/pkg/log"
"github.com/SAP/jenkins-library/pkg/piperutils"
"github.com/SAP/jenkins-library/pkg/telemetry"
"github.com/pkg/errors"
)
type containerExecuteStructureTestsUtils interface {
Stdout(out io.Writer)
Stderr(err io.Writer)
RunExecutable(e string, p ...string) error
Glob(pattern string) (matches []string, err error)
}
type containerExecuteStructureTestsUtilsBundle struct {
*command.Command
*piperutils.Files
}
func newContainerExecuteStructureTestsUtils() containerExecuteStructureTestsUtils {
utils := containerExecuteStructureTestsUtilsBundle{
Command: &command.Command{},
Files: &piperutils.Files{},
}
utils.Stdout(log.Writer())
utils.Stderr(log.Writer())
return &utils
}
func containerExecuteStructureTests(config containerExecuteStructureTestsOptions, _ *telemetry.CustomData) {
utils := newContainerExecuteStructureTestsUtils()
err := runContainerExecuteStructureTests(&config, utils)
if err != nil {
log.Entry().WithError(err).Fatal("step execution failed")
}
}
func findConfigFiles(pattern string, utils containerExecuteStructureTestsUtils) ([]string, error) {
files, err := utils.Glob(pattern)
if err != nil {
return nil, err
}
return files, nil
}
func runContainerExecuteStructureTests(config *containerExecuteStructureTestsOptions, utils containerExecuteStructureTestsUtils) error {
containerStructureTestsExecutable := "container-structure-test"
var parameters []string
parameters = append(parameters, "test")
configFiles, err := findConfigFiles(config.TestConfiguration, utils)
if err != nil {
return errors.Wrapf(err, "failed to find config files, error: %v", err)
}
if len(configFiles) == 0 {
log.SetErrorCategory(log.ErrorConfiguration)
return errors.New("config files mustn't be missing")
}
for _, config := range configFiles {
parameters = append(parameters, "--config", config)
}
if config.TestDriver != "" {
if config.TestDriver != "docker" && config.TestDriver != "tar" {
log.SetErrorCategory(log.ErrorConfiguration)
return fmt.Errorf("test driver %s is incorrect. Possible drivers: docker, tar", config.TestDriver)
}
parameters = append(parameters, "--driver", config.TestDriver)
} else if os.Getenv("ON_K8S") == "true" {
parameters = append(parameters, "--driver", "tar")
}
if config.PullImage {
parameters = append(parameters, "--pull")
}
parameters = append(parameters, "--image", config.TestImage)
parameters = append(parameters, "--test-report", config.TestReportFilePath)
if GeneralConfig.Verbose {
parameters = append(parameters, "--verbosity", "debug")
}
err = utils.RunExecutable(containerStructureTestsExecutable, parameters...)
if err != nil {
commandLine := append([]string{containerStructureTestsExecutable}, parameters...)
return errors.Wrapf(err, "failed to run executable, command: '%s', error: %v", commandLine, err)
}
return nil
}