55 "context"
66 "fmt"
77 "io"
8+ "log"
89 "strings"
910 "time"
1011
@@ -13,15 +14,15 @@ import (
1314)
1415
1516type Command struct {
16- Title string `json:"title,omitempty" yaml:"title,omitempty"`
17- Meta meta `json:"meta,omitempty" yaml:"meta,omitempty"`
18- id string `json:"-" yaml:"-"`
19- Exec string `json:"exec,omitempty" yaml:"exec,omitempty"`
20- ExitStatus matcher `json:"exit-status" yaml:"exit-status"`
21- Stdout matcher `json:"stdout" yaml:"stdout"`
22- Stderr matcher `json:"stderr" yaml:"stderr"`
23- Timeout int `json:"timeout" yaml:"timeout"`
24- Skip bool `json:"skip,omitempty" yaml:"skip,omitempty"`
17+ Title string `json:"title,omitempty" yaml:"title,omitempty"`
18+ Meta meta `json:"meta,omitempty" yaml:"meta,omitempty"`
19+ id string `json:"-" yaml:"-"`
20+ Exec util. ExecCommand `json:"exec,omitempty" yaml:"exec,omitempty"`
21+ ExitStatus matcher `json:"exit-status" yaml:"exit-status"`
22+ Stdout matcher `json:"stdout" yaml:"stdout"`
23+ Stderr matcher `json:"stderr" yaml:"stderr"`
24+ Timeout int `json:"timeout" yaml:"timeout"`
25+ Skip bool `json:"skip,omitempty" yaml:"skip,omitempty"`
2526}
2627
2728const (
@@ -41,11 +42,14 @@ func (c *Command) TypeName() string { return CommandResourceName }
4142
4243func (c * Command ) GetTitle () string { return c .Title }
4344func (c * Command ) GetMeta () meta { return c .Meta }
44- func (c * Command ) GetExec () string {
45- if c .Exec != "" {
46- return c .Exec
45+ func (c * Command ) GetExec () any {
46+ if c .Exec .CmdStr != "" {
47+ return c .Exec .CmdStr
48+ } else if len (c .Exec .CmdSlice ) > 0 {
49+ return c .Exec .CmdSlice
50+ } else {
51+ return c .id
4752 }
48- return c .id
4953}
5054
5155func (c * Command ) Validate (sys * system.System ) []TestResult {
@@ -57,24 +61,48 @@ func (c *Command) Validate(sys *system.System) []TestResult {
5761 }
5862
5963 var results []TestResult
60- sysCommand := sys .NewCommand (ctx , c .GetExec (), sys , util.Config {Timeout : time .Duration (c .Timeout ) * time .Millisecond })
61-
62- cExitStatus := deprecateAtoI (c .ExitStatus , fmt .Sprintf ("%s: command.exit-status" , c .ID ()))
63- results = append (results , ValidateValue (c , "exit-status" , cExitStatus , sysCommand .ExitStatus , skip ))
64- if isSet (c .Stdout ) {
65- results = append (results , ValidateValue (c , "stdout" , c .Stdout , sysCommand .Stdout , skip ))
66- }
67- if isSet (c .Stderr ) {
68- results = append (results , ValidateValue (c , "stderr" , c .Stderr , sysCommand .Stderr , skip ))
64+ sysCommand , err := sys .NewCommand (ctx , c .GetExec (), sys , util.Config {Timeout : time .Duration (c .Timeout ) * time .Millisecond })
65+ if err != nil {
66+ log .Printf ("[ERROR] Could not create new command: %v" , err )
67+ startTime := time .Now ()
68+ results = append (
69+ results ,
70+ TestResult {
71+ Result : FAIL ,
72+ ResourceType : "Command" ,
73+ ResourceId : c .id ,
74+ Title : c .Title ,
75+ Meta : c .Meta ,
76+ Property : "type" ,
77+ Err : toValidateError (err ),
78+ StartTime : startTime ,
79+ EndTime : startTime ,
80+ Duration : startTime .Sub (startTime ),
81+ },
82+ )
83+ } else {
84+ cExitStatus := deprecateAtoI (c .ExitStatus , fmt .Sprintf ("%s: command.exit-status" , c .ID ()))
85+ results = append (results , ValidateValue (c , "exit-status" , cExitStatus , sysCommand .ExitStatus , skip ))
86+ if isSet (c .Stdout ) {
87+ results = append (results , ValidateValue (c , "stdout" , c .Stdout , sysCommand .Stdout , skip ))
88+ }
89+ if isSet (c .Stderr ) {
90+ results = append (results , ValidateValue (c , "stderr" , c .Stderr , sysCommand .Stderr , skip ))
91+ }
6992 }
7093 return results
7194}
7295
7396func NewCommand (sysCommand system.Command , config util.Config ) (* Command , error ) {
74- command := sysCommand .Command ()
97+ var id string
98+ if sysCommand .Command ().CmdStr != "" {
99+ id = sysCommand .Command ().CmdStr
100+ } else {
101+ id = sysCommand .Command ().CmdSlice [0 ]
102+ }
75103 exitStatus , err := sysCommand .ExitStatus ()
76104 c := & Command {
77- id : command ,
105+ id : id ,
78106 ExitStatus : exitStatus ,
79107 Stdout : "" ,
80108 Stderr : "" ,
0 commit comments