diff options
Diffstat (limited to 'test/internal')
| -rw-r--r-- | test/internal/testsuite/testsuite.go | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/test/internal/testsuite/testsuite.go b/test/internal/testsuite/testsuite.go new file mode 100644 index 00000000..4b70da34 --- /dev/null +++ b/test/internal/testsuite/testsuite.go @@ -0,0 +1,40 @@ +// Package testsuite provides many quick-and-dirty integration testing utilities. +package testsuite + +import ( + "log" + "os" + "os/exec" + "os/signal" + "syscall" +) + +func init() { + log.SetFlags(0) + log.SetPrefix("testsuite: ") + + if os.Geteuid() != 0 { + log.Fatal("this program must run as root") + } +} + +// ReceiveSignals blocks until a termination signal arrives, and terminates. +func ReceiveSignals() { + s := make(chan os.Signal, 3) + signal.Notify(s, os.Interrupt, syscall.SIGTERM, syscall.SIGHUP) + log.Fatalf("terminating on signal %s", <-s) +} + +// MustRun runs command and terminates the testsuite on error. +func MustRun(command ...string) { + cmd := exec.Command(command[0], command[1:]...) + cmd.Stdout, cmd.Stderr = os.Stdout, os.Stderr + if err := cmd.Run(); err != nil { + log.Fatal(err) + } +} + +// MustRunAs wraps [MustRun] for sudo. +func MustRunAs(username string, command ...string) { + MustRun(append([]string{"sudo", "-u", username}, command...)...) +} |
