Improve names and documentation in test code.
This commit is contained in:
parent
ec7e78680d
commit
769415dbd2
|
@ -5,6 +5,7 @@ import (
|
|||
"io/ioutil"
|
||||
"log"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
|
@ -15,50 +16,81 @@ import (
|
|||
"github.com/hashicorp/nomad/nomad/structs"
|
||||
)
|
||||
|
||||
// testBinary is the path to the running test binary
|
||||
var testBinary = os.Args[0]
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
switch os.Getenv("TEST_MAIN") {
|
||||
// The tests in this package recursively execute the test binary produced
|
||||
// by go test. The TEST_MAIN environment variable controls the recursive
|
||||
// execution.
|
||||
switch tm := os.Getenv("TEST_MAIN"); tm {
|
||||
case "":
|
||||
os.Exit(m.Run())
|
||||
case "app":
|
||||
appMain()
|
||||
default:
|
||||
os.Exit(m.Run())
|
||||
fmt.Fprintf(os.Stderr, "unexpected value for TEST_MAIN, \"%s\"\n", tm)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
// setTestAppEnv sets the environement of cmd for a recursive call into
|
||||
// TestMain.
|
||||
func setTestAppEnv(cmd *exec.Cmd) {
|
||||
cmd.Env = append(os.Environ(), "TEST_MAIN=app")
|
||||
}
|
||||
|
||||
func appMain() {
|
||||
if len(os.Args) < 2 {
|
||||
fmt.Fprintln(os.Stderr, "no command provided")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
args := os.Args[1:]
|
||||
shift := func() string {
|
||||
|
||||
// popArg removes the first argument from args and returns it.
|
||||
popArg := func() string {
|
||||
s := args[0]
|
||||
args = args[1:]
|
||||
return s
|
||||
}
|
||||
|
||||
// execute a sequence of operations from args
|
||||
for len(args) > 0 {
|
||||
switch cmd := shift(); cmd {
|
||||
switch cmd := popArg(); cmd {
|
||||
|
||||
case "sleep":
|
||||
// sleep <dur>: sleep for a duration indicated by the first
|
||||
// argument
|
||||
if len(args) < 1 {
|
||||
fmt.Fprintln(os.Stderr, "expected arg for sleep")
|
||||
os.Exit(1)
|
||||
}
|
||||
dur, err := time.ParseDuration(shift())
|
||||
dur, err := time.ParseDuration(popArg())
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "could not parse sleep time: %v", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
time.Sleep(dur)
|
||||
|
||||
case "echo":
|
||||
// echo <msg ...>: write the remaining arguments to stdout each
|
||||
// separated by a single space and followed by a newline.
|
||||
fmt.Println(strings.Join(args, " "))
|
||||
args = args[:0]
|
||||
|
||||
case "write":
|
||||
// write <msg> <file>: write a message to a file. The first
|
||||
// argument is the msg. The second argument is the path to the
|
||||
// target file.
|
||||
if len(args) < 2 {
|
||||
fmt.Fprintln(os.Stderr, "expected two args for write")
|
||||
os.Exit(1)
|
||||
}
|
||||
msg := shift()
|
||||
file := shift()
|
||||
msg := popArg()
|
||||
file := popArg()
|
||||
ioutil.WriteFile(file, []byte(msg), 0666)
|
||||
|
||||
default:
|
||||
fmt.Fprintln(os.Stderr, "unknown command:", cmd)
|
||||
os.Exit(1)
|
||||
|
@ -99,7 +131,7 @@ func testExecutor(t *testing.T, buildExecutor func() Executor, compatible func(*
|
|||
command := func(name string, args ...string) Executor {
|
||||
e := buildExecutor()
|
||||
SetCommand(e, name, args)
|
||||
e.Command().Env = append(os.Environ(), "TEST_MAIN=app")
|
||||
setTestAppEnv(e.Command())
|
||||
return e
|
||||
}
|
||||
|
||||
|
@ -132,7 +164,7 @@ func Executor_Start_Invalid(t *testing.T, command buildExecCommand) {
|
|||
}
|
||||
|
||||
func Executor_Start_Wait_Failure_Code(t *testing.T, command buildExecCommand) {
|
||||
e := command(os.Args[0], "fail")
|
||||
e := command(testBinary, "fail")
|
||||
|
||||
if err := e.Limit(constraint); err != nil {
|
||||
log.Panicf("Limit() failed: %v", err)
|
||||
|
@ -165,7 +197,7 @@ func Executor_Start_Wait(t *testing.T, command buildExecCommand) {
|
|||
expected := "hello world"
|
||||
file := filepath.Join(allocdir.TaskLocal, "output.txt")
|
||||
absFilePath := filepath.Join(taskDir, file)
|
||||
e := command(os.Args[0], "sleep", "1s", "write", expected, file)
|
||||
e := command(testBinary, "sleep", "1s", "write", expected, file)
|
||||
|
||||
if err := e.Limit(constraint); err != nil {
|
||||
log.Panicf("Limit() failed: %v", err)
|
||||
|
@ -204,7 +236,7 @@ func Executor_Start_Kill(t *testing.T, command buildExecCommand) {
|
|||
}
|
||||
|
||||
filePath := filepath.Join(taskDir, "output")
|
||||
e := command(os.Args[0], "sleep", "1s", "write", "failure", filePath)
|
||||
e := command(testBinary, "sleep", "1s", "write", "failure", filePath)
|
||||
|
||||
if err := e.Limit(constraint); err != nil {
|
||||
log.Panicf("Limit() failed: %v", err)
|
||||
|
@ -242,7 +274,7 @@ func Executor_Open(t *testing.T, command buildExecCommand, newExecutor func() Ex
|
|||
expected := "hello world"
|
||||
file := filepath.Join(allocdir.TaskLocal, "output.txt")
|
||||
absFilePath := filepath.Join(taskDir, file)
|
||||
e := command(os.Args[0], "sleep", "1s", "write", expected, file)
|
||||
e := command(testBinary, "sleep", "1s", "write", expected, file)
|
||||
|
||||
if err := e.Limit(constraint); err != nil {
|
||||
log.Panicf("Limit() failed: %v", err)
|
||||
|
|
Loading…
Reference in New Issue