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