mirror of https://github.com/helm/helm
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
1.7 KiB
84 lines
1.7 KiB
// build +e2e
|
|
|
|
package e2e
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"os/exec"
|
|
"regexp"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
// Cmd provides helpers for command output
|
|
type Cmd struct {
|
|
t *testing.T
|
|
path string
|
|
args []string
|
|
ran bool
|
|
status error
|
|
stdout, stderr bytes.Buffer
|
|
}
|
|
|
|
func (h *Cmd) String() string {
|
|
return fmt.Sprintf("%s %s", h.path, strings.Join(h.args, " "))
|
|
}
|
|
|
|
func (h *Cmd) exec() error {
|
|
cmd := exec.Command(h.path, h.args...)
|
|
h.stdout.Reset()
|
|
h.stderr.Reset()
|
|
cmd.Stdout = &h.stdout
|
|
cmd.Stderr = &h.stderr
|
|
|
|
h.t.Logf("Executing command: %s", h)
|
|
start := time.Now()
|
|
h.status = cmd.Run()
|
|
h.t.Logf("Finished in %v", time.Since(start))
|
|
|
|
if h.stdout.Len() > 0 {
|
|
h.t.Logf("standard output:\n%s", h.stdout.String())
|
|
}
|
|
if h.stderr.Len() > 0 {
|
|
h.t.Logf("standard error: %s\n", h.stderr.String())
|
|
}
|
|
|
|
h.ran = true
|
|
return h.status
|
|
}
|
|
|
|
// Stdout returns standard output of the Cmd run as a string.
|
|
func (h *Cmd) Stdout() string {
|
|
if !h.ran {
|
|
h.t.Fatal("internal testsuite error: stdout called before run")
|
|
}
|
|
return h.stdout.String()
|
|
}
|
|
|
|
// Stderr returns standard error of the Cmd run as a string.
|
|
func (h *Cmd) Stderr() string {
|
|
if !h.ran {
|
|
h.t.Fatal("internal testsuite error: stdout called before run")
|
|
}
|
|
return h.stderr.String()
|
|
}
|
|
|
|
func (c *Cmd) Match(exp string) bool {
|
|
re := regexp.MustCompile(exp)
|
|
return re.MatchString(c.Stdout())
|
|
}
|
|
|
|
func (h *Cmd) StdoutContains(substring string) bool {
|
|
return strings.Contains(h.Stdout(), substring)
|
|
}
|
|
|
|
func (h *Cmd) StderrContains(substring string) bool {
|
|
return strings.Contains(h.Stderr(), substring)
|
|
}
|
|
|
|
func (h *Cmd) Contains(substring string) bool {
|
|
return h.StdoutContains(substring) || h.StderrContains(substring)
|
|
}
|