summaryrefslogtreecommitdiff
path: root/integrationtests
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-02-21 20:07:10 +0200
committerPaul Buetow <paul@buetow.org>2026-02-21 20:07:10 +0200
commit2f0ac27ec92840cab408e5f5a71d225be070cc0f (patch)
treec1c6e879208b2b35dedc9690ab077bc36cfcd585 /integrationtests
parent5824a1959b27643575c5b1335f211687566b8449 (diff)
Verify harness handles workload crash/nonzero exit (task 343)
Add crash scenario to ioworkload that exits non-zero, and a test verifying the harness returns a clear error mentioning 'workload', reports a valid PID, and returns no records. Amp-Thread-ID: https://ampcode.com/threads/T-019c815e-6fb6-714a-a4db-37522416ea9a Co-authored-by: Amp <amp@ampcode.com>
Diffstat (limited to 'integrationtests')
-rw-r--r--integrationtests/cmd/ioworkload/scenarios.go7
-rw-r--r--integrationtests/harness_test.go23
2 files changed, 30 insertions, 0 deletions
diff --git a/integrationtests/cmd/ioworkload/scenarios.go b/integrationtests/cmd/ioworkload/scenarios.go
index 06e202d..1ca7328 100644
--- a/integrationtests/cmd/ioworkload/scenarios.go
+++ b/integrationtests/cmd/ioworkload/scenarios.go
@@ -11,6 +11,7 @@ import (
// scenarios maps scenario names to their execution functions.
var scenarios = map[string]func() error{
+ "crash": crash,
"open-basic": openBasic,
"open-creat": openCreat,
"open-by-handle-at": openByHandleAt,
@@ -1576,3 +1577,9 @@ func ioUringSetupRing(entries uint32) (int, error) {
}
return int(fd), nil
}
+
+// crash simulates a workload that fails with a non-zero exit code.
+// Used to verify the test harness handles workload failures gracefully.
+func crash() error {
+ return fmt.Errorf("intentional crash for testing")
+}
diff --git a/integrationtests/harness_test.go b/integrationtests/harness_test.go
new file mode 100644
index 0000000..813e9d6
--- /dev/null
+++ b/integrationtests/harness_test.go
@@ -0,0 +1,23 @@
+package integrationtests
+
+import (
+ "strings"
+ "testing"
+)
+
+func TestWorkloadCrashReportsError(t *testing.T) {
+ h := newTestHarness(t)
+ result, pid, err := h.Run("crash", 5)
+ if err == nil {
+ t.Fatal("expected error from crashed workload, got nil")
+ }
+ if pid == 0 {
+ t.Fatal("expected non-zero PID from started workload")
+ }
+ if !strings.Contains(err.Error(), "workload") {
+ t.Errorf("error should mention workload, got: %v", err)
+ }
+ if len(result.Records) != 0 {
+ t.Errorf("expected no records from crashed workload, got %d", len(result.Records))
+ }
+}