diff options
| author | Ophestra <cat@gensokyo.uk> | 2026-10-01 17:00:46 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2026-10-01 21:44:30 +0900 |
| commit | 6a144f780ab62a5e6936d8f551dd03f51b11a153 (patch) | |
| tree | d3bb149739945becd2d0330d678f7ada620953f4 /test/internal/testsuite | |
| parent | a356dceedf0be29ae584866e540872ec1c048f59 (diff) | |
test/sharefs: migrate tests
This runs tests directly in the container, significantly reducing
overhead introduced by virtualisation.
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'test/internal/testsuite')
| -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...)...) +} |
