in tools/functional_test/src/runtest/main.go [155:211]
func doOneTest(index int, test Test, suite Suite, results map[int]string, passing map[int]bool) {
var name string
var msg string
var result string
if len(test.Name) > 0 {
name = fmt.Sprintf("test-%d (%s)", index, test.Name)
} else {
name = fmt.Sprintf("test-%d", index)
}
info(" > %s", name)
recordResult := func(b *string) {
if *b == PASSED {
results[index] = fmt.Sprintf("%s: %s", name, PASSED)
passing[index] = true
} else {
results[index] = fmt.Sprintf("%s: %s", name, FAILED)
passing[index] = false
}
info(" %s", *b)
}
defer recordResult(&result)
args := append([]string{"exec", suite.Target}, test.Command...)
err, stdout, stderr := runCommand("docker", args...)
if err != nil {
if exiterr, ok := err.(*exec.ExitError); ok {
if status, ok := exiterr.Sys().(syscall.WaitStatus); ok {
result = fmt.Sprintf("%s: Exit status %d", FAILED, status.ExitStatus())
}
} else {
result = fmt.Sprintf("%s: Encountered error: %v", FAILED, err)
}
if len(stdout) > 0 {
result = fmt.Sprintf("%s\nSTDOUT>>>%s<<<STDOUT", result, stdout)
}
if len(stderr) > 0 {
result = fmt.Sprintf("%s\nSTDERR>>>%s<<<STDERR", result, stderr)
}
return
}
msg = DoStringAssert(stdout, test.Expect.Stdout)
if len(msg) > 0 {
result = fmt.Sprintf("%s: stdout assertion failure\n%s", FAILED, msg)
return
}
msg = DoStringAssert(stderr, test.Expect.Stderr)
if len(msg) > 0 {
result = fmt.Sprintf("%s: stderr assertion failure\n%s", FAILED, msg)
return
}
result = PASSED
}