func doOneTest()

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
}