aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/internal/testsuite/testsuite.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-10-01 17:00:46 +0900
committerOphestra <cat@gensokyo.uk>2026-10-01 21:44:30 +0900
commit6a144f780ab62a5e6936d8f551dd03f51b11a153 (patch)
treed3bb149739945becd2d0330d678f7ada620953f4 /test/internal/testsuite/testsuite.go
parenta356dceedf0be29ae584866e540872ec1c048f59 (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/testsuite.go')
-rw-r--r--test/internal/testsuite/testsuite.go40
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...)...)
+}