aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/pkg/exec_test.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-05-13 17:58:18 +0900
committerOphestra <cat@gensokyo.uk>2026-05-13 17:58:18 +0900
commitf2f17261905e6ea6c686bb490188f86710fd9720 (patch)
tree427aaa81253e469f3fceb0289a35aa97b0e86776 /internal/pkg/exec_test.go
parentf63203cb0a1ed9c1aa74d3608836e3899d8a12d5 (diff)
internal/pkg: record cure faults
These are useful for troubleshooting. This change records them in a separate directory. Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/pkg/exec_test.go')
-rw-r--r--internal/pkg/exec_test.go29
1 files changed, 26 insertions, 3 deletions
diff --git a/internal/pkg/exec_test.go b/internal/pkg/exec_test.go
index cab7a9ca..e6751f0f 100644
--- a/internal/pkg/exec_test.go
+++ b/internal/pkg/exec_test.go
@@ -1,6 +1,7 @@
package pkg_test
import (
+ "bytes"
_ "embed"
"encoding/gob"
"errors"
@@ -112,18 +113,40 @@ func TestExec(t *testing.T) {
})
// check init failure passthrough
- var exitError *exec.ExitError
- if _, _, err := c.Cure(pkg.NewExec(
+ initFailureArtifact := pkg.NewExec(
"", "", nil, 0, false, false,
pkg.AbsWork,
nil,
check.MustAbs("/opt/bin/testtool"),
[]string{"testtool"},
- )); !errors.As(err, &exitError) ||
+ )
+ var exitError *exec.ExitError
+ if _, _, err := c.Cure(initFailureArtifact); !errors.As(err, &exitError) ||
exitError.ExitCode() != hst.ExitFailure {
t.Fatalf("Cure: error = %v, want init exit status 1", err)
}
+ var faultStatus []byte
+ if faults, err := c.ReadFaults(initFailureArtifact); err != nil {
+ t.Fatal(err)
+ } else if len(faults) != 1 {
+ t.Fatalf("ReadFaults: %v", faults)
+ } else if faultStatus, err = os.ReadFile(faults[0].String()); err != nil {
+ t.Fatal(err)
+ } else if err = faults[0].Destroy(); err != nil {
+ t.Fatal(err)
+ } else {
+ t.Logf("destroyed expected fault at %s", faults[0].Time().UTC())
+ }
+
+ if !bytes.HasPrefix(faultStatus, []byte(
+ "internal/pkg ",
+ )) || !bytes.Contains(faultStatus, []byte(
+ "\ninit: fork/exec /opt/bin/testtool: no such file or directory\n",
+ )) {
+ t.Errorf("unexpected status:\n%s", string(faultStatus))
+ }
+
testtoolDestroy(t, base, c)
}, expectsFS{
".": {Mode: fs.ModeDir | 0700},